Merge "Reorder backlinks indexes"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 10 Apr 2015 18:04:19 +0000 (18:04 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 10 Apr 2015 18:04:19 +0000 (18:04 +0000)
1483 files changed:
.jscsrc
.jshintrc
.rubocop.yml
.rubocop_todo.yml [deleted file]
CREDITS
Gemfile
Gemfile.lock
Gruntfile.js
HISTORY
INSTALL
RELEASE-NOTES-1.25
RELEASE-NOTES-1.26 [new file with mode: 0644]
StartProfiler.sample
api.php
autoload.php
composer.json
docs/extension.schema.json
docs/hooks.txt
docs/kss/package.json
docs/logger.txt [new file with mode: 0644]
docs/mwlogger.txt [deleted file]
docs/sitelist-1.0.xsd [new file with mode: 0644]
docs/sitelist.txt [new file with mode: 0644]
docs/sitescache.txt [new file with mode: 0644]
includes/Block.php
includes/CategoryViewer.php
includes/ChangeTags.php
includes/Collation.php
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/Feed.php
includes/FeedUtils.php
includes/GlobalFunctions.php
includes/Html.php
includes/HttpFunctions.php
includes/Import.php
includes/LinkFilter.php
includes/Linker.php
includes/MediaWiki.php
includes/MediaWikiVersionFetcher.php
includes/Message.php
includes/MessageBlobStore.php
includes/MovePage.php
includes/NoLocalSettings.php [new file with mode: 0644]
includes/OutputPage.php
includes/PHPVersionError.php
includes/Preferences.php
includes/PrefixSearch.php
includes/ProtectionForm.php
includes/Revision.php
includes/Sanitizer.php
includes/Setup.php
includes/SiteStats.php
includes/StatCounter.php [deleted file]
includes/TemplateParser.php [new file with mode: 0644]
includes/Title.php
includes/User.php
includes/UserArray.php
includes/UserRightsProxy.php
includes/WebRequest.php
includes/WebResponse.php
includes/WebStart.php
includes/Xml.php
includes/ZhConversion.php
includes/actions/DeleteAction.php
includes/actions/InfoAction.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiCheckToken.php [new file with mode: 0644]
includes/api/ApiCreateAccount.php
includes/api/ApiEditPage.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiImageRotate.php
includes/api/ApiLogin.php
includes/api/ApiMain.php
includes/api/ApiPageSet.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiProtect.php
includes/api/ApiQuery.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryPrefixSearch.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryTokens.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiStashEdit.php
includes/api/ApiTokens.php
includes/api/ApiUpload.php
includes/api/i18n/ca.json
includes/api/i18n/cs.json
includes/api/i18n/cv.json [new file with mode: 0644]
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/es.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/ln.json [new file with mode: 0644]
includes/api/i18n/nl.json
includes/api/i18n/oc.json [new file with mode: 0644]
includes/api/i18n/pam.json
includes/api/i18n/pl.json
includes/api/i18n/ps.json [new file with mode: 0644]
includes/api/i18n/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/sv.json
includes/api/i18n/tl.json
includes/api/i18n/uk.json
includes/api/i18n/vi.json
includes/api/i18n/zh-hans.json
includes/api/i18n/zh-hant.json
includes/cache/BacklinkCache.php
includes/cache/CacheDependency.php
includes/cache/LocalisationCache.php
includes/cache/MessageCache.php
includes/cache/bloom/BloomCache.php [deleted file]
includes/cache/bloom/BloomCacheRedis.php [deleted file]
includes/cache/bloom/BloomFilters.php [deleted file]
includes/changes/EnhancedChangesList.php
includes/config/ConfigException.php
includes/content/AbstractContent.php
includes/content/Content.php
includes/content/ContentHandler.php
includes/content/JsonContent.php
includes/context/ContextSource.php
includes/context/DerivativeContext.php
includes/context/IContextSource.php
includes/context/RequestContext.php
includes/db/Database.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabaseMysqli.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/DatabaseSqlite.php
includes/db/DatabaseUtility.php
includes/db/LoadBalancer.php
includes/debug/MWDebug.php
includes/debug/logger/Factory.php [deleted file]
includes/debug/logger/LegacyLogger.php [new file with mode: 0644]
includes/debug/logger/LegacySpi.php [new file with mode: 0644]
includes/debug/logger/Logger.php [deleted file]
includes/debug/logger/LoggerFactory.php [new file with mode: 0644]
includes/debug/logger/MonologSpi.php [new file with mode: 0644]
includes/debug/logger/NullSpi.php
includes/debug/logger/Shims.php [new file with mode: 0644]
includes/debug/logger/Spi.php
includes/debug/logger/legacy/Logger.php [deleted file]
includes/debug/logger/legacy/Spi.php [deleted file]
includes/debug/logger/monolog/Handler.php [deleted file]
includes/debug/logger/monolog/LegacyFormatter.php
includes/debug/logger/monolog/LegacyHandler.php [new file with mode: 0644]
includes/debug/logger/monolog/Processor.php [deleted file]
includes/debug/logger/monolog/SamplingHandler.php [deleted file]
includes/debug/logger/monolog/Shims.php [new file with mode: 0644]
includes/debug/logger/monolog/Spi.php [deleted file]
includes/debug/logger/monolog/SyslogHandler.php
includes/debug/logger/monolog/WikiProcessor.php [new file with mode: 0644]
includes/deferred/HTMLCacheUpdate.php
includes/deferred/LinksUpdate.php
includes/deferred/SiteStatsUpdate.php
includes/deferred/SqlDataUpdate.php
includes/diff/DifferenceEngine.php
includes/diff/TableDiffFormatter.php
includes/exception/HttpError.php
includes/exception/MWException.php
includes/exception/MWExceptionHandler.php
includes/externalstore/ExternalStoreHttp.php
includes/filebackend/FSFileBackend.php
includes/filebackend/FileBackendStore.php
includes/filebackend/SwiftFileBackend.php
includes/filerepo/FileRepo.php
includes/filerepo/FileRepoStatus.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/RepoGroup.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/OldLocalFile.php
includes/gallery/TraditionalImageGallery.php
includes/htmlform/HTMLCheckField.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLRadioField.php
includes/htmlform/HTMLTagFilter.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MssqlInstaller.php
includes/installer/MysqlInstaller.php
includes/installer/MysqlUpdater.php
includes/installer/PostgresInstaller.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteInstaller.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstallerPage.php
includes/installer/i18n/ast.json
includes/installer/i18n/bgn.json
includes/installer/i18n/ca.json
includes/installer/i18n/cs.json
includes/installer/i18n/cv.json
includes/installer/i18n/de.json
includes/installer/i18n/en-gb.json
includes/installer/i18n/en.json
includes/installer/i18n/es.json
includes/installer/i18n/et.json
includes/installer/i18n/fa.json
includes/installer/i18n/hi.json
includes/installer/i18n/hu.json
includes/installer/i18n/id.json
includes/installer/i18n/ko.json
includes/installer/i18n/mk.json
includes/installer/i18n/nb.json
includes/installer/i18n/ne.json
includes/installer/i18n/nl.json
includes/installer/i18n/pms.json
includes/installer/i18n/qqq.json
includes/installer/i18n/sr-ec.json
includes/installer/i18n/sr-el.json
includes/installer/i18n/vi.json
includes/installer/i18n/zh-hant.json
includes/jobqueue/Job.php
includes/jobqueue/JobQueue.php
includes/jobqueue/JobQueueDB.php
includes/jobqueue/JobQueueFederated.php
includes/jobqueue/JobQueueGroup.php
includes/jobqueue/JobQueueRedis.php
includes/jobqueue/JobRunner.php
includes/jobqueue/JobSpecification.php
includes/jobqueue/aggregator/JobQueueAggregator.php
includes/jobqueue/aggregator/JobQueueAggregatorMemc.php [deleted file]
includes/jobqueue/aggregator/JobQueueAggregatorRedis.php
includes/jobqueue/jobs/DuplicateJob.php
includes/jobqueue/jobs/EnqueueJob.php [new file with mode: 0755]
includes/jobqueue/jobs/HTMLCacheUpdateJob.php
includes/jobqueue/jobs/NullJob.php
includes/jobqueue/jobs/PublishStashedFileJob.php
includes/jobqueue/jobs/RecentChangesUpdateJob.php
includes/jobqueue/jobs/RefreshLinksJob.php
includes/jobqueue/jobs/ThumbnailRenderJob.php
includes/json/FormatJson.php
includes/libs/BufferingStatsdDataFactory.php [new file with mode: 0644]
includes/libs/XmlTypeCheck.php
includes/libs/composer/ComposerJson.php
includes/libs/normal/Makefile [deleted file]
includes/libs/normal/README [deleted file]
includes/libs/normal/RandomTest.php [deleted file]
includes/libs/normal/UtfNormal.php
includes/libs/normal/UtfNormalBench.php [deleted file]
includes/libs/normal/UtfNormalData.inc [deleted file]
includes/libs/normal/UtfNormalDataK.inc [deleted file]
includes/libs/normal/UtfNormalDefines.php
includes/libs/normal/UtfNormalGenerate.php [deleted file]
includes/libs/normal/UtfNormalMemStress.php [deleted file]
includes/libs/normal/UtfNormalTest.php [deleted file]
includes/libs/normal/UtfNormalTest2.php [deleted file]
includes/libs/normal/UtfNormalUtil.php
includes/libs/objectcache/APCBagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/BagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/EmptyBagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/HashBagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/WinCacheBagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/XCacheBagOStuff.php [new file with mode: 0644]
includes/libs/virtualrest/ParsoidVirtualRESTService.php
includes/libs/virtualrest/RestbaseVirtualRESTService.php [new file with mode: 0644]
includes/logging/BlockLogFormatter.php [new file with mode: 0644]
includes/logging/DeleteLogFormatter.php
includes/logging/LogEntry.php
includes/logging/LogEventsList.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/media/BitmapMetadataHandler.php
includes/media/DjVuImage.php
includes/media/Exif.php
includes/media/ExifBitmap.php
includes/media/GIF.php
includes/media/GIFMetadataExtractor.php
includes/media/IPTC.php
includes/media/ImageHandler.php
includes/media/JpegMetadataExtractor.php
includes/media/MediaHandler.php
includes/media/PNG.php
includes/media/SVG.php
includes/media/XMP.php
includes/mime.info
includes/mime.types
includes/objectcache/APCBagOStuff.php [deleted file]
includes/objectcache/BagOStuff.php [deleted file]
includes/objectcache/EmptyBagOStuff.php [deleted file]
includes/objectcache/HashBagOStuff.php [deleted file]
includes/objectcache/MemcachedBagOStuff.php
includes/objectcache/MultiWriteBagOStuff.php
includes/objectcache/ObjectCache.php
includes/objectcache/ObjectCacheSessionHandler.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/ReplicatedBagOStuff.php [new file with mode: 0644]
includes/objectcache/SqlBagOStuff.php
includes/objectcache/WinCacheBagOStuff.php [deleted file]
includes/objectcache/XCacheBagOStuff.php [deleted file]
includes/page/Article.php
includes/page/CategoryPage.php
includes/page/ImagePage.php
includes/page/WikiPage.php
includes/parser/CacheTime.php
includes/parser/CoreParserFunctions.php
includes/parser/DateFormatter.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/ParserOptions.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor_DOM.php
includes/poolcounter/PoolWorkArticleView.php
includes/profiler/Profiler.php
includes/profiler/ProfilerStub.php
includes/profiler/ProfilerXhprof.php
includes/profiler/TransactionProfiler.php
includes/profiler/output/ProfilerOutputDump.php [new file with mode: 0644]
includes/profiler/output/ProfilerOutputStats.php [new file with mode: 0644]
includes/profiler/output/ProfilerOutputText.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderFilePageModule.php [deleted file]
includes/resourceloader/ResourceLoaderImage.php
includes/resourceloader/ResourceLoaderImageModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderNoscriptModule.php [deleted file]
includes/resourceloader/ResourceLoaderSiteModule.php
includes/resourceloader/ResourceLoaderSkinModule.php
includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php [new file with mode: 0644]
includes/resourceloader/ResourceLoaderUserGroupsModule.php
includes/resourceloader/ResourceLoaderUserModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/revisiondelete/RevDelList.php
includes/revisiondelete/RevDelLogList.php
includes/site/CachingSiteStore.php [new file with mode: 0644]
includes/site/DBSiteStore.php [new file with mode: 0644]
includes/site/FileBasedSiteLookup.php [new file with mode: 0644]
includes/site/HashSiteStore.php [new file with mode: 0644]
includes/site/MediaWikiSite.php
includes/site/SiteExporter.php [new file with mode: 0644]
includes/site/SiteImporter.php [new file with mode: 0644]
includes/site/SiteListFileCache.php [deleted file]
includes/site/SiteListFileCacheBuilder.php [deleted file]
includes/site/SiteLookup.php [new file with mode: 0644]
includes/site/SiteSQLStore.php
includes/site/SiteStore.php
includes/site/SitesCacheFileBuilder.php [new file with mode: 0644]
includes/skins/BaseTemplate.php
includes/skins/Skin.php
includes/skins/SkinFallbackTemplate.php
includes/skins/SkinTemplate.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/FormSpecialPage.php
includes/specialpage/QueryPage.php
includes/specialpage/SpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialAllMessages.php
includes/specials/SpecialAllPages.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialDiff.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialExpandTemplates.php
includes/specials/SpecialExport.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialImport.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialLog.php
includes/specials/SpecialMediaStatistics.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialMyLanguage.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialRandomInCategory.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialRunJobs.php
includes/specials/SpecialSearch.php
includes/specials/SpecialSpecialpages.php
includes/specials/SpecialStatistics.php
includes/specials/SpecialTags.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWantedpages.php
includes/specials/SpecialWhatlinkshere.php
includes/templates/NoLocalSettings.mustache [new file with mode: 0644]
includes/templates/NoLocalSettings.php [deleted file]
includes/templates/Usercreate.php
includes/title/MediaWikiTitleCodec.php
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
includes/upload/UploadFromUrl.php
includes/upload/UploadStash.php
includes/utils/AutoloadGenerator.php
jsduck.json [new file with mode: 0644]
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageJa.php
languages/classes/LanguageZh.php
languages/i18n/ace.json
languages/i18n/af.json
languages/i18n/am.json
languages/i18n/an.json
languages/i18n/ang.json
languages/i18n/ar.json
languages/i18n/arc.json
languages/i18n/arq.json
languages/i18n/ary.json
languages/i18n/arz.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/avk.json
languages/i18n/awa.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/bar.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bgn.json
languages/i18n/bho.json
languages/i18n/bjn.json
languages/i18n/bn.json
languages/i18n/bpy.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/cu.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fo.json
languages/i18n/fr.json
languages/i18n/frc.json
languages/i18n/frp.json
languages/i18n/frr.json
languages/i18n/fur.json
languages/i18n/fy.json
languages/i18n/ga.json
languages/i18n/gan-hans.json
languages/i18n/gan-hant.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/grc.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/gv.json
languages/i18n/haw.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hr.json
languages/i18n/hsb.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ie.json
languages/i18n/ig.json
languages/i18n/ilo.json
languages/i18n/inh.json
languages/i18n/io.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kab.json
languages/i18n/kiu.json
languages/i18n/kk-arab.json
languages/i18n/kk-cyrl.json
languages/i18n/kk-latn.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/ky.json
languages/i18n/la.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/lez.json
languages/i18n/lfn.json
languages/i18n/li.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mai.json
languages/i18n/mdf.json
languages/i18n/mg.json
languages/i18n/min.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/myv.json
languages/i18n/mzn.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nds.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/oc.json
languages/i18n/or.json
languages/i18n/os.json
languages/i18n/pa.json
languages/i18n/pam.json
languages/i18n/pdc.json
languages/i18n/pfl.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/prg.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/qu.json
languages/i18n/rm.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sa.json
languages/i18n/sah.json
languages/i18n/sc.json
languages/i18n/scn.json
languages/i18n/sco.json
languages/i18n/ses.json
languages/i18n/sh.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/stq.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/szl.json
languages/i18n/ta.json
languages/i18n/tcy.json
languages/i18n/te.json
languages/i18n/tet.json
languages/i18n/tg-cyrl.json
languages/i18n/tg-latn.json
languages/i18n/th.json
languages/i18n/tk.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/tt-latn.json
languages/i18n/tw.json
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/uz.json
languages/i18n/vec.json
languages/i18n/vep.json
languages/i18n/vi.json
languages/i18n/vo.json
languages/i18n/vro.json
languages/i18n/wa.json
languages/i18n/war.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/zea.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesArc.php
languages/messages/MessagesAz.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBgn.php
languages/messages/MessagesCe.php
languages/messages/MessagesCkb.php
languages/messages/MessagesDe.php
languages/messages/MessagesDv.php
languages/messages/MessagesFa.php
languages/messages/MessagesHe.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKs_arab.php
languages/messages/MessagesLrc.php
languages/messages/MessagesMhr.php
languages/messages/MessagesMin.php
languages/messages/MessagesMzn.php
languages/messages/MessagesNds.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesUr.php
load.php
maintenance/Doxyfile
maintenance/Maintenance.php
maintenance/archives/patch-editsummary-length.sql [new file with mode: 0644]
maintenance/archives/patch-user-newtalk-userid-unsigned.sql [new file with mode: 0644]
maintenance/backupTextPass.inc
maintenance/benchmarks/bench_HTTP_HTTPS.php
maintenance/cleanupUploadStash.php
maintenance/convertExtensionToRegistration.php
maintenance/doMaintenance.php
maintenance/dumpSisterSites.php [deleted file]
maintenance/dumpTextPass.php
maintenance/eval.php
maintenance/exportSites.php [new file with mode: 0644]
maintenance/findHooks.php
maintenance/fixUserRegistration.php
maintenance/importImages.inc
maintenance/importSiteScripts.php
maintenance/importSites.php [new file with mode: 0644]
maintenance/jsduck/CustomTags.rb [deleted file]
maintenance/jsduck/categories.json
maintenance/jsduck/config.json [deleted file]
maintenance/jsduck/custom_tags.rb [new file with mode: 0644]
maintenance/jsduck/eg-iframe.html
maintenance/language/generateCollationData.php
maintenance/language/generateNormalizerDataAr.php
maintenance/language/generateNormalizerDataMl.php
maintenance/language/generateUtf8Case.php
maintenance/language/zhtable/Makefile.py
maintenance/language/zhtable/README
maintenance/language/zhtable/simp2trad.manual
maintenance/language/zhtable/simp2trad_noconvert.manual
maintenance/language/zhtable/simpphrases.manual
maintenance/language/zhtable/simpphrases_exclude.manual
maintenance/language/zhtable/symme_supp.manual [new file with mode: 0644]
maintenance/language/zhtable/toCN.manual
maintenance/language/zhtable/toHK.manual
maintenance/language/zhtable/toSG.manual [deleted file]
maintenance/language/zhtable/toSimp.manual
maintenance/language/zhtable/toTW.manual
maintenance/language/zhtable/toTrad.manual
maintenance/language/zhtable/trad2simp.manual
maintenance/language/zhtable/trad2simp_noconvert.manual
maintenance/language/zhtable/tradphrases.manual
maintenance/language/zhtable/tradphrases_exclude.manual
maintenance/mergeMessageFileList.php
maintenance/mwdocgen.php
maintenance/mwjsduck-gen
maintenance/populateBloomCache.php [deleted file]
maintenance/rebuildLocalisationCache.php
maintenance/rebuildSitesCache.php
maintenance/refreshLinks.php
maintenance/resources/update-oojs-ui.sh
maintenance/runJobs.php
maintenance/showJobs.php
maintenance/sqlite.inc
maintenance/sqlite.php
maintenance/sqlite/archives/patch-editsummary-length.sql [new file with mode: 0644]
maintenance/storage/recompressTracked.php
maintenance/tables.sql
maintenance/update.php
mw-config/overrides.php
package.json
resources/Resources.php
resources/lib/jquery.client/AUTHORS.txt [new file with mode: 0644]
resources/lib/jquery.client/LICENSE-MIT.txt [new file with mode: 0644]
resources/lib/jquery.client/README.md [new file with mode: 0644]
resources/lib/jquery.client/jquery.client.js [new file with mode: 0644]
resources/lib/mustache/mustache.js [new file with mode: 0644]
resources/lib/oojs-ui/i18n/af.json
resources/lib/oojs-ui/i18n/fa.json
resources/lib/oojs-ui/i18n/hi.json
resources/lib/oojs-ui/i18n/is.json
resources/lib/oojs-ui/i18n/kk-cyrl.json
resources/lib/oojs-ui/i18n/kn.json
resources/lib/oojs-ui/i18n/krc.json
resources/lib/oojs-ui/i18n/ksh.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/ne.json
resources/lib/oojs-ui/i18n/pa.json
resources/lib/oojs-ui/i18n/tr.json
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css [new file with mode: 0644]
resources/lib/oojs-ui/oojs-ui-mediawiki.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css [deleted file]
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.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-warning.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/block.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/block.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/check.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png
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.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/info.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/language.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-invert.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.svg [new file with mode: 0644]
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.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/star.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/star.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.svg [new file with mode: 0644]
resources/lib/oojs/oojs.jquery.js
resources/src/jquery/jquery.badge.js
resources/src/jquery/jquery.client.js [deleted file]
resources/src/jquery/jquery.confirmable.js
resources/src/jquery/jquery.confirmable.mediawiki.js
resources/src/jquery/jquery.getAttrs.js
resources/src/jquery/jquery.makeCollapsible.css
resources/src/jquery/jquery.suggestions.js
resources/src/jquery/jquery.tablesorter.js
resources/src/jquery/jquery.textSelection.js
resources/src/mediawiki.action/mediawiki.action.edit.preview.js
resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less [new file with mode: 0644]
resources/src/mediawiki.api/mediawiki.api.options.js [new file with mode: 0644]
resources/src/mediawiki.language/languages/fi.js
resources/src/mediawiki.language/languages/hsb.js
resources/src/mediawiki.language/languages/hy.js
resources/src/mediawiki.language/languages/os.js
resources/src/mediawiki.language/mediawiki.language.js
resources/src/mediawiki.language/mediawiki.language.numbers.js
resources/src/mediawiki.language/specialcharacters.json [new file with mode: 0644]
resources/src/mediawiki.legacy/ajax.js
resources/src/mediawiki.legacy/protect.js
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.legacy/wikibits.js
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.less/mediawiki.ui/mixins.less
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js [new file with mode: 0644]
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js [new file with mode: 0644]
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js [new file with mode: 0644]
resources/src/mediawiki.page/mediawiki.page.image.pagination.js
resources/src/mediawiki.page/mediawiki.page.startup.js
resources/src/mediawiki.skinning/content.css
resources/src/mediawiki.skinning/elements.css
resources/src/mediawiki.special/mediawiki.special.block.js
resources/src/mediawiki.special/mediawiki.special.changeslist.css
resources/src/mediawiki.special/mediawiki.special.preferences.js
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki.ui/components/inputs.less
resources/src/mediawiki/images/help.png [new file with mode: 0644]
resources/src/mediawiki/images/help.svg [new file with mode: 0644]
resources/src/mediawiki/mediawiki.Title.js
resources/src/mediawiki/mediawiki.errorLogger.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.feedback.css
resources/src/mediawiki/mediawiki.feedback.js
resources/src/mediawiki/mediawiki.filewarning.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.filewarning.less [new file with mode: 0644]
resources/src/mediawiki/mediawiki.helplink.less [new file with mode: 0644]
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.sectionAnchor.css [new file with mode: 0644]
resources/src/mediawiki/mediawiki.template.mustache.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.user.js
resources/src/mediawiki/mediawiki.util.js
resources/src/mediawiki/templates/dialog.html [deleted file]
tests/TestsAutoLoader.php
tests/browser/environment_variables [deleted file]
tests/browser/environments.yml [new file with mode: 0644]
tests/browser/features/file.feature
tests/browser/features/login.feature
tests/browser/features/preferences.feature
tests/browser/features/step_definitions/create_account_steps.rb
tests/browser/features/step_definitions/create_and_follow_wiki_link_steps.rb
tests/browser/features/step_definitions/edit_page_steps.rb
tests/browser/features/step_definitions/file_steps.rb
tests/browser/features/step_definitions/login_steps.rb
tests/browser/features/step_definitions/main_page_links_steps.rb
tests/browser/features/step_definitions/preferences_appearance_steps.rb
tests/browser/features/step_definitions/preferences_editing_steps.rb
tests/browser/features/step_definitions/preferences_user_profile_steps.rb
tests/browser/features/step_definitions/view_history_steps.rb
tests/browser/features/support/env.rb
tests/browser/features/support/modules/url_module.rb [deleted file]
tests/browser/features/support/pages/create_account_page.rb
tests/browser/features/support/pages/edit_page.rb
tests/browser/features/support/pages/file_does_not_exist_page.rb
tests/browser/features/support/pages/login_error_page.rb
tests/browser/features/support/pages/main_page.rb
tests/browser/features/support/pages/preferences_appearance_page.rb
tests/browser/features/support/pages/preferences_editing_page.rb
tests/browser/features/support/pages/preferences_page.rb
tests/browser/features/support/pages/preferences_user_profile_page.rb
tests/browser/features/support/pages/view_history_page.rb
tests/browser/features/support/pages/ztargetpage.rb
tests/parser/ParserTestResult.php
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/parser/parserTestsParserHook.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/ResourceLoaderTestCase.php
tests/phpunit/data/helpers/WellProtectedClass.php [new file with mode: 0644]
tests/phpunit/data/normal/UTF-8-test.txt [deleted file]
tests/phpunit/data/resourceloader/add.gif [new file with mode: 0644]
tests/phpunit/data/resourceloader/bold-a.svg [new file with mode: 0644]
tests/phpunit/data/resourceloader/bold-b.svg [new file with mode: 0644]
tests/phpunit/data/resourceloader/bold-f.svg [new file with mode: 0644]
tests/phpunit/data/resourceloader/help-ltr.svg [new file with mode: 0644]
tests/phpunit/data/resourceloader/help-rtl.svg [new file with mode: 0644]
tests/phpunit/data/resourceloader/next.svg [new file with mode: 0644]
tests/phpunit/data/resourceloader/next_massage.svg [new file with mode: 0644]
tests/phpunit/data/resourceloader/prev.svg [new file with mode: 0644]
tests/phpunit/data/resourceloader/remove.svg [new file with mode: 0644]
tests/phpunit/data/resourceloader/remove_variantize.svg [new file with mode: 0644]
tests/phpunit/data/templates/foobar.mustache [new file with mode: 0644]
tests/phpunit/data/templates/foobar_args.mustache [new file with mode: 0644]
tests/phpunit/data/xmp/doctype-included.result.php [new file with mode: 0644]
tests/phpunit/data/xmp/doctype-included.xmp [new file with mode: 0644]
tests/phpunit/data/xmp/doctype-not-included.xmp [new file with mode: 0644]
tests/phpunit/includes/EditPageTest.php
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/GlobalFunctions/wfEscapeShellArgTest.php [new file with mode: 0644]
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/HttpTest.php
tests/phpunit/includes/MediaWikiVersionFetcherTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/PrefixSearchTest.php
tests/phpunit/includes/SampleTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/TemplateParserTest.php [new file with mode: 0644]
tests/phpunit/includes/TestingAccessWrapper.php [new file with mode: 0644]
tests/phpunit/includes/TestingAccessWrapperTest.php [new file with mode: 0644]
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/XmlTest.php
tests/phpunit/includes/actions/ActionTest.php
tests/phpunit/includes/api/ApiLoginTest.php
tests/phpunit/includes/api/ApiMainTest.php
tests/phpunit/includes/api/ApiTestCaseUpload.php
tests/phpunit/includes/api/ApiUploadTest.php
tests/phpunit/includes/api/query/ApiQueryTestBase.php
tests/phpunit/includes/cache/RedisBloomCacheTest.php [deleted file]
tests/phpunit/includes/changes/EnhancedChangesListTest.php
tests/phpunit/includes/changes/OldChangesListTest.php
tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php
tests/phpunit/includes/changes/RecentChangeTest.php
tests/phpunit/includes/changes/TestRecentChangesHelper.php
tests/phpunit/includes/composer/ComposerVersionNormalizerTest.php
tests/phpunit/includes/content/ContentHandlerTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/db/ORMRowTest.php
tests/phpunit/includes/db/ORMTableTest.php
tests/phpunit/includes/db/TestORMRowTest.php
tests/phpunit/includes/debug/logging/LegacyLoggerTest.php [new file with mode: 0644]
tests/phpunit/includes/debug/logging/legacy/LoggerTest.php [deleted file]
tests/phpunit/includes/deferred/SearchUpdateTest.php
tests/phpunit/includes/diff/ArrayDiffFormatterTest.php
tests/phpunit/includes/diff/DiffOpTest.php
tests/phpunit/includes/diff/DiffTest.php
tests/phpunit/includes/diff/DifferenceEngineTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/filerepo/file/LocalFileTest.php
tests/phpunit/includes/json/FormatJsonTest.php
tests/phpunit/includes/libs/GenericArrayObjectTest.php
tests/phpunit/includes/libs/XmlTypeCheckTest.php
tests/phpunit/includes/libs/normal/CleanUpTest.php [deleted file]
tests/phpunit/includes/libs/normal/Utf8Test.php [deleted file]
tests/phpunit/includes/media/XMPTest.php
tests/phpunit/includes/objectcache/BagOStuffTest.php
tests/phpunit/includes/parser/MagicVariableTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/parser/ParserMethodsTest.php
tests/phpunit/includes/parser/ParserOutputTest.php
tests/phpunit/includes/parser/TagHooksTest.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/registration/ExtensionRegistryTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php
tests/phpunit/includes/site/CachingSiteStoreTest.php [new file with mode: 0644]
tests/phpunit/includes/site/DBSiteStoreTest.php [new file with mode: 0644]
tests/phpunit/includes/site/FileBasedSiteLookupTest.php [new file with mode: 0644]
tests/phpunit/includes/site/HashSiteStoreTest.php [new file with mode: 0644]
tests/phpunit/includes/site/MediaWikiSiteTest.php
tests/phpunit/includes/site/SiteExporterTest.php [new file with mode: 0644]
tests/phpunit/includes/site/SiteImporterTest.php [new file with mode: 0644]
tests/phpunit/includes/site/SiteImporterTest.xml [new file with mode: 0644]
tests/phpunit/includes/site/SiteListFileCacheBuilderTest.php [deleted file]
tests/phpunit/includes/site/SiteListFileCacheTest.php [deleted file]
tests/phpunit/includes/site/SiteListTest.php
tests/phpunit/includes/site/SiteSQLStoreTest.php
tests/phpunit/includes/site/SiteTest.php
tests/phpunit/includes/site/SitesCacheFileBuilderTest.php [new file with mode: 0644]
tests/phpunit/includes/site/TestSites.php
tests/phpunit/includes/skins/SkinTemplateTest.php
tests/phpunit/includes/specialpage/SpecialPageTest.php
tests/phpunit/includes/specials/SpecialPreferencesTest.php
tests/phpunit/includes/title/ForeignTitleTest.php
tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
tests/phpunit/includes/title/NaiveForeignTitleFactoryTest.php
tests/phpunit/includes/title/NaiveImportTitleFactoryTest.php
tests/phpunit/includes/title/NamespaceAwareForeignTitleFactoryTest.php
tests/phpunit/includes/title/NamespaceImportTitleFactoryTest.php
tests/phpunit/includes/title/SubpageImportTitleFactoryTest.php
tests/phpunit/includes/title/TitleValueTest.php
tests/phpunit/includes/upload/UploadBaseTest.php
tests/phpunit/includes/utils/UIDGeneratorTest.php
tests/phpunit/languages/SpecialPageAliasTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/phpunit.php
tests/phpunit/structure/AutoLoaderTest.php
tests/phpunit/structure/AvailableRightsTest.php [new file with mode: 0644]
tests/phpunit/structure/ResourcesTest.php
tests/qunit/QUnitTestResources.php
tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js
tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js
tests/qunit/suites/resources/jquery/jquery.client.test.js [deleted file]
tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js [new file with mode: 0644]
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
thumb.php

diff --git a/.jscsrc b/.jscsrc
index 34b2435..98b81db 100644 (file)
--- a/.jscsrc
+++ b/.jscsrc
@@ -1,12 +1,7 @@
 {
        "preset": "wikimedia",
 
-       "disallowKeywordsOnNewLine": null,
        "disallowQuotedKeysInObjects": null,
-       "disallowImplicitTypeConversion": null,
-       "requireLineBreakAfterVariableAssignment": null,
-       "requireSpaceAfterLineComment": null,
        "requireSpacesInsideParentheses": null,
-       "requireSpacesInsideArrayBrackets": null,
-       "validateIndentation": null
+       "requireSpacesInsideArrayBrackets": null
 }
index 92c8c43..4bb2440 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -20,7 +20,9 @@
 
        "globals": {
                "mediaWiki": true,
+               "JSON": true,
                "jQuery": false,
-               "QUnit": false
+               "QUnit": false,
+               "sinon": false
        }
 }
index 00479d1..61ffc1a 100644 (file)
@@ -1,8 +1,25 @@
-inherit_from: .rubocop_todo.yml
-
 AllCops:
-    Exclude:
-        - 'extensions/**/*'
-        - 'skins/**/*'
-        - 'tests/frontend/node_modules/**/*'
-        - 'vendor/**/*'
+  Exclude:
+    - 'extensions/**/*'
+    - 'skins/**/*'
+    - 'tests/frontend/node_modules/**/*'
+    - 'vendor/**/*'
+  StyleGuideCopsOnly: true
+
+Metrics/LineLength:
+  Max: 100
+
+Metrics/MethodLength:
+  Enabled: false
+
+Style/Alias:
+  Enabled: false
+
+Style/SignalException:
+  Enabled: false
+
+Style/StringLiterals:
+  EnforcedStyle: single_quotes
+
+Style/TrivialAccessors:
+  ExactNameMatch: true
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
deleted file mode 100644 (file)
index f0702ba..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-# This configuration was generated by `rubocop --auto-gen-config`
-# on 2014-10-21 15:10:03 +0200 using RuboCop version 0.26.1.
-# The point is for the user to remove these configuration records
-# one by one as the offenses are removed from the code base.
-# Note that changes in the inspected code, or installation of new
-# versions of RuboCop, may require this file to be generated again.
-
-# Offense count: 1
-Lint/AmbiguousRegexpLiteral:
-  Enabled: false
-
-# Offense count: 2
-# Cop supports --auto-correct.
-Lint/UnusedMethodArgument:
-  Enabled: false
-
-# Offense count: 19
-# Configuration parameters: AllowURI, URISchemes.
-Metrics/LineLength:
-  Max: 94
-
-# Offense count: 10
-Style/Documentation:
-  Enabled: false
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/EmptyLines:
-  Enabled: false
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/EmptyLinesAroundBody:
-  Enabled: false
-
-# Offense count: 1
-# Configuration parameters: Exclude.
-Style/FileName:
-  Enabled: false
-
-# Offense count: 8
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-Style/HashSyntax:
-  Enabled: false
-
-# Offense count: 2
-# Cop supports --auto-correct.
-Style/LeadingCommentSpace:
-  Enabled: false
-
-# Offense count: 4
-# Cop supports --auto-correct.
-Style/PerlBackrefs:
-  Enabled: false
-
-# Offense count: 4
-# Cop supports --auto-correct.
-Style/SpaceAroundOperators:
-  Enabled: false
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
-Style/SpaceInsideBlockBraces:
-  Enabled: true
-
-# Offense count: 6
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles.
-Style/SpaceInsideHashLiteralBraces:
-  Enabled: false
-
-# Offense count: 89
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-Style/StringLiterals:
-  Enabled: false
-
-# Offense count: 11
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-Style/TrailingBlankLines:
-  Enabled: false
diff --git a/CREDITS b/CREDITS
index f58fabb..49616a3 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -1,6 +1,6 @@
 {{int:version-credits-summary}}
 <!--
-MediaWiki 1.25 is a collaborative project released under the
+MediaWiki 1.26 is a collaborative project released under the
 GNU General Public License v2. We would like to recognize the
 following names for their contribution to the product.
 -->
@@ -56,6 +56,7 @@ following names for their contribution to the product.
 * Marius Hoch
 * Matěj Grabovský
 * Matt Johnston
+* Matthew Flaschen
 * Max Semenik
 * Meno25
 * MinuteElectron
diff --git a/Gemfile b/Gemfile
index 1559d0e..6f9c053 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -1,8 +1,7 @@
-#ruby=ruby-2.1.2
-#ruby-gemset=core
+# ruby=ruby-2.1.2
+# ruby-gemset=core
 
-source "https://rubygems.org"
+source 'https://rubygems.org'
 
-gem "mediawiki_api"
-gem "mediawiki_selenium"
-gem "rubocop", require: false
+gem 'mediawiki_selenium', '~> 1.0.1'
+gem 'rubocop', require: false
index 0dc4500..0b360ae 100644 (file)
@@ -5,39 +5,39 @@ GEM
     astrolabe (1.3.0)
       parser (>= 2.2.0.pre.3, < 3.0)
     builder (3.2.2)
-    childprocess (0.5.3)
+    childprocess (0.5.5)
       ffi (~> 1.0, >= 1.0.11)
-    cucumber (1.3.16)
+    cucumber (1.3.19)
       builder (>= 2.1.2)
       diff-lcs (>= 1.1.3)
       gherkin (~> 2.12)
       multi_json (>= 1.7.5, < 2.0)
-      multi_test (>= 0.1.1)
-    data_magic (0.19)
+      multi_test (>= 0.1.2)
+    data_magic (0.20)
       faker (>= 1.1.2)
-      yml_reader (>= 0.3)
+      yml_reader (>= 0.4)
     diff-lcs (1.2.5)
-    domain_name (0.5.20)
+    domain_name (0.5.23)
       unf (>= 0.0.5, < 1.0.0)
     faker (1.4.3)
       i18n (~> 0.5)
-    faraday (0.9.0)
+    faraday (0.9.1)
       multipart-post (>= 1.2, < 3)
     faraday-cookie_jar (0.0.6)
       faraday (>= 0.7.4)
       http-cookie (~> 1.0.0)
-    ffi (1.9.3)
+    ffi (1.9.6)
     gherkin (2.12.2)
       multi_json (~> 1.3)
     headless (1.0.2)
     http-cookie (1.0.2)
       domain_name (~> 0.5)
-    i18n (0.6.11)
-    json (1.8.1)
-    mediawiki_api (0.2.1)
+    i18n (0.7.0)
+    json (1.8.2)
+    mediawiki_api (0.3.1)
       faraday (~> 0.9, >= 0.9.0)
       faraday-cookie_jar (~> 0.0, >= 0.0.6)
-    mediawiki_selenium (0.3.2)
+    mediawiki_selenium (1.0.1)
       cucumber (~> 1.3, >= 1.3.10)
       headless (~> 1.0, >= 1.0.1)
       json (~> 1.8, >= 1.8.1)
@@ -46,54 +46,53 @@ GEM
       rest-client (~> 1.6, >= 1.6.7)
       rspec-expectations (~> 2.14, >= 2.14.4)
       syntax (~> 1.2, >= 1.2.0)
-    mime-types (2.3)
-    multi_json (1.10.1)
-    multi_test (0.1.1)
+      thor (~> 0.19, >= 0.19.1)
+    mime-types (2.4.3)
+    multi_json (1.11.0)
+    multi_test (0.1.2)
     multipart-post (2.0.0)
-    netrc (0.7.7)
-    page-object (1.0.2)
+    netrc (0.10.3)
+    page-object (1.0.3)
       page_navigation (>= 0.9)
-      selenium-webdriver (>= 2.42.0)
-      watir-webdriver (>= 0.6.9)
+      selenium-webdriver (>= 2.44.0)
+      watir-webdriver (>= 0.6.11)
     page_navigation (0.9)
       data_magic (>= 0.14)
-    parser (2.2.0.pre.4)
+    parser (2.2.0.3)
       ast (>= 1.1, < 3.0)
-      slop (~> 3.4, >= 3.4.5)
-    powerpack (0.0.9)
+    powerpack (0.1.0)
     rainbow (2.0.0)
-    rest-client (1.7.2)
+    rest-client (1.7.3)
       mime-types (>= 1.16, < 3.0)
       netrc (~> 0.7)
     rspec-expectations (2.99.2)
       diff-lcs (>= 1.1.3, < 2.0)
-    rubocop (0.26.1)
+    rubocop (0.29.1)
       astrolabe (~> 1.3)
-      parser (>= 2.2.0.pre.4, < 3.0)
-      powerpack (~> 0.0.6)
+      parser (>= 2.2.0.1, < 3.0)
+      powerpack (~> 0.1)
       rainbow (>= 1.99.1, < 3.0)
       ruby-progressbar (~> 1.4)
-    ruby-progressbar (1.6.0)
-    rubyzip (1.1.6)
-    selenium-webdriver (2.42.0)
-      childprocess (>= 0.5.0)
+    ruby-progressbar (1.7.1)
+    rubyzip (1.1.7)
+    selenium-webdriver (2.45.0)
+      childprocess (~> 0.5)
       multi_json (~> 1.0)
       rubyzip (~> 1.0)
-      websocket (~> 1.0.4)
-    slop (3.6.0)
+      websocket (~> 1.0)
     syntax (1.2.0)
+    thor (0.19.1)
     unf (0.1.4)
       unf_ext
     unf_ext (0.0.6)
-    watir-webdriver (0.6.10)
-      selenium-webdriver (>= 2.18.0)
-    websocket (1.0.7)
-    yml_reader (0.3)
+    watir-webdriver (0.7.0)
+      selenium-webdriver (>= 2.45)
+    websocket (1.2.1)
+    yml_reader (0.5)
 
 PLATFORMS
   ruby
 
 DEPENDENCIES
-  mediawiki_api
-  mediawiki_selenium
+  mediawiki_selenium (~> 1.0.1)
   rubocop
index e432279..573db69 100644 (file)
@@ -1,5 +1,6 @@
 /*jshint node:true */
 module.exports = function ( grunt ) {
+       grunt.loadNpmTasks( 'grunt-contrib-copy' );
        grunt.loadNpmTasks( 'grunt-contrib-jshint' );
        grunt.loadNpmTasks( 'grunt-contrib-watch' );
        grunt.loadNpmTasks( 'grunt-banana-checker' );
@@ -75,7 +76,9 @@ module.exports = function ( grunt ) {
                                frameworks: [ 'qunit' ],
                                reporters: [ 'dots' ],
                                singleRun: true,
-                               autoWatch: false
+                               autoWatch: false,
+                               // Some tests in extensions don't yield for more than the default 10s (T89075)
+                               browserNoActivityTimeout: 60 * 1000
                        },
                        main: {
                                browsers: [ 'Chrome' ]
@@ -83,11 +86,34 @@ module.exports = function ( grunt ) {
                        more: {
                                browsers: [ 'Chrome', 'Firefox' ]
                        }
+               },
+               copy: {
+                       jsduck: {
+                               src: 'resources/**/*',
+                               dest: 'docs/js/modules',
+                               expand: true,
+                               rename: function ( dest, src ) {
+                                       return require( 'path' ).join( dest, src.replace( 'resources/', '' ) );
+                               }
+                       }
+               }
+       } );
+
+       grunt.registerTask( 'assert-mw-env', function () {
+               if ( !process.env.MW_SERVER ) {
+                       grunt.log.error( 'Environment variable MW_SERVER must be set.\n' +
+                               'Set this like $wgServer, e.g. "http://localhost"'
+                       );
+               }
+               if ( !process.env.MW_SCRIPT_PATH ) {
+                       grunt.log.error( 'Environment variable MW_SCRIPT_PATH must be set.\n' +
+                               'Set this like $wgScriptPath, e.g. "/w"');
                }
+               return !!( process.env.MW_SERVER && process.env.MW_SCRIPT_PATH );
        } );
 
        grunt.registerTask( 'lint', ['jshint', 'jscs', 'jsonlint', 'banana'] );
-       grunt.registerTask( 'qunit', 'karma:main' );
+       grunt.registerTask( 'qunit', [ 'assert-mw-env', 'karma:main' ] );
 
        grunt.registerTask( 'test', ['lint'] );
        grunt.registerTask( 'default', 'test' );
diff --git a/HISTORY b/HISTORY
index e5864fd..0cf6b08 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,4 +1,4 @@
-Change notes from older releases. For current info see RELEASE-NOTES-1.25.
+Change notes from older releases. For current info see RELEASE-NOTES-1.26.
 
 == MediaWiki 1.24 ==
 
@@ -190,6 +190,10 @@ Change notes from older releases. For current info see RELEASE-NOTES-1.25.
   to multiple Config instances.
 * Update CSSJanus to v1.1.0.
 * Added FormatJson::parse() returning status with result or localized error message
+* Added DeletedContribsPager::reallyDoQuery hook allowing extensions to data to
+  Special:DeletedContributions
+* Added DeletedContributionsLineEnding hook allowing extensions to format
+  Special:DeletedContributions lines
 
 === Bug fixes in 1.24 ===
 * (bug 50572) MediaWiki:Blockip should support gender
diff --git a/INSTALL b/INSTALL
index 70d8d53..2054a57 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -8,10 +8,11 @@ Starting with MediaWiki 1.2.0, it's possible to install and configure the wiki
 Required software:
 * Web server with PHP 5.3.3 or higher.
 * A SQL server, the following types are supported
-** MySQL 5.0.2 or higher
+** MySQL 5.0.3 or higher
 ** PostgreSQL 8.3 or higher
 ** SQLite 3.3.7 or higher
 ** Oracle 9.0.1 or higher
+** Microsoft SQL Server 2005 (9.00.1399)
 
 MediaWiki is developed and tested mainly on Unix/Linux platforms, but should
 work on Windows as well.
index 188b2d7..5f0b8aa 100644 (file)
@@ -45,6 +45,8 @@ production.
 * The 'daemonized' flag must be set to true in $wgJobTypeConf for any redis
   job queues. This means that mediawiki/services/jobrunner service has to
   be installed and running for any such queues to work.
+* $wgAutopromoteOnce no longer supports the 'view' event. For keeping some
+  compatibility, any 'view' event triggers will still trigger on 'edit'.
 
 === New features in 1.25 ===
 * (T64861) Updated plural rules to CLDR 26. Includes incompatible changes
@@ -99,6 +101,27 @@ production.
   tags.
 * Added 'ChangeTagsListActive' hook, to separate the concepts of "defined" and
   "active" formerly conflated by the 'ListDefinedTags' hook.
+* Added TemplateParser class that provides a server-side interface to cachable
+  dynamically-compiled Mustache templates (currently uses lightncandy library).
+* Clickable anchors for each section heading in the content are now generated
+  and appear in the gutter on hovering over the heading.
+* Added 'CategoryViewer::doCategoryQuery' and 'CategoryViewer::generateLink' hooks
+  to allow extensions to override how links to pages are rendered within NS_CATEGORY
+* (T19665) Special:WantedPages only lists page which having at least one red link
+  pointing to it.
+* New hooks 'ApiMain::moduleManager' and 'ApiQuery::moduleManager', can be
+  used for conditional registration of API modules.
+* New hook 'EnhancedChangesList::getLogText' to alter, remove or add to the
+  links of a group of changes in EnhancedChangesList.
+* A full interface for StatsD metric reporting has been added to the context
+  interface, reachable via IContextSource::getStats().
+* Move the jQuery Client library from being mastered in MediaWiki as v0.1.0 to a
+  proper, published library, which is now tagged as v1.0.0.
+* A new message (defaulting to blank), 'editnotice-notext', can be shown to users
+  when they are editing if no edit notices apply to the page being edited.
+* (T94536) You can now make the sitenotice appear to logged-in users only by
+  editing MediaWiki:Anonnotice and replacing its content with "". Setting it to
+  "-" (default) will continue disable it and fallback to MediaWiki:Sitenotice.
 
 ==== External libraries ====
 * MediaWiki now requires certain external libraries to be installed. In the past
@@ -112,7 +135,8 @@ production.
 * The following libraries are now required:
 ** psr/log
    This library provides the interfaces set by the PSR-3 standard (http://www.php-fig.org/psr/psr-3/)
-   which are used by MediaWiki internally via the MWLoggerFactory class.
+   which are used by MediaWiki internally via the
+   MediaWiki\Logger\LoggerFactory class.
    See the structured logging RfC (https://www.mediawiki.org/wiki/Requests_for_comment/Structured_logging)
    for more background information.
 ** cssjanus/cssjanus
@@ -125,6 +149,8 @@ production.
    This library was formerly a part of MediaWiki core, and has been moved into a separate library.
    It provides CDB functions which are used in the Interwiki and Localization caches.
    More information about the library can be found at https://www.mediawiki.org/wiki/CDB.
+** liuggio/statsd-php-client
+   This library provides a StatsD client API for logging application metrics to a remote server.
 
 === Bug fixes in 1.25 ===
 * (T73003) No additional code will be generated to try to load CSS-embedded
@@ -152,6 +178,12 @@ production.
 ** 'extend' method added to QuickTemplate to append additional values to any field of data array
 * (T86974) Several Title methods now load from the database when necessary
   (instead of returning incorrect results) even when the page ID is known.
+* (T74070) Duplicate search for archived files on file upload now omits the extension.
+  This requires the fa_sha1 field being populated.
+* Removed rel="archives" from the "View history" link, as it did not pass
+  HTML validation.
+* $wgUseTidy is now set when parserTests are run with the tidy option to match
+  output on wiki.
 
 === Action API changes in 1.25 ===
 * (T67403) XML tag highlighting is now only performed for formats
@@ -211,6 +243,11 @@ production.
 * list=tags has additional properties to indicate 'active' status and tag
   sources.
 * siprop=libraries was added to ApiQuerySiteInfo to list installed external libraries.
+* (T88010) Added action=checktoken, to test a CSRF token's validity.
+* (T88010) Added intestactions to prop=info, to allow querying of
+  Title::userCan() via the API.
+* Default type param for query list=watchlist and list=recentchanges has
+  been changed from all types (e.g. including 'external') to 'edit|new|log'.
 
 === Action API internal changes in 1.25 ===
 * ApiHelp has been rewritten to support i18n and paginated HTML output.
@@ -242,6 +279,12 @@ production.
   provided to access just the live or just the deleted revids.
 * Added ApiPageSet::setGeneratorData() and ApiPageSet::populateGeneratorData()
   to allow generators to include data in the action=query result.
+* New hooks 'ApiMain::moduleManager' and 'ApiQuery::moduleManager', can be
+  used for conditional registration of API modules.
+* Added ApiBase::lacksSameOriginSecurity() to allow modules to easily check if
+  the current request was sent with the 'callback' parameter (or any future
+  method that breaks the same-origin policy).
+* Profiling methods in ApiBase are deprecated and no longer need to be called.
 * The following methods have been deprecated and may be removed in a future
   release:
   * ApiBase::getDescription
@@ -250,6 +293,14 @@ production.
   * ApiBase::makeHelpMsg
   * ApiBase::makeHelpArrayToString
   * ApiBase::makeHelpMsgParameters
+  * ApiBase::getModuleProfileName
+  * ApiBase::profileIn
+  * ApiBase::profileOut
+  * ApiBase::safeProfileOut
+  * ApiBase::getProfileTime
+  * ApiBase::profileDBIn
+  * ApiBase::profileDBOut
+  * ApiBase::getProfileDBTime
   * ApiFormatBase::setUnescapeAmps
   * ApiFormatBase::getWantsHelp
   * ApiFormatBase::setHelp
@@ -272,6 +323,8 @@ changes to languages because of Bugzilla reports.
 
 * (T66440) Kazakh (kk) wikis should no longer forcefully reset the user's
   interface language to kk where unexpected.
+* The Chinese conversion table was substantially updated to fix a lot of
+  bugs and ensure better reading experience for different variants.
 
 === Other changes in 1.25 ===
 * The skin autodiscovery mechanism, deprecated in MediaWiki 1.23, has been
@@ -349,6 +402,34 @@ changes to languages because of Bugzilla reports.
 * Deprecated Revision methods getRawUser(), getRawUserText() and getRawComment().
 * BREAKING CHANGE: mediawiki.user.generateRandomSessionId:
   The alphabet of the prior string returned was A-Za-z0-9 and now it is 0-9A-F
+* (T87504) Avoid serving SVG background-images in CSS for Opera 12, which
+  renders them incorrectly when combined with border-radius or background-size.
+* Removed maintenance script dumpSisterSites.php.
+* DatabaseBase class constructors must be called using the array argument style.
+  Ideally, DatabaseBase:factory() should be used instead in most cases.
+* Deprecated ParserOutput::addSecondaryDataUpdate and ParserOutput::getSecondaryDataUpdates.
+  This is a hard deprecation, with getSecondaryDataUpdates returning an empty array and
+  addSecondaryDataUpdate throwing an exception. These functions will be removed in 1.26,
+  since they interfere with caching of ParserOutput objects.
+* Introduced new hook 'SecondaryDataUpdates' that allows extensions to inject custom updates.
+* Introduced new hook 'OpportunisticLinksUpdate' that allows extensions to perform
+  updates when a page is re-rendered.
+* EditPage::attemptSave has been modified not to call handleStatus itself and
+  instead just returns the Status object. Extension calling it should be aware of
+  this.
+* Removed class DBObject. (unused since 1.10)
+* wfDiff() is deprecated.
+* The -m (maximum replication lag) option of refreshLinks.php was removed.
+  It had no effect since MediaWiki 1.18 and should be removed from any cron
+  jobs or similar scripts you may have set up.
+* (T85864) The following messages no longer support raw html: redirectto,
+  thisisdeleted, viewdeleted, editlink, retrievedfrom, version-poweredby-others,
+  retrievedfrom, thisisdeleted, viewsourcelink, lastmodifiedat, laggedslavemode,
+  protect-summary-cascade
+* All BloomCache related code has been removed. This was largely experimental.
+* $wgResourceModuleSkinStyles no longer supports per-module local or remote paths. They
+  can only be set for the entire skin.
+* Removed global function swap(). (deprecated since 1.24)
 
 == Compatibility ==
 
@@ -361,7 +442,7 @@ Oracle and Microsoft SQL Server.
 
 The supported versions are:
 
-* MySQL 5.0.2 or later
+* MySQL 5.0.3 or later
 * PostgreSQL 8.3 or later
 * SQLite 3.3.7 or later
 * Oracle 9.0.1 or later
diff --git a/RELEASE-NOTES-1.26 b/RELEASE-NOTES-1.26
new file mode 100644 (file)
index 0000000..46509be
--- /dev/null
@@ -0,0 +1,97 @@
+Security reminder: If you have PHP's register_globals option set, you must
+turn it off. MediaWiki will not work with it enabled.
+
+== MediaWiki 1.26 ==
+
+THIS IS NOT A RELEASE YET
+
+MediaWiki 1.26 is an alpha-quality branch and is not recommended for use in
+production.
+
+=== Configuration changes in 1.26 ===
+
+=== New features in 1.26 ===
+
+==== External libraries ====
+
+=== Bug fixes in 1.26 ===
+
+=== Action API changes in 1.26 ===
+
+=== Action API internal changes in 1.26 ===
+
+=== Languages updated in 1.26 ===
+
+MediaWiki supports over 350 languages. Many localisations are updated
+regularly. Below only new and removed languages are listed, as well as
+changes to languages because of Bugzilla reports.
+
+
+=== Other changes in 1.26 ===
+
+
+== Compatibility ==
+
+MediaWiki 1.26 requires PHP 5.3.3 or later. There is experimental support for
+HHVM 3.3.0.
+
+MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
+support for them is somewhat less mature. There is experimental support for
+Oracle and Microsoft SQL Server.
+
+The supported versions are:
+
+* MySQL 5.0.3 or later
+* PostgreSQL 8.3 or later
+* SQLite 3.3.7 or later
+* Oracle 9.0.1 or later
+* Microsoft SQL Server 2005 (9.00.1399)
+
+== Upgrading ==
+
+1.26 has several database changes since 1.25, and will not work without schema
+updates. Note that due to changes to some very large tables like the revision
+table, the schema update may take quite long (minutes on a medium sized site,
+many hours on a large site).
+
+If upgrading from before 1.11, and you are using a wiki as a commons
+repository, make sure that it is updated as well. Otherwise, errors may arise
+due to database schema changes.
+
+If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
+new database fields are filled with data.
+
+If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to
+1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed
+with MediaWiki 1.21.
+
+Don't forget to always back up your database before upgrading!
+
+See the file UPGRADE for more detailed upgrade instructions.
+
+For notes on 1.25.x and older releases, see HISTORY.
+
+== Online documentation ==
+
+Documentation for both end-users and site administrators is available on
+MediaWiki.org, and is covered under the GNU Free Documentation License (except
+for pages that explicitly state that their contents are in the public domain):
+
+       https://www.mediawiki.org/wiki/Documentation
+
+== Mailing list ==
+
+A mailing list is available for MediaWiki user support and discussion:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
+
+A low-traffic announcements-only list is also available:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
+
+It's highly recommended that you sign up for one of these lists if you're
+going to run a public MediaWiki, so you can be notified of security fixes.
+
+== IRC help ==
+
+There's usually someone online in #mediawiki on irc.freenode.net.
index 4721a9d..bdf2139 100644 (file)
@@ -4,27 +4,35 @@
  * To use a profiler, copy this file to StartProfiler.php and add:
  *  $wgProfiler['class'] = 'ProfilerXhprof';
  *
- * For output, add:
- *  $wgProfiler['output'] = array( 'text' );
- *    'text' can be one (or more) of 'text' 'udp' or 'db'
- *    'db' requires creating the profiling table, see patch-profiling.sql
+ * For output, set the 'output' key to an array of class names, one for each
+ * output type you want the profiler to generate. For example:
+ *  $wgProfiler['output'] = array( 'ProfilerOutputText' );
  *
- * The 'text' output will be added to the output page in a comment approriate
- * to the output's mime type. For a text/html page, this display can be
- * changed to a preformatted text block by setting the 'visible' configuration
- * flag:
+ * The output classes available to you by default are ProfilerOutputDb,
+ * ProfilerOutputDump, ProfilerOutputStats, ProfilerOutputText, and
+ * ProfilerOutputUdp.
+ *
+ * ProfilerOutputStats outputs profiling data as StatsD metrics. It expects
+ * that you have set the $wgStatsdServer configuration variable to the host (or
+ * host:port) of your statsd server.
+ *
+ * ProfilerOutputText will output profiling data in the page body as a comment.
+ * You can make the profiling data in HTML render as part of the page content
+ * by setting the 'visible' configuration flag:
  *  $wgProfiler['visible'] = true;
  *
- * The 'db' output expects a database table that can be created by applying
+ * 'ProfilerOutputDb' expects a database table that can be created by applying
  * maintenance/archives/patch-profiling.sql to your database.
  *
+ * 'ProfilerOutputDump' expects a $wgProfiler['outputDir'] telling it where to
+ * write dump files. The files produced are compatible with the XHProf gui.
  * For a rudimentary sampling profiler:
  *   $wgProfiler['class'] = 'ProfilerXhprof';
- *   $wgProfiler['output'] = array( 'db' );
+ *   $wgProfiler['output'] = array( 'ProfilerOutputDb' );
  *   $wgProfiler['sampling'] = 50; // one every 50 requests
  * This will use ProfilerStub for non-sampled cases.
  *
- * For performance, the profiler is always disabled for CLI scripts
- * as they could be long running and the data would accumulate. Use
- * the --profiler parameter of maintenance scripts to override this.
+ * For performance, the profiler is always disabled for CLI scripts as they
+ * could be long running and the data would accumulate. Use the '--profiler'
+ * parameter of maintenance scripts to override this.
  */
diff --git a/api.php b/api.php
index d63f254..ea2f60a 100644 (file)
--- a/api.php
+++ b/api.php
@@ -30,6 +30,8 @@
  * @file
  */
 
+use MediaWiki\Logger\LegacyLogger;
+
 // So extensions (and other code) can check whether they're running in API mode
 define( 'MW_API', true );
 
@@ -59,7 +61,11 @@ if ( !$wgEnableAPI ) {
 
 // Set a dummy $wgTitle, because $wgTitle == null breaks various things
 // In a perfect world this wouldn't be necessary
-$wgTitle = Title::makeTitle( NS_MAIN, 'API' );
+$wgTitle = Title::makeTitle( NS_SPECIAL, 'Badtitle/dummy title for API calls set in api.php' );
+
+// RequestContext will read from $wgTitle, but it will also whine about it.
+// In a perfect world this wouldn't be necessary either.
+RequestContext::getMain()->setTitle( $wgTitle );
 
 try {
        /* Construct an ApiMain with the arguments passed via the URL. What we get back
@@ -120,7 +126,7 @@ if ( $wgAPIRequestLog ) {
        } else {
                $items[] = "failed in ApiBeforeMain";
        }
-       MWLoggerLegacyLogger::emit( implode( ',', $items ) . "\n", $wgAPIRequestLog );
+       LegacyLogger::emit( implode( ',', $items ) . "\n", $wgAPIRequestLog );
        wfDebug( "Logged API request to $wgAPIRequestLog\n" );
 }
 
index 01dba44..b480096 100644 (file)
@@ -1,10 +1,10 @@
 <?php
 // This file is generated by maintenance/generateLocalAutoload.php, do not adjust manually
-
+// @codingStandardsIgnoreFile
 global $wgAutoloadLocalClasses;
 
 $wgAutoloadLocalClasses = array(
-       'APCBagOStuff' => __DIR__ . '/includes/objectcache/APCBagOStuff.php',
+       'APCBagOStuff' => __DIR__ . '/includes/libs/objectcache/APCBagOStuff.php',
        'AbstractContent' => __DIR__ . '/includes/content/AbstractContent.php',
        'Action' => __DIR__ . '/includes/actions/Action.php',
        'ActiveUsersPager' => __DIR__ . '/includes/specials/SpecialActiveusers.php',
@@ -18,6 +18,7 @@ $wgAutoloadLocalClasses = array(
        'AnsiTermColorer' => __DIR__ . '/maintenance/term/MWTerm.php',
        'ApiBase' => __DIR__ . '/includes/api/ApiBase.php',
        'ApiBlock' => __DIR__ . '/includes/api/ApiBlock.php',
+       'ApiCheckToken' => __DIR__ . '/includes/api/ApiCheckToken.php',
        'ApiClearHasMsg' => __DIR__ . '/includes/api/ApiClearHasMsg.php',
        'ApiComparePages' => __DIR__ . '/includes/api/ApiComparePages.php',
        'ApiCreateAccount' => __DIR__ . '/includes/api/ApiCreateAccount.php',
@@ -146,7 +147,7 @@ $wgAutoloadLocalClasses = array(
        'BackupDumper' => __DIR__ . '/maintenance/backup.inc',
        'BackupReader' => __DIR__ . '/maintenance/importDump.php',
        'BadTitleError' => __DIR__ . '/includes/exception/BadTitleError.php',
-       'BagOStuff' => __DIR__ . '/includes/objectcache/BagOStuff.php',
+       'BagOStuff' => __DIR__ . '/includes/libs/objectcache/BagOStuff.php',
        'BaseDump' => __DIR__ . '/maintenance/backupPrefetch.inc',
        'BaseTemplate' => __DIR__ . '/includes/skins/BaseTemplate.php',
        'BatchedQueryRunner' => __DIR__ . '/maintenance/runBatchedQuery.php',
@@ -168,11 +169,10 @@ $wgAutoloadLocalClasses = array(
        'Blob' => __DIR__ . '/includes/db/DatabaseUtility.php',
        'Block' => __DIR__ . '/includes/Block.php',
        'BlockListPager' => __DIR__ . '/includes/specials/SpecialBlockList.php',
-       'BloomCache' => __DIR__ . '/includes/cache/bloom/BloomCache.php',
-       'BloomCacheRedis' => __DIR__ . '/includes/cache/bloom/BloomCacheRedis.php',
-       'BloomFilterTitleHasLogs' => __DIR__ . '/includes/cache/bloom/BloomFilters.php',
+       'BlockLogFormatter' => __DIR__ . '/includes/logging/BlockLogFormatter.php',
        'BmpHandler' => __DIR__ . '/includes/media/BMP.php',
        'BrokenRedirectsPage' => __DIR__ . '/includes/specials/SpecialBrokenRedirects.php',
+       'BufferingStatsdDataFactory' => __DIR__ . '/includes/libs/BufferingStatsdDataFactory.php',
        'CLDRPluralRuleConverter' => __DIR__ . '/languages/utils/CLDRPluralRuleConverter.php',
        'CLDRPluralRuleConverterExpression' => __DIR__ . '/languages/utils/CLDRPluralRuleConverterExpression.php',
        'CLDRPluralRuleConverterFragment' => __DIR__ . '/languages/utils/CLDRPluralRuleConverterFragment.php',
@@ -186,6 +186,7 @@ $wgAutoloadLocalClasses = array(
        'CacheHelper' => __DIR__ . '/includes/cache/CacheHelper.php',
        'CacheTime' => __DIR__ . '/includes/parser/CacheTime.php',
        'CachedAction' => __DIR__ . '/includes/actions/CachedAction.php',
+       'CachingSiteStore' => __DIR__ . '/includes/site/CachingSiteStore.php',
        'CapsCleanup' => __DIR__ . '/maintenance/cleanupCaps.php',
        'Category' => __DIR__ . '/includes/Category.php',
        'CategoryFinder' => __DIR__ . '/includes/CategoryFinder.php',
@@ -272,8 +273,8 @@ $wgAutoloadLocalClasses = array(
        'DBFileJournal' => __DIR__ . '/includes/filebackend/filejournal/DBFileJournal.php',
        'DBLockManager' => __DIR__ . '/includes/filebackend/lockmanager/DBLockManager.php',
        'DBMasterPos' => __DIR__ . '/includes/db/DatabaseUtility.php',
-       'DBObject' => __DIR__ . '/includes/db/DatabaseUtility.php',
        'DBQueryError' => __DIR__ . '/includes/db/DatabaseError.php',
+       'DBSiteStore' => __DIR__ . '/includes/site/DBSiteStore.php',
        'DBUnexpectedError' => __DIR__ . '/includes/db/DatabaseError.php',
        'DataUpdate' => __DIR__ . '/includes/deferred/DataUpdate.php',
        'DatabaseBase' => __DIR__ . '/includes/db/Database.php',
@@ -287,7 +288,6 @@ $wgAutoloadLocalClasses = array(
        'DatabaseOracle' => __DIR__ . '/includes/db/DatabaseOracle.php',
        'DatabasePostgres' => __DIR__ . '/includes/db/DatabasePostgres.php',
        'DatabaseSqlite' => __DIR__ . '/includes/db/DatabaseSqlite.php',
-       'DatabaseSqliteStandalone' => __DIR__ . '/includes/db/DatabaseSqlite.php',
        'DatabaseUpdater' => __DIR__ . '/includes/installer/DatabaseUpdater.php',
        'DateFormats' => __DIR__ . '/maintenance/language/date-formats.php',
        'DateFormatter' => __DIR__ . '/includes/parser/DateFormatter.php',
@@ -353,7 +353,6 @@ $wgAutoloadLocalClasses = array(
        'DumpPipeOutput' => __DIR__ . '/includes/Export.php',
        'DumpRenderer' => __DIR__ . '/maintenance/renderDump.php',
        'DumpRev' => __DIR__ . '/maintenance/storage/dumpRev.php',
-       'DumpSisterSites' => __DIR__ . '/maintenance/dumpSisterSites.php',
        'DuplicateJob' => __DIR__ . '/includes/jobqueue/jobs/DuplicateJob.php',
        'EditAction' => __DIR__ . '/includes/actions/EditAction.php',
        'EditCLI' => __DIR__ . '/maintenance/edit.php',
@@ -364,17 +363,18 @@ $wgAutoloadLocalClasses = array(
        'EmailInvalidation' => __DIR__ . '/includes/specials/SpecialConfirmemail.php',
        'EmailNotification' => __DIR__ . '/includes/mail/EmailNotification.php',
        'EmaillingJob' => __DIR__ . '/includes/jobqueue/jobs/EmaillingJob.php',
-       'EmptyBagOStuff' => __DIR__ . '/includes/objectcache/EmptyBagOStuff.php',
-       'EmptyBloomCache' => __DIR__ . '/includes/cache/bloom/BloomCache.php',
+       'EmptyBagOStuff' => __DIR__ . '/includes/libs/objectcache/EmptyBagOStuff.php',
        'EncryptedPassword' => __DIR__ . '/includes/password/EncryptedPassword.php',
        'EnhancedChangesList' => __DIR__ . '/includes/changes/EnhancedChangesList.php',
        'EnotifNotifyJob' => __DIR__ . '/includes/jobqueue/jobs/EnotifNotifyJob.php',
+       'EnqueueJob' => __DIR__ . '/includes/jobqueue/jobs/EnqueueJob.php',
        'EraseArchivedFile' => __DIR__ . '/maintenance/eraseArchivedFile.php',
        'ErrorPageError' => __DIR__ . '/includes/exception/ErrorPageError.php',
        'Exif' => __DIR__ . '/includes/media/Exif.php',
        'ExifBitmapHandler' => __DIR__ . '/includes/media/ExifBitmap.php',
        'ExplodeIterator' => __DIR__ . '/includes/libs/ExplodeIterator.php',
        'ExportProgressFilter' => __DIR__ . '/maintenance/backup.inc',
+       'ExportSites' => __DIR__ . '/maintenance/exportSites.php',
        'ExtensionLanguages' => __DIR__ . '/maintenance/language/languages.inc',
        'ExtensionProcessor' => __DIR__ . '/includes/registration/ExtensionProcessor.php',
        'ExtensionRegistry' => __DIR__ . '/includes/registration/ExtensionRegistry.php',
@@ -414,6 +414,7 @@ $wgAutoloadLocalClasses = array(
        'FileBackendStoreShardDirIterator' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
        'FileBackendStoreShardFileIterator' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
        'FileBackendStoreShardListIterator' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
+       'FileBasedSiteLookup' => __DIR__ . '/includes/site/FileBasedSiteLookup.php',
        'FileCacheBase' => __DIR__ . '/includes/cache/FileCacheBase.php',
        'FileDeleteForm' => __DIR__ . '/includes/FileDeleteForm.php',
        'FileDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
@@ -493,9 +494,10 @@ $wgAutoloadLocalClasses = array(
        'HTMLTextAreaField' => __DIR__ . '/includes/htmlform/HTMLTextAreaField.php',
        'HTMLTextField' => __DIR__ . '/includes/htmlform/HTMLTextField.php',
        'HWLDFWordAccumulator' => __DIR__ . '/includes/diff/DairikiDiff.php',
-       'HashBagOStuff' => __DIR__ . '/includes/objectcache/HashBagOStuff.php',
+       'HashBagOStuff' => __DIR__ . '/includes/libs/objectcache/HashBagOStuff.php',
        'HashConfig' => __DIR__ . '/includes/config/HashConfig.php',
        'HashRing' => __DIR__ . '/includes/libs/HashRing.php',
+       'HashSiteStore' => __DIR__ . '/includes/site/HashSiteStore.php',
        'HashtableReplacer' => __DIR__ . '/includes/libs/replacers/HashtableReplacer.php',
        'HistoryAction' => __DIR__ . '/includes/actions/HistoryAction.php',
        'HistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
@@ -535,6 +537,7 @@ $wgAutoloadLocalClasses = array(
        'ImageQueryPage' => __DIR__ . '/includes/specialpage/ImageQueryPage.php',
        'ImportReporter' => __DIR__ . '/includes/specials/SpecialImport.php',
        'ImportSiteScripts' => __DIR__ . '/maintenance/importSiteScripts.php',
+       'ImportSites' => __DIR__ . '/maintenance/importSites.php',
        'ImportSource' => __DIR__ . '/includes/Import.php',
        'ImportStreamSource' => __DIR__ . '/includes/Import.php',
        'ImportStringSource' => __DIR__ . '/includes/Import.php',
@@ -564,7 +567,7 @@ $wgAutoloadLocalClasses = array(
        'Job' => __DIR__ . '/includes/jobqueue/Job.php',
        'JobQueue' => __DIR__ . '/includes/jobqueue/JobQueue.php',
        'JobQueueAggregator' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregator.php',
-       'JobQueueAggregatorMemc' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregatorMemc.php',
+       'JobQueueAggregatorNull' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregator.php',
        'JobQueueAggregatorRedis' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php',
        'JobQueueConnectionError' => __DIR__ . '/includes/jobqueue/JobQueue.php',
        'JobQueueDB' => __DIR__ . '/includes/jobqueue/JobQueueDB.php',
@@ -691,18 +694,17 @@ $wgAutoloadLocalClasses = array(
        'MWFunction' => __DIR__ . '/includes/utils/MWFunction.php',
        'MWHookException' => __DIR__ . '/includes/Hooks.php',
        'MWHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
-       'MWLogger' => __DIR__ . '/includes/debug/logger/Logger.php',
-       'MWLoggerFactory' => __DIR__ . '/includes/debug/logger/Factory.php',
-       'MWLoggerLegacyLogger' => __DIR__ . '/includes/debug/logger/legacy/Logger.php',
-       'MWLoggerLegacySpi' => __DIR__ . '/includes/debug/logger/legacy/Spi.php',
-       'MWLoggerMonologHandler' => __DIR__ . '/includes/debug/logger/monolog/Handler.php',
-       'MWLoggerMonologLegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php',
-       'MWLoggerMonologProcessor' => __DIR__ . '/includes/debug/logger/monolog/Processor.php',
-       'MWLoggerMonologSamplingHandler' => __DIR__ . '/includes/debug/logger/monolog/SamplingHandler.php',
-       'MWLoggerMonologSpi' => __DIR__ . '/includes/debug/logger/monolog/Spi.php',
-       'MWLoggerMonologSyslogHandler' => __DIR__ . '/includes/debug/logger/monolog/SyslogHandler.php',
-       'MWLoggerNullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
-       'MWLoggerSpi' => __DIR__ . '/includes/debug/logger/Spi.php',
+       'MWLogger' => __DIR__ . '/includes/debug/logger/Shims.php',
+       'MWLoggerFactory' => __DIR__ . '/includes/debug/logger/Shims.php',
+       'MWLoggerLegacyLogger' => __DIR__ . '/includes/debug/logger/Shims.php',
+       'MWLoggerLegacySpi' => __DIR__ . '/includes/debug/logger/Shims.php',
+       'MWLoggerMonologHandler' => __DIR__ . '/includes/debug/logger/monolog/Shims.php',
+       'MWLoggerMonologLegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/Shims.php',
+       'MWLoggerMonologProcessor' => __DIR__ . '/includes/debug/logger/monolog/Shims.php',
+       'MWLoggerMonologSpi' => __DIR__ . '/includes/debug/logger/monolog/Shims.php',
+       'MWLoggerMonologSyslogHandler' => __DIR__ . '/includes/debug/logger/monolog/Shims.php',
+       'MWLoggerNullSpi' => __DIR__ . '/includes/debug/logger/Shims.php',
+       'MWLoggerSpi' => __DIR__ . '/includes/debug/logger/Shims.php',
        'MWMemcached' => __DIR__ . '/includes/objectcache/MemcachedClient.php',
        'MWMessagePack' => __DIR__ . '/includes/libs/MWMessagePack.php',
        'MWNamespace' => __DIR__ . '/includes/MWNamespace.php',
@@ -735,6 +737,16 @@ $wgAutoloadLocalClasses = array(
        'MediaWikiSite' => __DIR__ . '/includes/site/MediaWikiSite.php',
        'MediaWikiTitleCodec' => __DIR__ . '/includes/title/MediaWikiTitleCodec.php',
        'MediaWikiVersionFetcher' => __DIR__ . '/includes/MediaWikiVersionFetcher.php',
+       'MediaWiki\\Logger\\LegacyLogger' => __DIR__ . '/includes/debug/logger/LegacyLogger.php',
+       'MediaWiki\\Logger\\LegacySpi' => __DIR__ . '/includes/debug/logger/LegacySpi.php',
+       'MediaWiki\\Logger\\LoggerFactory' => __DIR__ . '/includes/debug/logger/LoggerFactory.php',
+       'MediaWiki\\Logger\\MonologSpi' => __DIR__ . '/includes/debug/logger/MonologSpi.php',
+       'MediaWiki\\Logger\\Monolog\\LegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php',
+       'MediaWiki\\Logger\\Monolog\\LegacyHandler' => __DIR__ . '/includes/debug/logger/monolog/LegacyHandler.php',
+       'MediaWiki\\Logger\\Monolog\\SyslogHandler' => __DIR__ . '/includes/debug/logger/monolog/SyslogHandler.php',
+       'MediaWiki\\Logger\\Monolog\\WikiProcessor' => __DIR__ . '/includes/debug/logger/monolog/WikiProcessor.php',
+       'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
+       'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php',
        'MemCachedClientforWiki' => __DIR__ . '/includes/objectcache/MemcachedClient.php',
        'MemcLockManager' => __DIR__ . '/includes/filebackend/lockmanager/MemcLockManager.php',
        'MemcachedBagOStuff' => __DIR__ . '/includes/objectcache/MemcachedBagOStuff.php',
@@ -874,7 +886,6 @@ $wgAutoloadLocalClasses = array(
        'PoolCounter_Stub' => __DIR__ . '/includes/poolcounter/PoolCounter.php',
        'PoolWorkArticleView' => __DIR__ . '/includes/poolcounter/PoolWorkArticleView.php',
        'PopulateBacklinkNamespace' => __DIR__ . '/maintenance/populateBacklinkNamespace.php',
-       'PopulateBloomFilter' => __DIR__ . '/maintenance/populateBloomCache.php',
        'PopulateCategory' => __DIR__ . '/maintenance/populateCategory.php',
        'PopulateFilearchiveSha1' => __DIR__ . '/maintenance/populateFilearchiveSha1.php',
        'PopulateImageSha1' => __DIR__ . '/maintenance/populateImageSha1.php',
@@ -885,6 +896,7 @@ $wgAutoloadLocalClasses = array(
        'PopulateRevisionLength' => __DIR__ . '/maintenance/populateRevisionLength.php',
        'PopulateRevisionSha1' => __DIR__ . '/maintenance/populateRevisionSha1.php',
        'PostgreSqlLockManager' => __DIR__ . '/includes/filebackend/lockmanager/DBLockManager.php',
+       'PostgresBlob' => __DIR__ . '/includes/db/DatabasePostgres.php',
        'PostgresField' => __DIR__ . '/includes/db/DatabasePostgres.php',
        'PostgresInstaller' => __DIR__ . '/includes/installer/PostgresInstaller.php',
        'PostgresTransactionState' => __DIR__ . '/includes/db/DatabasePostgres.php',
@@ -902,6 +914,8 @@ $wgAutoloadLocalClasses = array(
        'Profiler' => __DIR__ . '/includes/profiler/Profiler.php',
        'ProfilerOutput' => __DIR__ . '/includes/profiler/output/ProfilerOutput.php',
        'ProfilerOutputDb' => __DIR__ . '/includes/profiler/output/ProfilerOutputDb.php',
+       'ProfilerOutputDump' => __DIR__ . '/includes/profiler/output/ProfilerOutputDump.php',
+       'ProfilerOutputStats' => __DIR__ . '/includes/profiler/output/ProfilerOutputStats.php',
        'ProfilerOutputText' => __DIR__ . '/includes/profiler/output/ProfilerOutputText.php',
        'ProfilerOutputUdp' => __DIR__ . '/includes/profiler/output/ProfilerOutputUdp.php',
        'ProfilerSectionOnly' => __DIR__ . '/includes/profiler/ProfilerSectionOnly.php',
@@ -963,6 +977,7 @@ $wgAutoloadLocalClasses = array(
        'RenderAction' => __DIR__ . '/includes/actions/RenderAction.php',
        'ReplacementArray' => __DIR__ . '/includes/libs/ReplacementArray.php',
        'Replacer' => __DIR__ . '/includes/libs/replacers/Replacer.php',
+       'ReplicatedBagOStuff' => __DIR__ . '/includes/objectcache/ReplicatedBagOStuff.php',
        'RepoGroup' => __DIR__ . '/includes/filerepo/RepoGroup.php',
        'RequestContext' => __DIR__ . '/includes/context/RequestContext.php',
        'ResetUserTokens' => __DIR__ . '/maintenance/resetUserTokens.php',
@@ -971,16 +986,15 @@ $wgAutoloadLocalClasses = array(
        'ResourceLoaderContext' => __DIR__ . '/includes/resourceloader/ResourceLoaderContext.php',
        'ResourceLoaderEditToolbarModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderEditToolbarModule.php',
        'ResourceLoaderFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderFileModule.php',
-       'ResourceLoaderFilePageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderFilePageModule.php',
        'ResourceLoaderFilePath' => __DIR__ . '/includes/resourceloader/ResourceLoaderFilePath.php',
        'ResourceLoaderImage' => __DIR__ . '/includes/resourceloader/ResourceLoaderImage.php',
        'ResourceLoaderImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderImageModule.php',
        'ResourceLoaderLanguageDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageDataModule.php',
        'ResourceLoaderLanguageNamesModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageNamesModule.php',
        'ResourceLoaderModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderModule.php',
-       'ResourceLoaderNoscriptModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderNoscriptModule.php',
        'ResourceLoaderSiteModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSiteModule.php',
        'ResourceLoaderSkinModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSkinModule.php',
+       'ResourceLoaderSpecialCharacterDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php',
        'ResourceLoaderStartUpModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderStartUpModule.php',
        'ResourceLoaderUserCSSPrefsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php',
        'ResourceLoaderUserDefaultsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserDefaultsModule.php',
@@ -989,6 +1003,7 @@ $wgAutoloadLocalClasses = array(
        'ResourceLoaderUserOptionsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserOptionsModule.php',
        'ResourceLoaderUserTokensModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserTokensModule.php',
        'ResourceLoaderWikiModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderWikiModule.php',
+       'RestbaseVirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/RestbaseVirtualRESTService.php',
        'ResultWrapper' => __DIR__ . '/includes/db/DatabaseUtility.php',
        'RevDelArchiveItem' => __DIR__ . '/includes/revisiondelete/RevDelArchiveItem.php',
        'RevDelArchiveList' => __DIR__ . '/includes/revisiondelete/RevDelArchiveList.php',
@@ -1051,15 +1066,17 @@ $wgAutoloadLocalClasses = array(
        'Site' => __DIR__ . '/includes/site/Site.php',
        'SiteArray' => __DIR__ . '/includes/site/SiteList.php',
        'SiteConfiguration' => __DIR__ . '/includes/SiteConfiguration.php',
+       'SiteExporter' => __DIR__ . '/includes/site/SiteExporter.php',
+       'SiteImporter' => __DIR__ . '/includes/site/SiteImporter.php',
        'SiteList' => __DIR__ . '/includes/site/SiteList.php',
-       'SiteListFileCache' => __DIR__ . '/includes/site/SiteListFileCache.php',
-       'SiteListFileCacheBuilder' => __DIR__ . '/includes/site/SiteListFileCacheBuilder.php',
+       'SiteLookup' => __DIR__ . '/includes/site/SiteLookup.php',
        'SiteObject' => __DIR__ . '/includes/site/Site.php',
        'SiteSQLStore' => __DIR__ . '/includes/site/SiteSQLStore.php',
        'SiteStats' => __DIR__ . '/includes/SiteStats.php',
        'SiteStatsInit' => __DIR__ . '/includes/SiteStats.php',
        'SiteStatsUpdate' => __DIR__ . '/includes/deferred/SiteStatsUpdate.php',
        'SiteStore' => __DIR__ . '/includes/site/SiteStore.php',
+       'SitesCacheFileBuilder' => __DIR__ . '/includes/site/SitesCacheFileBuilder.php',
        'Skin' => __DIR__ . '/includes/skins/Skin.php',
        'SkinApi' => __DIR__ . '/includes/skins/SkinApi.php',
        'SkinApiTemplate' => __DIR__ . '/includes/skins/SkinApiTemplate.php',
@@ -1152,7 +1169,6 @@ $wgAutoloadLocalClasses = array(
        'SquidPurgeClientPool' => __DIR__ . '/includes/SquidPurgeClient.php',
        'SquidUpdate' => __DIR__ . '/includes/deferred/SquidUpdate.php',
        'SrConverter' => __DIR__ . '/languages/classes/LanguageSr.php',
-       'StatCounter' => __DIR__ . '/includes/StatCounter.php',
        'StatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
        'Status' => __DIR__ . '/includes/Status.php',
        'StatusValue' => __DIR__ . '/includes/libs/StatusValue.php',
@@ -1180,6 +1196,7 @@ $wgAutoloadLocalClasses = array(
        'TablePager' => __DIR__ . '/includes/pager/TablePager.php',
        'TempFSFile' => __DIR__ . '/includes/filebackend/TempFSFile.php',
        'TempFileRepo' => __DIR__ . '/includes/filerepo/FileRepo.php',
+       'TemplateParser' => __DIR__ . '/includes/TemplateParser.php',
        'TestFileOpPerformance' => __DIR__ . '/maintenance/fileOpPerfTest.php',
        'TextContent' => __DIR__ . '/includes/content/TextContent.php',
        'TextContentHandler' => __DIR__ . '/includes/content/TextContentHandler.php',
@@ -1253,7 +1270,6 @@ $wgAutoloadLocalClasses = array(
        'UploadStashFileException' => __DIR__ . '/includes/upload/UploadStash.php',
        'UploadStashFileNotFoundException' => __DIR__ . '/includes/upload/UploadStash.php',
        'UploadStashNoSuchKeyException' => __DIR__ . '/includes/upload/UploadStash.php',
-       'UploadStashNotAvailableException' => __DIR__ . '/includes/upload/UploadStash.php',
        'UploadStashNotLoggedInException' => __DIR__ . '/includes/upload/UploadStash.php',
        'UploadStashWrongOwnerException' => __DIR__ . '/includes/upload/UploadStash.php',
        'UploadStashZeroLengthFileException' => __DIR__ . '/includes/upload/UploadStash.php',
@@ -1323,12 +1339,12 @@ $wgAutoloadLocalClasses = array(
        'WikiStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
        'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php',
        'WikitextContentHandler' => __DIR__ . '/includes/content/WikitextContentHandler.php',
-       'WinCacheBagOStuff' => __DIR__ . '/includes/objectcache/WinCacheBagOStuff.php',
+       'WinCacheBagOStuff' => __DIR__ . '/includes/libs/objectcache/WinCacheBagOStuff.php',
        'WithoutInterwikiPage' => __DIR__ . '/includes/specials/SpecialWithoutinterwiki.php',
        'WordLevelDiff' => __DIR__ . '/includes/diff/DairikiDiff.php',
        'WrapOldPasswords' => __DIR__ . '/maintenance/wrapOldPasswords.php',
        'XCFHandler' => __DIR__ . '/includes/media/XCF.php',
-       'XCacheBagOStuff' => __DIR__ . '/includes/objectcache/XCacheBagOStuff.php',
+       'XCacheBagOStuff' => __DIR__ . '/includes/libs/objectcache/XCacheBagOStuff.php',
        'XMLRCFeedFormatter' => __DIR__ . '/includes/rcfeed/XMLRCFeedFormatter.php',
        'XMPInfo' => __DIR__ . '/includes/media/XMPInfo.php',
        'XMPReader' => __DIR__ . '/includes/media/XMP.php',
index ff92898..88ee9cf 100644 (file)
        },
        "require": {
                "cssjanus/cssjanus": "1.1.1",
+               "ext-iconv": "*",
                "leafo/lessphp": "0.5.0",
-               "oojs/oojs-ui": "0.7.0",
+               "liuggio/statsd-php-client": "1.0.12",
+               "oojs/oojs-ui": "0.9.7",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
                "wikimedia/cdb": "1.0.1",
-               "wikimedia/composer-merge-plugin": "0.5.0",
+               "wikimedia/composer-merge-plugin": "1.0.0",
+               "wikimedia/utfnormal": "1.0.2",
                "zordius/lightncandy": "0.18"
        },
        "require-dev": {
+               "jakub-onderka/php-parallel-lint": "~0.8",
                "justinrainbow/json-schema": "~1.3",
-               "phpunit/phpunit": "~4.5"
+               "phpunit/phpunit": "~4.5",
+               "mediawiki/mediawiki-codesniffer": "0.1.0"
        },
        "suggest": {
                "ext-fileinfo": "*",
+               "ext-intl": "*",
                "ext-mbstring": "*",
                "ext-wikidiff2": "*",
                "ext-apc": "*",
                }
        },
        "scripts": {
+               "lint": "parallel-lint --exclude vendor",
+               "phpcs": "phpcs $PHPCS_ARGS -s --standard=vendor/mediawiki/mediawiki-codesniffer/MediaWiki --ignore=vendor --encoding=utf-8 --extensions=php,php5,inc,sample",
+               "test": [
+                       "composer lint",
+                       "composer phpcs"
+               ],
                "pre-update-cmd": "ComposerHookHandler::onPreUpdate",
                "pre-install-cmd": "ComposerHookHandler::onPreInstall"
        },
index 33029bd..d1b982c 100644 (file)
@@ -5,7 +5,12 @@
        "properties": {
                "name": {
                        "type": "string",
-                       "description": "The extension's canonical name."
+                       "description": "The extension's canonical name.",
+                       "required": true
+               },
+               "namemsg": {
+                       "type": "string",
+                       "description": "i18n message key of the extension's name."
                },
                "type": {
                        "type": "string",
                                }
                        }
                },
+               "ResourceModuleSkinStyles": {
+                       "type": "object",
+                       "description": "ResourceLoader modules for custom skin styles"
+               },
                "ResourceLoaderSources": {
                        "type": "object",
                        "description": "ResourceLoader sources to register"
                "APIListModules": {
                        "type": "object"
                },
+               "ValidSkinNames": {
+                       "type": "object"
+               },
                "callback": {
                        "type": [
                                "array",
index f47890d..877b7ed 100644 (file)
@@ -34,15 +34,15 @@ title before displaying the article; the other converts the title to all
 uppercase letters. Currently, in MediaWiki code, we would handle this as follows
 (note: not real code, here):
 
-       function showAnArticle($article) {
+       function showAnArticle( $article ) {
                global $wgReverseTitle, $wgCapitalizeTitle;
 
-               if ($wgReverseTitle) {
-                       wfReverseTitle($article);
+               if ( $wgReverseTitle ) {
+                       wfReverseTitle( $article );
                }
 
-               if ($wgCapitalizeTitle) {
-                       wfCapitalizeTitle($article);
+               if ( $wgCapitalizeTitle ) {
+                       wfCapitalizeTitle( $article );
                }
 
                # code to actually show the article goes here
@@ -52,34 +52,34 @@ An extension writer, or a local admin, will often add custom code to the
 function -- with or without a global variable. For example, someone wanting
 email notification when an article is shown may add:
 
-    function showAnArticle($article) {
+    function showAnArticle( $article ) {
         global $wgReverseTitle, $wgCapitalizeTitle, $wgNotifyArticle;
 
-               if ($wgReverseTitle) {
-                       wfReverseTitle($article);
+               if ( $wgReverseTitle ) {
+                       wfReverseTitle( $article );
                }
 
-               if ($wgCapitalizeTitle) {
-                       wfCapitalizeTitle($article);
+               if ( $wgCapitalizeTitle ) {
+                       wfCapitalizeTitle( $article );
                }
 
                # code to actually show the article goes here
 
-               if ($wgNotifyArticle) {
-                       wfNotifyArticleShow($article);
+               if ( $wgNotifyArticle ) {
+                       wfNotifyArticleShow( $article );
                }
        }
 
 Using a hook-running strategy, we can avoid having all this option-specific
 stuff in our mainline code. Using hooks, the function becomes:
 
-       function showAnArticle($article) {
+       function showAnArticle( $article ) {
 
-               if (wfRunHooks('ArticleShow', array(&$article))) {
+               if ( Hooks::run( 'ArticleShow', array( &$article ) ) ) {
 
                        # code to actually show the article goes here
 
-                       wfRunHooks('ArticleShowComplete', array(&$article));
+                       Hooks::run( 'ArticleShowComplete', array( &$article ) );
                }
        }
 
@@ -93,11 +93,11 @@ title-reversing if-blocks spread all over the codebase in showAnArticle,
 deleteAnArticle, exportArticle, etc., we can concentrate it all in an extension
 file:
 
-       function reverseArticleTitle($article) {
+       function reverseArticleTitle( $article ) {
                # ...
        }
 
-       function reverseForExport($article) {
+       function reverseForExport( $article ) {
                # ...
        }
 
@@ -139,29 +139,29 @@ Hooks are registered by adding them to the global $wgHooks array for a given
 event. All the following are valid ways to define hooks:
 
        $wgHooks['EventName'][] = 'someFunction'; # function, no data
-       $wgHooks['EventName'][] = array('someFunction', $someData);
-       $wgHooks['EventName'][] = array('someFunction'); # weird, but OK
+       $wgHooks['EventName'][] = array( 'someFunction', $someData );
+       $wgHooks['EventName'][] = array( 'someFunction' ); # weird, but OK
 
        $wgHooks['EventName'][] = $object; # object only
-       $wgHooks['EventName'][] = array($object, 'someMethod');
-       $wgHooks['EventName'][] = array($object, 'someMethod', $someData);
-       $wgHooks['EventName'][] = array($object); # weird but OK
+       $wgHooks['EventName'][] = array( $object, 'someMethod' );
+       $wgHooks['EventName'][] = array( $object, 'someMethod', $someData );
+       $wgHooks['EventName'][] = array( $object ); # weird but OK
 
 When an event occurs, the function (or object method) will be called with the
 optional data provided as well as event-specific parameters. The above examples
 would result in the following code being executed when 'EventName' happened:
 
        # function, no data
-       someFunction($param1, $param2)
+       someFunction( $param1, $param2 )
        # function with data
-       someFunction($someData, $param1, $param2)
+       someFunction( $someData, $param1, $param2 )
 
        # object only
-       $object->onEventName($param1, $param2)
+       $object->onEventName( $param1, $param2 )
        # object with method
-       $object->someMethod($param1, $param2)
+       $object->someMethod( $param1, $param2 )
        # object with method and data
-       $object->someMethod($someData, $param1, $param2)
+       $object->someMethod( $someData, $param1, $param2 )
 
 Note that when an object is the hook, and there's no specified method, the
 default method called is 'onEventName'. For different events this would be
@@ -170,8 +170,8 @@ different: 'onArticleSave', 'onUserLogin', etc.
 The extra data is useful if we want to use the same function or object for
 different purposes. For example:
 
-       $wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'TimStarling');
-       $wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'brion');
+       $wgHooks['ArticleSaveComplete'][] = array( 'ircNotify', 'TimStarling' );
+       $wgHooks['ArticleSaveComplete'][] = array( 'ircNotify', 'brion' );
 
 This code would result in ircNotify being run twice when an article is saved:
 once for 'TimStarling', and once for 'brion'.
@@ -188,9 +188,9 @@ The last result would be for cases where the hook function replaces the main
 functionality. For example, if you wanted to authenticate users to a custom
 system (LDAP, another PHP program, whatever), you could do:
 
-       $wgHooks['UserLogin'][] = array('ldapLogin', $ldapServer);
+       $wgHooks['UserLogin'][] = array( 'ldapLogin', $ldapServer );
 
-       function ldapLogin($username, $password) {
+       function ldapLogin( $username, $password ) {
                # log user into LDAP
                return false;
        }
@@ -204,25 +204,28 @@ Special:Version), and should be avoided when at all possible.
 
 ==Using hooks==
 
-A calling function or method uses the wfRunHooks() function to run the hooks
+A calling function or method uses the Hooks::run() function to run the hooks
 related to a particular event, like so:
 
        class Article {
                # ...
                function protect() {
                        global $wgUser;
-                       if (wfRunHooks('ArticleProtect', array(&$this, &$wgUser))) {
+                       if ( Hooks::run( 'ArticleProtect', array( &$this, &$wgUser ) ) ) {
                                # protect the article
-                               wfRunHooks('ArticleProtectComplete', array(&$this, &$wgUser));
+                               Hooks::run( 'ArticleProtectComplete', array( &$this, &$wgUser ) );
                        }
                }
        }
 
-wfRunHooks() returns true if the calling function should continue processing
+Hooks::run() returns true if the calling function should continue processing
 (the hooks ran OK, or there are no hooks to run), or false if it shouldn't (an
 error occurred, or one of the hooks handled the action already). Checking the
 return value matters more for "before" hooks than for "complete" hooks.
 
+Hooks::run() was added in MediaWiki 1.18, before that the global function
+wfRunHooks must be used, which was deprecated in MediaWiki 1.25.
+
 Note that hook parameters are passed in an array; this is a necessary
 inconvenience to make it possible to pass reference values (that can be changed)
 into the hook code. Also note that earlier versions of wfRunHooks took a
@@ -418,6 +421,10 @@ $module: ApiBase Module object
 &$help: Array of HTML strings to be joined for the output.
 $options: Array Options passed to ApiHelp::getHelp
 
+'ApiMain::moduleManager': Called when ApiMain has finished initializing its
+module manager. Can be used to conditionally register API modules.
+$moduleManager: ApiModuleManager Module manager instance
+
 'ApiOpenSearchSuggest': Called when constructing the OpenSearch results. Hooks
 can alter or append to the array.
 &$results: array with integer keys to associative arrays. Keys in associative
@@ -431,6 +438,10 @@ array:
     (url), 'width', 'height', 'alt', 'align'.
   - url: Url for the given title.
 
+'ApiQuery::moduleManager': Called when ApiQuery has finished initializing its
+module manager. Can be used to conditionally register API query modules.
+$moduleManager: ApiModuleManager Module manager instance
+
 'APIQueryAfterExecute': After calling the execute() method of an
 action=query submodule. Use this to extend core API modules.
 &$module: Module object
@@ -870,6 +881,20 @@ $wikiPage: WikiPage that was removed
 'CategoryPageView': Before viewing a categorypage in CategoryPage::view.
 $catpage: CategoryPage instance
 
+'CategoryViewer::doCategoryQuery': After querying for pages to be displayed
+in a Category page. Gives extensions the opportunity to batch load any
+related data about the pages.
+$type: The category type. Either 'page', 'file' or 'subcat'
+$res: Query result from DatabaseBase::select()
+
+'CategoryViewer::generateLink': Before generating an output link allow
+extensions opportunity to generate a more specific or relevant link.
+$type: The category type. Either 'page', 'img' or 'subcat'
+$title: Title object for the categorized page
+$html: Requested html content of anchor
+&$link: Returned value. When set to a non-null value by a hook subscriber
+this value will be used as the anchor instead of Linker::link
+
 'ChangePasswordForm': For extensions that need to add a field to the
 ChangePassword form via the Preferences form.
 &$extraFields: An array of arrays that hold fields like would be passed to the
@@ -1036,6 +1061,21 @@ etc.
 'DatabaseOraclePostInit': Called after initialising an Oracle database
 &$db: the DatabaseOracle object
 
+'DeletedContribsPager::reallyDoQuery': Called before really executing the query for Special:DeletedContributions
+Similar to ContribsPager::reallyDoQuery
+&$data: an array of results of all contribs queries
+$pager: The DeletedContribsPager object hooked into
+$offset: Index offset, inclusive
+$limit: Exact query limit
+$descending: Query direction, false for ascending, true for descending
+
+'DeletedContributionsLineEnding': Called before a DeletedContributions HTML line is finished.
+Similar to ContributionsLineEnding
+$page: SpecialPage object for DeletedContributions
+&$ret: the HTML line
+$row: the DB row for this line
+&$classes: the classes to add to the surrounding <li>
+
 'NewDifferenceEngine': Called when a new DifferenceEngine object is made
 $title: the diff page title (nullable)
 &$oldId: the actual old Id to use in the diff
@@ -1043,6 +1083,15 @@ $title: the diff page title (nullable)
 $old: the ?old= param value from the url
 $new: the ?new= param value from the url
 
+'GetDifferenceEngine': Called when getting a new difference engine interface object
+Return false for valid object in $differenceEngine or true for the default difference engine
+$context: IContextSource context to be used for diff
+$old: Revision ID to show and diff with
+$new: Either a revision ID or one of the strings 'cur', 'prev' or 'next'
+$refreshCache: If set, refreshes the diff cache
+$unhide: If set, allow viewing deleted revs
+&$differenceEngine: output parameter, difference engine object to be used for diff
+
 'DiffRevisionTools': Override or extend the revision tools available from the
 diff view, i.e. undo, etc.
 $newRev: Revision object of the "new" revision
@@ -1060,6 +1109,7 @@ $article: article (object) being viewed
 $oldid: oldid (int) being viewed
 
 'DoEditSectionLink': Override the HTML generated for section edit links
+* Deprecated in favour of SkinEditSectionLinks hook *
 $skin: Skin object rendering the UI
 $title: Title object for the title being linked to (may not be the same as
   the page title, if the section is included from a template)
@@ -1112,6 +1162,11 @@ $editPage: EditPage      object
 saved, that is before WikiPage::doEditContent() is called
 $editpage_Obj: the current EditPage object
 
+'EditPage::attemptSave:after': Called after an article save attempt
+$editpage_Obj: the current EditPage object
+$status: the resulting Status object
+$resultDetails: Result details array
+
 'EditPage::importFormData': allow extensions to read additional data
 posted in the form
 $editpage: EditPage instance
@@ -1245,6 +1300,12 @@ $editToken: The user's edit token.
 &$hookErr: Out-param for the error. Passed as the parameters to
   OutputPage::showErrorPage.
 
+'EnhancedChangesList::getLogText': to alter, remove or add to the links of a
+group of changes in EnhancedChangesList.
+$changesList: EnhancedChangesList object
+&$links: The links that were generated by EnhancedChangesList
+$block: The RecentChanges objects in that block
+
 'ExemptFromAccountCreationThrottle': Exemption from the account creation
 throttle.
 $ip: The ip address of the user
@@ -1951,6 +2012,17 @@ return false to omit the line from RecentChanges and Watchlist special pages.
 can alter or append to the array of URLs for search & suggestion formats.
 &$urls: array of associative arrays with Url element attributes
 
+'OpportunisticLinksUpdate': Called by WikiPage::triggerOpportunisticLinksUpdate
+when a page view triggers a re-rendering of the page. This may happen
+particularly if the parser cache is split by user language, and no cached
+rendering of the page exists in the user's language. The hook is called
+before checking whether page_links_updated indicates that the links are up
+to date. Returning false will cause triggerOpportunisticLinksUpdate() to abort
+without triggering any updates.
+$page: the Page that was rendered.
+$title: the Title of the rendered page.
+$parserOutput: ParserOutput resulting from rendering the page.
+
 'OtherBlockLogLink': Get links to the block log from extensions which blocks
 users and/or IP addresses too.
 $otherBlockLink: An array with links to other block logs
@@ -2338,6 +2410,18 @@ $title : Current Title object being displayed in search results.
 'SearchableNamespaces': An option to modify which namespaces are searchable.
 &$arr : Array of namespaces ($nsId => $name) which will be used.
 
+'SecondaryDataUpdates': Allows modification of the list of DataUpdates to
+perform when page content is modified. Currently called by
+AbstractContent::getSecondaryDataUpdates.
+$title: Title of the page that is being edited.
+$oldContent: Content object representing the page's content before the edit.
+$recursive: bool indicating whether DataUpdates should trigger recursive
+  updates (relevant mostly for LinksUpdate).
+$parserOutput: ParserOutput representing the rendered version of the page
+  after the edit.
+&$updates: a list of DataUpdate objects, to be modified or replaced by
+  the hook handler.
+
 'SelfLinkBegin': Called before a link to the current article is displayed to
 allow the display of the link to be customized.
 $nt: the Title object
@@ -2423,6 +2507,23 @@ $type: 'normal' or 'history' for old/diff views
 &$forContent: overridable flag if copyright footer is shown in content language.
   This parameter is deprecated.
 
+'SkinEditSectionLinks': Modify the section edit links
+$skin: Skin object rendering the UI
+$title: Title object for the title being linked to (may not be the same as
+  the page title, if the section is included from a template)
+$section: The designation of the section being pointed to, to be included in
+  the link, like "&section=$section"
+$tooltip: The default tooltip.  Escape before using.
+  By default, this is wrapped in the 'editsectionhint' message.
+&$result: Array containing all link detail arrays. Each link detail array should contain
+  the following keys:
+  * targetTitle - Target Title object
+  * text - String for the text
+  * attribs - Array of attributes
+  * query - Array of query parameters to add to the URL
+  * options - Array of options for Linker::link
+$lang: The language code to use for the link in the wfMessage function
+
 'SkinGetPoweredBy': TODO
 &$text: additional 'powered by' icons in HTML. Note: Modern skin does not use
 the MediaWiki icon but plain text instead.
@@ -2567,7 +2668,7 @@ $special: the special page object
   (message key) and a 'default' value.
 
 'SpecialPage_initList': Called when setting up SpecialPageFactory::$list, use this
-hook to remove a core special page.
+hook to remove a core special page or conditionally register special pages.
 $list: list (array) of core special pages
 
 'SpecialPageAfterExecute': Called after SpecialPage::execute.
index 70cebd2..7106d2e 100644 (file)
@@ -3,7 +3,7 @@
        "description": "Node.js dependencies used for KSS generation",
        "version": "0.0.1",
        "dependencies": {
-               "kss": ">=0.3.7"
+               "kss": ">=0.3.7 <=1.2.0"
        },
        "repository" : {
                "type" : "git",
diff --git a/docs/logger.txt b/docs/logger.txt
new file mode 100644 (file)
index 0000000..89e620a
--- /dev/null
@@ -0,0 +1,71 @@
+MediaWiki\Logger\LoggerFactory implements a PSR-3 [0] compatible message
+logging system.
+
+Named Psr\Log\LoggerInterface instances can be obtained from the
+MediaWiki\Logger\LoggerFactory::getInstance() static method.
+MediaWiki\Logger\LoggerFactory expects a class implementing the
+MediaWiki\Logger\Spi interface to act as a factory for new
+Psr\Log\LoggerInterface instances.
+
+The "Spi" in MediaWiki\Logger\Spi stands for "service provider interface". An
+SPI is an API intended to be implemented or extended by a third party. This
+software design pattern is intended to enable framework extension and
+replaceable components. It is specifically used in the
+MediaWiki\Logger\LoggerFactory service to allow alternate PSR-3 logging
+implementations to be easily integrated with MediaWiki.
+
+The service provider interface allows the backend logging library to be
+implemented in multiple ways. The $wgMWLoggerDefaultSpi global provides the
+classname of the default MediaWiki\Logger\Spi implementation to be loaded at
+runtime. This can either be the name of a class implementing the
+MediaWiki\Logger\Spi with a zero argument constructor or a callable that will
+return an MediaWiki\Logger\Spi instance. Alternately the
+MediaWiki\Logger\LoggerFactory::registerProvider() static method can be called
+to inject an MediaWiki\Logger\Spi instance into the LoggerFactory and bypass
+the use of the default configuration variable.
+
+The MediaWiki\Logger\LegacySpi class implements a service provider to generate
+MediaWiki\Logger\LegacyLogger instances. The MediaWiki\Logger\LegacyLogger
+class implements the PSR-3 logger interface and provides output and
+configuration equivalent to the historic logging output of wfDebug,
+wfDebugLog, wfLogDBError and wfErrorLog. The MediaWiki\Logger\LegacySpi class
+is the default service provider configured in DefaultSettings.php. It's usage
+should be transparent for users who are not ready or do not wish to switch to
+a alternate logging platform.
+
+The MediaWiki\Logger\MonologSpi class implements a service provider to
+generate Psr\Log\LoggerInterface instances that use the Monolog [1] logging
+library. See the PHP docs (or source) for MediaWiki\Logger\MonologSpi for
+details on the configuration of this provider. The default configuration
+installs a null handler that will silently discard all logging events. The
+documentation provided by the class describes a more feature rich logging
+configuration.
+
+== Classes ==
+; MediaWiki\Logger\LoggerFactory
+: Factory for Psr\Log\LoggerInterface loggers
+; MediaWiki\Logger\Spi
+: Service provider interface for MediaWiki\Logger\LoggerFactory
+; MediaWiki\Logger\NullSpi
+: MediaWiki\Logger\Spi for creating instances that discard all log events
+; MediaWiki\Logger\LegacySpi
+: Service provider for creating MediaWiki\Logger\LegacyLogger instances
+; MediaWiki\Logger\LegacyLogger
+: PSR-3 logger that mimics the historical output and configuration of wfDebug,
+  wfErrorLog and other global logging functions.
+; MediaWiki\Logger\MonologSpi
+: MediaWiki\Logger\Spi for creating instances backed by the monolog logging library
+; MediaWiki\Logger\Monolog\LegacyHandler
+: Monolog handler that replicates the udp2log and file logging
+  functionality of wfErrorLog()
+; MediaWiki\Logger\Monolog\WikiProcessor
+: Monolog log processer that adds host: wfHostname() and wiki: wfWikiID()
+  to all records
+
+== Globals ==
+; $wgMWLoggerDefaultSpi
+: Specification for creating the default service provider interface to use
+  with MediaWiki\Logger\LoggerFactory
+
+[0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
+[1]: https://github.com/Seldaek/monolog
diff --git a/docs/mwlogger.txt b/docs/mwlogger.txt
deleted file mode 100644 (file)
index ecc3626..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-MWLoggerFactory implements a PSR-3 [0] compatible message logging system.
-
-Named Psr\Log\LoggerInterface instances can be obtained from the
-MWLoggerFactory::getInstance() static method. MWLoggerFactory expects a class
-implementing the MWLoggerSpi interface to act as a factory for new
-Psr\Log\LoggerInterface instances.
-
-The "Spi" in MWLoggerSpi stands for "service provider interface". A SPI is
-an API intended to be implemented or extended by a third party. This software
-design pattern is intended to enable framework extension and replaceable
-components. It is specifically used in the MWLoggerFactory service to allow
-alternate PSR-3 logging implementations to be easily integrated with
-MediaWiki.
-
-The MWLoggerFactory::getInstance() static method is the means by which most
-code acquires a Psr\Log\LoggerInterface instance. This in turn delegates
-creation of Psr\Log\LoggerInterface instances to a class implementing the
-MWLoggerSpi service provider interface.
-
-The service provider interface allows the backend logging library to be
-implemented in multiple ways. The $wgMWLoggerDefaultSpi global provides the
-classname of the default MWLoggerSpi implementation to be loaded at runtime.
-This can either be the name of a class implementing the MWLoggerSpi with
-a zero argument constructor or a callable that will return an MWLoggerSpi
-instance. Alternately the MWLoggerFactory::registerProvider method can be
-called to inject an MWLoggerSpi instance into MWLoggerFactory and bypass the
-use of this configuration variable.
-
-The MWLoggerLegacySpi class implements a service provider to generate
-MWLoggerLegacyLogger instances. The MWLoggerLegacyLogger class implements the
-PSR-3 logger interface and provides output and configuration equivalent to the
-historic logging output of wfDebug, wfDebugLog, wfLogDBError and wfErrorLog.
-The MWLoggerLegacySpi class is the default service provider configured in
-DefaultSettings.php. It's usage should be transparent for users who are not
-ready or do not wish to switch to a alternate logging platform.
-
-The MWLoggerMonologSpi class implements a service provider to generate
-Psr\Log\LoggerInterface instances that use the Monolog [1] logging library.
-See the PHP docs (or source) for MWLoggerMonologSpi for details on the
-configuration of this provider. The default configuration installs a null
-handler that will silently discard all logging events. The documentation
-provided by the class describes a more feature rich logging configuration.
-
-== Classes ==
-; MWLoggerFactory
-: Factory for Psr\Log\LoggerInterface loggers
-; MWLoggerSpi
-: Service provider interface for MWLoggerFactory
-; MWLoggerNullSpi
-: MWLoggerSpi for creating instances that discard all log events
-; MWLoggerLegacySpi
-: Service provider for creating MWLoggerLegacyLogger instances
-; MWLoggerLegacyLogger
-: PSR-3 logger that mimics the historical output and configuration of wfDebug,
-  wfErrorLog and other global logging functions.
-; MWLoggerMonologSpi
-: MWLoggerSpi for creating instances backed by the monolog logging library
-; MwLoggerMonologHandler
-: Monolog handler that replicates the udp2log and file logging
-  functionality of wfErrorLog()
-; MwLoggerMonologProcessor
-: Monolog log processer that adds host: wfHostname() and wiki: wfWikiID()
-  to all records
-
-== Globals ==
-; $wgMWLoggerDefaultSpi
-: Specification for creating the default service provider interface to use
-  with MWLoggerFactory
-
-[0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
-[1]: https://github.com/Seldaek/monolog
diff --git a/docs/sitelist-1.0.xsd b/docs/sitelist-1.0.xsd
new file mode 100644 (file)
index 0000000..126cd03
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+       This is an XML Schema description of the format
+       used by MediaWiki's exportSites.php and importSites.php
+       scripts.
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+               xmlns:mwsl="http://www.mediawiki.org/xml/sitelist-1.0/"
+               targetNamespace="http://www.mediawiki.org/xml/sitelist-1.0/"
+               elementFormDefault="qualified">
+
+       <annotation>
+               <documentation xml:lang="en">
+                       MediaWiki's export format for site definitions.
+               </documentation>
+       </annotation>
+
+       <!-- Our root element -->
+       <element name="sites" type="mwsl:MediaWikiSiteListType">
+               <unique name="GlobalIDConstraint">
+                       <selector xpath="mwsl:Site" />
+                       <field xpath="mwsl:GlobalID" />
+               </unique>
+       </element>
+
+       <simpleType name="EmptyTagType">
+               <restriction base="string">
+                       <length value="0"/>
+               </restriction>
+       </simpleType>
+
+       <complexType name="TypedIDType">
+               <simpleContent>
+                       <extension base="NCName">
+                               <attribute name="type" use="required" type="NCName" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="TypedURIType">
+               <simpleContent>
+                       <extension base="anyURI">
+                               <attribute name="type" use="required" type="NCName" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="MediaWikiSiteListType">
+               <sequence>
+                       <element name="site" type="mwsl:SiteType"
+                                        minOccurs="0" maxOccurs="unbounded" />
+               </sequence>
+               <attribute name="version" type="string" use="optional" />
+       </complexType>
+
+       <complexType name="SiteType">
+               <choice maxOccurs="unbounded">
+                       <element name="globalid" type="ID" minOccurs="1" maxOccurs="1" />
+                       <element name="localid" type="mwsl:TypedIDType" minOccurs="0" />
+                       <element name="group" type="NCName" minOccurs="0" maxOccurs="1" />
+                       <element name="source" type="NCName" minOccurs="0" maxOccurs="1" />
+                       <element name="forward" type="mwsl:EmptyTagType" minOccurs="0" maxOccurs="1" />
+                       <element name="path" type="mwsl:TypedURIType" minOccurs="0" />
+               </choice>
+               <attribute name="type" use="optional" type="NCName" />
+       </complexType>
+
+</schema>
diff --git a/docs/sitelist.txt b/docs/sitelist.txt
new file mode 100644 (file)
index 0000000..48c7ce5
--- /dev/null
@@ -0,0 +1,47 @@
+This document describes the XML format used to represent information about external sites known
+to a MediaWiki installation. This information about external sites is used to allow "inter-wiki"
+links, cross-language navigation, as well as close integration via direct access to the other
+site's web API or even directly to their database.
+
+Lists of external sites can be imported and exported using the importSites.php and exportSites.php
+scripts. In the database, external sites are described by the sites and site_ids tables.
+
+The formal specification of the format used by importSites.php and exportSites.php can be found in
+the sitelist-1.0.xsd file. Below is an example and a brief description of what the individual XML
+elements and attributes mean:
+
+
+       <sites version="1.0">
+               <site>
+                       <globalid>acme.com</globalid>
+                       <localid type="interwiki">acme</localid>
+                       <group>Vendor</group>
+                       <path type="link">http://acme.com/</path>
+                       <source>meta.wikimedia.org</source>
+               </site>
+               <site type="mediawiki">
+                       <globalid>de.wikidik.example</globalid>
+                       <localid type="equivalent">de</localid>
+                       <group>Dictionary</group>
+                       <forward/>
+                       <path type="page_path">http://acme.com/</path>
+               </site>
+       </sites>
+
+
+The XML elements are used as follows:
+
+* sites: The root element, containing a set of site tags. May have a version attribute with the value 1.0.
+* site: A site entry, representing an external website. May have a type attribute with one of the following values:
+** ''unknown'': (default) any website
+** ''mediawiki'': A MediaWiki site
+* globalid: A unique identifier for the site. For a given site, the same unique global ID must be used across all wikis in a wiki farm (aka wiki family).
+* localid: An identifier for the site, for use on the local wiki. Multiple local IDs may be assigned to a given site. The same local ID can be used to refer to different sites by different wikis on the same farm/family. The localid element may have a type attribute with one of the following values:
+** interwiki: Used as an "interwiki" link prefix, for creating cross-wiki links.
+** equivalent: Used as a "language" link prefix, for cross-linking equivalent content in different languages.
+* group: The site group (e.g. wiki family) the site belongs to.
+* path: A URL template for accessing resources on the site. Several paths may be defined for a given site, for accessing different kinds of resources, identified by the type attribute, using one of the following values:
+** 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
diff --git a/docs/sitescache.txt b/docs/sitescache.txt
new file mode 100644 (file)
index 0000000..13bf371
--- /dev/null
@@ -0,0 +1,42 @@
+MediaWiki's SiteStore can be cached and stored in a flat file,
+in a json format. If the SiteStore is frequently accessed, the
+file cache may provide a performance benefit over a database
+store, even with memcached in front of it.
+
+Configuration:
+
+File-based caching can be enabled by setting $wgSitesCacheFile
+to the file path of the cache file.
+
+The file can then be generated with the rebuildSitesCache.php
+maintenance script.
+
+Format:
+
+In the sites cache file, sites are listed in a key-value
+map, with the key being the site's global id (e.g. "enwiki")
+and a key-value map as the value. The site list is wrapped
+with in a "sites" key.
+
+Example:
+
+"sites": {
+       "aawiktionary": {
+               "globalid": "aawiktionary",
+               "type": "mediawiki",
+               "group": "wiktionary",
+               "source": "local",
+               "language": "aa",
+               "localids": [],
+               "config": [],
+               "data": {
+                       "paths": {
+                               "file_path": "http:\/\/aa.wiktionary.org\/w\/$1",
+                               "page_path": "http:\/\/aa.wiktionary.org\/wiki\/$1"
+                       }
+               },
+               "forward": false,
+               "internalid": 2666,
+               "identifiers": []
+       }
+}
index 4698f45..873a26d 100644 (file)
@@ -442,19 +442,33 @@ class Block {
                        $dbw = wfGetDB( DB_MASTER );
                }
 
-               # Don't collide with expired blocks
-               Block::purgeExpired();
+               # Periodic purge via commit hooks
+               if ( mt_rand( 0, 9 ) == 0 ) {
+                       Block::purgeExpired();
+               }
 
                $row = $this->getDatabaseArray();
                $row['ipb_id'] = $dbw->nextSequenceValue( "ipblocks_ipb_id_seq" );
 
-               $dbw->insert(
-                       'ipblocks',
-                       $row,
-                       __METHOD__,
-                       array( 'IGNORE' )
-               );
+               $dbw->insert( 'ipblocks', $row, __METHOD__, array( 'IGNORE' ) );
                $affected = $dbw->affectedRows();
+
+               # Don't collide with expired blocks.
+               # Do this after trying to insert to avoid pointless gap locks.
+               if ( !$affected ) {
+                       $dbw->delete( 'ipblocks',
+                               array(
+                                       'ipb_address' => $row['ipb_address'],
+                                       'ipb_user' => $row['ipb_user'],
+                                       'ipb_expiry < ' . $dbw->addQuotes( $dbw->timestamp() )
+                               ),
+                               __METHOD__
+                       );
+
+                       $dbw->insert( 'ipblocks', $row, __METHOD__, array( 'IGNORE' ) );
+                       $affected = $dbw->affectedRows();
+               }
+
                $this->mId = $dbw->insertId();
 
                if ( $affected ) {
index 6b86853..66079c0 100644 (file)
@@ -89,6 +89,9 @@ class CategoryViewer extends ContextSource {
        ) {
                $this->title = $title;
                $this->setContext( $context );
+               $this->getOutput()->addModuleStyles( array(
+                       'mediawiki.action.view.categoryPage.styles'
+               ) );
                $this->from = $from;
                $this->until = $until;
                $this->limit = $context->getConfig()->get( 'CategoryPagingLimit' );
@@ -174,19 +177,30 @@ class CategoryViewer extends ContextSource {
                // Subcategory; strip the 'Category' namespace from the link text.
                $title = $cat->getTitle();
 
-               $link = Linker::link( $title, htmlspecialchars( $title->getText() ) );
-               if ( $title->isRedirect() ) {
-                       // This didn't used to add redirect-in-category, but might
-                       // as well be consistent with the rest of the sections
-                       // on a category page.
-                       $link = '<span class="redirect-in-category">' . $link . '</span>';
-               }
-               $this->children[] = $link;
+               $this->children[] = $this->generateLink(
+                       'subcat',
+                       $title,
+                       $title->isRedirect(),
+                       htmlspecialchars( $title->getText() )
+               );
 
                $this->children_start_char[] =
                        $this->getSubcategorySortChar( $cat->getTitle(), $sortkey );
        }
 
+       function generateLink( $type, Title $title, $isRedirect, $html = null ) {
+               $link = null;
+               Hooks::run( 'CategoryViewer::generateLink', array( $type, $title, $html, &$link ) );
+               if ( $link === null ) {
+                       $link = Linker::link( $title, $html );
+               }
+               if ( $isRedirect ) {
+                       $link = '<span class="redirect-in-category">' . $link . '</span>';
+               }
+
+               return $link;
+       }
+
        /**
         * Get the character to be used for sorting subcategories.
         * If there's a link from Category:A to Category:B, the sortkey of the resulting
@@ -229,13 +243,7 @@ class CategoryViewer extends ContextSource {
                                $this->gallery->add( $title );
                        }
                } else {
-                       $link = Linker::link( $title );
-                       if ( $isRedirect ) {
-                               // This seems kind of pointless given 'mw-redirect' class,
-                               // but keeping for back-compatibility with user css.
-                               $link = '<span class="redirect-in-category">' . $link . '</span>';
-                       }
-                       $this->imgsNoGallery[] = $link;
+                       $this->imgsNoGallery[] = $this->generateLink( 'image', $title, $isRedirect );
 
                        $this->imgsNoGallery_start_char[] = $wgContLang->convert(
                                $this->collation->getFirstLetter( $sortkey ) );
@@ -252,13 +260,7 @@ class CategoryViewer extends ContextSource {
        function addPage( $title, $sortkey, $pageLength, $isRedirect = false ) {
                global $wgContLang;
 
-               $link = Linker::link( $title );
-               if ( $isRedirect ) {
-                       // This seems kind of pointless given 'mw-redirect' class,
-                       // but keeping for back-compatibility with user css.
-                       $link = '<span class="redirect-in-category">' . $link . '</span>';
-               }
-               $this->articles[] = $link;
+               $this->articles[] = $this->generateLink( 'page', $title, $isRedirect );
 
                $this->articles_start_char[] = $wgContLang->convert(
                        $this->collation->getFirstLetter( $sortkey ) );
@@ -331,6 +333,8 @@ class CategoryViewer extends ContextSource {
                                )
                        );
 
+                       Hooks::run( 'CategoryViewer::doCategoryQuery', array( $type, $res ) );
+
                        $count = 0;
                        foreach ( $res as $row ) {
                                $title = Title::newFromRow( $row );
@@ -527,8 +531,7 @@ class CategoryViewer extends ContextSource {
         * TODO: Take the headers into account when creating columns, so they're
         * more visually equal.
         *
-        * More distant TODO: Scrap this and use CSS columns, whenever IE finally
-        * supports those.
+        * TODO: shortList and columnList are similar, need merging
         *
         * @param array $articles
         * @param string[] $articles_start_char
@@ -537,50 +540,34 @@ class CategoryViewer extends ContextSource {
         */
        static function columnList( $articles, $articles_start_char ) {
                $columns = array_combine( $articles, $articles_start_char );
-               # Split into three columns
-               $columns = array_chunk( $columns, ceil( count( $columns ) / 3 ), true /* preserve keys */ );
 
-               $ret = '<table style="width: 100%;"><tr style="vertical-align: top;">';
-               $prevchar = null;
+               $ret = Html::openElement( 'div', array( 'class' => 'mw-category' ) );
 
-               foreach ( $columns as $column ) {
-                       $ret .= '<td style="width: 33.3%;">';
-                       $colContents = array();
+               $colContents = array();
 
-                       # Kind of like array_flip() here, but we keep duplicates in an
-                       # array instead of dropping them.
-                       foreach ( $column as $article => $char ) {
-                               if ( !isset( $colContents[$char] ) ) {
-                                       $colContents[$char] = array();
-                               }
-                               $colContents[$char][] = $article;
+               # Kind of like array_flip() here, but we keep duplicates in an
+               # array instead of dropping them.
+               foreach ( $columns as $article => $char ) {
+                       if ( !isset( $colContents[$char] ) ) {
+                               $colContents[$char] = array();
                        }
+                       $colContents[$char][] = $article;
+               }
 
-                       $first = true;
-                       foreach ( $colContents as $char => $articles ) {
-                               # Change space to non-breaking space to keep headers aligned
-                               $h3char = $char === ' ' ? '&#160;' : htmlspecialchars( $char );
+               foreach ( $colContents as $char => $articles ) {
+                       # Change space to non-breaking space to keep headers aligned
+                       $h3char = $char === ' ' ? '&#160;' : htmlspecialchars( $char );
 
-                               $ret .= '<h3>' . $h3char;
-                               if ( $first && $char === $prevchar ) {
-                                       # We're continuing a previous chunk at the top of a new
-                                       # column, so add " cont." after the letter.
-                                       $ret .= ' ' . wfMessage( 'listingcontinuesabbrev' )->escaped();
-                               }
-                               $ret .= "</h3>\n";
+                       $ret .= '<div class="mw-category-group"><h3>' . $h3char;
+                       $ret .= "</h3>\n";
 
-                               $ret .= '<ul><li>';
-                               $ret .= implode( "</li>\n<li>", $articles );
-                               $ret .= '</li></ul>';
-
-                               $first = false;
-                               $prevchar = $char;
-                       }
+                       $ret .= '<ul><li>';
+                       $ret .= implode( "</li>\n<li>", $articles );
+                       $ret .= '</li></ul></div>';
 
-                       $ret .= "</td>\n";
                }
 
-               $ret .= '</tr></table>';
+               $ret .= Html::closeElement( 'div' );
                return $ret;
        }
 
@@ -616,7 +603,7 @@ class CategoryViewer extends ContextSource {
         * @return string HTML
         */
        private function pagingLinks( $first, $last, $type = '' ) {
-               $prevLink = $this->msg( 'prevn' )->numParams( $this->limit )->escaped();
+               $prevLink = $this->msg( 'prev-page' )->text();
 
                if ( $first != '' ) {
                        $prevQuery = $this->query;
@@ -630,7 +617,7 @@ class CategoryViewer extends ContextSource {
                        );
                }
 
-               $nextLink = $this->msg( 'nextn' )->numParams( $this->limit )->escaped();
+               $nextLink = $this->msg( 'next-page' )->text();
 
                if ( $last != '' ) {
                        $lastQuery = $this->query;
index d597d6d..754c0f8 100644 (file)
@@ -41,17 +41,13 @@ class ChangeTags {
        public static function formatSummaryRow( $tags, $page ) {
                global $wgLang;
 
-               $tags = explode( ',', $tags );
-
-               // XXX(Ori Livneh, 2014-11-08): remove once bug 73181 is resolved.
-               $tags = array_diff( $tags, array( 'HHVM', '' ) );
-
                if ( !$tags ) {
                        return array( '', array() );
                }
 
                $classes = array();
 
+               $tags = explode( ',', $tags );
                $displayTags = array();
                foreach ( $tags as $tag ) {
                        $displayTags[] = Xml::tags(
@@ -580,7 +576,7 @@ class ChangeTags {
         */
        public static function deleteTagEverywhere( $tag ) {
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->begin( __METHOD__ );
+               $dbw->startAtomic( __METHOD__ );
 
                // delete from valid_tag
                self::undefineTag( $tag );
@@ -628,7 +624,7 @@ class ChangeTags {
                // delete from change_tag
                $dbw->delete( 'change_tag', array( 'ct_tag' => $tag ), __METHOD__ );
 
-               $dbw->commit( __METHOD__ );
+               $dbw->endAtomic( __METHOD__ );
 
                // give extensions a chance
                $status = Status::newGood();
index dac3e93..481d8e7 100644 (file)
@@ -341,7 +341,7 @@ class IcuCollation extends Collation {
 
                // Check for CJK
                $firstChar = mb_substr( $string, 0, 1, 'UTF-8' );
-               if ( ord( $firstChar ) > 0x7f && self::isCjk( utf8ToCodepoint( $firstChar ) ) ) {
+               if ( ord( $firstChar ) > 0x7f && self::isCjk( UtfNormal\Utils::utf8ToCodepoint( $firstChar ) ) ) {
                        return $firstChar;
                }
 
index d4cdf9e..dc16ae3 100644 (file)
@@ -52,6 +52,8 @@ if ( !defined( 'MEDIAWIKI' ) ) {
        die( 1 );
 }
 
+/** @endcond */
+
 /**
  * wgConf hold the site configuration.
  * Not used for much in a default install.
@@ -73,7 +75,7 @@ $wgConfigRegistry = array(
  * MediaWiki version number
  * @since 1.2
  */
-$wgVersion = '1.25alpha';
+$wgVersion = '1.26alpha';
 
 /**
  * Name of the site. It must be changed in LocalSettings.php
@@ -257,6 +259,23 @@ $wgFileCacheDirectory = false;
  */
 $wgLogo = false;
 
+/**
+ * Array with URL paths to HD versions of the wiki logo. The scaled logo size
+ * should be under 135x155 pixels.
+ * Only 1.5x and 2x versions are supported.
+ *
+ * @par Example:
+ * @code
+ * $wgLogoHD = array(
+ *     "1.5x" => "path/to/1.5x_version.png",
+ *     "2x" => "path/to/2x_version.png"
+ * );
+ * @endcode
+ *
+ * @since 1.25
+ */
+$wgLogoHD = false;
+
 /**
  * The URL path of the shortcut icon.
  * @since 1.6
@@ -951,7 +970,8 @@ $wgExiv2Command = '/usr/bin/exiv2';
  * are passed as parameters after $srcPath, $dstPath, $width, $height
  */
 $wgSVGConverters = array(
-       'ImageMagick' => '$path/convert -background "#ffffff00" -thumbnail $widthx$height\! $input PNG:$output',
+       'ImageMagick' =>
+               '$path/convert -background "#ffffff00" -thumbnail $widthx$height\! $input PNG:$output',
        'sodipodi' => '$path/sodipodi -z -w $width -f $input -e $output',
        'inkscape' => '$path/inkscape -z -w $width -f $input -e $output',
        'batik' => 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d '
@@ -1835,13 +1855,6 @@ $wgDBerrorLog = false;
  */
 $wgDBerrorLogTZ = false;
 
-/**
- * Scale load balancer polling time so that under overload conditions, the
- * database server receives a SHOW STATUS query at an average interval of this
- * many microseconds
- */
-$wgDBAvgStatusPoll = 2000;
-
 /**
  * Set to true to engage MySQL 4.1/5.0 charset-related features;
  * for now will just cause sending of 'SET NAMES=utf8' on connect.
@@ -2127,28 +2140,6 @@ $wgObjectCaches = array(
        'hash' => array( 'class' => 'HashBagOStuff' ),
 );
 
-/**
- * Map of bloom filter store names to configuration arrays.
- *
- * Example:
- * $wgBloomFilterStores['main'] = array(
- *  'cacheId'      => 'main-v1',
- *  'class'        => 'BloomCacheRedis',
- *  'redisServers' => array( '127.0.0.1:6379' ),
- *  'redisConfig'  => array( 'connectTimeout' => 2 )
- * );
- *
- * A primary bloom filter must be created manually.
- * Example in eval.php:
- * <code>
- *     BloomCache::get( 'main' )->init( 'shared', 1000000000, .001 );
- * </code>
- * The size should be as large as practical given wiki size and resources.
- *
- * @since 1.24
- */
-$wgBloomFilterStores = array();
-
 /**
  * The expiry time for the parser cache, in seconds.
  * The default is 86400 (one day).
@@ -3173,9 +3164,10 @@ $wgFooterIcons = array(
        ),
        "poweredby" => array(
                "mediawiki" => array(
-                       "src" => null, // Defaults to point at
-                                      // "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
-                                      // plus srcset for 1.5x, 2x resolution variants.
+                       // Defaults to point at
+                       // "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
+                       // plus srcset for 1.5x, 2x resolution variants.
+                       "src" => null,
                        "url" => "//www.mediawiki.org/",
                        "alt" => "Powered by MediaWiki",
                )
@@ -3339,8 +3331,6 @@ $wgResourceModules = array();
  *
  * As with $wgResourceModules, paths default to being relative to the MediaWiki root.
  * You should always provide a localBasePath and remoteBasePath (or remoteExtPath/remoteSkinPath).
- * Either for all skin styles at once (first example below) or for each module separately (second
- * example).
  *
  * @par Example:
  * @code
@@ -3350,19 +3340,6 @@ $wgResourceModules = array();
  *     'remoteSkinPath' => 'Foo',
  *     'localBasePath' => __DIR__,
  *   );
- *
- *   $wgResourceModuleSkinStyles['foo'] = array(
- *     'bar' => array(
- *       'bar.css',
- *       'remoteSkinPath' => 'Foo',
- *       'localBasePath' => __DIR__,
- *     ),
- *     'quux' => array(
- *       'quux.css',
- *       'remoteSkinPath' => 'Foo',
- *       'localBasePath' => __DIR__,
- *     ),
- *   );
  * @endcode
  */
 $wgResourceModuleSkinStyles = array();
@@ -3786,7 +3763,7 @@ $wgInterwikiFallbackSite = 'wiki';
  */
 
 /**
- * Specify the file location for the SiteStore json cache file.
+ * Specify the file location for the Sites json cache file.
  */
 $wgSitesCacheFile = false;
 
@@ -3984,7 +3961,7 @@ $wgUrlProtocols = array(
 );
 
 /**
- * If true, removes (substitutes) templates in "~~~~" signatures.
+ * If true, removes (by substituting) templates in signatures.
  */
 $wgCleanSignatures = true;
 
@@ -4207,6 +4184,18 @@ $wgPasswordSalt = true;
  */
 $wgMinimalPasswordLength = 1;
 
+/**
+ * Specifies the maximal length of a user password (T64685).
+ *
+ * It is not recommended to make this greater than the default, as it can
+ * allow DoS attacks by users setting really long passwords. In addition,
+ * this should not be lowered too much, as it enforces weak passwords.
+ *
+ * @warning Unlike other password settings, user with passwords greater than
+ *      the maximum will not be able to log in.
+ */
+$wgMaximalPasswordLength = 4096;
+
 /**
  * Specifies if users should be sent to a password-reset form on login, if their
  * password doesn't meet the requirements of User::isValidPassword().
@@ -4844,7 +4833,6 @@ $wgAutopromote = array(
  * @endcode
  * Where event is either:
  *    - 'onEdit' (when user edits)
- *    - 'onView' (when user views the wiki)
  *
  * Criteria has the same format as $wgAutopromote
  *
@@ -4853,7 +4841,6 @@ $wgAutopromote = array(
  */
 $wgAutopromoteOnce = array(
        'onEdit' => array(),
-       'onView' => array()
 );
 
 /**
@@ -5294,19 +5281,24 @@ $wgDebugLogGroups = array();
  *
  * The value should be an array suitable for use with
  * ObjectFactory::getObjectFromSpec(). The created object is expected to
- * implement the MWLoggerSpi interface. See ObjectFactory for additional
+ * implement the MediaWiki\Logger\Spi interface. See ObjectFactory for additional
  * details.
  *
- * Alternately the MWLoggerFactory::registerProvider method can be called to
- * inject an MWLoggerSpi instance into MWLoggerFactory and bypass the use of
- * this configuration variable entirely.
+ * Alternately the MediaWiki\Logger\LoggerFactory::registerProvider method can
+ * be called to inject an MediaWiki\Logger\Spi instance into the LoggerFactory
+ * and bypass the use of this configuration variable entirely.
+ *
+ * @par To completely disable logging:
+ * @code
+ * $wgMWLoggerDefaultSpi = array( 'class' => '\\MediaWiki\\Logger\\NullSpi' );
+ * @endcode
  *
  * @since 1.25
  * @var array $wgMWLoggerDefaultSpi
  * @see MwLogger
  */
 $wgMWLoggerDefaultSpi = array(
-       'class' => 'MWLoggerLegacySpi',
+       'class' => '\\MediaWiki\\Logger\\LegacySpi',
 );
 
 /**
@@ -5389,6 +5381,7 @@ $wgDeprecationReleaseLimit = false;
 
 /**
  * Only record profiling info for pages that took longer than this
+ * @deprecated since 1.25: set $wgProfiler['threshold'] instead.
  */
 $wgProfileLimit = 0.0;
 
@@ -6422,6 +6415,8 @@ $wgJobClasses = array(
        'PublishStashedFile' => 'PublishStashedFileJob',
        'ThumbnailRender' => 'ThumbnailRenderJob',
        'recentChangesUpdate' => 'RecentChangesUpdateJob',
+       'refreshLinksPrioritized' => 'RefreshLinksJob', // for cascading protection
+       'enqueue' => 'EnqueueJob', // local queue for multi-DC setups
        'null' => 'NullJob'
 );
 
@@ -6464,7 +6459,7 @@ $wgJobTypeConf = array(
  * These settings should be global to all wikis.
  */
 $wgJobQueueAggregator = array(
-       'class' => 'JobQueueAggregatorMemc'
+       'class' => 'JobQueueAggregatorNull'
 );
 
 /**
@@ -6664,17 +6659,10 @@ $wgLogHeaders = array(
  * Extensions with custom log types may add to this array.
  */
 $wgLogActions = array(
-       'block/block' => 'blocklogentry',
-       'block/unblock' => 'unblocklogentry',
-       'block/reblock' => 'reblock-logentry',
        'protect/protect' => 'protectedarticle',
        'protect/modify' => 'modifiedarticleprotection',
        'protect/unprotect' => 'unprotectedarticle',
        'protect/move_prot' => 'movedarticleprotection',
-       'import/upload' => 'import-logentry-upload',
-       'import/interwiki' => 'import-logentry-interwiki',
-       'suppress/block' => 'blocklogentry',
-       'suppress/reblock' => 'reblock-logentry',
 );
 
 /**
@@ -6704,6 +6692,13 @@ $wgLogActionsHandlers = array(
        'managetags/delete' => 'LogFormatter',
        'managetags/activate' => 'LogFormatter',
        'managetags/deactivate' => 'LogFormatter',
+       'block/block' => 'BlockLogFormatter',
+       'block/unblock' => 'BlockLogFormatter',
+       'block/reblock' => 'BlockLogFormatter',
+       'suppress/block' => 'BlockLogFormatter',
+       'suppress/reblock' => 'BlockLogFormatter',
+       'import/upload' => 'LogFormatter',
+       'import/interwiki' => 'LogFormatter',
 );
 
 /**
@@ -7416,6 +7411,34 @@ $wgPageLanguageUseDB = false;
  */
 $wgUseLinkNamespaceDBFields = true;
 
+/**
+ * Global configuration variable for Virtual REST Services.
+ * Parameters for different services are to be declared inside
+ * $wgVirtualRestConfig['modules'], which is to be treated as an associative
+ * array. Global parameters will be merged with service-specific ones. The
+ * result will then be passed to VirtualRESTService::__construct() in the
+ * module.
+ *
+ * Example config for Parsoid:
+ *
+ *   $wgVirtualRestConfig['modules']['parsoid'] = array(
+ *     'url' => 'http://localhost:8000',
+ *     'prefix' => 'enwiki',
+ *   );
+ *
+ * @var array
+ * @since 1.25
+ */
+$wgVirtualRestConfig = array(
+       'modules' => array(),
+       'global' => array(
+               # Timeout in seconds
+               'timeout' => 360,
+               'forwardCookies' => false,
+               'HTTPProxy' => null
+       )
+);
+
 /**
  * For really cool vim folding this needs to be at the end:
  * vim: foldmarker=@{,@} foldmethod=marker
index 8456c5d..c9263da 100644 (file)
@@ -208,7 +208,6 @@ require_once __DIR__ . '/libs/normal/UtfNormalDefines.php';
 /**@{
  * Hook support constants
  */
-define( 'MW_SUPPORTS_EDITFILTERMERGED', 1 );
 define( 'MW_SUPPORTS_PARSERFIRSTCALLINIT', 1 );
 define( 'MW_SUPPORTS_LOCALISATIONCACHE', 1 );
 define( 'MW_SUPPORTS_CONTENTHANDLER', 1 );
@@ -245,11 +244,6 @@ define( 'SFH_NO_HASH', 1 );
 define( 'SFH_OBJECT_ARGS', 2 );
 /**@}*/
 
-/**
- * Flags for Parser::replaceLinkHolders
- */
-define( 'RLH_FOR_UPDATE', 1 );
-
 /**@{
  * Autopromote conditions (must be here and not in Autopromote.php, so that
  * they're loaded for DefaultSettings.php before AutoLoader.php)
index cb79fd1..e113426 100644 (file)
@@ -377,9 +377,6 @@ class EditPage {
        /** @var bool */
        protected $edit;
 
-       /** @var bool */
-       public $live;
-
        /**
         * @param Article $article
         */
@@ -478,11 +475,6 @@ class EditPage {
                $this->importFormData( $wgRequest );
                $this->firsttime = false;
 
-               if ( $this->live ) {
-                       $this->livePreview();
-                       return;
-               }
-
                if ( wfReadOnly() && $this->save ) {
                        // Force preview
                        $this->save = false;
@@ -504,7 +496,7 @@ class EditPage {
                        }
                }
 
-               $permErrors = $this->getEditPermissionErrors();
+               $permErrors = $this->getEditPermissionErrors( $this->save ? 'secure' : 'full' );
                if ( $permErrors ) {
                        wfDebug( __METHOD__ . ": User can't edit\n" );
                        // Auto-block user's IP if the account was "hard" blocked
@@ -534,7 +526,9 @@ class EditPage {
                # in the back door with a hand-edited submission URL.
 
                if ( 'save' == $this->formtype ) {
-                       if ( !$this->attemptSave() ) {
+                       $resultDetails = null;
+                       $status = $this->attemptSave( $resultDetails );
+                       if ( !$this->handleStatus( $status, $resultDetails ) ) {
                                return;
                        }
                }
@@ -559,15 +553,22 @@ class EditPage {
        }
 
        /**
+        * @param string $rigor Same format as Title::getUserPermissionErrors()
         * @return array
         */
-       protected function getEditPermissionErrors() {
+       protected function getEditPermissionErrors( $rigor = 'secure' ) {
                global $wgUser;
-               $permErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $wgUser );
+
+               $permErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $wgUser, $rigor );
                # Can this title be created?
                if ( !$this->mTitle->exists() ) {
-                       $permErrors = array_merge( $permErrors,
-                               wfArrayDiff2( $this->mTitle->getUserPermissionsErrors( 'create', $wgUser ), $permErrors ) );
+                       $permErrors = array_merge(
+                               $permErrors,
+                               wfArrayDiff2(
+                                       $this->mTitle->getUserPermissionsErrors( 'create', $wgUser, $rigor ),
+                                       $permErrors
+                               )
+                       );
                }
                # Ignore some permissions errors when a user is just previewing/viewing diffs
                $remove = array();
@@ -579,6 +580,7 @@ class EditPage {
                        }
                }
                $permErrors = wfArrayDiff2( $permErrors, $remove );
+
                return $permErrors;
        }
 
@@ -791,8 +793,7 @@ class EditPage {
                                wfDebug( "POST DATA: " . var_export( $_POST, true ) . "\n" );
                                $this->preview = true;
                        } else {
-                               /* Fallback for live preview */
-                               $this->preview = $request->getCheck( 'wpPreview' ) || $request->getCheck( 'wpLivePreview' );
+                               $this->preview = $request->getCheck( 'wpPreview' );
                                $this->diff = $request->getCheck( 'wpDiff' );
 
                                // Remember whether a save was requested, so we can indicate
@@ -905,7 +906,6 @@ class EditPage {
                 *   allowed.
                 */
 
-               $this->live = $request->getCheck( 'live' );
                $this->editintro = $request->getText( 'editintro',
                        // Custom edit intro for new sections
                        $this->section === 'new' ? 'MediaWiki:addsection-editintro' : '' );
@@ -1276,18 +1276,20 @@ class EditPage {
 
        /**
         * Attempt submission
+        * @param array $resultDetails See docs for $result in internalAttemptSave
         * @throws UserBlockedError|ReadOnlyError|ThrottledError|PermissionsError
-        * @return bool False if output is done, true if the rest of the form should be displayed
+        * @return Status The resulting status object.
         */
-       public function attemptSave() {
+       public function attemptSave( &$resultDetails = false ) {
                global $wgUser;
 
-               $resultDetails = false;
                # Allow bots to exempt some edits from bot flagging
                $bot = $wgUser->isAllowed( 'bot' ) && $this->bot;
                $status = $this->internalAttemptSave( $resultDetails, $bot );
 
-               return $this->handleStatus( $status, $resultDetails );
+               Hooks::run( 'EditPage::attemptSave:after', array( $this, $status, $resultDetails ) );
+
+               return $status;
        }
 
        /**
@@ -2086,6 +2088,9 @@ class EditPage {
                        $displayTitle = $contextTitle->getPrefixedText();
                }
                $wgOut->setPageTitle( wfMessage( $msg, $displayTitle ) );
+               # Transmit the name of the message to JavaScript for live preview
+               # Keep Resources.php/mediawiki.action.edit.preview in sync with the possible keys
+               $wgOut->addJsConfigVars( 'wgEditMessage', $msg );
        }
 
        /**
@@ -2543,7 +2548,19 @@ class EditPage {
                }
 
                // Add edit notices
-               $wgOut->addHTML( implode( "\n", $this->mTitle->getEditNotices( $this->oldid ) ) );
+               $editNotices = $this->mTitle->getEditNotices( $this->oldid );
+               if ( count( $editNotices ) ) {
+                       $wgOut->addHTML( implode( "\n", $editNotices ) );
+               } else {
+                       $msg = wfMessage( 'editnotice-notext' );
+                       if ( !$msg->isDisabled() ) {
+                               $wgOut->addHTML(
+                                       '<div class="mw-editnotice-notext">'
+                                       . $msg->parseAsBlock()
+                                       . '</div>'
+                               );
+                       }
+               }
 
                if ( $this->isConflict ) {
                        $wgOut->wrapWikiMsg( "<div class='mw-explainconflict'>\n$1\n</div>", 'explainconflict' );
@@ -2653,19 +2670,21 @@ class EditPage {
                                                array( 'userinvalidcssjstitle', $this->mTitle->getSkinFromCssJsSubpage() )
                                        );
                                }
-                               if ( $this->formtype !== 'preview' ) {
-                                       if ( $this->isCssSubpage && $wgAllowUserCss ) {
-                                               $wgOut->wrapWikiMsg(
-                                                       "<div id='mw-usercssyoucanpreview'>\n$1\n</div>",
-                                                       array( 'usercssyoucanpreview' )
-                                               );
-                                       }
+                               if ( $this->getTitle()->isSubpageOf( $wgUser->getUserPage() ) ) {
+                                       if ( $this->formtype !== 'preview' ) {
+                                               if ( $this->isCssSubpage && $wgAllowUserCss ) {
+                                                       $wgOut->wrapWikiMsg(
+                                                               "<div id='mw-usercssyoucanpreview'>\n$1\n</div>",
+                                                               array( 'usercssyoucanpreview' )
+                                                       );
+                                               }
 
-                                       if ( $this->isJsSubpage && $wgAllowUserJs ) {
-                                               $wgOut->wrapWikiMsg(
-                                                       "<div id='mw-userjsyoucanpreview'>\n$1\n</div>",
-                                                       array( 'userjsyoucanpreview' )
-                                               );
+                                               if ( $this->isJsSubpage && $wgAllowUserJs ) {
+                                                       $wgOut->wrapWikiMsg(
+                                                               "<div id='mw-userjsyoucanpreview'>\n$1\n</div>",
+                                                               array( 'userjsyoucanpreview' )
+                                                       );
+                                               }
                                        }
                                }
                        }
@@ -2984,6 +3003,12 @@ HTML
 
                if ( $this->formtype == 'preview' ) {
                        $this->showPreview( $previewOutput );
+               } else {
+                       // Empty content container for LivePreview
+                       $pageViewLang = $this->mTitle->getPageViewLanguage();
+                       $attribs = array( 'lang' => $pageViewLang->getHtmlCode(), 'dir' => $pageViewLang->getDir(),
+                               'class' => 'mw-content-' . $pageViewLang->getDir() );
+                       $wgOut->addHTML( Html::rawElement( 'div', $attribs ) );
                }
 
                $wgOut->addHTML( '</div>' );
@@ -3791,36 +3816,6 @@ HTML
                return $buttons;
        }
 
-       /**
-        * Output preview text only. This can be sucked into the edit page
-        * via JavaScript, and saves the server time rendering the skin as
-        * well as theoretically being more robust on the client (doesn't
-        * disturb the edit box's undo history, won't eat your text on
-        * failure, etc).
-        *
-        * @todo This doesn't include category or interlanguage links.
-        *       Would need to enhance it a bit, "<s>maybe wrap them in XML
-        *       or something...</s>" that might also require more skin
-        *       initialization, so check whether that's a problem.
-        */
-       function livePreview() {
-               global $wgOut;
-               $wgOut->disable();
-               header( 'Content-type: text/xml; charset=utf-8' );
-               header( 'Cache-control: no-cache' );
-
-               $previewText = $this->getPreviewText();
-               #$categories = $skin->getCategoryLinks();
-
-               $s =
-                       '<?xml version="1.0" encoding="UTF-8" ?>' . "\n" .
-                       Xml::tags( 'livepreview', null,
-                               Xml::element( 'preview', null, $previewText )
-                               #.      Xml::element( 'category', null, $categories )
-                       );
-               echo $s;
-       }
-
        /**
         * Creates a basic error page which informs the user that
         * they have attempted to edit a nonexistent section.
@@ -3991,7 +3986,7 @@ HTML
                                // breaks one of the entities whilst editing.
                                if ( ( substr( $invalue, $i, 1 ) == ";" ) && ( strlen( $hexstring ) <= 6 ) ) {
                                        $codepoint = hexdec( $hexstring );
-                                       $result .= codepointToUtf8( $codepoint );
+                                       $result .= UtfNormal\Utils::codepointToUtf8( $codepoint );
                                } else {
                                        $result .= "&#x" . $hexstring . substr( $invalue, $i, 1 );
                                }
index 9be3f57..600b136 100644 (file)
@@ -92,7 +92,7 @@ class FeedItem {
         */
        public function getUniqueId() {
                if ( $this->uniqueId ) {
-                       return $this->xmlEncode( $this->uniqueId );
+                       return $this->xmlEncode( wfExpandUrl( $this->uniqueId, PROTO_CURRENT ) );
                }
        }
 
index 15fdbc5..a01d642 100644 (file)
@@ -164,7 +164,7 @@ class FeedUtils {
                                $diffText = "<p>Can't load revision $newid</p>";
                        } else {
                                // Diff output fine, clean up any illegal UTF-8
-                               $diffText = UtfNormal::cleanUp( $diffText );
+                               $diffText = UtfNormal\Validator::cleanUp( $diffText );
                                $diffText = self::applyDiffStyle( $diffText );
                        }
                } else {
index 5232413..9e81a3c 100644 (file)
@@ -24,6 +24,10 @@ if ( !defined( 'MEDIAWIKI' ) ) {
        die( "This file is part of MediaWiki, it is not a valid entry point" );
 }
 
+use Liuggio\StatsdClient\StatsdClient;
+use Liuggio\StatsdClient\Sender\SocketSender;
+use MediaWiki\Logger\LoggerFactory;
+
 // Hide compatibility functions from Doxygen
 /// @cond
 
@@ -163,12 +167,8 @@ if ( !function_exists( 'hash_equals' ) ) {
 /**
  * Load an extension
  *
- * This is the closest equivalent to:
- *   require_once "$IP/extensions/$name/$name.php";
- * as it will process and load the extension immediately.
- *
- * However, batch loading with wfLoadExtensions will
- * be more performant.
+ * This queues an extension to be loaded through
+ * the ExtensionRegistry system.
  *
  * @param string $name Name of the extension to load
  * @param string|null $path Absolute path of where to find the extension.json file
@@ -178,7 +178,7 @@ function wfLoadExtension( $name, $path = null ) {
                global $IP;
                $path = "$IP/extensions/$name/extension.json";
        }
-       ExtensionRegistry::getInstance()->load( $path );
+       ExtensionRegistry::getInstance()->queue( $path );
 }
 
 /**
@@ -199,8 +199,6 @@ function wfLoadExtensions( array $exts ) {
        foreach ( $exts as $ext ) {
                $registry->queue( "$IP/extensions/$ext/extension.json" );
        }
-
-       $registry->loadFromQueue();
 }
 
 /**
@@ -215,7 +213,7 @@ function wfLoadSkin( $name, $path = null ) {
                global $IP;
                $path = "$IP/skins/$name/skin.json";
        }
-       ExtensionRegistry::getInstance()->load( $path );
+       ExtensionRegistry::getInstance()->queue( $path );
 }
 
 /**
@@ -230,8 +228,6 @@ function wfLoadSkins( array $skins ) {
        foreach ( $skins as $skin ) {
                $registry->queue( "$IP/skins/$skin/skin.json" );
        }
-
-       $registry->loadFromQueue();
 }
 
 /**
@@ -1027,12 +1023,7 @@ function wfMatchesDomainList( $url, $domains ) {
  * @since 1.25 support for additional context data
  *
  * @param string $text
- * @param string|bool $dest Destination of the message:
- *     - 'all': both to the log and HTML (debug toolbar or HTML comments)
- *     - 'log': only to the log and not in HTML
- *   For backward compatibility, it can also take a boolean:
- *     - true: same as 'all'
- *     - false: same as 'log'
+ * @param string|bool $dest Unused
  * @param array $context Additional logging context data
  */
 function wfDebug( $text, $dest = 'all', array $context = array() ) {
@@ -1043,13 +1034,6 @@ function wfDebug( $text, $dest = 'all', array $context = array() ) {
                return;
        }
 
-       // Turn $dest into a string if it's a boolean (for b/c)
-       if ( $dest === true ) {
-               $dest = 'all';
-       } elseif ( $dest === false ) {
-               $dest = 'log';
-       }
-
        $text = trim( $text );
 
        // Inline logic from deprecated wfDebugTimer()
@@ -1064,21 +1048,11 @@ function wfDebug( $text, $dest = 'all', array $context = array() ) {
                );
        }
 
-       if ( $dest === 'all' ) {
-               $prefix = '';
-               if ( $wgDebugTimestamps ) {
-                       // Prepend elapsed request time and real memory usage with two
-                       // trailing spaces.
-                       $prefix = "{$context['seconds_elapsed']} {$context['memory_used']}  ";
-               }
-               MWDebug::debugMsg( "{$prefix}{$text}" );
-       }
-
        if ( $wgDebugLogPrefix !== '' ) {
                $context['prefix'] = $wgDebugLogPrefix;
        }
 
-       $logger = MWLoggerFactory::getInstance( 'wfDebug' );
+       $logger = LoggerFactory::getInstance( 'wfDebug' );
        $logger->debug( $text, $context );
 }
 
@@ -1178,11 +1152,7 @@ function wfDebugLog(
 
        $text = trim( $text );
 
-       if ( $dest === 'all' ) {
-               MWDebug::debugMsg( "[{$logGroup}] {$text}\n" );
-       }
-
-       $logger = MWLoggerFactory::getInstance( $logGroup );
+       $logger = LoggerFactory::getInstance( $logGroup );
        $context['private'] = ( $dest === 'private' );
        $logger->info( $text, $context );
 }
@@ -1196,7 +1166,7 @@ function wfDebugLog(
  * @param array $context Additional logging context data
  */
 function wfLogDBError( $text, array $context = array() ) {
-       $logger = MWLoggerFactory::getInstance( 'wfLogDBError' );
+       $logger = LoggerFactory::getInstance( 'wfLogDBError' );
        $logger->error( trim( $text ), $context );
 }
 
@@ -1255,11 +1225,11 @@ function wfLogWarning( $msg, $callerOffset = 1, $level = E_USER_WARNING ) {
  * @param string $file Filename
  * @param array $context Additional logging context data
  * @throws MWException
- * @deprecated since 1.25 Use MWLoggerLegacyLogger::emit or UDPTransport
+ * @deprecated since 1.25 Use MediaWiki\Logger\LegacyLogger::emit or UDPTransport
  */
 function wfErrorLog( $text, $file, array $context = array() ) {
        wfDeprecated( __METHOD__, '1.25' );
-       $logger = MWLoggerFactory::getInstance( 'wfErrorLog' );
+       $logger = LoggerFactory::getInstance( 'wfErrorLog' );
        $context['destination'] = $file;
        $logger->info( trim( $text ), $context );
 }
@@ -1268,27 +1238,30 @@ function wfErrorLog( $text, $file, array $context = array() ) {
  * @todo document
  */
 function wfLogProfilingData() {
-       global $wgRequestTime, $wgDebugLogGroups, $wgDebugRawPage;
-       global $wgProfileLimit, $wgUser, $wgRequest;
+       global $wgDebugLogGroups, $wgDebugRawPage;
 
-       StatCounter::singleton()->flush();
+       $context = RequestContext::getMain();
+       $request = $context->getRequest();
 
        $profiler = Profiler::instance();
+       $profiler->setContext( $context );
+       $profiler->logData();
 
-       # Profiling must actually be enabled...
-       if ( $profiler instanceof ProfilerStub ) {
-               return;
+       $config = $context->getConfig();
+       if ( $config->has( 'StatsdServer' ) ) {
+               $statsdServer = explode( ':', $config->get( 'StatsdServer' ) );
+               $statsdHost = $statsdServer[0];
+               $statsdPort = isset( $statsdServer[1] ) ? $statsdServer[1] : 8125;
+               $statsdSender = new SocketSender( $statsdHost, $statsdPort );
+               $statsdClient = new StatsdClient( $statsdSender );
+               $statsdClient->send( $context->getStats()->getBuffer() );
        }
 
-       // Get total page request time and only show pages that longer than
-       // $wgProfileLimit time (default is 0)
-       $elapsed = microtime( true ) - $wgRequestTime;
-       if ( $elapsed <= $wgProfileLimit ) {
+       # Profiling must actually be enabled...
+       if ( $profiler instanceof ProfilerStub ) {
                return;
        }
 
-       $profiler->logData();
-
        if ( isset( $wgDebugLogGroups['profileoutput'] )
                && $wgDebugLogGroups['profileoutput'] === false
        ) {
@@ -1299,7 +1272,7 @@ function wfLogProfilingData() {
                return;
        }
 
-       $ctx = array( 'elapsed' => $elapsed );
+       $ctx = array( 'elapsed' => $request->getElapsedTime() );
        if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
                $ctx['forwarded_for'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
@@ -1318,23 +1291,20 @@ function wfLogProfilingData() {
        // Don't load $wgUser at this late stage just for statistics purposes
        // @todo FIXME: We can detect some anons even if it is not loaded.
        // See User::getId()
-       if ( $wgUser->isItemLoaded( 'id' ) && $wgUser->isAnon() ) {
-               $ctx['anon'] = true;
-       } else {
-               $ctx['anon'] = false;
-       }
+       $user = $context->getUser();
+       $ctx['anon'] = $user->isItemLoaded( 'id' ) && $user->isAnon();
 
        // Command line script uses a FauxRequest object which does not have
        // any knowledge about an URL and throw an exception instead.
        try {
-               $ctx['url'] = urldecode( $wgRequest->getRequestURL() );
+               $ctx['url'] = urldecode( $request->getRequestURL() );
        } catch ( Exception $ignored ) {
                // no-op
        }
 
        $ctx['output'] = $profiler->getOutput();
 
-       $log = MWLoggerFactory::getInstance( 'profileoutput' );
+       $log = LoggerFactory::getInstance( 'profileoutput' );
        $log->info( "Elapsed: {elapsed}; URL: <{url}>\n{output}", $ctx );
 }
 
@@ -1346,7 +1316,8 @@ function wfLogProfilingData() {
  * @return void
  */
 function wfIncrStats( $key, $count = 1 ) {
-       StatCounter::singleton()->incr( $key, $count );
+       $stats = RequestContext::getMain()->getStats();
+       $stats->updateCount( $key, $count );
 }
 
 /**
@@ -1373,6 +1344,12 @@ function wfReadOnlyReason() {
                } else {
                        $wgReadOnly = false;
                }
+               // Callers use this method to be aware that data presented to a user
+               // may be very stale and thus allowing submissions can be problematic.
+               if ( $wgReadOnly === false && wfGetLB()->getLaggedSlaveMode() ) {
+                       $wgReadOnly = 'The database has been automatically locked ' .
+                               'while the slave database servers catch up to the master';
+               }
        }
 
        return $wgReadOnly;
@@ -2496,20 +2473,6 @@ function wfIsHHVM() {
        return defined( 'HHVM_VERSION' );
 }
 
-/**
- * Swap two variables
- *
- * @deprecated since 1.24
- * @param mixed $x
- * @param mixed $y
- */
-function swap( &$x, &$y ) {
-       wfDeprecated( __FUNCTION__, '1.24' );
-       $z = $x;
-       $x = $y;
-       $y = $z;
-}
-
 /**
  * Tries to get the system directory for temporary files. First
  * $wgTmpDirectory is checked, and then the TMPDIR, TMP, and TEMP
@@ -2660,13 +2623,19 @@ function wfIniGetBool( $setting ) {
  * Also fixes the locale problems on Linux in PHP 5.2.6+ (bug backported to
  * earlier distro releases of PHP)
  *
- * @param string $args,...
+ * @param string ... strings to escape and glue together, or a single array of strings parameter
  * @return string
  */
 function wfEscapeShellArg( /*...*/ ) {
        wfInitShellLocale();
 
        $args = func_get_args();
+       if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
+               // If only one argument has been passed, and that argument is an array,
+               // treat it as a list of arguments
+               $args = reset( $args );
+       }
+
        $first = true;
        $retVal = '';
        foreach ( $args as $arg ) {
@@ -2757,6 +2726,8 @@ function wfShellExecDisabled() {
  * @param array $options Array of options:
  *   - duplicateStderr: Set this to true to duplicate stderr to stdout,
  *     including errors from limit.sh
+ *   - profileMethod: By default this function will profile based on the calling
+ *     method. Set this to a string for an alternative method to profile from
  *
  * @return string Collected stdout as a string
  */
@@ -2775,6 +2746,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
        }
 
        $includeStderr = isset( $options['duplicateStderr'] ) && $options['duplicateStderr'];
+       $profileMethod = isset( $options['profileMethod'] ) ? $options['profileMethod'] : wfGetCaller();
 
        wfInitShellLocale();
 
@@ -2796,12 +2768,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
                }
        }
        if ( is_array( $cmd ) ) {
-               // Command line may be given as an array, escape each value and glue them together with a space
-               $cmdVals = array();
-               foreach ( $cmd as $val ) {
-                       $cmdVals[] = wfEscapeShellArg( $val );
-               }
-               $cmd = implode( ' ', $cmdVals );
+               $cmd = wfEscapeShellArg( $cmd );
        }
 
        $cmd = $envcmd . $cmd;
@@ -2848,6 +2815,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
                $desc[3] = array( 'pipe', 'w' );
        }
        $pipes = null;
+       $scoped = Profiler::instance()->scopedProfileIn( __FUNCTION__ . '-' . $profileMethod );
        $proc = proc_open( $cmd, $desc, $pipes );
        if ( !$proc ) {
                wfDebugLog( 'exec', "proc_open() failed: $cmd" );
@@ -2999,7 +2967,8 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
  * @return string Collected stdout and stderr as a string
  */
 function wfShellExecWithStderr( $cmd, &$retval = null, $environ = array(), $limits = array() ) {
-       return wfShellExec( $cmd, $retval, $environ, $limits, array( 'duplicateStderr' => true ) );
+       return wfShellExec( $cmd, $retval, $environ, $limits,
+               array( 'duplicateStderr' => true, 'profileMethod' => wfGetCaller() ) );
 }
 
 /**
@@ -3019,15 +2988,6 @@ function wfInitShellLocale() {
        }
 }
 
-/**
- * Alias to wfShellWikiCmd()
- *
- * @see wfShellWikiCmd()
- */
-function wfShellMaintenanceCmd( $script, array $parameters = array(), array $options = array() ) {
-       return wfShellWikiCmd( $script, $parameters, $options );
-}
-
 /**
  * Generate a shell-escaped command line string to run a MediaWiki cli script.
  * Note that $parameters should be a flat array and an option with an argument
@@ -3051,7 +3011,7 @@ function wfShellWikiCmd( $script, array $parameters = array(), array $options =
        }
        $cmd[] = $script;
        // Escape each parameter for shell
-       return implode( " ", array_map( 'wfEscapeShellArg', array_merge( $cmd, $parameters ) ) );
+       return wfEscapeShellArg( array_merge( $cmd, $parameters ) );
 }
 
 /**
@@ -3096,10 +3056,8 @@ function wfMerge( $old, $mine, $yours, &$result ) {
        fclose( $yourtextFile );
 
        # Check for a conflict
-       $cmd = wfEscapeShellArg( $wgDiff3 ) . ' -a --overlap-only ' .
-               wfEscapeShellArg( $mytextName ) . ' ' .
-               wfEscapeShellArg( $oldtextName ) . ' ' .
-               wfEscapeShellArg( $yourtextName );
+       $cmd = wfEscapeShellArg( $wgDiff3, '-a', '--overlap-only', $mytextName,
+               $oldtextName, $yourtextName );
        $handle = popen( $cmd, 'r' );
 
        if ( fgets( $handle, 1024 ) ) {
@@ -3110,8 +3068,8 @@ function wfMerge( $old, $mine, $yours, &$result ) {
        pclose( $handle );
 
        # Merge differences
-       $cmd = wfEscapeShellArg( $wgDiff3 ) . ' -a -e --merge ' .
-               wfEscapeShellArg( $mytextName, $oldtextName, $yourtextName );
+       $cmd = wfEscapeShellArg( $wgDiff3, '-a', '-e', '--merge', $mytextName,
+               $oldtextName, $yourtextName );
        $handle = popen( $cmd, 'r' );
        $result = '';
        do {
@@ -3135,7 +3093,9 @@ function wfMerge( $old, $mine, $yours, &$result ) {
 
 /**
  * Returns unified plain-text diff of two texts.
- * Useful for machine processing of diffs.
+ * "Useful" for machine processing of diffs.
+ *
+ * @deprecated since 1.25, use DiffEngine/UnifiedDiffFormatter directly
  *
  * @param string $before The text before the changes.
  * @param string $after The text after the changes.
@@ -3175,6 +3135,11 @@ function wfDiff( $before, $after, $params = '-u' ) {
        $cmd = "$wgDiff " . $params . ' ' . wfEscapeShellArg( $oldtextName, $newtextName );
 
        $h = popen( $cmd, 'r' );
+       if ( !$h ) {
+               unlink( $oldtextName );
+               unlink( $newtextName );
+               throw new Exception( __METHOD__ . '(): popen() failed' );
+       }
 
        $diff = '';
 
@@ -3659,19 +3624,7 @@ function wfGetLBFactory() {
  * Shortcut for RepoGroup::singleton()->findFile()
  *
  * @param string $title String or Title object
- * @param array $options Associative array of options:
- *     time:           requested time for an archived image, or false for the
- *                     current version. An image object will be returned which was
- *                     created at the specified time.
- *
- *     ignoreRedirect: If true, do not follow file redirects
- *
- *     private:        If true, return restricted (deleted) files if the current
- *                     user is allowed to view them. Otherwise, such files will not
- *                     be found.
- *
- *     bypassCache:    If true, do not use the process-local cache of File objects
- *
+ * @param array $options Associative array of options (see RepoGroup::findFile)
  * @return File|bool File, or false if the file does not exist
  */
 function wfFindFile( $title, $options = array() ) {
@@ -4008,16 +3961,6 @@ function wfGetParserCacheStorage() {
        return ObjectCache::getInstance( $wgParserCacheType );
 }
 
-/**
- * Get the cache object used by the language converter
- *
- * @return BagOStuff
- */
-function wfGetLangConverterCacheStorage() {
-       global $wgLanguageConverterCacheType;
-       return ObjectCache::getInstance( $wgLanguageConverterCacheType );
-}
-
 /**
  * Call hook functions defined in $wgHooks
  *
@@ -4159,6 +4102,18 @@ function wfCanIPUseHTTPS( $ip ) {
        return !!$canDo;
 }
 
+/**
+ * Determine input string is represents as infinity
+ *
+ * @param string $str The string to determine
+ * @return bool
+ * @since 1.25
+ */
+function wfIsInfinity( $str ) {
+       $infinityValues = array( 'infinite', 'indefinite', 'infinity', 'never' );
+       return in_array( $str, $infinityValues );
+}
+
 /**
  * Work out the IP address based on various globals
  * For trusted proxies, use the XFF client IP (first of the chain)
index 93a1a04..6907245 100644 (file)
@@ -104,11 +104,12 @@ class Html {
        /**
         * Modifies a set of attributes meant for button elements
         * and apply a set of default attributes when $wgUseMediaWikiUIEverywhere enabled.
-        * @param array $modifiers to add to the button
+        * @param array $attrs
+        * @param string[] $modifiers to add to the button
         * @see https://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
         * @return array $attrs A modified attribute array
         */
-       public static function buttonAttributes( $attrs, $modifiers = array() ) {
+       public static function buttonAttributes( array $attrs, array $modifiers = array() ) {
                global $wgUseMediaWikiUIEverywhere;
                if ( $wgUseMediaWikiUIEverywhere ) {
                        if ( isset( $attrs['class'] ) ) {
@@ -136,63 +137,59 @@ class Html {
         * @param array $attrs An attribute array.
         * @return array $attrs A modified attribute array
         */
-       public static function getTextInputAttributes( $attrs ) {
+       public static function getTextInputAttributes( array $attrs ) {
                global $wgUseMediaWikiUIEverywhere;
-               if ( !$attrs ) {
-                       $attrs = array();
-               }
-               if ( isset( $attrs['class'] ) ) {
-                       if ( is_array( $attrs['class'] ) ) {
-                               $attrs['class'][] = 'mw-ui-input';
+               if ( $wgUseMediaWikiUIEverywhere ) {
+                       if ( isset( $attrs['class'] ) ) {
+                               if ( is_array( $attrs['class'] ) ) {
+                                       $attrs['class'][] = 'mw-ui-input';
+                               } else {
+                                       $attrs['class'] .= ' mw-ui-input';
+                               }
                        } else {
-                               $attrs['class'] .= ' mw-ui-input';
+                               $attrs['class'] = 'mw-ui-input';
                        }
-               } else {
-                       $attrs['class'] = 'mw-ui-input';
-               }
-               if ( $wgUseMediaWikiUIEverywhere ) {
-                       // Note that size can effect the desired width rendering of mw-ui-input elements
-                       // so it is removed. Left intact when mediawiki ui not enabled.
-                       unset( $attrs['size'] );
                }
                return $attrs;
        }
 
        /**
-        * Returns an HTML link element in a string styled as a button (when $wgUseMediaWikiUIEverywhere is enabled).
+        * Returns an HTML link element in a string styled as a button
+        * (when $wgUseMediaWikiUIEverywhere is enabled).
         *
         * @param string $contents The raw HTML contents of the element: *not*
         *   escaped!
         * @param array $attrs Associative array of attributes, e.g., array(
         *   'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for
         *   further documentation.
-        * @param array $modifiers to add to the button
+        * @param string[] $modifiers to add to the button
         * @see http://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
         * @return string Raw HTML
         */
-       public static function linkButton( $contents, $attrs, $modifiers = array() ) {
-               return Html::element( 'a',
+       public static function linkButton( $contents, array $attrs, array $modifiers = array() ) {
+               return self::element( 'a',
                        self::buttonAttributes( $attrs, $modifiers ),
                        $contents
                );
        }
 
        /**
-        * Returns an HTML link element in a string styled as a button (when $wgUseMediaWikiUIEverywhere is enabled).
+        * Returns an HTML link element in a string styled as a button
+        * (when $wgUseMediaWikiUIEverywhere is enabled).
         *
         * @param string $contents The raw HTML contents of the element: *not*
         *   escaped!
         * @param array $attrs Associative array of attributes, e.g., array(
         *   'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for
         *   further documentation.
-        * @param array $modifiers to add to the button
+        * @param string[] $modifiers to add to the button
         * @see http://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
         * @return string Raw HTML
         */
-       public static function submitButton( $contents, $attrs, $modifiers = array() ) {
+       public static function submitButton( $contents, array $attrs, array $modifiers = array() ) {
                $attrs['type'] = 'submit';
                $attrs['value'] = $contents;
-               return Html::element( 'input', self::buttonAttributes( $attrs, $modifiers ) );
+               return self::element( 'input', self::buttonAttributes( $attrs, $modifiers ) );
        }
 
        /**
@@ -257,19 +254,11 @@ class Html {
         * @return string
         */
        public static function openElement( $element, $attribs = array() ) {
-               global $wgWellFormedXml;
                $attribs = (array)$attribs;
                // This is not required in HTML5, but let's do it anyway, for
                // consistency and better compression.
                $element = strtolower( $element );
 
-               // In text/html, initial <html> and <head> tags can be omitted under
-               // pretty much any sane circumstances, if they have no attributes.  See:
-               // <http://www.whatwg.org/html/syntax.html#optional-tags>
-               if ( !$wgWellFormedXml && !$attribs && in_array( $element, array( 'html', 'head' ) ) ) {
-                       return '';
-               }
-
                // Remove invalid input types
                if ( $element == 'input' ) {
                        $validTypes = array(
@@ -345,8 +334,7 @@ class Html {
         *   further documentation.
         * @return array An array of attributes functionally identical to $attribs
         */
-       private static function dropDefaults( $element, $attribs ) {
-
+       private static function dropDefaults( $element, array $attribs ) {
                // Whenever altering this array, please provide a covering test case
                // in HtmlTest::provideElementsWithAttributesHavingDefaultValues
                static $attribDefaults = array(
@@ -493,11 +481,10 @@ class Html {
         * @return string HTML fragment that goes between element name and '>'
         *   (starting with a space if at least one attribute is output)
         */
-       public static function expandAttributes( $attribs ) {
+       public static function expandAttributes( array $attribs ) {
                global $wgWellFormedXml;
 
                $ret = '';
-               $attribs = (array)$attribs;
                foreach ( $attribs as $key => $value ) {
                        // Support intuitive array( 'checked' => true/false ) form
                        if ( $value === false || is_null( $value ) ) {
@@ -608,17 +595,20 @@ class Html {
                        } else {
                                // Apparently we need to entity-encode \n, \r, \t, although the
                                // spec doesn't mention that.  Since we're doing strtr() anyway,
-                               // and we don't need <> escaped here, we may as well not call
-                               // htmlspecialchars().
+                               // we may as well not call htmlspecialchars().
                                // @todo FIXME: Verify that we actually need to
                                // escape \n\r\t here, and explain why, exactly.
                                #
                                // We could call Sanitizer::encodeAttribute() for this, but we
                                // don't because we're stubborn and like our marginal savings on
                                // byte size from not having to encode unnecessary quotes.
+                               // The only difference between this transform and the one by
+                               // Sanitizer::encodeAttribute() is '<' is only encoded here if
+                               // $wgWellFormedXml is set, and ' is not encoded.
                                $map = array(
                                        '&' => '&amp;',
                                        '"' => '&quot;',
+                                       '>' => '&gt;',
                                        "\n" => '&#10;',
                                        "\r" => '&#13;',
                                        "\t" => '&#9;'
@@ -713,18 +703,18 @@ class Html {
         * new HTML5 input types and attributes.
         *
         * @param string $name Name attribute
-        * @param array $value Value attribute
+        * @param string $value Value attribute
         * @param string $type Type attribute
         * @param array $attribs Associative array of miscellaneous extra
         *   attributes, passed to Html::element()
         * @return string Raw HTML
         */
-       public static function input( $name, $value = '', $type = 'text', $attribs = array() ) {
+       public static function input( $name, $value = '', $type = 'text', array $attribs = array() ) {
                $attribs['type'] = $type;
                $attribs['value'] = $value;
                $attribs['name'] = $name;
                if ( in_array( $type, array( 'text', 'search', 'email', 'password', 'number' ) ) ) {
-                       $attribs = Html::getTextInputAttributes( $attribs );
+                       $attribs = self::getTextInputAttributes( $attribs );
                }
                return self::element( 'input', $attribs );
        }
@@ -735,7 +725,7 @@ class Html {
         * @param string $name Name attribute
         * @param bool $checked Whether the checkbox is checked or not
         * @param array $attribs Array of additional attributes
-        * @return string
+        * @return string Raw HTML
         */
        public static function check( $name, $checked = false, array $attribs = array() ) {
                if ( isset( $attribs['value'] ) ) {
@@ -758,7 +748,7 @@ class Html {
         * @param string $name Name attribute
         * @param bool $checked Whether the checkbox is checked or not
         * @param array $attribs Array of additional attributes
-        * @return string
+        * @return string Raw HTML
         */
        public static function radio( $name, $checked = false, array $attribs = array() ) {
                if ( isset( $attribs['value'] ) ) {
@@ -781,7 +771,7 @@ class Html {
         * @param string $label Contents of the label
         * @param string $id ID of the element being labeled
         * @param array $attribs Additional attributes
-        * @return string
+        * @return string Raw HTML
         */
        public static function label( $label, $id, array $attribs = array() ) {
                $attribs += array(
@@ -799,7 +789,7 @@ class Html {
         *   attributes, passed to Html::element()
         * @return string Raw HTML
         */
-       public static function hidden( $name, $value, $attribs = array() ) {
+       public static function hidden( $name, $value, array $attribs = array() ) {
                return self::input( $name, $value, 'hidden', $attribs );
        }
 
@@ -815,7 +805,7 @@ class Html {
         *   attributes, passed to Html::element()
         * @return string Raw HTML
         */
-       public static function textarea( $name, $value = '', $attribs = array() ) {
+       public static function textarea( $name, $value = '', array $attribs = array() ) {
                $attribs['name'] = $name;
 
                if ( substr( $value, 0, 1 ) == "\n" ) {
@@ -827,7 +817,7 @@ class Html {
                } else {
                        $spacedValue = $value;
                }
-               return self::element( 'textarea', Html::getTextInputAttributes( $attribs ), $spacedValue );
+               return self::element( 'textarea', self::getTextInputAttributes( $attribs ), $spacedValue );
        }
 
        /**
@@ -898,7 +888,7 @@ class Html {
                        } elseif ( is_int( $nsId ) ) {
                                $nsName = $wgContLang->convertNamespace( $nsId );
                        }
-                       $optionsHtml[] = Html::element(
+                       $optionsHtml[] = self::element(
                                'option', array(
                                        'disabled' => in_array( $nsId, $params['disable'] ),
                                        'value' => $nsId,
@@ -917,7 +907,7 @@ class Html {
 
                $ret = '';
                if ( isset( $params['label'] ) ) {
-                       $ret .= Html::element(
+                       $ret .= self::element(
                                'label', array(
                                        'for' => isset( $selectAttribs['id'] ) ? $selectAttribs['id'] : null,
                                ), $params['label']
@@ -925,11 +915,11 @@ class Html {
                }
 
                // Wrap options in a <select>
-               $ret .= Html::openElement( 'select', $selectAttribs )
+               $ret .= self::openElement( 'select', $selectAttribs )
                        . "\n"
                        . implode( "\n", $optionsHtml )
                        . "\n"
-                       . Html::closeElement( 'select' );
+                       . self::closeElement( 'select' );
 
                return $ret;
        }
@@ -942,7 +932,7 @@ class Html {
         *   attributes, passed to Html::element() of html tag.
         * @return string Raw HTML
         */
-       public static function htmlHeader( $attribs = array() ) {
+       public static function htmlHeader( array $attribs = array() ) {
                $ret = '';
 
                global $wgHtml5Version, $wgMimeType, $wgXhtmlNamespaces;
@@ -970,7 +960,7 @@ class Html {
                        $attribs['version'] = $wgHtml5Version;
                }
 
-               $html = Html::openElement( 'html', $attribs );
+               $html = self::openElement( 'html', $attribs );
 
                if ( $html ) {
                        $html .= "\n";
@@ -1005,44 +995,58 @@ class Html {
         *
         * @return string
         */
-       static function infoBox( $text, $icon, $alt, $class = false ) {
-               $s = Html::openElement( 'div', array( 'class' => "mw-infobox $class" ) );
+       static function infoBox( $text, $icon, $alt, $class = '' ) {
+               $s = self::openElement( 'div', array( 'class' => "mw-infobox $class" ) );
 
-               $s .= Html::openElement( 'div', array( 'class' => 'mw-infobox-left' ) ) .
-                               Html::element( 'img',
+               $s .= self::openElement( 'div', array( 'class' => 'mw-infobox-left' ) ) .
+                               self::element( 'img',
                                        array(
                                                'src' => $icon,
                                                'alt' => $alt,
                                        )
                                ) .
-                               Html::closeElement( 'div' );
+                               self::closeElement( 'div' );
 
-               $s .= Html::openElement( 'div', array( 'class' => 'mw-infobox-right' ) ) .
+               $s .= self::openElement( 'div', array( 'class' => 'mw-infobox-right' ) ) .
                                $text .
-                               Html::closeElement( 'div' );
-               $s .= Html::element( 'div', array( 'style' => 'clear: left;' ), ' ' );
+                               self::closeElement( 'div' );
+               $s .= self::element( 'div', array( 'style' => 'clear: left;' ), ' ' );
 
-               $s .= Html::closeElement( 'div' );
+               $s .= self::closeElement( 'div' );
 
-               $s .= Html::element( 'div', array( 'style' => 'clear: left;' ), ' ' );
+               $s .= self::element( 'div', array( 'style' => 'clear: left;' ), ' ' );
 
                return $s;
        }
 
        /**
-        * Generate a srcset attribute value from an array mapping pixel densities
-        * to URLs. Note that srcset supports width and height values as well, which
-        * are not used here.
+        * Generate a srcset attribute value.
+        *
+        * Generates a srcset attribute value from an array mapping pixel densities
+        * to URLs. A trailing 'x' in pixel density values is optional.
+        *
+        * @note srcset width and height values are not supported.
+        *
+        * @see http://www.whatwg.org/html/embedded-content-1.html#attr-img-srcset
+        *
+        * @par Example:
+        * @code
+        *     Html::srcSet( array(
+        *         '1x'   => 'standard.jpeg',
+        *         '1.5x' => 'large.jpeg',
+        *         '3x'   => 'extra-large.jpeg',
+        *     ) );
+        *     // gives 'standard.jpeg 1x, large.jpeg 1.5x, extra-large.jpeg 2x'
+        * @endcode
         *
-        * @param array $urls
+        * @param string[] $urls
         * @return string
         */
-       static function srcSet( $urls ) {
+       static function srcSet( array $urls ) {
                $candidates = array();
                foreach ( $urls as $density => $url ) {
-                       // Image candidate syntax per current whatwg live spec, 2012-09-23:
-                       // http://www.whatwg.org/html/embedded-content-1.html#attr-img-srcset
-                       $candidates[] = "{$url} {$density}x";
+                       // Cast density to float to strip 'x'.
+                       $candidates[] = $url . ' ' . (float)$density . 'x';
                }
                return implode( ", ", $candidates );
        }
index d066df8..8e05f59 100644 (file)
@@ -55,9 +55,10 @@ class Http {
         *                                  to avoid attacks on intranet services accessible by HTTP.
         *    - userAgent           A user agent, if you want to override the default
         *                          MediaWiki/$wgVersion
+        * @param string $caller The method making this request, for profiling
         * @return string|bool (bool)false on failure or a string on success
         */
-       public static function request( $method, $url, $options = array() ) {
+       public static function request( $method, $url, $options = array(), $caller = __METHOD__ ) {
                wfDebug( "HTTP: $method: $url\n" );
 
                $options['method'] = strtoupper( $method );
@@ -69,7 +70,7 @@ class Http {
                        $options['connectTimeout'] = 'default';
                }
 
-               $req = MWHttpRequest::factory( $url, $options );
+               $req = MWHttpRequest::factory( $url, $options, $caller );
                $status = $req->execute();
 
                $content = false;
@@ -82,15 +83,26 @@ class Http {
        /**
         * Simple wrapper for Http::request( 'GET' )
         * @see Http::request()
+        * @since 1.25 Second parameter $timeout removed. Second parameter
+        * is now $options which can be given a 'timeout'
         *
         * @param string $url
-        * @param string $timeout
         * @param array $options
+        * @param string $caller The method making this request, for profiling
         * @return string
         */
-       public static function get( $url, $timeout = 'default', $options = array() ) {
-               $options['timeout'] = $timeout;
-               return Http::request( 'GET', $url, $options );
+       public static function get( $url, $options = array(), $caller = __METHOD__ ) {
+               $args = func_get_args();
+               if ( isset( $args[1] ) && ( is_string( $args[1] ) || is_numeric( $args[1] ) ) ) {
+                       // Second was used to be the timeout
+                       // And third parameter used to be $options
+                       wfWarn( "Second parameter should not be a timeout.", 2 );
+                       $options = isset( $args[2] ) && is_array( $args[2] ) ?
+                               $args[2] : array();
+                       $options['timeout'] = $args[1];
+                       $caller = __METHOD__;
+               }
+               return Http::request( 'GET', $url, $options, $caller );
        }
 
        /**
@@ -99,10 +111,11 @@ class Http {
         *
         * @param string $url
         * @param array $options
+        * @param string $caller The method making this request, for profiling
         * @return string
         */
-       public static function post( $url, $options = array() ) {
-               return Http::request( 'POST', $url, $options );
+       public static function post( $url, $options = array(), $caller = __METHOD__ ) {
+               return Http::request( 'POST', $url, $options, $caller );
        }
 
        /**
@@ -216,11 +229,23 @@ class MWHttpRequest {
 
        public $status;
 
+       /**
+        * @var Profiler
+        */
+       protected $profiler;
+
+       /**
+        * @var string
+        */
+       protected $profileName;
+
        /**
         * @param string $url Url to use. If protocol-relative, will be expanded to an http:// URL
         * @param array $options (optional) extra params to pass (see Http::request())
+        * @param string $caller The method making this request, for profiling
+        * @param Profiler $profiler An instance of the profiler for profiling, or null
         */
-       protected function __construct( $url, $options = array() ) {
+       protected function __construct( $url, $options = array(), $caller = __METHOD__, $profiler = null ) {
                global $wgHTTPTimeout, $wgHTTPConnectTimeout;
 
                $this->url = wfExpandUrl( $url, PROTO_HTTP );
@@ -263,6 +288,10 @@ class MWHttpRequest {
                if ( $this->noProxy ) {
                        $this->proxy = ''; // noProxy takes precedence
                }
+
+               // Profile based on what's calling us
+               $this->profiler = $profiler;
+               $this->profileName = $caller;
        }
 
        /**
@@ -278,11 +307,12 @@ class MWHttpRequest {
         * Generate a new request object
         * @param string $url Url to use
         * @param array $options (optional) extra params to pass (see Http::request())
+        * @param string $caller The method making this request, for profiling
         * @throws MWException
         * @return CurlHttpRequest|PhpHttpRequest
         * @see MWHttpRequest::__construct
         */
-       public static function factory( $url, $options = null ) {
+       public static function factory( $url, $options = null, $caller = __METHOD__ ) {
                if ( !Http::$httpEngine ) {
                        Http::$httpEngine = function_exists( 'curl_init' ) ? 'curl' : 'php';
                } elseif ( Http::$httpEngine == 'curl' && !function_exists( 'curl_init' ) ) {
@@ -292,7 +322,7 @@ class MWHttpRequest {
 
                switch ( Http::$httpEngine ) {
                        case 'curl':
-                               return new CurlHttpRequest( $url, $options );
+                               return new CurlHttpRequest( $url, $options, $caller, Profiler::instance() );
                        case 'php':
                                if ( !wfIniGetBool( 'allow_url_fopen' ) ) {
                                        throw new MWException( __METHOD__ . ': allow_url_fopen ' .
@@ -301,7 +331,7 @@ class MWHttpRequest {
                                                'http://php.net/curl.'
                                        );
                                }
-                               return new PhpHttpRequest( $url, $options );
+                               return new PhpHttpRequest( $url, $options, $caller, Profiler::instance() );
                        default:
                                throw new MWException( __METHOD__ . ': The setting of Http::$httpEngine is not valid.' );
                }
@@ -772,6 +802,12 @@ class CurlHttpRequest extends MWHttpRequest {
                        wfRestoreWarnings();
                }
 
+               if ( $this->profiler ) {
+                       $profileSection = $this->profiler->scopedProfileIn(
+                               __METHOD__ . '-' . $this->profileName
+                       );
+               }
+
                $curlRes = curl_exec( $curlHandle );
                if ( curl_errno( $curlHandle ) == CURLE_OPERATION_TIMEOUTED ) {
                        $this->status->fatal( 'http-timed-out', $this->url );
@@ -783,6 +819,10 @@ class CurlHttpRequest extends MWHttpRequest {
 
                curl_close( $curlHandle );
 
+               if ( $this->profiler ) {
+                       $this->profiler->scopedProfileOut( $profileSection );
+               }
+
                $this->parseHeader();
                $this->setStatus();
 
@@ -891,6 +931,11 @@ class PhpHttpRequest extends MWHttpRequest {
 
                $result = array();
 
+               if ( $this->profiler ) {
+                       $profileSection = $this->profiler->scopedProfileIn(
+                               __METHOD__ . '-' . $this->profileName
+                       );
+               }
                do {
                        $reqCount++;
                        wfSuppressWarnings();
@@ -921,6 +966,9 @@ class PhpHttpRequest extends MWHttpRequest {
                                break;
                        }
                } while ( true );
+               if ( $this->profiler ) {
+                       $this->profiler->scopedProfileOut( $profileSection );
+               }
 
                $this->setStatus();
 
index eb2ca77..4dfe830 100644 (file)
@@ -375,14 +375,19 @@ class WikiImporter {
                $page = WikiPage::factory( $title );
                $page->loadPageData( 'fromdbmaster' );
                $content = $page->getContent();
-               $editInfo = $page->prepareContentForEdit( $content );
-
-               $countable = $page->isCountable( $editInfo );
-               $oldcountable = $this->countableCache['title_' . $title->getPrefixedText()];
-               if ( isset( $oldcountable ) && $countable != $oldcountable ) {
-                       DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array(
-                               'articles' => ( (int)$countable - (int)$oldcountable )
-                       ) ) );
+               if ( $content === null ) {
+                       wfDebug( __METHOD__ . ': Skipping article count adjustment for ' . $title .
+                               ' because WikiPage::getContent() returned null' );
+               } else {
+                       $editInfo = $page->prepareContentForEdit( $content );
+                       $countKey = 'title_' . $title->getPrefixedText();
+                       $countable = $page->isCountable( $editInfo );
+                       if ( array_key_exists( $countKey, $this->countableCache ) &&
+                               $countable != $this->countableCache[ $countKey ] ) {
+                               DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array(
+                                       'articles' => ( (int)$countable - (int)$this->countableCache[ $countKey ] )
+                               ) ) );
+                       }
                }
 
                $args = func_get_args();
@@ -477,7 +482,8 @@ class WikiImporter {
        /**
         * Retrieves the contents of the named attribute of the current element.
         * @param string $attr The name of the attribute
-        * @return string The value of the attribute or an empty string if it is not set in the current element.
+        * @return string The value of the attribute or an empty string if it is not set in the current
+        * element.
         */
        public function nodeAttribute( $attr ) {
                return $this->reader->getAttribute( $attr );
@@ -522,10 +528,10 @@ class WikiImporter {
                $oldDisable = libxml_disable_entity_loader( true );
                $this->reader->read();
 
-               if ( $this->reader->name != 'mediawiki' ) {
+               if ( $this->reader->localName != 'mediawiki' ) {
                        libxml_disable_entity_loader( $oldDisable );
                        throw new MWException( "Expected <mediawiki> tag, got " .
-                               $this->reader->name );
+                               $this->reader->localName );
                }
                $this->debug( "<mediawiki> tag is correct." );
 
@@ -536,7 +542,7 @@ class WikiImporter {
                $rethrow = null;
                try {
                        while ( $keepReading ) {
-                               $tag = $this->reader->name;
+                               $tag = $this->reader->localName;
                                $type = $this->reader->nodeType;
 
                                if ( !Hooks::run( 'ImportHandleToplevelXMLTag', array( $this ) ) ) {
@@ -587,11 +593,11 @@ class WikiImporter {
 
                while ( $this->reader->read() ) {
                        if ( $this->reader->nodeType == XmlReader::END_ELEMENT &&
-                                       $this->reader->name == 'siteinfo' ) {
+                                       $this->reader->localName == 'siteinfo' ) {
                                break;
                        }
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( $tag == 'namespace' ) {
                                $this->foreignNamespaces[ $this->nodeAttribute( 'key' ) ] =
@@ -615,11 +621,11 @@ class WikiImporter {
 
                while ( $this->reader->read() ) {
                        if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
-                                       $this->reader->name == 'logitem' ) {
+                                       $this->reader->localName == 'logitem' ) {
                                break;
                        }
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( !Hooks::run( 'ImportHandleLogItemXMLTag', array(
                                $this, $logInfo
@@ -679,13 +685,13 @@ class WikiImporter {
 
                while ( $skip ? $this->reader->next() : $this->reader->read() ) {
                        if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
-                                       $this->reader->name == 'page' ) {
+                                       $this->reader->localName == 'page' ) {
                                break;
                        }
 
                        $skip = false;
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( $badTitle ) {
                                // The title is invalid, bail out of this page
@@ -752,11 +758,11 @@ class WikiImporter {
 
                while ( $skip ? $this->reader->next() : $this->reader->read() ) {
                        if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
-                                       $this->reader->name == 'revision' ) {
+                                       $this->reader->localName == 'revision' ) {
                                break;
                        }
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( !Hooks::run( 'ImportHandleRevisionXMLTag', array(
                                $this, $pageInfo, $revisionInfo
@@ -844,11 +850,11 @@ class WikiImporter {
 
                while ( $skip ? $this->reader->next() : $this->reader->read() ) {
                        if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
-                                       $this->reader->name == 'upload' ) {
+                                       $this->reader->localName == 'upload' ) {
                                break;
                        }
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( !Hooks::run( 'ImportHandleUploadXMLTag', array(
                                $this, $pageInfo
@@ -942,11 +948,11 @@ class WikiImporter {
 
                while ( $this->reader->read() ) {
                        if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
-                                       $this->reader->name == 'contributor' ) {
+                                       $this->reader->localName == 'contributor' ) {
                                break;
                        }
 
-                       $tag = $this->reader->name;
+                       $tag = $this->reader->localName;
 
                        if ( in_array( $tag, $fields ) ) {
                                $info[$tag] = $this->nodeContents();
@@ -1669,6 +1675,7 @@ class WikiRevision {
                                RepoGroup::singleton()->getLocalRepo(), $archiveName );
                } else {
                        $file = wfLocalFile( $this->getTitle() );
+                       $file->load( File::READ_LATEST );
                        wfDebug( __METHOD__ . 'Importing new file as ' . $file->getName() . "\n" );
                        if ( $file->exists() && $file->getTimestamp() > $this->getTimestamp() ) {
                                $archiveName = $file->getTimestamp() . '!' . $file->getName();
@@ -1740,7 +1747,7 @@ class WikiRevision {
 
                // @todo FIXME!
                $src = $this->getSrc();
-               $data = Http::get( $src );
+               $data = Http::get( $src, array(), __METHOD__ );
                if ( !$data ) {
                        wfDebug( "IMPORT: couldn't fetch source $src\n" );
                        fclose( $f );
@@ -1897,7 +1904,7 @@ class ImportStreamSource implements ImportSource {
                # quicker and sorts out user-agent problems which might
                # otherwise prevent importing from large sites, such
                # as the Wikimedia cluster, etc.
-               $data = Http::request( $method, $url, array( 'followRedirects' => true ) );
+               $data = Http::request( $method, $url, array( 'followRedirects' => true ), __METHOD__ );
                if ( $data !== false ) {
                        $file = tmpfile();
                        fwrite( $file, $data );
index 340ae8f..99aaaa0 100644 (file)
@@ -92,7 +92,7 @@ class LinkFilter {
         * @return array Array to be passed to DatabaseBase::buildLike() or false on error
         */
        public static function makeLikeArray( $filterEntry, $protocol = 'http://' ) {
-               $db = wfGetDB( DB_MASTER );
+               $db = wfGetDB( DB_SLAVE );
 
                $target = $protocol . $filterEntry;
                $bits = wfParseUrl( $target );
index 238bb53..b58daba 100644 (file)
@@ -1251,7 +1251,6 @@ class Linker {
                        $userId = $rev->getUser( Revision::FOR_THIS_USER );
                        $userText = $rev->getUserText( Revision::FOR_THIS_USER );
                        $link = self::userLink( $userId, $userText )
-                               . wfMessage( 'word-separator' )->escaped()
                                . self::userToolLinks( $userId, $userText );
                } else {
                        $link = wfMessage( 'rev-deleted-user' )->escaped();
@@ -1389,7 +1388,9 @@ class Linker {
         *
         * @return string
         */
-       public static function formatLinksInComment( $comment, $title = null, $local = false, $wikiId = null ) {
+       public static function formatLinksInComment(
+               $comment, $title = null, $local = false, $wikiId = null
+       ) {
                return preg_replace_callback(
                        '/
                                \[\[
index 669d8e9..ec2f40f 100644 (file)
  * @file
  */
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * The MediaWiki class is the helper class for the index.php entry point.
- *
- * @internal documentation reviewed 15 Mar 2010
  */
 class MediaWiki {
        /**
@@ -201,8 +201,6 @@ class MediaWiki {
                        throw new PermissionsError( 'read', $permErrors );
                }
 
-               $pageView = false; // was an article or special page viewed?
-
                // Interwiki redirects
                if ( $title->isExternal() ) {
                        $rdfrom = $request->getVal( 'rdfrom' );
@@ -265,7 +263,6 @@ class MediaWiki {
                        }
                // Special pages
                } elseif ( NS_SPECIAL == $title->getNamespace() ) {
-                       $pageView = true;
                        // Actions that need to be made when we have a special pages
                        SpecialPageFactory::executePath( $title, $this->context );
                } else {
@@ -273,7 +270,6 @@ class MediaWiki {
                        // may be a redirect to another article or URL.
                        $article = $this->initializeArticle();
                        if ( is_object( $article ) ) {
-                               $pageView = true;
                                $this->performAction( $article, $requestTitle );
                        } elseif ( is_string( $article ) ) {
                                $output->redirect( $article );
@@ -282,12 +278,6 @@ class MediaWiki {
                                        . " returned neither an object nor a URL" );
                        }
                }
-
-               if ( $pageView ) {
-                       // Promote user to any groups they meet the criteria for
-                       $user->addAutopromoteOnceGroups( 'onView' );
-               }
-
        }
 
        /**
@@ -393,7 +383,11 @@ class MediaWiki {
                if ( $action instanceof Action ) {
                        # Let Squid cache things if we can purge them.
                        if ( $this->config->get( 'UseSquid' ) &&
-                               in_array( $request->getFullRequestURL(), $requestTitle->getSquidURLs() )
+                               in_array(
+                                       // Use PROTO_INTERNAL because that's what getSquidURLs() uses
+                                       wfExpandUrl( $request->getRequestURL(), PROTO_INTERNAL ),
+                                       $requestTitle->getSquidURLs()
+                               )
                        ) {
                                $output->setSquidMaxage( $this->config->get( 'SquidMaxage' ) );
                        }
@@ -470,7 +464,9 @@ class MediaWiki {
                // Send Ajax requests to the Ajax dispatcher.
                if ( $this->config->get( 'UseAjax' ) && $request->getVal( 'action' ) === 'ajax' ) {
                        // Set a dummy title, because $wgTitle == null might break things
-                       $title = Title::makeTitle( NS_MAIN, 'AJAX' );
+                       $title = Title::makeTitle( NS_SPECIAL, 'Badtitle/performing an AJAX call in '
+                               . __METHOD__
+                       );
                        $this->context->setTitle( $title );
                        $wgTitle = $title;
 
@@ -485,14 +481,18 @@ class MediaWiki {
                $action = $this->getAction();
                $wgTitle = $title;
 
+               $trxProfiler = Profiler::instance()->getTransactionProfiler();
+               $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
+
                // Aside from rollback, master queries should not happen on GET requests.
                // Periodic or "in passing" updates on GET should use the job queue.
                if ( !$request->wasPosted()
                        && in_array( $action, array( 'view', 'edit', 'history' ) )
                ) {
-                       $trxProfiler = Profiler::instance()->getTransactionProfiler();
                        $trxProfiler->setExpectation( 'masterConns', 0, __METHOD__ );
                        $trxProfiler->setExpectation( 'writes', 0, __METHOD__ );
+               } else {
+                       $trxProfiler->setExpectation( 'maxAffected', 500, __METHOD__ );
                }
 
                // If the user has forceHTTPS set to true, or if the user
@@ -531,7 +531,7 @@ class MediaWiki {
                                        wfDebugLog( 'RedirectedPosts', "Redirected from HTTP to HTTPS: $oldUrl" );
                                }
                                // Setup dummy Title, otherwise OutputPage::redirect will fail
-                               $title = Title::newFromText( NS_MAIN, 'REDIR' );
+                               $title = Title::newFromText( 'REDIR', NS_MAIN );
                                $this->context->setTitle( $title );
                                $output = $this->context->getOutput();
                                // Since we only do this redir to change proto, always send a vary header
@@ -622,7 +622,7 @@ class MediaWiki {
                        $n = intval( $jobRunRate );
                }
 
-               $runJobsLogger = MWLoggerFactory::getInstance( 'runJobs' );
+               $runJobsLogger = LoggerFactory::getInstance( 'runJobs' );
 
                if ( !$this->config->get( 'RunJobsAsync' ) ) {
                        // Fall back to running the job here while the user waits
@@ -667,7 +667,12 @@ class MediaWiki {
                }
 
                $url = wfAppendQuery( wfScript( 'index' ), $query );
-               $req = "POST $url HTTP/1.1\r\nHost: {$info['host']}\r\nConnection: Close\r\nContent-Length: 0\r\n\r\n";
+               $req = (
+                       "POST $url HTTP/1.1\r\n" .
+                       "Host: {$info['host']}\r\n" .
+                       "Connection: Close\r\n" .
+                       "Content-Length: 0\r\n\r\n"
+               );
 
                $runJobsLogger->info( "Running $n job(s) via '$url'" );
                // Send a cron API request to be performed in the background.
index c3fb486..943bc9f 100644 (file)
@@ -4,7 +4,6 @@
  * Provides access to MediaWiki's version without requiring MediaWiki (or anything else)
  * being loaded first.
  *
- * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class MediaWikiVersionFetcher {
index 49437f4..134af0e 100644 (file)
@@ -249,7 +249,7 @@ class Message implements MessageSpecifier {
                $this->key = reset( $this->keysToTry );
 
                $this->parameters = array_values( $params );
-               $this->language = $language ? $language : $wgLang;
+               $this->language = $language ?: $wgLang;
        }
 
        /**
index 6f7e8e5..011cae6 100644 (file)
@@ -36,15 +36,12 @@ class MessageBlobStore {
         * Get the singleton instance
         *
         * @since 1.24
+        * @deprecated since 1.25
         * @return MessageBlobStore
         */
        public static function getInstance() {
-               static $instance = null;
-               if ( $instance === null ) {
-                       $instance = new self;
-               }
-
-               return $instance;
+               wfDeprecated( __METHOD__, '1.25' );
+               return new self;
        }
 
        /**
@@ -127,7 +124,7 @@ class MessageBlobStore {
                                        );
                                }
                        }
-               } catch ( Exception $e ) {
+               } catch ( DBError $e ) {
                        wfDebug( __METHOD__ . " failed to update DB: $e\n" );
                }
                return $blob;
index 065e189..de7da3f 100644 (file)
@@ -159,6 +159,7 @@ class MovePage {
        protected function isValidFileMove() {
                $status = new Status();
                $file = wfLocalFile( $this->oldTitle );
+               $file->load( File::READ_LATEST );
                if ( $file->exists() ) {
                        if ( $this->newTitle->getText() != wfStripIllegalFilenameChars( $this->newTitle->getText() ) ) {
                                $status->fatal( 'imageinvalidfilename' );
@@ -186,6 +187,7 @@ class MovePage {
                # Is it an existing file?
                if ( $this->newTitle->inNamespace( NS_FILE ) ) {
                        $file = wfLocalFile( $this->newTitle );
+                       $file->load( File::READ_LATEST );
                        if ( $file->exists() ) {
                                wfDebug( __METHOD__ . ": file exists\n" );
                                return false;
@@ -238,6 +240,7 @@ class MovePage {
                $dbw = wfGetDB( DB_MASTER );
                if ( $this->oldTitle->getNamespace() == NS_FILE ) {
                        $file = wfLocalFile( $this->oldTitle );
+                       $file->load( File::READ_LATEST );
                        if ( $file->exists() ) {
                                $status = $file->move( $this->newTitle );
                                if ( !$status->isOk() ) {
@@ -370,7 +373,10 @@ class MovePage {
 
                $dbw->commit( __METHOD__ );
 
-               Hooks::run( 'TitleMoveComplete', array( &$this->oldTitle, &$this->newTitle, &$user, $pageid, $redirid, $reason ) );
+               Hooks::run(
+                       'TitleMoveComplete',
+                       array( &$this->oldTitle, &$this->newTitle, &$user, $pageid, $redirid, $reason )
+               );
                return Status::newGood();
        }
 
diff --git a/includes/NoLocalSettings.php b/includes/NoLocalSettings.php
new file mode 100644 (file)
index 0000000..6de9bfc
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Display an error page when there is no LocalSettings.php file.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+# bug 30219 : can not use pathinfo() on URLs since slashes do not match
+$matches = array();
+$ext = 'php';
+$path = '/';
+foreach ( array_filter( explode( '/', $_SERVER['PHP_SELF'] ) ) as $part ) {
+       if ( !preg_match( '/\.(php5?)$/', $part, $matches ) ) {
+               $path .= "$part/";
+       } else {
+               $ext = $matches[1] == 'php5' ? 'php5' : 'php';
+               break;
+       }
+}
+
+# Check to see if the installer is running
+if ( !function_exists( 'session_name' ) ) {
+       $installerStarted = false;
+} else {
+       session_name( 'mw_installer_session' );
+       $oldReporting = error_reporting( E_ALL & ~E_NOTICE );
+       $success = session_start();
+       error_reporting( $oldReporting );
+       $installerStarted = ( $success && isset( $_SESSION['installData'] ) );
+}
+
+$templateParser = new TemplateParser();
+
+# Render error page if no LocalSettings file can be found
+try {
+       echo $templateParser->processTemplate(
+               'NoLocalSettings',
+               array(
+                       'wgVersion' => ( isset( $wgVersion ) ? $wgVersion : 'VERSION' ),
+                       'path' => $path,
+                       'ext' => $ext,
+                       'localSettingsExists' => file_exists( MW_CONFIG_FILE ),
+                       'installerStarted' => $installerStarted
+               )
+       );
+} catch ( Exception $e ) {
+       echo 'Error: ' . htmlspecialchars( $e->getMessage() );
+}
index 5c146e4..cac89f4 100644 (file)
@@ -196,12 +196,6 @@ class OutputPage extends ContextSource {
 
        // Parser related.
 
-       /**
-        * @var int
-        * @todo Unused?
-        */
-       private $mContainsOldMagic = 0;
-
        /** @var int */
        protected $mContainsNewMagic = 0;
 
@@ -1379,7 +1373,8 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Add an array of indicators, with their identifiers as array keys and HTML contents as values.
+        * Add an array of indicators, with their identifiers as array
+        * keys and HTML contents as values.
         *
         * In case of duplicate keys, existing values are overwritten.
         *
@@ -1404,6 +1399,35 @@ class OutputPage extends ContextSource {
                return $this->mIndicators;
        }
 
+       /**
+        * Adds help link with an icon via page indicators.
+        * @param string $to
+        * @param bool $overrideBaseUrl
+        * @since 1.25
+        */
+       public function addHelpLink( $to, $overrideBaseUrl = false ) {
+               $this->addModuleStyles( 'mediawiki.helplink' );
+               $text = $this->msg( 'helppage-top-gethelp' )->escaped();
+
+               if ( $overrideBaseUrl ) {
+                       $helpUrl = $to;
+               } else {
+                       $toUrlencoded = wfUrlencode( str_replace( ' ', '_', $to ) );
+                       $helpUrl = "//www.mediawiki.org/wiki/Special:MyLanguage/$toUrlencoded";
+               }
+               $link = Html::rawElement(
+                       'a',
+                       array(
+                               'href' => $helpUrl,
+                               'target' => '_blank',
+                               'class' => 'mw-helplink',
+                       ),
+                       $text
+               );
+
+               $this->setIndicators( array( 'mw-helplink' => $link ) );
+       }
+
        /**
         * Do not allow scripts which can be modified by wiki users to load on this page;
         * only allow scripts bundled with, or generated by, the software.
@@ -2879,11 +2903,11 @@ class OutputPage extends ContextSource {
                                                );
                                        } else {
                                                $link = Html::linkedScript( $url );
-                                               if ( $context->getOnly() === 'scripts' && !$context->getRaw() && !$isRaw ) {
-                                                       // Wrap only=script requests in a conditional as browsers not supported
-                                                       // by the startup module would unconditionally execute this module.
-                                                       // Otherwise users will get "ReferenceError: mw is undefined" or
-                                                       // "jQuery is undefined" from e.g. a "site" module.
+                                               if ( !$context->getRaw() && !$isRaw ) {
+                                                       // Wrap only=script / only=combined requests in a conditional as
+                                                       // browsers not supported by the startup module would unconditionally
+                                                       // execute this module. Otherwise users will get "ReferenceError: mw is
+                                                       // undefined" or "jQuery is undefined" from e.g. a "site" module.
                                                        $link = Html::inlineScript(
                                                                ResourceLoader::makeLoaderConditionalScript(
                                                                        Xml::encodeJsCall( 'document.write', array( $link ) )
@@ -3082,7 +3106,7 @@ class OutputPage extends ContextSource {
                // This also enforces $.isReady to be true at </body> which fixes the
                // mw.loader bug in Firefox with using document.write between </body>
                // and the DOMContentReady event (bug 47457).
-               $html = Html::inlineScript( 'window.jQuery && jQuery.ready();' );
+               $html = Html::inlineScript( 'if(window.jQuery)jQuery.ready();' );
 
                if ( !$this->getConfig()->get( 'ResourceLoaderExperimentalAsyncLoading' ) ) {
                        $html .= $this->getScriptsForBottomQueue( false );
@@ -3264,6 +3288,10 @@ class OutputPage extends ContextSource {
                if ( !$this->getTitle()->isJsSubpage() && !$this->getTitle()->isCssSubpage() ) {
                        return false;
                }
+               if ( !$this->getTitle()->isSubpageOf( $this->getUser()->getUserPage() ) ) {
+                       // Don't execute another user's CSS or JS on preview (T85855)
+                       return false;
+               }
 
                return !count( $this->getTitle()->getUserPermissionsErrors( 'edit', $this->getUser() ) );
        }
index b061990..3a2f9f8 100644 (file)
@@ -39,7 +39,7 @@
  * version are hardcoded here
  */
 function wfPHPVersionError( $type ) {
-       $mwVersion = '1.25';
+       $mwVersion = '1.26';
        $minimumVersionPHP = '5.3.3';
 
        $phpVersion = PHP_VERSION;
index 84d4189..40c3a2b 100644 (file)
@@ -893,6 +893,9 @@ class Preferences {
                                'section' => 'rc/advancedrc',
                                'label-message' => 'tog-hidepatrolled',
                        );
+               }
+
+               if ( $user->useNPPatrol() ) {
                        $defaultPreferences['newpageshidepatrolled'] = array(
                                'type' => 'toggle',
                                'section' => 'rc/advancedrc',
@@ -991,7 +994,7 @@ class Preferences {
                        'label-message' => 'tog-watchlisthideliu',
                );
 
-               if ( $context->getConfig()->get( 'UseRCPatrol' ) ) {
+               if ( $user->useRCPatrol() ) {
                        $defaultPreferences['watchlisthidepatrolled'] = array(
                                'type' => 'toggle',
                                'section' => 'watchlist/advancedwatchlist',
index 2885679..55a4f49 100644 (file)
@@ -155,7 +155,10 @@ abstract class PrefixSearch {
                        }
                }
                $srchres = array();
-               if ( Hooks::run( 'PrefixSearchBackend', array( $namespaces, $search, $limit, &$srchres, $offset ) ) ) {
+               if ( Hooks::run(
+                       'PrefixSearchBackend',
+                       array( $namespaces, $search, $limit, &$srchres, $offset )
+               ) ) {
                        return $this->titles( $this->defaultSearchBackend( $namespaces, $search, $limit, $offset ) );
                }
                return $this->strings( $this->handleResultFromHook( $srchres, $namespaces, $search, $limit ) );
index f777a37..1219da5 100644 (file)
@@ -156,7 +156,7 @@ class ProtectionForm {
                } else {
                        $value = $this->mExpirySelection[$action];
                }
-               if ( $value == 'infinite' || $value == 'indefinite' || $value == 'infinity' ) {
+               if ( wfIsInfinity( $value ) ) {
                        $time = wfGetDB( DB_SLAVE )->getInfinity();
                } else {
                        $unix = strtotime( $value );
index d535028..3ba6157 100644 (file)
@@ -121,8 +121,6 @@ class Revision implements IDBAccessObject {
                if ( $id ) {
                        // Use the specified ID
                        $conds['rev_id'] = $id;
-                       // This uses slave->master fallback with READ_NORMAL. Assuming revdelete,
-                       // moves, and merges are rare, callers can use this to reduce master queries.
                        return self::newFromConds( $conds, $flags );
                } else {
                        // Use a join to get the latest revision
@@ -150,8 +148,6 @@ class Revision implements IDBAccessObject {
                $conds = array( 'page_id' => $pageId );
                if ( $revId ) {
                        $conds['rev_id'] = $revId;
-                       // This uses slave->master fallback with READ_NORMAL. Assuming revdelete
-                       // and merges are rare, callers can use this to reduce master queries.
                        return self::newFromConds( $conds, $flags );
                } else {
                        // Use a join to get the latest revision
@@ -301,7 +297,10 @@ class Revision implements IDBAccessObject {
        }
 
        /**
-        * Given a set of conditions, fetch a revision.
+        * Given a set of conditions, fetch a revision
+        *
+        * This method is used then a revision ID is qualified and
+        * will incorporate some basic slave/master fallback logic
         *
         * @param array $conditions
         * @param int $flags (optional)
@@ -309,16 +308,24 @@ class Revision implements IDBAccessObject {
         */
        private static function newFromConds( $conditions, $flags = 0 ) {
                $db = wfGetDB( ( $flags & self::READ_LATEST ) ? DB_MASTER : DB_SLAVE );
+
                $rev = self::loadFromConds( $db, $conditions, $flags );
-               if ( $rev === null && wfGetLB()->getServerCount() > 1 ) {
-                       if ( !( $flags & self::READ_LATEST ) ) {
-                               $dbw = wfGetDB( DB_MASTER );
-                               $rev = self::loadFromConds( $dbw, $conditions, $flags );
-                       }
+               // Make sure new pending/committed revision are visibile later on
+               // within web requests to certain avoid bugs like T93866 and T94407.
+               if ( !$rev
+                       && !( $flags & self::READ_LATEST )
+                       && wfGetLB()->getServerCount() > 1
+                       && wfGetLB()->hasOrMadeRecentMasterChanges()
+               ) {
+                       $flags = self::READ_LATEST;
+                       $db = wfGetDB( DB_MASTER );
+                       $rev = self::loadFromConds( $db, $conditions, $flags );
                }
+
                if ( $rev ) {
                        $rev->mQueryFlags = $flags;
                }
+
                return $rev;
        }
 
@@ -1421,6 +1428,14 @@ class Revision implements IDBAccessObject {
 
                $this->mId = $rev_id !== null ? $rev_id : $dbw->insertId();
 
+               // Assertion to try to catch T92046
+               if ( (int)$this->mId === 0 ) {
+                       throw new UnexpectedValueException(
+                               'After insert, Revision mId is ' . var_export( $this->mId, 1 ) . ': ' .
+                                       var_export( $row, 1 )
+                       );
+               }
+
                Hooks::run( 'RevisionInsertComplete', array( &$this, $data, $flags ) );
 
                return $this->mId;
@@ -1491,9 +1506,9 @@ class Revision implements IDBAccessObject {
         * @return string|bool The revision's text, or false on failure
         */
        protected function loadText() {
-
                // Caching may be beneficial for massive use of external storage
                global $wgRevisionCacheExpiry, $wgMemc;
+
                $textId = $this->getTextId();
                $key = wfMemcKey( 'revisiontext', 'textid', $textId );
                if ( $wgRevisionCacheExpiry ) {
@@ -1566,7 +1581,7 @@ class Revision implements IDBAccessObject {
         * @return Revision|null Revision or null on error
         */
        public static function newNullRevision( $dbw, $pageId, $summary, $minor, $user = null ) {
-               global $wgContentHandlerUseDB;
+               global $wgContentHandlerUseDB, $wgContLang;
 
                $fields = array( 'page_latest', 'page_namespace', 'page_title',
                                                'rev_text_id', 'rev_len', 'rev_sha1' );
@@ -1591,6 +1606,9 @@ class Revision implements IDBAccessObject {
                                $user = $wgUser;
                        }
 
+                       // Truncate for whole multibyte characters
+                       $summary = $wgContLang->truncate( $summary, 255 );
+
                        $row = array(
                                'page'       => $pageId,
                                'user_text'  => $user->getName(),
@@ -1684,23 +1702,21 @@ class Revision implements IDBAccessObject {
         *
         * @param Title $title
         * @param int $id
-        * @return string
+        * @return string|bool False if not found
         */
-       static function getTimestampFromId( $title, $id ) {
-               $dbr = wfGetDB( DB_SLAVE );
+       static function getTimestampFromId( $title, $id, $flags = 0 ) {
+               $db = ( $flags & self::READ_LATEST )
+                       ? wfGetDB( DB_MASTER )
+                       : wfGetDB( DB_SLAVE );
                // Casting fix for databases that can't take '' for rev_id
                if ( $id == '' ) {
                        $id = 0;
                }
                $conds = array( 'rev_id' => $id );
                $conds['rev_page'] = $title->getArticleID();
-               $timestamp = $dbr->selectField( 'revision', 'rev_timestamp', $conds, __METHOD__ );
-               if ( $timestamp === false && wfGetLB()->getServerCount() > 1 ) {
-                       # Not in slave, try master
-                       $dbw = wfGetDB( DB_MASTER );
-                       $timestamp = $dbw->selectField( 'revision', 'rev_timestamp', $conds, __METHOD__ );
-               }
-               return wfTimestamp( TS_MW, $timestamp );
+               $timestamp = $db->selectField( 'revision', 'rev_timestamp', $conds, __METHOD__ );
+
+               return ( $timestamp !== false ) ? wfTimestamp( TS_MW, $timestamp ) : false;
        }
 
        /**
index f215f5f..96193a7 100644 (file)
@@ -573,27 +573,25 @@ class Sanitizer {
                } else {
                        # this might be possible using tidy itself
                        foreach ( $bits as $x ) {
-                               preg_match( self::ELEMENT_BITS_REGEX, $x, $regs );
-
-                               wfSuppressWarnings();
-                               list( /* $qbar */, $slash, $t, $params, $brace, $rest ) = $regs;
-                               wfRestoreWarnings();
+                               if ( preg_match( self::ELEMENT_BITS_REGEX, $x, $regs ) ) {
+                                       list( /* $qbar */, $slash, $t, $params, $brace, $rest ) = $regs;
 
-                               $badtag = false;
-                               if ( isset( $htmlelements[$t = strtolower( $t )] ) ) {
-                                       if ( is_callable( $processCallback ) ) {
-                                               call_user_func_array( $processCallback, array( &$params, $args ) );
-                                       }
+                                       $badtag = false;
+                                       if ( isset( $htmlelements[$t = strtolower( $t )] ) ) {
+                                               if ( is_callable( $processCallback ) ) {
+                                                       call_user_func_array( $processCallback, array( &$params, $args ) );
+                                               }
 
-                                       if ( !Sanitizer::validateTag( $params, $t ) ) {
-                                               $badtag = true;
-                                       }
+                                               if ( !Sanitizer::validateTag( $params, $t ) ) {
+                                                       $badtag = true;
+                                               }
 
-                                       $newparams = Sanitizer::fixTagAttributes( $params, $t );
-                                       if ( !$badtag ) {
-                                               $rest = str_replace( '>', '&gt;', $rest );
-                                               $text .= "<$slash$t$newparams$brace$rest";
-                                               continue;
+                                               $newparams = Sanitizer::fixTagAttributes( $params, $t );
+                                               if ( !$badtag ) {
+                                                       $rest = str_replace( '>', '&gt;', $rest );
+                                                       $text .= "<$slash$t$newparams$brace$rest";
+                                                       continue;
+                                               }
                                        }
                                }
                                $text .= '&lt;' . str_replace( '>', '&gt;', $x );
@@ -865,7 +863,7 @@ class Sanitizer {
                $value = preg_replace_callback(
                        '/[!-[]-z]/u', // U+FF01 to U+FF5A, excluding U+FF3C (bug 58088)
                        function ( $matches ) {
-                               $cp = utf8ToCodepoint( $matches[0] );
+                               $cp = UtfNormal\Utils::utf8ToCodepoint( $matches[0] );
                                if ( $cp === false ) {
                                        return '';
                                }
@@ -971,7 +969,7 @@ class Sanitizer {
                        // Line continuation
                        return '';
                } elseif ( $matches[2] !== '' ) {
-                       $char = codepointToUtf8( hexdec( $matches[2] ) );
+                       $char = UtfNormal\Utils::codepointToUtf8( hexdec( $matches[2] ) );
                } elseif ( $matches[3] !== '' ) {
                        $char = $matches[3];
                } else {
@@ -1452,9 +1450,9 @@ class Sanitizer {
         */
        static function decodeChar( $codepoint ) {
                if ( Sanitizer::validateCodepoint( $codepoint ) ) {
-                       return codepointToUtf8( $codepoint );
+                       return UtfNormal\Utils::codepointToUtf8( $codepoint );
                } else {
-                       return UTF8_REPLACEMENT;
+                       return UtfNormal\Constants::UTF8_REPLACEMENT;
                }
        }
 
@@ -1471,7 +1469,7 @@ class Sanitizer {
                        $name = self::$htmlEntityAliases[$name];
                }
                if ( isset( self::$htmlEntities[$name] ) ) {
-                       return codepointToUtf8( self::$htmlEntities[$name] );
+                       return UtfNormal\Utils::codepointToUtf8( self::$htmlEntities[$name] );
                } else {
                        return "&$name;";
                }
index 6939f95..e281768 100644 (file)
@@ -362,10 +362,15 @@ if ( $wgMetaNamespace === false ) {
        $wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
 }
 
-// Default value is either the suhosin limit or -1 for unlimited
+// Default value is 2000 or the suhosin limit if it is between 1 and 2000
 if ( $wgResourceLoaderMaxQueryLength === false ) {
-       $maxValueLength = ini_get( 'suhosin.get.max_value_length' );
-       $wgResourceLoaderMaxQueryLength = $maxValueLength > 0 ? $maxValueLength : -1;
+       $suhosinMaxValueLength = (int) ini_get( 'suhosin.get.max_value_length' );
+       if ( $suhosinMaxValueLength > 0 && $suhosinMaxValueLength < 2000 ) {
+               $wgResourceLoaderMaxQueryLength = $suhosinMaxValueLength;
+       } else {
+               $wgResourceLoaderMaxQueryLength = 2000;
+       }
+       unset($suhosinMaxValueLength);
 }
 
 /**
@@ -573,7 +578,6 @@ $ps_memcached = Profiler::instance()->scopedProfileIn( $fname . '-memcached' );
 $wgMemc = wfGetMainCache();
 $messageMemc = wfGetMessageCacheStorage();
 $parserMemc = wfGetParserCacheStorage();
-$wgLangConvMemc = wfGetLangConverterCacheStorage();
 
 wfDebugLog( 'caches', 'main: ' . get_class( $wgMemc ) .
        ', message: ' . get_class( $messageMemc ) .
index 15c18f3..81172a1 100644 (file)
@@ -68,6 +68,8 @@ class SiteStats {
         * @return bool|ResultWrapper
         */
        static function loadAndLazyInit() {
+               global $wgMiserMode;
+
                wfDebug( __METHOD__ . ": reading site_stats from slave\n" );
                $row = self::doLoad( wfGetDB( DB_SLAVE ) );
 
@@ -77,7 +79,7 @@ class SiteStats {
                        $row = self::doLoad( wfGetDB( DB_MASTER ) );
                }
 
-               if ( !self::isSane( $row ) ) {
+               if ( !$wgMiserMode && !self::isSane( $row ) ) {
                        // Normally the site_stats table is initialized at install time.
                        // Some manual construction scenarios may leave the table empty or
                        // broken, however, for instance when importing from a dump into a
diff --git a/includes/StatCounter.php b/includes/StatCounter.php
deleted file mode 100644 (file)
index 5fc8f2f..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-/**
- * @defgroup StatCounter StatCounter
- *
- * StatCounter is used to increment arbitrary keys for profiling reasons.
- * The key/values are persisted in several possible ways (see $wgStatsMethod).
- */
-
-/**
- * Aggregator for wfIncrStats() that batches updates per request.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write 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 StatCounter
- * @author Aaron Schulz
- */
-
-/**
- * Aggregator for wfIncrStats() that batches updates per request.
- * This avoids spamming the collector many times for the same key.
- *
- * @ingroup StatCounter
- */
-class StatCounter {
-       /** @var array */
-       protected $deltas = array(); // (key => count)
-
-       /** @var Config */
-       protected $config;
-
-       protected function __construct( Config $config ) {
-               $this->config = $config;
-       }
-
-       /**
-        * @return StatCounter
-        */
-       public static function singleton() {
-               static $instance = null;
-               if ( !$instance ) {
-                       $instance = new self(
-                               ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
-                       );
-               }
-               return $instance;
-       }
-
-       /**
-        * Increment a key by delta $count
-        *
-        * @param string $key
-        * @param int $count
-        * @return void
-        */
-       public function incr( $key, $count = 1 ) {
-               $this->deltas[$key] = isset( $this->deltas[$key] ) ? $this->deltas[$key] : 0;
-               $this->deltas[$key] += $count;
-               if ( PHP_SAPI === 'cli' ) {
-                       $this->flush();
-               }
-       }
-
-       /**
-        * Flush all pending deltas to persistent storage
-        *
-        * @return void
-        */
-       public function flush() {
-               $statsMethod = $this->config->get( 'StatsMethod' );
-               $deltas = array_filter( $this->deltas ); // remove 0 valued entries
-               if ( $statsMethod === 'udp' ) {
-                       $this->sendDeltasUDP( $deltas );
-               } elseif ( $statsMethod === 'cache' ) {
-                       $this->sendDeltasMemc( $deltas );
-               } else {
-                       // disabled
-               }
-               $this->deltas = array();
-       }
-
-       /**
-        * @param array $deltas
-        * @return void
-        */
-       protected function sendDeltasUDP( array $deltas ) {
-               $aggregateStatsID = $this->config->get( 'AggregateStatsID' );
-               $id = strlen( $aggregateStatsID ) ? $aggregateStatsID : wfWikiID();
-
-               $lines = array();
-               foreach ( $deltas as $key => $count ) {
-                       $lines[] = sprintf( $this->config->get( 'StatsFormatString' ), $id, $count, $key );
-               }
-
-               if ( count( $lines ) ) {
-                       static $socket = null;
-                       if ( !$socket ) {
-                               $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
-                       }
-                       $packet = '';
-                       $packets = array();
-                       foreach ( $lines as $line ) {
-                               if ( ( strlen( $packet ) + strlen( $line ) ) > 1450 ) {
-                                       $packets[] = $packet;
-                                       $packet = '';
-                               }
-                               $packet .= $line;
-                       }
-                       if ( $packet != '' ) {
-                               $packets[] = $packet;
-                       }
-                       foreach ( $packets as $packet ) {
-                               wfSuppressWarnings();
-                               socket_sendto(
-                                       $socket,
-                                       $packet,
-                                       strlen( $packet ),
-                                       0,
-                                       $this->config->get( 'UDPProfilerHost' ),
-                                       $this->config->get( 'UDPProfilerPort' )
-                               );
-                               wfRestoreWarnings();
-                       }
-               }
-       }
-
-       /**
-        * @param array $deltas
-        * @return void
-        */
-       protected function sendDeltasMemc( array $deltas ) {
-               global $wgMemc;
-
-               foreach ( $deltas as $key => $count ) {
-                       $ckey = wfMemcKey( 'stats', $key );
-                       if ( $wgMemc->incr( $ckey, $count ) === null ) {
-                               $wgMemc->add( $ckey, $count );
-                       }
-               }
-       }
-}
diff --git a/includes/TemplateParser.php b/includes/TemplateParser.php
new file mode 100644 (file)
index 0000000..3de70fa
--- /dev/null
@@ -0,0 +1,201 @@
+<?php
+/**
+ * Handles compiling Mustache templates into PHP rendering 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
+ * @since 1.25
+ */
+class TemplateParser {
+       /**
+        * @var string The path to the Mustache templates
+        */
+       protected $templateDir;
+
+       /**
+        * @var callable[] Array of cached rendering functions
+        */
+       protected $renderers;
+
+       /**
+        * @var bool Always compile template files
+        */
+       protected $forceRecompile = false;
+
+       /**
+        * @param string $templateDir
+        * @param boolean $forceRecompile
+        */
+       public function __construct( $templateDir = null, $forceRecompile = false ) {
+               $this->templateDir = $templateDir ? $templateDir : __DIR__ . '/templates';
+               $this->forceRecompile = $forceRecompile;
+       }
+
+       /**
+        * Constructs the location of the the source Mustache template
+        * @param string $templateName The name of the template
+        * @return string
+        * @throws UnexpectedValueException Disallows upwards directory traversal via $templateName
+        */
+       protected function getTemplateFilename( $templateName ) {
+               // Prevent upwards directory traversal using same methods as Title::secureAndSplit
+               if (
+                       strpos( $templateName, '.' ) !== false &&
+                       (
+                               $templateName === '.' || $templateName === '..' ||
+                               strpos( $templateName, './' ) === 0 ||
+                               strpos( $templateName, '../' ) === 0 ||
+                               strpos( $templateName, '/./' ) !== false ||
+                               strpos( $templateName, '/../' ) !== false ||
+                               substr( $templateName, -2 ) === '/.' ||
+                               substr( $templateName, -3 ) === '/..'
+                       )
+               ) {
+                       throw new UnexpectedValueException( "Malformed \$templateName: $templateName" );
+               }
+
+               return "{$this->templateDir}/{$templateName}.mustache";
+       }
+
+       /**
+        * Returns a given template function if found, otherwise throws an exception.
+        * @param string $templateName The name of the template (without file suffix)
+        * @return callable
+        * @throws RuntimeException
+        */
+       protected function getTemplate( $templateName ) {
+               // If a renderer has already been defined for this template, reuse it
+               if ( isset( $this->renderers[$templateName] ) && is_callable( $this->renderers[$templateName] ) ) {
+                       return $this->renderers[$templateName];
+               }
+
+               $filename = $this->getTemplateFilename( $templateName );
+
+               if ( !file_exists( $filename ) ) {
+                       throw new RuntimeException( "Could not locate template: {$filename}" );
+               }
+
+               // Read the template file
+               $fileContents = file_get_contents( $filename );
+
+               // Generate a quick hash for cache invalidation
+               $fastHash = md5( $fileContents );
+
+               // Fetch a secret key for building a keyed hash of the PHP code
+               $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+               $secretKey = $config->get( 'SecretKey' );
+
+               if ( $secretKey ) {
+                       // See if the compiled PHP code is stored in cache.
+                       // CACHE_ACCEL throws an exception if no suitable object cache is present, so fall
+                       // back to CACHE_ANYTHING.
+                       $cache = ObjectCache::newAccelerator( array(), CACHE_ANYTHING );
+                       $key = wfMemcKey( 'template', $templateName, $fastHash );
+                       $code = $this->forceRecompile ? null : $cache->get( $key );
+
+                       if ( !$code ) {
+                               $code = $this->compileForEval( $fileContents, $filename );
+
+                               // Prefix the cached code with a keyed hash (64 hex chars) as an integrity check
+                               $cache->set( $key, hash_hmac( 'sha256', $code, $secretKey ) . $code );
+                       } else {
+                               // Verify the integrity of the cached PHP code
+                               $keyedHash = substr( $code, 0, 64 );
+                               $code = substr( $code, 64 );
+                               if ( $keyedHash !== hash_hmac( 'sha256', $code, $secretKey ) ) {
+                                       // Generate a notice if integrity check fails
+                                       trigger_error( "Template failed integrity check: {$filename}" );
+                               }
+                       }
+               // If there is no secret key available, don't use cache
+               } else {
+                       $code = $this->compileForEval( $fileContents, $filename );
+               }
+
+               $renderer = eval( $code );
+               if ( !is_callable( $renderer ) ) {
+                       throw new RuntimeException( "Requested template, {$templateName}, is not callable" );
+               }
+               return $this->renderers[$templateName] = $renderer;
+       }
+
+       /**
+        * Wrapper for compile() function that verifies successful compilation and strips
+        * out the '<?php' part so that the code is ready for eval()
+        * @param string $fileContents Mustache code
+        * @param string $filename Name of the template
+        * @return string PHP code (without '<?php')
+        * @throws RuntimeException
+        */
+       protected function compileForEval( $fileContents, $filename ) {
+               // Compile the template into PHP code
+               $code = $this->compile( $fileContents );
+
+               if ( !$code ) {
+                       throw new RuntimeException( "Could not compile template: {$filename}" );
+               }
+
+               // Strip the "<?php" added by lightncandy so that it can be eval()ed
+               if ( substr( $code, 0, 5 ) === '<?php' ) {
+                       $code = substr( $code, 5 );
+               }
+
+               return $code;
+       }
+
+       /**
+        * Compile the Mustache code into PHP code using LightnCandy
+        * @param string $code Mustache code
+        * @return string PHP code (with '<?php')
+        * @throws RuntimeException
+        */
+       protected function compile( $code ) {
+               if ( !class_exists( 'LightnCandy' ) ) {
+                       throw new RuntimeException( 'LightnCandy class not defined' );
+               }
+               return LightnCandy::compile(
+                       $code,
+                       array(
+                               // Do not add more flags here without discussion.
+                               // If you do add more flags, be sure to update unit tests as well.
+                               'flags' => LightnCandy::FLAG_ERROR_EXCEPTION
+                       )
+               );
+       }
+
+       /**
+        * Returns HTML for a given template by calling the template function with the given args
+        *
+        * @code
+        *     echo $templateParser->processTemplate(
+        *         'ExampleTemplate',
+        *         array(
+        *             'username' => $user->getName(),
+        *             'message' => 'Hello!'
+        *         )
+        *     );
+        * @endcode
+        * @param string $templateName The name of the template
+        * @param mixed $args
+        * @param array $scopes
+        * @return string
+        */
+       public function processTemplate( $templateName, $args, array $scopes = array() ) {
+               $template = $this->getTemplate( $templateName );
+               return call_user_func( $template, $args, $scopes );
+       }
+}
index 4a372fb..bf0fb8e 100644 (file)
@@ -29,8 +29,6 @@
  *       however, it does so inefficiently.
  * @note Consider using a TitleValue object instead. TitleValue is more lightweight
  *       and does not rely on global state or the database.
- *
- * @internal documentation reviewed 15 Mar 2010
  */
 class Title {
        /** @var MapCacheLRU */
@@ -258,12 +256,14 @@ class Title {
         *   by a prefix.  If you want to force a specific namespace even if
         *   $text might begin with a namespace prefix, use makeTitle() or
         *   makeTitleSafe().
-        * @throws MWException
+        * @throws InvalidArgumentException
         * @return Title|null Title or null on an error.
         */
        public static function newFromText( $text, $defaultNamespace = NS_MAIN ) {
                if ( is_object( $text ) ) {
-                       throw new MWException( 'Title::newFromText given an object' );
+                       throw new InvalidArgumentException( '$text must be a string.' );
+               } elseif ( !is_string( $text ) ) {
+                       wfWarn( __METHOD__ . ': $text must be a string. This will throw an InvalidArgumentException in future.' );
                }
 
                $cache = self::getTitleCache();
@@ -1888,18 +1888,16 @@ class Title {
         * @param string $action Action that permission needs to be checked for
         * @param User $user User to check (since 1.19); $wgUser will be used if not
         *   provided.
-        * @param bool $doExpensiveQueries Set this to false to avoid doing
-        *   unnecessary queries.
+        * @param string $rigor Same format as Title::getUserPermissionsErrors()
         * @return bool
         */
-       public function userCan( $action, $user = null, $doExpensiveQueries = true ) {
+       public function userCan( $action, $user = null, $rigor = 'secure' ) {
                if ( !$user instanceof User ) {
                        global $wgUser;
                        $user = $wgUser;
                }
 
-               return !count( $this->getUserPermissionsErrorsInternal(
-                       $action, $user, $doExpensiveQueries, true ) );
+               return !count( $this->getUserPermissionsErrorsInternal( $action, $user, $rigor, true ) );
        }
 
        /**
@@ -1909,16 +1907,19 @@ class Title {
         *
         * @param string $action Action that permission needs to be checked for
         * @param User $user User to check
-        * @param bool $doExpensiveQueries Set this to false to avoid doing unnecessary
-        *   queries by skipping checks for cascading protections and user blocks.
+        * @param string $rigor One of (quick,full,secure)
+        *   - quick  : does cheap permission checks from slaves (usable for GUI creation)
+        *   - full   : does cheap and expensive checks possibly from a slave
+        *   - secure : does cheap and expensive checks, using the master as needed
+        * @param bool $short Set this to true to stop after the first permission error.
         * @param array $ignoreErrors Array of Strings Set this to a list of message keys
         *   whose corresponding errors may be ignored.
         * @return array Array of arguments to wfMessage to explain permissions problems.
         */
-       public function getUserPermissionsErrors( $action, $user, $doExpensiveQueries = true,
-               $ignoreErrors = array()
+       public function getUserPermissionsErrors(
+               $action, $user, $rigor = 'secure', $ignoreErrors = array()
        ) {
-               $errors = $this->getUserPermissionsErrorsInternal( $action, $user, $doExpensiveQueries );
+               $errors = $this->getUserPermissionsErrorsInternal( $action, $user, $rigor );
 
                // Remove the errors being ignored.
                foreach ( $errors as $index => $error ) {
@@ -1938,16 +1939,14 @@ class Title {
         * @param string $action The action to check
         * @param User $user User to check
         * @param array $errors List of current errors
-        * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+        * @param string $rigor Same format as Title::getUserPermissionsErrors()
         * @param bool $short Short circuit on first error
         *
         * @return array List of errors
         */
-       private function checkQuickPermissions( $action, $user, $errors,
-               $doExpensiveQueries, $short
-       ) {
+       private function checkQuickPermissions( $action, $user, $errors, $rigor, $short ) {
                if ( !Hooks::run( 'TitleQuickPermissions',
-                       array( $this, $user, $action, &$errors, $doExpensiveQueries, $short ) )
+                       array( $this, $user, $action, &$errors, ( $rigor !== 'quick' ), $short ) )
                ) {
                        return $errors;
                }
@@ -2038,12 +2037,12 @@ class Title {
         * @param string $action The action to check
         * @param User $user User to check
         * @param array $errors List of current errors
-        * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+        * @param string $rigor Same format as Title::getUserPermissionsErrors()
         * @param bool $short Short circuit on first error
         *
         * @return array List of errors
         */
-       private function checkPermissionHooks( $action, $user, $errors, $doExpensiveQueries, $short ) {
+       private function checkPermissionHooks( $action, $user, $errors, $rigor, $short ) {
                // Use getUserPermissionsErrors instead
                $result = '';
                if ( !Hooks::run( 'userCan', array( &$this, &$user, $action, &$result ) ) ) {
@@ -2055,7 +2054,7 @@ class Title {
                }
                // Check getUserPermissionsErrorsExpensive hook
                if (
-                       $doExpensiveQueries
+                       $rigor !== 'quick'
                        && !( $short && count( $errors ) > 0 )
                        && !Hooks::run( 'getUserPermissionsErrorsExpensive', array( &$this, &$user, $action, &$result ) )
                ) {
@@ -2071,14 +2070,12 @@ class Title {
         * @param string $action The action to check
         * @param User $user User to check
         * @param array $errors List of current errors
-        * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+        * @param string $rigor Same format as Title::getUserPermissionsErrors()
         * @param bool $short Short circuit on first error
         *
         * @return array List of errors
         */
-       private function checkSpecialsAndNSPermissions( $action, $user, $errors,
-               $doExpensiveQueries, $short
-       ) {
+       private function checkSpecialsAndNSPermissions( $action, $user, $errors, $rigor, $short ) {
                # Only 'createaccount' can be performed on special pages,
                # which don't actually exist in the DB.
                if ( NS_SPECIAL == $this->mNamespace && $action !== 'createaccount' ) {
@@ -2102,12 +2099,12 @@ class Title {
         * @param string $action The action to check
         * @param User $user User to check
         * @param array $errors List of current errors
-        * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+        * @param string $rigor Same format as Title::getUserPermissionsErrors()
         * @param bool $short Short circuit on first error
         *
         * @return array List of errors
         */
-       private function checkCSSandJSPermissions( $action, $user, $errors, $doExpensiveQueries, $short ) {
+       private function checkCSSandJSPermissions( $action, $user, $errors, $rigor, $short ) {
                # Protect css/js subpages of user pages
                # XXX: this might be better using restrictions
                # XXX: right 'editusercssjs' is deprecated, for backward compatibility only
@@ -2138,12 +2135,12 @@ class Title {
         * @param string $action The action to check
         * @param User $user User to check
         * @param array $errors List of current errors
-        * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+        * @param string $rigor Same format as Title::getUserPermissionsErrors()
         * @param bool $short Short circuit on first error
         *
         * @return array List of errors
         */
-       private function checkPageRestrictions( $action, $user, $errors, $doExpensiveQueries, $short ) {
+       private function checkPageRestrictions( $action, $user, $errors, $rigor, $short ) {
                foreach ( $this->getRestrictions( $action ) as $right ) {
                        // Backwards compatibility, rewrite sysop -> editprotected
                        if ( $right == 'sysop' ) {
@@ -2172,15 +2169,13 @@ class Title {
         * @param string $action The action to check
         * @param User $user User to check
         * @param array $errors List of current errors
-        * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+        * @param string $rigor Same format as Title::getUserPermissionsErrors()
         * @param bool $short Short circuit on first error
         *
         * @return array List of errors
         */
-       private function checkCascadingSourcesRestrictions( $action, $user, $errors,
-               $doExpensiveQueries, $short
-       ) {
-               if ( $doExpensiveQueries && !$this->isCssJsSubpage() ) {
+       private function checkCascadingSourcesRestrictions( $action, $user, $errors, $rigor, $short ) {
+               if ( $rigor !== 'quick' && !$this->isCssJsSubpage() ) {
                        # We /could/ use the protection level on the source page, but it's
                        # fairly ugly as we have to establish a precedence hierarchy for pages
                        # included by multiple cascade-protected pages. So just restrict
@@ -2221,20 +2216,16 @@ class Title {
         * @param string $action The action to check
         * @param User $user User to check
         * @param array $errors List of current errors
-        * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+        * @param string $rigor Same format as Title::getUserPermissionsErrors()
         * @param bool $short Short circuit on first error
         *
         * @return array List of errors
         */
-       private function checkActionPermissions( $action, $user, $errors,
-               $doExpensiveQueries, $short
-       ) {
+       private function checkActionPermissions( $action, $user, $errors, $rigor, $short ) {
                global $wgDeleteRevisionsLimit, $wgLang;
 
                if ( $action == 'protect' ) {
-                       if ( count( $this->getUserPermissionsErrorsInternal( 'edit',
-                               $user, $doExpensiveQueries, true ) )
-                       ) {
+                       if ( count( $this->getUserPermissionsErrorsInternal( 'edit', $user, $rigor, true ) ) ) {
                                // If they can't edit, they shouldn't protect.
                                $errors[] = array( 'protect-cantedit' );
                        }
@@ -2267,17 +2258,16 @@ class Title {
                                $errors[] = array( 'immobile-target-page' );
                        }
                } elseif ( $action == 'delete' ) {
-                       $tempErrors = $this->checkPageRestrictions( 'edit',
-                               $user, array(), $doExpensiveQueries, true );
+                       $tempErrors = $this->checkPageRestrictions( 'edit', $user, array(), $rigor, true );
                        if ( !$tempErrors ) {
                                $tempErrors = $this->checkCascadingSourcesRestrictions( 'edit',
-                                       $user, $tempErrors, $doExpensiveQueries, true );
+                                       $user, $tempErrors, $rigor, true );
                        }
                        if ( $tempErrors ) {
                                // If protection keeps them from editing, they shouldn't be able to delete.
                                $errors[] = array( 'deleteprotected' );
                        }
-                       if ( $doExpensiveQueries && $wgDeleteRevisionsLimit
+                       if ( $rigor !== 'quick' && $wgDeleteRevisionsLimit
                                && !$this->userCan( 'bigdelete', $user ) && $this->isBigDeletion()
                        ) {
                                $errors[] = array( 'delete-toobig', $wgLang->formatNum( $wgDeleteRevisionsLimit ) );
@@ -2292,15 +2282,15 @@ class Title {
         * @param string $action The action to check
         * @param User $user User to check
         * @param array $errors List of current errors
-        * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+        * @param string $rigor Same format as Title::getUserPermissionsErrors()
         * @param bool $short Short circuit on first error
         *
         * @return array List of errors
         */
-       private function checkUserBlock( $action, $user, $errors, $doExpensiveQueries, $short ) {
+       private function checkUserBlock( $action, $user, $errors, $rigor, $short ) {
                // Account creation blocks handled at userlogin.
                // Unblocking handled in SpecialUnblock
-               if ( !$doExpensiveQueries || in_array( $action, array( 'createaccount', 'unblock' ) ) ) {
+               if ( $rigor === 'quick' || in_array( $action, array( 'createaccount', 'unblock' ) ) ) {
                        return $errors;
                }
 
@@ -2310,10 +2300,13 @@ class Title {
                        $errors[] = array( 'confirmedittext' );
                }
 
-               if ( ( $action == 'edit' || $action == 'create' ) && !$user->isBlockedFrom( $this ) ) {
+               $useSlave = ( $rigor !== 'secure' );
+               if ( ( $action == 'edit' || $action == 'create' )
+                       && !$user->isBlockedFrom( $this, $useSlave )
+               ) {
                        // Don't block the user from editing their own talk page unless they've been
                        // explicitly blocked from that too.
-               } elseif ( $user->isBlocked() && $user->mBlock->prevents( $action ) !== false ) {
+               } elseif ( $user->isBlocked() && $user->getBlock()->prevents( $action ) !== false ) {
                        // @todo FIXME: Pass the relevant context into this function.
                        $errors[] = $user->getBlock()->getPermissionsError( RequestContext::getMain() );
                }
@@ -2327,12 +2320,12 @@ class Title {
         * @param string $action The action to check
         * @param User $user User to check
         * @param array $errors List of current errors
-        * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+        * @param string $rigor Same format as Title::getUserPermissionsErrors()
         * @param bool $short Short circuit on first error
         *
         * @return array List of errors
         */
-       private function checkReadPermissions( $action, $user, $errors, $doExpensiveQueries, $short ) {
+       private function checkReadPermissions( $action, $user, $errors, $rigor, $short ) {
                global $wgWhitelistRead, $wgWhitelistReadRegexp;
 
                $whitelisted = false;
@@ -2435,13 +2428,23 @@ class Title {
         *
         * @param string $action Action that permission needs to be checked for
         * @param User $user User to check
-        * @param bool $doExpensiveQueries Set this to false to avoid doing unnecessary queries.
+        * @param string $rigor One of (quick,full,secure)
+        *   - quick  : does cheap permission checks from slaves (usable for GUI creation)
+        *   - full   : does cheap and expensive checks possibly from a slave
+        *   - secure : does cheap and expensive checks, using the master as needed
         * @param bool $short Set this to true to stop after the first permission error.
         * @return array Array of arrays of the arguments to wfMessage to explain permissions problems.
         */
-       protected function getUserPermissionsErrorsInternal( $action, $user,
-               $doExpensiveQueries = true, $short = false
+       protected function getUserPermissionsErrorsInternal(
+               $action, $user, $rigor = 'secure', $short = false
        ) {
+               if ( $rigor === true ) {
+                       $rigor = 'secure'; // b/c
+               } elseif ( $rigor === false ) {
+                       $rigor = 'quick'; // b/c
+               } elseif ( !in_array( $rigor, array( 'quick', 'full', 'secure' ) ) ) {
+                       throw new Exception( "Invalid rigor parameter '$rigor'." );
+               }
 
                # Read has special handling
                if ( $action == 'read' ) {
@@ -2479,7 +2482,7 @@ class Title {
                while ( count( $checks ) > 0 &&
                                !( $short && count( $errors ) > 0 ) ) {
                        $method = array_shift( $checks );
-                       $errors = $this->$method( $action, $user, $errors, $doExpensiveQueries, $short );
+                       $errors = $this->$method( $action, $user, $errors, $rigor, $short );
                }
 
                return $errors;
@@ -3628,7 +3631,10 @@ class Title {
                $errors = array();
 
                $destFile = wfLocalFile( $nt );
-               if ( !$wgUser->isAllowed( 'reupload-shared' ) && !$destFile->exists() && wfFindFile( $nt ) ) {
+               $destFile->load( File::READ_LATEST );
+               if ( !$wgUser->isAllowed( 'reupload-shared' )
+                       && !$destFile->exists() && wfFindFile( $nt )
+               ) {
                        $errors[] = array( 'file-exists-sharedrepo' );
                }
 
@@ -3803,6 +3809,7 @@ class Title {
                # Is it an existing file?
                if ( $nt->getNamespace() == NS_FILE ) {
                        $file = wfLocalFile( $nt );
+                       $file->load( File::READ_LATEST );
                        if ( $file->exists() ) {
                                wfDebug( __METHOD__ . ": file exists\n" );
                                return false;
@@ -4673,34 +4680,64 @@ class Title {
        public function getEditNotices( $oldid = 0 ) {
                $notices = array();
 
-               # Optional notices on a per-namespace and per-page basis
+               // Optional notice for the entire namespace
                $editnotice_ns = 'editnotice-' . $this->getNamespace();
-               $editnotice_ns_message = wfMessage( $editnotice_ns );
-               if ( $editnotice_ns_message->exists() ) {
-                       $notices[$editnotice_ns] = '<div class="mw-editnotice mw-editnotice-namespace ' .
-                               Sanitizer::escapeClass( "mw-$editnotice_ns" ) . '">' .
-                               $editnotice_ns_message->parseAsBlock() . '</div>';
+               $msg = wfMessage( $editnotice_ns );
+               if ( $msg->exists() ) {
+                       $html = $msg->parseAsBlock();
+                       // Edit notices may have complex logic, but output nothing (T91715)
+                       if ( trim( $html ) !== '' ) {
+                               $notices[$editnotice_ns] = Html::rawElement(
+                                       'div',
+                                       array( 'class' => array(
+                                               'mw-editnotice',
+                                               'mw-editnotice-namespace',
+                                               Sanitizer::escapeClass( "mw-$editnotice_ns" )
+                                       ) ),
+                                       $html
+                               );
+                       }
                }
+
                if ( MWNamespace::hasSubpages( $this->getNamespace() ) ) {
+                       // Optional notice for page itself and any parent page
                        $parts = explode( '/', $this->getDBkey() );
                        $editnotice_base = $editnotice_ns;
                        while ( count( $parts ) > 0 ) {
                                $editnotice_base .= '-' . array_shift( $parts );
-                               $editnotice_base_msg = wfMessage( $editnotice_base );
-                               if ( $editnotice_base_msg->exists() ) {
-                                       $notices[$editnotice_base] = '<div class="mw-editnotice mw-editnotice-base ' .
-                                               Sanitizer::escapeClass( "mw-$editnotice_base" ) . '">' .
-                                               $editnotice_base_msg->parseAsBlock() . '</div>';
+                               $msg = wfMessage( $editnotice_base );
+                               if ( $msg->exists() ) {
+                                       $html = $msg->parseAsBlock();
+                                       if ( trim( $html ) !== '' ) {
+                                               $notices[$editnotice_base] = Html::rawElement(
+                                                       'div',
+                                                       array( 'class' => array(
+                                                               'mw-editnotice',
+                                                               'mw-editnotice-base',
+                                                               Sanitizer::escapeClass( "mw-$editnotice_base" )
+                                                       ) ),
+                                                       $html
+                                               );
+                                       }
                                }
                        }
                } else {
-                       # Even if there are no subpages in namespace, we still don't want / in MW ns.
+                       // Even if there are no subpages in namespace, we still don't want "/" in MediaWiki message keys
                        $editnoticeText = $editnotice_ns . '-' . str_replace( '/', '-', $this->getDBkey() );
-                       $editnoticeMsg = wfMessage( $editnoticeText );
-                       if ( $editnoticeMsg->exists() ) {
-                               $notices[$editnoticeText] = '<div class="mw-editnotice mw-editnotice-page ' .
-                                       Sanitizer::escapeClass( "mw-$editnoticeText" ) . '">' .
-                                       $editnoticeMsg->parseAsBlock() . '</div>';
+                       $msg = wfMessage( $editnoticeText );
+                       if ( $msg->exists() ) {
+                               $html = $msg->parseAsBlock();
+                               if ( trim( $html ) !== '' ) {
+                                       $notices[$editnoticeText] = Html::rawElement(
+                                               'div',
+                                               array( 'class' => array(
+                                                       'mw-editnotice',
+                                                       'mw-editnotice-page',
+                                                       Sanitizer::escapeClass( "mw-$editnoticeText" )
+                                               ) ),
+                                               $html
+                                       );
+                               }
                        }
                }
 
index c2db67a..f526fe0 100644 (file)
@@ -204,8 +204,10 @@ class User implements IDBAccessObject {
        public $mNewpassTime;
 
        public $mEmail;
-
+       /** @var string TS_MW timestamp from the DB */
        public $mTouched;
+       /** @var string TS_MW timestamp from cache */
+       protected $mQuickTouched;
 
        protected $mToken;
 
@@ -295,6 +297,9 @@ class User implements IDBAccessObject {
        /** @var array */
        private $mWatchedItems = array();
 
+       /** @var integer User::READ_* constant bitfield used to load data */
+       protected $queryFlagsUsed = self::READ_NORMAL;
+
        public static $idCacheByName = array();
 
        /**
@@ -320,30 +325,35 @@ class User implements IDBAccessObject {
 
        /**
         * Load the user table data for this object from the source given by mFrom.
+        *
+        * @param integer $flags User::READ_* constant bitfield
         */
-       public function load() {
+       public function load( $flags = self::READ_LATEST ) {
                if ( $this->mLoadedItems === true ) {
                        return;
                }
 
                // Set it now to avoid infinite recursion in accessors
                $this->mLoadedItems = true;
+               $this->queryFlagsUsed = $flags;
 
                switch ( $this->mFrom ) {
                        case 'defaults':
                                $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 );
                                if ( !$this->mId ) {
                                        // Nonexistent user placeholder object
                                        $this->loadDefaults( $this->mName );
                                } else {
-                                       $this->loadFromId();
+                                       $this->loadFromId( $flags );
                                }
                                break;
                        case 'id':
-                               $this->loadFromId();
+                               $this->loadFromId( $flags );
                                break;
                        case 'session':
                                if ( !$this->loadFromSession() ) {
@@ -359,9 +369,10 @@ class User implements IDBAccessObject {
 
        /**
         * Load user table data, given mId has already been set.
+        * @param integer $flags User::READ_* constant bitfield
         * @return bool False if the ID does not exist, true otherwise
         */
-       public function loadFromId() {
+       public function loadFromId( $flags = self::READ_LATEST ) {
                if ( $this->mId == 0 ) {
                        $this->loadDefaults();
                        return false;
@@ -372,14 +383,20 @@ class User implements IDBAccessObject {
                if ( !$cache ) {
                        wfDebug( "User: cache miss for user {$this->mId}\n" );
                        // Load from DB
-                       if ( !$this->loadFromDatabase() ) {
+                       if ( !$this->loadFromDatabase( $flags ) ) {
                                // Can't load from ID, user is anonymous
                                return false;
                        }
-                       $this->saveToCache();
+                       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->mLoadedItems = true;
+               $this->queryFlagsUsed = $flags;
 
                return true;
        }
@@ -390,7 +407,7 @@ class User implements IDBAccessObject {
         * @return bool false if the ID does not exist or data is invalid, true otherwise
         * @since 1.25
         */
-       public function loadFromCache() {
+       protected function loadFromCache() {
                global $wgMemc;
 
                if ( $this->mId == 0 ) {
@@ -417,22 +434,35 @@ class User implements IDBAccessObject {
 
        /**
         * Save user data to the shared cache
+        *
+        * This method should not be called outside the User class
         */
        public function saveToCache() {
+               global $wgMemc;
+
                $this->load();
                $this->loadGroups();
                $this->loadOptions();
+
                if ( $this->isAnon() ) {
                        // Anonymous users are uncached
                        return;
                }
+
+               // 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;
                }
                $data['mVersion'] = self::VERSION;
                $key = wfMemcKey( 'user', 'id', $this->mId );
-               global $wgMemc;
+
                $wgMemc->set( $key, $data );
        }
 
@@ -796,15 +826,24 @@ class User implements IDBAccessObject {
        }
 
        /**
-        * Check if this is a valid password for this user. Status will be good if
-        * the password is valid, or have an array of error messages if not.
+        * Check if this is a valid password for this user
+        *
+        * Create a Status object based on the password's validity.
+        * The Status should be set to fatal if the user should not
+        * be allowed to log in, and should have any errors that
+        * would block changing the password.
+        *
+        * If the return value of this is not OK, the password
+        * should not be checked. If the return value is not Good,
+        * the password can be checked, but the user should not be
+        * able to set their password to this.
         *
         * @param string $password Desired password
         * @return Status
         * @since 1.23
         */
        public function checkPasswordValidity( $password ) {
-               global $wgMinimalPasswordLength, $wgContLang;
+               global $wgMinimalPasswordLength, $wgMaximalPasswordLength, $wgContLang;
 
                static $blockedLogins = array(
                        'Useruser' => 'Passpass', 'Useruser1' => 'Passpass1', # r75589
@@ -824,6 +863,10 @@ class User implements IDBAccessObject {
                        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;
@@ -1047,7 +1090,6 @@ class User implements IDBAccessObject {
                $this->mGroups = array();
 
                Hooks::run( 'UserLoadDefaults', array( $this, $name ) );
-
        }
 
        /**
@@ -1080,6 +1122,7 @@ class User implements IDBAccessObject {
 
        /**
         * Load user data from the session or login cookie.
+        *
         * @return bool True if the user is logged in, false otherwise.
         */
        private function loadFromSession() {
@@ -1118,6 +1161,7 @@ class User implements IDBAccessObject {
                }
 
                $proposedUser = User::newFromId( $sId );
+               $proposedUser->load( self::READ_LATEST );
                if ( !$proposedUser->isLoggedIn() ) {
                        // Not a valid ID
                        return false;
@@ -1162,10 +1206,10 @@ class User implements IDBAccessObject {
         * Load user and user_group data from the database.
         * $this->mId must be set, this is how the user is identified.
         *
-        * @param int $flags Supports User::READ_LOCKING
+        * @param integer $flags User::READ_* constant bitfield
         * @return bool True if the user exists, false if the user is anonymous
         */
-       public function loadFromDatabase( $flags = 0 ) {
+       public function loadFromDatabase( $flags = self::READ_LATEST ) {
                // Paranoia
                $this->mId = intval( $this->mId );
 
@@ -1175,8 +1219,11 @@ class User implements IDBAccessObject {
                        return false;
                }
 
-               $dbr = wfGetDB( DB_MASTER );
-               $s = $dbr->selectRow(
+               $db = ( $flags & self::READ_LATEST )
+                       ? wfGetDB( DB_MASTER )
+                       : wfGetDB( DB_SLAVE );
+
+               $s = $db->selectRow(
                        'user',
                        self::selectFields(),
                        array( 'user_id' => $this->mId ),
@@ -1186,6 +1233,7 @@ class User implements IDBAccessObject {
                                : array()
                );
 
+               $this->queryFlagsUsed = $flags;
                Hooks::run( 'UserLoadFromDatabase', array( $this, &$s ) );
 
                if ( $s !== false ) {
@@ -1211,7 +1259,7 @@ class User implements IDBAccessObject {
         *      user_groups             Array with groups out of the user_groups table
         *      user_properties         Array with properties out of the user_properties table
         */
-       public function loadFromRow( $row, $data = null ) {
+       protected function loadFromRow( $row, $data = null ) {
                $all = true;
                $passwordFactory = self::getPasswordFactory();
 
@@ -1240,6 +1288,10 @@ class User implements IDBAccessObject {
                        $all = false;
                }
 
+               if ( isset( $row->user_id ) && isset( $row->user_name ) ) {
+                       self::$idCacheByName[$row->user_name] = $row->user_id;
+               }
+
                if ( isset( $row->user_editcount ) ) {
                        $this->mEditCount = $row->user_editcount;
                } else {
@@ -1319,8 +1371,10 @@ class User implements IDBAccessObject {
         */
        private function loadGroups() {
                if ( is_null( $this->mGroups ) ) {
-                       $dbr = wfGetDB( DB_MASTER );
-                       $res = $dbr->select( 'user_groups',
+                       $db = ( $this->queryFlagsUsed & self::READ_LATEST )
+                               ? wfGetDB( DB_MASTER )
+                               : wfGetDB( DB_SLAVE );
+                       $res = $db->select( 'user_groups',
                                array( 'ug_group' ),
                                array( 'ug_user' => $this->mId ),
                                __METHOD__ );
@@ -1341,13 +1395,20 @@ class User implements IDBAccessObject {
         * @since 1.24
         */
        private function loadPasswords() {
-               if ( $this->getId() !== 0 && ( $this->mPassword === null || $this->mNewpassword === null ) ) {
-                       $this->loadFromRow( wfGetDB( DB_MASTER )->selectRow(
-                                       'user',
-                                       array( 'user_password', 'user_newpassword', 'user_newpass_time', 'user_password_expires' ),
-                                       array( 'user_id' => $this->getId() ),
-                                       __METHOD__
-                               ) );
+               if ( $this->getId() !== 0 &&
+                       ( $this->mPassword === null || $this->mNewpassword === null )
+               ) {
+                       $db = ( $this->queryFlagsUsed & self::READ_LATEST )
+                               ? wfGetDB( DB_MASTER )
+                               : wfGetDB( DB_SLAVE );
+
+                       $this->loadFromRow( $db->selectRow(
+                               'user',
+                               array( 'user_password', 'user_newpassword',
+                                       'user_newpass_time', 'user_password_expires' ),
+                               array( 'user_id' => $this->getId() ),
+                               __METHOD__
+                       ) );
                }
        }
 
@@ -1369,7 +1430,7 @@ class User implements IDBAccessObject {
                global $wgAutopromoteOnceLogInRC, $wgAuth;
 
                $toPromote = array();
-               if ( $this->getId() ) {
+               if ( !wfReadOnly() && $this->getId() ) {
                        $toPromote = Autopromote::getAutopromoteOnceGroups( $this, $event );
                        if ( count( $toPromote ) ) {
                                $oldGroups = $this->getGroups(); // previous groups
@@ -1395,6 +1456,7 @@ class User implements IDBAccessObject {
                                }
                        }
                }
+
                return $toPromote;
        }
 
@@ -2007,17 +2069,7 @@ class User implements IDBAccessObject {
                                        // Anon newtalk disabled by configuration.
                                        $this->mNewtalk = false;
                                } else {
-                                       global $wgMemc;
-                                       $key = wfMemcKey( 'newtalk', 'ip', $this->getName() );
-                                       $newtalk = $wgMemc->get( $key );
-                                       if ( strval( $newtalk ) !== '' ) {
-                                               $this->mNewtalk = (bool)$newtalk;
-                                       } else {
-                                               // Since we are caching this, make sure it is up to date by getting it
-                                               // from the master
-                                               $this->mNewtalk = $this->checkNewtalk( 'user_ip', $this->getName(), true );
-                                               $wgMemc->set( $key, (int)$this->mNewtalk, 1800 );
-                                       }
+                                       $this->mNewtalk = $this->checkNewtalk( 'user_ip', $this->getName() );
                                }
                        } else {
                                $this->mNewtalk = $this->checkNewtalk( 'user_id', $this->mId );
@@ -2087,17 +2139,13 @@ class User implements IDBAccessObject {
         * @see getNewtalk()
         * @param string $field 'user_ip' for anonymous users, 'user_id' otherwise
         * @param string|int $id User's IP address for anonymous users, User ID otherwise
-        * @param bool $fromMaster True to fetch from the master, false for a slave
         * @return bool True if the user has new messages
         */
-       protected function checkNewtalk( $field, $id, $fromMaster = false ) {
-               if ( $fromMaster ) {
-                       $db = wfGetDB( DB_MASTER );
-               } else {
-                       $db = wfGetDB( DB_SLAVE );
-               }
-               $ok = $db->selectField( 'user_newtalk', $field,
-                       array( $field => $id ), __METHOD__ );
+       protected function checkNewtalk( $field, $id ) {
+               $dbr = wfGetDB( DB_SLAVE );
+
+               $ok = $dbr->selectField( 'user_newtalk', $field, array( $field => $id ), __METHOD__ );
+
                return $ok !== false;
        }
 
@@ -2154,6 +2202,8 @@ class User implements IDBAccessObject {
         *   page. Ignored if null or !$val.
         */
        public function setNewtalk( $val, $curRev = null ) {
+               global $wgMemc;
+
                if ( wfReadOnly() ) {
                        return;
                }
@@ -2168,7 +2218,6 @@ class User implements IDBAccessObject {
                        $field = 'user_id';
                        $id = $this->getId();
                }
-               global $wgMemc;
 
                if ( $val ) {
                        $changed = $this->updateNewtalk( $field, $id, $curRev );
@@ -2192,9 +2241,15 @@ class User implements IDBAccessObject {
         * user_touched field when we update things.
         * @return string Timestamp in TS_MW format
         */
-       private static function newTouchedTimestamp() {
+       private function newTouchedTimestamp() {
                global $wgClockSkewFudge;
-               return wfTimestamp( TS_MW, time() + $wgClockSkewFudge );
+
+               $time = wfTimestamp( TS_MW, time() + $wgClockSkewFudge );
+               if ( $this->mTouched && $time <= $this->mTouched ) {
+                       $time = wfTimestamp( TS_MW, wfTimestamp( TS_UNIX, $this->mTouched ) + 1 );
+               }
+
+               return $time;
        }
 
        /**
@@ -2205,44 +2260,46 @@ class User implements IDBAccessObject {
         * Called implicitly from invalidateCache() and saveSettings().
         */
        public function clearSharedCache() {
+               global $wgMemc;
+
                $this->load();
                if ( $this->mId ) {
-                       global $wgMemc;
                        $wgMemc->delete( wfMemcKey( 'user', 'id', $this->mId ) );
                }
        }
 
        /**
-        * Immediately touch the user data cache for this account.
-        * Updates user_touched field, and removes account data from memcached
-        * for reload on the next hit.
+        * Immediately touch the user data cache for this account
+        *
+        * Calls touch() and removes account data from memcached
         */
        public function invalidateCache() {
-               if ( wfReadOnly() ) {
-                       return;
-               }
+               $this->touch();
+               $this->clearSharedCache();
+       }
+
+       /**
+        * Update the "touched" timestamp for the user
+        *
+        * This is useful on various login/logout events when making sure that
+        * a browser or proxy that has multiple tenants does not suffer cache
+        * pollution where the new user sees the old users content. The value
+        * of getTouched() is checked when determining 304 vs 200 responses.
+        * Unlike invalidateCache(), this preserves the User object cache and
+        * avoids database writes.
+        *
+        * @since 1.25
+        */
+       public function touch() {
+               global $wgMemc;
+
                $this->load();
-               if ( $this->mId ) {
-                       $this->mTouched = self::newTouchedTimestamp();
 
-                       $dbw = wfGetDB( DB_MASTER );
-                       $userid = $this->mId;
-                       $touched = $this->mTouched;
-                       $method = __METHOD__;
-                       $dbw->onTransactionIdle( function () use ( $dbw, $userid, $touched, $method ) {
-                               // Prevent contention slams by checking user_touched first
-                               $encTouched = $dbw->addQuotes( $dbw->timestamp( $touched ) );
-                               $needsPurge = $dbw->selectField( 'user', '1',
-                                       array( 'user_id' => $userid, 'user_touched < ' . $encTouched ) );
-                               if ( $needsPurge ) {
-                                       $dbw->update( 'user',
-                                               array( 'user_touched' => $dbw->timestamp( $touched ) ),
-                                               array( 'user_id' => $userid, 'user_touched < ' . $encTouched ),
-                                               $method
-                                       );
-                               }
-                       } );
-                       $this->clearSharedCache();
+               if ( $this->mId ) {
+                       $key = wfMemcKey( 'user-quicktouched', 'id', $this->mId );
+                       $timestamp = $this->newTouchedTimestamp();
+                       $wgMemc->set( $key, $timestamp );
+                       $this->mQuickTouched = $timestamp;
                }
        }
 
@@ -2252,16 +2309,33 @@ class User implements IDBAccessObject {
         * @return bool
         */
        public function validateCache( $timestamp ) {
-               $this->load();
-               return ( $timestamp >= $this->mTouched );
+               return ( $timestamp >= $this->getTouched() );
        }
 
        /**
         * Get the user touched timestamp
-        * @return string Timestamp
+        * @return string TS_MW Timestamp
         */
        public function getTouched() {
+               global $wgMemc;
+
                $this->load();
+
+               if ( $this->mId ) {
+                       if ( $this->mQuickTouched === null ) {
+                               $key = wfMemcKey( 'user-quicktouched', 'id', $this->mId );
+                               $timestamp = $wgMemc->get( $key );
+                               if ( $timestamp ) {
+                                       $this->mQuickTouched = $timestamp;
+                               } else {
+                                       # Set the timestamp to get HTTP 304 cache hits
+                                       $this->touch();
+                               }
+                       }
+
+                       return max( $this->mTouched, $this->mQuickTouched );
+               }
+
                return $this->mTouched;
        }
 
@@ -2311,17 +2385,9 @@ class User implements IDBAccessObject {
                                throw new PasswordError( wfMessage( 'password-change-forbidden' )->text() );
                        }
 
-                       if ( !$this->isValidPassword( $str ) ) {
-                               global $wgMinimalPasswordLength;
-                               $valid = $this->getPasswordValidity( $str );
-                               if ( is_array( $valid ) ) {
-                                       $message = array_shift( $valid );
-                                       $params = $valid;
-                               } else {
-                                       $message = $valid;
-                                       $params = array( $wgMinimalPasswordLength );
-                               }
-                               throw new PasswordError( wfMessage( $message, $params )->text() );
+                       $status = $this->checkPasswordValidity( $str );
+                       if ( !$status->isGood() ) {
+                               throw new PasswordError( $status->getMessage()->text() );
                        }
                }
 
@@ -2630,7 +2696,9 @@ class User implements IDBAccessObject {
                $token = $this->getOption( $oname );
                if ( !$token ) {
                        $token = $this->resetTokenFromOption( $oname );
-                       $this->saveSettings();
+                       if ( !wfReadOnly() ) {
+                               $this->saveSettings();
+                       }
                }
                return $token;
        }
@@ -2963,9 +3031,13 @@ class User implements IDBAccessObject {
         * @return array Names of the groups the user has belonged to.
         */
        public function getFormerGroups() {
+               $this->load();
+
                if ( is_null( $this->mFormerGroups ) ) {
-                       $dbr = wfGetDB( DB_MASTER );
-                       $res = $dbr->select( 'user_former_groups',
+                       $db = ( $this->queryFlagsUsed & self::READ_LATEST )
+                               ? wfGetDB( DB_MASTER )
+                               : wfGetDB( DB_SLAVE );
+                       $res = $db->select( 'user_former_groups',
                                array( 'ufg_group' ),
                                array( 'ufg_user' => $this->mId ),
                                __METHOD__ );
@@ -2974,6 +3046,7 @@ class User implements IDBAccessObject {
                                $this->mFormerGroups[] = $row->ufg_group;
                        }
                }
+
                return $this->mFormerGroups;
        }
 
@@ -3012,6 +3085,8 @@ class User implements IDBAccessObject {
         * @return bool
         */
        public function addGroup( $group ) {
+               $this->load();
+
                if ( !Hooks::run( 'UserAddGroup', array( $this, &$group ) ) ) {
                        return false;
                }
@@ -3368,10 +3443,17 @@ class User implements IDBAccessObject {
         *  false: Force NOT setting the secure attribute when setting the cookie
         *  null (default): Use the default ($wgCookieSecure) to set the secure attribute
         * @param array $params Array of options sent passed to WebResponse::setcookie()
+        * @param WebRequest|null $request WebRequest object to use; $wgRequest will be used if null
+        *        is passed.
         */
-       protected function setCookie( $name, $value, $exp = 0, $secure = null, $params = array() ) {
+       protected function setCookie(
+               $name, $value, $exp = 0, $secure = null, $params = array(), $request = null
+       ) {
+               if ( $request === null ) {
+                       $request = $this->getRequest();
+               }
                $params['secure'] = $secure;
-               $this->getRequest()->response()->setcookie( $name, $value, $exp, $params );
+               $request->response()->setcookie( $name, $value, $exp, $params );
        }
 
        /**
@@ -3410,7 +3492,9 @@ class User implements IDBAccessObject {
                        // Simply by setting every cell in the user_token column to NULL and letting them be
                        // regenerated as users log back into the wiki.
                        $this->setToken();
-                       $this->saveSettings();
+                       if ( !wfReadOnly() ) {
+                               $this->saveSettings();
+                       }
                }
                $session = array(
                        'wsUserID' => $this->mId,
@@ -3436,7 +3520,7 @@ class User implements IDBAccessObject {
                        if ( $value === false ) {
                                $this->clearCookie( $name );
                        } else {
-                               $this->setCookie( $name, $value, 0, $secure );
+                               $this->setCookie( $name, $value, 0, $secure, array(), $request );
                        }
                }
 
@@ -3491,16 +3575,34 @@ class User implements IDBAccessObject {
        public function saveSettings() {
                global $wgAuth;
 
-               $this->load();
-               $this->loadPasswords();
                if ( wfReadOnly() ) {
+                       // @TODO: caller should deal with this instead!
+                       // This should really just be an exception.
+                       MWExceptionHandler::logException( new DBExpectedError(
+                               null,
+                               "Could not update user with ID '{$this->mId}'; DB is read-only."
+                       ) );
                        return;
                }
+
+               $this->load();
+               $this->loadPasswords();
                if ( 0 == $this->mId ) {
-                       return;
+                       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}'." );
                }
 
-               $this->mTouched = self::newTouchedTimestamp();
+               // 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.
+               $oldTouched = $this->mTouched;
+               $this->mTouched = $this->newTouchedTimestamp();
+
                if ( !$wgAuth->allowSetLocalPassword() ) {
                        $this->mPassword = self::getPasswordFactory()->newFromCiphertext( null );
                }
@@ -3521,10 +3623,22 @@ class User implements IDBAccessObject {
                                'user_email_token_expires' => $dbw->timestampOrNull( $this->mEmailTokenExpires ),
                                'user_password_expires' => $dbw->timestampOrNull( $this->mPasswordExpires ),
                        ), array( /* WHERE */
-                               'user_id' => $this->mId
+                               'user_id' => $this->mId,
+                               'user_touched' => $dbw->timestamp( $oldTouched ) // CAS check
                        ), __METHOD__
                );
 
+               if ( !$dbw->affectedRows() ) {
+                       // User was changed in the meantime or loaded with stale data
+                       MWExceptionHandler::logException( new MWException(
+                               "CAS update failed on user_touched for user ID '{$this->mId}'."
+                       ) );
+                       // Maybe the problem was a missed cache update; clear it to be safe
+                       $this->clearSharedCache();
+
+                       return;
+               }
+
                $this->saveOptions();
 
                Hooks::run( 'UserSaveSettings', array( $this ) );
@@ -3593,7 +3707,7 @@ class User implements IDBAccessObject {
                        'user_token' => strval( $user->mToken ),
                        'user_registration' => $dbw->timestamp( $user->mRegistration ),
                        'user_editcount' => 0,
-                       'user_touched' => $dbw->timestamp( self::newTouchedTimestamp() ),
+                       'user_touched' => $dbw->timestamp( $user->newTouchedTimestamp() ),
                );
                foreach ( $params as $name => $value ) {
                        $fields["user_$name"] = $value;
@@ -3640,7 +3754,7 @@ class User implements IDBAccessObject {
                        $this->setToken(); // init token
                }
 
-               $this->mTouched = self::newTouchedTimestamp();
+               $this->mTouched = $this->newTouchedTimestamp();
 
                $dbw = wfGetDB( DB_MASTER );
                $inWrite = $dbw->writesOrCallbacksPending();
@@ -3675,7 +3789,7 @@ class User implements IDBAccessObject {
                                // using CentralAuth. It's should be OK to commit and break the snapshot.
                                $dbw->commit( __METHOD__, 'flush' );
                                $options = array();
-                               $flags = 0;
+                               $flags = self::READ_LATEST;
                        }
                        $this->mId = $dbw->selectField( 'user', 'user_id',
                                array( 'user_name' => $this->mName ), __METHOD__, $options );
@@ -3809,6 +3923,13 @@ class User implements IDBAccessObject {
 
                $this->loadPasswords();
 
+               // Some passwords will give a fatal Status, which means there is
+               // some sort of technical or security reason for this password to
+               // be completely invalid and should never be checked (e.g., T64685)
+               if ( !$this->checkPasswordValidity( $password )->isOK() ) {
+                       return false;
+               }
+
                // Certain authentication plugins do NOT want to save
                // domain passwords in a mysql database, so we should
                // check this (in case $wgAuth->strict() is false).
@@ -3836,7 +3957,7 @@ class User implements IDBAccessObject {
                }
 
                $passwordFactory = self::getPasswordFactory();
-               if ( $passwordFactory->needsUpdate( $this->mPassword ) ) {
+               if ( $passwordFactory->needsUpdate( $this->mPassword ) && !wfReadOnly() ) {
                        $this->mPassword = $passwordFactory->newFromPlaintext( $password );
                        $this->saveSettings();
                }
@@ -3937,6 +4058,20 @@ class User implements IDBAccessObject {
                return MWCryptRand::generateHex( 32 );
        }
 
+       /**
+        * Get the embedded timestamp from a token.
+        * @param string $val Input token
+        * @return int|null
+        */
+       public static function getEditTokenTimestamp( $val ) {
+               $suffixLen = strlen( self::EDIT_TOKEN_SUFFIX );
+               if ( strlen( $val ) <= 32 + $suffixLen ) {
+                       return null;
+               }
+
+               return hexdec( substr( $val, 32, -$suffixLen ) );
+       }
+
        /**
         * Check given value against the token value stored in the session.
         * A match should confirm that the form was submitted from the
@@ -3954,12 +4089,10 @@ class User implements IDBAccessObject {
                        return $val === self::EDIT_TOKEN_SUFFIX;
                }
 
-               $suffixLen = strlen( self::EDIT_TOKEN_SUFFIX );
-               if ( strlen( $val ) <= 32 + $suffixLen ) {
+               $timestamp = self::getEditTokenTimestamp( $val );
+               if ( $timestamp === null ) {
                        return false;
                }
-
-               $timestamp = hexdec( substr( $val, 32, -$suffixLen ) );
                if ( $maxage !== null && $timestamp < wfTimestamp() - $maxage ) {
                        // Expired token
                        return false;
@@ -4399,7 +4532,7 @@ class User implements IDBAccessObject {
 
        /**
         * Get a list of all available permissions.
-        * @return array Array of permission names
+        * @return string[] Array of permission names
         */
        public static function getAllRights() {
                if ( self::$mAllRights === false ) {
@@ -4834,7 +4967,9 @@ class User implements IDBAccessObject {
                        if ( !is_array( $data ) ) {
                                wfDebug( "User: loading options for user " . $this->getId() . " from database.\n" );
                                // Load from database
-                               $dbr = wfGetDB( DB_SLAVE );
+                               $dbr = ( $this->queryFlagsUsed & self::READ_LATEST )
+                                       ? wfGetDB( DB_MASTER )
+                                       : wfGetDB( DB_SLAVE );
 
                                $res = $dbr->select(
                                        'user_properties',
index e5621da..31bd601 100644 (file)
@@ -56,6 +56,27 @@ abstract class UserArray implements Iterator {
                return self::newFromResult( $res );
        }
 
+       /**
+        * @since 1.25
+        * @param array $names
+        * @return UserArrayFromResult
+        */
+       static function newFromNames( $names ) {
+               $names = array_map( 'strval', (array)$names ); // paranoia
+               if ( !$names ) {
+                       // Database::select() doesn't like empty arrays
+                       return new ArrayIterator( array() );
+               }
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select(
+                       'user',
+                       User::selectFields(),
+                       array( 'user_name' => array_unique( $names ) ),
+                       __METHOD__
+               );
+               return self::newFromResult( $res );
+       }
+
        /**
         * @param ResultWrapper $res
         * @return UserArrayFromResult
index 3be5847..1b9e4b6 100644 (file)
@@ -114,7 +114,8 @@ class UserRightsProxy {
         */
        private static function newFromLookup( $database, $field, $value, $ignoreInvalidDB = false ) {
                global $wgSharedDB, $wgSharedTables;
-               // If the user table is shared, perform the user query on it, but don't pass it to the UserRightsProxy,
+               // If the user table is shared, perform the user query on it,
+               // but don't pass it to the UserRightsProxy,
                // as user rights are normally not shared.
                if ( $wgSharedDB && in_array( 'user', $wgSharedTables ) ) {
                        $userdb = self::getDB( $wgSharedDB, $ignoreInvalidDB );
index f86a454..054eceb 100644 (file)
@@ -50,6 +50,12 @@ class WebRequest {
         */
        private $ip;
 
+       /**
+        * The timestamp of the start of the request, with microsecond precision.
+        * @var float
+        */
+       protected $requestTime;
+
        /**
         * Cached URL protocol
         * @var string
@@ -57,9 +63,8 @@ class WebRequest {
        protected $protocol;
 
        public function __construct() {
-               if ( function_exists( 'get_magic_quotes_gpc' ) && get_magic_quotes_gpc() ) {
-                       throw new MWException( "MediaWiki does not function when magic quotes are enabled." );
-               }
+               $this->requestTime = isset( $_SERVER['REQUEST_TIME_FLOAT'] )
+                       ? $_SERVER['REQUEST_TIME_FLOAT'] : microtime( true );
 
                // POST overrides GET data
                // We don't use $_REQUEST here to avoid interference from cookies...
@@ -216,6 +221,17 @@ class WebRequest {
                }
        }
 
+       /**
+        * Get the number of seconds to have elapsed since request start,
+        * in fractional seconds, with microsecond resolution.
+        *
+        * @return float
+        * @since 1.25
+        */
+       public function getElapsedTime() {
+               return microtime( true ) - $this->requestTime;
+       }
+
        /**
         * Get the current URL protocol (http or https)
         * @return string
@@ -289,7 +305,7 @@ class WebRequest {
                        }
                } else {
                        global $wgContLang;
-                       $data = isset( $wgContLang ) ? $wgContLang->normalize( $data ) : UtfNormal::cleanUp( $data );
+                       $data = isset( $wgContLang ) ? $wgContLang->normalize( $data ) : UtfNormal\Validator::cleanUp( $data );
                }
                return $data;
        }
@@ -1274,6 +1290,8 @@ class FauxRequest extends WebRequest {
        public function __construct( $data = array(), $wasPosted = false,
                $session = null, $protocol = 'http'
        ) {
+               $this->requestTime = microtime( true );
+
                if ( is_array( $data ) ) {
                        $this->data = $data;
                } else {
@@ -1497,4 +1515,8 @@ class DerivativeRequest extends FauxRequest {
        public function getProtocol() {
                return $this->base->getProtocol();
        }
+
+       public function getElapsedTime() {
+               return $this->base->getElapsedTime();
+       }
 }
index f977c20..ab34931 100644 (file)
@@ -55,8 +55,8 @@ class WebResponse {
 
        /**
         * Set the browser cookie
-        * @param string $name Name of cookie
-        * @param string $value Value to give cookie
+        * @param string $name The name of the cookie.
+        * @param string $value The value to be stored in the cookie.
         * @param int|null $expire Unix timestamp (in seconds) when the cookie should expire.
         *        0 (the default) causes it to expire $wgCookieExpiration seconds from now.
         *        null causes it to be a session cookie.
@@ -72,7 +72,7 @@ class WebResponse {
         *   'prefix', 'domain', and 'secure'
         * @since 1.22 Replaced $prefix, $domain, and $forceSecure with $options
         */
-       public function setcookie( $name, $value, $expire = 0, $options = null ) {
+       public function setcookie( $name, $value, $expire = 0, $options = array() ) {
                global $wgCookiePath, $wgCookiePrefix, $wgCookieDomain;
                global $wgCookieSecure, $wgCookieExpiration, $wgCookieHttpOnly;
 
@@ -164,7 +164,7 @@ class FauxResponse extends WebResponse {
 
        /**
         * @param string $key The name of the header to get (case insensitive).
-        * @return string
+        * @return string|null The header value (if set); null otherwise.
         */
        public function getHeader( $key ) {
                $key = strtoupper( $key );
@@ -185,20 +185,18 @@ class FauxResponse extends WebResponse {
        }
 
        /**
-        * @todo document. It just ignore optional parameters.
-        *
-        * @param string $name Name of cookie
-        * @param string $value Value to give cookie
-        * @param int $expire Number of seconds til cookie expires (Default: 0)
-        * @param array $options Ignored
+        * @param string $name The name of the cookie.
+        * @param string $value The value to be stored in the cookie.
+        * @param int|null $expire Ignored in this faux subclass.
+        * @param array $options Ignored in this faux subclass.
         */
-       public function setcookie( $name, $value, $expire = 0, $options = null ) {
+       public function setcookie( $name, $value, $expire = 0, $options = array() ) {
                $this->cookies[$name] = $value;
        }
 
        /**
         * @param string $name
-        * @return string
+        * @return string|null
         */
        public function getcookie( $name ) {
                if ( isset( $this->cookies[$name] ) ) {
index 125e544..9c71f3e 100644 (file)
@@ -34,12 +34,30 @@ if ( ini_get( 'register_globals' ) ) {
                . 'for help on how to disable it.' );
 }
 
+if ( function_exists( 'get_magic_quotes_gpc' ) && get_magic_quotes_gpc() ) {
+       die( 'MediaWiki does not function when magic quotes are enabled. '
+               . 'Please see the <a href="https://php.net/manual/security.magicquotes.disabling.php">PHP Manual</a> '
+               . 'for help on how to disable magic quotes.' );
+}
+
+
 # bug 15461: Make IE8 turn off content sniffing. Everybody else should ignore this
 # We're adding it here so that it's *always* set, even for alternate entry
 # points and when $wgOut gets disabled or overridden.
 header( 'X-Content-Type-Options: nosniff' );
 
-$wgRequestTime = microtime( true );
+# Approximate $_SERVER['REQUEST_TIME_FLOAT'] for PHP<5.4
+if ( !isset( $_SERVER['REQUEST_TIME_FLOAT'] ) ) {
+       $_SERVER['REQUEST_TIME_FLOAT'] = microtime( true );
+}
+
+/**
+ * @var float Request start time as fractional seconds since epoch
+ * @deprecated since 1.25; use $_SERVER['REQUEST_TIME_FLOAT'] or
+ *   WebRequest::getElapsedTime() instead.
+ */
+$wgRequestTime = $_SERVER['REQUEST_TIME_FLOAT'];
+
 unset( $IP );
 
 # Valid web server entry point, enable includes.
@@ -98,7 +116,7 @@ if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
        # the wiki installer needs to be launched or the generated file uploaded to
        # the root wiki directory. Give a hint, if it is not readable by the server.
        if ( !is_readable( MW_CONFIG_FILE ) ) {
-               require_once "$IP/includes/templates/NoLocalSettings.php";
+               require_once "$IP/includes/NoLocalSettings.php";
                die();
        }
 
index 78b8715..f0bd70b 100644 (file)
@@ -703,13 +703,15 @@ class Xml {
        /**
         * Check if a string is well-formed XML.
         * Must include the surrounding tag.
+        * This function is a DoS vector if an attacker can define
+        * entities in $text.
         *
         * @param string $text String to test.
         * @return bool
         *
         * @todo Error position reporting return
         */
-       public static function isWellFormed( $text ) {
+       private static function isWellFormed( $text ) {
                $parser = xml_parser_create( "UTF-8" );
 
                # case folding violates XML standard, turn it off
index 651b114..4be2751 100644 (file)
@@ -9,6 +9,8 @@
  */
 
 $zh2Hant = array(
+'㐷' => '傌',
+'㐹' => '㑶',
 '㐽' => '偑',
 '㑇' => '㑳',
 '㑈' => '倲',
@@ -72,10 +74,13 @@ $zh2Hant = array(
 '䌼' => '綐',
 '䌽' => '綵',
 '䌾' => '䋻',
+'䌿' => '䋹',
 '䍀' => '繿',
 '䍁' => '繸',
-'䑽' => '𦪙',
+'䎬' => '䎱',
+'䏝' => '膞',
 '䓕' => '薳',
+'䓖' => '藭',
 '䗖' => '螮',
 '䘛' => '𧝞',
 '䘞' => '𧜗',
@@ -142,6 +147,7 @@ $zh2Hant = array(
 '为' => '為',
 '丽' => '麗',
 '举' => '舉',
+'么' => '麼',
 '义' => '義',
 '乌' => '烏',
 '乐' => '樂',
@@ -185,6 +191,7 @@ $zh2Hant = array(
 '伪' => '偽',
 '伫' => '佇',
 '体' => '體',
+'佣' => '傭',
 '佥' => '僉',
 '侠' => '俠',
 '侣' => '侶',
@@ -235,6 +242,7 @@ $zh2Hant = array(
 '况' => '況',
 '冻' => '凍',
 '净' => '凈',
+'凄' => '淒',
 '凉' => '涼',
 '减' => '減',
 '凑' => '湊',
@@ -290,7 +298,6 @@ $zh2Hant = array(
 '卤' => '鹵',
 '卫' => '衛',
 '却' => '卻',
-'卺' => '巹',
 '厂' => '廠',
 '厅' => '廳',
 '历' => '歷',
@@ -309,6 +316,8 @@ $zh2Hant = array(
 '县' => '縣',
 '叁' => '叄',
 '参' => '參',
+'叆' => '靉',
+'叇' => '靆',
 '双' => '雙',
 '发' => '發',
 '变' => '變',
@@ -341,7 +350,6 @@ $zh2Hant = array(
 '咙' => '嚨',
 '咛' => '嚀',
 '咝' => '噝',
-'咤' => '吒',
 '响' => '響',
 '哑' => '啞',
 '哒' => '噠',
@@ -362,7 +370,7 @@ $zh2Hant = array(
 '啧' => '嘖',
 '啬' => '嗇',
 '啭' => '囀',
-'啮' => '',
+'啮' => '',
 '啯' => '嘓',
 '啰' => '囉',
 '啴' => '嘽',
@@ -425,7 +433,6 @@ $zh2Hant = array(
 '复' => '復',
 '够' => '夠',
 '头' => '頭',
-'夸' => '誇',
 '夹' => '夾',
 '夺' => '奪',
 '奁' => '奩',
@@ -503,6 +510,7 @@ $zh2Hant = array(
 '岭' => '嶺',
 '岽' => '崬',
 '岿' => '巋',
+'峃' => '嶨',
 '峄' => '嶧',
 '峡' => '峽',
 '峣' => '嶢',
@@ -533,9 +541,10 @@ $zh2Hant = array(
 '帻' => '幘',
 '帼' => '幗',
 '幂' => '冪',
-'幞' => '襆',
 '并' => '並',
+'幺' => '么',
 '广' => '廣',
+'庄' => '莊',
 '庆' => '慶',
 '庐' => '廬',
 '庑' => '廡',
@@ -544,6 +553,7 @@ $zh2Hant = array(
 '庙' => '廟',
 '庞' => '龐',
 '废' => '廢',
+'庼' => '廎',
 '廪' => '廩',
 '开' => '開',
 '异' => '異',
@@ -723,7 +733,7 @@ $zh2Hant = array(
 '杀' => '殺',
 '杂' => '雜',
 '权' => '權',
-'æ\9d\86' => 'æ¡¿',
+'æ\9d ' => 'æ§\93',
 '条' => '條',
 '来' => '來',
 '杨' => '楊',
@@ -783,6 +793,7 @@ $zh2Hant = array(
 '椤' => '欏',
 '椫' => '樿',
 '椭' => '橢',
+'椮' => '槮',
 '楼' => '樓',
 '榄' => '欖',
 '榅' => '榲',
@@ -856,6 +867,7 @@ $zh2Hant = array(
 '浆' => '漿',
 '浇' => '澆',
 '浈' => '湞',
+'浉' => '溮',
 '浊' => '濁',
 '测' => '測',
 '浍' => '澮',
@@ -888,6 +900,7 @@ $zh2Hant = array(
 '渐' => '漸',
 '渑' => '澠',
 '渔' => '漁',
+'渖' => '瀋',
 '渗' => '滲',
 '温' => '溫',
 '湾' => '灣',
@@ -899,7 +912,7 @@ $zh2Hant = array(
 '滗' => '潷',
 '滚' => '滾',
 '滞' => '滯',
-'æ»\9f' => 'ç\81§',
+'æ»\9f' => 'ç\81©',
 '滠' => '灄',
 '满' => '滿',
 '滢' => '瀅',
@@ -928,6 +941,7 @@ $zh2Hant = array(
 '灿' => '燦',
 '炀' => '煬',
 '炉' => '爐',
+'炖' => '燉',
 '炜' => '煒',
 '炝' => '熗',
 '点' => '點',
@@ -980,6 +994,7 @@ $zh2Hant = array(
 '献' => '獻',
 '獭' => '獺',
 '玑' => '璣',
+'玙' => '璵',
 '玚' => '瑒',
 '玛' => '瑪',
 '玮' => '瑋',
@@ -991,11 +1006,13 @@ $zh2Hant = array(
 '珑' => '瓏',
 '珰' => '璫',
 '珲' => '琿',
+'琎' => '璡',
 '琏' => '璉',
 '琐' => '瑣',
 '琼' => '瓊',
 '瑶' => '瑤',
 '瑷' => '璦',
+'瑸' => '璸',
 '璎' => '瓔',
 '瓒' => '瓚',
 '瓯' => '甌',
@@ -1013,7 +1030,6 @@ $zh2Hant = array(
 '疮' => '瘡',
 '疯' => '瘋',
 '疱' => '皰',
-'疴' => '痾',
 '痈' => '癰',
 '痉' => '痙',
 '痒' => '癢',
@@ -1021,6 +1037,7 @@ $zh2Hant = array(
 '痨' => '癆',
 '痪' => '瘓',
 '痫' => '癇',
+'痳' => '痲',
 '瘅' => '癉',
 '瘆' => '瘮',
 '瘗' => '瘞',
@@ -1072,10 +1089,11 @@ $zh2Hant = array(
 '硚' => '礄',
 '确' => '確',
 '硵' => '磠',
-'硷' => '',
+'硷' => '',
 '碍' => '礙',
 '碛' => '磧',
 '碜' => '磣',
+'碱' => '鹼',
 '礼' => '禮',
 '祃' => '禡',
 '祎' => '禕',
@@ -1221,7 +1239,7 @@ $zh2Hant = array(
 '绠' => '綆',
 '绡' => '綃',
 '绢' => '絹',
-'绣' => 'ç\89',
+'绣' => '繡',
 '绤' => '綌',
 '绥' => '綏',
 '绦' => '絛',
@@ -1235,13 +1253,13 @@ $zh2Hant = array(
 '绮' => '綺',
 '绯' => '緋',
 '绰' => '綽',
-'绱' => '',
+'绱' => '',
 '绲' => '緄',
 '绳' => '繩',
 '维' => '維',
 '绵' => '綿',
 '绶' => '綬',
-'ç»·' => '綳',
+'ç»·' => 'ç¹\83',
 '绸' => '綢',
 '绹' => '綯',
 '绺' => '綹',
@@ -1266,6 +1284,7 @@ $zh2Hant = array(
 '缍' => '綞',
 '缎' => '緞',
 '缏' => '緶',
+'缐' => '線',
 '缑' => '緱',
 '缒' => '縋',
 '缓' => '緩',
@@ -1344,7 +1363,7 @@ $zh2Hant = array(
 '胶' => '膠',
 '脉' => '脈',
 '脍' => '膾',
-'脏' => '',
+'脏' => '',
 '脐' => '臍',
 '脑' => '腦',
 '脓' => '膿',
@@ -1384,7 +1403,6 @@ $zh2Hant = array(
 '苎' => '苧',
 '苏' => '蘇',
 '苧' => '薴',
-'苹' => '蘋',
 '茎' => '莖',
 '茏' => '蘢',
 '茑' => '蔦',
@@ -1414,7 +1432,7 @@ $zh2Hant = array(
 '荬' => '蕒',
 '荭' => '葒',
 '荮' => '葤',
-'è\8d¯' => 'è\91¯',
+'è\8d¯' => 'è\97¥',
 '莅' => '蒞',
 '莱' => '萊',
 '莲' => '蓮',
@@ -1425,7 +1443,8 @@ $zh2Hant = array(
 '莸' => '蕕',
 '莹' => '瑩',
 '莺' => '鶯',
-'莼' => '蒓',
+'莼' => '蓴',
+'萚' => '蘀',
 '萝' => '蘿',
 '萤' => '螢',
 '营' => '營',
@@ -1667,7 +1686,7 @@ $zh2Hant = array(
 '谢' => '謝',
 '谣' => '謠',
 '谤' => '謗',
-'è°¥' => 'è¬\9a',
+'è°¥' => 'è«¡',
 '谦' => '謙',
 '谧' => '謐',
 '谨' => '謹',
@@ -1890,7 +1909,6 @@ $zh2Hant = array(
 '鉴' => '鑒',
 '銮' => '鑾',
 '錾' => '鏨',
-'鎭' => '鎮',
 '钅' => '釒',
 '钆' => '釓',
 '钇' => '釔',
@@ -1927,7 +1945,7 @@ $zh2Hant = array(
 '钦' => '欽',
 '钧' => '鈞',
 '钨' => '鎢',
-'é\92©' => 'é\89¤',
+'é\92©' => 'é\88\8e',
 '钪' => '鈧',
 '钫' => '鈁',
 '钬' => '鈥',
@@ -2089,7 +2107,7 @@ $zh2Hant = array(
 '镈' => '鎛',
 '镉' => '鎘',
 '镊' => '鑷',
-'é\95\8b' => 'é\8e²',
+'é\95\8b' => 'é\92\82',
 '镌' => '鐫',
 '镍' => '鎳',
 '镎' => '鎿',
@@ -2144,7 +2162,7 @@ $zh2Hant = array(
 '闯' => '闖',
 '闰' => '閏',
 '闱' => '闈',
-'é\97²' => 'é\96\91',
+'é\97²' => 'é\96\92',
 '闳' => '閎',
 '间' => '間',
 '闵' => '閔',
@@ -2218,7 +2236,6 @@ $zh2Hant = array(
 '鞑' => '韃',
 '鞒' => '鞽',
 '鞯' => '韉',
-'鞲' => '韝',
 '韦' => '韋',
 '韧' => '韌',
 '韨' => '韍',
@@ -2515,6 +2532,7 @@ $zh2Hant = array(
 '鳡' => '鱤',
 '鳢' => '鱧',
 '鳣' => '鱣',
+'鳤' => '䲘',
 '鸟' => '鳥',
 '鸠' => '鳩',
 '鸡' => '雞',
@@ -2604,6 +2622,7 @@ $zh2Hant = array(
 '鹾' => '鹺',
 '麦' => '麥',
 '麸' => '麩',
+'麹' => '麴',
 '黄' => '黃',
 '黉' => '黌',
 '黡' => '黶',
@@ -2614,7 +2633,6 @@ $zh2Hant = array(
 '鼍' => '鼉',
 '鼗' => '鞀',
 '鼹' => '鼴',
-'齄' => '齇',
 '齐' => '齊',
 '齑' => '齏',
 '齿' => '齒',
@@ -2642,7 +2660,6 @@ $zh2Hant = array(
 '𠚳' => '𠠎',
 '𠛅' => '剾',
 '𠛆' => '𠞆',
-'𠮶' => '嗰',
 '𠯟' => '哯',
 '𠯠' => '噅',
 '𠲥' => '𡅏',
@@ -2872,6 +2889,7 @@ $zh2Hant = array(
 '𩧿' => '䮠',
 '𩨀' => '騔',
 '𩨁' => '䮞',
+'𩨂' => '驄',
 '𩨃' => '騝',
 '𩨄' => '騪',
 '𩨅' => '𩤸',
@@ -2897,7 +2915,6 @@ $zh2Hant = array(
 '𩽽' => '𩶱',
 '𩽾' => '鮟',
 '𩽿' => '𩶰',
-'𩾀' => '鮕',
 '𩾁' => '鯄',
 '𩾂' => '䲖',
 '𩾃' => '鮸',
@@ -2926,6 +2943,7 @@ $zh2Hant = array(
 '𪉐' => '𪃍',
 '𪉑' => '鷔',
 '𪉒' => '𪄕',
+'𪉓' => '𪈼',
 '𪉔' => '𪄆',
 '𪉕' => '𪇳',
 '𪎈' => '䴬',
@@ -2951,7 +2969,6 @@ $zh2Hant = array(
 '𫌀' => '襀',
 '𫌨' => '覼',
 '𫍙' => '訑',
-'𫍟' => '詑',
 '𫍢' => '譊',
 '𫍰' => '諰',
 '𫍲' => '謏',
@@ -2985,14 +3002,18 @@ $zh2Hant = array(
 '𫛢' => '鸋',
 '𫛶' => '鶒',
 '𫛸' => '鶗',
+'0出現' => '0出現',
+'0出现' => '0出現',
+'0出線' => '0出線',
+'0出线' => '0出線',
 '0只支持' => '0只支持',
 '0只支援' => '0只支援',
 '0周后' => '0周後',
-'0多只' => '0多隻',
 '0天后' => '0天後',
 '0年' => '0年',
 '0只' => '0隻',
 '0余' => '0餘',
+'0出' => '0齣',
 '1只支持' => '1只支持',
 '1只支援' => '1只支援',
 '1周后' => '1周後',
@@ -3057,12 +3078,15 @@ $zh2Hant = array(
 '9只' => '9隻',
 '9余' => '9餘',
 '·范' => '·范',
-'、克制' => '、剋制',
-'。克制' => '。剋制',
+'’s' => '’s',
 '〇周后' => '〇周後',
 '〇年' => '〇年',
 '〇只' => '〇隻',
 '〇余' => '〇餘',
+'“' => '「',
+'”' => '」',
+'‘' => '『',
+'’' => '』',
 '一干二净' => '一乾二淨',
 '一伙人' => '一伙人',
 '一伙头' => '一伙頭',
@@ -3070,15 +3094,8 @@ $zh2Hant = array(
 '一并' => '一併',
 '一个' => '一個',
 '一个准' => '一個準',
-'一出刊' => '一出刊',
-'一出口' => '一出口',
-'一出版' => '一出版',
-'一出生' => '一出生',
-'一出祁山' => '一出祁山',
-'一出逃' => '一出逃',
 '一划' => '一划',
 '一半只' => '一半只',
-'一吊錢' => '一吊錢',
 '一吊钱' => '一吊錢',
 '一周后' => '一周後',
 '一地里' => '一地裡',
@@ -3092,7 +3109,6 @@ $zh2Hant = array(
 '一干部下' => '一干部下',
 '一年' => '一年',
 '一年里' => '一年裡',
-'一吊' => '一弔',
 '一别头' => '一彆頭',
 '一斗斗' => '一斗斗',
 '一树百获' => '一樹百穫',
@@ -3102,23 +3118,23 @@ $zh2Hant = array(
 '一目了然' => '一目了然',
 '一扎' => '一紮',
 '一冲' => '一衝',
+'一厘一毫' => '一釐一毫',
 '一锅面' => '一鍋麵',
 '一只' => '一隻',
 '一面食' => '一面食',
-'一头长发' => '一頭長髮',
 '一余' => '一餘',
 '一发千钧' => '一髮千鈞',
 '一哄而散' => '一鬨而散',
+'一出剧' => '一齣劇',
+'一出喜剧' => '一齣喜劇',
+'一出好戏' => '一齣好戲',
 '一出子' => '一齣子',
+'一出悲剧' => '一齣悲劇',
+'一出戏' => '一齣戲',
+'一出电影' => '一齣電影',
 '丁丁当当' => '丁丁當當',
 '丁丑' => '丁丑',
 '七个' => '七個',
-'七出刊' => '七出刊',
-'七出口' => '七出口',
-'七出版' => '七出版',
-'七出生' => '七出生',
-'七出祁山' => '七出祁山',
-'七出逃' => '七出逃',
 '七周后' => '七周後',
 '七天后' => '七天後',
 '七年' => '七年',
@@ -3129,12 +3145,6 @@ $zh2Hant = array(
 '万俟' => '万俟',
 '万旗' => '万旗',
 '三个' => '三個',
-'三出刊' => '三出刊',
-'三出口' => '三出口',
-'三出版' => '三出版',
-'三出生' => '三出生',
-'三出祁山' => '三出祁山',
-'三出逃' => '三出逃',
 '三周后' => '三周後',
 '三天后' => '三天後',
 '三年' => '三年',
@@ -3143,52 +3153,52 @@ $zh2Hant = array(
 '三扎' => '三紮',
 '三统历' => '三統曆',
 '三统历史' => '三統歷史',
-'三复' => '三複',
 '三只' => '三隻',
 '三余' => '三餘',
+'三出戏' => '三齣戲',
+'上天里' => '上天里',
 '上梁山' => '上梁山',
 '上梁' => '上樑',
+'上台面' => '上檯面',
 '上签名' => '上簽名',
 '上签字' => '上簽字',
+'上签定' => '上簽定',
 '上签写' => '上簽寫',
 '上签收' => '上簽收',
+'上签发' => '上簽發',
+'上签约' => '上簽約',
+'上签署' => '上簽署',
+'上签订' => '上簽訂',
 '上签' => '上籤',
-'上药' => '上藥',
+'上系上' => '上繫上',
 '上课钟' => '上課鐘',
 '上面糊' => '上面糊',
-'下仑路' => '下崙路',
 '下于' => '下於',
 '下梁' => '下樑',
 '下注解' => '下注解',
 '下签名' => '下簽名',
 '下签字' => '下簽字',
+'下签定' => '下簽定',
 '下签写' => '下簽寫',
 '下签收' => '下簽收',
+'下签发' => '下簽發',
+'下签约' => '下簽約',
+'下签署' => '下簽署',
+'下签订' => '下簽訂',
 '下签' => '下籤',
-'下药' => '下藥',
 '下课钟' => '下課鐘',
 '不干不净' => '不乾不淨',
-'不占' => '不佔',
 '不克自制' => '不克自制',
-'不准他' => '不准他',
-'不准你' => '不准你',
-'不准她' => '不准她',
-'不准它' => '不准它',
-'不准我' => '不准我',
-'不准没' => '不准沒',
-'不准翻印' => '不准翻印',
-'不准许' => '不准許',
-'不准谁' => '不准誰',
-'不克制' => '不剋制',
 '不加自制' => '不加自制',
 '不占凶吉' => '不占凶吉',
 '不占卜' => '不占卜',
 '不占吉凶' => '不占吉凶',
 '不占算' => '不占算',
 '不只' => '不只',
+'不太准' => '不太準',
 '不好干涉' => '不好干涉',
-'不好干预' => '不好干預',
 '不好干預' => '不好干預',
+'不好干预' => '不好干預',
 '不嫌母丑' => '不嫌母醜',
 '不寒而栗' => '不寒而慄',
 '不干事' => '不干事',
@@ -3203,30 +3213,27 @@ $zh2Hant = array(
 '不干涉' => '不干涉',
 '不干牠' => '不干牠',
 '不干犯' => '不干犯',
-'不干预' => '不干預',
 '不干預' => '不干預',
+'不干预' => '不干預',
 '不干' => '不幹',
 '不吊' => '不弔',
+'不卷' => '不捲',
 '不采' => '不採',
 '不斗膽' => '不斗膽',
 '不斗胆' => '不斗膽',
 '不断发' => '不斷發',
 '不每只' => '不每只',
-'不准' => '不準',
-'不准确' => '不準確',
 '不谷' => '不穀',
-'不药而愈' => '不藥而癒',
 '不托' => '不託',
 '不负所托' => '不負所托',
 '不通吊庆' => '不通弔慶',
 '不丑' => '不醜',
-'不采声' => '不采聲',
 '不采聲' => '不采聲',
+'不采声' => '不采聲',
 '不锈钢' => '不鏽鋼',
 '不食干腊' => '不食乾腊',
 '不斗' => '不鬥',
 '丑三' => '丑三',
-'丑婆子' => '丑婆子',
 '丑年' => '丑年',
 '丑日' => '丑日',
 '丑旦' => '丑旦',
@@ -3237,13 +3244,10 @@ $zh2Hant = array(
 '且于' => '且於',
 '世田谷' => '世田谷',
 '世界杯' => '世界盃',
-'ä¸\96ç\95\8cé\87\8c' => 'ä¸\96ç\95\8c裡',
+'ä¸\96纪é\87\8c' => 'ä¸\96ç´\80裡',
 '世纪钟' => '世紀鐘',
 '世纪钟表' => '世紀鐘錶',
 '丢丑' => '丟醜',
-'并不准' => '並不准',
-'并不准确' => '並不準確',
-'并存着' => '並存著',
 '并曰入淀' => '並曰入澱',
 '并发动' => '並發動',
 '并发展' => '並發展',
@@ -3256,20 +3260,24 @@ $zh2Hant = array(
 '中型钟表面' => '中型鐘表面',
 '中型钟表' => '中型鐘錶',
 '中型钟面' => '中型鐘面',
-'中仑' => '中崙',
 '中岳' => '中嶽',
 '中庄子' => '中庄子',
 '中文里' => '中文裡',
 '中于' => '中於',
+'中签名' => '中簽名',
+'中签字' => '中簽字',
+'中签定' => '中簽定',
+'中签写' => '中簽寫',
+'中签收' => '中簽收',
+'中签发' => '中簽發',
+'中签约' => '中簽約',
+'中签署' => '中簽署',
+'中签订' => '中簽訂',
 '中签' => '中籤',
-'中美发表' => '中美發表',
-'中药' => '中藥',
-'中西合并' => '中西合併',
 '中风后' => '中風後',
 '丰儀' => '丰儀',
 '丰仪' => '丰儀',
 '丰南' => '丰南',
-'丰台' => '丰台',
 '丰姿' => '丰姿',
 '丰容' => '丰容',
 '丰度' => '丰度',
@@ -3280,14 +3288,20 @@ $zh2Hant = array(
 '丰神' => '丰神',
 '丰茸' => '丰茸',
 '丰采' => '丰采',
-'丰韵' => '丰韻',
 '丰韻' => '丰韻',
-'丸药' => '丸藥',
-'丹药' => '丹藥',
+'丰韵' => '丰韻',
 '主仆' => '主僕',
 '主干' => '主幹',
 '主钟差' => '主鐘差',
 '主钟曲线' => '主鐘曲線',
+'乃系' => '乃係',
+'么么唱唱' => '么么唱唱',
+'么儿' => '么兒',
+'么喝' => '么喝',
+'么妹' => '么妹',
+'么弟' => '么弟',
+'么爷' => '么爺',
+'么雞' => '么雞',
 '么么小丑' => '么麼小丑',
 '之一只' => '之一只',
 '之二只' => '之二只',
@@ -3295,16 +3309,11 @@ $zh2Hant = array(
 '之征' => '之徵',
 '之托' => '之託',
 '之钟' => '之鐘',
+'之鉴' => '之鑑',
 '之余' => '之餘',
 '乙丑' => '乙丑',
 '九世之仇' => '九世之讎',
 '九个' => '九個',
-'九出刊' => '九出刊',
-'九出口' => '九出口',
-'九出版' => '九出版',
-'九出生' => '九出生',
-'九出祁山' => '九出祁山',
-'九出逃' => '九出逃',
 '九周后' => '九周後',
 '九天后' => '九天後',
 '九年' => '九年',
@@ -3312,13 +3321,12 @@ $zh2Hant = array(
 '九扎' => '九紮',
 '九只' => '九隻',
 '九余' => '九餘',
-'九龙表行' => '九龍表行',
-'九龍表行' => '九龍表行',
-'也克制' => '也剋制',
 '也斗了胆' => '也斗了膽',
+'干上' => '乾上',
 '干干' => '乾乾',
 '干干儿的' => '乾乾兒的',
 '干干净净' => '乾乾淨淨',
+'干了' => '乾了',
 '干井' => '乾井',
 '干个够' => '乾個夠',
 '干儿' => '乾兒',
@@ -3327,7 +3335,6 @@ $zh2Hant = array(
 '干刻版' => '乾刻版',
 '干剥剥' => '乾剝剝',
 '干卦' => '乾卦',
-'干吊着下巴' => '乾吊著下巴',
 '干和' => '乾和',
 '干咳' => '乾咳',
 '干咽' => '乾咽',
@@ -3357,6 +3364,7 @@ $zh2Hant = array(
 '干巴' => '乾巴',
 '干式' => '乾式',
 '干弟' => '乾弟',
+'干得' => '乾得',
 '干急' => '乾急',
 '干性' => '乾性',
 '干打雷' => '乾打雷',
@@ -3393,13 +3401,13 @@ $zh2Hant = array(
 '干湿' => '乾濕',
 '干熬' => '乾熬',
 '干热' => '乾熱',
-'干熱' => '乾熱',
 '干灯盏' => '乾燈盞',
 '干燥' => '乾燥',
 '干爸' => '乾爸',
 '干爹' => '乾爹',
 '干爽' => '乾爽',
 '干片' => '乾片',
+'干物' => '乾物',
 '干生受' => '乾生受',
 '干生子' => '乾生子',
 '干产' => '乾產',
@@ -3437,7 +3445,6 @@ $zh2Hant = array(
 '干草' => '乾草',
 '干菜' => '乾菜',
 '干落' => '乾落',
-'干着' => '乾著',
 '干姜' => '乾薑',
 '干薪' => '乾薪',
 '干虔' => '乾虔',
@@ -3471,27 +3478,21 @@ $zh2Hant = array(
 '干鱼' => '乾魚',
 '干鲜' => '乾鮮',
 '干面' => '乾麵',
+'乱发生' => '亂發生',
+'乱发脾气' => '亂發脾氣',
 '乱发' => '亂髮',
 '乱哄' => '亂鬨',
 '乱哄不过来' => '亂鬨不過來',
-'了克制' => '了剋制',
 '了然后' => '了然後',
 '事情干脆' => '事情干脆',
 '事有斗巧' => '事有鬥巧',
-'事迹' => '事迹',
+'事里' => '事裡',
 '事都干脆' => '事都干脆',
 '二不棱登' => '二不稜登',
 '二个' => '二個',
-'二出刊' => '二出刊',
-'二出口' => '二出口',
-'二出版' => '二出版',
-'二出生' => '二出生',
-'二出祁山' => '二出祁山',
-'二出逃' => '二出逃',
 '二只得' => '二只得',
 '二周后' => '二周後',
 '二天后' => '二天後',
-'二仑' => '二崙',
 '二年' => '二年',
 '二缶钟惑' => '二缶鐘惑',
 '二老板' => '二老板',
@@ -3506,13 +3507,13 @@ $zh2Hant = array(
 '于仲文' => '于仲文',
 '于佳卉' => '于佳卉',
 '于来山' => '于來山',
-'于伟国' => '于偉國',
 '于偉國' => '于偉國',
+'于伟国' => '于偉國',
 '于光新' => '于光新',
 '于光遠' => '于光遠',
 '于光远' => '于光遠',
-'于克-蘭多縣' => '于克-蘭多縣',
 '于克-兰多县' => '于克-蘭多縣',
+'于克-蘭多縣' => '于克-蘭多縣',
 '于克勒' => '于克勒',
 '于再清' => '于再清',
 '于冕' => '于冕',
@@ -3523,20 +3524,20 @@ $zh2Hant = array(
 '于化虎' => '于化虎',
 '于占元' => '于占元',
 '于友泽' => '于友澤',
-'于台煙' => '于台煙',
 '于台烟' => '于台煙',
+'于台煙' => '于台煙',
 '于右任' => '于右任',
 '于吉' => '于吉',
 '于和伟' => '于和偉',
 '于品海' => '于品海',
-'于国桢' => '于國楨',
 '于國楨' => '于國楨',
+'于国桢' => '于國楨',
 '于国治' => '于國治',
 '于國治' => '于國治',
-'于坚' => '于堅',
 '于堅' => '于堅',
-'äº\8e大寶' => 'äº\8e大寶',
+'äº\8eå\9d\9a' => 'äº\8eå \85',
 '于大宝' => '于大寶',
+'于大寶' => '于大寶',
 '于天仁' => '于天仁',
 '于天龙' => '于天龍',
 '于奇库杜克' => '于奇庫杜克',
@@ -3546,31 +3547,32 @@ $zh2Hant = array(
 '于娟' => '于娟',
 '于子千' => '于子千',
 '于孔兼' => '于孔兼',
-'于學忠' => '于學忠',
 '于学忠' => '于學忠',
+'于學忠' => '于學忠',
 '于家堡' => '于家堡',
 '于寘' => '于寘',
+'于宝轩' => '于寶軒',
 '于小伟' => '于小偉',
 '于小偉' => '于小偉',
 '于小彤' => '于小彤',
 '于小惠' => '于小惠',
 '于少保' => '于少保',
 '于山' => '于山',
-'于山国' => '于山國',
 '于山國' => '于山國',
-'äº\8e帥' => 'äº\8e帥',
+'äº\8eå±±å\9b½' => 'äº\8eå±±å\9c\8b',
 '于帅' => '于帥',
+'于帥' => '于帥',
 '于幼軍' => '于幼軍',
 '于幼军' => '于幼軍',
 '于康震' => '于康震',
-'于廣洲' => '于廣洲',
 '于广洲' => '于廣洲',
+'于廣洲' => '于廣洲',
 '于式枚' => '于式枚',
-'于從濂' => '于從濂',
 '于从濂' => '于從濂',
+'于從濂' => '于從濂',
 '于德海' => '于德海',
-'于志宁' => '于志寧',
 '于志寧' => '于志寧',
+'于志宁' => '于志寧',
 '于忠肃集' => '于忠肅集',
 '于思' => '于思',
 '于慎行' => '于慎行',
@@ -3583,29 +3585,28 @@ $zh2Hant = array(
 '于敏中' => '于敏中',
 '于斌' => '于斌',
 '于斯塔德' => '于斯塔德',
-'于斯纳尔斯贝里' => '于斯納爾斯貝里',
 '于斯納爾斯貝里' => '于斯納爾斯貝里',
-'于斯达尔' => '于斯達爾',
+'于斯纳尔斯贝里' => '于斯納爾斯貝里',
 '于斯達爾' => '于斯達爾',
-'äº\8eæ\98\8eæ¶\9b' => 'äº\8eæ\98\8e濤',
+'äº\8eæ\96¯è¾¾å°\94' => 'äº\8eæ\96¯é\81\94ç\88¾',
 '于明濤' => '于明濤',
+'于明涛' => '于明濤',
 '于是之' => '于是之',
 '于晨楠' => '于晨楠',
 '于晴' => '于晴',
-'于會泳' => '于會泳',
 '于会泳' => '于會泳',
-'äº\8eæ ¹ä¼\9f' => 'äº\8eæ ¹å\81\89',
+'äº\8eæ\9c\83æ³³' => 'äº\8eæ\9c\83æ³³',
 '于根偉' => '于根偉',
+'于根伟' => '于根偉',
 '于格' => '于格',
-'于楓' => '于楓',
 '于枫' => '于楓',
+'于楓' => '于楓',
 '于荣光' => '于榮光',
 '于樂' => '于樂',
-'于树洁' => '于樹潔',
 '于樹潔' => '于樹潔',
+'于树洁' => '于樹潔',
 '于欣' => '于欣',
 '于欣源' => '于欣源',
-'于正升' => '于正昇',
 '于正昇' => '于正昇',
 '于正昌' => '于正昌',
 '于归' => '于歸',
@@ -3614,25 +3615,25 @@ $zh2Hant = array(
 '于江震' => '于江震',
 '于波' => '于波',
 '于洋' => '于洋',
-'于洪区' => '于洪區',
 '于洪區' => '于洪區',
+'于洪区' => '于洪區',
 '于浩威' => '于浩威',
 '于海' => '于海',
 '于海洋' => '于海洋',
-'于湘兰' => '于湘蘭',
 '于湘蘭' => '于湘蘭',
+'于湘兰' => '于湘蘭',
 '于漢超' => '于漢超',
 '于汉超' => '于漢超',
 '于澄' => '于澄',
-'于泽尔' => '于澤爾',
 '于澤爾' => '于澤爾',
+'于泽尔' => '于澤爾',
 '于涛' => '于濤',
 '于濤' => '于濤',
 '于熙珍' => '于熙珍',
-'于爾岑' => '于爾岑',
 '于尔岑' => '于爾岑',
-'于爾根' => '于爾根',
+'于爾岑' => '于爾岑',
 '于尔根' => '于爾根',
+'于爾根' => '于爾根',
 '于尔里克' => '于爾里克',
 '于爾里克' => '于爾里克',
 '于特森' => '于特森',
@@ -3645,8 +3646,8 @@ $zh2Hant = array(
 '于美人' => '于美人',
 '于耘婕' => '于耘婕',
 '于若木' => '于若木',
-'于蔭霖' => '于蔭霖',
 '于荫霖' => '于蔭霖',
+'于蔭霖' => '于蔭霖',
 '于衡' => '于衡',
 '于西翰' => '于西翰',
 '于謙' => '于謙',
@@ -3662,35 +3663,36 @@ $zh2Hant = array(
 '于道泉' => '于道泉',
 '于远伟' => '于遠偉',
 '于遠偉' => '于遠偉',
-'于都縣' => '于都縣',
 '于都县' => '于都縣',
+'于都縣' => '于都縣',
 '于里察' => '于里察',
 '于阗' => '于闐',
-'于雙戈' => '于雙戈',
 '于双戈' => '于雙戈',
+'于雙戈' => '于雙戈',
 '于云鹤' => '于雲鶴',
 '于震' => '于震',
 '于震寰' => '于震寰',
 '于震环' => '于震環',
 '于震環' => '于震環',
 '于靖' => '于靖',
+'于非暗' => '于非闇',
 '于非闇' => '于非闇',
 '于韋斯屈萊' => '于韋斯屈萊',
 '于韦斯屈莱' => '于韋斯屈萊',
 '于风政' => '于風政',
 '于風政' => '于風政',
 '于飞' => '于飛',
-'于飞岛' => '于飛島',
 '于飛島' => '于飛島',
+'于飞岛' => '于飛島',
 '于余曲折' => '于餘曲折',
 '于鬯' => '于鬯',
 '于魁智' => '于魁智',
-'于凤桐' => '于鳳桐',
 '于鳳桐' => '于鳳桐',
-'于凤至' => '于鳳至',
+'于凤桐' => '于鳳桐',
 '于鳳至' => '于鳳至',
-'于默奥' => '于默奧',
+'于凤至' => '于鳳至',
 '于默奧' => '于默奧',
+'于默奥' => '于默奧',
 '云乎' => '云乎',
 '云云' => '云云',
 '云何' => '云何',
@@ -3700,24 +3702,19 @@ $zh2Hant = array(
 '云尔' => '云爾',
 '云:' => '云:',
 '五个' => '五個',
-'五出刊' => '五出刊',
-'五出口' => '五出口',
-'五出版' => '五出版',
-'五出生' => '五出生',
-'五出祁山' => '五出祁山',
-'五出逃' => '五出逃',
 '五周后' => '五周後',
 '五天后' => '五天後',
 '五岳' => '五嶽',
 '五年' => '五年',
 '五谷' => '五穀',
 '五扎' => '五紮',
+'五脏' => '五臟',
 '五行生克' => '五行生剋',
 '五谷王北街' => '五谷王北街',
 '五谷王南街' => '五谷王南街',
 '五只' => '五隻',
 '五余' => '五餘',
-'äº\94å\87º' => 'äº\94é½£',
+'äº\95å¹²' => 'äº\95å¹¹',
 '井干摧败' => '井榦摧敗',
 '井里' => '井裡',
 '亚于' => '亞於',
@@ -3726,53 +3723,31 @@ $zh2Hant = array(
 '交游' => '交遊',
 '交哄' => '交鬨',
 '亦云' => '亦云',
-'亦庄亦谐' => '亦莊亦諧',
 '亮丑' => '亮醜',
 '亮钟' => '亮鐘',
 '人云' => '人云',
-'人参加' => '人參加',
-'人参展' => '人參展',
-'人参战' => '人參戰',
-'人参拜' => '人參拜',
-'人参政' => '人參政',
-'人参照' => '人參照',
-'人参看' => '人參看',
-'人参禅' => '人參禪',
-'人参考' => '人參考',
-'人参与' => '人參與',
-'人参见' => '人參見',
-'人参观' => '人參觀',
-'人参谋' => '人參謀',
-'人参议' => '人參議',
-'人参赞' => '人參贊',
-'人参透' => '人參透',
-'人参选' => '人參選',
-'人参酌' => '人參酌',
-'人参阅' => '人參閱',
 '人如风后入江云' => '人如風後入江雲',
 '人欲' => '人慾',
+'人数只' => '人數只',
+'人数里' => '人數裡',
 '人物志' => '人物誌',
-'人参' => '人蔘',
+'人生天里' => '人生天里',
 '什锦面' => '什錦麵',
-'什么' => '什麼',
 '仇仇' => '仇讎',
-'今天' => '今天',
-'他克制' => '他剋制',
+'介胄' => '介冑',
 '他钟' => '他鐘',
 '付托' => '付託',
 '仙后' => '仙后',
-'仙药' => '仙藥',
+'仙后座' => '仙后座',
+'代数里' => '代數裡',
+'代理发行' => '代理發行',
 '代码表' => '代碼表',
 '代表' => '代表',
 '令人发指' => '令人髮指',
 '以自制' => '以自制',
-'ä»°è\8d¯' => 'ä»°è\97¥',
+'仲è£\81å\88¶' => '仲è£\81å\88',
 '件钟' => '件鐘',
-'任何表演' => '任何表演',
-'任何表示' => '任何表示',
-'任何表達' => '任何表達',
-'任何表达' => '任何表達',
-'任何表' => '任何錶',
+'价川' => '价川',
 '任何钟' => '任何鐘',
 '任何钟表' => '任何鐘錶',
 '任教于' => '任教於',
@@ -3797,270 +3772,19 @@ $zh2Hant = array(
 '伴游' => '伴遊',
 '似于' => '似於',
 '但云' => '但云',
-'布于' => '佈於',
-'布道' => '佈道',
-'布雷、' => '佈雷、',
-'布雷。' => '佈雷。',
-'布雷封锁' => '佈雷封鎖',
-'布雷的' => '佈雷的',
-'布雷艇' => '佈雷艇',
-'布雷舰' => '佈雷艦',
-'布雷速度' => '佈雷速度',
-'布雷,' => '佈雷,',
-'布雷;' => '佈雷;',
 '位于' => '位於',
 '位准' => '位準',
 '低洼' => '低洼',
 '住扎' => '住紮',
-'占0' => '佔0',
-'占1' => '佔1',
-'占2' => '佔2',
-'占3' => '佔3',
-'占4' => '佔4',
-'占5' => '佔5',
-'占6' => '佔6',
-'占7' => '佔7',
-'占8' => '佔8',
-'占9' => '佔9',
-'占A' => '佔A',
-'占B' => '佔B',
-'占C' => '佔C',
-'占D' => '佔D',
-'占E' => '佔E',
-'占F' => '佔F',
-'占G' => '佔G',
-'占H' => '佔H',
-'占I' => '佔I',
-'占J' => '佔J',
-'占K' => '佔K',
-'占L' => '佔L',
-'占M' => '佔M',
-'占N' => '佔N',
-'占O' => '佔O',
-'占P' => '佔P',
-'占Q' => '佔Q',
-'占R' => '佔R',
-'占S' => '佔S',
-'占T' => '佔T',
-'占U' => '佔U',
-'占V' => '佔V',
-'占W' => '佔W',
-'占X' => '佔X',
-'占Y' => '佔Y',
-'占Z' => '佔Z',
-'占a' => '佔a',
-'占b' => '佔b',
-'占c' => '佔c',
-'占d' => '佔d',
-'占e' => '佔e',
-'占f' => '佔f',
-'占g' => '佔g',
-'占h' => '佔h',
-'占i' => '佔i',
-'占j' => '佔j',
-'占k' => '佔k',
-'占l' => '佔l',
-'占m' => '佔m',
-'占n' => '佔n',
-'占o' => '佔o',
-'占p' => '佔p',
-'占q' => '佔q',
-'占r' => '佔r',
-'占s' => '佔s',
-'占t' => '佔t',
-'占u' => '佔u',
-'占v' => '佔v',
-'占w' => '佔w',
-'占x' => '佔x',
-'占y' => '佔y',
-'占z' => '佔z',
-'占〇' => '佔〇',
-'占一' => '佔一',
-'占七' => '佔七',
-'占万' => '佔万',
-'占三' => '佔三',
-'占上风' => '佔上風',
-'占下' => '佔下',
-'占下风' => '佔下風',
-'占不占' => '佔不佔',
-'占不足' => '佔不足',
-'占世界' => '佔世界',
-'占中' => '佔中',
-'占主' => '佔主',
-'占九' => '佔九',
-'占了' => '佔了',
-'占二' => '佔二',
-'占五' => '佔五',
-'占人便宜' => '佔人便宜',
-'占位' => '佔位',
-'占住' => '佔住',
-'占占' => '佔佔',
-'占便宜' => '佔便宜',
-'占俄' => '佔俄',
-'占个' => '佔個',
-'占个位' => '佔個位',
-'占停车' => '佔停車',
-'占亿' => '佔億',
-'占优' => '佔優',
-'占先' => '佔先',
-'占光' => '佔光',
-'占全' => '佔全',
-'占两' => '佔兩',
-'占八' => '佔八',
-'占六' => '佔六',
-'占分' => '佔分',
-'占到' => '佔到',
-'占加' => '佔加',
-'占劣' => '佔劣',
-'占北' => '佔北',
-'占十' => '佔十',
-'占千' => '佔千',
-'占半' => '佔半',
-'占南' => '佔南',
-'占印' => '佔印',
-'占去' => '佔去',
-'占取' => '佔取',
-'占台' => '佔台',
-'占哺乳' => '佔哺乳',
-'占嗫' => '佔囁',
-'占四' => '佔四',
-'占国内' => '佔國內',
-'占在' => '佔在',
-'占地' => '佔地',
-'占场' => '佔場',
-'占压' => '佔壓',
-'占多' => '佔多',
-'占大' => '佔大',
-'占好' => '佔好',
-'占小' => '佔小',
-'占少' => '佔少',
-'占局部' => '佔局部',
-'占屋' => '佔屋',
-'占山' => '佔山',
-'占市场' => '佔市場',
-'占平均' => '佔平均',
-'占床' => '佔床',
-'占座' => '佔座',
-'占后' => '佔後',
-'占得' => '佔得',
-'占德' => '佔德',
-'占掉' => '佔掉',
-'占据' => '佔據',
-'占整体' => '佔整體',
-'占新' => '佔新',
-'占有' => '佔有',
-'占有欲' => '佔有慾',
-'占东' => '佔東',
-'占查' => '佔查',
-'占次' => '佔次',
-'占比' => '佔比',
-'占法' => '佔法',
-'占满' => '佔滿',
-'占澳' => '佔澳',
-'占为' => '佔為',
-'占率' => '佔率',
-'占用' => '佔用',
 '占毕' => '佔畢',
-'占百' => '佔百',
-'占尽' => '佔盡',
-'占稳' => '佔穩',
-'占网' => '佔網',
-'占线' => '佔線',
-'占总' => '佔總',
-'占缺' => '佔缺',
-'占美' => '佔美',
-'占耕' => '佔耕',
-'占至多' => '佔至多',
-'占至少' => '佔至少',
-'占英' => '佔英',
-'占着' => '佔著',
-'占葡' => '佔葡',
-'占苏' => '佔蘇',
-'占西' => '佔西',
-'占资源' => '佔資源',
-'占起' => '佔起',
-'占超过' => '佔超過',
-'占过' => '佔過',
-'占道' => '佔道',
-'占零' => '佔零',
-'占領' => '佔領',
-'占领' => '佔領',
-'占头' => '佔頭',
 '占头筹' => '佔頭籌',
-'占饭' => '佔飯',
-'占香' => '佔香',
-'占马' => '佔馬',
 '占高枝儿' => '佔高枝兒',
-'占0' => '佔0',
-'占1' => '佔1',
-'占2' => '佔2',
-'占3' => '佔3',
-'占4' => '佔4',
-'占5' => '佔5',
-'占6' => '佔6',
-'占7' => '佔7',
-'占8' => '佔8',
-'占9' => '佔9',
-'占A' => '佔A',
-'占B' => '佔B',
-'占C' => '佔C',
-'占D' => '佔D',
-'占E' => '佔E',
-'占F' => '佔F',
-'占G' => '佔G',
-'占H' => '佔H',
-'占I' => '佔I',
-'占J' => '佔J',
-'占K' => '佔K',
-'占L' => '佔L',
-'占M' => '佔M',
-'占N' => '佔N',
-'占O' => '佔O',
-'占P' => '佔P',
-'占Q' => '佔Q',
-'占R' => '佔R',
-'占S' => '佔S',
-'占T' => '佔T',
-'占U' => '佔U',
-'占V' => '佔V',
-'占W' => '佔W',
-'占X' => '佔X',
-'占Y' => '佔Y',
-'占Z' => '佔Z',
-'占a' => '佔a',
-'占b' => '佔b',
-'占c' => '佔c',
-'占d' => '佔d',
-'占e' => '佔e',
-'占f' => '佔f',
-'占g' => '佔g',
-'占h' => '佔h',
-'占i' => '佔i',
-'占j' => '佔j',
-'占k' => '佔k',
-'占l' => '佔l',
-'占m' => '佔m',
-'占n' => '佔n',
-'占o' => '佔o',
-'占p' => '佔p',
-'占q' => '佔q',
-'占r' => '佔r',
-'占s' => '佔s',
-'占t' => '佔t',
-'占u' => '佔u',
-'占v' => '佔v',
-'占w' => '佔w',
-'占x' => '佔x',
-'占y' => '佔y',
-'占z' => '佔z',
 '何杰' => '何杰',
-'余三胜' => '余三勝',
 '余三勝' => '余三勝',
+'余三胜' => '余三勝',
 '余光中' => '余光中',
 '余光生' => '余光生',
-'余力為' => '余力為',
 '余力为' => '余力為',
-'余姓' => '余姓',
 '余威德' => '余威德',
 '余子明' => '余子明',
 '余思敏' => '余思敏',
@@ -4069,12 +3793,13 @@ $zh2Hant = array(
 '作品里' => '作品裡',
 '作奸犯科' => '作姦犯科',
 '作准' => '作準',
-'作庄' => '作莊',
-'你克制' => '你剋制',
 '你斗了胆' => '你斗了膽',
-'你才子发昏' => '你纔子發昏',
-'佣金收益' => '佣金收益',
-'佣金费用' => '佣金費用',
+'你夸' => '你誇',
+'佣金' => '佣金',
+'佣鈿' => '佣鈿',
+'佣钿' => '佣鈿',
+'佣钱' => '佣錢',
+'佣錢' => '佣錢',
 '佳肴' => '佳肴',
 '佳里鎮' => '佳里鎮',
 '并一不二' => '併一不二',
@@ -4083,15 +3808,13 @@ $zh2Hant = array(
 '并到' => '併到',
 '并合' => '併合',
 '并名' => '併名',
-'并吞下' => '併吞下',
+'并吞' => '併吞',
 '并拢' => '併攏',
 '并案' => '併案',
 '并流' => '併流',
 '并火' => '併火',
 '并为一家' => '併為一家',
 '并为一体' => '併為一體',
-'并产' => '併產',
-'并当' => '併當',
 '并叠' => '併疊',
 '并发型模式' => '併發型模式',
 '并发模式' => '併發模式',
@@ -4102,76 +3825,56 @@ $zh2Hant = array(
 '并线' => '併線',
 '并肩子' => '併肩子',
 '并购' => '併購',
-'并除' => '併除',
 '并骨' => '併骨',
 '使其斗' => '使其鬥',
 '来于' => '來於',
-'来复' => '來複',
 '侍仆' => '侍僕',
 '供制' => '供製',
 '依依不舍' => '依依不捨',
 '依托' => '依託',
-'侵占' => '侵佔',
 '侵并' => '侵併',
-'侵占到' => '侵占到',
-'侵占罪' => '侵占罪',
-'便药' => '便藥',
+'局促' => '侷促',
 '系数' => '係數',
 '系为' => '係為',
-'俄占' => '俄佔',
 '保险柜' => '保險柜',
 '信托贸易' => '信托貿易',
 '信托' => '信託',
 '修杰楷' => '修杰楷',
 '修杰麟' => '修杰麟',
-'修炼' => '修鍊',
 '修胡刀' => '修鬍刀',
 '俯冲' => '俯衝',
-'个人' => '個人',
 '个里' => '個裡',
 '个钟' => '個鐘',
 '个钟表' => '個鐘錶',
-'们克制' => '們剋制',
 '们斗了胆' => '們斗了膽',
-'倒绷孩儿' => '倒繃孩兒',
 '幸免' => '倖免',
 '幸存' => '倖存',
 '幸幸' => '倖幸',
 '候复' => '候覆',
+'倚闲' => '倚閑',
 '倛丑' => '倛醜',
 '借听于聋' => '借聽於聾',
+'借鉴' => '借鑑',
 '倦游' => '倦遊',
-'假药' => '假藥',
+'假里' => '假裡',
 '假托' => '假託',
+'假里白' => '假里白',
 '假发' => '假髮',
 '偎干' => '偎乾',
-'做庄' => '做莊',
 '停停当当' => '停停當當',
 '停征' => '停徵',
 '停制' => '停製',
-'偷鸡不着' => '偷雞不著',
-'伪药' => '偽藥',
 '备注' => '備註',
 '家伙' => '傢伙',
-'家俱' => '傢俱',
-'家具' => '傢具',
 '催并' => '催併',
-'佣中佼佼' => '傭中佼佼',
-'佣人' => '傭人',
 '佣仆' => '傭僕',
-'佣兵' => '傭兵',
-'佣工' => '傭工',
-'佣懒' => '傭懶',
-'佣书' => '傭書',
-'佣金' => '傭金',
 '傲游' => '傲遊',
 '傲霜斗雪' => '傲霜鬥雪',
-'传位于四太子' => '傳位于四太子',
 '傳位于四太子' => '傳位于四太子',
+'传位于四太子' => '傳位于四太子',
 '传于' => '傳於',
-'伤痕累累' => '傷痕纍纍',
+'债累累' => '債纍纍',
 '傻里傻气' => '傻裡傻氣',
-'倾复' => '傾複',
 '仆人' => '僕人',
 '仆使' => '僕使',
 '仆仆' => '僕僕',
@@ -4196,15 +3899,14 @@ $zh2Hant = array(
 '雇人' => '僱人',
 '雇佣' => '僱傭',
 '雇到' => '僱到',
-'雇员' => '僱員',
 '雇工' => '僱工',
-'雇用' => '僱用',
+'雇船' => '僱船',
+'雇请' => '僱請',
+'雇车' => '僱車',
 '雇农' => '僱農',
 '仪范' => '儀範',
-'仪表' => '儀錶',
 '亿个' => '億個',
 '亿周后' => '億周後',
-'亿多只' => '億多隻',
 '亿天后' => '億天後',
 '亿年' => '億年',
 '亿只' => '億隻',
@@ -4219,13 +3921,14 @@ $zh2Hant = array(
 '尽尽' => '儘儘',
 '尽先' => '儘先',
 '尽其所有' => '儘其所有',
-'尽力' => '儘力',
 '尽可能' => '儘可能',
 '尽快' => '儘快',
 '尽早' => '儘早',
 '尽是' => '儘是',
 '尽管' => '儘管',
+'尽自' => '儘自',
 '尽速' => '儘速',
+'尽量' => '儘量',
 '优于' => '優於',
 '优游' => '優遊',
 '兀术' => '兀朮',
@@ -4243,9 +3946,7 @@ $zh2Hant = array(
 '凶案' => '兇案',
 '凶枪' => '兇槍',
 '凶横' => '兇橫',
-'凶殘' => '兇殘',
 '凶残' => '兇殘',
-'凶殺' => '兇殺',
 '凶杀' => '兇殺',
 '凶犯' => '兇犯',
 '凶狠' => '兇狠',
@@ -4253,18 +3954,17 @@ $zh2Hant = array(
 '凶疑' => '兇疑',
 '凶相' => '兇相',
 '凶险' => '兇險',
-'先占' => '先佔',
 '先采' => '先採',
 '光致致' => '光緻緻',
-'克药' => '克藥',
-'克复' => '克複',
 '免征' => '免徵',
-'党参' => '党參',
 '党太尉' => '党太尉',
+'党姓' => '党姓',
+'党家' => '党家',
 '党怀英' => '党懷英',
 '党进' => '党進',
-'党項' => '党項',
 '党项' => '党項',
+'党項' => '党項',
+'内脏' => '內臟',
 '内制' => '內製',
 '内面包' => '內面包',
 '内面包的' => '內面包的',
@@ -4276,20 +3976,15 @@ $zh2Hant = array(
 '两个' => '兩個',
 '两周后' => '兩周後',
 '两天后' => '兩天後',
-'两天晒网' => '兩天晒網',
 '两年' => '兩年',
+'两杆' => '兩桿',
 '两扎' => '兩紮',
 '两虎共斗' => '兩虎共鬥',
 '两只' => '兩隻',
 '两余' => '兩餘',
 '两鼠斗穴' => '兩鼠鬥穴',
+'两出' => '兩齣',
 '八个' => '八個',
-'八出刊' => '八出刊',
-'八出口' => '八出口',
-'八出版' => '八出版',
-'八出生' => '八出生',
-'八出祁山' => '八出祁山',
-'八出逃' => '八出逃',
 '八周后' => '八周後',
 '八天后' => '八天後',
 '八字胡' => '八字鬍',
@@ -4304,24 +3999,19 @@ $zh2Hant = array(
 '公干' => '公幹',
 '公历' => '公曆',
 '公历史' => '公歷史',
-'公厘' => '公釐',
+'公里海' => '公里海',
 '公余' => '公餘',
+'六么' => '六么',
 '六个' => '六個',
-'六出刊' => '六出刊',
-'六出口' => '六出口',
-'六出版' => '六出版',
-'六出生' => '六出生',
-'六出祁山' => '六出祁山',
-'六出逃' => '六出逃',
 '六周后' => '六周後',
 '六天后' => '六天後',
 '六年' => '六年',
+'六楼后座' => '六樓后座',
 '六谷' => '六穀',
 '六扎' => '六紮',
 '六冲' => '六衝',
 '六只' => '六隻',
 '六余' => '六餘',
-'六出' => '六齣',
 '共和历' => '共和曆',
 '共和历史' => '共和歷史',
 '其一只' => '其一只',
@@ -4335,27 +4025,17 @@ $zh2Hant = array(
 '冗余' => '冗餘',
 '冤仇' => '冤讎',
 '冥蒙' => '冥濛',
-'冬天里' => '冬天裡',
 '冬山庄' => '冬山庄',
-'冬日里' => '冬日裡',
 '冬游' => '冬遊',
-'å\86°å\86·' => 'å\86°å\86·',
+'å\86°å±±é\87\8c' => 'å\86°å±±è£¡',
 '冶游' => '冶遊',
-'冷庄子' => '冷莊子',
 '冷面相' => '冷面相',
 '冷面' => '冷麵',
 '准三后' => '准三后',
-'准不准他' => '准不准他',
-'准不准你' => '准不准你',
-'准不准她' => '准不准她',
-'准不准它' => '准不准它',
-'准不准我' => '准不准我',
-'准不准许' => '准不准許',
-'准不准谁' => '准不准誰',
 '准保護' => '准保護',
 '准保护' => '准保護',
-'准保释' => '准保釋',
 '准保釋' => '准保釋',
+'准保释' => '准保釋',
 '凌蒙初' => '凌濛初',
 '凝炼' => '凝鍊',
 '几上' => '几上',
@@ -4369,25 +4049,21 @@ $zh2Hant = array(
 '几榻' => '几榻',
 '几净窗明' => '几淨窗明',
 '几筵' => '几筵',
-'几丝' => '几絲',
 '几面上' => '几面上',
-'凶杀案' => '凶殺案',
+'凶征' => '凶徵',
 '凶相毕露' => '凶相畢露',
-'凹洞里' => '凹洞裡',
 '出乖弄丑' => '出乖弄醜',
 '出乖露丑' => '出乖露醜',
 '出征收' => '出征收',
 '出于' => '出於',
 '出游' => '出遊',
 '出丑' => '出醜',
-'å\88\86å\8d ' => 'å\88\86ä½\94',
+'å\87½æ\95°é\87\8c' => 'å\87½æ\95¸è£¡',
 '分别致' => '分别致',
 '分半钟' => '分半鐘',
 '分多钟' => '分多鐘',
 '分子钟' => '分子鐘',
 '分子云' => '分子雲',
-'分布圖' => '分布圖',
-'分布图' => '分布圖',
 '分布于' => '分布於',
 '分散于' => '分散於',
 '分钟' => '分鐘',
@@ -4395,56 +4071,49 @@ $zh2Hant = array(
 '划一桨' => '划一槳',
 '划上' => '划上',
 '划下' => '划下',
+'划不來' => '划不來',
 '划不来' => '划不來',
-'划了' => '划了',
 '划了一会' => '划了一會',
 '划来划去' => '划來划去',
+'划來划去' => '划來划去',
 '划具' => '划具',
-'划出' => '划出',
-'划到' => '划到',
 '划到岸' => '划到岸',
 '划到江心' => '划到江心',
 '划动' => '划動',
+'划動' => '划動',
 '划去' => '划去',
 '划子' => '划子',
+'划得來' => '划得來',
 '划得来' => '划得來',
 '划拳' => '划拳',
-'划桨' => '划槳',
 '划槳' => '划槳',
+'划桨' => '划槳',
 '划水' => '划水',
 '划算' => '划算',
 '划船' => '划船',
 '划艇' => '划艇',
-'划着' => '划著',
-'划着走' => '划著走',
+'划著' => '划著',
 '划行' => '划行',
 '划走' => '划走',
 '划起' => '划起',
+'划進' => '划進',
 '划进' => '划進',
-'划进来' => '划進來',
-'划进去' => '划進去',
 '划过' => '划過',
-'划过来' => '划過來',
-'划过去' => '划過去',
+'划過' => '划過',
 '划龙舟' => '划龍舟',
+'划龍舟' => '划龍舟',
 '判断发' => '判斷發',
-'别日南鸿才北去' => '別日南鴻纔北去',
-'别致' => '別緻',
-'别庄' => '別莊',
-'别着' => '別著',
 '别辟' => '別闢',
 '利欲' => '利慾',
 '利于' => '利於',
-'利欲熏心' => '利欲熏心',
 '刮来刮去' => '刮來刮去',
-'刮着' => '刮著',
 '刮起来' => '刮起來',
 '刮风下雪倒便宜' => '刮風下雪倒便宜',
 '刮胡' => '刮鬍',
+'到山里' => '到山裡',
 '制冷机' => '制冷機',
 '制签' => '制籤',
 '制钟' => '制鐘',
-'刺绣' => '刺繡',
 '刻半钟' => '刻半鐘',
 '刻多钟' => '刻多鐘',
 '刻钟' => '刻鐘',
@@ -4453,26 +4122,21 @@ $zh2Hant = array(
 '剃须' => '剃鬚',
 '削发' => '削髮',
 '削面' => '削麵',
-'克制不了' => '剋制不了',
-'克制不住' => '剋制不住',
+'克剥' => '剋剝',
 '克扣' => '剋扣',
 '克星' => '剋星',
 '克期' => '剋期',
 '克死' => '剋死',
 '克薄' => '剋薄',
-'前天' => '前天',
 '前往' => '前往',
-'前言不答后语' => '前言不答後語',
 '前面店' => '前面店',
-'å\89\94åº\84è´§' => 'å\89\94è\8e\8a貨',
+'å\89\96å\8e\98' => 'å\89\96é\87\90',
 '刚干' => '剛乾',
 '刚雇' => '剛僱',
-'刚才一载' => '剛纔一載',
 '剥制' => '剝製',
 '剩余' => '剩餘',
 '剪其发' => '剪其髮',
 '剪牡丹喂牛' => '剪牡丹喂牛',
-'剪彩' => '剪綵',
 '剪发' => '剪髮',
 '割舍' => '割捨',
 '创获' => '創穫',
@@ -4484,31 +4148,28 @@ $zh2Hant = array(
 '铲头' => '剷頭',
 '划入' => '劃入',
 '划为' => '劃為',
-'剧药' => '劇藥',
-'刘佳怜' => '劉佳怜',
 '劉佳怜' => '劉佳怜',
-'刘克庄' => '劉克莊',
+'刘佳怜' => '劉佳怜',
 '刘芸后' => '劉芸后',
-'力克制' => '力剋制',
 '力拼' => '力拚',
 '力拼众敌' => '力拼眾敵',
-'力求克制' => '力求剋制',
 '力争上游' => '力爭上遊',
+'功勋' => '功勳',
 '功致' => '功緻',
 '加氢精制' => '加氫精制',
-'加药' => '加藥',
 '加注' => '加註',
 '劣于' => '劣於',
 '助于' => '助於',
 '劫余' => '劫餘',
 '勃郁' => '勃鬱',
-'动荡' => '動蕩',
 '胜于' => '勝於',
-'劳力士表' => '勞力士錶',
 '勤仆' => '勤僕',
 '勤朴' => '勤樸',
+'勋劳' => '勳勞',
+'勋业' => '勳業',
+'勋爵' => '勳爵',
 '勋章' => '勳章',
-'å\8bºè\8d¯' => 'å\8bºè\97¥',
+'å\8b\8b绩' => 'å\8b³ç¸¾',
 '勾干' => '勾幹',
 '勾心斗角' => '勾心鬥角',
 '勾魂荡魄' => '勾魂蕩魄',
@@ -4516,24 +4177,20 @@ $zh2Hant = array(
 '包准' => '包準',
 '包谷' => '包穀',
 '包扎' => '包紮',
-'包庄' => '包莊',
 '匏系' => '匏繫',
-'å\8c\96学家' => 'å\8c\96學家',
+'å\8c\97山索é\9d¢' => 'å\8c\97山索麵',
 '北岳' => '北嶽',
 '北回线' => '北迴線',
 '北回铁路' => '北迴鐵路',
-'匡复' => '匡複',
 '匪干' => '匪幹',
 '匿于' => '匿於',
 '十个' => '十個',
-'十出刊' => '十出刊',
-'十出口' => '十出口',
-'十出版' => '十出版',
+'十出家' => '十出家',
+'十出击' => '十出擊',
 '十出生' => '十出生',
 '十出祁山' => '十出祁山',
-'十出逃' => '十出逃',
+'十出头' => '十出頭',
 '十周后' => '十周後',
-'十多只' => '十多隻',
 '十天后' => '十天後',
 '十年' => '十年',
 '十扎' => '十紮',
@@ -4542,34 +4199,31 @@ $zh2Hant = array(
 '十出' => '十齣',
 '千个' => '千個',
 '千只可' => '千只可',
-'千只夠' => '千只夠',
 '千只够' => '千只夠',
+'千只夠' => '千只夠',
 '千只怕' => '千只怕',
 '千只能' => '千只能',
 '千只足够' => '千只足夠',
 '千只足夠' => '千只足夠',
 '千周后' => '千周後',
-'千多只' => '千多隻',
 '千天后' => '千天後',
 '千年' => '千年',
 '千扎' => '千紮',
-'千丝万缕' => '千絲萬縷',
 '千回百折' => '千迴百折',
 '千回百转' => '千迴百轉',
 '千钧一发' => '千鈞一髮',
 '千只' => '千隻',
 '千余' => '千餘',
-'升官发财' => '升官發財',
 '半制品' => '半制品',
 '半只可' => '半只可',
 '半只够' => '半只夠',
 '半于' => '半於',
 '半只' => '半隻',
-'协调' => '協調',
 '协防' => '協防',
 '南京钟' => '南京鐘',
 '南京钟表' => '南京鐘錶',
 '南宫适' => '南宮适',
+'南宮适' => '南宮适',
 '南屏晚钟' => '南屏晚鐘',
 '南岳' => '南嶽',
 '南筑' => '南筑',
@@ -4578,42 +4232,34 @@ $zh2Hant = array(
 '南游' => '南遊',
 '博汇' => '博彙',
 '博采' => '博採',
+'博尔术' => '博爾朮',
 '卜云吉' => '卜云吉',
-'卞庄' => '卞莊',
-'卞庄子' => '卞莊子',
 '占了卜' => '占了卜',
 '占便宜的是呆' => '占便宜的是獃',
-'占卜' => '占卜',
-'占多数' => '占多數',
-'占有五不验' => '占有五不驗',
-'占有权' => '占有權',
 '印累绶若' => '印纍綬若',
 '印制' => '印製',
+'印鉴' => '印鑑',
 '危于' => '危於',
 '卵与石斗' => '卵與石鬥',
+'卷发' => '卷髮',
 '卷须' => '卷鬚',
 '厂部' => '厂部',
 '厝薪于火' => '厝薪於火',
 '原子钟' => '原子鐘',
 '原钟' => '原鐘',
 '历物之意' => '厤物之意',
-'参合' => '參合',
-'参考价值' => '參考價值',
-'参与' => '參與',
-'参与人员' => '參與人員',
-'参与制' => '參與制',
-'参与感' => '參與感',
-'参与者' => '參與者',
-'参观团' => '參觀團',
-'参观团体' => '參觀團體',
-'参阅' => '參閱',
+'去山里' => '去山裡',
+'参数只' => '參數只',
+'参数里' => '參數裡',
 '反朴' => '反樸',
 '反冲' => '反衝',
 '反复制' => '反複製',
-'反复' => '反覆',
 '反覆' => '反覆',
+'反复' => '反覆',
 '取舍' => '取捨',
+'受雇' => '受僱',
 '受托' => '受託',
+'丛林里' => '叢林裡',
 '口干' => '口乾',
 '口干冒' => '口干冒',
 '口干政' => '口干政',
@@ -4623,25 +4269,24 @@ $zh2Hant = array(
 '口燥唇干' => '口燥唇乾',
 '口腹之欲' => '口腹之慾',
 '口里' => '口裡',
-'口试' => '口試',
 '口钟' => '口鐘',
-'古书云' => '古書云',
 '古書云' => '古書云',
+'古书云' => '古書云',
 '古柯咸' => '古柯鹹',
-'古柯碱' => '古柯鹼',
 '古朴' => '古樸',
 '古语云' => '古語云',
 '古語云' => '古語云',
-'å\8f¤è¿¹' => 'å\8f¤è¿¹',
+'å\8f¤è¿¹' => 'å\8f¤è¹\9f',
 '古钟' => '古鐘',
 '古钟表' => '古鐘錶',
 '另辟' => '另闢',
 '叩钟' => '叩鐘',
-'只占' => '只佔',
 '只占卜' => '只占卜',
 '只占吉' => '只占吉',
 '只占神问卜' => '只占神問卜',
 '只占算' => '只占算',
+'只影响' => '只影響',
+'只影響' => '只影響',
 '只采' => '只採',
 '只冲' => '只衝',
 '只要功夫深,铁杵磨成锈花针' => '只要功夫深,鐵杵磨成鏽花針',
@@ -4659,76 +4304,58 @@ $zh2Hant = array(
 '只身子' => '只身子',
 '只身形' => '只身形',
 '只身影' => '只身影',
-'只身后' => '只身後',
 '只身後' => '只身後',
+'只身后' => '只身後',
 '只身心' => '只身心',
 '只身旁' => '只身旁',
 '只身材' => '只身材',
 '只身段' => '只身段',
 '只身为' => '只身為',
 '只身為' => '只身為',
-'只身边' => '只身邊',
 '只身邊' => '只身邊',
+'只身边' => '只身邊',
 '只身首' => '只身首',
-'只身体' => '只身體',
 '只身體' => '只身體',
+'只身体' => '只身體',
 '只身高' => '只身高',
 '只采声' => '只采聲',
 '叮叮当当' => '叮叮噹噹',
 '叮当' => '叮噹',
-'可以克制' => '可以剋制',
 '可紧可松' => '可緊可鬆',
 '可自制' => '可自制',
+'可鉴' => '可鑑',
 '台子女' => '台子女',
 '台子孙' => '台子孫',
 '台州' => '台州',
 '台布景' => '台布景',
 '台历史' => '台歷史',
 '台钟' => '台鐘',
-'台面前' => '台面前',
-'叱咤903' => '叱咤903',
-'叱咤MY903' => '叱咤MY903',
-'叱咤My903' => '叱咤My903',
-'叱咤叱叱咤' => '叱咤叱叱咤',
-'叱咤叱咤叱咤咤' => '叱咤叱咤叱咤咤',
-'叱咤咤' => '叱咤咤',
-'叱咤乐坛' => '叱咤樂壇',
-'叱咤樂壇' => '叱咤樂壇',
-'叶 恭弘' => '叶 恭弘',
-'叶 恭弘' => '叶 恭弘',
+'台风奖' => '台風獎',
+'台风稳健' => '台風穩健',
+'史鉴' => '史鑑',
 '叶不二子' => '叶不二子',
 '叶志穗' => '叶志穗',
 '叶恭弘' => '叶恭弘',
 '叶音' => '叶音',
 '叶韵' => '叶韻',
 '吃板刀面' => '吃板刀麵',
-'吃着不尽' => '吃著不盡',
 '吃姜' => '吃薑',
-'吃药' => '吃藥',
 '吃里扒外' => '吃裡扒外',
 '吃里爬外' => '吃裡爬外',
-'吃辣面' => '吃辣麵',
-'吃错药' => '吃錯藥',
 '各辟' => '各闢',
 '各类钟' => '各類鐘',
 '合伙人' => '合伙人',
+'合并' => '合併',
 '合伙' => '合夥',
-'合并' => '合并',
 '合府上' => '合府上',
 '合采' => '合採',
 '合历' => '合曆',
 '合历史' => '合歷史',
 '合准' => '合準',
-'合着' => '合著',
-'合著者' => '合著者',
 '吉凶庆吊' => '吉凶慶弔',
-'吊带裤' => '吊帶褲',
-'吊挂着' => '吊掛著',
-'吊杆' => '吊杆',
-'吊着' => '吊著',
-'吊裤' => '吊褲',
-'吊裤带' => '吊褲帶',
+'吉征' => '吉徵',
 '吊钟' => '吊鐘',
+'同人志' => '同人誌',
 '同伙' => '同夥',
 '同于' => '同於',
 '同余' => '同餘',
@@ -4739,22 +4366,24 @@ $zh2Hant = array(
 '后姓' => '后姓',
 '后安路' => '后安路',
 '后平路' => '后平路',
+'后庄' => '后庄',
 '后座' => '后座',
 '后母戊' => '后母戊',
-'后海湾' => '后海灣',
 '后海灣' => '后海灣',
+'后海湾' => '后海灣',
 '后瑞站' => '后瑞站',
 '后稷' => '后稷',
+'后綜' => '后綜',
 '后羿' => '后羿',
 '后街' => '后街',
 '后角' => '后角',
-'后丰' => '后豐',
 '后豐' => '后豐',
+'后丰' => '后豐',
 '后里' => '后里',
-'后发FK型星' => '后髮FK型星',
 '后髮FK型星' => '后髮FK型星',
-'后髮座' => '后髮座',
+'后发FK型星' => '后髮FK型星',
 '后发座' => '后髮座',
+'后髮座' => '后髮座',
 '后发星系团' => '后髮星系團',
 '后髮星系團' => '后髮星系團',
 '吐哺捉发' => '吐哺捉髮',
@@ -4763,9 +4392,9 @@ $zh2Hant = array(
 '向往常' => '向往常',
 '向往日' => '向往日',
 '向往时' => '向往時',
-'向着' => '向著',
 '吞并' => '吞併',
 '吟游' => '吟遊',
+'吧台' => '吧檯',
 '含齿戴发' => '含齒戴髮',
 '吹干' => '吹乾',
 '吹发' => '吹髮',
@@ -4773,42 +4402,31 @@ $zh2Hant = array(
 '吾为之范我驰驱' => '吾爲之範我馳驅',
 '吕后' => '呂后',
 '呂后' => '呂后',
-'呆呆傻傻' => '呆呆傻傻',
-'呆呆挣挣' => '呆呆掙掙',
-'呆呆獸' => '呆呆獸',
 '呆呆兽' => '呆呆獸',
-'呆呆笨笨' => '呆呆笨笨',
 '呆致致' => '呆緻緻',
 '呆里呆气' => '呆裡呆氣',
-'周一' => '周一',
-'周三' => '周三',
-'周二' => '周二',
-'周五' => '周五',
-'周六' => '周六',
+'告札' => '告劄',
 '周后' => '周后',
-'周四' => '周四',
 '周历' => '周曆',
-'周杰伦' => '周杰倫',
 '周杰倫' => '周杰倫',
+'周杰伦' => '周杰倫',
 '周历史' => '周歷史',
-'周庄王' => '周莊王',
 '周游' => '周遊',
 '呼吁' => '呼籲',
 '命中注定' => '命中注定',
-'和克制' => '和剋制',
 '和奸' => '和姦',
 '咎征' => '咎徵',
 '咕咕钟' => '咕咕鐘',
+'咪表' => '咪錶',
 '咬姜呷醋' => '咬薑呷醋',
 '咯当' => '咯噹',
-'咳嗽药' => '咳嗽藥',
 '哀吊' => '哀弔',
 '哀挽' => '哀輓',
 '品汇' => '品彙',
+'品鉴' => '品鑑',
 '哄堂大笑' => '哄堂大笑',
-'å\91\98山庄' => '員山庄',
+'å\93¡山庄' => '員山庄',
 '哪里' => '哪裡',
-'哭脏' => '哭髒',
 '唁吊' => '唁弔',
 '呗赞' => '唄讚',
 '唇干' => '唇乾',
@@ -4817,6 +4435,7 @@ $zh2Hant = array(
 '唾面自干' => '唾面自乾',
 '唾余' => '唾餘',
 '商历' => '商曆',
+'商标准许' => '商標准許',
 '商历史' => '商歷史',
 '启发式' => '啟發式',
 '啷当' => '啷噹',
@@ -4827,15 +4446,15 @@ $zh2Hant = array(
 '喜欢钟' => '喜歡鐘',
 '喜欢钟表' => '喜歡鐘錶',
 '喝干' => '喝乾',
+'喧哗' => '喧譁',
 '喧哄' => '喧鬨',
 '丧钟' => '喪鐘',
 '乔岳' => '喬嶽',
+'單于' => '單于',
 '单于' => '單于',
 '单单于' => '單單於',
 '单干' => '單幹',
 '单打独斗' => '單打獨鬥',
-'嗑药' => '嗑藥',
-'嘀嗒的表' => '嘀嗒的錶',
 '嘉谷' => '嘉穀',
 '嘉肴' => '嘉肴',
 '嘴里' => '嘴裡',
@@ -4845,25 +4464,21 @@ $zh2Hant = array(
 '当啷' => '噹啷',
 '当当' => '噹噹',
 '噜苏' => '嚕囌',
+'啮合' => '嚙合',
+'啮齿类' => '嚙齒類',
 '向导' => '嚮導',
 '向往' => '嚮往',
-'向应' => '嚮應',
+'向慕' => '嚮慕',
 '向迩' => '嚮邇',
 '严云农' => '嚴云農',
 '严于' => '嚴於',
-'严丝合缝' => '嚴絲合縫',
 '嚼谷' => '嚼穀',
 '啰啰苏苏' => '囉囉囌囌',
 '啰苏' => '囉囌',
 '嘱托' => '囑託',
+'啮虫' => '囓蟲',
 '四个' => '四個',
-'四出刊' => '四出刊',
-'四出口' => '四出口',
 '四出征收' => '四出徵收',
-'四出版' => '四出版',
-'四出生' => '四出生',
-'四出祁山' => '四出祁山',
-'四出逃' => '四出逃',
 '四分历' => '四分曆',
 '四分历史' => '四分歷史',
 '四周后' => '四周後',
@@ -4871,21 +4486,25 @@ $zh2Hant = array(
 '四年' => '四年',
 '四舍五入' => '四捨五入',
 '四舍六入' => '四捨六入',
+'四杆铁笔' => '四桿鐵筆',
 '四扎' => '四紮',
 '四只' => '四隻',
 '四面包' => '四面包',
 '四面钟' => '四面鐘',
 '四余' => '四餘',
-'å\9b\9bå\87º' => 'å\9b\9bé½£',
+'å\9b\9eä½£' => 'å\9b\9eä½£',
 '回采' => '回採',
 '回旋加速' => '回旋加速',
 '回历' => '回曆',
 '回历史' => '回歷史',
-'回丝' => '回絲',
-'回着' => '回著',
-'回荡' => '回蕩',
+'回复中' => '回覆中',
+'回复你' => '回覆你',
+'回复帖子' => '回覆帖子',
+'回复意见' => '回覆意見',
+'回复说' => '回覆說',
+'回复邮件' => '回覆郵件',
+'回复:' => '回覆:',
 '回游' => '回遊',
-'回阳荡气' => '回陽蕩氣',
 '因于' => '因於',
 '困倦起来' => '困倦起來',
 '困兽之斗' => '困獸之鬥',
@@ -4894,8 +4513,6 @@ $zh2Hant = array(
 '固定制' => '固定制',
 '固征' => '固徵',
 '囿于' => '囿於',
-'圈占' => '圈佔',
-'圈子里' => '圈子裡',
 '圈梁' => '圈樑',
 '圈里' => '圈裡',
 '国之桢干' => '國之楨榦',
@@ -4910,23 +4527,23 @@ $zh2Hant = array(
 '国仇' => '國讎',
 '园里' => '園裡',
 '园游会' => '園遊會',
-'图里' => '圖裡',
+'图里的' => '圖裡的',
+'图里,' => '圖裡,',
 '图鉴' => '圖鑑',
+'土索面' => '土索麵',
 '土里' => '土裡',
 '土制' => '土製',
-'土霉素' => '土霉素',
 '在制品' => '在制品',
-'å\9c¨å\85\8bå\88¶' => 'å\9c¨å\89\8bå\88',
+'å\9c¨å±±é\87\8c' => 'å\9c¨å±±è£¡',
 '在于' => '在於',
-'地占' => '地佔',
-'地克制' => '地剋制',
+'地图里' => '地圖裡',
 '地心历表' => '地心曆表',
 '地方志' => '地方志',
 '地志' => '地誌',
 '地丑德齐' => '地醜德齊',
 '坏于' => '坏於',
 '坐如钟' => '坐如鐘',
-'å\9d\90åº\84' => 'å\9d\90è\8e\8a',
+'å\9d\90å\8f°' => 'å\9d\90檯',
 '坐钟' => '坐鐘',
 '坑里' => '坑裡',
 '坤范' => '坤範',
@@ -4941,59 +4558,55 @@ $zh2Hant = array(
 '埃及历史' => '埃及歷史',
 '埃及艳后' => '埃及豔后',
 '埃荣冲' => '埃榮衝',
-'埋头寻表' => '埋頭尋錶',
-'埋头寻钟' => '埋頭尋鐘',
-'埋头寻钟表' => '埋頭尋鐘錶',
 '城里' => '城裡',
-'埔裡社撫墾局' => '埔裏社撫墾局',
-'埔裏社撫墾局' => '埔裏社撫墾局',
-'å\9f\94é\87\8c社æ\8a\9aå\9e¦å±\80' => 'å\9f\94è£\8f社æ\92«å¢¾å±\80',
+'埔子里' => '埔子里',
+'埔里社' => '埔裏社',
+'å\9f\9fé\87\8c' => 'å\9f\9f裡',
 '基干' => '基幹',
 '基于' => '基於',
 '基准' => '基準',
 '坚致' => '堅緻',
 '堙淀' => '堙澱',
-'涂着' => '塗著',
-'涂药' => '塗藥',
+'堡子里' => '堡子里',
+'场里' => '場裡',
 '塞耳盗钟' => '塞耳盜鐘',
-'塞药' => '塞藥',
 '墓志铭' => '墓志銘',
 '墓志' => '墓誌',
 '增辟' => '增闢',
+'墨子里' => '墨子里',
 '墨沈' => '墨沈',
 '墨沈未干' => '墨瀋未乾',
-'堕胎药' => '墮胎藥',
-'垦复' => '墾複',
 '垦辟' => '墾闢',
-'垄断价格' => '壟斷價格',
-'垄断资产' => '壟斷資產',
-'垄断集团' => '壟斷集團',
 '壮游' => '壯遊',
 '壮面' => '壯麵',
 '壹郁' => '壹鬱',
 '壶里' => '壺裡',
 '壸范' => '壼範',
+'壽天里' => '壽天里',
 '寿面' => '壽麵',
 '夏于乔' => '夏于喬',
 '夏于喬' => '夏于喬',
-'夏天里' => '夏天裡',
-'夏日里' => '夏日裡',
 '夏历' => '夏曆',
 '夏历史' => '夏歷史',
 '夏游' => '夏遊',
 '外强中干' => '外強中乾',
 '外制' => '外製',
-'多占' => '多佔',
 '多半只' => '多半只',
+'多只包括' => '多只包括',
 '多只可' => '多只可',
+'多只含' => '多只含',
 '多只在' => '多只在',
 '多只是' => '多只是',
 '多只會' => '多只會',
 '多只会' => '多只會',
 '多只有' => '多只有',
+'多只比' => '多只比',
 '多只用' => '多只用',
 '多只能' => '多只能',
+'多只限' => '多只限',
 '多只需' => '多只需',
+'多只须' => '多只須',
+'多只須' => '多只須',
 '多周后' => '多周後',
 '多天后' => '多天後',
 '多于' => '多於',
@@ -5001,13 +4614,10 @@ $zh2Hant = array(
 '多丑' => '多醜',
 '多只' => '多隻',
 '多余' => '多餘',
-'多么' => '多麼',
-'夜光表' => '夜光錶',
+'多出电影' => '多齣電影',
+'夜晚里' => '夜晚裡',
 '夜里' => '夜裡',
 '夜游' => '夜遊',
-'够克制' => '夠剋制',
-'夢有五不占' => '夢有五不占',
-'梦有五不占' => '夢有五不占',
 '梦里' => '夢裡',
 '梦游' => '夢遊',
 '伙伴' => '夥伴',
@@ -5015,7 +4625,6 @@ $zh2Hant = array(
 '伙同' => '夥同',
 '伙众' => '夥眾',
 '伙计' => '夥計',
-'大丑' => '大丑',
 '大伙儿' => '大伙兒',
 '大只可' => '大只可',
 '大只在' => '大只在',
@@ -5029,6 +4638,7 @@ $zh2Hant = array(
 '大型钟表面' => '大型鐘表面',
 '大型钟表' => '大型鐘錶',
 '大型钟面' => '大型鐘面',
+'大多只' => '大多只',
 '大伙' => '大夥',
 '大干' => '大幹',
 '大批涌到' => '大批湧到',
@@ -5039,7 +4649,6 @@ $zh2Hant = array(
 '大本钟' => '大本鐘',
 '大本钟敲' => '大本鐘敲',
 '大历史' => '大歷史',
-'大呆' => '大獃',
 '大病初愈' => '大病初癒',
 '大目干连' => '大目乾連',
 '大笨钟' => '大笨鐘',
@@ -5048,14 +4657,15 @@ $zh2Hant = array(
 '大衍历' => '大衍曆',
 '大衍历史' => '大衍歷史',
 '大言非夸' => '大言非夸',
+'大夸' => '大誇',
 '大赞' => '大讚',
 '大周折' => '大週摺',
+'大丑' => '大醜',
 '大金发苔' => '大金髮苔',
 '大钟' => '大鐘',
 '大只' => '大隻',
 '大风后' => '大風後',
-'大曲' => '大麴',
-'天干物燥' => '天乾物燥',
+'大曲酒' => '大麴酒',
 '天克地冲' => '天克地衝',
 '天后' => '天后',
 '天后宫' => '天后宮',
@@ -5065,47 +4675,44 @@ $zh2Hant = array(
 '天后来' => '天後來',
 '天后半' => '天後半',
 '天后天' => '天後天',
-'天文学家' => '天文學家',
 '天文学钟' => '天文學鐘',
 '天文历表' => '天文曆表',
 '天文钟' => '天文鐘',
 '天历' => '天曆',
 '天历史' => '天歷史',
-'天然碱' => '天然鹼',
-'天翻地覆' => '天翻地覆',
-'天覆地载' => '天覆地載',
+'天神之后' => '天神之后',
+'天里' => '天裡',
+'天里昂' => '天里昂',
+'天里村' => '天里村',
 '太仆' => '太僕',
+'太凶' => '太兇',
 '太初历' => '太初曆',
 '太初历史' => '太初歷史',
 '太后' => '太后',
+'太丑' => '太醜',
+'太阁' => '太閤',
 '夯干' => '夯幹',
 '夸人' => '夸人',
 '夸克' => '夸克',
-'夸夸其谈' => '夸夸其談',
 '夸姣' => '夸姣',
 '夸容' => '夸容',
-'夸毗' => '夸毗',
 '夸父' => '夸父',
 '夸特' => '夸特',
 '夸脱' => '夸脫',
-'夸诞' => '夸誕',
-'夸诞不经' => '夸誕不經',
 '夸丽' => '夸麗',
+'奇勋' => '奇勳',
 '奇迹' => '奇蹟',
 '奇丑' => '奇醜',
 '奏折' => '奏摺',
-'奥占' => '奧佔',
 '夺斗' => '奪鬥',
 '奋斗' => '奮鬥',
 '女丑' => '女丑',
-'女佣人' => '女佣人',
-'女佣' => '女傭',
 '女仆' => '女僕',
 '奴仆' => '奴僕',
 '奸淫掳掠' => '奸淫擄掠',
-'她克制' => '她剋制',
 '好干' => '好乾',
 '好家伙' => '好傢夥',
+'好凶' => '好兇',
 '好勇斗狠' => '好勇鬥狠',
 '好斗大' => '好斗大',
 '好斗室' => '好斗室',
@@ -5115,14 +4722,15 @@ $zh2Hant = array(
 '好斗膽' => '好斗膽',
 '好斗蓬' => '好斗蓬',
 '好于' => '好於',
-'好呆' => '好獃',
 '好困' => '好睏',
 '好签' => '好籤',
 '好丑' => '好醜',
 '好斗' => '好鬥',
 '如果干' => '如果幹',
+'如饥似渴' => '如饑似渴',
 '妖后' => '妖后',
-'妙药' => '妙藥',
+'妖气冲天' => '妖氣衝天',
+'妆台' => '妝檯',
 '始于' => '始於',
 '委托' => '委託',
 '委托书' => '委託書',
@@ -5132,42 +4740,43 @@ $zh2Hant = array(
 '奸宄' => '姦宄',
 '奸情' => '姦情',
 '奸杀' => '姦殺',
-'奸污' => '姦æ±\99',
+'奸污' => '姦污',
 '奸淫' => '姦淫',
 '奸猾' => '姦猾',
 '奸细' => '姦細',
 '奸邪' => '姦邪',
 '威棱' => '威稜',
 '婢仆' => '婢僕',
-'娲杆' => '媧杆',
 '嫁祸于' => '嫁禍於',
 '嫌凶' => '嫌兇',
 '嫌好道丑' => '嫌好道醜',
+'嫩姜' => '嫩薑',
 '嬉游' => '嬉遊',
 '嬖幸' => '嬖倖',
 '嬴余' => '嬴餘',
 '子之丰兮' => '子之丰兮',
 '子云' => '子云',
-'子晳' => '子晳',
+'子里' => '子裡',
+'子里甲' => '子里甲',
 '字汇' => '字彙',
 '字码表' => '字碼表',
 '字里行间' => '字裡行間',
 '存十一于千百' => '存十一於千百',
 '存折' => '存摺',
 '存于' => '存於',
+'孛里海' => '孛里海',
 '孤寡不谷' => '孤寡不穀',
+'学家' => '學家',
 '学里' => '學裡',
 '宇宙志' => '宇宙誌',
 '安于' => '安於',
 '安沈铁路' => '安瀋鐵路',
-'安眠药' => '安眠藥',
-'安胎药' => '安胎藥',
+'宋王台' => '宋王臺',
 '宗周钟' => '宗周鐘',
 '官不怕大只怕管' => '官不怕大只怕管',
 '官地为采' => '官地為寀',
 '官历' => '官曆',
 '官历史' => '官歷史',
-'官庄' => '官莊',
 '定于' => '定於',
 '定准' => '定準',
 '定制' => '定製',
@@ -5178,12 +4787,6 @@ $zh2Hant = array(
 '害于' => '害於',
 '宴游' => '宴遊',
 '家仆' => '家僕',
-'家具备' => '家具備',
-'家具有' => '家具有',
-'家具木工科' => '家具木工科',
-'家具行' => '家具行',
-'家具体' => '家具體',
-'家庄' => '家莊',
 '家里' => '家裡',
 '家丑' => '家醜',
 '容于' => '容於',
@@ -5195,52 +4798,47 @@ $zh2Hant = array(
 '寇准' => '寇準',
 '寇仇' => '寇讎',
 '富余' => '富餘',
-'寒假里' => '寒假裡',
 '寒栗' => '寒慄',
 '寒于' => '寒於',
 '寓于' => '寓於',
-'寡占' => '寡佔',
 '寡欲' => '寡慾',
 '实干' => '實幹',
+'实累累' => '實纍纍',
 '写字台' => '寫字檯',
 '宽宽松松' => '寬寬鬆鬆',
 '宽于' => '寬於',
 '宽余' => '寬餘',
 '宽松' => '寬鬆',
 '寮采' => '寮寀',
-'宝山庄' => '寶山庄',
-'寶曆' => '寶曆',
+'寶山庄' => '寶山庄',
 '宝历' => '寶曆',
+'寶曆' => '寶曆',
 '宝历史' => '寶歷史',
-'宝庄' => '寶莊',
 '宝里宝气' => '寶裡寶氣',
+'宝鉴' => '寶鑑',
 '寸发千金' => '寸髮千金',
 '寺钟' => '寺鐘',
 '封后' => '封后',
+'封为后' => '封為后',
 '封面里' => '封面裡',
 '射雕' => '射鵰',
-'将占' => '將佔',
-'将占卜' => '將占卜',
 '专向往' => '專向往',
-'专注' => '專註',
 '专辑里' => '專輯裡',
 '尊后' => '尊后',
+'对不准' => '對不準',
 '对折' => '對摺',
 '对于' => '對於',
 '对准' => '對準',
 '对准表' => '對準錶',
 '对准钟' => '對準鐘',
 '对准钟表' => '對準鐘錶',
-'对华发动' => '對華發動',
+'对华发' => '對華發',
 '对表中' => '對表中',
 '对表扬' => '對表揚',
 '对表明' => '對表明',
-'对表格' => '對表格',
 '对表演' => '對表演',
 '对表现' => '對表現',
-'对表示' => '對表示',
 '对表达' => '對表達',
-'对表' => '對錶',
 '导游' => '導遊',
 '小丑' => '小丑',
 '小价' => '小价',
@@ -5258,12 +4856,9 @@ $zh2Hant = array(
 '小型钟表面' => '小型鐘表面',
 '小型钟表' => '小型鐘錶',
 '小型钟面' => '小型鐘面',
-'小伙子' => '小夥子',
 '小米面' => '小米麵',
 '小只' => '小隻',
-'少占' => '少佔',
 '少采' => '少採',
-'就克制' => '就剋制',
 '就范' => '就範',
 '就里' => '就裡',
 '尸位素餐' => '尸位素餐',
@@ -5278,9 +4873,8 @@ $zh2Hant = array(
 '尸谏' => '尸諫',
 '尸魂界' => '尸魂界',
 '尸鸠' => '尸鳩',
+'局促不安' => '局促不安',
 '局里' => '局裡',
-'屁股大吊了心' => '屁股大弔了心',
-'屋子里' => '屋子裡',
 '屋梁' => '屋樑',
 '屋里' => '屋裡',
 '屏风后' => '屏風後',
@@ -5290,30 +4884,35 @@ $zh2Hant = array(
 '属托' => '屬託',
 '屯扎' => '屯紮',
 '屯里' => '屯裡',
+'山仔后' => '山仔后',
 '山崩钟应' => '山崩鐘應',
 '山岳' => '山嶽',
 '山梁' => '山樑',
-'山洞里' => '山洞裡',
 '山棱' => '山稜',
 '山羊胡' => '山羊鬍',
-'山庄' => '山莊',
-'山药' => '山藥',
-'山里' => '山裡',
+'山里有' => '山裡有',
+'山里的' => '山裡的',
 '山谷道' => '山谷道',
 '山重水复' => '山重水複',
 '岱岳' => '岱嶽',
+'峇里海' => '峇里海',
 '峰回' => '峰迴',
 '峻岭' => '峻岭',
 '昆剧' => '崑劇',
+'崑剧' => '崑劇',
+'崑山' => '崑山',
 '昆山' => '崑山',
+'昆冈' => '崑岡',
 '昆仑' => '崑崙',
-'昆仑山脉' => '崑崙山脈',
+'崑曲' => '崑曲',
 '昆曲' => '崑曲',
 '昆腔' => '崑腔',
+'崑腔' => '崑腔',
 '昆苏' => '崑蘇',
+'崑苏' => '崑蘇',
 '昆调' => '崑調',
+'崑调' => '崑調',
 '崖广' => '崖广',
-'仑背' => '崙背',
 '嶒棱' => '嶒稜',
 '岳岳' => '嶽嶽',
 '岳麓' => '嶽麓',
@@ -5321,28 +4920,26 @@ $zh2Hant = array(
 '巡回医疗' => '巡回醫療',
 '巡回' => '巡迴',
 '巡游' => '巡遊',
+'工作台' => '工作檯',
 '工致' => '工緻',
 '左冲右突' => '左衝右突',
 '巧妇做不得无面馎饦' => '巧婦做不得無麵餺飥',
 '巧干' => '巧幹',
 '巧历' => '巧曆',
 '巧历史' => '巧歷史',
+'巨制' => '巨製',
 '差之毫厘' => '差之毫厘',
-'差之毫厘,谬以千里' => '差之毫釐,謬以千里',
 '差于' => '差於',
 '己丑' => '己丑',
-'已占' => '已佔',
 '已占卜' => '已占卜',
 '已占算' => '已占算',
 '巴尔干' => '巴爾幹',
 '巷里' => '巷裡',
-'市占' => '市佔',
-'市占率' => '市佔率',
 '市里' => '市裡',
 '布谷' => '布穀',
+'布谷鸟' => '布穀鳥',
 '布谷鸟钟' => '布穀鳥鐘',
-'布庄' => '布莊',
-'布谷鸟' => '布谷鳥',
+'布里海' => '布里海',
 '希伯来历' => '希伯來曆',
 '希伯来历史' => '希伯來歷史',
 '帘子' => '帘子',
@@ -5350,40 +4947,34 @@ $zh2Hant = array(
 '帝后台' => '帝后臺',
 '师范' => '師範',
 '席卷' => '席捲',
-'带团参加' => '帶團參加',
 '带征' => '帶徵',
 '带发修行' => '帶髮修行',
-'帮佣' => '幫å\82­',
+'å¹\85å\9b¾é\87\8c' => 'å¹\85å\9c\96裡',
 '干系' => '干係',
-'干着急' => '干著急',
 '平平当当' => '平平當當',
-'平泉庄' => '平泉莊',
 '平准' => '平準',
 '年代里' => '年代裡',
 '年历' => '年曆',
 '年历史' => '年歷史',
 '年谷' => '年穀',
 '年里' => '年裡',
+'年鉴' => '年鑑',
 '并力' => '并力',
-'并吞' => '并吞',
 '并州' => '并州',
 '并日而食' => '并日而食',
 '并迭' => '并迭',
 '幸免于难' => '幸免於難',
 '幸于' => '幸於',
 '幸运胡' => '幸運鬍',
-'干上' => '幹上',
 '干下去' => '幹下去',
 '干不了' => '幹不了',
 '干不成' => '幹不成',
-'干了' => '幹了',
 '干事' => '幹事',
 '干些' => '幹些',
 '干人' => '幹人',
 '干什么' => '幹什麼',
 '干个' => '幹個',
 '干劲' => '幹勁',
-'干劲冲天' => '幹勁沖天',
 '干吏' => '幹吏',
 '干员' => '幹員',
 '干啥' => '幹啥',
@@ -5393,7 +4984,7 @@ $zh2Hant = array(
 '干完' => '幹完',
 '干家' => '幹家',
 '干将' => '幹將',
-'干得' => '幹得',
+'干得了' => '幹得了',
 '干性油' => '幹性油',
 '干才' => '幹才',
 '干掉' => '幹掉',
@@ -5410,7 +5001,6 @@ $zh2Hant = array(
 '干当' => '幹當',
 '干的停当' => '幹的停當',
 '干细胞' => '幹細胞',
-'干細胞' => '幹細胞',
 '干线' => '幹線',
 '干练' => '幹練',
 '干缺' => '幹缺',
@@ -5430,11 +5020,11 @@ $zh2Hant = array(
 '几个' => '幾個',
 '几周后' => '幾周後',
 '几天后' => '幾天後',
+'几进几出' => '幾進幾出',
 '几只' => '幾隻',
 '几出' => '幾齣',
 '广部' => '广部',
-'庄稼人' => '庄稼人',
-'庄稼院' => '庄稼院',
+'床席' => '床蓆',
 '店里' => '店裡',
 '府干卿' => '府干卿',
 '府干擾' => '府干擾',
@@ -5446,55 +5036,46 @@ $zh2Hant = array(
 '府干预' => '府干預',
 '府干' => '府幹',
 '座钟' => '座鐘',
-'康åº\84大é\81\93' => '康åº\84大é\81\93',
-'康åº\84' => '康è\8e\8a',
+'å»\8då­\90é\87\8c' => 'å»\8då­\90é\87\8c',
+'å»\93å­\90é\87\8c' => 'å»\93å­\90é\87\8c',
 '厨余' => '廚餘',
 '厮斗' => '廝鬥',
 '庙里' => '廟裡',
-'废后' => '廢后',
 '廢后' => '廢后',
+'废后' => '廢后',
 '广征' => '廣徵',
 '广舍' => '廣捨',
 '延历' => '延曆',
 '建于' => '建於',
 '弄干' => '弄乾',
 '弄丑' => '弄醜',
-'弄脏' => '弄髒',
+'弄脏胸' => '弄髒胸',
 '弄松' => '弄鬆',
 '弄鬼吊猴' => '弄鬼弔猴',
-'吊儿郎当' => '弔兒郎當',
 '吊卷' => '弔卷',
 '吊取' => '弔取',
 '吊古' => '弔古',
-'吊古寻幽' => '弔古尋幽',
 '吊唁' => '弔唁',
 '吊问' => '弔問',
 '吊喉' => '弔喉',
 '吊丧' => '弔喪',
-'吊丧问疾' => '弔喪問疾',
 '吊喭' => '弔喭',
-'吊场' => '弔場',
 '吊奠' => '弔奠',
 '吊孝' => '弔孝',
 '吊客' => '弔客',
 '吊宴' => '弔宴',
 '吊带' => '弔帶',
 '吊影' => '弔影',
+'吊恤' => '弔恤',
 '吊慰' => '弔慰',
 '吊扣' => '弔扣',
 '吊拷' => '弔拷',
-'吊拷绷扒' => '弔拷繃扒',
 '吊挂' => '弔掛',
 '吊撒' => '弔撒',
 '吊文' => '弔文',
 '吊旗' => '弔旗',
-'吊书' => '弔書',
-'吊桥' => '弔橋',
 '吊死' => '弔死',
-'吊死问孤' => '弔死問孤',
-'吊死问疾' => '弔死問疾',
 '吊民' => '弔民',
-'吊民伐罪' => '弔民伐罪',
 '吊祭' => '弔祭',
 '吊纸' => '弔紙',
 '吊者大悦' => '弔者大悅',
@@ -5503,28 +5084,23 @@ $zh2Hant = array(
 '吊膀子' => '弔膀子',
 '吊词' => '弔詞',
 '吊诡' => '弔詭',
-'吊诡矜奇' => '弔詭矜奇',
 '吊谎' => '弔謊',
 '吊贺迎送' => '弔賀迎送',
 '吊头' => '弔頭',
-'吊颈' => '弔頸',
 '吊鹤' => '弔鶴',
 '引斗' => '引鬥',
 '弘历' => '弘曆',
 '弘历史' => '弘歷史',
 '弱于' => '弱於',
 '弱水三千只取一瓢' => '弱水三千只取一瓢',
-'弱碱' => '弱鹼',
-'张三丰' => '張三丰',
 '張三丰' => '張三丰',
+'张三丰' => '張三丰',
 '张勋' => '張勳',
 '张乐于张徐' => '張樂于張徐',
-'强占' => '強佔',
 '强制作用' => '強制作用',
 '强奸' => '強姦',
 '强干' => '強幹',
 '强于' => '強於',
-'强碱' => '強鹼',
 '别口气' => '彆口氣',
 '别强' => '彆強',
 '别扭' => '彆扭',
@@ -5532,7 +5108,6 @@ $zh2Hant = array(
 '别气' => '彆氣',
 '弹子台' => '彈子檯',
 '弹珠台' => '彈珠檯',
-'弹药' => '彈藥',
 '汇刊' => '彙刊',
 '汇报' => '彙報',
 '汇整' => '彙整',
@@ -5542,37 +5117,40 @@ $zh2Hant = array(
 '汇辑' => '彙輯',
 '汇集' => '彙集',
 '形单影只' => '形單影隻',
-'形影相吊' => '形影相弔',
 '形于' => '形於',
 '彭于晏' => '彭于晏',
 '影后' => '影后',
-'仿佛' => '彷彿',
+'影相吊' => '影相弔',
 '役于' => '役於',
-'彼此克制' => '彼此剋制',
 '往日無仇' => '往日無讎',
 '往里' => '往裡',
-'往复' => '往複',
 '待复' => '待覆',
 '很干' => '很乾',
 '很凶' => '很兇',
+'很准' => '很準',
 '很丑' => '很醜',
 '律历志' => '律曆志',
 '后印' => '後印',
 '后台老板' => '後台老板',
 '后天' => '後天',
-'后庄' => '後庄',
 '后面店' => '後面店',
 '徐干' => '徐幹',
+'徒杠' => '徒杠',
 '徒托空言' => '徒託空言',
-'得克制' => '得剋制',
+'得到回复' => '得到回覆',
+'从仆' => '從僕',
+'从图里' => '從圖裡',
+'从山里' => '從山裡',
 '从于' => '從於',
 '从里到外' => '從裡到外',
 '从里向外' => '從裡向外',
+'御岳山' => '御嶽山',
+'御制' => '御製',
 '复始' => '復始',
 '复活节历表' => '復活節曆表',
+'复苏' => '復甦',
 '征人' => '徵人',
 '征令' => '徵令',
-'征占' => '徵佔',
 '征信' => '徵信',
 '征候' => '徵候',
 '征兆' => '徵兆',
@@ -5620,7 +5198,6 @@ $zh2Hant = array(
 '征集' => '徵集',
 '征风召雨' => '徵風召雨',
 '征验' => '徵驗',
-'德占' => '德佔',
 '心愿' => '心愿',
 '心于' => '心於',
 '心理' => '心理',
@@ -5719,7 +5296,6 @@ $zh2Hant = array(
 '心系英' => '心繫英',
 '心系茶' => '心繫茶',
 '心系万' => '心繫萬',
-'心系着' => '心繫著',
 '心系兰' => '心繫蘭',
 '心系西' => '心繫西',
 '心系贫' => '心繫貧',
@@ -5738,26 +5314,24 @@ $zh2Hant = array(
 '心系麦' => '心繫麥',
 '心系黄' => '心繫黃',
 '心脏' => '心臟',
+'心脏痳痹' => '心臟痲痺',
 '心荡' => '心蕩',
-'心药' => '心藥',
 '心里面' => '心裏面',
 '心里' => '心裡',
 '心长发短' => '心長髮短',
 '心余' => '心餘',
 '必须' => '必須',
-'忙并' => '忙併',
 '忙里' => '忙裡',
 '忙里偷闲' => '忙裡偷閒',
 '忠人之托' => '忠人之托',
 '忠仆' => '忠僕',
 '忠于' => '忠於',
 '快干' => '快乾',
-'快克制' => '快剋制',
 '快快当当' => '快快當當',
 '快冲' => '快衝',
-'怎么' => '怎麼',
-'怎么着' => '怎麼著',
 '怒于' => '怒於',
+'怒气冲天' => '怒氣衝天',
+'怒火冲天' => '怒火衝天',
 '怒发冲冠' => '怒髮衝冠',
 '思如泉涌' => '思如泉湧',
 '怠于' => '怠於',
@@ -5765,6 +5339,7 @@ $zh2Hant = array(
 '急冲而下' => '急衝而下',
 '性征' => '性徵',
 '性欲' => '性慾',
+'怨气冲天' => '怨氣衝天',
 '怪里怪气' => '怪裡怪氣',
 '怫郁' => '怫鬱',
 '恂栗' => '恂慄',
@@ -5772,35 +5347,42 @@ $zh2Hant = array(
 '恕乏价催' => '恕乏价催',
 '息交绝游' => '息交絕遊',
 '息谷' => '息穀',
-'恰才' => '恰纔',
-'悍药' => '悍藥',
 '悒郁' => '悒鬱',
 '悠悠荡荡' => '悠悠蕩蕩',
 '悠荡' => '悠蕩',
 '悠游' => '悠遊',
-'æ\82¨å\85\8bå\88¶' => 'æ\82¨å\89\8bå\88',
+'æ\82²å\87\84' => 'æ\82²æ\82½',
 '悲筑' => '悲筑',
 '悲郁' => '悲鬱',
-'闷着头儿干' => '悶著頭兒幹',
 '悸栗' => '悸慄',
+'凄厉' => '悽厲',
+'凄怨' => '悽怨',
+'凄惋' => '悽惋',
+'凄惶' => '悽惶',
+'凄恻' => '悽惻',
+'凄怆' => '悽愴',
+'凄惨' => '悽慘',
+'凄戾' => '悽戾',
+'凄然' => '悽然',
+'凄美' => '悽美',
+'凄苦' => '悽苦',
+'凄酸' => '悽酸',
 '情欲' => '情慾',
 '惇朴' => '惇樸',
+'恶仆' => '惡僕',
 '恶直丑正' => '惡直醜正',
 '恶斗' => '惡鬥',
-'想克制' => '想剋制',
 '惴栗' => '惴慄',
-'意占' => '意佔',
-'意克制' => '意剋制',
 '意大利面' => '意大利麵',
-'意面' => '意麵',
 '爱困' => '愛睏',
-'感冒药' => '感冒藥',
 '感于' => '感於',
 '愿朴' => '愿樸',
+'愿樸' => '愿樸',
 '愿而恭' => '愿而恭',
 '栗冽' => '慄冽',
 '栗栗' => '慄慄',
 '慌里慌张' => '慌裡慌張',
+'惨淡' => '慘澹',
 '庆吊' => '慶弔',
 '庆历' => '慶曆',
 '庆历史' => '慶歷史',
@@ -5817,10 +5399,10 @@ $zh2Hant = array(
 '凭折' => '憑摺',
 '凭准' => '憑準',
 '凭借' => '憑藉',
-'凭借着' => '憑藉著',
+'凭闲' => '憑閑',
+'宪法里' => '憲法裡',
 '恳托' => '懇託',
 '懈松' => '懈鬆',
-'应克制' => '應剋制',
 '应征' => '應徵',
 '应钟' => '應鐘',
 '懔栗' => '懍慄',
@@ -5829,7 +5411,6 @@ $zh2Hant = array(
 '蒙直' => '懞直',
 '惩忿窒欲' => '懲忿窒欲',
 '怀里' => '懷裡',
-'怀表' => '懷錶',
 '怀钟' => '懷鐘',
 '悬挂' => '懸掛',
 '悬梁' => '懸樑',
@@ -5839,44 +5420,44 @@ $zh2Hant = array(
 '恋恋不舍' => '戀戀不捨',
 '成于' => '成於',
 '成于思' => '成於思',
-'成药' => '成藥',
-'我克制' => '我剋制',
 '戬谷' => '戩穀',
 '截发' => '截髮',
 '战天斗地' => '戰天鬥地',
 '战栗' => '戰慄',
 '战斗' => '戰鬥',
-'戏彩娱亲' => '戲綵娛親',
 '戏里' => '戲裡',
+'戲院里' => '戲院里',
 '戴表元' => '戴表元',
-'戴表' => '戴錶',
 '戴发含齿' => '戴髮含齒',
 '房里' => '房裡',
 '所云' => '所云',
 '所云云' => '所云云',
-'所占' => '所佔',
 '所占卜' => '所占卜',
 '所占星' => '所占星',
 '所占算' => '所占算',
 '所托' => '所託',
 '扁拟谷盗虫' => '扁擬穀盜蟲',
-'手塚治虫' => '手塚治虫',
 '手冢治虫' => '手塚治虫',
+'手塚治虫' => '手塚治虫',
 '手折' => '手摺',
+'手表態' => '手表態',
 '手表态' => '手表態',
 '手表明' => '手表明',
+'手表決' => '手表決',
 '手表决' => '手表決',
 '手表演' => '手表演',
+'手表現' => '手表現',
 '手表现' => '手表現',
 '手表示' => '手表示',
+'手表達' => '手表達',
 '手表达' => '手表達',
 '手表露' => '手表露',
 '手表面' => '手表面',
 '手里剑' => '手裏劍',
 '手里' => '手裡',
 '手表' => '手錶',
+'手链' => '手鍊',
 '手松' => '手鬆',
-'才克制' => '才剋制',
 '才干休' => '才干休',
 '才干戈' => '才干戈',
 '才干扰' => '才干擾',
@@ -5890,25 +5471,24 @@ $zh2Hant = array(
 '扑打' => '扑打',
 '扑挞' => '扑撻',
 '打干哕' => '打乾噦',
-'打并' => '打併',
 '打出吊入' => '打出弔入',
 '打卡钟' => '打卡鐘',
 '打吨' => '打吨',
 '打干' => '打幹',
 '打拼' => '打拚',
 '打断发' => '打斷發',
+'打卤' => '打滷',
 '打谷' => '打穀',
-'打着钟' => '打著鐘',
-'打路庄板' => '打路莊板',
 '打钟' => '打鐘',
 '打风后' => '打風後',
 '打斗' => '打鬥',
 '托管国' => '托管國',
 '扛大梁' => '扛大樑',
-'æ\89\9e御' => '扞禦',
+'æ\8d\8d御' => '扞禦',
 '扯面' => '扯麵',
-'扶余国' => '扶餘國',
+'扶余' => '扶餘',
 '批准的' => '批准的',
+'批准确定' => '批准確定',
 '批复' => '批覆',
 '批注' => '批註',
 '批斗' => '批鬥',
@@ -5917,15 +5497,11 @@ $zh2Hant = array(
 '抑制剂' => '抑制劑',
 '抑郁' => '抑鬱',
 '抓奸' => '抓姦',
-'抓药' => '抓藥',
 '抓斗' => '抓鬥',
-'投药' => '投藥',
-'抗癌药' => '抗癌藥',
 '抗御' => '抗禦',
-'抗药' => '抗藥',
-'抗碱' => '抗鹼',
 '折向往' => '折向往',
 '折子戏' => '折子戲',
+'折子戲' => '折子戲',
 '折戟沈河' => '折戟沈河',
 '折冲' => '折衝',
 '披榛采兰' => '披榛採蘭',
@@ -5942,7 +5518,6 @@ $zh2Hant = array(
 '拆伙' => '拆夥',
 '拈须' => '拈鬚',
 '拉克施尔德钟' => '拉克施爾德鐘',
-'拉杆' => '拉杆',
 '拉纤' => '拉縴',
 '拉面上' => '拉面上',
 '拉面具' => '拉面具',
@@ -5975,6 +5550,7 @@ $zh2Hant = array(
 '括发' => '括髮',
 '拭干' => '拭乾',
 '拮据' => '拮据',
+'拳局' => '拳跼',
 '拼死拼活' => '拼死拼活',
 '拾沈' => '拾瀋',
 '拿下表' => '拿下錶',
@@ -5987,21 +5563,19 @@ $zh2Hant = array(
 '挂念' => '挂念',
 '挂号' => '挂號',
 '挂车' => '挂車',
-'挂面' => '挂面',
 '挌斗' => '挌鬥',
 '挑大梁' => '挑大樑',
 '挑斗' => '挑鬥',
 '振荡' => '振蕩',
-'捆扎' => '捆紮',
 '捉奸徒' => '捉奸徒',
 '捉奸细' => '捉奸細',
 '捉奸贼' => '捉奸賊',
 '捉奸党' => '捉奸黨',
 '捉奸' => '捉姦',
 '捉发' => '捉髮',
-'捍御' => '捍禦',
 '捏面人' => '捏麵人',
 '舍不得' => '捨不得',
+'舍入' => '捨入',
 '舍出' => '捨出',
 '舍去' => '捨去',
 '舍命' => '捨命',
@@ -6031,39 +5605,44 @@ $zh2Hant = array(
 '卷去' => '捲去',
 '卷图' => '捲圖',
 '卷土重来' => '捲土重來',
+'卷地' => '捲地',
 '卷尺' => '捲尺',
+'卷尾猴' => '捲尾猴',
 '卷心菜' => '捲心菜',
 '卷成' => '捲成',
 '卷曲' => '捲曲',
 '卷款' => '捲款',
 '卷毛' => '捲毛',
-'卷烟' => '捲煙',
+'卷烟盒' => '捲煙盒',
+'卷积云' => '捲積雲',
 '卷筒' => '捲筒',
 '卷帘' => '捲簾',
 '卷纸' => '捲紙',
 '卷缩' => '捲縮',
 '卷舌' => '捲舌',
-'卷舖盖' => '捲舖蓋',
-'卷菸' => '捲菸',
+'卷铺盖' => '捲舖蓋',
+'卷烟' => '捲菸',
+'卷叶蛾' => '捲葉蛾',
 '卷袖' => '捲袖',
 '卷走' => '捲走',
 '卷起' => '捲起',
 '卷轴' => '捲軸',
 '卷逃' => '捲逃',
-'卷铺盖' => '捲鋪蓋',
 '卷云' => '捲雲',
 '卷风' => '捲風',
-'卷发' => '捲髮',
+'卷发器' => '捲髮器',
 '捵面' => '捵麵',
 '捶炼' => '捶鍊',
 '扫荡' => '掃蕩',
+'授勋' => '授勳',
 '掌柜' => '掌柜',
 '排骨面' => '排骨麵',
 '挂名' => '掛名',
 '挂帘' => '掛帘',
 '挂历' => '掛曆',
-'æ\8c\82é\88\8e' => '掛鈎',
+'æ\8c\82é\92©' => '掛鈎',
 '挂钟' => '掛鐘',
+'挂面' => '掛麵',
 '采下' => '採下',
 '采伐' => '採伐',
 '采住' => '採住',
@@ -6101,15 +5680,14 @@ $zh2Hant = array(
 '采珠' => '採珠',
 '采生折割' => '採生折割',
 '采用' => '採用',
-'采的' => '採的',
 '采石' => '採石',
 '采砂场' => '採砂場',
 '采矿' => '採礦',
 '采种' => '採種',
 '采空区' => '採空區',
 '采空采穗' => '採空採穗',
-'采納' => '採納',
 '采纳' => '採納',
+'采納' => '採納',
 '采给' => '採給',
 '采花' => '採花',
 '采芹人' => '採芹人',
@@ -6138,7 +5716,6 @@ $zh2Hant = array(
 '采食' => '採食',
 '采盐' => '採鹽',
 '掣签' => '掣籤',
-'接着说' => '接著說',
 '控制' => '控制',
 '推情准理' => '推情準理',
 '推托之词' => '推托之詞',
@@ -6149,7 +5726,6 @@ $zh2Hant = array(
 '提摩太后书' => '提摩太後書',
 '插于' => '插於',
 '换签' => '換籤',
-'换药' => '換藥',
 '换只' => '換隻',
 '换发' => '換髮',
 '握发' => '握髮',
@@ -6158,20 +5734,17 @@ $zh2Hant = array(
 '揪发' => '揪髮',
 '揪须' => '揪鬚',
 '揭丑' => '揭醜',
+'揮手表' => '揮手表',
 '挥手表' => '揮手表',
-'挥杆' => '揮杆',
 '搋面' => '搋麵',
 '损于' => '損於',
 '搏斗' => '搏鬥',
-'摇摇荡荡' => '搖搖蕩蕩',
-'摇荡' => '搖蕩',
 '捣鬼吊白' => '搗鬼弔白',
-'搤肮拊背' => '搤肮拊背',
+'扼肮' => '搤肮',
+'扼肮拊背' => '搤肮拊背',
 '搬斗' => '搬鬥',
 '搭干铺' => '搭乾鋪',
 '搭伙' => '搭夥',
-'抢占' => '搶佔',
-'搽药' => '搽藥',
 '摧坚获丑' => '摧堅獲醜',
 '摭采' => '摭採',
 '摸棱' => '摸稜',
@@ -6183,6 +5756,7 @@ $zh2Hant = array(
 '折扇' => '摺扇',
 '折梯' => '摺梯',
 '折椅' => '摺椅',
+'折台' => '摺檯',
 '折叠' => '摺疊',
 '折痕' => '摺痕',
 '折篷' => '摺篷',
@@ -6192,7 +5766,6 @@ $zh2Hant = array(
 '捞干' => '撈乾',
 '捞面' => '撈麵',
 '撚须' => '撚鬚',
-'撞球台' => '撞球檯',
 '撞钟' => '撞鐘',
 '撞阵冲军' => '撞陣衝軍',
 '撤并' => '撤併',
@@ -6207,31 +5780,26 @@ $zh2Hant = array(
 '操作钟' => '操作鐘',
 '担仔面' => '擔仔麵',
 '担担面' => '擔擔麵',
-'担着' => '擔著',
-'担负着' => '擔負著',
 '据云' => '據云',
 '据干而窥井底' => '據榦而窺井底',
 '擢发' => '擢髮',
 '擦干' => '擦乾',
 '擦干净' => '擦乾淨',
-'擦药' => '擦藥',
 '拧干' => '擰乾',
 '摆钟' => '擺鐘',
 '摄制' => '攝製',
 '支干' => '支幹',
-'支杆' => '支杆',
+'支配欲' => '支配慾',
 '收获' => '收穫',
 '改征' => '改徵',
-'æ\94»å\8d ' => 'æ\94»ä½\94',
+'æ\94¹é\87\87' => 'æ\94¹æ\8e¡',
 '放蒙挣' => '放懞掙',
 '放荡' => '放蕩',
 '放松' => '放鬆',
-'æ\95\85äº\8bé\87\8c' => 'æ\95\85äº\8b裡',
+'æ\94¿æ\96\97' => 'æ\94¿é¬¥',
 '故云' => '故云',
 '敏于' => '敏於',
-'救药' => '救藥',
 '败于' => '敗於',
-'叙说着' => '敘說著',
 '教学钟' => '教學鐘',
 '教于' => '教於',
 '教范' => '教範',
@@ -6245,37 +5813,52 @@ $zh2Hant = array(
 '敬挽' => '敬輓',
 '敲扑' => '敲扑',
 '敲钟' => '敲鐘',
-'整庄' => '整莊',
 '整只' => '整隻',
 '整风后' => '整風後',
 '整发用品' => '整髮用品',
+'整出剧' => '整齣劇',
+'整出戏' => '整齣戲',
+'整出电影' => '整齣電影',
 '敌忾同仇' => '敵愾同讎',
-'敷药' => '敷藥',
+'数只包括' => '數只包括',
+'数只可' => '數只可',
+'数只含' => '數只含',
+'数只在' => '數只在',
+'数只应' => '數只應',
+'数只是' => '數只是',
+'数只会' => '數只會',
+'数只有' => '數只有',
+'数只比' => '數只比',
+'数只能' => '數只能',
+'数只限' => '數只限',
+'数只需' => '數只需',
+'数只须' => '數只須',
 '数天后' => '數天後',
 '数字钟' => '數字鐘',
 '数字钟表' => '數字鐘錶',
-'数学家' => '數學家',
 '数罪并罚' => '數罪併罰',
 '数与虏确' => '數與虜确',
+'数只' => '數隻',
 '文丑' => '文丑',
 '文汇报' => '文匯報',
+'文学志' => '文學誌',
 '文征明' => '文徵明',
 '文思泉涌' => '文思泉湧',
 '文采郁郁' => '文采郁郁',
-'斗转参横' => '斗轉參橫',
+'斗牛星' => '斗牛星',
 '斫雕为朴' => '斫雕為樸',
 '新井里美' => '新井里美',
 '新历' => '新曆',
 '新历史' => '新歷史',
 '新扎' => '新紮',
-'新庄' => '新莊',
-'新庄市' => '新莊市',
 '斲雕为朴' => '斲雕為樸',
 '断发' => '斷髮',
 '断发文身' => '斷髮文身',
 '方便面' => '方便麵',
 '方几' => '方几',
 '方向往' => '方向往',
+'方志恒' => '方志恒',
+'方法里' => '方法裡',
 '方志' => '方誌',
 '方面' => '方面',
 '于0' => '於0',
@@ -6307,7 +5890,6 @@ $zh2Hant = array(
 '于你' => '於你',
 '于八' => '於八',
 '于六' => '於六',
-'于克制' => '於剋制',
 '于前' => '於前',
 '于劣' => '於劣',
 '于勤' => '於勤',
@@ -6383,92 +5965,54 @@ $zh2Hant = array(
 '于震中' => '於震中',
 '于震前' => '於震前',
 '于震后' => '於震后',
-'于0' => '於0',
-'于1' => '於1',
-'于2' => '於2',
-'于3' => '於3',
-'于4' => '於4',
-'于5' => '於5',
-'于6' => '於6',
-'于7' => '於7',
-'于8' => '於8',
-'于9' => '於9',
 '施舍' => '施捨',
 '施于' => '施於',
 '施舍之道' => '施舍之道',
-'施药' => '施藥',
 '旁征博引' => '旁徵博引',
 '旁注' => '旁註',
 '旅游' => '旅遊',
 '旋干转坤' => '旋乾轉坤',
-'旋绕着' => '旋繞著',
 '旋回' => '旋迴',
 '族里' => '族裡',
-'旗杆' => '旗杆',
-'日占' => '日佔',
-'日子里' => '日子裡',
 '日心历表' => '日心曆表',
-'日晒' => '日晒',
 '日历' => '日曆',
 '日历史' => '日歷史',
+'日里' => '日裡',
 '日志' => '日誌',
 '早于' => '早於',
 '旱干' => '旱乾',
-'昆仑山' => '昆崙山',
+'升州' => '昇州',
 '升平' => '昇平',
 '升阳' => '昇陽',
 '昊天不吊' => '昊天不弔',
-'明天' => '明天',
 '明征' => '明徵',
 '明目张胆' => '明目張胆',
 '明窗净几' => '明窗淨几',
 '明范' => '明範',
-'明里' => '明裡',
-'易克制' => '易剋制',
+'明鉴' => '明鑑',
 '易于' => '易於',
-'星巴克' => '星巴克',
 '星历' => '星曆',
 '星期后' => '星期後',
 '星历史' => '星歷史',
-'星辰表' => '星辰錶',
-'春假里' => '春假裡',
-'春天里' => '春天裡',
-'春日里' => '春日裡',
-'春药' => '春藥',
 '春游' => '春遊',
 '春香斗学' => '春香鬥學',
-'æ\98¨å¤©' => 'æ\98¨å¤©',
+'æ\98¯å\8f\91å°\8f' => 'æ\98¯é«®å°\8f',
 '时钟' => '時鐘',
-'时间里' => '時間裡',
+'时间不准' => '時間不準',
 '晃荡' => '晃蕩',
-'晋升' => '晉陞',
-'晒干' => '晒乾',
-'晒伤' => '晒傷',
-'晒图' => '晒圖',
-'晒图纸' => '晒圖紙',
-'晒成' => '晒成',
-'晒晒' => '晒晒',
-'晒烟' => '晒煙',
-'晒种' => '晒種',
-'晒衣' => '晒衣',
-'晒黑' => '晒黑',
 '晚于' => '晚於',
 '晚钟' => '晚鐘',
 '晞发' => '晞髮',
 '晨钟' => '晨鐘',
 '普冬冬' => '普鼕鼕',
-'景致' => '景緻',
 '晾干' => '晾乾',
-'晕船药' => '暈船藥',
-'晕车药' => '暈車藥',
-'暑假里' => '暑假裡',
 '暗地里' => '暗地裡',
 '暗沟里' => '暗溝裡',
 '暗里' => '暗裡',
 '暗斗' => '暗鬥',
 '畅游' => '暢遊',
+'昵称' => '暱稱',
 '暴敛横征' => '暴斂橫徵',
-'暴晒' => '暴晒',
 '历元' => '曆元',
 '历命' => '曆命',
 '历始' => '曆始',
@@ -6482,24 +6026,22 @@ $zh2Hant = array(
 '历狱' => '曆獄',
 '历纪' => '曆紀',
 '历象' => '曆象',
-'æ\9b\9dæ\99\92' => 'æ\9b\9dæ\99\92',
+'æ\99\92å¹²' => 'æ\9b¬ä¹¾',
 '晒谷' => '曬穀',
 '曰云' => '曰云',
 '更仆难数' => '更僕難數',
+'更加注' => '更加注',
 '更签' => '更籤',
 '更钟' => '更鐘',
-'书呆子' => '書獃子',
 '书签' => '書籤',
 '书面' => '書面',
+'曹子里' => '曹子里',
 '曼谷人' => '曼谷人',
 '曾朴' => '曾樸',
 '最多' => '最多',
-'会上签署' => '會上簽署',
-'会上签订' => '會上簽訂',
-'会占' => '會佔',
-'会占卜' => '會占卜',
-'会干扰' => '會干擾',
+'最多只' => '最多只',
 '會干擾' => '會干擾',
+'会干扰' => '會干擾',
 '会干' => '會幹',
 '会吊' => '會弔',
 '会里' => '會裡',
@@ -6514,10 +6056,11 @@ $zh2Hant = array(
 '有只不' => '有只不',
 '有只允' => '有只允',
 '有只容' => '有只容',
-'有只採' => '有只採',
 '有只采' => '有只採',
+'有只採' => '有只採',
 '有只是' => '有只是',
 '有只用' => '有只用',
+'有回复' => '有回覆',
 '有够赞' => '有夠讚',
 '有征伐' => '有征伐',
 '有征战' => '有征戰',
@@ -6534,45 +6077,44 @@ $zh2Hant = array(
 '有余' => '有餘',
 '有发头陀寺' => '有髮頭陀寺',
 '服于' => '服於',
-'服药' => '服藥',
 '望了望' => '望了望',
 '望后石' => '望后石',
-'望着表' => '望著錶',
-'望着钟' => '望著鐘',
-'望着钟表' => '望著鐘錶',
 '朝乾夕惕' => '朝乾夕惕',
 '朝钟' => '朝鐘',
 '朦胧' => '朦朧',
 '蒙胧' => '朦朧',
 '木偶戏扎' => '木偶戲紮',
-'木杆' => '木杆',
 '木材干馏' => '木材乾餾',
 '木梁' => '木樑',
+'木签' => '木籤',
 '木制' => '木製',
 '木钟' => '木鐘',
 '未干' => '未乾',
 '未干涉' => '未干涉',
-'末药' => '末藥',
+'未干預' => '未干預',
+'未干预' => '未干預',
 '本征' => '本徵',
+'本出戏' => '本齣戲',
 '术赤' => '朮赤',
-'朱仑街' => '朱崙街',
 '朱庆余' => '朱慶餘',
 '朱理安历' => '朱理安曆',
 '朱理安历史' => '朱理安歷史',
-'æ\9d\86å­\90' => 'æ\9d\86å­\90',
+'æ\9c´å­\90é\87\8c' => 'æ\9c´å­\90é\87\8c',
 '李志喜' => '李志喜',
-'李連杰' => '李連杰',
 '李连杰' => '李連杰',
+'李連杰' => '李連杰',
 '材干' => '材幹',
-'村子里' => '村子裡',
-'村庄' => '村莊',
 '村落发' => '村落發',
 '村里' => '村裡',
-'村里长' => '村里長',
 '村里長' => '村里長',
+'村里长' => '村里長',
 '杜老志道' => '杜老誌道',
 '杞宋无征' => '杞宋無徵',
 '束发' => '束髮',
+'杠人' => '杠人',
+'杠梁' => '杠梁',
+'杠轂' => '杠轂',
+'杠毂' => '杠轂',
 '杯干' => '杯乾',
 '杯面' => '杯麵',
 '杰伦' => '杰倫',
@@ -6581,20 +6123,21 @@ $zh2Hant = array(
 '杰特' => '杰特',
 '东周钟' => '東周鐘',
 '东岳' => '東嶽',
+'東湖里' => '東湖里',
 '东冲西突' => '東衝西突',
 '东游' => '東遊',
 '松山庄' => '松山庄',
-'板着脸' => '板著臉',
 '板荡' => '板蕩',
 '林宏岳' => '林宏嶽',
+'林杰樑' => '林杰樑',
 '林郁方' => '林郁方',
 '林钟' => '林鐘',
+'林鹅峰' => '林鵞峰',
 '果干' => '果乾',
 '果子干' => '果子乾',
-'æ\9e\9dä¸\8då¾\97大äº\8eå¹²' => 'æ\9e\9dä¸\8då¾\97大æ\96¼æ¦¦',
+'æ\9e\9c累累' => 'æ\9e\9cçº\8dçº\8d',
 '枝干' => '枝幹',
 '枯干' => '枯乾',
-'台历' => '枱曆',
 '架钟' => '架鐘',
 '某只' => '某隻',
 '染指于' => '染指於',
@@ -6606,8 +6149,10 @@ $zh2Hant = array(
 '柱梁' => '柱樑',
 '柳诒征' => '柳詒徵',
 '栖栖皇皇' => '栖栖皇皇',
+'栗栖溪' => '栗栖溪',
 '校准' => '校準',
-'校仇' => '校讎',
+'校舍' => '校舍',
+'校仇学' => '校讎學',
 '核准的' => '核准的',
 '格于' => '格於',
 '格范' => '格範',
@@ -6615,11 +6160,14 @@ $zh2Hant = array(
 '格里高利历' => '格里高利曆',
 '格斗' => '格鬥',
 '桂圆干' => '桂圓乾',
-'桅杆' => '桅杆',
 '桌几' => '桌几',
 '桌历' => '桌曆',
 '桌历史' => '桌歷史',
+'桌游' => '桌遊',
 '桑干' => '桑乾',
+'杆枪' => '桿槍',
+'杆秤' => '桿秤',
+'杆菌' => '桿菌',
 '梁上君子' => '梁上君子',
 '条干' => '條幹',
 '梨干' => '梨乾',
@@ -6627,30 +6175,28 @@ $zh2Hant = array(
 '械系' => '械繫',
 '械斗' => '械鬥',
 '弃舍' => '棄捨',
+'棉里' => '棉裡',
 '棉制' => '棉製',
 '棒子面' => '棒子麵',
-'枣庄' => '棗莊',
 '栋梁' => '棟樑',
 '棫朴' => '棫樸',
 '森林里' => '森林裡',
 '棺材里' => '棺材裡',
 '植发' => '植髮',
+'椒面' => '椒麵',
 '椰枣干' => '椰棗乾',
 '楊雅筑' => '楊雅筑',
 '杨雅筑' => '楊雅筑',
-'楚庄问鼎' => '楚莊問鼎',
-'楚庄王' => '楚莊王',
-'楚庄绝缨' => '楚莊絕纓',
 '桢干' => '楨幹',
 '业余' => '業餘',
 '榨干' => '榨乾',
+'枪杆' => '槍桿',
 '杠杆' => '槓桿',
 '乐器钟' => '樂器鐘',
 '樊于期' => '樊於期',
 '梁上' => '樑上',
 '梁柱' => '樑柱',
 '樗里子' => '樗里子',
-'标杆' => '標杆',
 '标标致致' => '標標致致',
 '标准' => '標準',
 '标签' => '標籤',
@@ -6662,8 +6208,8 @@ $zh2Hant = array(
 '模范14棒' => '模范14棒',
 '模范21棒' => '模范21棒',
 '模范七棒' => '模范七棒',
-'模范三军' => '模范三軍',
 '模范三軍' => '模范三軍',
+'模范三军' => '模范三軍',
 '模范棒棒堂' => '模范棒棒堂',
 '模制' => '模製',
 '样范' => '樣範',
@@ -6687,39 +6233,32 @@ $zh2Hant = array(
 '朴陋' => '樸陋',
 '朴马' => '樸馬',
 '朴鲁' => '樸魯',
-'树干' => '樹榦',
+'树干' => '樹幹',
+'树林里' => '樹林裡',
 '树梁' => '樹樑',
 '桥梁' => '橋樑',
-'機械系' => '機械系',
 '机械系' => '機械系',
+'機械系' => '機械系',
 '机械表' => '機械錶',
 '机械钟' => '機械鐘',
 '机械钟表' => '機械鐘錶',
-'机绣' => '機繡',
 '横征暴敛' => '橫徵暴斂',
-'横杆' => '橫杆',
 '横梁' => '橫樑',
 '横冲' => '橫衝',
-'台子' => '檯子',
 '台布' => '檯布',
+'台历' => '檯曆',
 '台灯' => '檯燈',
 '台球' => '檯球',
-'台面' => '檯面',
+'台面上' => '檯面上',
 '柜台' => '櫃檯',
 '栉发工' => '櫛髮工',
-'栏杆' => '欄杆',
 '欲海难填' => '欲海難填',
 '欺蒙' => '欺矇',
 '歌后' => '歌后',
 '歌钟' => '歌鐘',
 '欧游' => '歐遊',
-'止咳药' => '止咳藥',
 '止于' => '止於',
-'止痛药' => '止痛藥',
-'止血药' => '止血藥',
-'正在叱咤' => '正在叱咤',
 '正官庄' => '正官庄',
-'正当着' => '正當著',
 '武丑' => '武丑',
 '武后' => '武后',
 '武斗' => '武鬥',
@@ -6737,7 +6276,7 @@ $zh2Hant = array(
 '残余' => '殘餘',
 '僵尸' => '殭屍',
 '殷师牛斗' => '殷師牛鬥',
-'æ\9d\80è\99«è\8d¯' => '殺è\9f²è\97¥',
+'æ®·é\89´' => 'æ®·é\91\91',
 '壳里' => '殼裡',
 '殿钟自鸣' => '殿鐘自鳴',
 '毁于' => '毀於',
@@ -6748,7 +6287,6 @@ $zh2Hant = array(
 '母丑' => '母醜',
 '每每只' => '每每只',
 '每只' => '每隻',
-'毒药' => '毒藥',
 '毗婆尸佛' => '毗婆尸佛',
 '毛坏' => '毛坏',
 '毛姜' => '毛薑',
@@ -6762,24 +6300,26 @@ $zh2Hant = array(
 '水准' => '水準',
 '水无怜奈' => '水無怜奈',
 '水里' => '水裡',
+'水里商工' => '水里商工',
 '水里溪' => '水里溪',
-'æ°´é\87\8cæµ\8a水溪' => '水里濁水溪',
+'æ°´é\87\8cæ¿\81水溪' => '水里濁水溪',
 '水里鄉' => '水里鄉',
-'水里乡' => '水里鄉',
-'水碱' => '水鹼',
+'水里高級商工' => '水里高級商工',
+'水里鳳林' => '水里鳳林',
+'水表' => '水錶',
 '永历' => '永曆',
 '永历史' => '永歷史',
 '永志不忘' => '永誌不忘',
 '求知欲' => '求知慾',
 '求签' => '求籤',
 '求道于盲' => '求道於盲',
-'æ±\97碱' => 'æ±\97é¹¼',
+'污è\94\91' => 'æ±\99è¡\8a',
 '池里' => '池裡',
-'污è\94\91' => '污è¡\8a',
+'汤å\8d¤' => '汤滷',
 '汲于' => '汲於',
 '决斗' => '決鬥',
+'沈海蓉' => '沈海蓉',
 '沈淀' => '沈澱',
-'沈着' => '沈著',
 '沈郁' => '沈鬱',
 '沉淀' => '沉澱',
 '沉郁' => '沉鬱',
@@ -6790,18 +6330,20 @@ $zh2Hant = array(
 '没梢干' => '沒梢幹',
 '没样范' => '沒樣範',
 '没准' => '沒準',
-'没药' => '沒藥',
 '冲冠发怒' => '沖冠髮怒',
+'冲天' => '沖天',
+'沙羡' => '沙羡',
 '沙里淘金' => '沙裡淘金',
 '河岳' => '河嶽',
 '河流汇集' => '河流匯集',
 '河里' => '河裡',
+'油泼面' => '油潑麵',
 '油斗' => '油鬥',
 '油面' => '油麵',
 '治愈' => '治癒',
 '沿溯' => '沿泝',
-'法占' => '法佔',
 '法自制' => '法自制',
+'法里,' => '法裡,',
 '泛游' => '泛遊',
 '泡制' => '泡製',
 '泡面' => '泡麵',
@@ -6814,6 +6356,7 @@ $zh2Hant = array(
 '泱郁' => '泱鬱',
 '泳气钟' => '泳氣鐘',
 '洄游' => '洄遊',
+'洋河大曲' => '洋河大麴',
 '洒家' => '洒家',
 '洒扫' => '洒掃',
 '洒水' => '洒水',
@@ -6827,12 +6370,13 @@ $zh2Hant = array(
 '洗练' => '洗鍊',
 '洗发' => '洗髮',
 '洛钟东应' => '洛鐘東應',
+'洞里' => '洞裡',
 '泄欲' => '洩慾',
 '洪范' => '洪範',
+'洪谷子' => '洪谷子',
 '洪适' => '洪适',
 '洪钟' => '洪鐘',
 '汹涌' => '洶湧',
-'派团参加' => '派團參加',
 '流征' => '流徵',
 '流于' => '流於',
 '流荡' => '流蕩',
@@ -6840,29 +6384,27 @@ $zh2Hant = array(
 '流风余韵' => '流風餘韻',
 '浩浩荡荡' => '浩浩蕩蕩',
 '浩荡' => '浩蕩',
-'浪琴表' => '浪琴錶',
 '浪荡' => '浪蕩',
 '浪游' => '浪遊',
 '浮于' => '浮於',
 '浮荡' => '浮蕩',
 '浮夸' => '浮誇',
 '浮松' => '浮鬆',
-'海上布雷' => '海上佈雷',
 '海干' => '海乾',
-'海淀山后' => '海淀山後',
 '海淀山後' => '海淀山後',
-'海湾布雷' => '海灣佈雷',
+'海淀山后' => '海淀山後',
+'浸卤' => '浸滷',
 '涂善妮' => '涂善妮',
 '涂坤' => '涂坤',
-'涂壯勳' => '涂壯勳',
 '涂壮勋' => '涂壯勳',
+'涂壯勳' => '涂壯勳',
 '涂天相' => '涂天相',
 '涂姓' => '涂姓',
 '涂序瑄' => '涂序瑄',
-'涂敏恒' => '涂敏恆',
 '涂敏恆' => '涂敏恆',
-'æ¶\82澤æ°\91' => 'æ¶\82澤æ°\91',
+'æ¶\82æ\95\8fæ\81\92' => 'æ¶\82æ\95\8fæ\81\86',
 '涂泽民' => '涂澤民',
+'涂澤民' => '涂澤民',
 '涂绍煃' => '涂紹煃',
 '涂羽卿' => '涂羽卿',
 '涂謹申' => '涂謹申',
@@ -6873,11 +6415,9 @@ $zh2Hant = array(
 '涂长望' => '涂長望',
 '涂鸿钦' => '涂鴻欽',
 '涂鴻欽' => '涂鴻欽',
-'消炎药' => '消炎藥',
-'消肿药' => '消腫藥',
-'液晶表' => '液晶錶',
 '涳蒙' => '涳濛',
 '涸干' => '涸乾',
+'凉席' => '涼蓆',
 '凉面' => '涼麵',
 '淋余土' => '淋餘土',
 '淑范' => '淑範',
@@ -6892,25 +6432,22 @@ $zh2Hant = array(
 '淫荡' => '淫蕩',
 '淬炼' => '淬鍊',
 '深山何处钟' => '深山何處鐘',
-'深渊里' => '深淵裡',
+'深山里' => '深山裡',
 '淳于' => '淳于',
 '淳朴' => '淳樸',
 '渊淳岳峙' => '淵淳嶽峙',
+'渊里' => '淵裡',
 '浅淀' => '淺澱',
 '清心寡欲' => '清心寡欲',
-'清汤挂面' => '清湯掛麵',
-'减肥药' => '減肥藥',
 '渠冲' => '渠衝',
-'测试' => '測試',
+'测不准' => '測不準',
 '港制' => '港製',
+'游牧民族' => '游牧民族',
 '游离' => '游離',
 '浑朴' => '渾樸',
 '浑个' => '渾箇',
-'凑合着' => '湊合著',
 '湖里' => '湖裡',
-'湘绣' => '湘繡',
 '湘累' => '湘纍',
-'湟潦生苹' => '湟潦生苹',
 '涌上' => '湧上',
 '涌来' => '湧來',
 '涌入' => '湧入',
@@ -6923,7 +6460,6 @@ $zh2Hant = array(
 '湮郁' => '湮鬱',
 '汤下面' => '湯下麵',
 '汤团' => '湯糰',
-'汤药' => '湯藥',
 '汤面' => '湯麵',
 '源于' => '源於',
 '准不准' => '準不準',
@@ -6966,16 +6502,37 @@ $zh2Hant = array(
 '滃郁' => '滃鬱',
 '滑借' => '滑藉',
 '汇丰' => '滙豐',
-'滷制' => '滷製',
-'滷面' => '滷麵',
+'卤了' => '滷了',
+'卤五花' => '滷五花',
+'卤味' => '滷味',
+'卤好' => '滷好',
+'卤子' => '滷子',
+'卤料' => '滷料',
+'卤水' => '滷水',
+'卤汁' => '滷汁',
+'卤湖' => '滷湖',
+'卤煮' => '滷煮',
+'卤牛' => '滷牛',
+'卤的' => '滷的',
+'卤肉' => '滷肉',
+'卤菜' => '滷菜',
+'卤蛋' => '滷蛋',
+'卤虾' => '滷蝦',
+'卤制' => '滷製',
+'卤豆' => '滷豆',
+'卤鸡' => '滷雞',
+'卤鸭' => '滷鴨',
+'卤鹅' => '滷鵝',
+'卤面' => '滷麵',
 '满拼自尽' => '滿拚自盡',
 '满满当当' => '滿滿當當',
 '满头洋发' => '滿頭洋髮',
 '漂荡' => '漂蕩',
 '漕挽' => '漕輓',
 '沤郁' => '漚鬱',
+'漠里' => '漠裡',
 '汉弥登钟' => '漢彌登鐘',
-'æ±\89å¼¥ç\99»é\92\9f表å\85¬å\8f¸' => 'æ¼¢å½\8cç\99»é\90\98é\8c¶å\85¬å\8f¸',
+'漫å\8d·' => '漫æ\8d²',
 '漫游' => '漫遊',
 '潜意识里' => '潛意識裡',
 '潜水表' => '潛水錶',
@@ -6998,7 +6555,7 @@ $zh2Hant = array(
 '淀谓之滓' => '澱謂之滓',
 '澹台' => '澹臺',
 '澹荡' => '澹蕩',
-'激荡' => '激蕩',
+'激斗' => '激鬥',
 '浓发' => '濃髮',
 '蒙汜' => '濛汜',
 '蒙蒙细雨' => '濛濛細雨',
@@ -7006,77 +6563,64 @@ $zh2Hant = array(
 '蒙松雨' => '濛鬆雨',
 '蒙鸿' => '濛鴻',
 '滨田里佳子' => '濱田里佳子',
-'泻药' => '瀉藥',
 '沈吉线' => '瀋吉線',
 '沈山线' => '瀋山線',
 '沈州' => '瀋州',
+'沈抚' => '瀋撫',
 '沈水' => '瀋水',
 '沈河' => '瀋河',
 '沈海' => '瀋海',
 '沈海铁路' => '瀋海鐵路',
 '沈阳' => '瀋陽',
+'泸州大曲' => '瀘州大麯',
 '潇洒' => '瀟洒',
 '弥山遍野' => '瀰山遍野',
 '弥漫' => '瀰漫',
-'弥漫着' => '瀰漫著',
 '弥弥' => '瀰瀰',
-'灌药' => '灌藥',
 '漓水' => '灕水',
 '漓江' => '灕江',
 '漓湘' => '灕湘',
 '漓然' => '灕然',
 '滩涂' => '灘涂',
+'滩席' => '灘蓆',
 '火并非' => '火並非',
 '火并' => '火併',
+'火山里' => '火山裡',
 '火拼' => '火拚',
 '火折子' => '火摺子',
-'火箭布雷' => '火箭佈雷',
 '火签' => '火籤',
-'火药' => '火藥',
 '灰蒙' => '灰濛',
 '灰蒙蒙' => '灰濛濛',
 '炆面' => '炆麵',
 '炒面' => '炒麵',
 '炮制' => '炮製',
-'炸药' => '炸藥',
 '炸酱面' => '炸醬麵',
 '为准' => '為準',
-'为着' => '為著',
+'为鉴' => '為鑑',
+'乌兹冲锋枪' => '烏茲衝鋒槍',
 '乌发' => '烏髮',
 '乌龙面' => '烏龍麵',
 '烘干' => '烘乾',
 '烘制' => '烘製',
 '烤干' => '烤乾',
-'烤晒' => '烤晒',
+'烤卤' => '烤滷',
 '焙干' => '焙乾',
 '无征不信' => '無徵不信',
 '无业游民' => '無業游民',
 '无梁楼盖' => '無樑樓蓋',
-'无法克制' => '無法剋制',
-'无药可救' => '無藥可救',
 '無言不仇' => '無言不讎',
 '无余' => '無餘',
-'然身死才数月耳' => '然身死纔數月耳',
-'炼药' => '煉藥',
 '炼制' => '煉製',
-'煎药' => '煎藥',
 '煎面' => '煎麵',
 '烟卷' => '煙捲',
-'烟斗丝' => '煙斗絲',
-'烟碱' => '煙鹼',
-'照占' => '照佔',
 '照入签' => '照入籤',
-'照准' => '照準',
 '照相干片' => '照相乾片',
 '煨干' => '煨乾',
 '煮面' => '煮麵',
 '熊杰' => '熊杰',
 '荧郁' => '熒鬱',
-'熬药' => '熬藥',
-'燉药' => '燉藥',
 '燎发' => '燎髮',
 '烧干' => '燒乾',
-'烧碱' => '燒鹼',
 '燕几' => '燕几',
 '燕巢于幕' => '燕巢於幕',
 '燕燕于飞' => '燕燕于飛',
@@ -7089,6 +6633,7 @@ $zh2Hant = array(
 '烫发' => '燙髮',
 '烫面' => '燙麵',
 '营干' => '營幹',
+'烩面' => '燴麵',
 '烬余' => '燼餘',
 '爆发指数' => '爆發指數',
 '争奇斗妍' => '爭奇鬥妍',
@@ -7100,26 +6645,25 @@ $zh2Hant = array(
 '争斗' => '爭鬥',
 '爰定祥历' => '爰定祥厤',
 '爽荡' => '爽蕩',
-'尔冬' => '爾冬陞',
+'尔冬' => '爾冬陞',
 '墙里' => '牆裡',
 '片言只语' => '片言隻語',
+'版图里' => '版圖裡',
 '牙签' => '牙籤',
-'牛肉面' => '牛肉麵',
 '牛只' => '牛隻',
 '物欲' => '物慾',
-'物理学家' => '物理學家',
+'抵牾' => '牴牾',
+'抵触' => '牴觸',
 '特别致' => '特别致',
 '特制住' => '特制住',
 '特制定' => '特制定',
 '特制止' => '特制止',
 '特制订' => '特制訂',
 '特征' => '特徵',
-'特效药' => '特效藥',
 '特制' => '特製',
 '牵一发' => '牽一髮',
 '牵系' => '牽繫',
 '荦确' => '犖确',
-'狂占' => '狂佔',
 '狂并潮' => '狂併潮',
 '狃于' => '狃於',
 '狄志杰' => '狄志杰',
@@ -7131,43 +6675,25 @@ $zh2Hant = array(
 '犹如钟' => '猶如鐘',
 '犹如钟表' => '猶如鐘錶',
 '呆串了皮' => '獃串了皮',
-'呆事' => '獃事',
-'呆人' => '獃人',
-'呆子' => '獃子',
-'呆性' => '獃性',
-'呆想' => '獃想',
-'呆憨呆' => '獃憨獃',
-'呆根' => '獃根',
-'呆气' => '獃氣',
-'呆滞' => '獃滯',
-'呆呆' => '獃獃',
-'呆痴' => '獃痴',
-'呆磕' => '獃磕',
-'呆等' => '獃等',
-'呆脑' => '獃腦',
-'呆着' => '獃著',
-'呆话' => '獃話',
-'呆头' => '獃頭',
 '狱里' => '獄裡',
 '奖杯' => '獎盃',
-'独占' => '獨佔',
-'独占鳌头' => '獨佔鰲頭',
+'独裁制' => '獨裁制',
 '独辟蹊径' => '獨闢蹊徑',
 '获匪其丑' => '獲匪其醜',
 '兽欲' => '獸慾',
 '献丑' => '獻醜',
-'率团参加' => '率團參加',
 '玉历' => '玉曆',
 '玉历史' => '玉歷史',
+'玉米面' => '玉米面',
 '王侯后' => '王侯后',
 '王后' => '王后',
 '王田里' => '王田里',
-'王庄' => '王莊',
+'王鉴' => '王鑑',
 '王余鱼' => '王餘魚',
 '珍肴异馔' => '珍肴異饌',
 '班里' => '班裡',
 '现于' => '現於',
-'球杆' => '球杆',
+'球台' => '球檯',
 '理一个发' => '理一個髮',
 '理一次发' => '理一次髮',
 '理个发' => '理個髮',
@@ -7175,6 +6701,7 @@ $zh2Hant = array(
 '理次发' => '理次髮',
 '理发' => '理髮',
 '琴钟' => '琴鐘',
+'瑞城里' => '瑞城里',
 '瑞征' => '瑞徵',
 '瑶签' => '瑤籤',
 '环游' => '環遊',
@@ -7182,13 +6709,11 @@ $zh2Hant = array(
 '甄后' => '甄后',
 '瓮安' => '甕安',
 '甚于' => '甚於',
-'甚么' => '甚麼',
 '甜水面' => '甜水麵',
 '甜面酱' => '甜麵醬',
 '生力面' => '生力麵',
 '生于' => '生於',
 '生殖洄游' => '生殖洄游',
-'生物学家' => '生物學家',
 '生物钟' => '生物鐘',
 '生发生' => '生發生',
 '生华发' => '生華髮',
@@ -7196,29 +6721,29 @@ $zh2Hant = array(
 '生锈' => '生鏽',
 '生发' => '生髮',
 '产卵洄游' => '產卵洄游',
-'用药' => '用藥',
+'苏醒' => '甦醒',
+'用法里' => '用法裡',
 '甩发' => '甩髮',
+'田子里' => '田子里',
 '田庄英雄' => '田庄英雄',
 '田谷' => '田穀',
-'田庄' => '田莊',
 '田里' => '田裡',
 '由余' => '由余',
 '由于' => '由於',
-'ç\94±è¡¨å\8f\8aé\87\8c' => 'ç\94±è¡¨å\8f\8a裡',
+'ç\94²è\83\84' => 'ç\94²å\86\91',
 '甲后路' => '甲后路',
-'ç\94·ä½£äºº' => 'ç\94·ä½£äºº',
+'ç\94µå½±å\90\8e' => 'ç\94µå½±å¾\8c',
 '男仆' => '男僕',
-'ç\94·ç\94¨è¡¨' => 'ç\94·ç\94¨é\8c',
+'ç\95\8cé\87\8c' => 'ç\95\8c裡',
 '畏于' => '畏於',
 '留发' => '留髮',
 '毕于' => '畢於',
 '毕业于' => '畢業於',
 '毕生发展' => '畢生發展',
-'画着' => '畫著',
-'当家才知柴米价' => '當家纔知柴米價',
 '当准' => '當準',
 '当当丁丁' => '當當丁丁',
-'当着' => '當著',
+'当当网' => '當當網',
+'叠席' => '疊蓆',
 '疏松' => '疏鬆',
 '疑系' => '疑係',
 '疑凶' => '疑兇',
@@ -7227,29 +6752,25 @@ $zh2Hant = array(
 '病征' => '病徵',
 '病愈' => '病癒',
 '病余' => '病餘',
-'症候群' => '症候群',
 '痊愈' => '痊癒',
 '痒疹' => '痒疹',
 '痒痒' => '痒痒',
-'痕迹' => '痕迹',
+'痳木' => '痳木',
+'痳疹' => '痳疹',
+'痳病' => '痳病',
+'痳痹' => '痳痺',
+'痳疯' => '痳瘋',
 '愈合' => '癒合',
-'症候' => '癥候',
-'症状' => '癥狀',
 '症结' => '癥結',
 '癸丑' => '癸丑',
 '发干' => '發乾',
-'发汗药' => '發汗藥',
 '发呆' => '發獃',
 '发蒙' => '發矇',
 '发签' => '發籤',
-'发庄' => '發莊',
-'发着' => '發著',
-'发表' => '發表',
-'發表' => '發表',
 '发松' => '發鬆',
 '发面' => '發麵',
 '白干' => '白乾',
-'ç\99½å\85\94ð¢­\8fè\8d¯' => 'ç\99½å\85\94æ\93£è\97¥',
+'ç\99½å­\90é\87\8c' => 'ç\99½å­\90é\87\8c',
 '白干儿' => '白干兒',
 '白术' => '白朮',
 '白朴' => '白樸',
@@ -7258,6 +6779,7 @@ $zh2Hant = array(
 '白皮松' => '白皮松',
 '白粉面' => '白粉麵',
 '白里透红' => '白裡透紅',
+'白面包青天' => '白面包青天',
 '白发' => '白髮',
 '白胡' => '白鬍',
 '白霉' => '白黴',
@@ -7266,10 +6788,9 @@ $zh2Hant = array(
 '百只夠' => '百只夠',
 '百只够' => '百只夠',
 '百只怕' => '百只怕',
-'百只足够' => '百只足夠',
 '百只足夠' => '百只足夠',
+'百只足够' => '百只足夠',
 '百周后' => '百周後',
-'百多只' => '百多隻',
 '百天后' => '百天後',
 '百年' => '百年',
 '百拙千丑' => '百拙千醜',
@@ -7278,14 +6799,15 @@ $zh2Hant = array(
 '百扎' => '百紮',
 '百花历' => '百花曆',
 '百花历史' => '百花歷史',
-'百药之长' => '百藥之長',
 '百炼' => '百鍊',
 '百只' => '百隻',
 '百余' => '百餘',
-'的克制' => '的剋制',
+'的回复' => '的回覆',
+'的图里' => '的圖裡',
+'的山里' => '的山裡',
 '的钟' => '的鐘',
-'的钟表' => '的鐘錶',
 '的长发' => '的長髮',
+'的发小' => '的髮小',
 '皆可作淀' => '皆可作澱',
 '皆准' => '皆準',
 '皇后' => '皇后',
@@ -7293,9 +6815,9 @@ $zh2Hant = array(
 '皇极历' => '皇極曆',
 '皇极历史' => '皇極歷史',
 '皇历史' => '皇歷史',
-'皇庄' => '皇莊',
 '皓发' => '皓髮',
 '皮制服' => '皮制服',
+'皮托管' => '皮托管',
 '皮肤' => '皮膚',
 '皮里春秋' => '皮裡春秋',
 '皮里阳秋' => '皮裡陽秋',
@@ -7310,13 +6832,12 @@ $zh2Hant = array(
 '盛赞' => '盛讚',
 '盗采' => '盜採',
 '盗钟' => '盜鐘',
-'尽量克制' => '盡量剋制',
 '监制' => '監製',
 '盘里' => '盤裡',
 '盘回' => '盤迴',
 '卢棱伽' => '盧稜伽',
+'荡气回肠' => '盪氣迴腸',
 '盲干' => '盲幹',
-'直接参与' => '直接參与',
 '直于' => '直於',
 '直冲' => '直衝',
 '相并' => '相併',
@@ -7329,10 +6850,8 @@ $zh2Hant = array(
 '相斗' => '相鬥',
 '看下表' => '看下錶',
 '看下钟' => '看下鐘',
+'看法里' => '看法裡',
 '看准' => '看準',
-'看着表' => '看著錶',
-'看着钟' => '看著鐘',
-'看着钟表' => '看著鐘錶',
 '看表面' => '看表面',
 '看表' => '看錶',
 '看钟' => '看鐘',
@@ -7342,19 +6861,16 @@ $zh2Hant = array(
 '眼帘' => '眼帘',
 '眼眶里' => '眼眶裡',
 '眼睛里' => '眼睛裡',
-'眼药' => '眼藥',
 '眼里' => '眼裡',
 '困乏' => '睏乏',
+'困了' => '睏了',
 '困倦' => '睏倦',
 '困觉' => '睏覺',
-'睡着了' => '睡著了',
 '睡游病' => '睡遊病',
 '瞄准' => '瞄準',
 '瞅下表' => '瞅下錶',
 '瞅下钟' => '瞅下鐘',
-'瞧着表' => '瞧著錶',
-'瞧着钟' => '瞧著鐘',
-'瞧着钟表' => '瞧著鐘錶',
+'瞎蒙' => '瞎矇',
 '了望' => '瞭望',
 '了然' => '瞭然',
 '了若指掌' => '瞭若指掌',
@@ -7365,28 +6881,24 @@ $zh2Hant = array(
 '蒙瞍' => '矇瞍',
 '蒙眬' => '矇矓',
 '蒙聩' => '矇聵',
-'蒙着' => '矇著',
-'蒙着锅儿' => '矇著鍋兒',
 '蒙头转' => '矇頭轉',
 '蒙骗' => '矇騙',
 '瞩托' => '矚託',
-'ç\9f\9cåº\84' => 'ç\9f\9cè\8e\8a',
+'ç\9f\9c夸' => 'ç\9f\9cèª\87',
 '短几' => '短几',
 '短于' => '短於',
 '短发' => '短髮',
 '矮几' => '矮几',
 '石几' => '石几',
-'石家庄' => '石家莊',
+'石杠' => '石杠',
 '石梁' => '石樑',
-'石英表' => '石英錶',
 '石英钟' => '石英鐘',
 '石英钟表' => '石英鐘錶',
-'石莼' => '石蓴',
-'石钟乳' => '石鐘乳',
-'石碱' => '石鹼',
-'矽谷' => '矽谷',
+'石钟' => '石鐘',
+'石钟山' => '石鐘山',
 '研制' => '研製',
 '砰当' => '砰噹',
+'破鉴' => '破鑑',
 '朱唇皓齿' => '硃唇皓齒',
 '朱批' => '硃批',
 '朱砂' => '硃砂',
@@ -7394,18 +6906,18 @@ $zh2Hant = array(
 '朱红色' => '硃紅色',
 '朱色' => '硃色',
 '朱谕' => '硃諭',
-'硫化碱' => '硫化鹼',
 '硬干' => '硬幹',
 '确瘠' => '确瘠',
 '碑志' => '碑誌',
 '碰钟' => '碰鐘',
+'确系' => '確係',
 '码表' => '碼錶',
 '磁制' => '磁製',
+'磨蝎' => '磨蝎',
 '磨制' => '磨製',
 '磨炼' => '磨鍊',
 '磬钟' => '磬鐘',
 '硗确' => '磽确',
-'碍难照准' => '礙難照准',
 '砻谷机' => '礱穀機',
 '示范' => '示範',
 '社里' => '社裡',
@@ -7415,44 +6927,44 @@ $zh2Hant = array(
 '神游' => '神遊',
 '神雕像' => '神雕像',
 '神雕' => '神鵰',
-'票庄' => '票莊',
 '祭吊' => '祭弔',
-'祭吊文' => '祭弔文',
 '禁欲' => '禁慾',
 '禁欲主义' => '禁欲主義',
-'禁药' => '禁藥',
 '祸于' => '禍於',
 '御侮' => '禦侮',
 '御寇' => '禦寇',
 '御寒' => '禦寒',
 '御敌' => '禦敵',
 '礼赞' => '禮讚',
-'禹余粮' => '禹餘糧',
 '禾谷' => '禾穀',
 '秃妃之发' => '禿妃之髮',
 '秃发' => '禿髮',
+'秀发动' => '秀發動',
+'秀发展' => '秀發展',
+'秀发布' => '秀發布',
+'秀发村' => '秀發村',
+'秀发现' => '秀發現',
+'秀发生' => '秀發生',
+'秀发表' => '秀發表',
+'秀发起' => '秀發起',
 '秀发' => '秀髮',
 '私下里' => '私下裡',
 '私欲' => '私慾',
 '私斗' => '私鬥',
-'秋假里' => '秋假裡',
-'秋天里' => '秋天裡',
-'秋日里' => '秋日裡',
-'秋裤' => '秋褲',
 '秋游' => '秋遊',
 '秋阴入井干' => '秋陰入井幹',
 '秋发' => '秋髮',
+'种丹妮' => '种丹妮',
 '种师中' => '种師中',
 '种师道' => '种師道',
 '种放' => '种放',
-'ç§\91学家' => 'ç§\91學家',
+'ç§\91å°¼äº\9aå\85\8bæ\9c\9f' => 'ç§\91å°¼äº\9eå\85\8bæ\9c\9f',
 '科斗' => '科斗',
 '科范' => '科範',
 '秒表明' => '秒表明',
 '秒表示' => '秒表示',
-'秒表' => '秒錶',
 '秒钟' => '秒鐘',
-'秦åº\84è¥\84ç\8e\8b' => '秦è\8e\8aè¥\84ç\8e\8b',
+'秤æ\9d\86' => '秤桿',
 '移祸于' => '移禍於',
 '稀松' => '稀鬆',
 '棱台' => '稜台',
@@ -7485,6 +6997,7 @@ $zh2Hant = array(
 '谷物' => '穀物',
 '谷皮' => '穀皮',
 '谷神' => '穀神',
+'谷禄' => '穀祿',
 '谷谷' => '穀穀',
 '谷米' => '穀米',
 '谷粒' => '穀粒',
@@ -7499,15 +7012,12 @@ $zh2Hant = array(
 '谷食' => '穀食',
 '穆罕默德历' => '穆罕默德曆',
 '穆罕默德历史' => '穆罕默德歷史',
-'积极参与' => '積极參与',
-'积极参加' => '積极參加',
 '积淀' => '積澱',
 '积谷' => '積穀',
+'积谷防饥' => '積穀防饑',
 '积郁' => '積鬱',
-'稳å\8d ' => 'ç©©ä½\94',
+'稳å\81¥ç\9a\84å\8f°é£\8e' => 'ç©©å\81¥ç\9a\84å\8f°é¢¨',
 '稳扎' => '穩紮',
-'空中布雷' => '空中佈雷',
-'空投布雷' => '空投佈雷',
 '空蒙' => '空濛',
 '空荡' => '空蕩',
 '空荡荡' => '空蕩蕩',
@@ -7515,39 +7025,52 @@ $zh2Hant = array(
 '空钟' => '空鐘',
 '空余' => '空餘',
 '窒欲' => '窒慾',
-'窗台上' => '窗台上',
-'窗帘' => '窗帘',
 '窗明几亮' => '窗明几亮',
 '窗明几净' => '窗明几淨',
-'çª\97å\8f°' => 'çª\97檯',
+'çª\97å¸\98' => 'çª\97ç°¾',
 '窝里' => '窩裡',
 '穷于' => '窮於',
 '穷追不舍' => '窮追不捨',
 '穷发' => '窮髮',
 '窃钟掩耳' => '竊鐘掩耳',
-'立后综' => '立后綜',
 '立于' => '立於',
 '立范' => '立範',
 '站干岸儿' => '站乾岸兒',
 '童仆' => '童僕',
-'端庄' => '端莊',
 '竞斗' => '競鬥',
 '竹几' => '竹几',
 '竹林之游' => '竹林之遊',
 '竹签' => '竹籤',
+'竹席' => '竹蓆',
 '竹制' => '竹製',
 '笑里藏刀' => '笑裡藏刀',
-'笨笨呆呆' => '笨笨呆呆',
+'第一出现' => '第一出現',
+'第一出現' => '第一出現',
+'第一出線' => '第一出線',
+'第一出线' => '第一出線',
+'第一出' => '第一齣',
+'第七出' => '第七齣',
+'第三出局' => '第三出局',
+'第三出' => '第三齣',
+'第九出' => '第九齣',
+'第二出线' => '第二出線',
+'第二出線' => '第二出線',
+'第二出' => '第二齣',
+'第五出局' => '第五出局',
+'第五出' => '第五齣',
+'第八出' => '第八齣',
+'第六出' => '第六齣',
 '第四出局' => '第四出局',
+'第四出' => '第四齣',
+'笔杆' => '筆桿',
 '笔秃墨干' => '筆禿墨乾',
-'笔试' => '筆試',
 '等于' => '等於',
 '笋干' => '筍乾',
 '筑前' => '筑前',
 '筑北' => '筑北',
 '筑州' => '筑州',
-'筑後' => '筑後',
 '筑后' => '筑後',
+'筑後' => '筑後',
 '筑波' => '筑波',
 '筑紫' => '筑紫',
 '筑肥' => '筑肥',
@@ -7556,7 +7079,6 @@ $zh2Hant = array(
 '筑陽' => '筑陽',
 '筑阳' => '筑陽',
 '答复' => '答覆',
-'答覆' => '答覆',
 '筵几' => '筵几',
 '个中原因' => '箇中原因',
 '个中奥妙' => '箇中奧妙',
@@ -7575,11 +7097,11 @@ $zh2Hant = array(
 '算历史' => '算歷史',
 '算准' => '算準',
 '算发' => '算髮',
-'管人吊脚儿事' => '管人弔腳兒事',
 '管制法' => '管制法',
 '管干' => '管幹',
 '箱里' => '箱裡',
 '节欲' => '節慾',
+'节目里' => '節目裡',
 '节余' => '節餘',
 '范例' => '範例',
 '范围' => '範圍',
@@ -7593,10 +7115,9 @@ $zh2Hant = array(
 '范金' => '範金',
 '简并' => '簡併',
 '简朴' => '簡樸',
-'简筑翎' => '簡筑翎',
 '簡筑翎' => '簡筑翎',
+'简筑翎' => '簡筑翎',
 '簸荡' => '簸蕩',
-'签着' => '簽著',
 '签幐' => '籤幐',
 '签押' => '籤押',
 '签条' => '籤條',
@@ -7604,8 +7125,10 @@ $zh2Hant = array(
 '吁天' => '籲天',
 '吁求' => '籲求',
 '吁请' => '籲請',
+'米沈' => '米瀋',
 '米谷' => '米穀',
-'粉拳绣腿' => '粉拳繡腿',
+'米团' => '米糰',
+'米面' => '米麵',
 '粉签子' => '粉籤子',
 '粗制' => '粗製',
 '精制伏' => '精制伏',
@@ -7624,29 +7147,25 @@ $zh2Hant = array(
 '粪秽蔑面' => '糞穢衊面',
 '团子' => '糰子',
 '系列里' => '系列裡',
-'系着' => '系著',
 '系里' => '系裡',
 '纪历' => '紀曆',
 '纪历史' => '紀歷史',
-'约占' => '約佔',
 '红后假说' => '紅后假說',
 '红绳系足' => '紅繩繫足',
-'红色长发' => '紅色長髮',
 '红钟' => '紅鐘',
-'红霉素' => '紅霉素',
 '红发' => '紅髮',
 '纡回' => '紆迴',
 '纡余' => '紆餘',
 '纡郁' => '紆鬱',
 '纳征' => '納徵',
 '纯朴' => '純樸',
-'纯碱' => '純鹼',
 '纸扎' => '紙紮',
+'素数里' => '素數裡',
 '素朴' => '素樸',
 '素发' => '素髮',
 '素面' => '素麵',
-'索马里' => '索馬里',
 '索馬里' => '索馬里',
+'索马里' => '索馬里',
 '索面' => '索麵',
 '紫姜' => '紫薑',
 '扎上' => '紮上',
@@ -7674,61 +7193,39 @@ $zh2Hant = array(
 '结伴同游' => '結伴同遊',
 '结伙' => '結夥',
 '结扎' => '結紮',
-'结彩' => '結綵',
 '结余' => '結餘',
 '结发' => '結髮',
-'绝对参照' => '絕對參照',
 '绝于' => '絕於',
 '绞干' => '絞乾',
 '络腮胡' => '絡腮鬍',
 '給我干脆' => '給我干脆',
 '给我干脆' => '給我干脆',
 '给于' => '給於',
-'丝来线去' => '絲來線去',
-'丝布' => '絲布',
 '丝恩发怨' => '絲恩髮怨',
-'丝板' => '絲板',
-'丝瓜布' => '絲瓜布',
-'丝绒布' => '絲絨布',
-'丝线' => '絲線',
-'丝织厂' => '絲織廠',
-'丝虫' => '絲蟲',
 '丝制' => '絲製',
 '丝发' => '絲髮',
 '绑扎' => '綁紮',
-'綑扎' => '綑紮',
-'经有云' => '經有云',
+'捆扎' => '綑紮',
 '經有云' => '經有云',
+'经有云' => '經有云',
+'综合征' => '綜合徵',
 '绿发' => '綠髮',
-'绸缎庄' => '綢緞莊',
 '维系' => '維繫',
 '绾发' => '綰髮',
+'纲鉴' => '綱鑑',
 '网里' => '網裡',
 '网志' => '網誌',
 '网游' => '網遊',
-'彩带' => '綵帶',
-'彩排' => '綵排',
-'彩楼' => '綵樓',
-'彩牌楼' => '綵牌樓',
-'彩球' => '綵球',
-'彩绸' => '綵綢',
-'彩线' => '綵線',
-'彩船' => '綵船',
-'彩衣' => '綵衣',
 '紧致' => '緊緻',
-'紧绷' => '緊繃',
-'紧绷绷' => '緊繃繃',
-'紧绷着' => '緊繃著',
 '紧追不舍' => '緊追不捨',
 '绪余' => '緒餘',
-'ç·\9då\87¶' => 'ç·\9då\85\87',
+'线å\9b¾é\87\8c' => 'ç·\9aå\9c\96裡',
 '缉凶' => '緝兇',
-'编余' => '編余',
 '编制法' => '編制法',
 '编采' => '編採',
 '编码表' => '編碼表',
-'编制' => '編製',
 '编钟' => '編鐘',
+'编余' => '編餘',
 '编发' => '編髮',
 '缓征' => '緩徵',
 '缓冲' => '緩衝',
@@ -7743,36 +7240,25 @@ $zh2Hant = array(
 '纵欲' => '縱慾',
 '纤夫' => '縴夫',
 '纤手' => '縴手',
+'纤绳' => '縴繩',
+'总数只' => '總數只',
+'总数里' => '總數裡',
 '总裁制' => '總裁制',
 '繁复' => '繁複',
 '繁钟' => '繁鐘',
-'绷住' => '繃住',
-'绷子' => '繃子',
-'绷带' => '繃帶',
 '绷扒吊拷' => '繃扒弔拷',
-'绷紧' => '繃緊',
-'绷脸' => '繃臉',
-'绷着' => '繃著',
-'绷着脸' => '繃著臉',
-'绷着脸儿' => '繃著臉兒',
-'绷开' => '繃開',
 '穗帏飘井干' => '繐幃飄井幹',
 '绕梁' => '繞樑',
-'绣像' => '繡像',
-'绣口' => '繡口',
-'绣得' => '繡得',
-'绣户' => '繡戶',
-'绣房' => '繡房',
-'绣毯' => '繡毯',
-'绣球' => '繡球',
-'绣的' => '繡的',
-'绣花' => '繡花',
-'绣衣' => '繡衣',
-'绣起' => '繡起',
-'绣阁' => '繡閣',
-'绣鞋' => '繡鞋',
 '绘制' => '繪製',
-'系上' => '繫上',
+'系上。' => '繫上。',
+'系上了' => '繫上了',
+'系上安全' => '繫上安全',
+'系上红' => '繫上紅',
+'系上丝' => '繫上絲',
+'系上绳' => '繫上繩',
+'系上头' => '繫上頭',
+'系上黑' => '繫上黑',
+'系上,' => '繫上,',
 '系世' => '繫世',
 '系到' => '繫到',
 '系囚' => '繫囚',
@@ -7782,68 +7268,71 @@ $zh2Hant = array(
 '系恋' => '繫戀',
 '系于' => '繫於',
 '系于一发' => '繫於一髮',
+'系着' => '繫着',
 '系结' => '繫結',
 '系紧' => '繫緊',
 '系绳' => '繫繩',
 '系累' => '繫纍',
+'系船' => '繫船',
 '系辞' => '繫辭',
+'系鞋带' => '繫鞋帶',
 '系风捕影' => '繫風捕影',
+'继承制' => '繼承制',
 '累囚' => '纍囚',
 '累堆' => '纍堆',
 '累瓦结绳' => '纍瓦結繩',
 '累绁' => '纍紲',
 '累臣' => '纍臣',
 '缠斗' => '纏鬥',
-'才则' => '纔則',
-'才可容颜十五余' => '纔可容顏十五餘',
-'才得两年' => '纔得兩年',
-'才此' => '纔此',
 '坛子' => '罈子',
 '坛坛罐罐' => '罈罈罐罐',
 '坛騞' => '罈騞',
 '置于' => '置於',
 '置言成范' => '置言成範',
-'骂着' => '罵著',
 '罢于' => '罷於',
+'罗马历' => '羅馬曆',
+'罗马历代' => '羅馬歷代',
+'罗马历史' => '羅馬歷史',
 '羁系' => '羈繫',
-'美占' => '美佔',
-'美仑' => '美崙',
+'美容美发' => '美容美髮',
 '美于' => '美於',
 '美制' => '美製',
 '美丑' => '美醜',
-'美发' => '美髮',
+'美发学' => '美髮學',
+'美发师' => '美髮師',
+'美发店' => '美髮店',
+'美发业' => '美髮業',
+'美发沙龙' => '美髮沙龍',
+'美发馆' => '美髮館',
 '群丑' => '群醜',
 '羡余' => '羨餘',
-'义占' => '義佔',
 '义仆' => '義僕',
-'义庄' => '義莊',
+'義联' => '義联',
+'翁子里' => '翁子里',
 '翕辟' => '翕闢',
 '翱游' => '翱遊',
 '翻涌' => '翻湧',
-'翻云覆雨' => '翻雲覆雨',
 '翻松' => '翻鬆',
+'老么' => '老么',
 '老干' => '老乾',
 '老仆' => '老僕',
 '老干部' => '老幹部',
 '老蒙' => '老懞',
 '老于' => '老於',
 '老爷钟' => '老爺鐘',
-'老庄' => '老莊',
 '老姜' => '老薑',
 '老板' => '老闆',
 '老面皮' => '老面皮',
 '考征' => '考徵',
-'考试' => '考試',
-'而克制' => '而剋制',
 '耍斗' => '耍鬥',
-'耐碱' => '耐鹼',
-'耕佣' => '耕傭',
 '耕获' => '耕穫',
 '耳余' => '耳餘',
 '耿于' => '耿於',
 '聊斋志异' => '聊齋志異',
+'圣人历' => '聖人曆',
 '圣后' => '聖后',
 '聘雇' => '聘僱',
+'聚药雄蕊' => '聚葯雄蕊',
 '闻风后' => '聞風後',
 '联系' => '聯繫',
 '听于' => '聽於',
@@ -7852,6 +7341,7 @@ $zh2Hant = array(
 '肉丝面' => '肉絲麵',
 '肉羹面' => '肉羹麵',
 '肉松' => '肉鬆',
+'肉面' => '肉麵',
 '肚里' => '肚裡',
 '肝脏' => '肝臟',
 '肝郁' => '肝鬱',
@@ -7859,9 +7349,8 @@ $zh2Hant = array(
 '肥筑方言' => '肥筑方言',
 '肴馔' => '肴饌',
 '肺脏' => '肺臟',
-'è\83\83è\8d¯' => 'è\83\83è\97¥',
+'è\83\83è\84\8f' => 'è\83\83è\87\9f',
 '胃里' => '胃裡',
-'背向着' => '背向著',
 '背地里' => '背地裡',
 '胎发' => '胎髮',
 '胜肽' => '胜肽',
@@ -7870,7 +7359,7 @@ $zh2Hant = array(
 '胡子昂' => '胡子昂',
 '胡朴安' => '胡樸安',
 '胡里胡涂' => '胡裡胡塗',
-'è\83½å\85\8bå\88¶' => 'è\83½å\89\8bå\88',
+'è\83°è\84\8f' => 'è\83°è\87\9f',
 '能干休' => '能干休',
 '能干戈' => '能干戈',
 '能干扰' => '能干擾',
@@ -7885,6 +7374,7 @@ $zh2Hant = array(
 '脊梁' => '脊樑',
 '脱谷机' => '脫穀機',
 '脱发' => '脫髮',
+'脺脏' => '脺臟',
 '脾脏' => '脾臟',
 '腊之以为饵' => '腊之以為餌',
 '腊味' => '腊味',
@@ -7893,16 +7383,20 @@ $zh2Hant = array(
 '肾脏' => '腎臟',
 '腐干' => '腐乾',
 '腐余' => '腐餘',
+'腑脏' => '腑臟',
 '腕表' => '腕錶',
-'脑子里' => '腦子裡',
 '脑干' => '腦幹',
 '腰里' => '腰裡',
 '脚注' => '腳註',
 '脚炼' => '腳鍊',
-'膏药' => '膏藥',
-'肤发' => '膚髮',
+'肠脏' => '腸臟',
 '胶卷' => '膠捲',
 '膨松' => '膨鬆',
+'膵脏' => '膵臟',
+'臊子面' => '臊子麵',
+'脏器' => '臟器',
+'脏胸' => '臟胸',
+'脏腑' => '臟腑',
 '臣仆' => '臣僕',
 '卧游' => '臥遊',
 '臧谷亡羊' => '臧穀亡羊',
@@ -7924,26 +7418,30 @@ $zh2Hant = array(
 '自制的能' => '自制的能',
 '自制能力' => '自制能力',
 '自于' => '自於',
+'自然数里' => '自然數裡',
 '自制' => '自製',
 '自觉自愿' => '自覺自愿',
+'自夸' => '自誇',
+'臭气冲天' => '臭氣衝天',
 '至多' => '至多',
+'至多只' => '至多只',
 '至于' => '至於',
 '致于' => '致於',
+'台佟' => '臺佟',
+'台静农' => '臺靜農',
 '臻于' => '臻於',
 '舂谷' => '舂穀',
-'与克制' => '與剋制',
-'兴致' => '興緻',
+'舉手表' => '舉手表',
 '举手表' => '舉手表',
-'举手表决' => '舉手表決',
-'旧庄' => '舊庄',
+'舊庄' => '舊庄',
 '旧历' => '舊曆',
 '旧历史' => '舊歷史',
-'旧药' => '舊藥',
 '旧游' => '舊遊',
 '旧表' => '舊錶',
 '旧钟' => '舊鐘',
 '旧钟表' => '舊鐘錶',
 '舌干唇焦' => '舌乾唇焦',
+'舍入口' => '舍入口',
 '舒卷' => '舒捲',
 '舞后' => '舞后',
 '航海历' => '航海曆',
@@ -7954,31 +7452,25 @@ $zh2Hant = array(
 '船钟' => '船鐘',
 '船只' => '船隻',
 '舰只' => '艦隻',
-'良药' => '良藥',
 '色欲' => '色慾',
-'è\89·å\90\8e' => 'è\89·å\90\8e',
+'è\89²é\95¿å\8f\91' => 'è\89²é\95·é«®',
 '艳后' => '艷后',
+'艷后' => '艷后',
 '艸木丰丰' => '艸木丰丰',
-'芍药' => '芍藥',
 '芒果干' => '芒果乾',
-'花拳绣腿' => '花拳繡腿',
 '花卷' => '花捲',
 '花盆里' => '花盆裡',
-'花词选' => '花菴詞選',
-'è\8a±è\8d¯' => 'è\8a±è\97¥',
+'花词选' => '花菴詞選',
+'è\8a±è\8d¯' => 'è\8a±è\91¯',
 '花钟' => '花鐘',
 '花马吊嘴' => '花馬弔嘴',
 '花哄' => '花鬨',
 '苑里' => '苑裡',
-'苛性碱' => '苛性鹼',
 '若干' => '若干',
 '苦干' => '苦幹',
-'苦药' => '苦藥',
 '苦里' => '苦裡',
 '苦斗' => '苦鬥',
 '苎麻' => '苧麻',
-'英占' => '英佔',
-'苹萦' => '苹縈',
 '茂都淀' => '茂都澱',
 '范文同' => '范文同',
 '范文正公' => '范文正公',
@@ -7990,57 +7482,34 @@ $zh2Hant = array(
 '范文藤' => '范文藤',
 '范文虎' => '范文虎',
 '范登堡' => '范登堡',
-'范贤惠' => '范賢惠',
 '范賢惠' => '范賢惠',
+'范贤惠' => '范賢惠',
+'茅于轼' => '茅于軾',
+'茅于軾' => '茅于軾',
 '茶几' => '茶几',
-'茶庄' => '茶莊',
 '茶余' => '茶餘',
 '茶面' => '茶麵',
 '草丛里' => '草叢裡',
 '草荐' => '草荐',
-'草药' => '草藥',
+'草席' => '草蓆',
 '荐居' => '荐居',
 '荐臻' => '荐臻',
-'è\8d\90é¥\91' => '荐饑',
+'è\8d\90饥' => '荐饑',
 '荷花淀' => '荷花澱',
-'庄上' => '莊上',
-'庄主' => '莊主',
-'庄周' => '莊周',
-'庄员' => '莊員',
-'庄严' => '莊嚴',
-'庄园' => '莊園',
-'庄士顿道' => '莊士頓道',
-'庄子' => '莊子',
-'庄客' => '莊客',
-'庄家' => '莊家',
-'庄户' => '莊戶',
-'庄房' => '莊房',
-'庄敬' => '莊敬',
-'庄田' => '莊田',
-'庄稼' => '莊稼',
-'庄舄越吟' => '莊舄越吟',
 '庄里' => '莊裡',
-'庄语' => '莊語',
-'庄农' => '莊農',
-'庄重' => '莊重',
-'庄院' => '莊院',
-'庄骚' => '莊騷',
 '茎干' => '莖幹',
 '莜面' => '莜麵',
 '莽荡' => '莽蕩',
-'菌丝体' => '菌絲體',
 '菜干' => '菜乾',
+'菜坛' => '菜罈',
 '菜肴' => '菜肴',
 '菠棱菜' => '菠稜菜',
 '菠萝干' => '菠蘿乾',
 '华严钟' => '華嚴鐘',
-'华发' => '華髮',
-'菸碱' => '菸鹼',
 '萬一只' => '萬一只',
 '万一只' => '萬一只',
 '万个' => '萬個',
 '万周后' => '萬周後',
-'万多只' => '萬多隻',
 '万天后' => '萬天後',
 '万年' => '萬年',
 '万年历' => '萬年曆',
@@ -8056,27 +7525,21 @@ $zh2Hant = array(
 '落发' => '落髮',
 '叶叶琴' => '葉叶琴',
 '叶叶琹' => '葉叶琹',
-'着儿' => '著兒',
-'着克制' => '著剋制',
-'着书立说' => '著書立說',
-'着色软体' => '著色軟體',
-'着重指出' => '著重指出',
-'着录' => '著錄',
-'着录规则' => '著錄規則',
-'葡占' => '葡佔',
 '葡萄干' => '葡萄乾',
 '董氏封发' => '董氏封髮',
 '葫芦里卖甚么药' => '葫蘆裡賣甚麼藥',
-'蒙汗药' => '蒙汗藥',
-'蒙庄' => '蒙莊',
 '蒙雾露' => '蒙霧露',
 '蒜发' => '蒜髮',
+'蒲席' => '蒲蓆',
+'蒸干' => '蒸乾',
+'蒸制' => '蒸製',
 '苍术' => '蒼朮',
 '苍发' => '蒼髮',
 '苍郁' => '蒼鬱',
 '蓄发' => '蓄髮',
 '蓄胡' => '蓄鬍',
 '蓄须' => '蓄鬚',
+'席子' => '蓆子',
 '蓊郁' => '蓊鬱',
 '蓬蓬松松' => '蓬蓬鬆鬆',
 '蓬发' => '蓬髮',
@@ -8084,12 +7547,13 @@ $zh2Hant = array(
 '参绥' => '蔘綏',
 '葱郁' => '蔥鬱',
 '荞麦面' => '蕎麥麵',
+'芸薹' => '蕓薹',
 '荡来荡去' => '蕩來蕩去',
 '荡女' => '蕩女',
 '荡妇' => '蕩婦',
 '荡寇' => '蕩寇',
 '荡平' => '蕩平',
-'荡气回肠' => '蕩氣迴腸',
+'荡气' => '蕩氣',
 '荡涤' => '蕩滌',
 '荡漾' => '蕩漾',
 '荡然' => '蕩然',
@@ -8100,6 +7564,7 @@ $zh2Hant = array(
 '萧参' => '蕭蔘',
 '薄幸' => '薄倖',
 '薄干' => '薄幹',
+'姜啤' => '薑啤',
 '姜是老的辣' => '薑是老的辣',
 '姜末' => '薑末',
 '姜桂' => '薑桂',
@@ -8115,110 +7580,61 @@ $zh2Hant = array(
 '姜饼' => '薑餅',
 '姜黄' => '薑黃',
 '薙发' => '薙髮',
-'薝蔔' => '薝蔔',
+'薝卜' => '薝蔔',
+'熏心' => '薰心',
+'熏染' => '薰染',
+'熏沐' => '薰沐',
+'熏习' => '薰習',
+'熏陶' => '薰陶',
+'熏风' => '薰風',
+'熏香' => '薰香',
 '苧悴' => '薴悴',
 '薴烯' => '薴烯',
 '苧烯' => '薴烯',
 '借以' => '藉以',
 '借助' => '藉助',
+'借口' => '藉口',
 '借寇兵' => '藉寇兵',
 '借手' => '藉手',
+'借故' => '藉故',
 '借机' => '藉機',
 '借此' => '藉此',
 '借由' => '藉由',
 '借箸代筹' => '藉箸代籌',
-'借着' => '藉著',
+'借词' => '藉詞',
 '借资' => '藉資',
 '蓝淀' => '藍澱',
 '藏于' => '藏於',
 '藏历' => '藏曆',
 '藏历史' => '藏歷史',
 '藏蒙歌儿' => '藏矇歌兒',
+'藤席' => '藤蓆',
 '藤制' => '藤製',
-'药丸' => '藥丸',
-'药典' => '藥典',
-'药到命除' => '藥到命除',
-'药到病除' => '藥到病除',
-'药剂' => '藥劑',
-'药力' => '藥力',
-'药包' => '藥包',
-'药名' => '藥名',
-'药味' => '藥味',
-'药品' => '藥品',
-'药商' => '藥商',
-'药单' => '藥單',
-'药婆' => '藥婆',
-'药学' => '藥學',
-'药害' => '藥害',
-'药专' => '藥專',
-'药局' => '藥局',
-'药师' => '藥師',
-'药店' => '藥店',
-'药厂' => '藥廠',
-'药引' => '藥引',
-'药性' => '藥性',
-'药房' => '藥房',
-'药效' => '藥效',
-'药方' => '藥方',
-'药材' => '藥材',
-'药棉' => '藥棉',
-'药检局' => '藥檢局',
-'药水' => '藥水',
-'药油' => '藥油',
-'药液' => '藥液',
-'药渣' => '藥渣',
-'药片' => '藥片',
-'药物' => '藥物',
-'药王' => '藥王',
-'药理' => '藥理',
-'药瓶' => '藥瓶',
-'药用' => '藥用',
-'药皂' => '藥皂',
-'药盒' => '藥盒',
-'药石' => '藥石',
-'药科' => '藥科',
-'药箱' => '藥箱',
 '药签' => '藥籤',
-'药粉' => '藥粉',
-'药糖' => '藥糖',
-'药线' => '藥線',
-'药罐' => '藥罐',
-'药膏' => '藥膏',
-'药舖' => '藥舖',
-'药茶' => '藥茶',
-'药草' => '藥草',
-'药行' => '藥行',
-'药贩' => '藥販',
-'药费' => '藥費',
-'药酒' => '藥酒',
-'药医学系' => '藥醫學系',
-'药量' => '藥量',
-'药针' => '藥針',
-'药铺' => '藥鋪',
-'药头' => '藥頭',
-'药饵' => '藥餌',
 '药面儿' => '藥麵兒',
 '苏昆' => '蘇崑',
-'è\95´å\90«ç\9d\80' => 'è\98\8aå\90«è\91\97',
-'è\95´æ¶µç\9d\80' => 'è\98\8a涵è\91\97',
+'è\8b\8få´\91' => 'è\98\87å´\91',
+'è\8b¹æ\9e\9c' => 'è\98\8bæ\9e\9c',
 '苹果干' => '蘋果乾',
-'萝蔔干' => '蘿蔔乾',
+'萝卜' => '蘿蔔',
+'萝卜干' => '蘿蔔乾',
 '虎须' => '虎鬚',
 '虎斗' => '虎鬥',
+'虚夸' => '虛誇',
 '号志' => '號誌',
 '虫部' => '虫部',
 '蚊动牛斗' => '蚊動牛鬥',
 '蛇发女妖' => '蛇髮女妖',
-'蛔虫药' => '蛔蟲藥',
 '蜂后' => '蜂后',
 '蜂涌' => '蜂湧',
 '蜂准' => '蜂準',
 '蜜里调油' => '蜜裡調油',
 '蜡月' => '蜡月',
 '蜡祭' => '蜡祭',
+'蝎虎' => '蝎虎',
 '蝎蝎螫螫' => '蝎蝎螫螫',
 '蝎谮' => '蝎譖',
-'è\99®è\9d¨相吊' => '蟣蝨相弔',
+'è\99®è\99±相吊' => '蟣蝨相弔',
 '蛏干' => '蟶乾',
 '蚁后' => '蟻后',
 '蟻后' => '蟻后',
@@ -8229,8 +7645,6 @@ $zh2Hant = array(
 '行事历' => '行事曆',
 '行事历史' => '行事歷史',
 '行凶' => '行兇',
-'行凶前' => '行兇前',
-'行凶後' => '行兇後',
 '行于' => '行於',
 '行百里者半于九十' => '行百里者半於九十',
 '卫后庄公' => '衛後莊公',
@@ -8253,7 +7667,7 @@ $zh2Hant = array(
 '冲堂' => '衝堂',
 '冲坚陷阵' => '衝堅陷陣',
 '冲压' => '衝壓',
-'冲天' => '衝天',
+'冲天炮' => '衝天炮',
 '冲州撞府' => '衝州撞府',
 '冲心' => '衝心',
 '冲掉' => '衝掉',
@@ -8267,11 +7681,11 @@ $zh2Hant = array(
 '冲激' => '衝激',
 '冲然' => '衝然',
 '冲盹' => '衝盹',
+'冲着' => '衝着',
 '冲破' => '衝破',
 '冲程' => '衝程',
 '冲突' => '衝突',
 '冲线' => '衝線',
-'冲着' => '衝著',
 '冲要' => '衝要',
 '冲起' => '衝起',
 '冲车' => '衝車',
@@ -8279,38 +7693,38 @@ $zh2Hant = array(
 '冲过' => '衝過',
 '冲量' => '衝量',
 '冲锋' => '衝鋒',
+'冲锋枪' => '衝鋒鎗',
 '冲陷' => '衝陷',
 '冲头阵' => '衝頭陣',
 '冲风' => '衝風',
-'衣绣昼行' => '衣繡晝行',
-'表征' => '表徵',
-'表里' => '表裡',
-'表面' => '表面',
+'衡鉴' => '衡鑑',
 '衷于' => '衷於',
+'袋杆' => '袋桿',
 '袋里' => '袋裡',
 '袋表' => '袋錶',
 '袖里' => '袖裡',
+'被废后' => '被廢後',
+'被系上' => '被繫上',
 '被里' => '被裡',
-'被复' => '被複',
-'被覆着' => '被覆著',
+'被夸' => '被誇',
 '被发佯狂' => '被髮佯狂',
 '被发入山' => '被髮入山',
 '被发左衽' => '被髮左衽',
 '被发缨冠' => '被髮纓冠',
 '被发阳狂' => '被髮陽狂',
+'夹衣' => '袷衣',
+'夹裙' => '袷裙',
 '裁并' => '裁併',
 '裁制' => '裁製',
 '里手' => '裏手',
+'里水镇' => '裏水鎮',
 '里海' => '裏海',
 '补于' => '補於',
-'补药' => '補藥',
-'补血药' => '補血藥',
 '补注' => '補註',
 '装折' => '裝摺',
 '里勾外连' => '裡勾外連',
 '里屋' => '裡屋',
 '里层' => '裡層',
-'里布' => '裡布',
 '里带' => '裡帶',
 '里弦' => '裡弦',
 '里应外合' => '裡應外合',
@@ -8337,22 +7751,17 @@ $zh2Hant = array(
 '制成' => '製成',
 '制法' => '製法',
 '制浆' => '製漿',
-'制为' => '製為',
 '制片' => '製片',
 '制版' => '製版',
 '制程' => '製程',
 '制糖' => '製糖',
 '制纸' => '製紙',
 '制药' => '製藥',
-'å\88¶è¡¨' => '製表',
+'å\88¶è¡£' => '製衣',
 '制造' => '製造',
 '制革' => '製革',
 '制鞋' => '製鞋',
 '制盐' => '製鹽',
-'复仞年如' => '複仞年如',
-'复以百万' => '複以百萬',
-'复位' => '複位',
-'复信' => '複信',
 '复元音' => '複元音',
 '复函数' => '複函數',
 '复分数' => '複分數',
@@ -8362,11 +7771,7 @@ $zh2Hant = array(
 '复利' => '複利',
 '复印' => '複印',
 '复句' => '複句',
-'复合' => '複合',
-'复名' => '複名',
-'复员' => '複員',
 '复壁' => '複壁',
-'复壮' => '複壯',
 '复姓' => '複姓',
 '复字键' => '複字鍵',
 '复审' => '複審',
@@ -8374,19 +7779,14 @@ $zh2Hant = array(
 '复对数' => '複對數',
 '复平面' => '複平面',
 '复式' => '複式',
-'复复' => '複復',
 '复数' => '複數',
 '复本' => '複本',
 '复查' => '複查',
-'复核' => '複核',
-'复检' => '複檢',
 '复次' => '複次',
 '复比' => '複比',
 '复决' => '複決',
 '复流' => '複流',
 '复测' => '複測',
-'复亩珍' => '複畝珍',
-'复发' => '複發',
 '复目' => '複目',
 '复眼' => '複眼',
 '复种' => '複種',
@@ -8409,38 +7809,24 @@ $zh2Hant = array(
 '复钱' => '複錢',
 '复阅' => '複閱',
 '复杂' => '複雜',
-'复电' => '複電',
 '复音' => '複音',
 '复韵' => '複韻',
 '褒赞' => '褒讚',
 '衬里' => '襯裡',
-'西占' => '西佔',
 '西周钟' => '西周鐘',
+'西昆' => '西崑',
 '西岳' => '西嶽',
-'西晒' => '西晒',
 '西历' => '西曆',
 '西历史' => '西歷史',
+'西湖里' => '西湖里',
 '西米谷' => '西米谷',
-'西药' => '西藥',
 '西西里' => '西西里',
 '西谷米' => '西谷米',
 '西游' => '西遊',
-'要占' => '要佔',
-'要克制' => '要剋制',
-'要占卜' => '要占卜',
 '要自制' => '要自制',
 '要冲' => '要衝',
-'要么' => '要麼',
-'覆亡' => '覆亡',
-'覆命' => '覆命',
-'覆巢之下无完卵' => '覆巢之下無完卵',
-'覆水难收' => '覆水難收',
-'覆没' => '覆沒',
-'覆着' => '覆著',
-'覆盖' => '覆蓋',
-'覆盖着' => '覆蓋著',
-'覆辙' => '覆轍',
-'覆雨翻云' => '覆雨翻雲',
+'复信' => '覆信',
+'复核' => '覆核',
 '见于' => '見於',
 '见棱见角' => '見稜見角',
 '见素抱朴' => '見素抱樸',
@@ -8449,12 +7835,11 @@ $zh2Hant = array(
 '視如寇仇' => '視如寇讎',
 '视于' => '視於',
 '观采' => '觀採',
+'角抵' => '角牴',
 '角落发' => '角落發',
 '角落里' => '角落裡',
 '觚棱' => '觚稜',
 '解雇' => '解僱',
-'解痛药' => '解痛藥',
-'解药' => '解藥',
 '解铃仍须系铃人' => '解鈴仍須繫鈴人',
 '解铃还须系铃人' => '解鈴還須繫鈴人',
 '解发佯狂' => '解髮佯狂',
@@ -8470,7 +7855,7 @@ $zh2Hant = array(
 '托交' => '託交',
 '托人' => '託人',
 '托付' => '託付',
-'托儿所' => '託兒所',
+'托儿' => '託兒',
 '托古讽今' => '託古諷今',
 '托名' => '託名',
 '托命' => '託命',
@@ -8494,7 +7879,6 @@ $zh2Hant = array(
 '托附' => '託附',
 '许愿起经' => '許愿起經',
 '许虬' => '許虬',
-'诉说着' => '訴說著',
 '注上' => '註上',
 '注册' => '註冊',
 '注失' => '註失',
@@ -8509,17 +7893,18 @@ $zh2Hant = array(
 '注译' => '註譯',
 '注销' => '註銷',
 '注:' => '註:',
+'证谏' => '証諫',
 '评断发' => '評斷發',
 '评注' => '評註',
+'评鉴' => '評鑑',
 '词干' => '詞幹',
 '词汇' => '詞彙',
 '词余' => '詞餘',
 '询于' => '詢於',
 '询于刍荛' => '詢於芻蕘',
-'试药' => '試藥',
 '试制' => '試製',
-'诗云' => '詩云',
 '詩云' => '詩云',
+'诗云' => '詩云',
 '诗赞' => '詩讚',
 '诗钟' => '詩鐘',
 '诗余' => '詩餘',
@@ -8528,9 +7913,44 @@ $zh2Hant = array(
 '详征博引' => '詳徵博引',
 '详注' => '詳註',
 '诔赞' => '誄讚',
+'夸下海口' => '誇下海口',
+'夸了' => '誇了',
+'夸他' => '誇他',
+'夸你' => '誇你',
+'夸来夸去' => '誇來誇去',
+'夸别' => '誇別',
+'夸功' => '誇功',
+'夸胜道强' => '誇勝道強',
+'夸口' => '誇口',
+'夸嘴' => '誇嘴',
 '夸多斗靡' => '誇多鬥靡',
+'夸大' => '誇大',
+'夸她' => '誇她',
+'夸官' => '誇官',
+'夸张' => '誇張',
+'夸强说会' => '誇強說會',
+'夸得' => '誇得',
+'夸成' => '誇成',
+'夸我' => '誇我',
+'夸才' => '誇才',
+'夸毗' => '誇毗',
+'夸海口' => '誇海口',
+'夸奖' => '誇獎',
+'夸示' => '誇示',
+'夸称' => '誇稱',
+'夸耀' => '誇耀',
+'夸能' => '誇能',
 '夸能斗智' => '誇能鬥智',
+'夸诩' => '誇詡',
+'夸夸' => '誇誇',
+'夸夸其谈' => '誇誇其談',
+'夸诞' => '誇誕',
+'夸说' => '誇說',
 '夸赞' => '誇讚',
+'夸起' => '誇起',
+'夸辩' => '誇辯',
+'夸过' => '誇過',
+'夸饰' => '誇飾',
 '志哀' => '誌哀',
 '志喜' => '誌喜',
 '志庆' => '誌慶',
@@ -8539,12 +7959,14 @@ $zh2Hant = array(
 '诱奸' => '誘姦',
 '语云' => '語云',
 '语汇' => '語彙',
-'语有云' => '語有云',
 '語有云' => '語有云',
+'语有云' => '語有云',
+'语法里' => '語法裡',
+'语里' => '語裡',
 '诚征' => '誠徵',
 '诚朴' => '誠樸',
 '诬蔑' => '誣衊',
-'说着' => '說著',
+'说不准' => '說不準',
 '谁干的' => '誰幹的',
 '课征' => '課徵',
 '课余' => '課餘',
@@ -8553,19 +7975,25 @@ $zh2Hant = array(
 '调表' => '調錶',
 '调钟表' => '調鐘錶',
 '谈征' => '談徵',
-'请参阅' => '請參閱',
 '请君入瓮' => '請君入甕',
-'请求' => '請求',
 '请托' => '請託',
 '咨询' => '諮詢',
 '诸余' => '諸餘',
 '谋干' => '謀幹',
-'谢绝参观' => '謝絕參觀',
 '谢华后' => '謝華后',
 '谬采虚声' => '謬採虛聲',
 '谬赞' => '謬讚',
 '謷丑' => '謷醜',
+'謹愿' => '謹愿',
+'谨愿' => '謹愿',
 '谨于心' => '謹於心',
+'哗噪' => '譁噪',
+'哗嚣' => '譁囂',
+'哗然' => '譁然',
+'哗众' => '譁眾',
+'哗笑' => '譁笑',
+'哗变' => '譁變',
+'噪诈' => '譟詐',
 '警世钟' => '警世鐘',
 '警报钟' => '警報鐘',
 '警示钟' => '警示鐘',
@@ -8574,21 +8002,15 @@ $zh2Hant = array(
 '护发' => '護髮',
 '变征' => '變徵',
 '变丑' => '變醜',
-'变脏' => '變髒',
-'变髒' => '變髒',
-'仇問' => '讎問',
-'仇夷' => '讎夷',
-'仇校' => '讎校',
 '仇正' => '讎正',
 '仇隙' => '讎隙',
 '赞不绝口' => '讚不絕口',
 '赞佩' => '讚佩',
 '赞呗' => '讚唄',
-'赞叹不已' => '讚嘆不已',
+'赞叹' => '讚嘆',
 '赞扬' => '讚揚',
 '赞乐' => '讚樂',
 '赞歌' => '讚歌',
-'赞叹' => '讚歎',
 '赞美' => '讚美',
 '赞羡' => '讚羨',
 '赞许' => '讚許',
@@ -8597,45 +8019,43 @@ $zh2Hant = array(
 '赞赏' => '讚賞',
 '赞辞' => '讚辭',
 '赞颂' => '讚頌',
+'谷子敬' => '谷子敬',
 '豆干' => '豆乾',
 '豆腐干' => '豆腐乾',
-'竖着' => '豎著',
 '竖起脊梁' => '豎起脊梁',
 '丰滨' => '豐濱',
 '丰滨乡' => '豐濱鄉',
+'丰台' => '豐臺',
+'豔后' => '豔后',
 '象征' => '象徵',
-'象征着' => '象徵著',
-'负债累累' => '負債纍纍',
 '贪欲' => '貪慾',
 '贵价' => '貴价',
+'貴子里' => '貴子里',
 '贵干' => '貴幹',
 '贵征' => '貴徵',
-'買凶' => '買兇',
 '买凶' => '買兇',
 '买断发' => '買斷發',
-'费占' => '費佔',
 '贻范' => '貽範',
-'资金占用' => '資金占用',
-'贾后' => '賈后',
 '賈后' => '賈后',
+'贾后' => '賈后',
+'赈饥' => '賑饑',
 '赏赞' => '賞讚',
-'贤后' => '賢后',
 '賢后' => '賢后',
+'贤后' => '賢后',
 '卖断发' => '賣斷發',
-'卖呆' => '賣獃',
+'赋范' => '賦范',
+'賦范' => '賦范',
+'质数里' => '質數裡',
 '质朴' => '質樸',
 '赌后' => '賭后',
 '赌台' => '賭檯',
 '赌斗' => '賭鬥',
-'賸余' => '賸餘',
 '购并' => '購併',
 '购买欲' => '購買慾',
 '赢余' => '贏餘',
 '赤术' => '赤朮',
 '赤绳系足' => '赤繩繫足',
-'赤霉素' => '赤霉素',
 '走回路' => '走回路',
-'起复' => '起複',
 '起哄' => '起鬨',
 '超级杯' => '超級盃',
 '赶制' => '趕製',
@@ -8643,16 +8063,19 @@ $zh2Hant = array(
 '赵威后' => '趙威后',
 '赵惠后' => '趙惠后',
 '赵治勋' => '趙治勳',
-'赵庄' => '趙莊',
 '趱干' => '趲幹',
 '足于' => '足於',
 '跌扑' => '跌扑',
-'è·\8cè\8d¡' => 'è·\8cè\95©',
+'è·¯å\9b¾é\87\8c' => 'è·¯å\9c\96裡',
 '路签' => '路籤',
 '路面' => '路面',
 '跳梁小丑' => '跳樑小丑',
 '跳荡' => '跳蕩',
-'跳表' => '跳錶',
+'局蹐' => '跼蹐',
+'局躅' => '跼躅',
+'踡局' => '踡跼',
+'逾闲' => '踰閑',
+'蹒局' => '蹣跼',
 '蹪于' => '蹪於',
 '蹭棱子' => '蹭稜子',
 '躁郁' => '躁鬱',
@@ -8662,29 +8085,29 @@ $zh2Hant = array(
 '车库里' => '車庫裡',
 '车站里' => '車站裡',
 '车里' => '車裡',
+'车里雅宾斯克' => '車里雅賓斯克',
 '轨范' => '軌範',
-'军队克制' => '軍隊剋制',
 '轩辟' => '軒闢',
 '较于' => '較於',
 '挽曲' => '輓曲',
 '挽歌' => '輓歌',
-'挽聯' => '輓聯',
 '挽联' => '輓聯',
-'挽詞' => '輓詞',
 '挽词' => '輓詞',
 '挽诗' => '輓詩',
-'挽詩' => '輓詩',
+'挽车' => '輓車',
+'挽输' => '輓輸',
+'挽辞' => '輓辭',
 '轻于' => '輕於',
 '轻轻松松' => '輕輕鬆鬆',
 '轻松' => '輕鬆',
 '轮奸' => '輪姦',
 '轮回' => '輪迴',
 '转向往' => '轉向往',
-'转台' => '轉檯',
 '转托' => '轉託',
 '转斗千里' => '轉鬥千里',
 '辛丑' => '辛丑',
 '辟谷' => '辟穀',
+'辣面' => '辣麵',
 '办公台' => '辦公檯',
 '辞汇' => '辭彙',
 '辫发' => '辮髮',
@@ -8693,11 +8116,8 @@ $zh2Hant = array(
 '农历史' => '農歷史',
 '农民历' => '農民曆',
 '农民历史' => '農民歷史',
-'农庄' => '農莊',
-'农药' => '農藥',
 '迂回' => '迂迴',
 '近日無仇' => '近日無讎',
-'近日里' => '近日裡',
 '返朴' => '返樸',
 '迥然回异' => '迥然迴異',
 '迫于' => '迫於',
@@ -8708,12 +8128,13 @@ $zh2Hant = array(
 '回形夹' => '迴形夾',
 '回文' => '迴文',
 '回旋' => '迴旋',
-'回流' => '迴流',
 '回环' => '迴環',
 '回纹针' => '迴紋針',
 '回绕' => '迴繞',
 '回翔' => '迴翔',
 '回肠' => '迴腸',
+'回肠荡气' => '迴腸盪氣',
+'回荡' => '迴蕩',
 '回诵' => '迴誦',
 '回路' => '迴路',
 '回转' => '迴轉',
@@ -8723,14 +8144,10 @@ $zh2Hant = array(
 '回音' => '迴音',
 '回响' => '迴響',
 '回风' => '迴風',
-'迷幻药' => '迷幻藥',
 '迷于' => '迷於',
 '迷蒙' => '迷濛',
-'迷药' => '迷藥',
-'迷魂药' => '迷魂藥',
 '追凶' => '追兇',
 '退伙' => '退夥',
-'退烧药' => '退燒藥',
 '退藏于密' => '退藏於密',
 '逆钟' => '逆鐘',
 '逆钟向' => '逆鐘向',
@@ -8738,41 +8155,50 @@ $zh2Hant = array(
 '逋发' => '逋髮',
 '逍遥游' => '逍遙遊',
 '透辟' => '透闢',
+'这出世' => '這出世',
+'这出乎' => '這出乎',
+'这出人' => '這出人',
+'这出版' => '這出版',
+'这出现' => '這出現',
+'这出生' => '這出生',
+'这出色' => '這出色',
+'这出身' => '這出身',
+'这出道' => '這出道',
 '这只不' => '這只不',
+'这只不过' => '這只不過',
 '这只允' => '這只允',
+'这只包括' => '這只包括',
 '这只可' => '這只可',
 '这只在' => '這只在',
 '这只容' => '這只容',
+'这只应' => '這只應',
 '这只采' => '這只採',
 '这只是' => '這只是',
 '这只会' => '這只會',
+'这只比' => '這只比',
 '这只用' => '這只用',
 '这只能' => '這只能',
+'这只限' => '這只限',
 '这只需' => '這只需',
+'这只须' => '這只須',
 '这伙人' => '這夥人',
 '这里' => '這裡',
 '这钟' => '這鐘',
 '这只' => '這隻',
-'这么' => '這麼',
-'这么着' => '這麼著',
+'这出' => '這齣',
 '通奸' => '通姦',
 '通心面' => '通心麵',
 '通于' => '通於',
 '通历' => '通曆',
 '通历史' => '通歷史',
-'通庄' => '通莊',
-'逞凶鬥狠' => '逞兇鬥狠',
+'通鉴' => '通鑑',
 '逞凶斗狠' => '逞兇鬥狠',
 '造钟' => '造鐘',
-'造钟表' => '造鐘錶',
-'造曲' => '造麯',
 '连三并四' => '連三併四',
-'连占' => '連佔',
 '连采' => '連採',
 '连系' => '連繫',
-'连庄' => '連莊',
 '周游世界' => '週遊世界',
-'进占' => '進佔',
+'进两出' => '進兩出',
 '進制' => '進制',
 '进制' => '進制',
 '逼并' => '逼併',
@@ -8783,7 +8209,7 @@ $zh2Hant = array(
 '游伴' => '遊伴',
 '游侠' => '遊俠',
 '游冶' => '遊冶',
-'游刃有余' => '遊刃有餘',
+'游刃' => '遊刃',
 '游动' => '遊動',
 '游园' => '遊園',
 '游子' => '遊子',
@@ -8802,16 +8228,16 @@ $zh2Hant = array(
 '游历' => '遊歷',
 '游民' => '遊民',
 '游河' => '遊河',
+'游牧' => '遊牧',
 '游猎' => '遊獵',
 '游玩' => '遊玩',
-'游荡' => '遊盪',
 '游目骋怀' => '遊目騁懷',
 '游程' => '遊程',
 '游丝' => '遊絲',
 '游兴' => '遊興',
 '游船' => '遊船',
 '游艇' => '遊艇',
-'游荡不归' => '遊蕩不歸',
+'游荡' => '遊蕩',
 '游艺' => '遊藝',
 '游行' => '遊行',
 '游街' => '遊街',
@@ -8821,24 +8247,20 @@ $zh2Hant = array(
 '游资' => '遊資',
 '游走' => '遊走',
 '游踪' => '遊蹤',
+'游轮' => '遊輪',
 '游逛' => '遊逛',
 '游错' => '遊錯',
-'游离份子' => '遊離份子',
-'游离票' => '遊離票',
 '游骑兵' => '遊騎兵',
 '游魂' => '遊魂',
 '过于' => '過於',
-'过杆' => '過杆',
 '过水面' => '過水麵',
 '道范' => '道範',
 '逊于' => '遜於',
 '递回' => '遞迴',
-'远县才至' => '遠縣纔至',
 '远游' => '遠遊',
 '遨游' => '遨遊',
 '遮丑' => '遮醜',
 '迁于' => '遷於',
-'选手' => '選手',
 '选手表明' => '選手表明',
 '选手表决' => '選手表決',
 '选手表现' => '選手表現',
@@ -8846,54 +8268,56 @@ $zh2Hant = array(
 '选手表达' => '選手表達',
 '遗传钟' => '遺傳鐘',
 '遗范' => '遺範',
-'é\81\97迹' => 'é\81ºè¿¹',
+'é\81\97迹' => 'é\81ºè¹\9f',
 '辽沈' => '遼瀋',
-'避孕药' => '避孕藥',
 '邀天之幸' => '邀天之倖',
-'还占' => '還佔',
 '还采' => '還採',
 '还冲' => '還衝',
 '邋里邋遢' => '邋裡邋遢',
+'那只不过' => '那只不過',
+'那只包括' => '那只包括',
 '那只可' => '那只可',
 '那只在' => '那只在',
+'那只怕' => '那只怕',
+'那只应' => '那只應',
 '那只是' => '那只是',
 '那只会' => '那只會',
 '那只有' => '那只有',
+'那只比' => '那只比',
 '那只用' => '那只用',
 '那只能' => '那只能',
+'那只限' => '那只限',
 '那只需' => '那只需',
+'那只须' => '那只須',
 '那卷' => '那捲',
 '那里' => '那裡',
 '那只' => '那隻',
-'那么' => '那麼',
-'那么着' => '那麼著',
 '邱于庭' => '邱于庭',
 '郁朴' => '郁樸',
 '郁郁菲菲' => '郁郁菲菲',
 '郁郁青青' => '郁郁青青',
 '郊游' => '郊遊',
 '郘钟' => '郘鐘',
+'部子里' => '部子里',
 '部落发' => '部落發',
 '郭后' => '郭后',
 '都于' => '都於',
-'鄉愿' => '鄉愿',
 '乡愿' => '鄉愿',
-'é\84­å\87±äº\91' => 'é\84­å\87±äº\91',
+'é\84\89æ\84¿' => 'é\84\89æ\84¿',
 '郑凯云' => '鄭凱云',
-'é\83\91åº\84å\85¬' => 'é\84­è\8e\8aå\85¬',
+'é\84­å\87±äº\91' => 'é\84­å\87±äº\91',
 '配制饲料' => '配制飼料',
-'é\85\8då\90\88ç\9d\80' => 'é\85\8då\90\88è\91\97',
+'é\85\8då\9b¾é\87\8c' => 'é\85\8då\9c\96裡',
 '配水干管' => '配水幹管',
-'配药' => '配藥',
 '配制' => '配製',
 '酒帘' => '酒帘',
+'酒气冲天' => '酒氣衝天',
 '酒坛' => '酒罈',
 '酒肴' => '酒肴',
-'酒药' => '酒藥',
-'酒醴曲蘖' => '酒醴麴櫱',
+'酒麹' => '酒麴',
 '酒曲' => '酒麴',
 '酥松' => '酥鬆',
-'酸碱' => '酸鹼',
+'酸姜' => '酸薑',
 '醇朴' => '醇樸',
 '醉于' => '醉於',
 '醋坛' => '醋罈',
@@ -8907,12 +8331,13 @@ $zh2Hant = array(
 '丑化' => '醜化',
 '丑史' => '醜史',
 '丑名' => '醜名',
-'ä¸\91å\92¤' => '醜吒',
+'ä¸\91å\90\92' => '醜吒',
 '丑地' => '醜地',
 '丑夷' => '醜夷',
 '丑女' => '醜女',
 '丑女效颦' => '醜女效顰',
 '丑奴儿' => '醜奴兒',
+'丑婆子' => '醜婆子',
 '丑妇' => '醜婦',
 '丑媳' => '醜媳',
 '丑媳妇' => '醜媳婦',
@@ -8948,18 +8373,18 @@ $zh2Hant = array(
 '丑杂' => '醜雜',
 '丑头怪脸' => '醜頭怪臉',
 '丑类' => '醜類',
-'酝酿着' => '醞釀著',
-'医药' => '醫藥',
-'医院里' => '醫院裡',
 '酿制' => '釀製',
 '衅钟' => '釁鐘',
 '采石之役' => '采石之役',
 '采石之战' => '采石之戰',
 '采石之戰' => '采石之戰',
-'采石磯' => '采石磯',
 '采石矶' => '采石磯',
-'釉药' => '釉藥',
-'里程表' => '里程錶',
+'采石磯' => '采石磯',
+'里海大学' => '里海大學',
+'里海大學' => '里海大學',
+'里海崖' => '里海崖',
+'里海茨' => '里海茨',
+'里铺' => '里舖',
 '重回' => '重回',
 '重折' => '重摺',
 '重于' => '重於',
@@ -8970,17 +8395,17 @@ $zh2Hant = array(
 '重游' => '重遊',
 '野姜' => '野薑',
 '野游' => '野遊',
-'厘出' => '釐出',
-'厘升' => '釐升',
-'厘定' => '釐定',
+'量不准' => '量不準',
+'厘改' => '釐改',
+'厘整' => '釐整',
 '厘正' => '釐正',
+'厘毫' => '釐毫',
 '厘清' => '釐清',
 '厘订' => '釐訂',
+'厘革' => '釐革',
 '金仆姑' => '金僕姑',
-'金仑溪' => '金崙溪',
-'金布道' => '金布道',
+'金城里' => '金城里',
 '金范' => '金範',
-'金色长发' => '金色長髮',
 '金表情' => '金表情',
 '金表态' => '金表態',
 '金表扬' => '金表揚',
@@ -8992,12 +8417,10 @@ $zh2Hant = array(
 '金表露' => '金表露',
 '金表面' => '金表面',
 '金装玉里' => '金裝玉裡',
-'金表' => '金錶',
+'金链' => '金鍊',
 '金钟' => '金鐘',
-'金鸡纳碱' => '金雞納鹼',
-'金马仑道' => '金馬崙道',
 '金发' => '金髮',
-'é\88\8e心斗角' => '鈎心鬥角',
+'é\92©心斗角' => '鈎心鬥角',
 '银朱' => '銀硃',
 '银发' => '銀髮',
 '铜范' => '銅範',
@@ -9005,37 +8428,27 @@ $zh2Hant = array(
 '铜钟' => '銅鐘',
 '铯钟' => '銫鐘',
 '铝制' => '鋁製',
-'铺锦列绣' => '鋪錦列繡',
 '钢之炼金术师' => '鋼之鍊金術師',
 '钢梁' => '鋼樑',
 '钢制' => '鋼製',
-'录着' => '錄著',
 '录制' => '錄製',
 '锤炼' => '錘鍊',
 '钱谷' => '錢穀',
 '钱范' => '錢範',
-'钱庄' => '錢莊',
-'锦綉花园' => '錦綉花園',
-'锦绣' => '錦繡',
+'锦卤' => '錦滷',
+'锦绣花园' => '錦綉花園',
 '表停' => '錶停',
 '表冠' => '錶冠',
 '表带' => '錶帶',
-'表店' => '錶店',
-'表厂' => '錶廠',
 '表快' => '錶快',
 '表慢' => '錶慢',
 '表板' => '錶板',
-'表壳' => '錶殼',
 '表王' => '錶王',
-'表的嘀嗒' => '錶的嘀嗒',
-'表的历史' => '錶的歷史',
 '表盘' => '錶盤',
 '表蒙子' => '錶蒙子',
-'表行' => '錶行',
 '表转' => '錶轉',
 '表速' => '錶速',
 '表针' => '錶針',
-'表链' => '錶鏈',
 '炼冶' => '鍊冶',
 '炼句' => '鍊句',
 '炼字' => '鍊字',
@@ -9045,13 +8458,12 @@ $zh2Hant = array(
 '炼气' => '鍊氣',
 '炼汞' => '鍊汞',
 '炼石' => '鍊石',
+'链表' => '鍊表',
 '炼贫' => '鍊貧',
 '炼金术' => '鍊金術',
-'炼钢' => '鍊鋼',
-'锅庄' => '鍋莊',
-'锻炼出' => '鍛鍊出',
 '锲而不舍' => '鍥而不捨',
 '镰仓' => '鎌倉',
+'镜图里' => '鏡圖裡',
 '锈病' => '鏽病',
 '锈菌' => '鏽菌',
 '锈蚀' => '鏽蝕',
@@ -9080,7 +8492,6 @@ $zh2Hant = array(
 '钟形虫' => '鐘形蟲',
 '钟律' => '鐘律',
 '钟快' => '鐘快',
-'钟意' => '鐘意',
 '钟慢' => '鐘慢',
 '钟摆' => '鐘擺',
 '钟敲' => '鐘敲',
@@ -9111,12 +8522,8 @@ $zh2Hant = array(
 '钟表停' => '鐘錶停',
 '钟表快' => '鐘錶快',
 '钟表慢' => '鐘錶慢',
-'钟表历史' => '鐘錶歷史',
 '钟表王' => '鐘錶王',
-'钟表的' => '鐘錶的',
-'钟表的历史' => '鐘錶的歷史',
 '钟表盘' => '鐘錶盤',
-'钟表行' => '鐘錶行',
 '钟表速' => '鐘錶速',
 '钟关' => '鐘關',
 '钟陈列' => '鐘陳列',
@@ -9129,41 +8536,55 @@ $zh2Hant = array(
 '钟点' => '鐘點',
 '钟鼎' => '鐘鼎',
 '钟鼓' => '鐘鼓',
-'铁杆' => '鐵杆',
-'铁栏杆' => '鐵欄杆',
 '铁锈' => '鐵鏽',
 '铁钟' => '鐵鐘',
 '铸钟' => '鑄鐘',
+'鉴别' => '鑑別',
+'鉴古' => '鑑古',
+'鉴定' => '鑑定',
+'鉴察' => '鑑察',
+'鉴往知来' => '鑑往知來',
+'鉴戒' => '鑑戒',
+'鉴湖' => '鑑湖',
+'鉴藏' => '鑑藏',
+'鉴谅' => '鑑諒',
+'鉴证' => '鑑證',
+'鉴识' => '鑑識',
+'鉴赏' => '鑑賞',
 '鉴于' => '鑒於',
 '长几' => '長几',
 '长于' => '長於',
 '长历' => '長曆',
 '长历史' => '長歷史',
-'长生药' => '長生藥',
+'长发公主' => '長髮公主',
+'长发妹' => '長髮妹',
+'长发姑娘' => '長髮姑娘',
 '长胡' => '長鬍',
 '门帘' => '門帘',
 '门吊儿' => '門弔兒',
 '门里' => '門裡',
 '闫怀礼' => '閆懷禮',
+'開山辟谷' => '開山辟谷',
+'开山辟谷' => '開山闢谷',
 '开吊' => '開弔',
 '开征' => '開徵',
 '开采' => '開採',
 '开发' => '開發',
-'开药' => '開藥',
 '开辟' => '開闢',
 '开哄' => '開鬨',
+'闲邪' => '閑邪',
 '闲情逸致' => '閒情逸緻',
 '闲荡' => '閒蕩',
 '闲游' => '閒遊',
 '间不容发' => '間不容髮',
+'间里' => '間裡',
 '闵采尔' => '閔採爾',
-'府' => '閤府',
+'府' => '閤府',
 '闺范' => '閨範',
 '阃范' => '閫範',
 '闯荡' => '闖蕩',
 '闯炼' => '闖鍊',
 '关系' => '關係',
-'关系着' => '關係著',
 '关弓与我确' => '關弓與我确',
 '关于' => '關於',
 '辟佛' => '闢佛',
@@ -9179,37 +8600,34 @@ $zh2Hant = array(
 '辟谣' => '闢謠',
 '辟辟' => '闢辟',
 '辟邪以律' => '闢邪以律',
-'防晒' => '防晒',
 '防水表' => '防水錶',
 '防御' => '防禦',
 '防范' => '防範',
 '防锈' => '防鏽',
 '防台' => '防颱',
 '阻于' => '阻於',
-'阿呆瓜' => '阿呆瓜',
-'阿斯图里亚斯' => '阿斯圖里亞斯',
-'阿呆' => '阿獃',
 '阿里' => '阿里',
 '附于' => '附於',
 '附注' => '附註',
-'降压药' => '降壓藥',
 '限制' => '限制',
-'升官' => '陞官',
-'除臭药' => '除臭藥',
+'院里' => '院裡',
 '陪吊' => '陪弔',
 '阴干' => '陰乾',
 '阴历' => '陰曆',
 '阴历史' => '陰歷史',
 '阴沟里翻船' => '陰溝裡翻船',
 '阴郁' => '陰鬱',
-'陈冲' => '陳冲',
 '陳冲' => '陳冲',
+'陳士杰' => '陳士杰',
+'陈升' => '陳昇',
+'陳有后' => '陳有后',
 '陈有后' => '陳有后',
 '陈炼' => '陳鍊',
 '陆游' => '陸遊',
 '阳春面' => '陽春麵',
 '阳历' => '陽曆',
 '阳历史' => '陽歷史',
+'阳谷' => '陽穀',
 '隆准许' => '隆准許',
 '隆准' => '隆準',
 '随于' => '隨於',
@@ -9224,12 +8642,14 @@ $zh2Hant = array(
 '只身' => '隻身',
 '雄斗斗' => '雄斗斗',
 '雅范' => '雅範',
-'é\9b\85è\87´' => 'é\9b\85ç·»',
+'é\9b\86æ\95°é\87\8c' => 'é\9b\86æ\95¸è£¡',
 '集于' => '集於',
+'集里' => '集裡',
 '集游法' => '集遊法',
 '雕梁画栋' => '雕樑畫棟',
 '双折射' => '雙折射',
 '双折' => '雙摺',
+'双沟大曲' => '雙溝大麯',
 '双胜类' => '雙胜類',
 '双雕' => '雙鵰',
 '杂合面儿' => '雜合麵兒',
@@ -9246,46 +8666,37 @@ $zh2Hant = array(
 '离于' => '離於',
 '难舍' => '難捨',
 '难于' => '難於',
+'雨蒙蒙' => '雨濛濛',
 '雪窗萤几' => '雪窗螢几',
 '雪里' => '雪裡',
 '雪里红' => '雪裡紅',
 '雪里蕻' => '雪裡蕻',
-'äº\91å\8d\97ç\99½è\8d¯' => 'é\9b²å\8d\97ç\99½è\97¥',
+'äº\91å\90\9eé\9d¢' => 'é\9b²å\90\9e麵',
 '云笈七签' => '雲笈七籤',
 '云游' => '雲遊',
 '云须' => '雲鬚',
 '零个' => '零個',
 '零周后' => '零周後',
-'零多只' => '零多隻',
 '零天后' => '零天後',
 '零年' => '零年',
 '零只' => '零隻',
 '零余' => '零餘',
 '电子表格' => '電子表格',
-'电子表' => '電子錶',
 '电子钟' => '電子鐘',
 '电子钟表' => '電子鐘錶',
-'电杆' => '電杆',
 '电波钟' => '電波鐘',
 '电码表' => '電碼表',
-'电线杆' => '電線杆',
 '电冲' => '電衝',
 '电表' => '電錶',
 '电钟' => '電鐘',
 '震栗' => '震慄',
-'é\9c\87è\8d¡' => 'é\9c\87è\95©',
+'é\9c\89æ°\94å\86²å¤©' => 'é\9c\89æ°£è¡\9d天',
 '雾里' => '霧裡',
 '露丑' => '露醜',
-'霸占' => '霸佔',
 '霁范' => '霽範',
-'灵药' => '靈藥',
 '青山一发' => '青山一髮',
-'青苹' => '青苹',
-'青苹果' => '青蘋果',
-'青蝇吊客' => '青蠅弔客',
-'青霉素' => '青霉素',
 '青霉' => '青黴',
-'é\9d\9eå\8d ä¸\8då\8f¯' => 'é\9d\9eä½\94ä¸\8då\8f¯',
+'é\9d\9e常å\87\86' => 'é\9d\9e常æº\96',
 '面包住' => '面包住',
 '面包含' => '面包含',
 '面包围' => '面包圍',
@@ -9299,64 +8710,68 @@ $zh2Hant = array(
 '面包管' => '面包管',
 '面包扎' => '面包紮',
 '面包罗' => '面包羅',
-'面包着' => '面包著',
 '面包藏' => '面包藏',
 '面包装' => '面包裝',
 '面包裹' => '面包裹',
 '面包起' => '面包起',
 '面包办' => '面包辦',
-'面店舖' => '面店舖',
-'面朝着' => '面朝著',
-'面条目' => '面條目',
+'面店铺' => '面店鋪',
 '面條目' => '面條目',
+'面条目' => '面條目',
 '面粉碎' => '面粉碎',
 '面粉红' => '面粉紅',
-'面临着' => '面臨著',
 '面食饭' => '面食飯',
 '面食面' => '面食麵',
 '鞋里' => '鞋裡',
 '鞣制' => '鞣製',
 '秋千' => '鞦韆',
 '鞭辟入里' => '鞭辟入裡',
-'é\9f¦åº\84' => 'é\9f\8bè\8e\8a',
+'é\9f¦å¸­' => 'é\9f\8bè\93\86',
 '韩国制' => '韓國製',
 '韩制' => '韓製',
+'音不准' => '音不準',
 '音准' => '音準',
 '音声如钟' => '音聲如鐘',
 '韶山冲' => '韶山沖',
 '响钟' => '響鐘',
 '頁面' => '頁面',
 '页面' => '頁面',
-'é \82å¤\9a' => 'é \82å¤\9a',
+'顶å\87¶' => 'é \82å\85\87',
 '顶多' => '頂多',
-'项庄' => '項莊',
+'頂多' => '頂多',
+'项链' => '項鍊',
 '顺于' => '順於',
 '顺钟向' => '順鐘向',
 '顺风后' => '順風後',
 '须根据' => '須根據',
 '颂系' => '頌繫',
 '颂赞' => '頌讚',
+'预报不准' => '預報不準',
 '预制' => '預製',
-'领域里' => '領域裡',
 '领袖欲' => '領袖慾',
-'头巾å\90\8aå\9c¨æ°´é\87\8c' => 'é ­å·¾å¼\94å\9c¨æ°´è£¡',
+'头å\84¿å¹²' => 'é ­å\85\92å¹¹',
 '头里' => '頭裡',
+'头长发' => '頭長髮',
 '头发' => '頭髮',
 '颊须' => '頰鬚',
-'题签' => '題籤',
 '额征' => '額徵',
 '额我略历' => '額我略曆',
 '额我略历史' => '額我略歷史',
 '颜范' => '顏範',
 '颠干倒坤' => '顛乾倒坤',
-'颠覆' => '顛覆',
-'颠颠仆仆' => '顛顛仆仆',
 '顛顛仆仆' => '顛顛仆仆',
+'颠颠仆仆' => '顛顛仆仆',
 '颤栗' => '顫慄',
+'显示表明' => '顯示表明',
+'显示表格' => '顯示表格',
+'显示表现' => '顯示表現',
+'显示表示' => '顯示表示',
+'显示表达' => '顯示表達',
+'显示表面' => '顯示表面',
+'显示表头' => '顯示表頭',
 '显示表' => '顯示錶',
 '显示钟' => '顯示鐘',
 '显示钟表' => '顯示鐘錶',
-'显著标志' => '顯著標志',
 '风干' => '風乾',
 '风后' => '風后',
 '风土志' => '風土誌',
@@ -9366,8 +8781,8 @@ $zh2Hant = array(
 '风范' => '風範',
 '风里' => '風裡',
 '风起云涌' => '風起雲湧',
-'风采' => '風采',
 '風采' => '風采',
+'风采' => '風采',
 '台风' => '颱風',
 '台风后' => '颱風後',
 '刮了' => '颳了',
@@ -9387,13 +8802,12 @@ $zh2Hant = array(
 '飞行钟' => '飛行鐘',
 '食欲' => '食慾',
 '食欲不振' => '食欲不振',
-'食野之苹' => '食野之苹',
 '食面' => '食麵',
 '饭后钟' => '飯後鐘',
 '饭团' => '飯糰',
-'饭庄' => '飯莊',
-'饲喂' => '飼餵',
 '饼干' => '餅乾',
+'养脏' => '養臟',
+'餐台' => '餐檯',
 '馂余' => '餕餘',
 '余0' => '餘0',
 '余1' => '餘1',
@@ -9440,6 +8854,8 @@ $zh2Hant = array(
 '余子' => '餘子',
 '余存' => '餘存',
 '余孽' => '餘孽',
+'余年' => '餘年',
+'余式' => '餘式',
 '余弦' => '餘弦',
 '余思' => '餘思',
 '余悸' => '餘悸',
@@ -9461,7 +8877,6 @@ $zh2Hant = array(
 '余毒' => '餘毒',
 '余气' => '餘氣',
 '余波' => '餘波',
-'余波荡漾' => '餘波盪漾',
 '余温' => '餘溫',
 '余泽' => '餘澤',
 '余沥' => '餘瀝',
@@ -9470,6 +8885,7 @@ $zh2Hant = array(
 '余烬' => '餘燼',
 '余珍' => '餘珍',
 '余生' => '餘生',
+'余留' => '餘留',
 '余众' => '餘眾',
 '余窍' => '餘竅',
 '余粮' => '餘糧',
@@ -9489,6 +8905,7 @@ $zh2Hant = array(
 '余貾' => '餘貾',
 '余辉' => '餘輝',
 '余辜' => '餘辜',
+'余部' => '餘部',
 '余酲' => '餘酲',
 '余量' => '餘量',
 '余闰' => '餘閏',
@@ -9497,82 +8914,48 @@ $zh2Hant = array(
 '余震' => '餘震',
 '余霞' => '餘霞',
 '余音' => '餘音',
-'余音绕梁' => '餘音繞梁',
 '余韵' => '餘韻',
 '余响' => '餘響',
+'余项' => '餘項',
 '余额' => '餘額',
 '余风' => '餘風',
 '余食' => '餘食',
 '余党' => '餘黨',
-'余0' => '餘0',
-'余1' => '餘1',
-'余2' => '餘2',
-'余3' => '餘3',
-'余4' => '餘4',
-'余5' => '餘5',
-'余6' => '餘6',
-'余7' => '餘7',
-'余8' => '餘8',
-'余9' => '餘9',
 '馄饨面' => '餛飩麵',
 '馆谷' => '館穀',
 '馆里' => '館裡',
-'喂乳' => '餵乳',
-'喂了' => '餵了',
-'喂奶' => '餵奶',
-'喂给' => '餵給',
-'喂羊' => '餵羊',
-'喂猪' => '餵豬',
-'喂过' => '餵過',
-'喂鸡' => '餵雞',
-'喂食' => '餵食',
-'喂饱' => '餵飽',
-'喂养' => '餵養',
-'喂驴' => '餵驢',
-'喂鱼' => '餵魚',
-'喂鸭' => '餵鴨',
-'喂鹅' => '餵鵝',
-'饑荒' => '饑荒',
-'饑馑' => '饑饉',
+'餵驴' => '餵驢',
+'饥寒' => '饑寒',
+'饥民' => '饑民',
+'饥渴' => '饑渴',
+'饥溺' => '饑溺',
+'饥荒' => '饑荒',
+'饥饱' => '饑飽',
+'饥馑' => '饑饉',
 '首当其冲' => '首當其衝',
 '首发' => '首發',
 '首只' => '首隻',
+'首出电影' => '首齣電影',
 '香干' => '香乾',
 '香山庄' => '香山庄',
 '马干' => '馬乾',
-'马占山' => '馬占山',
 '馬占山' => '馬占山',
-'马æ\9d\86' => '馬æ\9d\86',
+'马æ\96¯å\9e\82å\85\8bæ\9c\9f' => '馬æ\96¯å\9e\82å\85\8bæ\9c\9f',
 '馬格里布' => '馬格里布',
 '马格里布' => '馬格里布',
-'马表' => '馬錶',
 '驻扎' => '駐紮',
 '骀荡' => '駘蕩',
-'腾格里' => '騰格里',
 '騰格里' => '騰格里',
+'腾格里' => '騰格里',
+'腾涌' => '騰湧',
 '腾冲' => '騰衝',
+'惊栗' => '驚慄',
 '惊赞' => '驚讚',
 '惊钟' => '驚鐘',
-'骨子里' => '骨子裡',
 '骨干' => '骨幹',
 '骨灰坛' => '骨灰罈',
 '骨坛' => '骨罈',
-'骨头里挣出来的钱才做得肉' => '骨頭裡掙出來的錢纔做得肉',
-'肮肮脏脏' => '骯骯髒髒',
-'肮脏' => '骯髒',
-'脏乱' => '髒亂',
-'脏了' => '髒了',
-'脏兮兮' => '髒兮兮',
-'脏字' => '髒字',
-'脏得' => '髒得',
-'脏心' => '髒心',
-'脏东西' => '髒東西',
-'脏水' => '髒水',
-'脏的' => '髒的',
-'脏词' => '髒詞',
-'脏话' => '髒話',
-'脏钱' => '髒錢',
-'脏发' => '髒髮',
+'体征' => '體徵',
 '体范' => '體範',
 '体系' => '體系',
 '高几' => '高几',
@@ -9620,7 +9003,7 @@ $zh2Hant = array(
 '发胶' => '髮膠',
 '发菜' => '髮菜',
 '发蜡' => '髮蠟',
-'å\8f\91è¸\8aå\86²å\86 ' => 'é«®è¸\8a沖冠',
+'å\8f\91è¸\8aå\86²å\86 ' => '髮踴沖冠',
 '发辫' => '髮辮',
 '发针' => '髮針',
 '发钗' => '髮釵',
@@ -9640,6 +9023,7 @@ $zh2Hant = array(
 '松元音' => '鬆元音',
 '松劲' => '鬆勁',
 '松动' => '鬆動',
+'松化' => '鬆化',
 '松口' => '鬆口',
 '松喉' => '鬆喉',
 '松土' => '鬆土',
@@ -9683,12 +9067,12 @@ $zh2Hant = array(
 '须鲨' => '鬚鯊',
 '须鲸' => '鬚鯨',
 '鬓发' => '鬢髮',
-'斗上' => '鬥上',
 '斗不过' => '鬥不過',
 '斗了' => '鬥了',
 '斗来斗去' => '鬥來鬥去',
 '斗倒' => '鬥倒',
 '斗分子' => '鬥分子',
+'斗剑' => '鬥劍',
 '斗力' => '鬥力',
 '斗劲' => '鬥勁',
 '斗胜' => '鬥勝',
@@ -9739,13 +9123,12 @@ $zh2Hant = array(
 '斗草' => '鬥草',
 '斗叶儿' => '鬥葉兒',
 '斗叶子' => '鬥葉子',
-'斗着' => '鬥著',
 '斗蟋蟀' => '鬥蟋蟀',
 '斗话' => '鬥話',
 '斗艳' => '鬥豔',
 '斗起' => '鬥起',
 '斗趣' => '鬥趣',
-'æ\96\97é\97²æ°\94' => '鬥é\96\91氣',
+'æ\96\97é\97²æ°\94' => '鬥é\96\92氣',
 '斗鸡' => '鬥雞',
 '斗雪红' => '鬥雪紅',
 '斗头' => '鬥頭',
@@ -9757,7 +9140,6 @@ $zh2Hant = array(
 '斗鸭' => '鬥鴨',
 '斗鹌鹑' => '鬥鵪鶉',
 '斗丽' => '鬥麗',
-'闹着玩儿' => '鬧著玩兒',
 '闹表' => '鬧錶',
 '闹钟' => '鬧鐘',
 '哄动' => '鬨動',
@@ -9800,8 +9182,10 @@ $zh2Hant = array(
 '郁郁不乐' => '鬱鬱不樂',
 '郁郁寡欢' => '鬱鬱寡歡',
 '郁郁而终' => '鬱鬱而終',
+'郁郁苍苍' => '鬱鬱蒼蒼',
 '郁郁葱葱' => '鬱鬱蔥蔥',
 '郁黑' => '鬱黑',
+'鬼气冲天' => '鬼氣衝天',
 '鬼谷子' => '鬼谷子',
 '魂牵梦系' => '魂牽夢繫',
 '魏征' => '魏徵',
@@ -9809,15 +9193,13 @@ $zh2Hant = array(
 '魔表' => '魔錶',
 '鱼干' => '魚乾',
 '鱼松' => '魚鬆',
+'鲜于枢' => '鮮于樞',
+'鮮于樞' => '鮮于樞',
 '鲸须' => '鯨鬚',
-'鯰鱼' => '鯰魚',
-'鸠占鹊巢' => '鳩佔鵲巢',
-'凤凰于飞' => '鳳凰于飛',
+'鳳凰于飛' => '鳳凰于飛',
 '凤梨干' => '鳳梨乾',
 '鸣钟' => '鳴鐘',
-'鸿案相庄' => '鴻案相莊',
 '鸿范' => '鴻範',
-'鸿篇巨制' => '鴻篇巨製',
 '鹅准' => '鵝準',
 '鹄发' => '鵠髮',
 '雕心雁爪' => '鵰心雁爪',
@@ -9826,6 +9208,7 @@ $zh2Hant = array(
 '雕鹗' => '鵰鶚',
 '鹤吊' => '鶴弔',
 '鹤发' => '鶴髮',
+'鸾鉴' => '鸞鑑',
 '鹰雕' => '鹰鵰',
 '咸味' => '鹹味',
 '咸嘴淡舌' => '鹹嘴淡舌',
@@ -9840,6 +9223,7 @@ $zh2Hant = array(
 '咸湖' => '鹹湖',
 '咸汤' => '鹹湯',
 '咸潟' => '鹹潟',
+'咸湿' => '鹹濕',
 '咸的' => '鹹的',
 '咸粥' => '鹹粥',
 '咸肉' => '鹹肉',
@@ -9853,32 +9237,18 @@ $zh2Hant = array(
 '咸鸭蛋' => '鹹鴨蛋',
 '咸卤' => '鹹鹵',
 '咸咸' => '鹹鹹',
-'碱化' => '鹼化',
-'碱土金属' => '鹼土金屬',
-'碱地' => '鹼地',
-'碱度' => '鹼度',
-'碱性' => '鹼性',
-'碱水' => '鹼水',
-'碱液' => '鹼液',
-'碱熔' => '鹼熔',
-'碱石灰' => '鹼石灰',
-'碱纤维素' => '鹼纖維素',
-'碱金属' => '鹼金屬',
-'碱类' => '鹼類',
 '盐打怎么咸' => '鹽打怎麼鹹',
+'盐卤' => '鹽滷',
 '盐余' => '鹽餘',
-'盐碱土' => '鹽鹼土',
-'盐碱滩' => '鹽鹼灘',
+'鹿場里' => '鹿場里',
 '丽于' => '麗於',
 '曲尘' => '麴塵',
-'曲蘖' => '麴櫱',
-'曲生' => '麴生',
+'曲櫱' => '麴櫱',
 '曲秀才' => '麴秀才',
-'曲菌' => '麴菌',
 '曲车' => '麴車',
 '曲道士' => '麴道士',
 '曲钱' => '麴錢',
-'曲院' => '麴院',
+'麹霉' => '麴黴',
 '曲霉' => '麴黴',
 '面人儿' => '麵人兒',
 '面价' => '麵價',
@@ -9901,19 +9271,16 @@ $zh2Hant = array(
 '面粉' => '麵粉',
 '面糊' => '麵糊',
 '面团' => '麵糰',
-'面线' => '麵線',
 '面缸' => '麵缸',
 '面茶' => '麵茶',
 '面食' => '麵食',
 '面饺' => '麵餃',
 '面饼' => '麵餅',
 '面馆' => '麵館',
-'麻药' => '麻藥',
-'麻醉药' => '麻醉藥',
+'麻将席' => '麻將蓆',
 '麻酱面' => '麻醬麵',
 '黄干黑瘦' => '黃乾黑瘦',
 '黄历' => '黃曆',
-'黄曲霉' => '黃曲霉',
 '黄历史' => '黃歷史',
 '黃詩杰' => '黃詩杰',
 '黄诗杰' => '黃詩杰',
@@ -9923,14 +9290,16 @@ $zh2Hant = array(
 '黄钟' => '黃鐘',
 '黄发' => '黃髮',
 '黄曲毒素' => '黃麴毒素',
-'é»\8eå\90\89äº\91' => 'é»\8eå\90\89é\9b²',
+'é»\8eå\85\8bç\89¹å\88¶' => 'é»\8eå\85\8bç\89¹å\88',
 '黎吉雲' => '黎吉雲',
+'黎吉云' => '黎吉雲',
 '黑奴吁天录' => '黑奴籲天錄',
-'黑色长发' => '黑色長髮',
 '黑发' => '黑髮',
+'点札' => '點劄',
 '点半钟' => '點半鐘',
 '点多钟' => '點多鐘',
 '点里' => '點裡',
+'点里程' => '點里程',
 '点钟' => '點鐘',
 '霉毒' => '黴毒',
 '霉素' => '黴素',
@@ -9938,119 +9307,96 @@ $zh2Hant = array(
 '霉黑' => '黴黑',
 '霉黧' => '黴黧',
 '鼓里' => '鼓裡',
+'鼓噪' => '鼓譟',
 '冬冬鼓' => '鼕鼕鼓',
-'鼠药' => '鼠藥',
 '鼠曲草' => '鼠麴草',
 '鼻梁儿' => '鼻梁兒',
 '鼻梁' => '鼻樑',
 '鼻准' => '鼻準',
 '齐王舍牛' => '齊王捨牛',
-'齐庄' => '齊莊',
 '齿危发秀' => '齒危髮秀',
 '齿落发白' => '齒落髮白',
 '齿发' => '齒髮',
 '出儿' => '齣兒',
-'出剧' => '齣劇',
-'出动画' => '齣動畫',
-'出卡通' => '齣卡通',
-'出戏' => '齣戲',
-'出节目' => '齣節目',
-'出电影' => '齣電影',
-'出电视' => '齣電視',
 '龙卷' => '龍捲',
 '龙眼干' => '龍眼乾',
 '龙须' => '龍鬚',
+'龙须面' => '龍鬚麵',
 '龙斗虎伤' => '龍鬥虎傷',
-'龟山庄' => '龜山庄',
-'!克制' => '!剋制',
-',克制' => ',剋制',
-'0周后' => '0周後',
-'0多只' => '0多隻',
-'0天后' => '0天後',
-'0年' => '0年',
-'0只' => '0隻',
-'0余' => '0餘',
-'1周后' => '1周後',
-'1天后' => '1天後',
-'1年' => '1年',
-'1只' => '1隻',
-'1余' => '1餘',
-'2周后' => '2周後',
-'2天后' => '2天後',
-'2年' => '2年',
-'2只' => '2隻',
-'2余' => '2餘',
-'3周后' => '3周後',
-'3天后' => '3天後',
-'3年' => '3年',
-'3只' => '3隻',
-'3余' => '3餘',
-'4周后' => '4周後',
-'4天后' => '4天後',
-'4年' => '4年',
-'4只' => '4隻',
-'4余' => '4餘',
-'5周后' => '5周後',
-'5天后' => '5天後',
-'5年' => '5年',
-'5只' => '5隻',
-'5余' => '5餘',
-'6周后' => '6周後',
-'6天后' => '6天後',
-'6年' => '6年',
-'6只' => '6隻',
-'6余' => '6餘',
-'7周后' => '7周後',
-'7天后' => '7天後',
-'7年' => '7年',
-'7只' => '7隻',
-'7余' => '7餘',
-'8周后' => '8周後',
-'8天后' => '8天後',
-'8年' => '8年',
-'8只' => '8隻',
-'8余' => '8餘',
-'9周后' => '9周後',
-'9天后' => '9天後',
-'9年' => '9年',
-'9只' => '9隻',
-'9余' => '9餘',
-':克制' => ':剋制',
-';克制' => ';剋制',
-'?克制' => '?剋制',
+'龜山庄' => '龜山庄',
+'龟鉴' => '龜鑑',
 );
 
 $zh2Hans = array(
 '㑯' => '㑔',
 '㑳' => '㑇',
+'㑶' => '㐹',
+'㑺' => '俊',
 '㒓' => '𠉂',
+'㒺' => '罔',
+'㓂' => '寇',
 '㓨' => '刾',
+'㕁' => '却',
+'㕑' => '厨',
+'㕘' => '参',
+'㕥' => '以',
 '㗲' => '𠵾',
 '㘚' => '㘎',
+'㘭' => '坳',
 '㜄' => '㚯',
 '㜏' => '㛣',
 '㜢' => '𡞱',
 '㜷' => '𡝠',
+'㝛' => '宿',
+'㝠' => '冥',
 '㞞' => '𪨊',
+'㠀' => '岛',
 '㠏' => '㟆',
+'㠯' => '以',
+'㠶' => '帆',
+'㡌' => '帽',
+'㢘' => '廉',
 '㢝' => '𢋈',
+'㤙' => '恩',
+'㥦' => '惬',
+'㥫' => '惇',
 '㥮' => '㤘',
 '㦎' => '𢛯',
+'㧱' => '拿',
+'㨗' => '捷',
+'㨪' => '晃',
+'㨿' => '据',
+'㩗' => '携',
 '㩜' => '㨫',
+'㩦' => '携',
 '㩳' => '㧐',
+'㪚' => '散',
+'㪟' => '敦',
+'㬉' => '暖',
+'㬪' => '叠',
+'㯭' => '橹',
+'㱃' => '饮',
+'㳒' => '法',
+'㴱' => '深',
 '㷿' => '𤈷',
 '㺏' => '𤠋',
+'㼝' => '碗',
+'㽞' => '留',
+'㿜' => '瘪',
 '㿧' => '𤽯',
 '䀹' => '𥅴',
 '䁪' => '𥇢',
 '䁻' => '䀥',
+'䈰' => '筲',
 '䉙' => '𥬀',
 '䉬' => '𫂈',
 '䉲' => '𥮜',
+'䊀' => '糊',
 '䊭' => '𥺅',
 '䊷' => '䌶',
 '䋙' => '䌺',
 '䋚' => '䌻',
+'䋹' => '䌿',
 '䋻' => '䌾',
 '䋿' => '𦈓',
 '䌈' => '𦈖',
@@ -10060,15 +9406,26 @@ $zh2Hans = array(
 '䌟' => '𦈞',
 '䌥' => '𦈠',
 '䌰' => '𦈙',
+'䎱' => '䎬',
 '䕳' => '𦰴',
+'䗬' => '蜂',
 '䗿' => '𧉞',
+'䘏' => '恤',
+'䘑' => '脉',
+'䘚' => '卒',
 '䙡' => '䙌',
+'䛐' => '词',
+'䛡' => '话',
 '䜀' => '䜧',
+'䝔' => '獾',
 '䝻' => '𧹕',
 '䝼' => '䞍',
 '䞈' => '𧹑',
+'䠀' => '蹚',
+'䠶' => '射',
 '䢨' => '𨑹',
 '䥇' => '䦂',
+'䥥' => '镰',
 '䥩' => '𨱖',
 '䥱' => '䥾',
 '䦘' => '𨸄',
@@ -10080,11 +9437,13 @@ $zh2Hans = array(
 '䪗' => '𩐀',
 '䪘' => '𩏿',
 '䫴' => '𩖗',
+'䬃' => '飒',
 '䬘' => '𩙮',
 '䬝' => '𩙯',
 '䬞' => '𩙧',
 '䭀' => '𩠇',
 '䭃' => '𩠈',
+'䭾' => '驮',
 '䭿' => '𩧭',
 '䮝' => '𩧰',
 '䮞' => '𩨁',
@@ -10093,6 +9452,7 @@ $zh2Hans = array(
 '䮳' => '𩨏',
 '䮾' => '𩧪',
 '䯀' => '䯅',
+'䰟' => '魂',
 '䰾' => '鲃',
 '䱙' => '𩾈',
 '䱬' => '𩾊',
@@ -10101,16 +9461,27 @@ $zh2Hans = array(
 '䱽' => '䲝',
 '䲁' => '鳚',
 '䲖' => '𩾂',
+'䲘' => '鳤',
 '䲰' => '𪉂',
+'䳘' => '鹅',
 '䴉' => '鹮',
 '䴬' => '𪎈',
 '䴴' => '𪎋',
+'䶊' => '衄',
 '丟' => '丢',
+'丣' => '卯',
 '並' => '并',
+'乗' => '乘',
+'乹' => '干',
 '乾' => '干',
+'亁' => '干',
 '亂' => '乱',
 '亙' => '亘',
+'亝' => '斋',
 '亞' => '亚',
+'亱' => '夜',
+'亷' => '廉',
+'亾' => '亡',
 '佇' => '伫',
 '佈' => '布',
 '佔' => '占',
@@ -10118,29 +9489,36 @@ $zh2Hans = array(
 '來' => '来',
 '侖' => '仑',
 '侶' => '侣',
+'侷' => '局',
 '俁' => '俣',
 '係' => '系',
 '俔' => '伣',
 '俠' => '侠',
 '俥' => '伡',
+'俻' => '备',
 '倀' => '伥',
 '倆' => '俩',
 '倈' => '俫',
 '倉' => '仓',
 '個' => '个',
+'倐' => '倏',
 '們' => '们',
 '倖' => '幸',
+'倣' => '仿',
 '倫' => '伦',
 '倲' => '㑈',
+'倸' => '睬',
 '偉' => '伟',
 '偑' => '㐽',
 '側' => '侧',
 '偵' => '侦',
 '偽' => '伪',
+'傌' => '㐷',
 '傑' => '杰',
 '傖' => '伧',
 '傘' => '伞',
 '備' => '备',
+'傚' => '效',
 '傢' => '家',
 '傭' => '佣',
 '傯' => '偬',
@@ -10152,6 +9530,8 @@ $zh2Hans = array(
 '僂' => '偻',
 '僅' => '仅',
 '僉' => '佥',
+'僊' => '仙',
+'働' => '动',
 '僑' => '侨',
 '僕' => '仆',
 '僞' => '伪',
@@ -10164,6 +9544,7 @@ $zh2Hans = array(
 '億' => '亿',
 '儈' => '侩',
 '儉' => '俭',
+'儌' => '侥',
 '儐' => '傧',
 '儔' => '俦',
 '儕' => '侪',
@@ -10179,32 +9560,49 @@ $zh2Hans = array(
 '儼' => '俨',
 '兇' => '凶',
 '兌' => '兑',
+'兎' => '兔',
 '兒' => '儿',
 '兗' => '兖',
+'兠' => '兜',
 '內' => '内',
 '兩' => '两',
+'冄' => '冉',
 '冊' => '册',
+'冐' => '冒',
+'冑' => '胄',
 '冪' => '幂',
+'冺' => '泯',
 '凈' => '净',
 '凍' => '冻',
 '凙' => '𪞝',
 '凜' => '凛',
+'凢' => '凡',
 '凱' => '凯',
+'凴' => '凭',
 '別' => '别',
+'刦' => '劫',
+'刧' => '劫',
 '刪' => '删',
+'刼' => '劫',
 '剄' => '刭',
 '則' => '则',
+'剉' => '锉',
 '剋' => '克',
 '剎' => '刹',
+'剏' => '创',
 '剗' => '刬',
+'剙' => '创',
 '剛' => '刚',
 '剝' => '剥',
 '剮' => '剐',
+'剳' => '札',
 '剴' => '剀',
 '創' => '创',
 '剷' => '铲',
+'剹' => '戮',
 '剾' => '𠛅',
 '劃' => '划',
+'劄' => '札',
 '劇' => '剧',
 '劉' => '刘',
 '劊' => '刽',
@@ -10212,48 +9610,73 @@ $zh2Hans = array(
 '劍' => '剑',
 '劏' => '㓥',
 '劑' => '剂',
+'劒' => '剑',
 '劚' => '㔉',
+'効' => '效',
 '勁' => '劲',
+'勅' => '敕',
+'勌' => '倦',
+'勑' => '敕',
 '動' => '动',
 '務' => '务',
 '勛' => '勋',
 '勝' => '胜',
 '勞' => '劳',
 '勢' => '势',
+'勦' => '剿',
 '勩' => '勚',
 '勱' => '劢',
 '勳' => '勋',
 '勵' => '励',
 '勸' => '劝',
 '勻' => '匀',
+'匟' => '炕',
 '匭' => '匦',
 '匯' => '汇',
 '匱' => '匮',
+'匲' => '奁',
+'匳' => '奁',
 '區' => '区',
 '協' => '协',
+'卹' => '恤',
 '卻' => '却',
 '卽' => '即',
+'厀' => '膝',
 '厙' => '厍',
+'厠' => '厕',
 '厤' => '历',
 '厭' => '厌',
+'厰' => '厂',
 '厲' => '厉',
 '厴' => '厣',
 '參' => '参',
 '叄' => '叁',
 '叢' => '丛',
-'å\90\92' => 'å\92¤',
+'å\90\9a' => 'å\92¿',
 '吳' => '吴',
 '吶' => '呐',
 '呂' => '吕',
+'呌' => '叫',
+'呪' => '咒',
+'咊' => '和',
 '咼' => '呙',
 '員' => '员',
 '哯' => '𠯟',
+'哶' => '咩',
 '唄' => '呗',
+'唕' => '唣',
+'唘' => '启',
 '唚' => '吣',
+'唸' => '念',
+'啎' => '忤',
 '問' => '问',
+'啑' => '喋',
+'啓' => '启',
+'啗' => '啖',
 '啞' => '哑',
 '啟' => '启',
 '啢' => '唡',
+'啣' => '衔',
 '喎' => '㖞',
 '喚' => '唤',
 '喪' => '丧',
@@ -10261,6 +9684,7 @@ $zh2Hans = array(
 '喬' => '乔',
 '單' => '单',
 '喲' => '哟',
+'嗁' => '啼',
 '嗆' => '呛',
 '嗇' => '啬',
 '嗊' => '唝',
@@ -10269,22 +9693,26 @@ $zh2Hans = array(
 '嗩' => '唢',
 '嗶' => '哔',
 '嗹' => '𪡏',
+'嘅' => '慨',
 '嘆' => '叹',
 '嘍' => '喽',
+'嘑' => '呼',
 '嘓' => '啯',
 '嘔' => '呕',
 '嘖' => '啧',
 '嘗' => '尝',
 '嘜' => '唛',
+'嘠' => '嘎',
 '嘩' => '哗',
 '嘮' => '唠',
 '嘯' => '啸',
 '嘰' => '叽',
 '嘵' => '哓',
+'嘷' => '嗥',
 '嘸' => '呒',
 '嘽' => '啴',
-'噁' => '恶',
 '噅' => '𠯠',
+'噉' => '啖',
 '噓' => '嘘',
 '噚' => '㖊',
 '噝' => '咝',
@@ -10318,7 +9746,10 @@ $zh2Hans = array(
 '囉' => '啰',
 '囌' => '苏',
 '囑' => '嘱',
+'囓' => '啮',
+'囙' => '因',
 '囪' => '囱',
+'圅' => '函',
 '圇' => '囵',
 '國' => '国',
 '圍' => '围',
@@ -10327,6 +9758,8 @@ $zh2Hans = array(
 '圖' => '图',
 '團' => '团',
 '圞' => '𪢮',
+'坿' => '附',
+'垜' => '垛',
 '垵' => '埯',
 '埡' => '垭',
 '埰' => '采',
@@ -10344,19 +9777,24 @@ $zh2Hans = array(
 '塒' => '埘',
 '塗' => '涂',
 '塚' => '冢',
+'塟' => '葬',
 '塢' => '坞',
 '塤' => '埙',
+'塲' => '场',
 '塵' => '尘',
 '塹' => '堑',
 '墊' => '垫',
+'墖' => '塔',
 '墜' => '坠',
 '墮' => '堕',
 '墰' => '坛',
 '墳' => '坟',
+'墻' => '墙',
 '墾' => '垦',
 '壇' => '坛',
 '壈' => '𡒄',
 '壋' => '垱',
+'壎' => '埙',
 '壓' => '压',
 '壘' => '垒',
 '壙' => '圹',
@@ -10369,8 +9807,10 @@ $zh2Hans = array(
 '壩' => '坝',
 '壯' => '壮',
 '壺' => '壶',
+'壻' => '婿',
 '壼' => '壸',
 '壽' => '寿',
+'夘' => '卯',
 '夠' => '够',
 '夢' => '梦',
 '夥' => '伙',
@@ -10379,78 +9819,111 @@ $zh2Hans = array(
 '奧' => '奥',
 '奩' => '奁',
 '奪' => '夺',
+'奬' => '奖',
 '奮' => '奋',
 '奼' => '姹',
 '妝' => '妆',
+'妬' => '妒',
+'妳' => '你',
+'妷' => '侄',
+'姉' => '姊',
 '姍' => '姗',
+'姙' => '妊',
 '姦' => '奸',
+'姪' => '侄',
+'姸' => '妍',
 '娛' => '娱',
 '婁' => '娄',
+'婣' => '姻',
 '婦' => '妇',
+'婬' => '淫',
 '婭' => '娅',
+'媍' => '妇',
 '媧' => '娲',
 '媯' => '妫',
 '媰' => '㛀',
 '媼' => '媪',
 '媽' => '妈',
+'媿' => '愧',
+'嫋' => '袅',
 '嫗' => '妪',
+'嫰' => '嫩',
 '嫵' => '妩',
+'嫺' => '娴',
 '嫻' => '娴',
 '嫿' => '婳',
+'嬀' => '妫',
 '嬃' => '媭',
 '嬈' => '娆',
 '嬋' => '婵',
 '嬌' => '娇',
 '嬙' => '嫱',
+'嬝' => '袅',
 '嬡' => '嫒',
 '嬤' => '嬷',
 '嬪' => '嫔',
+'嬭' => '奶',
 '嬰' => '婴',
 '嬸' => '婶',
+'嬾' => '懒',
+'孃' => '娘',
 '孋' => '㛤',
 '孌' => '娈',
 '孫' => '孙',
 '學' => '学',
+'孼' => '孽',
 '孿' => '孪',
+'宂' => '冗',
 '宮' => '宫',
 '寀' => '采',
+'寃' => '冤',
+'寑' => '寝',
 '寢' => '寝',
 '實' => '实',
 '寧' => '宁',
 '審' => '审',
 '寫' => '写',
 '寬' => '宽',
+'寳' => '宝',
 '寵' => '宠',
 '寶' => '宝',
+'尅' => '克',
 '將' => '将',
 '專' => '专',
 '尋' => '寻',
 '對' => '对',
 '導' => '导',
+'尒' => '尔',
+'尙' => '尚',
+'尟' => '鲜',
+'尠' => '鲜',
 '尷' => '尴',
 '屆' => '届',
 '屍' => '尸',
 '屓' => '屃',
+'屛' => '屏',
 '屜' => '屉',
 '屢' => '屡',
 '層' => '层',
 '屨' => '屦',
 '屩' => '𪨗',
 '屬' => '属',
+'屭' => '屃',
+'岅' => '坂',
 '岡' => '冈',
+'峝' => '峒',
 '峴' => '岘',
 '島' => '岛',
 '峽' => '峡',
 '崍' => '崃',
-'崑' => '昆',
 '崗' => '岗',
-'崙' => '仑',
 '崢' => '峥',
 '崬' => '岽',
 '嵐' => '岚',
 '嵗' => '岁',
 '嵼' => '𡶴',
 '嶁' => '嵝',
+'嶃' => '崭',
 '嶄' => '崭',
 '嶇' => '岖',
 '嶔' => '嵚',
@@ -10458,6 +9931,7 @@ $zh2Hans = array(
 '嶠' => '峤',
 '嶢' => '峣',
 '嶧' => '峄',
+'嶨' => '峃',
 '嶮' => '崄',
 '嶴' => '岙',
 '嶸' => '嵘',
@@ -10468,28 +9942,40 @@ $zh2Hans = array(
 '巒' => '峦',
 '巔' => '巅',
 '巖' => '岩',
+'巗' => '岩',
 '巰' => '巯',
-'巹' => '卺',
+'巵' => '卮',
+'帀' => '匝',
+'帋' => '纸',
 '帥' => '帅',
 '師' => '师',
+'帬' => '裙',
 '帳' => '帐',
 '帶' => '带',
 '幀' => '帧',
 '幃' => '帏',
+'幇' => '帮',
+'幑' => '徽',
 '幗' => '帼',
 '幘' => '帻',
+'幙' => '幕',
+'幚' => '帮',
 '幟' => '帜',
 '幣' => '币',
 '幫' => '帮',
 '幬' => '帱',
 '幹' => '干',
-'幺' => '么',
 '幾' => '几',
 '庫' => '库',
+'庻' => '庶',
+'庽' => '寓',
 '廁' => '厕',
 '廂' => '厢',
 '廄' => '厩',
 '廈' => '厦',
+'廎' => '庼',
+'廐' => '厩',
+'廕' => '荫',
 '廚' => '厨',
 '廝' => '厮',
 '廟' => '庙',
@@ -10500,6 +9986,10 @@ $zh2Hans = array(
 '廩' => '廪',
 '廬' => '庐',
 '廳' => '厅',
+'廵' => '巡',
+'廹' => '迫',
+'廻' => '回',
+'廼' => '乃',
 '弒' => '弑',
 '弔' => '吊',
 '弳' => '弪',
@@ -10513,45 +10003,63 @@ $zh2Hans = array(
 '彞' => '彝',
 '彠' => '彟',
 '彥' => '彦',
+'彫' => '雕',
 '彲' => '彨',
+'徃' => '往',
 '後' => '后',
 '徑' => '径',
 '從' => '从',
 '徠' => '徕',
+'徧' => '遍',
 '復' => '复',
 '徵' => '征',
 '徹' => '彻',
+'怱' => '匆',
+'怳' => '恍',
 '恆' => '恒',
+'恠' => '怪',
+'恡' => '吝',
 '恥' => '耻',
 '悅' => '悦',
 '悞' => '悮',
+'悤' => '匆',
 '悵' => '怅',
 '悶' => '闷',
+'悽' => '凄',
+'惏' => '婪',
 '惡' => '恶',
+'惥' => '恿',
 '惱' => '恼',
 '惲' => '恽',
+'惷' => '蠢',
 '惻' => '恻',
 '愛' => '爱',
 '愜' => '惬',
 '愨' => '悫',
 '愴' => '怆',
 '愷' => '恺',
+'愽' => '博',
 '愾' => '忾',
 '慄' => '栗',
 '態' => '态',
 '慍' => '愠',
 '慘' => '惨',
+'慙' => '惭',
 '慚' => '惭',
 '慟' => '恸',
 '慣' => '惯',
+'慤' => '悫',
 '慪' => '怄',
 '慫' => '怂',
 '慮' => '虑',
 '慳' => '悭',
+'慴' => '慑',
 '慶' => '庆',
 '慼' => '戚',
+'慽' => '戚',
 '慾' => '欲',
 '憂' => '忧',
+'憇' => '憩',
 '憊' => '惫',
 '憐' => '怜',
 '憑' => '凭',
@@ -10581,20 +10089,26 @@ $zh2Hans = array(
 '戀' => '恋',
 '戇' => '戆',
 '戔' => '戋',
+'戞' => '戛',
 '戧' => '戗',
 '戩' => '戬',
+'戯' => '戏',
 '戰' => '战',
 '戱' => '戯',
 '戲' => '戏',
 '戶' => '户',
+'戹' => '厄',
+'扞' => '捍',
+'抝' => '拗',
 '拋' => '抛',
 '拚' => '拼',
 '挩' => '捝',
 '挱' => '挲',
+'挵' => '弄',
 '挾' => '挟',
+'捄' => '救',
 '捨' => '舍',
 '捫' => '扪',
-'捱' => '挨',
 '捲' => '卷',
 '掃' => '扫',
 '掄' => '抡',
@@ -10603,15 +10117,29 @@ $zh2Hans = array(
 '掙' => '挣',
 '掛' => '挂',
 '採' => '采',
+'掽' => '碰',
 '揀' => '拣',
+'揑' => '捏',
 '揚' => '扬',
 '換' => '换',
+'揫' => '揪',
 '揮' => '挥',
+'揷' => '插',
+'揹' => '背',
+'搆' => '构',
+'搇' => '揿',
+'搉' => '榷',
 '損' => '损',
 '搖' => '摇',
 '搗' => '捣',
+'搤' => '扼',
+'搥' => '捶',
+'搨' => '拓',
+'搯' => '掏',
 '搵' => '揾',
 '搶' => '抢',
+'搾' => '榨',
+'摃' => '扛',
 '摋' => '𢫬',
 '摑' => '掴',
 '摜' => '掼',
@@ -10627,8 +10155,10 @@ $zh2Hans = array(
 '撓' => '挠',
 '撝' => '㧑',
 '撟' => '挢',
+'撡' => '操',
 '撣' => '掸',
 '撥' => '拨',
+'撦' => '扯',
 '撫' => '抚',
 '撲' => '扑',
 '撳' => '揿',
@@ -10642,9 +10172,11 @@ $zh2Hans = array(
 '擋' => '挡',
 '擓' => '㧟',
 '擔' => '担',
+'擕' => '携',
 '據' => '据',
 '擠' => '挤',
 '擣' => '𢭏',
+'擧' => '举',
 '擬' => '拟',
 '擯' => '摈',
 '擰' => '拧',
@@ -10669,12 +10201,17 @@ $zh2Hans = array(
 '攢' => '攒',
 '攣' => '挛',
 '攤' => '摊',
+'攩' => '挡',
 '攪' => '搅',
 '攬' => '揽',
+'攷' => '考',
+'敂' => '叩',
+'敍' => '叙',
 '敗' => '败',
 '敘' => '叙',
 '敵' => '敌',
 '數' => '数',
+'敺' => '驱',
 '斂' => '敛',
 '斃' => '毙',
 '斅' => '𢽾',
@@ -10685,7 +10222,10 @@ $zh2Hans = array(
 '於' => '于',
 '旂' => '旗',
 '旣' => '既',
-'昇' => '升',
+'旤' => '祸',
+'旹' => '时',
+'旾' => '春',
+'昬' => '昏',
 '時' => '时',
 '晉' => '晋',
 '晝' => '昼',
@@ -10694,24 +10234,38 @@ $zh2Hans = array(
 '暘' => '旸',
 '暢' => '畅',
 '暫' => '暂',
+'暱' => '昵',
 '曄' => '晔',
 '曆' => '历',
 '曇' => '昙',
 '曉' => '晓',
-'曏' => '向',
 '曖' => '暧',
 '曠' => '旷',
+'曡' => '叠',
 '曥' => '𣆐',
 '曨' => '昽',
 '曬' => '晒',
 '書' => '书',
 '會' => '会',
+'朞' => '期',
+'朢' => '望',
 '朥' => '𦛨',
 '朧' => '胧',
 '朮' => '术',
+'朶' => '朵',
 '東' => '东',
 '杴' => '锨',
+'枱' => '台',
 '柵' => '栅',
+'柺' => '拐',
+'査' => '查',
+'栁' => '柳',
+'栞' => '刊',
+'栢' => '柏',
+'栰' => '筏',
+'桒' => '桑',
+'桮' => '杯',
+'桺' => '柳',
 '桿' => '杆',
 '梔' => '栀',
 '梘' => '枧',
@@ -10727,10 +10281,17 @@ $zh2Hans = array(
 '棧' => '栈',
 '棲' => '栖',
 '棶' => '梾',
+'椀' => '碗',
+'椉' => '乘',
 '椏' => '桠',
+'椗' => '碇',
 '椲' => '㭏',
+'椶' => '棕',
+'椷' => '缄',
+'椾' => '笺',
 '楊' => '杨',
 '楓' => '枫',
+'楥' => '楦',
 '楨' => '桢',
 '業' => '业',
 '極' => '极',
@@ -10742,9 +10303,11 @@ $zh2Hans = array(
 '構' => '构',
 '槍' => '枪',
 '槓' => '杠',
+'槕' => '桌',
 '槤' => '梿',
 '槧' => '椠',
 '槨' => '椁',
+'槮' => '椮',
 '槳' => '桨',
 '槶' => '椢',
 '槼' => '椝',
@@ -10765,6 +10328,7 @@ $zh2Hans = array(
 '樿' => '椫',
 '橈' => '桡',
 '橋' => '桥',
+'橜' => '橛',
 '機' => '机',
 '橢' => '椭',
 '橫' => '横',
@@ -10782,6 +10346,7 @@ $zh2Hans = array(
 '檸' => '柠',
 '檻' => '槛',
 '櫃' => '柜',
+'櫈' => '凳',
 '櫓' => '橹',
 '櫚' => '榈',
 '櫛' => '栉',
@@ -10806,16 +10371,21 @@ $zh2Hans = array(
 '欒' => '栾',
 '欓' => '𣗋',
 '欖' => '榄',
+'欝' => '郁',
 '欞' => '棂',
+'欵' => '款',
 '欽' => '钦',
 '歎' => '叹',
 '歐' => '欧',
+'歛' => '敛',
 '歟' => '欤',
 '歡' => '欢',
 '歲' => '岁',
+'歴' => '历',
 '歷' => '历',
 '歸' => '归',
 '歿' => '殁',
+'殀' => '夭',
 '殘' => '残',
 '殞' => '殒',
 '殤' => '殇',
@@ -10827,18 +10397,24 @@ $zh2Hans = array(
 '殰' => '㱩',
 '殲' => '歼',
 '殺' => '杀',
+'殻' => '壳',
 '殼' => '壳',
 '毀' => '毁',
 '毆' => '殴',
+'毧' => '绒',
+'毬' => '球',
 '毿' => '毵',
 '氂' => '牦',
 '氈' => '毡',
+'氊' => '毡',
 '氌' => '氇',
 '氣' => '气',
 '氫' => '氢',
 '氬' => '氩',
 '氳' => '氲',
+'氷' => '冰',
 '汙' => '污',
+'汚' => '污',
 '決' => '决',
 '沒' => '没',
 '沖' => '冲',
@@ -10848,9 +10424,11 @@ $zh2Hans = array(
 '洶' => '汹',
 '浹' => '浃',
 '涇' => '泾',
+'涖' => '莅',
 '涼' => '凉',
 '淒' => '凄',
 '淚' => '泪',
+'淛' => '浙',
 '淥' => '渌',
 '淨' => '净',
 '淩' => '凌',
@@ -10868,19 +10446,25 @@ $zh2Hans = array(
 '湞' => '浈',
 '湧' => '涌',
 '湯' => '汤',
+'湻' => '淳',
+'湼' => '涅',
 '溈' => '沩',
 '準' => '准',
 '溝' => '沟',
 '溫' => '温',
+'溮' => '浉',
 '溳' => '涢',
+'溼' => '湿',
 '滄' => '沧',
 '滅' => '灭',
 '滌' => '涤',
 '滎' => '荥',
 '滙' => '汇',
+'滛' => '淫',
 '滬' => '沪',
 '滯' => '滞',
 '滲' => '渗',
+'滷' => '卤',
 '滸' => '浒',
 '滻' => '浐',
 '滾' => '滚',
@@ -10896,8 +10480,10 @@ $zh2Hans = array(
 '漸' => '渐',
 '漿' => '浆',
 '潁' => '颍',
+'潄' => '漱',
 '潑' => '泼',
 '潔' => '洁',
+'潙' => '沩',
 '潛' => '潜',
 '潤' => '润',
 '潯' => '浔',
@@ -10905,6 +10491,7 @@ $zh2Hans = array(
 '潷' => '滗',
 '潿' => '涠',
 '澀' => '涩',
+'澁' => '涩',
 '澅' => '𣶩',
 '澆' => '浇',
 '澇' => '涝',
@@ -10921,6 +10508,7 @@ $zh2Hans = array(
 '濃' => '浓',
 '濄' => '㳡',
 '濆' => '𣸣',
+'濇' => '涩',
 '濕' => '湿',
 '濘' => '泞',
 '濜' => '浕',
@@ -10930,6 +10518,7 @@ $zh2Hans = array(
 '濫' => '滥',
 '濰' => '潍',
 '濱' => '滨',
+'濶' => '阔',
 '濺' => '溅',
 '濼' => '泺',
 '濾' => '滤',
@@ -10954,6 +10543,7 @@ $zh2Hans = array(
 '瀾' => '澜',
 '灃' => '沣',
 '灄' => '滠',
+'灋' => '法',
 '灑' => '洒',
 '灕' => '漓',
 '灘' => '滩',
@@ -10964,13 +10554,17 @@ $zh2Hans = array(
 '灣' => '湾',
 '灤' => '滦',
 '灧' => '滟',
+'灩' => '滟',
 '災' => '灾',
 '為' => '为',
 '烏' => '乌',
+'烖' => '灾',
 '烴' => '烃',
 '無' => '无',
 '煉' => '炼',
+'煑' => '煮',
 '煒' => '炜',
+'煗' => '暖',
 '煙' => '烟',
 '煢' => '茕',
 '煥' => '焕',
@@ -10978,6 +10572,7 @@ $zh2Hans = array(
 '煬' => '炀',
 '煱' => '㶽',
 '熅' => '煴',
+'熈' => '熙',
 '熉' => '𤈶',
 '熌' => '𤇄',
 '熒' => '荧',
@@ -10988,7 +10583,9 @@ $zh2Hans = array(
 '熲' => '颎',
 '熾' => '炽',
 '燁' => '烨',
+'燄' => '焰',
 '燈' => '灯',
+'燉' => '炖',
 '燒' => '烧',
 '燙' => '烫',
 '燜' => '焖',
@@ -10998,26 +10595,39 @@ $zh2Hans = array(
 '燭' => '烛',
 '燴' => '烩',
 '燶' => '㶶',
+'燻' => '熏',
 '燼' => '烬',
 '燾' => '焘',
 '爄' => '𤇃',
 '爍' => '烁',
 '爐' => '炉',
+'爗' => '烨',
 '爛' => '烂',
 '爭' => '争',
 '爲' => '为',
 '爺' => '爷',
 '爾' => '尔',
+'牀' => '床',
 '牆' => '墙',
+'牋' => '笺',
+'牎' => '窗',
+'牐' => '闸',
+'牓' => '榜',
+'牕' => '窗',
 '牘' => '牍',
+'牠' => '它',
+'牴' => '抵',
 '牽' => '牵',
 '犖' => '荦',
 '犢' => '犊',
 '犧' => '牺',
 '狀' => '状',
+'狥' => '徇',
 '狹' => '狭',
 '狽' => '狈',
+'猂' => '悍',
 '猙' => '狰',
+'猨' => '猿',
 '猶' => '犹',
 '猻' => '狲',
 '獁' => '犸',
@@ -11025,6 +10635,8 @@ $zh2Hans = array(
 '獄' => '狱',
 '獅' => '狮',
 '獎' => '奖',
+'獘' => '毙',
+'獧' => '狷',
 '獨' => '独',
 '獪' => '狯',
 '獫' => '猃',
@@ -11040,23 +10652,32 @@ $zh2Hans = array(
 '獼' => '猕',
 '玀' => '猡',
 '玁' => '𤞤',
+'玅' => '妙',
 '現' => '现',
+'琖' => '盏',
+'琱' => '雕',
 '琺' => '珐',
 '琿' => '珲',
+'瑇' => '玳',
 '瑋' => '玮',
 '瑒' => '玚',
 '瑣' => '琐',
 '瑤' => '瑶',
 '瑩' => '莹',
 '瑪' => '玛',
+'瑯' => '琅',
 '瑲' => '玱',
 '瑽' => '𪻐',
 '璉' => '琏',
+'璡' => '琎',
+'璢' => '瑠',
 '璣' => '玑',
 '璦' => '瑷',
 '璫' => '珰',
 '璯' => '㻅',
 '環' => '环',
+'璵' => '玙',
+'璸' => '瑸',
 '璽' => '玺',
 '瓊' => '琼',
 '瓏' => '珑',
@@ -11064,34 +10685,52 @@ $zh2Hans = array(
 '瓕' => '𤦀',
 '瓚' => '瓒',
 '甌' => '瓯',
+'甎' => '砖',
 '甕' => '瓮',
+'甖' => '罂',
+'甞' => '尝',
 '產' => '产',
-'甦' => '苏',
-'甯' => '宁',
+'産' => '产',
+'畂' => '亩',
+'畆' => '亩',
 '畝' => '亩',
 '畢' => '毕',
+'畧' => '略',
 '畫' => '画',
+'畮' => '亩',
 '異' => '异',
+'畱' => '留',
 '畵' => '画',
 '當' => '当',
 '疇' => '畴',
 '疊' => '叠',
+'疎' => '疏',
+'疘' => '肛',
+'疿' => '痱',
+'痐' => '蛔',
 '痙' => '痉',
 '痠' => '酸',
-'痾' => '疴',
+'痲' => '痳',
+'痺' => '痹',
 '瘂' => '痖',
+'瘉' => '愈',
 '瘋' => '疯',
 '瘍' => '疡',
 '瘓' => '痪',
+'瘖' => '喑',
 '瘞' => '瘗',
 '瘡' => '疮',
 '瘧' => '疟',
 '瘮' => '瘆',
 '瘲' => '疭',
 '瘺' => '瘘',
+'瘻' => '瘘',
 '療' => '疗',
+'癄' => '憔',
+'癅' => '瘤',
 '癆' => '痨',
 '癇' => '痫',
+'癈' => '废',
 '癉' => '瘅',
 '癒' => '愈',
 '癘' => '疠',
@@ -11109,12 +10748,18 @@ $zh2Hans = array(
 '癱' => '瘫',
 '癲' => '癫',
 '發' => '发',
+'皁' => '皂',
+'皐' => '皋',
 '皚' => '皑',
+'皜' => '皓',
 '皟' => '𤾀',
 '皰' => '疱',
+'皷' => '鼓',
 '皸' => '皲',
 '皺' => '皱',
 '盃' => '杯',
+'盇' => '盍',
+'盌' => '碗',
 '盜' => '盗',
 '盞' => '盏',
 '盡' => '尽',
@@ -11122,13 +10767,19 @@ $zh2Hans = array(
 '盤' => '盘',
 '盧' => '卢',
 '盪' => '荡',
+'眎' => '视',
 '眞' => '真',
+'眡' => '视',
 '眥' => '眦',
 '眾' => '众',
 '睍' => '𪾢',
 '睏' => '困',
 '睜' => '睁',
 '睞' => '睐',
+'睠' => '眷',
+'睪' => '睾',
+'瞇' => '眯',
+'瞖' => '翳',
 '瞘' => '眍',
 '瞜' => '䁖',
 '瞞' => '瞒',
@@ -11136,18 +10787,21 @@ $zh2Hans = array(
 '瞭' => '了',
 '瞶' => '瞆',
 '瞼' => '睑',
+'矁' => '瞅',
 '矇' => '蒙',
 '矓' => '眬',
+'矙' => '瞰',
 '矚' => '瞩',
 '矯' => '矫',
+'砲' => '炮',
 '硃' => '朱',
 '硜' => '硁',
 '硤' => '硖',
 '硨' => '砗',
 '硯' => '砚',
-'碕' => '埼',
 '碙' => '𥐻',
 '碩' => '硕',
+'碪' => '砧',
 '碭' => '砀',
 '碸' => '砜',
 '確' => '确',
@@ -11155,13 +10809,14 @@ $zh2Hans = array(
 '碽' => '䂵',
 '磑' => '硙',
 '磚' => '砖',
+'磟' => '碌',
 '磠' => '硵',
 '磣' => '碜',
 '磧' => '碛',
 '磯' => '矶',
 '磽' => '硗',
 '礄' => '硚',
-'ç¤\86' => 'ç¡·',
+'ç¤\86' => '碱',
 '礎' => '础',
 '礒' => '𥐟',
 '礙' => '碍',
@@ -11169,7 +10824,9 @@ $zh2Hans = array(
 '礪' => '砺',
 '礫' => '砾',
 '礬' => '矾',
+'礮' => '炮',
 '礱' => '砻',
+'祕' => '秘',
 '祘' => '算',
 '祿' => '禄',
 '禍' => '祸',
@@ -11183,13 +10840,20 @@ $zh2Hans = array(
 '禱' => '祷',
 '禿' => '秃',
 '秈' => '籼',
+'秊' => '年',
+'秌' => '秋',
+'秖' => '只',
 '稅' => '税',
 '稈' => '秆',
+'稉' => '粳',
 '稏' => '䅉',
 '稜' => '棱',
 '稟' => '禀',
+'稬' => '糯',
+'稭' => '秸',
 '種' => '种',
 '稱' => '称',
+'稾' => '稿',
 '穀' => '谷',
 '穌' => '稣',
 '積' => '积',
@@ -11197,50 +10861,71 @@ $zh2Hans = array(
 '穠' => '秾',
 '穡' => '穑',
 '穢' => '秽',
+'穤' => '糯',
+'穨' => '颓',
 '穩' => '稳',
 '穫' => '获',
 '穭' => '稆',
+'穽' => '阱',
+'窓' => '窗',
 '窩' => '窝',
 '窪' => '洼',
 '窮' => '穷',
 '窯' => '窑',
+'窰' => '窑',
 '窵' => '窎',
 '窶' => '窭',
 '窺' => '窥',
+'窻' => '窗',
 '竄' => '窜',
 '竅' => '窍',
 '竇' => '窦',
+'竈' => '灶',
 '竊' => '窃',
+'竚' => '伫',
+'竝' => '并',
+'竢' => '俟',
+'竪' => '竖',
 '競' => '竞',
 '筆' => '笔',
 '筍' => '笋',
+'筞' => '策',
 '筧' => '笕',
+'筩' => '筒',
+'筯' => '箸',
 '筴' => '䇲',
 '箇' => '个',
 '箋' => '笺',
 '箏' => '筝',
+'箒' => '帚',
+'箠' => '棰',
 '節' => '节',
 '範' => '范',
 '築' => '筑',
 '篋' => '箧',
 '篔' => '筼',
 '篘' => '𥬠',
+'篛' => '箬',
 '篤' => '笃',
 '篩' => '筛',
 '篳' => '筚',
 '簀' => '箦',
 '簍' => '篓',
 '簑' => '蓑',
+'簒' => '篡',
 '簞' => '箪',
 '簡' => '简',
 '簣' => '篑',
 '簫' => '箫',
+'簮' => '簪',
+'簷' => '檐',
 '簹' => '筜',
 '簽' => '签',
 '簾' => '帘',
 '籃' => '篮',
 '籋' => '𥬞',
 '籌' => '筹',
+'籐' => '藤',
 '籔' => '䉤',
 '籙' => '箓',
 '籛' => '篯',
@@ -11253,7 +10938,10 @@ $zh2Hans = array(
 '籬' => '篱',
 '籮' => '箩',
 '籲' => '吁',
+'粃' => '秕',
+'粧' => '妆',
 '粵' => '粤',
+'糉' => '粽',
 '糝' => '糁',
 '糞' => '粪',
 '糧' => '粮',
@@ -11286,6 +10974,7 @@ $zh2Hans = array(
 '紜' => '纭',
 '紝' => '纴',
 '紡' => '纺',
+'紥' => '扎',
 '紬' => '䌷',
 '紮' => '扎',
 '細' => '细',
@@ -11299,10 +10988,12 @@ $zh2Hans = array(
 '紿' => '绐',
 '絀' => '绌',
 '終' => '终',
+'絃' => '弦',
 '組' => '组',
 '絅' => '䌹',
 '絆' => '绊',
 '絎' => '绗',
+'絏' => '绁',
 '結' => '结',
 '絕' => '绝',
 '絛' => '绦',
@@ -11324,9 +11015,11 @@ $zh2Hans = array(
 '綆' => '绠',
 '綇' => '𦈋',
 '綈' => '绨',
+'綉' => '绣',
 '綌' => '绤',
 '綏' => '绥',
 '綐' => '䌼',
+'綑' => '捆',
 '經' => '经',
 '綜' => '综',
 '綞' => '缍',
@@ -11354,17 +11047,22 @@ $zh2Hans = array(
 '緊' => '紧',
 '緋' => '绯',
 '緍' => '𦈏',
+'緐' => '繁',
+'緑' => '绿',
 '緒' => '绪',
 '緓' => '绬',
+'緔' => '绱',
 '緗' => '缃',
 '緘' => '缄',
 '緙' => '缂',
 '線' => '线',
+'緜' => '绵',
 '緝' => '缉',
 '緞' => '缎',
 '締' => '缔',
 '緡' => '缗',
 '緣' => '缘',
+'緥' => '褓',
 '緦' => '缌',
 '編' => '编',
 '緩' => '缓',
@@ -11379,6 +11077,7 @@ $zh2Hans = array(
 '緸' => '𦈑',
 '緹' => '缇',
 '緻' => '致',
+'緼' => '缊',
 '縈' => '萦',
 '縉' => '缙',
 '縊' => '缢',
@@ -11393,6 +11092,7 @@ $zh2Hans = array(
 '縞' => '缟',
 '縟' => '缛',
 '縣' => '县',
+'縧' => '绦',
 '縫' => '缝',
 '縬' => '𦈚',
 '縭' => '缡',
@@ -11417,15 +11117,19 @@ $zh2Hans = array(
 '繓' => '𦈛',
 '織' => '织',
 '繕' => '缮',
+'繖' => '伞',
+'繙' => '翻',
 '繚' => '缭',
 '繞' => '绕',
 '繟' => '𦈎',
 '繡' => '绣',
 '繢' => '缋',
+'繦' => '襁',
 '繩' => '绳',
 '繪' => '绘',
 '繫' => '系',
 '繭' => '茧',
+'繮' => '缰',
 '繯' => '缳',
 '繰' => '缲',
 '繳' => '缴',
@@ -11449,23 +11153,34 @@ $zh2Hans = array(
 '纘' => '缵',
 '纜' => '缆',
 '缽' => '钵',
+'罇' => '樽',
 '罈' => '坛',
+'罋' => '瓮',
 '罌' => '罂',
 '罎' => '坛',
 '罰' => '罚',
 '罵' => '骂',
 '罷' => '罢',
+'罸' => '罚',
 '羅' => '罗',
 '羆' => '罴',
 '羈' => '羁',
 '羋' => '芈',
+'羗' => '羌',
+'羢' => '绒',
+'羣' => '群',
 '羥' => '羟',
 '羨' => '羡',
 '義' => '义',
+'羶' => '膻',
+'翄' => '翅',
 '習' => '习',
+'翫' => '玩',
 '翬' => '翚',
+'翶' => '翱',
 '翹' => '翘',
 '翽' => '翙',
+'耡' => '锄',
 '耬' => '耧',
 '耮' => '耢',
 '聖' => '圣',
@@ -11481,13 +11196,21 @@ $zh2Hans = array(
 '聽' => '听',
 '聾' => '聋',
 '肅' => '肃',
+'肎' => '肯',
+'肐' => '胳',
+'肧' => '胚',
+'胷' => '胸',
+'脃' => '脆',
 '脅' => '胁',
+'脇' => '胁',
 '脈' => '脉',
+'脗' => '吻',
 '脛' => '胫',
 '脣' => '唇',
 '脥' => '𣍰',
 '脫' => '脱',
 '脹' => '胀',
+'腁' => '胼',
 '腎' => '肾',
 '腖' => '胨',
 '腡' => '脶',
@@ -11497,66 +11220,90 @@ $zh2Hans = array(
 '腳' => '脚',
 '腸' => '肠',
 '膃' => '腽',
+'膓' => '肠',
 '膕' => '腘',
 '膚' => '肤',
+'膞' => '䏝',
 '膠' => '胶',
 '膢' => '𦝼',
 '膩' => '腻',
 '膽' => '胆',
 '膾' => '脍',
 '膿' => '脓',
+'臈' => '腊',
 '臉' => '脸',
+'臋' => '臀',
 '臍' => '脐',
 '臏' => '膑',
+'臕' => '膘',
 '臗' => '𣎑',
 '臘' => '腊',
+'臙' => '胭',
 '臚' => '胪',
+'臝' => '裸',
 '臟' => '脏',
 '臠' => '脔',
 '臢' => '臜',
 '臥' => '卧',
 '臨' => '临',
+'臯' => '皋',
 '臺' => '台',
 '與' => '与',
 '興' => '兴',
 '舉' => '举',
 '舊' => '旧',
+'舖' => '铺',
 '舘' => '馆',
+'舩' => '船',
 '艙' => '舱',
+'艢' => '樯',
+'艣' => '橹',
 '艤' => '舣',
 '艦' => '舰',
+'艪' => '橹',
 '艫' => '舻',
 '艱' => '艰',
 '艷' => '艳',
+'芲' => '花',
 '芻' => '刍',
 '苧' => '苎',
+'茘' => '荔',
 '茲' => '兹',
 '荊' => '荆',
+'荳' => '豆',
 '莊' => '庄',
 '莖' => '茎',
 '莢' => '荚',
 '莧' => '苋',
 '華' => '华',
-'è\8f´' => '庵',
+'è\8f¸' => 'ç\83\9f',
 '萇' => '苌',
 '萊' => '莱',
 '萬' => '万',
+'萲' => '萱',
 '萴' => '荝',
 '萵' => '莴',
 '葉' => '叶',
 '葒' => '荭',
+'葠' => '参',
 '葤' => '荮',
 '葦' => '苇',
+'葯' => '药',
 '葷' => '荤',
+'蒓' => '莼',
 '蒔' => '莳',
 '蒞' => '莅',
 '蒼' => '苍',
 '蓀' => '荪',
+'蓆' => '席',
 '蓋' => '盖',
+'蓡' => '参',
 '蓮' => '莲',
 '蓯' => '苁',
 '蓴' => '莼',
 '蓽' => '荜',
+'蔔' => '卜',
+'蔕' => '蒂',
 '蔘' => '参',
 '蔞' => '蒌',
 '蔣' => '蒋',
@@ -11570,11 +11317,13 @@ $zh2Hans = array(
 '蕓' => '芸',
 '蕕' => '莸',
 '蕘' => '荛',
+'蕚' => '萼',
 '蕢' => '蒉',
 '蕩' => '荡',
 '蕪' => '芜',
 '蕭' => '萧',
 '蕷' => '蓣',
+'蕿' => '萱',
 '薀' => '蕰',
 '薈' => '荟',
 '薊' => '蓟',
@@ -11593,17 +11342,24 @@ $zh2Hans = array(
 '藝' => '艺',
 '藥' => '药',
 '藪' => '薮',
+'藭' => '䓖',
+'藴' => '蕴',
 '藶' => '苈',
+'藷' => '薯',
 '藹' => '蔼',
 '藺' => '蔺',
+'藼' => '萱',
+'蘀' => '萚',
 '蘄' => '蕲',
 '蘆' => '芦',
 '蘇' => '苏',
 '蘊' => '蕴',
-'蘋' => '苹',
+'蘐' => '萱',
+'蘓' => '苏',
 '蘚' => '藓',
 '蘞' => '蔹',
 '蘢' => '茏',
+'蘤' => '花',
 '蘭' => '兰',
 '蘺' => '蓠',
 '蘿' => '萝',
@@ -11614,20 +11370,32 @@ $zh2Hans = array(
 '號' => '号',
 '虧' => '亏',
 '虯' => '虬',
+'蚘' => '蛔',
+'蛕' => '蛔',
 '蛺' => '蛱',
 '蛻' => '蜕',
 '蜆' => '蚬',
+'蜋' => '螂',
+'蜖' => '蛔',
+'蜨' => '蝶',
 '蝕' => '蚀',
 '蝟' => '猬',
 '蝦' => '虾',
+'蝨' => '虱',
+'蝯' => '猿',
+'蝱' => '虻',
 '蝸' => '蜗',
 '螄' => '蛳',
+'螎' => '融',
 '螞' => '蚂',
+'螡' => '蚊',
 '螢' => '萤',
 '螮' => '䗖',
 '螻' => '蝼',
 '螿' => '螀',
+'蟁' => '蚊',
 '蟄' => '蛰',
+'蟇' => '蟆',
 '蟈' => '蝈',
 '蟎' => '螨',
 '蟣' => '虮',
@@ -11640,37 +11408,53 @@ $zh2Hans = array(
 '蠅' => '蝇',
 '蠆' => '虿',
 '蠍' => '蝎',
+'蠏' => '蟹',
 '蠐' => '蛴',
 '蠑' => '蝾',
+'蠒' => '茧',
+'蠔' => '蚝',
 '蠟' => '蜡',
 '蠣' => '蛎',
 '蠨' => '蟏',
+'蠭' => '蜂',
 '蠱' => '蛊',
 '蠶' => '蚕',
 '蠻' => '蛮',
+'衂' => '衄',
+'衆' => '众',
+'衇' => '脉',
 '衊' => '蔑',
 '術' => '术',
 '衕' => '同',
+'衖' => '弄',
 '衚' => '胡',
 '衛' => '卫',
 '衝' => '冲',
+'衞' => '卫',
+'衺' => '邪',
 '袞' => '衮',
+'袟' => '帙',
+'袵' => '衽',
 '裊' => '袅',
+'裌' => '袷',
 '裏' => '里',
 '補' => '补',
 '裝' => '装',
+'裠' => '裙',
 '裡' => '里',
 '製' => '制',
 '複' => '复',
 '褌' => '裈',
 '褘' => '袆',
+'褭' => '袅',
 '褲' => '裤',
 '褳' => '裢',
 '褸' => '褛',
 '褻' => '亵',
 '襀' => '𫌀',
-'è¥\86' => 'å¹\9e',
+'è¥\83' => 'è¤\92',
 '襉' => '裥',
+'襍' => '杂',
 '襏' => '袯',
 '襖' => '袄',
 '襝' => '裣',
@@ -11681,15 +11465,20 @@ $zh2Hans = array(
 '襯' => '衬',
 '襲' => '袭',
 '襴' => '襕',
+'覇' => '霸',
+'覈' => '核',
+'覊' => '羁',
 '見' => '见',
 '覎' => '觃',
 '規' => '规',
 '覓' => '觅',
+'覔' => '觅',
 '視' => '视',
 '覘' => '觇',
 '覡' => '觋',
 '覥' => '觍',
 '覦' => '觎',
+'覩' => '睹',
 '親' => '亲',
 '覬' => '觊',
 '覯' => '觏',
@@ -11700,6 +11489,8 @@ $zh2Hans = array(
 '覽' => '览',
 '覿' => '觌',
 '觀' => '观',
+'觔' => '斤',
+'觝' => '抵',
 '觴' => '觞',
 '觶' => '觯',
 '觸' => '触',
@@ -11732,12 +11523,12 @@ $zh2Hans = array(
 '訶' => '诃',
 '診' => '诊',
 '註' => '注',
+'証' => '证',
 '詀' => '𧮪',
 '詁' => '诂',
 '詆' => '诋',
 '詎' => '讵',
 '詐' => '诈',
-'詑' => '𫍟',
 '詒' => '诒',
 '詔' => '诏',
 '評' => '评',
@@ -11761,6 +11552,7 @@ $zh2Hans = array(
 '該' => '该',
 '詳' => '详',
 '詵' => '诜',
+'詶' => '酬',
 '詼' => '诙',
 '詿' => '诖',
 '誄' => '诔',
@@ -11772,6 +11564,7 @@ $zh2Hans = array(
 '誑' => '诳',
 '誒' => '诶',
 '誕' => '诞',
+'誖' => '悖',
 '誘' => '诱',
 '誚' => '诮',
 '語' => '语',
@@ -11783,6 +11576,7 @@ $zh2Hans = array(
 '誦' => '诵',
 '誨' => '诲',
 '說' => '说',
+'説' => '说',
 '誰' => '谁',
 '課' => '课',
 '誶' => '谇',
@@ -11805,13 +11599,14 @@ $zh2Hans = array(
 '諜' => '谍',
 '諝' => '谞',
 '諞' => '谝',
+'諡' => '谥',
 '諢' => '诨',
 '諤' => '谔',
 '諦' => '谛',
 '諧' => '谐',
 '諫' => '谏',
 '諭' => '谕',
-'諮' => '',
+'諮' => '',
 '諰' => '𫍰',
 '諱' => '讳',
 '諳' => '谙',
@@ -11827,6 +11622,7 @@ $zh2Hans = array(
 '謄' => '誊',
 '謅' => '诌',
 '謊' => '谎',
+'謌' => '歌',
 '謎' => '谜',
 '謏' => '𫍲',
 '謐' => '谧',
@@ -11838,21 +11634,28 @@ $zh2Hans = array(
 '講' => '讲',
 '謝' => '谢',
 '謠' => '谣',
+'謡' => '谣',
 '謨' => '谟',
 '謫' => '谪',
 '謬' => '谬',
+'謭' => '谫',
 '謳' => '讴',
 '謹' => '谨',
 '謾' => '谩',
+'譁' => '哗',
+'譆' => '嘻',
 '證' => '证',
 '譊' => '𫍢',
+'譌' => '讹',
 '譎' => '谲',
 '譏' => '讥',
+'譔' => '撰',
 '譖' => '谮',
 '識' => '识',
 '譙' => '谯',
 '譚' => '谭',
 '譜' => '谱',
+'譟' => '噪',
 '譫' => '谵',
 '譭' => '毁',
 '譯' => '译',
@@ -11863,10 +11666,12 @@ $zh2Hans = array(
 '譽' => '誉',
 '譾' => '谫',
 '讀' => '读',
+'讁' => '谪',
 '變' => '变',
 '讋' => '詟',
 '讌' => '䜩',
 '讎' => '仇',
+'讐' => '雠',
 '讒' => '谗',
 '讓' => '让',
 '讕' => '谰',
@@ -11877,11 +11682,14 @@ $zh2Hans = array(
 '豈' => '岂',
 '豎' => '竖',
 '豐' => '丰',
+'豓' => '艳',
 '豔' => '艳',
 '豬' => '猪',
 '豶' => '豮',
+'貍' => '狸',
 '貓' => '猫',
 '貙' => '䝙',
+'貛' => '獾',
 '貝' => '贝',
 '貞' => '贞',
 '貟' => '贠',
@@ -11915,6 +11723,7 @@ $zh2Hans = array(
 '賅' => '赅',
 '資' => '资',
 '賈' => '贾',
+'賉' => '恤',
 '賊' => '贼',
 '賑' => '赈',
 '賒' => '赊',
@@ -11922,6 +11731,7 @@ $zh2Hans = array(
 '賕' => '赇',
 '賙' => '赒',
 '賚' => '赉',
+'賛' => '赞',
 '賜' => '赐',
 '賞' => '赏',
 '賟' => '𧹖',
@@ -11933,11 +11743,13 @@ $zh2Hans = array(
 '賦' => '赋',
 '賧' => '赕',
 '質' => '质',
+'賫' => '赍',
 '賬' => '账',
 '賭' => '赌',
 '賰' => '䞐',
 '賴' => '赖',
 '賵' => '赗',
+'賷' => '赍',
 '賺' => '赚',
 '賻' => '赙',
 '購' => '购',
@@ -11949,26 +11761,41 @@ $zh2Hans = array(
 '贇' => '赟',
 '贈' => '赠',
 '贊' => '赞',
+'贋' => '赝',
 '贍' => '赡',
 '贏' => '赢',
 '贐' => '赆',
+'贑' => '赣',
 '贓' => '赃',
 '贔' => '赑',
 '贖' => '赎',
 '贗' => '赝',
 '贛' => '赣',
+'贜' => '赃',
 '赬' => '赪',
+'趂' => '趁',
 '趕' => '赶',
 '趙' => '赵',
 '趨' => '趋',
 '趲' => '趱',
 '跡' => '迹',
+'跥' => '跺',
+'跴' => '踩',
+'踁' => '胫',
 '踐' => '践',
+'踫' => '碰',
+'踰' => '逾',
 '踴' => '踊',
 '蹌' => '跄',
+'蹏' => '蹄',
+'蹔' => '暂',
 '蹕' => '跸',
+'蹟' => '迹',
+'蹠' => '跖',
 '蹣' => '蹒',
 '蹤' => '踪',
+'蹧' => '糟',
+'蹵' => '蹴',
 '蹺' => '跷',
 '蹻' => '𫏋',
 '躂' => '跶',
@@ -11987,6 +11814,9 @@ $zh2Hans = array(
 '躥' => '蹿',
 '躦' => '躜',
 '躪' => '躏',
+'躭' => '耽',
+'躳' => '躬',
+'躶' => '裸',
 '軀' => '躯',
 '軉' => '𨉗',
 '車' => '车',
@@ -12022,6 +11852,7 @@ $zh2Hans = array(
 '輔' => '辅',
 '輕' => '轻',
 '輗' => '𫐐',
+'輙' => '辄',
 '輛' => '辆',
 '輜' => '辎',
 '輝' => '辉',
@@ -12032,11 +11863,13 @@ $zh2Hans = array(
 '輩' => '辈',
 '輪' => '轮',
 '輬' => '辌',
+'輭' => '软',
 '輮' => '𫐓',
 '輯' => '辑',
 '輳' => '辏',
 '輸' => '输',
 '輻' => '辐',
+'輼' => '辒',
 '輾' => '辗',
 '輿' => '舆',
 '轀' => '辒',
@@ -12053,17 +11886,27 @@ $zh2Hans = array(
 '轢' => '轹',
 '轣' => '𫐆',
 '轤' => '轳',
+'辠' => '罪',
+'辢' => '辣',
+'辤' => '辞',
 '辦' => '办',
 '辭' => '辞',
 '辮' => '辫',
 '辯' => '辩',
 '農' => '农',
+'辳' => '农',
 '迴' => '回',
+'迻' => '移',
+'逈' => '迥',
 '逕' => '迳',
 '這' => '这',
 '連' => '连',
+'逥' => '回',
+'逩' => '奔',
+'逬' => '迸',
 '週' => '周',
 '進' => '进',
+'遉' => '侦',
 '遊' => '游',
 '運' => '运',
 '過' => '过',
@@ -12075,7 +11918,9 @@ $zh2Hans = array(
 '遠' => '远',
 '遡' => '溯',
 '適' => '适',
+'遯' => '遁',
 '遲' => '迟',
+'遶' => '绕',
 '遷' => '迁',
 '選' => '选',
 '遺' => '遗',
@@ -12102,6 +11947,11 @@ $zh2Hans = array(
 '鄺' => '邝',
 '酇' => '酂',
 '酈' => '郦',
+'酖' => '鸩',
+'酧' => '酬',
+'醃' => '腌',
+'醆' => '盏',
+'醕' => '醇',
 '醜' => '丑',
 '醞' => '酝',
 '醣' => '糖',
@@ -12109,12 +11959,13 @@ $zh2Hans = array(
 '醬' => '酱',
 '醯' => '酰',
 '醱' => '酦',
+'醻' => '酬',
+'醼' => '宴',
 '釀' => '酿',
 '釁' => '衅',
 '釃' => '酾',
 '釅' => '酽',
 '釋' => '释',
-'釐' => '厘',
 '釒' => '钅',
 '釓' => '钆',
 '釔' => '钇',
@@ -12125,8 +11976,10 @@ $zh2Hans = array(
 '針' => '针',
 '釣' => '钓',
 '釤' => '钐',
+'釦' => '扣',
 '釧' => '钏',
 '釩' => '钒',
+'釬' => '焊',
 '釳' => '𨰿',
 '釵' => '钗',
 '釷' => '钍',
@@ -12137,11 +11990,13 @@ $zh2Hans = array(
 '鈁' => '钫',
 '鈃' => '钘',
 '鈄' => '钭',
+'鈅' => '钥',
 '鈇' => '𫓧',
 '鈈' => '钚',
 '鈉' => '钠',
 '鈋' => '𨱂',
 '鈍' => '钝',
+'鈎' => '钩',
 '鈐' => '钤',
 '鈑' => '钣',
 '鈒' => '钑',
@@ -12169,6 +12024,7 @@ $zh2Hans = array(
 '鉀' => '钾',
 '鉁' => '𨱅',
 '鉅' => '钜',
+'鉆' => '钻',
 '鉈' => '铊',
 '鉉' => '铉',
 '鉋' => '铇',
@@ -12179,6 +12035,7 @@ $zh2Hans = array(
 '鉚' => '铆',
 '鉛' => '铅',
 '鉞' => '钺',
+'鉢' => '钵',
 '鉤' => '钩',
 '鉦' => '钲',
 '鉬' => '钼',
@@ -12209,6 +12066,7 @@ $zh2Hans = array(
 '銫' => '铯',
 '銬' => '铐',
 '銱' => '铞',
+'銲' => '焊',
 '銳' => '锐',
 '銶' => '𨱇',
 '銷' => '销',
@@ -12232,6 +12090,7 @@ $zh2Hans = array(
 '鋨' => '锇',
 '鋩' => '铓',
 '鋪' => '铺',
+'鋭' => '锐',
 '鋮' => '铖',
 '鋯' => '锆',
 '鋰' => '锂',
@@ -12263,10 +12122,12 @@ $zh2Hans = array(
 '錫' => '锡',
 '錮' => '锢',
 '錯' => '错',
+'録' => '录',
 '錳' => '锰',
 '錶' => '表',
 '錸' => '铼',
 '鍀' => '锝',
+'鍁' => '锨',
 '鍃' => '锪',
 '鍄' => '𨱉',
 '鍆' => '钔',
@@ -12283,13 +12144,15 @@ $zh2Hans = array(
 '鍤' => '锸',
 '鍥' => '锲',
 '鍩' => '锘',
+'鍫' => '锹',
 '鍬' => '锹',
 '鍮' => '𨱎',
 '鍰' => '锾',
+'鍳' => '鉴',
 '鍵' => '键',
 '鍶' => '锶',
 '鍺' => '锗',
-'é\8d¾' => 'é\92\9f',
+'é\8d¾' => 'é\94º',
 '鎂' => '镁',
 '鎄' => '锿',
 '鎇' => '镅',
@@ -12297,7 +12160,9 @@ $zh2Hans = array(
 '鎌' => '镰',
 '鎔' => '镕',
 '鎖' => '锁',
+'鎗' => '枪',
 '鎘' => '镉',
+'鎚' => '锤',
 '鎛' => '镈',
 '鎝' => '𨱏',
 '鎡' => '镃',
@@ -12308,7 +12173,7 @@ $zh2Hans = array(
 '鎩' => '铩',
 '鎪' => '锼',
 '鎬' => '镐',
-'é\8e­' => 'é\8e®',
+'é\8e­' => 'é\95\87',
 '鎮' => '镇',
 '鎯' => '𨱍',
 '鎰' => '镒',
@@ -12316,6 +12181,8 @@ $zh2Hans = array(
 '鎳' => '镍',
 '鎵' => '镓',
 '鎷' => '𨰾',
+'鎸' => '镌',
+'鎻' => '锁',
 '鎿' => '镎',
 '鏃' => '镞',
 '鏆' => '𨱌',
@@ -12356,6 +12223,7 @@ $zh2Hans = array(
 '鐔' => '镡',
 '鐘' => '钟',
 '鐙' => '镫',
+'鐝' => '镢',
 '鐠' => '镨',
 '鐥' => '䦅',
 '鐦' => '锎',
@@ -12378,14 +12246,18 @@ $zh2Hans = array(
 '鑒' => '鉴',
 '鑔' => '镲',
 '鑕' => '锧',
+'鑚' => '钻',
+'鑛' => '矿',
 '鑞' => '镴',
 '鑠' => '铄',
 '鑣' => '镳',
+'鑤' => '刨',
 '鑥' => '镥',
 '鑭' => '镧',
 '鑰' => '钥',
 '鑱' => '镵',
 '鑲' => '镶',
+'鑵' => '罐',
 '鑷' => '镊',
 '鑹' => '镩',
 '鑼' => '锣',
@@ -12393,7 +12265,7 @@ $zh2Hans = array(
 '鑾' => '銮',
 '鑿' => '凿',
 '钁' => '镢',
-'é\95\9f' => 'æ\97\8b',
+'é\92\82' => 'é\95\8b',
 '長' => '长',
 '門' => '门',
 '閂' => '闩',
@@ -12412,16 +12284,19 @@ $zh2Hans = array(
 '間' => '间',
 '閔' => '闵',
 '閘' => '闸',
+'閙' => '闹',
 '閡' => '阂',
 '閣' => '阁',
-'閤' => '',
+'閤' => '',
 '閥' => '阀',
+'閧' => '哄',
 '閨' => '闺',
 '閩' => '闽',
 '閫' => '阃',
 '閬' => '阆',
 '閭' => '闾',
 '閱' => '阅',
+'閲' => '阅',
 '閶' => '阊',
 '閹' => '阉',
 '閻' => '阎',
@@ -12431,6 +12306,7 @@ $zh2Hans = array(
 '閿' => '阌',
 '闃' => '阒',
 '闆' => '板',
+'闇' => '暗',
 '闈' => '闱',
 '闊' => '阔',
 '闋' => '阕',
@@ -12442,6 +12318,7 @@ $zh2Hans = array(
 '闔' => '阖',
 '闕' => '阙',
 '闖' => '闯',
+'闚' => '窥',
 '關' => '关',
 '闞' => '阚',
 '闠' => '阓',
@@ -12449,23 +12326,33 @@ $zh2Hans = array(
 '闢' => '辟',
 '闤' => '阛',
 '闥' => '闼',
+'阨' => '厄',
+'阬' => '坑',
+'陗' => '峭',
 '陘' => '陉',
+'陜' => '陕',
 '陝' => '陕',
-'陞' => '升',
 '陣' => '阵',
 '陰' => '阴',
 '陳' => '陈',
 '陸' => '陆',
+'陻' => '堙',
 '陽' => '阳',
+'陿' => '狭',
+'隂' => '阴',
+'隄' => '堤',
 '隉' => '陧',
 '隊' => '队',
 '階' => '阶',
 '隕' => '陨',
+'隖' => '坞',
 '際' => '际',
+'隣' => '邻',
 '隨' => '随',
 '險' => '险',
 '隱' => '隐',
 '隴' => '陇',
+'隷' => '隶',
 '隸' => '隶',
 '隻' => '只',
 '雋' => '隽',
@@ -12483,19 +12370,27 @@ $zh2Hans = array(
 '霽' => '霁',
 '靂' => '雳',
 '靄' => '霭',
+'靆' => '叇',
 '靈' => '灵',
+'靉' => '叆',
 '靚' => '靓',
 '靜' => '静',
 '靦' => '腼',
 '靨' => '靥',
+'靭' => '韧',
+'靱' => '韧',
 '鞀' => '鼗',
+'鞌' => '鞍',
 '鞏' => '巩',
 '鞝' => '绱',
 '鞦' => '秋',
+'鞵' => '鞋',
 '鞽' => '鞒',
+'鞾' => '靴',
 '韁' => '缰',
 '韃' => '鞑',
 '韆' => '千',
+'韈' => '袜',
 '韉' => '鞯',
 '韋' => '韦',
 '韌' => '韧',
@@ -12503,8 +12398,9 @@ $zh2Hans = array(
 '韓' => '韩',
 '韙' => '韪',
 '韜' => '韬',
-'韝' => '鞲',
 '韞' => '韫',
+'韤' => '袜',
+'韮' => '韭',
 '韻' => '韵',
 '響' => '响',
 '頁' => '页',
@@ -12525,6 +12421,7 @@ $zh2Hans = array(
 '頗' => '颇',
 '領' => '领',
 '頜' => '颌',
+'頟' => '额',
 '頡' => '颉',
 '頤' => '颐',
 '頦' => '颏',
@@ -12537,20 +12434,26 @@ $zh2Hans = array(
 '頸' => '颈',
 '頹' => '颓',
 '頻' => '频',
+'頼' => '赖',
+'頽' => '颓',
 '顃' => '𩖖',
 '顆' => '颗',
+'顇' => '悴',
+'顋' => '腮',
 '題' => '题',
 '額' => '额',
 '顎' => '颚',
 '顏' => '颜',
 '顒' => '颙',
 '顓' => '颛',
+'顔' => '颜',
 '願' => '愿',
 '顙' => '颡',
 '顛' => '颠',
 '類' => '类',
 '顢' => '颟',
 '顥' => '颢',
+'顦' => '憔',
 '顧' => '顾',
 '顫' => '颤',
 '顬' => '颥',
@@ -12574,13 +12477,16 @@ $zh2Hans = array(
 '颼' => '飕',
 '颾' => '𩙫',
 '飀' => '飗',
+'飃' => '飘',
 '飄' => '飘',
 '飆' => '飙',
 '飈' => '飚',
 '飛' => '飞',
+'飜' => '翻',
 '飠' => '饣',
 '飢' => '饥',
 '飣' => '饤',
+'飤' => '饲',
 '飥' => '饦',
 '飩' => '饨',
 '飪' => '饪',
@@ -12594,9 +12500,11 @@ $zh2Hans = array(
 '飽' => '饱',
 '飾' => '饰',
 '飿' => '饳',
+'餁' => '饪',
 '餃' => '饺',
 '餄' => '饸',
 '餅' => '饼',
+'餈' => '糍',
 '餉' => '饷',
 '養' => '养',
 '餌' => '饵',
@@ -12609,7 +12517,7 @@ $zh2Hans = array(
 '餕' => '馂',
 '餖' => '饾',
 '餗' => '𫗧',
-'餘' => '',
+'餘' => '',
 '餚' => '肴',
 '餛' => '馄',
 '餜' => '馃',
@@ -12620,12 +12528,14 @@ $zh2Hans = array(
 '餭' => '𫗮',
 '餱' => '糇',
 '餳' => '饧',
-'餵' => '喂',
 '餶' => '馉',
 '餷' => '馇',
 '餸' => '𩠌',
+'餹' => '糖',
 '餺' => '馎',
+'餻' => '糕',
 '餼' => '饩',
+'餽' => '馈',
 '餾' => '馏',
 '餿' => '馊',
 '饁' => '馌',
@@ -12636,10 +12546,13 @@ $zh2Hans = array(
 '饊' => '馓',
 '饋' => '馈',
 '饌' => '馔',
+'饍' => '膳',
+'饑' => '饥',
 '饒' => '饶',
 '饗' => '飨',
 '饘' => '𫗴',
 '饜' => '餍',
+'饝' => '馍',
 '饞' => '馋',
 '饢' => '馕',
 '馬' => '马',
@@ -12651,6 +12564,7 @@ $zh2Hans = array(
 '馹' => '驲',
 '駁' => '驳',
 '駃' => '𫘝',
+'駈' => '驱',
 '駎' => '𩧨',
 '駐' => '驻',
 '駑' => '驽',
@@ -12663,10 +12577,12 @@ $zh2Hans = array(
 '駛' => '驶',
 '駝' => '驼',
 '駟' => '驷',
+'駡' => '骂',
 '駢' => '骈',
 '駧' => '𩧲',
 '駩' => '𩧴',
 '駭' => '骇',
+'駮' => '驳',
 '駰' => '骃',
 '駱' => '骆',
 '駶' => '𩧺',
@@ -12681,6 +12597,7 @@ $zh2Hans = array(
 '騍' => '骒',
 '騎' => '骑',
 '騏' => '骐',
+'騐' => '验',
 '騔' => '𩨀',
 '騖' => '骛',
 '騙' => '骗',
@@ -12688,6 +12605,7 @@ $zh2Hans = array(
 '騝' => '𩨃',
 '騟' => '𩨈',
 '騠' => '𫘨',
+'騣' => '鬃',
 '騤' => '骙',
 '騧' => '䯄',
 '騪' => '𩨄',
@@ -12703,7 +12621,7 @@ $zh2Hans = array(
 '驁' => '骜',
 '驂' => '骖',
 '驃' => '骠',
-'驄' => '',
+'驄' => '𩨂',
 '驅' => '驱',
 '驊' => '骅',
 '驋' => '𩧯',
@@ -12712,6 +12630,7 @@ $zh2Hans = array(
 '驏' => '骣',
 '驕' => '骄',
 '驗' => '验',
+'驘' => '骡',
 '驚' => '惊',
 '驛' => '驿',
 '驟' => '骤',
@@ -12722,21 +12641,33 @@ $zh2Hans = array(
 '驪' => '骊',
 '驫' => '骉',
 '骯' => '肮',
+'骽' => '腿',
+'骾' => '鲠',
+'髈' => '膀',
 '髏' => '髅',
 '髒' => '脏',
 '體' => '体',
 '髕' => '髌',
 '髖' => '髋',
+'髣' => '仿',
+'髥' => '髯',
 '髮' => '发',
+'髴' => '佛',
+'鬀' => '剃',
 '鬆' => '松',
+'鬉' => '鬃',
 '鬍' => '胡',
 '鬚' => '须',
 '鬢' => '鬓',
 '鬥' => '斗',
+'鬦' => '斗',
 '鬧' => '闹',
 '鬨' => '哄',
 '鬩' => '阋',
+'鬪' => '斗',
+'鬭' => '斗',
 '鬮' => '阄',
+'鬰' => '郁',
 '鬱' => '郁',
 '鬹' => '鬶',
 '魎' => '魉',
@@ -12757,12 +12688,14 @@ $zh2Hans = array(
 '鮊' => '鲌',
 '鮋' => '鲉',
 '鮍' => '鲏',
+'鮎' => '鲇',
 '鮐' => '鲐',
 '鮑' => '鲍',
 '鮒' => '鲋',
 '鮓' => '鲊',
 '鮚' => '鲒',
 '鮜' => '鲘',
+'鮝' => '鲞',
 '鮞' => '鲕',
 '鮟' => '𩽾',
 '鮣' => '䲟',
@@ -12797,6 +12730,7 @@ $zh2Hans = array(
 '鯨' => '鲸',
 '鯪' => '鲮',
 '鯫' => '鲰',
+'鯰' => '鲶',
 '鯱' => '𩾇',
 '鯴' => '鲺',
 '鯶' => '𩽼',
@@ -12812,8 +12746,10 @@ $zh2Hans = array(
 '鰌' => '䲡',
 '鰍' => '鳅',
 '鰏' => '鲾',
+'鰐' => '鳄',
 '鰒' => '鳆',
 '鰓' => '鳃',
+'鰛' => '鳁',
 '鰜' => '鳒',
 '鰟' => '鳑',
 '鰠' => '鳋',
@@ -12861,6 +12797,7 @@ $zh2Hans = array(
 '鳥' => '鸟',
 '鳧' => '凫',
 '鳩' => '鸠',
+'鳬' => '凫',
 '鳲' => '鸤',
 '鳳' => '凤',
 '鳴' => '鸣',
@@ -12871,6 +12808,7 @@ $zh2Hans = array(
 '鴃' => '𫛞',
 '鴆' => '鸩',
 '鴇' => '鸨',
+'鴈' => '雁',
 '鴉' => '鸦',
 '鴒' => '鸰',
 '鴕' => '鸵',
@@ -12900,6 +12838,7 @@ $zh2Hans = array(
 '鵚' => '𪉍',
 '鵜' => '鹈',
 '鵝' => '鹅',
+'鵞' => '鹅',
 '鵠' => '鹄',
 '鵡' => '鹉',
 '鵪' => '鹌',
@@ -12908,6 +12847,7 @@ $zh2Hans = array(
 '鵯' => '鹎',
 '鵰' => '雕',
 '鵲' => '鹊',
+'鵶' => '鸦',
 '鵷' => '鹓',
 '鵾' => '鹍',
 '鶄' => '䴖',
@@ -12933,8 +12873,10 @@ $zh2Hans = array(
 '鶻' => '鹘',
 '鶼' => '鹣',
 '鶿' => '鹚',
+'鷀' => '鹚',
 '鷁' => '鹢',
 '鷂' => '鹞',
+'鷄' => '鸡',
 '鷈' => '䴘',
 '鷊' => '鹝',
 '鷓' => '鹧',
@@ -12948,8 +12890,10 @@ $zh2Hans = array(
 '鷨' => '𪉊',
 '鷫' => '鹔',
 '鷯' => '鹩',
+'鷰' => '燕',
 '鷲' => '鹫',
 '鷳' => '鹇',
+'鷴' => '鹇',
 '鷸' => '鹬',
 '鷹' => '鹰',
 '鷺' => '鹭',
@@ -12959,6 +12903,7 @@ $zh2Hans = array(
 '鸇' => '鹯',
 '鸋' => '𫛢',
 '鸌' => '鹱',
+'鸎' => '莺',
 '鸏' => '鹲',
 '鸕' => '鸬',
 '鸘' => '鹴',
@@ -12969,6 +12914,7 @@ $zh2Hans = array(
 '鹵' => '卤',
 '鹹' => '咸',
 '鹺' => '鹾',
+'鹻' => '碱',
 '鹼' => '碱',
 '鹽' => '盐',
 '麗' => '丽',
@@ -12979,7 +12925,8 @@ $zh2Hans = array(
 '麫' => '面',
 '麯' => '曲',
 '麲' => '𪎉',
-'麴' => '曲',
+'麳' => '𪎌',
+'麴' => '麹',
 '麵' => '面',
 '麼' => '么',
 '麽' => '么',
@@ -12993,10 +12940,12 @@ $zh2Hans = array(
 '黷' => '黩',
 '黽' => '黾',
 '黿' => '鼋',
+'鼃' => '蛙',
+'鼇' => '鳌',
+'鼈' => '鳖',
 '鼉' => '鼍',
 '鼕' => '冬',
 '鼴' => '鼹',
-'齇' => '齄',
 '齊' => '齐',
 '齋' => '斋',
 '齎' => '赍',
@@ -13012,6 +12961,8 @@ $zh2Hans = array(
 '齡' => '龄',
 '齣' => '出',
 '齦' => '龈',
+'齧' => '啮',
+'齩' => '咬',
 '齪' => '龊',
 '齬' => '龉',
 '齲' => '龋',
@@ -13026,28 +12977,47 @@ $zh2Hans = array(
 '龜' => '龟',
 '龭' => '𩨎',
 '龯' => '𨱆',
+'𠇮' => '命',
+'𠌂' => '伞',
 '𠌥' => '𠆿',
 '𠏢' => '𠉗',
+'𠕂' => '再',
+'𠕅' => '再',
+'𠖇' => '冥',
 '𠞆' => '𠛆',
+'𠞰' => '剿',
 '𠠎' => '𠚳',
+'𠪾' => '历',
+'𠴟' => '咩',
+'𠻳' => '嗽',
 '𡄔' => '𠴢',
 '𡄣' => '𠵸',
 '𡅏' => '𠲥',
+'𡐨' => '野',
 '𡑭' => '𡋗',
 '𡓾' => '𡋀',
+'𡚁' => '弊',
 '𡞵' => '㛟',
 '𡠹' => '㛿',
 '𡢃' => '㛠',
+'𡨘' => '冤',
+'𡨥' => '寇',
+'𡬶' => '寻',
 '𡮉' => '𡭜',
 '𡮣' => '𡭬',
 '𡻕' => '岁',
 '𡾱' => '㟜',
 '𢣚' => '𢘝',
 '𢣭' => '𢘞',
+'𢬸' => '括',
+'𢭏' => '捣',
+'𢮥' => '操',
 '𢶫' => '𢫞',
+'𢷬' => '捣',
 '𢷮' => '𢫊',
 '𢹿' => '𢬦',
 '𣙎' => '㭣',
+'𣙜' => '榷',
 '𣝕' => '𣘷',
 '𣞻' => '𣘓',
 '𣠲' => '𣑶',
@@ -13055,16 +13025,25 @@ $zh2Hans = array(
 '𣾷' => '㳢',
 '𣿉' => '𣶫',
 '𤁣' => '𣺽',
+'𤋮' => '熙',
 '𤒎' => '𤊀',
+'𤨏' => '琐',
 '𤪺' => '㻘',
 '𤫩' => '㻏',
+'𤰜' => '亩',
+'𤱈' => '亩',
+'𤱊' => '留',
 '𤳸' => '𤳄',
 '𤸫' => '𤶧',
+'𤺥' => '瘩',
+'𥄨' => '瞅',
 '𥌃' => '𥅘',
 '𥕥' => '𥐰',
 '𥖅' => '𥐯',
 '𥢢' => '䅪',
+'𥦗' => '窗',
 '𥨐' => '𥧂',
+'𥲻' => '纂',
 '𥵃' => '𥱔',
 '𥵊' => '𥭉',
 '𥸠' => '𥮋',
@@ -13072,10 +13051,18 @@ $zh2Hans = array(
 '𥽖' => '𥺇',
 '𥿊' => '𦈈',
 '𦂅' => '𦈒',
+'𦂳' => '紧',
+'𦃂' => '紧',
 '𦃄' => '𦈗',
+'𦉆' => '碴',
+'𦊱' => '挂',
+'𦍑' => '羌',
+'𦕈' => '眇',
 '𦢈' => '𣍨',
 '𦣎' => '𦟗',
+'𦪙' => '䑽',
 '𦪽' => '𦨩',
+'𦵏' => '葬',
 '𧔥' => '𧒭',
 '𧜗' => '䘞',
 '𧜵' => '䙊',
@@ -13117,10 +13104,14 @@ $zh2Hans = array(
 '𨶲' => '𨸋',
 '𨷲' => '𨸎',
 '𨽏' => '𨸘',
+'𨽻' => '隶',
 '𩎢' => '𩏾',
 '𩏪' => '𩏽',
+'𩓐' => '脖',
 '𩓣' => '𩖕',
 '𩗀' => '𩙦',
+'𩗗' => '飓',
+'𩗡' => '𩙧',
 '𩘀' => '𩙩',
 '𩘝' => '𩙭',
 '𩘹' => '𩙨',
@@ -13170,6 +13161,7 @@ $zh2Hans = array(
 '𩷰' => '𩾄',
 '𩸃' => '𩾅',
 '𩸦' => '𩾆',
+'𩽇' => '𩾎',
 '𩿪' => '𪉄',
 '𪀦' => '𪉅',
 '𪀾' => '𪉋',
@@ -13181,68 +13173,26 @@ $zh2Hans = array(
 '𪄆' => '𪉔',
 '𪄕' => '𪉒',
 '𪇳' => '𪉕',
+'𪈼' => '𪉓',
 '𪋿' => '𪎍',
 '𪔵' => '𪔭',
 '𪘀' => '𪚏',
 '𪘯' => '𪚐',
+'『' => '‘',
+'』' => '’',
+'「' => '“',
+'「' => '“',
+'」' => '”',
+'」' => '”',
+'。陞' => '。升',
 '《易乾' => '《易乾',
-'不著痕跡' => '不着痕迹',
-'不著邊際' => '不着边际',
-'與著' => '与着',
-'與著書' => '与著书',
-'與著作' => '与著作',
-'與著名' => '与著名',
-'與著錄' => '与著录',
-'與著稱' => '与著称',
-'與著者' => '与著者',
-'與著述' => '与著述',
-'丑著' => '丑着',
-'丑著书' => '丑著书',
-'丑著書' => '丑著书',
-'丑著作' => '丑著作',
-'丑著名' => '丑著名',
-'丑著录' => '丑著录',
-'丑著錄' => '丑著录',
-'丑著稱' => '丑著称',
-'丑著称' => '丑著称',
-'丑著者' => '丑著者',
-'丑著述' => '丑著述',
+'一釐' => '一厘',
+'一口鍾' => '一口钟',
+'一鍾' => '一钟',
+'上昇' => '上升',
 '專著' => '专著',
-'臨著' => '临着',
-'臨著書' => '临著书',
-'臨著作' => '临著作',
-'臨著名' => '临著名',
-'臨著錄' => '临著录',
-'臨著稱' => '临著称',
-'臨著者' => '临著者',
-'臨著述' => '临著述',
-'麗著' => '丽着',
-'麗著書' => '丽著书',
-'麗著作' => '丽著作',
-'麗著名' => '丽著名',
-'麗著錄' => '丽著录',
-'麗著稱' => '丽著称',
-'麗著者' => '丽著者',
-'麗著述' => '丽著述',
-'樂著' => '乐着',
-'樂著書' => '乐著书',
-'樂著作' => '乐著作',
-'樂著名' => '乐著名',
-'樂著錄' => '乐著录',
-'樂著稱' => '乐著称',
-'樂著者' => '乐著者',
-'樂著述' => '乐著述',
-'乘著' => '乘着',
-'乘著书' => '乘著书',
-'乘著書' => '乘著书',
-'乘著作' => '乘著作',
-'乘著名' => '乘著名',
-'乘著录' => '乘著录',
-'乘著錄' => '乘著录',
-'乘著稱' => '乘著称',
-'乘著称' => '乘著称',
-'乘著者' => '乘著者',
-'乘著述' => '乘著述',
+'世界鍾' => '世界钟',
+'喪鍾' => '丧钟',
 '乾一坛' => '乾一坛',
 '乾一壇' => '乾一坛',
 '乾一组' => '乾一组',
@@ -13253,8 +13203,8 @@ $zh2Hans = array(
 '乾九' => '乾九',
 '乾乾' => '乾乾',
 '乾亨' => '乾亨',
-'乾儀' => '乾仪',
 '乾仪' => '乾仪',
+'乾儀' => '乾仪',
 '乾位' => '乾位',
 '乾健' => '乾健',
 '乾健也' => '乾健也',
@@ -13262,12 +13212,12 @@ $zh2Hans = array(
 '乾光' => '乾光',
 '乾兴' => '乾兴',
 '乾興' => '乾兴',
-'乾冈' => '乾冈',
 '乾岡' => '乾冈',
-'ä¹¾å\8a\89' => 'ä¹¾å\88\98',
+'ä¹¾å\86\88' => 'ä¹¾å\86\88',
 '乾刘' => '乾刘',
-'ä¹¾å\89\9b' => 'ä¹¾å\88\9a',
+'ä¹¾å\8a\89' => 'ä¹¾å\88\98',
 '乾刚' => '乾刚',
+'乾剛' => '乾刚',
 '乾務' => '乾务',
 '乾务' => '乾务',
 '乾化' => '乾化',
@@ -13289,16 +13239,16 @@ $zh2Hans = array(
 '乾天也' => '乾天也',
 '乾始' => '乾始',
 '乾姓' => '乾姓',
-'乾寧' => '乾宁',
 '乾宁' => '乾宁',
+'乾寧' => '乾宁',
 '乾宅' => '乾宅',
 '乾宇' => '乾宇',
 '乾安' => '乾安',
 '乾定' => '乾定',
 '乾封' => '乾封',
 '乾居' => '乾居',
-'乾崗' => '乾岗',
 '乾岗' => '乾岗',
+'乾崗' => '乾岗',
 '乾巛' => '乾巛',
 '乾州' => '乾州',
 '乾式' => '乾式',
@@ -13309,46 +13259,47 @@ $zh2Hans = array(
 '乾心' => '乾心',
 '乾忠' => '乾忠',
 '乾文' => '乾文',
-'乾斷' => '乾断',
 '乾断' => '乾断',
+'乾斷' => '乾断',
 '乾方' => '乾方',
 '乾施' => '乾施',
 '乾旦' => '乾旦',
 '乾明' => '乾明',
 '乾昧' => '乾昧',
-'乾晖' => '乾晖',
 '乾暉' => '乾晖',
+'乾晖' => '乾晖',
 '乾景' => '乾景',
 '乾晷' => '乾晷',
 '乾曜' => '乾曜',
-'乾构' => '乾构',
 '乾構' => '乾构',
-'ä¹¾æ¨\9e' => 'ä¹¾æ\9e¢',
+'ä¹¾æ\9e\84' => 'ä¹¾æ\9e\84',
 '乾枢' => '乾枢',
-'ä¹¾æ \8b' => 'ä¹¾æ \8b',
+'ä¹¾æ¨\9e' => 'ä¹¾æ\9e¢',
 '乾棟' => '乾栋',
+'乾栋' => '乾栋',
 '乾步' => '乾步',
 '乾氏' => '乾氏',
 '乾沓和' => '乾沓和',
 '乾沓婆' => '乾沓婆',
 '乾泉' => '乾泉',
 '乾淳' => '乾淳',
-'乾清宮' => '乾清宫',
-'乾清宫' => '乾清宫',
+'乾清' => '乾清',
 '乾渥' => '乾渥',
-'乾靈' => '乾灵',
+'乾潭' => '乾潭',
 '乾灵' => '乾灵',
+'乾靈' => '乾灵',
 '乾男' => '乾男',
 '乾皋' => '乾皋',
 '乾盛世' => '乾盛世',
 '乾矢' => '乾矢',
 '乾祐' => '乾祐',
+'乾神' => '乾神',
 '乾穹' => '乾穹',
 '乾竇' => '乾窦',
 '乾窦' => '乾窦',
 '乾竺' => '乾竺',
-'乾篤' => '乾笃',
 '乾笃' => '乾笃',
+'乾篤' => '乾笃',
 '乾符' => '乾符',
 '乾策' => '乾策',
 '乾精' => '乾精',
@@ -13358,192 +13309,72 @@ $zh2Hans = array(
 '乾纲' => '乾纲',
 '乾纽' => '乾纽',
 '乾紐' => '乾纽',
-'乾絡' => '乾络',
 '乾络' => '乾络',
+'乾絡' => '乾络',
 '乾統' => '乾统',
 '乾统' => '乾统',
-'乾維' => '乾维',
 '乾维' => '乾维',
-'ä¹¾ç¾\85' => 'ä¹¾ç½\97',
+'乾維' => '乾维',
 '乾罗' => '乾罗',
+'乾羅' => '乾罗',
 '乾花' => '乾花',
-'乾蔭' => '乾荫',
 '乾荫' => '乾荫',
+'乾蔭' => '乾荫',
 '乾行' => '乾行',
 '乾衡' => '乾衡',
+'乾西' => '乾西',
 '乾覆' => '乾覆',
 '乾象' => '乾象',
 '乾象歷' => '乾象历',
 '乾象历' => '乾象历',
-'乾贞' => '乾贞',
 '乾貞' => '乾贞',
+'乾贞' => '乾贞',
+'乾贵士' => '乾贵士',
+'乾貴士' => '乾贵士',
 '乾貺' => '乾贶',
 '乾贶' => '乾贶',
-'乾车' => '乾车',
 '乾車' => '乾车',
-'乾軸' => '乾轴',
+'乾车' => '乾车',
 '乾轴' => '乾轴',
+'乾軸' => '乾轴',
 '乾通' => '乾通',
 '乾造' => '乾造',
 '乾道' => '乾道',
-'乾鑒' => '乾鉴',
 '乾鉴' => '乾鉴',
-'ä¹¾é\92§' => 'ä¹¾é\92§',
+'ä¹¾é\91\92' => 'ä¹¾é\89´',
 '乾鈞' => '乾钧',
-'ä¹¾é\97¼' => 'ä¹¾é\97¼',
+'ä¹¾é\92§' => 'ä¹¾é\92§',
 '乾闥' => '乾闼',
+'乾闼' => '乾闼',
 '乾陀' => '乾陀',
 '乾陵' => '乾陵',
 '乾隆' => '乾隆',
 '乾音' => '乾音',
-'乾顾' => '乾顾',
 '乾顧' => '乾顾',
-'ä¹¾é£\8e' => 'ä¹¾é£\8e',
+'乾顾' => '乾顾',
 '乾風' => '乾风',
+'乾风' => '乾风',
 '乾首' => '乾首',
-'乾馬' => '乾马',
 '乾马' => '乾马',
+'乾馬' => '乾马',
 '乾鵠' => '乾鹄',
 '乾鹄' => '乾鹄',
 '乾鵲' => '乾鹊',
 '乾鹊' => '乾鹊',
-'乾龍' => '乾龙',
 '乾龙' => '乾龙',
+'乾龍' => '乾龙',
 '乾,健也' => '乾,健也',
 '乾,天也' => '乾,天也',
-'爭著' => '争着',
-'爭著書' => '争著书',
-'爭著作' => '争著作',
-'爭著名' => '争著名',
-'爭著錄' => '争著录',
-'爭著稱' => '争著称',
-'爭著者' => '争著者',
-'爭著述' => '争著述',
 '五箇山' => '五箇山',
-'亮著' => '亮着',
-'亮著书' => '亮著书',
-'亮著書' => '亮著书',
-'亮著作' => '亮著作',
-'亮著名' => '亮著名',
-'亮著錄' => '亮著录',
-'亮著录' => '亮著录',
-'亮著称' => '亮著称',
-'亮著稱' => '亮著称',
-'亮著者' => '亮著者',
-'亮著述' => '亮著述',
-'仗著' => '仗着',
-'仗著书' => '仗著书',
-'仗著書' => '仗著书',
-'仗著作' => '仗著作',
-'仗著名' => '仗著名',
-'仗著录' => '仗著录',
-'仗著錄' => '仗著录',
-'仗著稱' => '仗著称',
-'仗著称' => '仗著称',
-'仗著者' => '仗著者',
-'仗著述' => '仗著述',
-'代表著' => '代表着',
-'代表著書' => '代表著书',
-'代表著书' => '代表著书',
-'代表著作' => '代表著作',
-'代表著名' => '代表著名',
-'代表著錄' => '代表著录',
-'代表著录' => '代表著录',
-'代表著称' => '代表著称',
-'代表著稱' => '代表著称',
-'代表著者' => '代表著者',
-'代表著述' => '代表著述',
+'仇讎' => '仇雠',
 '以微知著' => '以微知著',
+'以莛叩鍾' => '以莛叩钟',
 '仰屋著書' => '仰屋著书',
 '彷彿' => '仿佛',
 '夥計' => '伙计',
-'傳著' => '传着',
-'傳著書' => '传著书',
-'傳著作' => '传著作',
-'傳著名' => '传著名',
-'傳著錄' => '传著录',
-'傳著稱' => '传著称',
-'傳著者' => '传著者',
-'傳著述' => '传著述',
-'伴著' => '伴着',
-'伴著书' => '伴著书',
-'伴著書' => '伴著书',
-'伴著作' => '伴著作',
-'伴著名' => '伴著名',
-'伴著录' => '伴著录',
-'伴著錄' => '伴著录',
-'伴著稱' => '伴著称',
-'伴著称' => '伴著称',
-'伴著者' => '伴著者',
-'伴著述' => '伴著述',
-'低著' => '低着',
-'低著書' => '低著书',
-'低著书' => '低著书',
-'低著作' => '低著作',
-'低著名' => '低著名',
-'低著录' => '低著录',
-'低著錄' => '低著录',
-'低著稱' => '低著称',
-'低著称' => '低著称',
-'低著者' => '低著者',
-'低著述' => '低著述',
-'住著' => '住着',
-'住著書' => '住著书',
-'住著书' => '住著书',
-'住著作' => '住著作',
-'住著名' => '住著名',
-'住著錄' => '住著录',
-'住著录' => '住著录',
-'住著称' => '住著称',
-'住著稱' => '住著称',
-'住著者' => '住著者',
-'住著述' => '住著述',
 '佛頭著糞' => '佛头著粪',
-'侏儸紀' => '侏罗纪',
-'側著' => '侧着',
-'側著書' => '侧著书',
-'側著作' => '侧著作',
-'側著名' => '侧著名',
-'側著錄' => '侧著录',
-'側著稱' => '侧著称',
-'側著者' => '侧著者',
-'側著述' => '侧著述',
-'保護著' => '保护着',
-'保障著' => '保障着',
-'保障著书' => '保障著书',
-'保障著書' => '保障著书',
-'保障著作' => '保障著作',
-'保障著名' => '保障著名',
-'保障著錄' => '保障著录',
-'保障著录' => '保障著录',
-'保障著稱' => '保障著称',
-'保障著称' => '保障著称',
-'保障著者' => '保障著者',
-'保障著述' => '保障著述',
-'信著' => '信着',
-'信著书' => '信著书',
-'信著書' => '信著书',
-'信著作' => '信著作',
-'信著名' => '信著名',
-'信著录' => '信著录',
-'信著錄' => '信著录',
-'信著称' => '信著称',
-'信著稱' => '信著称',
-'信著者' => '信著者',
-'信著述' => '信著述',
-'修鍊' => '修炼',
+'偵蒐' => '侦搜',
 '候覆' => '候复',
-'候著' => '候着',
-'候著書' => '候著书',
-'候著书' => '候著书',
-'候著作' => '候著作',
-'候著名' => '候著名',
-'候著录' => '候著录',
-'候著錄' => '候著录',
-'候著稱' => '候著称',
-'候著称' => '候著称',
-'候著者' => '候著者',
-'候著述' => '候著述',
 '藉助' => '借助',
 '藉口' => '借口',
 '藉手' => '借手',
@@ -13551,1082 +13382,183 @@ $zh2Hans = array(
 '藉機' => '借机',
 '藉此' => '借此',
 '藉由' => '借由',
-'借著' => '借着',
-'藉着' => '借着',
-'藉著' => '借着',
 '藉端' => '借端',
-'借著書' => '借著书',
-'借著书' => '借著书',
-'借著作' => '借著作',
-'借著名' => '借著名',
-'借著录' => '借著录',
-'借著錄' => '借著录',
-'借著称' => '借著称',
-'借著稱' => '借著称',
-'借著者' => '借著者',
-'借著述' => '借著述',
 '藉詞' => '借词',
-'做著' => '做着',
-'做著書' => '做著书',
-'做著书' => '做著书',
-'做著作' => '做著作',
-'做著名' => '做著名',
-'做著錄' => '做著录',
-'做著录' => '做著录',
-'做著稱' => '做著称',
-'做著称' => '做著称',
-'做著者' => '做著者',
-'做著述' => '做著述',
-'偷著' => '偷着',
-'偷著書' => '偷著书',
-'偷著书' => '偷著书',
-'偷著作' => '偷著作',
-'偷著名' => '偷著名',
-'偷著錄' => '偷著录',
-'偷著录' => '偷著录',
-'偷著稱' => '偷著称',
-'偷著称' => '偷著称',
-'偷著者' => '偷著者',
-'偷著述' => '偷著述',
-'傢俬' => '傢俬',
-'僧伽吒' => '僧伽吒',
-'光著' => '光着',
-'光著書' => '光著书',
-'光著书' => '光著书',
-'光著作' => '光著作',
-'光著名' => '光著名',
-'光著錄' => '光著录',
-'光著录' => '光著录',
-'光著稱' => '光著称',
-'光著称' => '光著称',
-'光著者' => '光著者',
-'光著述' => '光著述',
-'關著' => '关着',
-'關著書' => '关著书',
-'關著作' => '关著作',
-'關著名' => '关著名',
-'關著錄' => '关著录',
-'關著稱' => '关著称',
-'關著者' => '关著者',
-'關著述' => '关著述',
-'冀著' => '冀着',
-'冀著書' => '冀著书',
-'冀著书' => '冀著书',
-'冀著作' => '冀著作',
-'冀著名' => '冀著名',
-'冀著錄' => '冀著录',
-'冀著录' => '冀著录',
-'冀著稱' => '冀著称',
-'冀著称' => '冀著称',
-'冀著者' => '冀著者',
-'冀著述' => '冀著述',
-'冒著' => '冒着',
-'冒著书' => '冒著书',
-'冒著書' => '冒著书',
-'冒著作' => '冒著作',
-'冒著名' => '冒著名',
-'冒著录' => '冒著录',
-'冒著錄' => '冒著录',
-'冒著稱' => '冒著称',
-'冒著称' => '冒著称',
-'冒著者' => '冒著者',
-'冒著述' => '冒著述',
-'寫著' => '写着',
-'寫著書' => '写著书',
-'寫著作' => '写著作',
-'寫著名' => '写著名',
-'寫著錄' => '写著录',
-'寫著稱' => '写著称',
-'寫著者' => '写著者',
-'寫著述' => '写著述',
-'涼著' => '凉着',
-'涼著書' => '凉著书',
-'涼著作' => '凉著作',
-'涼著名' => '凉著名',
-'涼著錄' => '凉著录',
-'涼著稱' => '凉著称',
-'涼著者' => '凉著者',
-'涼著述' => '凉著述',
+'先名後姓' => '先名后姓',
+'六么' => '六幺',
+'蘭質薰心' => '兰质薰心',
+'內聯陞' => '内联升',
 '憑藉' => '凭借',
-'制著' => '制着',
-'制著书' => '制著书',
-'制著書' => '制著书',
-'制著作' => '制著作',
-'制著名' => '制著名',
-'制著錄' => '制著录',
-'制著录' => '制著录',
-'制著称' => '制著称',
-'制著稱' => '制著称',
-'制著者' => '制著者',
-'制著述' => '制著述',
-'刻著' => '刻着',
-'刻著書' => '刻著书',
-'刻著书' => '刻著书',
-'刻著作' => '刻著作',
-'刻著名' => '刻著名',
-'刻著录' => '刻著录',
-'刻著錄' => '刻著录',
-'刻著稱' => '刻著称',
-'刻著称' => '刻著称',
-'刻著者' => '刻著者',
-'刻著述' => '刻著述',
-'辦著' => '办着',
-'辦著書' => '办著书',
-'辦著作' => '办著作',
-'辦著名' => '办著名',
-'辦著錄' => '办著录',
-'辦著稱' => '办著称',
-'辦著者' => '办著者',
-'辦著述' => '办著述',
-'動著' => '动着',
-'動著書' => '动著书',
-'動著作' => '动著作',
-'動著名' => '动著名',
-'動著錄' => '动著录',
-'動著稱' => '动著称',
-'動著者' => '动著者',
-'動著述' => '动著述',
-'努力著' => '努力着',
-'努力著書' => '努力著书',
-'努力著书' => '努力著书',
-'努力著作' => '努力著作',
-'努力著名' => '努力著名',
-'努力著錄' => '努力著录',
-'努力著录' => '努力著录',
-'努力著称' => '努力著称',
-'努力著稱' => '努力著称',
-'努力著者' => '努力著者',
-'努力著述' => '努力著述',
-'努著' => '努着',
-'努著書' => '努著书',
-'努著书' => '努著书',
-'努著作' => '努著作',
-'努著名' => '努著名',
-'努著錄' => '努著录',
-'努著录' => '努著录',
-'努著称' => '努著称',
-'努著稱' => '努著称',
-'努著者' => '努著者',
-'努著述' => '努著述',
+'分鍾' => '分钟',
+'初昇' => '初升',
+'利欲薰心' => '利欲薰心',
+'刻鍾' => '刻钟',
+'剋了' => '剋了',
+'剋架' => '剋架',
+'剖釐' => '剖厘',
+'千鍾' => '千钟',
+'陞為' => '升为',
+'陞了' => '升了',
+'昇仙' => '升仙',
+'陞任' => '升任',
+'昇華' => '升华',
+'昇天' => '升天',
+'陞官' => '升官',
+'昇平' => '升平',
+'昇汞' => '升汞',
+'陞用' => '升用',
+'陞補' => '升补',
+'陞遷' => '升迁',
+'昇降' => '升降',
 '卓著' => '卓著',
-'印著' => '印着',
-'印著书' => '印著书',
-'印著書' => '印著书',
-'印著作' => '印著作',
-'印著名' => '印著名',
-'印著录' => '印著录',
-'印著錄' => '印著录',
-'印著称' => '印著称',
-'印著稱' => '印著称',
-'印著者' => '印著者',
-'印著述' => '印著述',
+'博和託' => '博和讬',
 '卷舌' => '卷舌',
-'壓著' => '压着',
-'壓著書' => '压著书',
-'壓著作' => '压著作',
-'壓著名' => '压著名',
-'壓著錄' => '压著录',
-'壓著稱' => '压著称',
-'壓著者' => '压著者',
-'壓著述' => '压著述',
+'歷陞' => '历升',
+'釐改' => '厘改',
+'釐整' => '厘整',
+'釐正' => '厘正',
+'釐毫' => '厘毫',
+'釐清' => '厘清',
+'釐訂' => '厘订',
+'釐革' => '厘革',
+'原子鍾' => '原子钟',
 '原著' => '原著',
-'去著' => '去着',
-'去著书' => '去著书',
-'去著書' => '去著书',
-'去著作' => '去著作',
-'去著名' => '去著名',
-'去著录' => '去著录',
-'去著錄' => '去著录',
-'去著稱' => '去著称',
-'去著称' => '去著称',
-'去著者' => '去著者',
-'去著述' => '去著述',
+'又陞' => '又升',
 '反反覆覆' => '反反复复',
 '反覆' => '反复',
-'受著' => '受着',
-'受著書' => '受著书',
-'受著书' => '受著书',
-'受著作' => '受著作',
-'受著名' => '受著名',
-'受著錄' => '受著录',
-'受著录' => '受著录',
-'受著稱' => '受著称',
-'受著称' => '受著称',
-'受著者' => '受著者',
-'受著述' => '受著述',
-'變著' => '变着',
-'變著書' => '变著书',
-'變著作' => '变著作',
-'變著名' => '变著名',
-'變著錄' => '变著录',
-'變著稱' => '变著称',
-'變著者' => '变著者',
-'變著述' => '变著述',
-'叫著' => '叫着',
-'叫著书' => '叫著书',
-'叫著書' => '叫著书',
-'叫著作' => '叫著作',
-'叫著名' => '叫著名',
-'叫著录' => '叫著录',
-'叫著錄' => '叫著录',
-'叫著称' => '叫著称',
-'叫著稱' => '叫著称',
-'叫著者' => '叫著者',
-'叫著述' => '叫著述',
+'古鍾' => '古钟',
 '可穿著' => '可穿著',
-'叱吒' => '叱吒',
-'吃不著' => '吃不着',
-'吃得著' => '吃得着',
-'吃著' => '吃着',
+'台鍾' => '台钟',
 '吃衣著飯' => '吃衣著饭',
 '合著' => '合著',
+'同陞和' => '同升和',
 '名著' => '名著',
-'向著' => '向着',
-'向著書' => '向著书',
-'向著书' => '向著书',
-'向著作' => '向著作',
-'向著名' => '向著名',
-'向著錄' => '向著录',
-'向著录' => '向著录',
-'向著称' => '向著称',
-'向著稱' => '向著称',
-'向著者' => '向著者',
-'向著述' => '向著述',
-'含著' => '含着',
-'含著書' => '含著书',
-'含著书' => '含著书',
-'含著作' => '含著作',
-'含著名' => '含著名',
-'含著錄' => '含著录',
-'含著录' => '含著录',
-'含著称' => '含著称',
-'含著稱' => '含著称',
-'含著者' => '含著者',
-'含著述' => '含著述',
-'聽不著' => '听不着',
-'聽得著' => '听得着',
-'聽著' => '听着',
-'聽著書' => '听著书',
-'聽著作' => '听著作',
-'聽著名' => '听著名',
-'聽著錄' => '听著录',
-'聽著稱' => '听著称',
-'聽著者' => '听著者',
-'聽著述' => '听著述',
-'吴其濬' => '吴其濬',
-'吳其濬' => '吴其濬',
-'吹著' => '吹着',
-'吹著書' => '吹著书',
-'吹著书' => '吹著书',
-'吹著作' => '吹著作',
-'吹著名' => '吹著名',
-'吹著录' => '吹著录',
-'吹著錄' => '吹著录',
-'吹著稱' => '吹著称',
-'吹著称' => '吹著称',
-'吹著者' => '吹著者',
-'吹著述' => '吹著述',
+'吳克羣' => '吴克羣',
 '周易乾' => '周易乾',
-'味著' => '味着',
-'味著书' => '味著书',
-'味著書' => '味著书',
-'味著作' => '味著作',
-'味著名' => '味著名',
-'味著录' => '味著录',
-'味著錄' => '味著录',
-'味著称' => '味著称',
-'味著稱' => '味著称',
-'味著者' => '味著者',
-'味著述' => '味著述',
-'呼幺喝六' => '呼幺喝六',
-'響著' => '响着',
-'響著書' => '响著书',
-'響著作' => '响著作',
-'響著名' => '响著名',
-'響著錄' => '响著录',
-'響著稱' => '响著称',
-'響著者' => '响著者',
-'響著述' => '响著述',
-'哪吒' => '哪吒',
-'哭著' => '哭着',
-'哭著書' => '哭著书',
-'哭著书' => '哭著书',
-'哭著作' => '哭著作',
-'哭著名' => '哭著名',
-'哭著錄' => '哭著录',
-'哭著录' => '哭著录',
-'哭著稱' => '哭著称',
-'哭著称' => '哭著称',
-'哭著者' => '哭著者',
-'哭著述' => '哭著述',
-'唱著' => '唱着',
-'唱著书' => '唱著书',
-'唱著書' => '唱著书',
-'唱著作' => '唱著作',
-'唱著名' => '唱著名',
-'唱著录' => '唱著录',
-'唱著錄' => '唱著录',
-'唱著称' => '唱著称',
-'唱著稱' => '唱著称',
-'唱著者' => '唱著者',
-'唱著述' => '唱著述',
-'喝著' => '喝着',
-'喝著书' => '喝著书',
-'喝著書' => '喝著书',
-'喝著作' => '喝著作',
-'喝著名' => '喝著名',
-'喝著录' => '喝著录',
-'喝著錄' => '喝著录',
-'喝著稱' => '喝著称',
-'喝著称' => '喝著称',
-'喝著者' => '喝著者',
-'喝著述' => '喝著述',
-'嗅不著' => '嗅不着',
-'嗅得著' => '嗅得着',
-'嗅著' => '嗅着',
-'嚷著' => '嚷着',
-'嚷著書' => '嚷著书',
-'嚷著书' => '嚷著书',
-'嚷著作' => '嚷著作',
-'嚷著名' => '嚷著名',
-'嚷著錄' => '嚷著录',
-'嚷著录' => '嚷著录',
-'嚷著称' => '嚷著称',
-'嚷著稱' => '嚷著称',
-'嚷著者' => '嚷著者',
-'嚷著述' => '嚷著述',
+'諠譁' => '喧哗',
 '回覆' => '回复',
-'因著' => '因着',
-'因著〈' => '因著〈',
-'因著《' => '因著《',
-'因著書' => '因著书',
-'因著书' => '因著书',
-'因著作' => '因著作',
-'因著名' => '因著名',
-'因著錄' => '因著录',
-'因著录' => '因著录',
-'因著稱' => '因著称',
-'因著称' => '因著称',
-'因著者' => '因著者',
-'因著述' => '因著述',
-'困著' => '困着',
-'困著書' => '困著书',
-'困著书' => '困著书',
-'困著作' => '困著作',
-'困著名' => '困著名',
-'困著錄' => '困著录',
-'困著录' => '困著录',
-'困著称' => '困著称',
-'困著稱' => '困著称',
-'困著者' => '困著者',
-'困著述' => '困著述',
-'圍著' => '围着',
-'圍著書' => '围著书',
-'圍著作' => '围著作',
-'圍著名' => '围著名',
-'圍著錄' => '围著录',
-'圍著稱' => '围著称',
-'圍著者' => '围著者',
-'圍著述' => '围著述',
 '土著' => '土著',
-'在著' => '在着',
-'在著書' => '在著书',
-'在著书' => '在著书',
-'在著作' => '在著作',
-'在著名' => '在著名',
-'在著錄' => '在著录',
-'在著录' => '在著录',
-'在著稱' => '在著称',
-'在著称' => '在著称',
-'在著者' => '在著者',
-'在著述' => '在著述',
-'坐著' => '坐着',
-'坐著书' => '坐著书',
-'坐著書' => '坐著书',
-'坐著作' => '坐著作',
-'坐著名' => '坐著名',
-'坐著录' => '坐著录',
-'坐著錄' => '坐著录',
-'坐著称' => '坐著称',
-'坐著稱' => '坐著称',
-'坐著者' => '坐著者',
-'坐著述' => '坐著述',
 '坤乾' => '坤乾',
-'備著' => '备着',
-'備著書' => '备著书',
-'備著作' => '备著作',
-'備著名' => '备著名',
-'備著錄' => '备著录',
-'備著稱' => '备著称',
-'備著者' => '备著者',
-'備著述' => '备著述',
+'塔鍾' => '塔钟',
+'墨瀋' => '墨渖',
+'壁鍾' => '壁钟',
 '覆查' => '复查',
 '覆核' => '复核',
-'天道为乾' => '天道为乾',
+'覆检' => '复检',
+'復甦' => '复苏',
+'多鍾' => '多钟',
+'大麴' => '大曲',
+'大鍾' => '大钟',
 '天道為乾' => '天道为乾',
-'太閤' => '太阁',
-'夾著' => '夹着',
-'夾著書' => '夹著书',
-'夾著作' => '夹著作',
-'夾著名' => '夹著名',
-'夾著錄' => '夹著录',
-'夾著稱' => '夹著称',
-'夾著者' => '夹著者',
-'夾著述' => '夹著述',
+'天道为乾' => '天道为乾',
 '奧區' => '奧区',
-'姓幺' => '姓幺',
+'如瀋' => '如渖',
+'姓么' => '姓幺',
+'子餘' => '子馀',
 '字乾生' => '字乾生',
-'存摺' => '存摺',
-'孤著' => '孤着',
-'孤著书' => '孤著书',
-'孤著書' => '孤著书',
-'孤著作' => '孤著作',
-'孤著名' => '孤著名',
-'孤著錄' => '孤著录',
-'孤著录' => '孤著录',
-'孤著称' => '孤著称',
-'孤著稱' => '孤著称',
-'孤著者' => '孤著者',
-'孤著述' => '孤著述',
-'學著' => '学着',
-'學著書' => '学著书',
-'學著作' => '学著作',
-'學著名' => '学著名',
-'學著錄' => '学著录',
-'學著稱' => '学著称',
-'學著者' => '学著者',
-'學著述' => '学著述',
-'守著' => '守着',
-'守著書' => '守著书',
-'守著书' => '守著书',
-'守著作' => '守著作',
-'守著名' => '守著名',
-'守著录' => '守著录',
-'守著錄' => '守著录',
-'守著称' => '守著称',
-'守著稱' => '守著称',
-'守著者' => '守著者',
-'守著述' => '守著述',
-'定著' => '定着',
-'定著書' => '定著书',
-'定著书' => '定著书',
-'定著作' => '定著作',
-'定著名' => '定著名',
-'定著錄' => '定著录',
-'定著录' => '定著录',
-'定著称' => '定著称',
-'定著稱' => '定著称',
-'定著者' => '定著者',
-'定著述' => '定著述',
-'對著' => '对着',
-'對著書' => '对著书',
-'對著作' => '对著作',
-'對著名' => '对著名',
-'對著錄' => '对著录',
-'對著稱' => '对著称',
-'對著者' => '对著者',
-'對著述' => '对著述',
-'尋著' => '寻着',
-'尋著書' => '寻著书',
-'尋著作' => '寻著作',
-'尋著名' => '寻著名',
-'尋著錄' => '寻著录',
-'尋著稱' => '寻著称',
-'尋著者' => '寻著者',
-'尋著述' => '寻著述',
+'孫乾' => '孙乾',
+'孙乾' => '孙乾',
+'宋鍾國' => '宋钟国',
+'宏碁' => '宏碁',
+'官陞' => '官升',
 '將軍抽俥' => '将军抽俥',
 '將軍抽車' => '将军抽車',
+'爾冬陞' => '尔冬升',
 '尼乾陀' => '尼乾陀',
-'展著' => '展着',
-'展著書' => '展著书',
-'展著书' => '展著书',
-'展著作' => '展著作',
-'展著名' => '展著名',
-'展著錄' => '展著录',
-'展著录' => '展著录',
-'展著稱' => '展著称',
-'展著称' => '展著称',
-'展著者' => '展著者',
-'展著述' => '展著述',
-'峯岸南' => '峯岸南',
+'跼促' => '局促',
+'跼限' => '局限',
+'山崩鍾應' => '山崩钟应',
+'崔秀鍾' => '崔秀钟',
 '巨著' => '巨著',
-'帶著' => '带着',
-'帶著書' => '带著书',
-'帶著作' => '带著作',
-'帶著名' => '带著名',
-'帶著錄' => '带著录',
-'帶著稱' => '带著称',
-'帶著者' => '带著者',
-'帶著述' => '带著述',
-'幫著' => '帮着',
-'幫著書' => '帮著书',
-'幫著作' => '帮著作',
-'幫著名' => '帮著名',
-'幫著錄' => '帮著录',
-'幫著稱' => '帮著称',
-'幫著者' => '帮著者',
-'幫著述' => '帮著述',
 '乾乾淨淨' => '干干净净',
 '乾乾脆脆' => '干干脆脆',
 '乾泉水' => '干泉水',
-'å¹¹è\91\97' => 'å¹²ç\9d\80',
+'å¹´é\99\9e' => 'å¹´å\8d\87',
 '么二三' => '幺二三',
-'幺二三' => '幺二三',
 '么元' => '幺元',
-'幺元' => '幺元',
-'幺鳳' => '幺凤',
 '么鳳' => '幺凤',
+'么半' => '幺半',
 '么半群' => '幺半群',
-'幺半群' => '幺半群',
-'幺廝' => '幺厮',
+'么廝' => '幺厮',
 '幺厮' => '幺厮',
-'幺叔' => '幺叔',
 '么叔' => '幺叔',
 '么媽' => '幺妈',
-'幺媽' => '幺妈',
 '么妹' => '幺妹',
-'幺妹' => '幺妹',
 '么姓' => '幺姓',
-'幺姓' => '幺姓',
 '么姨' => '幺姨',
-'幺姨' => '幺姨',
 '么娘' => '幺娘',
-'么孃' => '幺娘',
-'幺娘' => '幺娘',
 '幺孃' => '幺娘',
-'幺小' => '幺小',
+'么孃' => '幺娘',
 '么小' => '幺小',
-'幺氏' => '幺氏',
+'么弟' => '幺弟',
 '么氏' => '幺氏',
 '么爸' => '幺爸',
-'幺爸' => '幺爸',
-'幺爹' => '幺爹',
 '么爹' => '幺爹',
 '么篇' => '幺篇',
-'幺篇' => '幺篇',
 '么舅' => '幺舅',
-'幺舅' => '幺舅',
 '么蛾子' => '幺蛾子',
-'幺蛾子' => '幺蛾子',
 '么謙' => '幺谦',
-'幺謙' => '幺谦',
-'幺麽' => '幺麽',
+'么麽' => '幺麽',
 '么麼' => '幺麽',
-'幺麽小丑' => '幺麽小丑',
-'么麼小丑' => '幺麽小丑',
-'庇護著' => '庇护着',
-'應著' => '应着',
-'應著書' => '应著书',
-'應著作' => '应著作',
-'應著名' => '应著名',
-'應著錄' => '应著录',
-'應著稱' => '应著称',
-'應著者' => '应著者',
-'應著述' => '应著述',
+'么麽小丑' => '幺麽小丑',
+'慶餘' => '庆馀',
+'座鍾' => '座钟',
 '康乾' => '康乾',
-'康著' => '康着',
-'康著书' => '康著书',
-'康著書' => '康著书',
-'康著作' => '康著作',
-'康著名' => '康著名',
-'康著录' => '康著录',
-'康著錄' => '康著录',
-'康著称' => '康著称',
-'康著稱' => '康著称',
-'康著者' => '康著者',
-'康著述' => '康著述',
-'開著' => '开着',
-'開著書' => '开著书',
-'開著作' => '开著作',
-'開著名' => '开著名',
-'開著錄' => '开著录',
-'開著稱' => '开著称',
-'開著者' => '开著者',
-'開著述' => '开著述',
 '張法乾' => '张法乾',
 '张法乾' => '张法乾',
-'當著' => '当着',
-'當著書' => '当著书',
-'當著作' => '当著作',
-'當著名' => '当著名',
-'當著錄' => '当著录',
-'當著稱' => '当著称',
-'當著者' => '当著者',
-'當著述' => '当著述',
+'張鍾英' => '张钟英',
 '彰明較著' => '彰明较著',
 '待覆' => '待复',
-'待著' => '待着',
-'待著书' => '待著书',
-'待著書' => '待著书',
-'待著作' => '待著作',
-'待著名' => '待著名',
-'待著录' => '待著录',
-'待著錄' => '待著录',
-'待著稱' => '待著称',
-'待著称' => '待著称',
-'待著者' => '待著者',
-'待著述' => '待著述',
 '後姓' => '後姓',
-'得著' => '得着',
-'得著書' => '得著书',
-'得著书' => '得著书',
-'得著作' => '得著作',
-'得著名' => '得著名',
-'得著錄' => '得著录',
-'得著录' => '得著录',
-'得著稱' => '得著称',
-'得著称' => '得著称',
-'得著者' => '得著者',
-'得著述' => '得著述',
-'循著' => '循着',
-'循著书' => '循著书',
-'循著書' => '循著书',
-'循著作' => '循著作',
-'循著名' => '循著名',
-'循著录' => '循著录',
-'循著錄' => '循著录',
-'循著称' => '循著称',
-'循著稱' => '循著称',
-'循著者' => '循著者',
-'循著述' => '循著述',
-'心著' => '心着',
-'心著书' => '心著书',
-'心著書' => '心著书',
-'心著作' => '心著作',
-'心著名' => '心著名',
-'心著录' => '心著录',
-'心著錄' => '心著录',
-'心著稱' => '心著称',
-'心著称' => '心著称',
-'心著者' => '心著者',
-'心著述' => '心著述',
-'忍著' => '忍着',
-'忍著书' => '忍著书',
-'忍著書' => '忍著书',
-'忍著作' => '忍著作',
-'忍著名' => '忍著名',
-'忍著录' => '忍著录',
-'忍著錄' => '忍著录',
-'忍著稱' => '忍著称',
-'忍著称' => '忍著称',
-'忍著者' => '忍著者',
-'忍著述' => '忍著述',
-'志著' => '志着',
-'志著書' => '志著书',
-'志著书' => '志著书',
-'志著作' => '志著作',
-'志著名' => '志著名',
-'志著錄' => '志著录',
-'志著录' => '志著录',
-'志著称' => '志著称',
-'志著稱' => '志著称',
-'志著者' => '志著者',
-'志著述' => '志著述',
-'忙著' => '忙着',
-'忙著书' => '忙著书',
-'忙著書' => '忙著书',
-'忙著作' => '忙著作',
-'忙著名' => '忙著名',
-'忙著录' => '忙著录',
-'忙著錄' => '忙著录',
-'忙著称' => '忙著称',
-'忙著稱' => '忙著称',
-'忙著者' => '忙著者',
-'忙著述' => '忙著述',
-'懷著' => '怀着',
-'懷著書' => '怀著书',
-'懷著作' => '怀著作',
-'懷著名' => '怀著名',
-'懷著錄' => '怀著录',
-'懷著稱' => '怀著称',
-'懷著者' => '怀著者',
-'懷著述' => '怀著述',
-'急著' => '急着',
-'急著书' => '急著书',
-'急著書' => '急著书',
-'急著作' => '急著作',
-'急著名' => '急著名',
-'急著录' => '急著录',
-'急著錄' => '急著录',
-'急著称' => '急著称',
-'急著稱' => '急著称',
-'急著者' => '急著者',
-'急著述' => '急著述',
-'性著' => '性着',
-'性著书' => '性著书',
-'性著書' => '性著书',
-'性著作' => '性著作',
-'性著名' => '性著名',
-'性著录' => '性著录',
-'性著錄' => '性著录',
-'性著称' => '性著称',
-'性著稱' => '性著称',
-'性著者' => '性著者',
-'性著述' => '性著述',
-'戀著' => '恋着',
-'戀著書' => '恋著书',
-'戀著作' => '恋著作',
-'戀著名' => '恋著名',
-'戀著錄' => '恋著录',
-'戀著稱' => '恋著称',
-'戀著者' => '恋著者',
-'戀著述' => '恋著述',
+'慫慂' => '怂恿',
 '恩威並著' => '恩威并著',
-'悠著' => '悠着',
-'悠著書' => '悠著书',
-'悠著书' => '悠著书',
-'悠著作' => '悠著作',
-'悠著名' => '悠著名',
-'悠著錄' => '悠著录',
-'悠著录' => '悠著录',
-'悠著称' => '悠著称',
-'悠著稱' => '悠著称',
-'悠著者' => '悠著者',
-'悠著述' => '悠著述',
-'慣著' => '惯着',
-'慣著書' => '惯著书',
-'慣著作' => '惯著作',
-'慣著名' => '惯著名',
-'慣著錄' => '惯著录',
-'慣著稱' => '惯著称',
-'慣著者' => '惯著者',
-'慣著述' => '惯著述',
-'想著' => '想着',
-'想著書' => '想著书',
-'想著书' => '想著书',
-'想著作' => '想著作',
-'想著名' => '想著名',
-'想著錄' => '想著录',
-'想著录' => '想著录',
-'想著称' => '想著称',
-'想著稱' => '想著称',
-'想著者' => '想著者',
-'想著述' => '想著述',
-'戰著' => '战着',
-'戰著書' => '战著书',
-'戰著作' => '战著作',
-'戰著名' => '战著名',
-'戰著錄' => '战著录',
-'戰著稱' => '战著称',
-'戰著者' => '战著者',
-'戰著述' => '战著述',
-'戴著' => '戴着',
-'戴著書' => '戴著书',
-'戴著书' => '戴著书',
-'戴著作' => '戴著作',
-'戴著名' => '戴著名',
-'戴著錄' => '戴著录',
-'戴著录' => '戴著录',
-'戴著稱' => '戴著称',
-'戴著称' => '戴著称',
-'戴著者' => '戴著者',
-'戴著述' => '戴著述',
-'扎著' => '扎着',
-'扎著書' => '扎著书',
-'扎著书' => '扎著书',
-'扎著作' => '扎著作',
-'扎著名' => '扎著名',
-'扎著錄' => '扎著录',
-'扎著录' => '扎著录',
-'扎著称' => '扎著称',
-'扎著稱' => '扎著称',
-'扎著者' => '扎著者',
-'扎著述' => '扎著述',
-'打著' => '打着',
-'打著書' => '打著书',
-'打著书' => '打著书',
-'打著作' => '打著作',
-'打著名' => '打著名',
-'打著錄' => '打著录',
-'打著录' => '打著录',
-'打著称' => '打著称',
-'打著稱' => '打著称',
-'打著者' => '打著者',
-'打著述' => '打著述',
-'扛著' => '扛着',
-'扛著书' => '扛著书',
-'扛著書' => '扛著书',
-'扛著作' => '扛著作',
-'扛著名' => '扛著名',
-'扛著录' => '扛著录',
-'扛著錄' => '扛著录',
-'扛著称' => '扛著称',
-'扛著稱' => '扛著称',
-'扛著者' => '扛著者',
-'扛著述' => '扛著述',
+'噁心' => '恶心',
+'懸鍾' => '悬钟',
+'情蒐' => '情搜',
+'情鍾' => '情钟',
+'惏悷' => '惏悷',
+'惏慄' => '惏慄',
+'慘澹' => '惨淡',
+'成效顯著' => '成效显著',
+'成績顯著' => '成绩显著',
+'所鍾' => '所钟',
+'手鍊' => '手链',
+'扞格' => '扞格',
 '執著' => '执著',
 '批覆' => '批复',
-'找不著' => '找不着',
-'找得著' => '找得着',
-'抓著' => '抓着',
-'抓著作' => '抓著作',
-'抓著名' => '抓著名',
-'抓著录' => '抓著录',
-'抓著錄' => '抓著录',
-'抓著称' => '抓著称',
-'抓著稱' => '抓著称',
-'抓著者' => '抓著者',
-'抓著述' => '抓著述',
-'護著' => '护着',
-'護著書' => '护著书',
-'護著作' => '护著作',
-'護著名' => '护著名',
-'護著錄' => '护著录',
-'護著稱' => '护著称',
-'護著者' => '护著者',
-'護著述' => '护著述',
-'披著' => '披着',
-'披著书' => '披著书',
-'披著書' => '披著书',
-'披著作' => '披著作',
-'披著名' => '披著名',
-'披著录' => '披著录',
-'披著錄' => '披著录',
-'披著稱' => '披著称',
-'披著称' => '披著称',
-'披著者' => '披著者',
-'披著述' => '披著述',
-'抬著' => '抬着',
-'抬著作' => '抬著作',
-'抬著名' => '抬著名',
-'抬著录' => '抬著录',
-'抬著錄' => '抬著录',
-'抬著稱' => '抬著称',
-'抬著称' => '抬著称',
-'抬著者' => '抬著者',
-'抬著述' => '抬著述',
-'抱著' => '抱着',
-'抱著作' => '抱著作',
-'抱著名' => '抱著名',
-'抱著录' => '抱著录',
-'抱著錄' => '抱著录',
-'抱著稱' => '抱著称',
-'抱著称' => '抱著称',
-'抱著者' => '抱著者',
-'抱著述' => '抱著述',
-'拉著' => '拉着',
-'拉著书' => '拉著书',
-'拉著書' => '拉著书',
-'拉著作' => '拉著作',
-'拉著名' => '拉著名',
-'拉著录' => '拉著录',
-'拉著錄' => '拉著录',
-'拉著称' => '拉著称',
-'拉著稱' => '拉著称',
-'拉著者' => '拉著者',
-'拉著述' => '拉著述',
 '拉鍊' => '拉链',
-'拎著' => '拎着',
-'拎著作' => '拎著作',
-'拎著名' => '拎著名',
-'拎著錄' => '拎著录',
-'拎著录' => '拎著录',
-'拎著称' => '拎著称',
-'拎著稱' => '拎著称',
-'拎著者' => '拎著者',
-'拎著述' => '拎著述',
-'拖著' => '拖着',
-'拖著作' => '拖著作',
-'拖著名' => '拖著名',
-'拖著錄' => '拖著录',
-'拖著录' => '拖著录',
-'拖著稱' => '拖著称',
-'拖著称' => '拖著称',
-'拖著者' => '拖著者',
-'拖著述' => '拖著述',
 '拙著' => '拙著',
 '拚命' => '拚命',
 '拚搏' => '拚搏',
 '拚死' => '拚死',
-'拼著' => '拼着',
-'拼著作' => '拼著作',
-'拼著名' => '拼著名',
-'拼著录' => '拼著录',
-'拼著錄' => '拼著录',
-'拼著稱' => '拼著称',
-'拼著称' => '拼著称',
-'拼著者' => '拼著者',
-'拼著述' => '拼著述',
-'拿著' => '拿着',
-'拿著作' => '拿著作',
-'拿著名' => '拿著名',
-'拿著录' => '拿著录',
-'拿著錄' => '拿著录',
-'拿著称' => '拿著称',
-'拿著稱' => '拿著称',
-'拿著者' => '拿著者',
-'拿著述' => '拿著述',
-'持著' => '持着',
-'持著作' => '持著作',
-'持著名' => '持著名',
-'持著錄' => '持著录',
-'持著录' => '持著录',
-'持著称' => '持著称',
-'持著稱' => '持著称',
-'持著者' => '持著者',
-'持著述' => '持著述',
-'挑著' => '挑着',
-'挑著作' => '挑著作',
-'挑著名' => '挑著名',
-'挑著錄' => '挑著录',
-'挑著录' => '挑著录',
-'挑著称' => '挑著称',
-'挑著稱' => '挑著称',
-'挑著者' => '挑著者',
-'挑著述' => '挑著述',
-'擋著' => '挡着',
-'擋著作' => '挡著作',
-'擋著名' => '挡著名',
-'擋著錄' => '挡著录',
-'擋著稱' => '挡著称',
-'擋著者' => '挡著者',
-'擋著述' => '挡著述',
-'掙著' => '挣着',
-'掙著書' => '挣著书',
-'掙著作' => '挣著作',
-'掙著名' => '挣著名',
-'掙著錄' => '挣著录',
-'掙著稱' => '挣著称',
-'掙著者' => '挣著者',
-'掙著述' => '挣著述',
-'揮著' => '挥着',
-'揮著作' => '挥著作',
-'揮著名' => '挥著名',
-'揮著錄' => '挥著录',
-'揮著稱' => '挥著称',
-'揮著者' => '挥著者',
-'揮著述' => '挥著述',
-'挨著' => '挨着',
-'挨著作' => '挨著作',
-'挨著名' => '挨著名',
-'挨著錄' => '挨著录',
-'挨著录' => '挨著录',
-'挨著稱' => '挨著称',
-'挨著称' => '挨著称',
-'挨著者' => '挨著者',
-'挨著述' => '挨著述',
-'捆著' => '捆着',
-'捆著作' => '捆著作',
-'捆著名' => '捆著名',
-'捆著錄' => '捆著录',
-'捆著录' => '捆著录',
-'捆著称' => '捆著称',
-'捆著稱' => '捆著称',
-'捆著者' => '捆著者',
-'捆著述' => '捆著述',
-'據著' => '据着',
-'據著書' => '据著书',
-'據著作' => '据著作',
-'據著名' => '据著名',
-'據著錄' => '据著录',
-'據著稱' => '据著称',
-'據著者' => '据著者',
-'據著述' => '据著述',
-'掖著' => '掖着',
-'掖著作' => '掖著作',
-'掖著名' => '掖著名',
-'掖著錄' => '掖著录',
-'掖著录' => '掖著录',
-'掖著稱' => '掖著称',
-'掖著称' => '掖著称',
-'掖著者' => '掖著者',
-'掖著述' => '掖著述',
-'接著' => '接着',
-'接著作' => '接著作',
-'接著名' => '接著名',
-'接著錄' => '接著录',
-'接著录' => '接著录',
-'接著稱' => '接著称',
-'接著称' => '接著称',
-'接著者' => '接著者',
-'接著述' => '接著述',
-'揉著' => '揉着',
-'揉著书' => '揉著书',
-'揉著書' => '揉著书',
-'揉著作' => '揉著作',
-'揉著名' => '揉著名',
-'揉著录' => '揉著录',
-'揉著錄' => '揉著录',
-'揉著称' => '揉著称',
-'揉著稱' => '揉著称',
-'揉著者' => '揉著者',
-'揉著述' => '揉著述',
-'提著' => '提着',
-'提著作' => '提著作',
-'提著名' => '提著名',
-'提著錄' => '提著录',
-'提著录' => '提著录',
-'提著稱' => '提著称',
-'提著称' => '提著称',
-'提著者' => '提著者',
-'提著述' => '提著述',
-'摟著' => '搂着',
-'摟著作' => '搂著作',
-'摟著名' => '搂著名',
-'摟著錄' => '搂著录',
-'摟著稱' => '搂著称',
-'摟著者' => '搂著者',
-'摟著述' => '搂著述',
-'擺著' => '摆着',
-'擺著作' => '摆著作',
-'擺著名' => '摆著名',
-'擺著錄' => '摆著录',
-'擺著稱' => '摆著称',
-'擺著者' => '摆著者',
-'擺著述' => '摆著述',
+'拾瀋' => '拾渖',
+'拿破崙' => '拿破仑',
+'掛鍾' => '挂钟',
+'挨剋' => '挨剋',
+'掩耳盜鍾' => '掩耳盗钟',
+'提昇' => '提升',
+'蒐錄' => '搜录',
+'蒐索' => '搜索',
+'蒐羅' => '搜罗',
+'蒐藏' => '搜藏',
+'蒐證' => '搜证',
+'蒐購' => '搜购',
+'蒐輯' => '搜辑',
+'蒐采' => '搜采',
+'蒐採' => '搜采',
+'蒐集' => '搜集',
+'搥打' => '搥打',
+'搥胸頓足' => '搥胸顿足',
+'擺鍾' => '摆钟',
+'撞鍾' => '撞钟',
 '撰著' => '撰著',
-'撼著' => '撼着',
-'撼著書' => '撼著书',
-'撼著书' => '撼著书',
-'撼著作' => '撼著作',
-'撼著名' => '撼著名',
-'撼著錄' => '撼著录',
-'撼著录' => '撼著录',
-'撼著称' => '撼著称',
-'撼著稱' => '撼著称',
-'撼著者' => '撼著者',
-'撼著述' => '撼著述',
-'敞著' => '敞着',
-'敞著作' => '敞著作',
-'敞著名' => '敞著名',
-'敞著錄' => '敞著录',
-'敞著录' => '敞著录',
-'敞著稱' => '敞著称',
-'敞著称' => '敞著称',
-'敞著者' => '敞著者',
-'敞著述' => '敞著述',
-'數著' => '数着',
-'數著作' => '数著作',
-'數著名' => '数著名',
-'數著錄' => '数著录',
-'數著稱' => '数著称',
-'數著者' => '数著者',
-'數著述' => '数著述',
-'斗著' => '斗着',
-'斗著書' => '斗著书',
-'斗著书' => '斗著书',
-'斗著作' => '斗著作',
-'斗著名' => '斗著名',
-'斗著錄' => '斗著录',
-'斗著录' => '斗著录',
-'斗著称' => '斗著称',
-'斗著稱' => '斗著称',
-'斗著者' => '斗著者',
-'斗著述' => '斗著述',
-'斥著' => '斥着',
-'斥著書' => '斥著书',
-'斥著书' => '斥著书',
-'斥著作' => '斥著作',
-'斥著名' => '斥著名',
-'斥著錄' => '斥著录',
-'斥著录' => '斥著录',
-'斥著稱' => '斥著称',
-'斥著称' => '斥著称',
-'斥著者' => '斥著者',
-'斥著述' => '斥著述',
+'效果顯著' => '效果显著',
+'敲鍾' => '敲钟',
+'文徵明' => '文徵明',
 '新著' => '新著',
-'新著龍虎門' => '新著龙虎门',
 '於世成' => '於世成',
+'於之瑩' => '於之莹',
+'於之莹' => '於之莹',
 '於乎' => '於乎',
 '於乙于同' => '於乙于同',
 '於乙宇同' => '於乙宇同',
@@ -14643,838 +13575,147 @@ $zh2Hans = array(
 '於梨華' => '於梨华',
 '於梨华' => '於梨华',
 '於氏' => '於氏',
-'於潛縣' => '於潜县',
 '於潜县' => '於潜县',
+'於潛縣' => '於潜县',
 '於祥玉' => '於祥玉',
 '於菟' => '於菟',
 '於賢德' => '於贤德',
 '於除鞬' => '於除鞬',
-'旋乾转坤' => '旋乾转坤',
 '旋乾轉坤' => '旋乾转坤',
+'旋乾转坤' => '旋乾转坤',
+'時鍾' => '时钟',
 '曠若發矇' => '旷若发矇',
-'昂著' => '昂着',
-'昂著书' => '昂著书',
-'昂著書' => '昂著书',
-'昂著作' => '昂著作',
-'昂著名' => '昂著名',
-'昂著錄' => '昂著录',
-'昂著录' => '昂著录',
-'昂著稱' => '昂著称',
-'昂著称' => '昂著称',
-'昂著者' => '昂著者',
-'昂著述' => '昂著述',
+'崑崙' => '昆仑',
+'崑劇' => '昆剧',
+'崑山' => '昆山',
+'崑曲' => '昆曲',
+'崑腔' => '昆腔',
+'崑蘇' => '昆苏',
+'崑調' => '昆调',
 '易·乾' => '易·乾',
-'易經·乾' => '易经·乾',
 '易经·乾' => '易经·乾',
-'易經乾' => '易经乾',
+'易經·乾' => '易经·乾',
 '易经乾' => '易经乾',
-'映著' => '映着',
-'映著書' => '映著书',
-'映著书' => '映著书',
-'映著作' => '映著作',
-'映著名' => '映著名',
-'映著錄' => '映著录',
-'映著录' => '映著录',
-'映著稱' => '映著称',
-'映著称' => '映著称',
-'映著者' => '映著者',
-'映著述' => '映著述',
+'易經乾' => '易经乾',
 '昭著' => '昭著',
 '顯著' => '显著',
-'显著' => '显著',
-'晃著' => '晃着',
-'晃著作' => '晃著作',
-'晃著名' => '晃著名',
-'晃著錄' => '晃著录',
-'晃著录' => '晃著录',
-'晃著称' => '晃著称',
-'晃著稱' => '晃著称',
-'晃著者' => '晃著者',
-'晃著述' => '晃著述',
-'暗著' => '暗着',
-'暗著书' => '暗著书',
-'暗著書' => '暗著书',
-'暗著作' => '暗著作',
-'暗著名' => '暗著名',
-'暗著錄' => '暗著录',
-'暗著录' => '暗著录',
-'暗著称' => '暗著称',
-'暗著稱' => '暗著称',
-'暗著者' => '暗著者',
-'暗著述' => '暗著述',
-'有著' => '有着',
-'有著書' => '有著书',
-'有著书' => '有著书',
-'有著作' => '有著作',
-'有著名' => '有著名',
-'有著錄' => '有著录',
-'有著录' => '有著录',
-'有著称' => '有著称',
-'有著稱' => '有著称',
-'有著者' => '有著者',
-'有著述' => '有著述',
-'望著' => '望着',
-'望著作' => '望著作',
-'望著名' => '望著名',
-'望著录' => '望著录',
-'望著錄' => '望著录',
-'望著稱' => '望著称',
-'望著称' => '望著称',
-'望著者' => '望著者',
-'望著述' => '望著述',
+'顯著地' => '显著地',
+'顯著地位' => '显著地位',
+'顯著性' => '显著性',
+'顯著成績' => '显著成绩',
+'顯著效果' => '显著效果',
+'顯著特點' => '显著特点',
+'晉陞' => '晋升',
+'晚鍾' => '晚钟',
+'晨鍾' => '晨钟',
+'暗闇' => '暗闇',
+'麴黴' => '曲霉',
+'曾運乾' => '曾运乾',
+'曾运乾' => '曾运乾',
+'月陞' => '月升',
 '朝乾夕惕' => '朝乾夕惕',
-'朝著' => '朝着',
-'朝著作' => '朝著作',
-'朝著名' => '朝著名',
-'朝著录' => '朝著录',
-'朝著錄' => '朝著录',
-'朝著稱' => '朝著称',
-'朝著称' => '朝著称',
-'朝著者' => '朝著者',
-'朝著述' => '朝著述',
-'本著' => '本着',
-'本著书' => '本著书',
-'本著書' => '本著书',
-'本著作' => '本著作',
-'本著名' => '本著名',
-'本著录' => '本著录',
-'本著錄' => '本著录',
-'本著稱' => '本著称',
-'本著称' => '本著称',
-'本著者' => '本著者',
-'本著述' => '本著述',
+'朝鍾暮鼓' => '朝钟暮鼓',
+'朱有燉' => '朱有燉',
+'朱淛' => '朱淛',
 '朴於宇同' => '朴於宇同',
-'殺著' => '杀着',
-'殺著書' => '杀著书',
-'殺著作' => '杀著作',
-'殺著名' => '杀著名',
-'殺著錄' => '杀著录',
-'殺著稱' => '杀著称',
-'殺著者' => '杀著者',
-'殺著述' => '杀著述',
-'雜著' => '杂着',
-'雜著書' => '杂著书',
-'雜著作' => '杂著作',
-'雜著名' => '杂著名',
-'雜著錄' => '杂著录',
-'雜著稱' => '杂著称',
-'雜著者' => '杂著者',
-'雜著述' => '杂著述',
 '李乾德' => '李乾德',
 '李乾順' => '李乾顺',
 '李乾顺' => '李乾顺',
 '李澤鉅' => '李泽钜',
-'來著' => '来着',
-'來著書' => '来著书',
-'來著作' => '来著作',
-'來著名' => '来著名',
-'來著錄' => '来著录',
-'來著稱' => '来著称',
-'來著者' => '来著者',
-'來著述' => '来著述',
-'楊幺' => '杨幺',
-'枕著' => '枕着',
-'枕著作' => '枕著作',
-'枕著名' => '枕著名',
-'枕著錄' => '枕著录',
-'枕著录' => '枕著录',
-'枕著稱' => '枕著称',
-'枕著称' => '枕著称',
-'枕著者' => '枕著者',
-'枕著述' => '枕著述',
-'柳詒徵' => '柳诒徵',
+'李祕' => '李祕',
+'李譔' => '李譔',
+'李鍾原' => '李钟原',
+'林鍾' => '林钟',
 '柳诒徵' => '柳诒徵',
-'標志著' => '标志着',
-'標誌著' => '标志着',
-'夢著' => '梦着',
-'夢著書' => '梦著书',
-'夢著作' => '梦著作',
-'夢著名' => '梦著名',
-'夢著錄' => '梦著录',
-'夢著稱' => '梦著称',
-'夢著者' => '梦著者',
-'夢著述' => '梦著述',
-'梳著' => '梳着',
-'梳著作' => '梳著作',
-'梳著名' => '梳著名',
-'梳著錄' => '梳著录',
-'梳著录' => '梳著录',
-'梳著稱' => '梳著称',
-'梳著称' => '梳著称',
-'梳著者' => '梳著者',
-'梳著述' => '梳著述',
+'柳詒徵' => '柳诒徵',
+'校讎' => '校雠',
+'楈枒' => '楈枒',
 '樊於期' => '樊於期',
+'橡椀' => '橡椀',
+'此鍾' => '此钟',
+'殘瀋' => '残渖',
+'慇懃' => '殷勤',
+'慇勤' => '殷勤',
+'比較顯著' => '比较显著',
+'毫釐' => '毫厘',
 '氆氌' => '氆氌',
-'求著' => '求着',
-'求著书' => '求著书',
-'求著書' => '求著书',
-'求著作' => '求著作',
-'求著名' => '求著名',
-'求著录' => '求著录',
-'求著錄' => '求著录',
-'求著称' => '求著称',
-'求著稱' => '求著称',
-'求著者' => '求著者',
-'求著述' => '求著述',
 '沈沒' => '沉没',
-'æ²\89è\91\97' => 'æ²\89ç\9d\80',
+'æ²\88æ¾±' => 'æ²\89æ·\80',
 '沈積' => '沉积',
 '沈船' => '沉船',
-'沉著書' => '沉著书',
-'沉著书' => '沉著书',
-'沉著作' => '沉著作',
-'沉著名' => '沉著名',
-'沉著錄' => '沉著录',
-'沉著录' => '沉著录',
-'沉著称' => '沉著称',
-'沉著稱' => '沉著称',
-'沉著者' => '沉著者',
-'沉著述' => '沉著述',
+'沈重' => '沉重',
 '沈默' => '沉默',
-'沿著' => '沿着',
-'沿著书' => '沿著书',
-'沿著書' => '沿著书',
-'沿著作' => '沿著作',
-'沿著名' => '沿著名',
-'沿著录' => '沿著录',
-'沿著錄' => '沿著录',
-'沿著稱' => '沿著称',
-'沿著称' => '沿著称',
-'沿著者' => '沿著者',
-'沿著述' => '沿著述',
 '氾濫' => '泛滥',
 '洗鍊' => '洗练',
-'活著' => '活着',
-'活著书' => '活著书',
-'活著書' => '活著书',
-'活著作' => '活著作',
-'活著名' => '活著名',
-'活著录' => '活著录',
-'活著錄' => '活著录',
-'活著稱' => '活著称',
-'活著称' => '活著称',
-'活著者' => '活著者',
-'活著述' => '活著述',
-'流著' => '流着',
-'流著书' => '流著书',
-'流著書' => '流著书',
-'流著作' => '流著作',
-'流著名' => '流著名',
-'流著录' => '流著录',
-'流著錄' => '流著录',
-'流著稱' => '流著称',
-'流著称' => '流著称',
-'流著者' => '流著者',
-'流著述' => '流著述',
-'流露著' => '流露着',
-'浮著' => '浮着',
-'浮著书' => '浮著书',
-'浮著書' => '浮著书',
-'浮著作' => '浮著作',
-'浮著名' => '浮著名',
-'浮著录' => '浮著录',
-'浮著錄' => '浮著录',
-'浮著稱' => '浮著称',
-'浮著称' => '浮著称',
-'浮著者' => '浮著者',
-'浮著述' => '浮著述',
-'潤著' => '润着',
-'潤著書' => '润著书',
-'潤著作' => '润著作',
-'潤著名' => '润著名',
-'潤著錄' => '润著录',
-'潤著稱' => '润著称',
-'潤著者' => '润著者',
-'潤著述' => '润著述',
-'涵著' => '涵着',
-'涵著书' => '涵著书',
-'涵著書' => '涵著书',
-'涵著作' => '涵著作',
-'涵著名' => '涵著名',
-'涵著录' => '涵著录',
-'涵著錄' => '涵著录',
-'涵著稱' => '涵著称',
-'涵著称' => '涵著称',
-'涵著者' => '涵著者',
-'涵著述' => '涵著述',
-'渴著' => '渴着',
-'渴著书' => '渴著书',
-'渴著書' => '渴著书',
-'渴著作' => '渴著作',
-'渴著名' => '渴著名',
-'渴著录' => '渴著录',
-'渴著錄' => '渴著录',
-'渴著称' => '渴著称',
-'渴著稱' => '渴著称',
-'渴著者' => '渴著者',
-'渴著述' => '渴著述',
-'溢著' => '溢着',
-'溢著書' => '溢著书',
-'溢著书' => '溢著书',
-'溢著作' => '溢著作',
-'溢著名' => '溢著名',
-'溢著錄' => '溢著录',
-'溢著录' => '溢著录',
-'溢著称' => '溢著称',
-'溢著稱' => '溢著称',
-'溢著者' => '溢著者',
-'溢著述' => '溢著述',
-'演著' => '演着',
-'演著书' => '演著书',
-'演著書' => '演著书',
-'演著作' => '演著作',
-'演著名' => '演著名',
-'演著录' => '演著录',
-'演著錄' => '演著录',
-'演著稱' => '演著称',
-'演著称' => '演著称',
-'演著者' => '演著者',
-'演著述' => '演著述',
-'漫著' => '漫着',
-'漫著書' => '漫著书',
-'漫著书' => '漫著书',
-'漫著作' => '漫著作',
-'漫著名' => '漫著名',
-'漫著录' => '漫著录',
-'漫著錄' => '漫著录',
-'漫著称' => '漫著称',
-'漫著稱' => '漫著称',
-'漫著者' => '漫著者',
-'漫著述' => '漫著述',
-'點著' => '点着',
-'點著作' => '点著作',
-'點著名' => '点著名',
-'點著錄' => '点著录',
-'點著稱' => '点著称',
-'點著者' => '点著者',
-'點著述' => '点著述',
-'燒著' => '烧着',
-'燒著作' => '烧著作',
-'燒著名' => '烧著名',
-'燒著錄' => '烧著录',
-'燒著稱' => '烧著称',
-'燒著者' => '烧著者',
-'燒著述' => '烧著述',
-'照著' => '照着',
-'照著书' => '照著书',
-'照著書' => '照著书',
-'照著作' => '照著作',
-'照著名' => '照著名',
-'照著录' => '照著录',
-'照著錄' => '照著录',
-'照著称' => '照著称',
-'照著稱' => '照著称',
-'照著者' => '照著者',
-'照著述' => '照著述',
-'愛護著' => '爱护着',
-'愛著' => '爱着',
-'愛著書' => '爱著书',
-'愛著作' => '爱著作',
-'愛著名' => '爱著名',
-'愛著錄' => '爱著录',
-'愛著稱' => '爱著称',
-'愛著者' => '爱著者',
-'愛著述' => '爱著述',
-'牽著' => '牵着',
-'牽著書' => '牵著书',
-'牽著作' => '牵著作',
-'牽著名' => '牵著名',
-'牽著錄' => '牵著录',
-'牽著稱' => '牵著称',
-'牽著者' => '牵著者',
-'牽著述' => '牵著述',
-'犯不著' => '犯不着',
-'犯得著' => '犯得着',
-'獨著' => '独着',
-'獨著書' => '独著书',
-'獨著作' => '独著作',
-'獨著名' => '独著名',
-'獨著錄' => '独著录',
-'獨著稱' => '独著称',
-'獨著者' => '独著者',
-'獨著述' => '独著述',
-'猜著' => '猜着',
-'猜著書' => '猜着书',
-'猜著作' => '猜著作',
-'猜著名' => '猜著名',
-'猜著錄' => '猜著录',
-'猜著录' => '猜著录',
-'猜著称' => '猜著称',
-'猜著稱' => '猜著称',
-'猜著者' => '猜著者',
-'猜著述' => '猜著述',
+'洪鍾' => '洪钟',
+'瀋液' => '渖液',
+'點鍾' => '点钟',
+'薰習' => '熏习',
+'薰心' => '熏心',
+'薰沐' => '熏沐',
+'薰陶' => '熏陶',
+'薰香' => '熏香',
+'爨翫' => '爨翫',
+'獨鍾' => '独钟',
 '王道乾' => '王道乾',
-'玩著' => '玩着',
-'甜著' => '甜着',
-'甜著書' => '甜著书',
-'甜著书' => '甜著书',
-'甜著作' => '甜著作',
-'甜著名' => '甜著名',
-'甜著录' => '甜著录',
-'甜著錄' => '甜著录',
-'甜著稱' => '甜著称',
-'甜著称' => '甜著称',
-'甜著者' => '甜著者',
-'甜著述' => '甜著述',
-'用不著' => '用不着',
-'用得著' => '用得着',
-'用著' => '用着',
-'用著书' => '用著书',
-'用著書' => '用著书',
-'用著作' => '用著作',
-'用著名' => '用著名',
-'用著录' => '用著录',
-'用著錄' => '用著录',
-'用著称' => '用著称',
-'用著稱' => '用著称',
-'用著者' => '用著者',
-'用著述' => '用著述',
+'王餘魚' => '王馀鱼',
+'甚夥' => '甚夥',
+'生物鍾' => '生物钟',
+'電鍾' => '电钟',
+'男為乾' => '男为乾',
 '男为乾' => '男为乾',
 '男爲乾' => '男为乾',
-'男為乾' => '男为乾',
-'男性為乾' => '男性为乾',
 '男性爲乾' => '男性为乾',
+'男性為乾' => '男性为乾',
 '男性为乾' => '男性为乾',
-'留著' => '留着',
-'留著書' => '留着书',
-'留著作' => '留著作',
-'留著名' => '留著名',
-'留著錄' => '留著录',
-'留著录' => '留著录',
-'留著稱' => '留著称',
-'留著称' => '留著称',
-'留著者' => '留著者',
-'留著述' => '留著述',
-'疑著' => '疑着',
-'疑著书' => '疑著书',
-'疑著書' => '疑著书',
-'疑著作' => '疑著作',
-'疑著名' => '疑著名',
-'疑著录' => '疑著录',
-'疑著錄' => '疑著录',
-'疑著称' => '疑著称',
-'疑著稱' => '疑著称',
-'疑著者' => '疑著者',
-'疑著述' => '疑著述',
-'癥瘕' => '癥瘕',
-'皺著' => '皱着',
-'皺著書' => '皱著书',
-'皺著作' => '皱著作',
-'皺著名' => '皱著名',
-'皺著錄' => '皱著录',
-'皺著稱' => '皱著称',
-'皺著者' => '皱著者',
-'皺著述' => '皱著述',
-'盛著' => '盛着',
-'盛著书' => '盛著书',
-'盛著書' => '盛著书',
-'盛著作' => '盛著作',
-'盛著名' => '盛著名',
-'盛著錄' => '盛著录',
-'盛著录' => '盛著录',
-'盛著稱' => '盛著称',
-'盛著称' => '盛著称',
-'盛著者' => '盛著者',
-'盛著述' => '盛著述',
-'盯著' => '盯着',
-'盯著書' => '盯着书',
-'盯著作' => '盯著作',
-'盯著名' => '盯著名',
-'盯著錄' => '盯著录',
-'盯著录' => '盯著录',
-'盯著稱' => '盯著称',
-'盯著称' => '盯著称',
-'盯著者' => '盯著者',
-'盯著述' => '盯著述',
-'盾著' => '盾着',
-'盾著書' => '盾著书',
-'盾著书' => '盾著书',
-'盾著作' => '盾著作',
-'盾著名' => '盾著名',
-'盾著錄' => '盾著录',
-'盾著录' => '盾著录',
-'盾著稱' => '盾著称',
-'盾著称' => '盾著称',
-'盾著者' => '盾著者',
-'盾著述' => '盾著述',
-'看不著' => '看不着',
-'看得著' => '看得着',
-'看著' => '看着',
-'看著書' => '看着书',
-'看著作' => '看著作',
-'看著名' => '看著名',
-'看著录' => '看著录',
-'看著錄' => '看著录',
-'看著稱' => '看著称',
-'看著称' => '看著称',
-'看著者' => '看著者',
-'看著述' => '看著述',
-'著業' => '着业',
-'著絲' => '着丝',
-'著么' => '着么',
-'著人' => '着人',
-'著什么急' => '着什么急',
-'著他' => '着他',
-'著令' => '着令',
-'著位' => '着位',
-'著體' => '着体',
-'著你' => '着你',
-'著便' => '着便',
-'著涼' => '着凉',
-'著力' => '着力',
-'著勁' => '着劲',
-'著號' => '着号',
-'著呢' => '着呢',
-'著哩' => '着哩',
-'著地' => '着地',
-'著墨' => '着墨',
-'著聲' => '着声',
-'著處' => '着处',
-'著她' => '着她',
-'著妳' => '着妳',
-'著姓' => '着姓',
-'著它' => '着它',
-'著定' => '着定',
-'著實' => '着实',
-'著己' => '着己',
-'著帳' => '着帐',
-'著床' => '着床',
-'著庸' => '着庸',
-'著式' => '着式',
-'著錄' => '着录',
-'著心' => '着心',
-'著志' => '着志',
-'著忙' => '着忙',
-'著急' => '着急',
-'著惱' => '着恼',
-'著驚' => '着惊',
-'著想' => '着想',
-'著意' => '着意',
-'著慌' => '着慌',
-'著我' => '着我',
-'著手' => '着手',
-'著抹' => '着抹',
-'著摸' => '着摸',
-'著撰' => '着撰',
-'著數' => '着数',
-'著明' => '着明',
-'著末' => '着末',
-'著極' => '着极',
-'著格' => '着格',
-'著棋' => '着棋',
-'著槁' => '着槁',
-'著氣' => '着气',
-'著法' => '着法',
-'著淺' => '着浅',
-'著火' => '着火',
-'著然' => '着然',
-'著甚' => '着甚',
-'著生' => '着生',
-'著疑' => '着疑',
-'著白' => '着白',
-'著相' => '着相',
-'著眼' => '着眼',
-'著著' => '着着',
-'著祂' => '着祂',
-'著積' => '着积',
-'著稿' => '着稿',
-'著筆' => '着笔',
-'著籍' => '着籍',
-'著緊' => '着紧',
-'著緑' => '着緑',
-'著絆' => '着绊',
-'著績' => '着绩',
-'著緋' => '着绯',
-'著綠' => '着绿',
-'著肉' => '着肉',
-'著腳' => '着脚',
-'著艦' => '着舰',
-'著色' => '着色',
-'著節' => '着节',
-'著花' => '着花',
-'著莫' => '着莫',
-'著落' => '着落',
-'著藁' => '着藁',
-'著衣' => '着衣',
-'著裝' => '着装',
-'著要' => '着要',
-'著警' => '着警',
-'著趣' => '着趣',
-'著邊' => '着边',
-'著迷' => '着迷',
-'著跡' => '着迹',
-'著重' => '着重',
-'著録' => '着録',
-'著聞' => '着闻',
-'著陸' => '着陆',
-'著雝' => '着雝',
-'著鞭' => '着鞭',
-'著題' => '着题',
-'著魔' => '着魔',
-'睡不著' => '睡不着',
-'睡得著' => '睡得着',
-'睡著' => '睡着',
-'睡著書' => '睡著书',
-'睡著书' => '睡著书',
-'睡著作' => '睡著作',
-'睡著名' => '睡著名',
-'睡著錄' => '睡著录',
-'睡著录' => '睡著录',
-'睡著称' => '睡著称',
-'睡著稱' => '睡著称',
-'睡著者' => '睡著者',
-'睡著述' => '睡著述',
+'療效顯著' => '疗效显著',
+'白瀋' => '白渖',
+'皁保' => '皁保',
+'目劄' => '目劄',
+'直昇' => '直升',
 '睹微知著' => '睹微知著',
-'睪丸' => '睾丸',
-'瞞著' => '瞒着',
-'瞞著書' => '瞒著书',
-'瞞著作' => '瞒著作',
-'瞞著名' => '瞒著名',
-'瞞著錄' => '瞒著录',
-'瞞著稱' => '瞒著称',
-'瞞著者' => '瞒著者',
-'瞞著述' => '瞒著述',
-'瞧著' => '瞧着',
-'瞧著書' => '瞧着书',
-'瞧著作' => '瞧著作',
-'瞧著名' => '瞧著名',
-'瞧著录' => '瞧著录',
-'瞧著錄' => '瞧著录',
-'瞧著称' => '瞧著称',
-'瞧著稱' => '瞧著称',
-'瞧著者' => '瞧著者',
-'瞧著述' => '瞧著述',
-'瞪著' => '瞪着',
-'瞪著書' => '瞪著书',
-'瞪著书' => '瞪著书',
-'瞪著作' => '瞪著作',
-'瞪著名' => '瞪著名',
-'瞪著錄' => '瞪著录',
-'瞪著录' => '瞪著录',
-'瞪著称' => '瞪著称',
-'瞪著稱' => '瞪著称',
-'瞪著者' => '瞪著者',
-'瞪著述' => '瞪著述',
+'瞭臺' => '瞭台',
+'瞭台' => '瞭台',
 '瞭望' => '瞭望',
-'石碁镇' => '石碁镇',
+'矇眬' => '矇眬',
+'矇矓' => '矇眬',
+'石碁' => '石碁',
 '石碁鎮' => '石碁镇',
-'福著' => '福着',
-'福著书' => '福著书',
-'福著書' => '福著书',
-'福著作' => '福著作',
-'福著名' => '福著名',
-'福著錄' => '福著录',
-'福著录' => '福著录',
-'福著稱' => '福著称',
-'福著称' => '福著称',
-'福著者' => '福著者',
-'福著述' => '福著述',
+'石英鍾' => '石英钟',
+'石鍾乳' => '石钟乳',
+'鹼菜' => '硷菜',
+'碁聖' => '碁圣',
+'碁圣' => '碁圣',
+'碁所' => '碁所',
+'祕宜' => '祕宜',
+'秒鍾' => '秒钟',
 '穀梁' => '穀梁',
-'空著' => '空着',
-'空著书' => '空著书',
-'空著書' => '空著书',
-'空著作' => '空著作',
-'空著名' => '空著名',
-'空著录' => '空著录',
-'空著錄' => '空著录',
-'空著称' => '空著称',
-'空著稱' => '空著称',
-'空著者' => '空著者',
-'空著述' => '空著述',
-'穿著' => '穿着',
-'穿著书' => '穿著书',
-'穿著書' => '穿著书',
-'穿著作' => '穿著作',
-'穿著名' => '穿著名',
-'穿著录' => '穿著录',
-'穿著錄' => '穿著录',
-'穿著称' => '穿著称',
-'穿著稱' => '穿著称',
-'穿著者' => '穿著者',
-'穿著述' => '穿著述',
-'豎著' => '竖着',
-'豎著書' => '竖著书',
-'豎著作' => '竖著作',
-'豎著名' => '竖著名',
-'豎著錄' => '竖著录',
-'豎著稱' => '竖著称',
-'豎著者' => '竖著者',
-'豎著述' => '竖著述',
-'站著' => '站着',
-'站著书' => '站著书',
-'站著書' => '站著书',
-'站著作' => '站著作',
-'站著名' => '站著名',
-'站著錄' => '站著录',
-'站著录' => '站著录',
-'站著称' => '站著称',
-'站著稱' => '站著称',
-'站著者' => '站著者',
-'站著述' => '站著述',
-'笑著' => '笑着',
-'笑著书' => '笑著书',
-'笑著書' => '笑著书',
-'笑著作' => '笑著作',
-'笑著名' => '笑著名',
-'笑著录' => '笑著录',
-'笑著錄' => '笑著录',
-'笑著称' => '笑著称',
-'笑著稱' => '笑著称',
-'笑著者' => '笑著者',
-'笑著述' => '笑著述',
+'穿著者' => '穿着者',
+'竹昇' => '竹升',
 '答覆' => '答复',
-'管著' => '管着',
-'管著书' => '管著书',
-'管著書' => '管著书',
-'管著作' => '管著作',
-'管著名' => '管著名',
-'管著录' => '管著录',
-'管著錄' => '管著录',
-'管著稱' => '管著称',
-'管著称' => '管著称',
-'管著者' => '管著者',
-'管著述' => '管著述',
-'米澤瑠美' => '米泽瑠美',
 '米泽瑠美' => '米泽瑠美',
-'綁著' => '绑着',
-'綁著書' => '绑著书',
-'綁著作' => '绑著作',
-'綁著名' => '绑著名',
-'綁著錄' => '绑著录',
-'綁著稱' => '绑著称',
-'綁著者' => '绑著者',
-'綁著述' => '绑著述',
-'繞著' => '绕着',
-'繞著書' => '绕著书',
-'繞著作' => '绕著作',
-'繞著名' => '绕著名',
-'繞著錄' => '绕著录',
-'繞著稱' => '绕著称',
-'繞著者' => '绕著者',
-'繞著述' => '绕著述',
-'綳著勁' => '绷着劲',
-'綳著臉' => '绷着脸',
+'米瀋' => '米渖',
+'餬口' => '糊口',
+'繙㠾' => '繙㠾',
+'線國安' => '缐国安',
+'線姓' => '缐姓',
 '編著' => '编著',
-'纏著' => '缠着',
-'纏著書' => '缠著书',
-'纏著作' => '缠著作',
-'纏著名' => '缠著名',
-'纏著錄' => '缠著录',
-'纏著稱' => '缠著称',
-'纏著者' => '缠著者',
-'纏著述' => '缠著述',
-'罩著' => '罩着',
-'罩著书' => '罩著书',
-'罩著書' => '罩著书',
-'罩著作' => '罩著作',
-'罩著名' => '罩著名',
-'罩著錄' => '罩著录',
-'罩著录' => '罩著录',
-'罩著称' => '罩著称',
-'罩著稱' => '罩著称',
-'罩著者' => '罩著者',
-'罩著述' => '罩著述',
-'美著' => '美着',
-'美著书' => '美著书',
-'美著書' => '美著书',
-'美著作' => '美著作',
-'美著名' => '美著名',
-'美著录' => '美著录',
-'美著錄' => '美著录',
-'美著稱' => '美著称',
-'美著称' => '美著称',
-'美著者' => '美著者',
-'美著述' => '美著述',
-'耀著' => '耀着',
-'耀著書' => '耀著书',
-'耀著书' => '耀著书',
-'耀著作' => '耀著作',
-'耀著名' => '耀著名',
-'耀著錄' => '耀著录',
-'耀著录' => '耀著录',
-'耀著称' => '耀著称',
-'耀著稱' => '耀著称',
-'耀著者' => '耀著者',
-'耀著述' => '耀著述',
-'老幺' => '老幺',
-'考著' => '考着',
-'考著書' => '考著书',
-'考著书' => '考著书',
-'考著作' => '考著作',
-'考著名' => '考著名',
-'考著錄' => '考著录',
-'考著录' => '考著录',
-'考著稱' => '考著称',
-'考著称' => '考著称',
-'考著者' => '考著者',
-'考著述' => '考著述',
+'編鍾' => '编钟',
 '肉乾乾' => '肉干干',
 '肘手鍊足' => '肘手链足',
-'背著' => '背着',
-'背著书' => '背著书',
-'背著書' => '背著书',
-'背著作' => '背著作',
-'背著名' => '背著名',
-'背著录' => '背著录',
-'背著錄' => '背著录',
-'背著称' => '背著称',
-'背著稱' => '背著称',
-'背著者' => '背著者',
-'背著述' => '背著述',
-'膠著' => '胶着',
-'膠著書' => '胶著书',
-'膠著作' => '胶著作',
-'膠著名' => '胶著名',
-'膠著錄' => '胶著录',
-'膠著稱' => '胶著称',
-'膠著者' => '胶著者',
-'膠著述' => '胶著述',
-'藝著' => '艺着',
-'藝著書' => '艺著书',
-'藝著作' => '艺著作',
-'藝著名' => '艺著名',
-'藝著錄' => '艺著录',
-'藝著稱' => '艺著称',
-'藝著者' => '艺著者',
-'藝著述' => '艺著述',
-'苦著' => '苦着',
-'苦著书' => '苦著书',
-'苦著書' => '苦著书',
-'苦著作' => '苦著作',
-'苦著名' => '苦著名',
-'苦著录' => '苦著录',
-'苦著錄' => '苦著录',
-'苦著稱' => '苦著称',
-'苦著称' => '苦著称',
-'苦著者' => '苦著者',
-'苦著述' => '苦著述',
+'甦醒' => '苏醒',
 '苧烯' => '苧烯',
 '薴烯' => '苧烯',
-'獲著' => '获着',
-'獲著書' => '获著书',
-'獲著作' => '获著作',
-'獲著名' => '获著名',
-'獲著錄' => '获著录',
-'獲著稱' => '获著称',
-'獲著者' => '获著者',
-'獲著述' => '获著述',
-'蕭乾' => '萧乾',
+'蘋果' => '苹果',
+'荠苧' => '荠苧',
+'榮陞' => '荣升',
 '萧乾' => '萧乾',
-'落著' => '落着',
-'落著书' => '落著书',
-'落著書' => '落著书',
-'落著作' => '落著作',
-'落著名' => '落著名',
-'落著录' => '落著录',
-'落著錄' => '落著录',
-'落著稱' => '落著称',
-'落著称' => '落著称',
-'落著者' => '落著者',
-'落著述' => '落著述',
+'蕭乾' => '萧乾',
 '著書' => '著书',
 '著書立說' => '著书立说',
 '著作' => '著作',
 '著名' => '著名',
+'著錄' => '著录',
 '著錄規則' => '著录规则',
 '著文' => '著文',
 '著有' => '著有',
@@ -15482,3604 +13723,6591 @@ $zh2Hans = array(
 '著者' => '著者',
 '著身' => '著身',
 '著述' => '著述',
-'蒙汗葯' => '蒙汗药',
-'蒙著' => '蒙着',
-'蒙葯' => '蒙药',
-'蒙著書' => '蒙著书',
-'蒙著书' => '蒙著书',
-'蒙著作' => '蒙著作',
-'蒙著名' => '蒙著名',
-'蒙著录' => '蒙著录',
-'蒙著錄' => '蒙著录',
-'蒙著稱' => '蒙著称',
-'蒙著称' => '蒙著称',
-'蒙著者' => '蒙著者',
-'蒙著述' => '蒙著述',
-'藏著' => '藏着',
-'藏著書' => '藏著书',
-'藏著书' => '藏著书',
-'藏著作' => '藏著作',
-'藏著名' => '藏著名',
-'藏著錄' => '藏著录',
-'藏著录' => '藏著录',
-'藏著称' => '藏著称',
-'藏著稱' => '藏著称',
-'藏著者' => '藏著者',
-'藏著述' => '藏著述',
-'蘸著' => '蘸着',
-'蘸著書' => '蘸著书',
-'蘸著书' => '蘸著书',
-'蘸著作' => '蘸著作',
-'蘸著名' => '蘸著名',
-'蘸著录' => '蘸著录',
-'蘸著錄' => '蘸著录',
-'蘸著稱' => '蘸著称',
-'蘸著称' => '蘸著称',
-'蘸著者' => '蘸著者',
-'蘸著述' => '蘸著述',
-'行著' => '行着',
-'行著书' => '行著书',
-'行著書' => '行著书',
-'行著作' => '行著作',
-'行著名' => '行著名',
-'行著录' => '行著录',
-'行著錄' => '行著录',
-'行著稱' => '行著称',
-'行著称' => '行著称',
-'行著者' => '行著者',
-'行著述' => '行著述',
-'衣著' => '衣着',
-'衣著书' => '衣著书',
-'衣著書' => '衣著书',
-'衣著作' => '衣著作',
-'衣著名' => '衣著名',
-'衣著录' => '衣著录',
-'衣著錄' => '衣著录',
-'衣著稱' => '衣著称',
-'衣著称' => '衣著称',
-'衣著者' => '衣著者',
-'衣著述' => '衣著述',
-'裝著' => '装着',
-'裝著書' => '装著书',
-'裝著作' => '装著作',
-'裝著名' => '装著名',
-'裝著錄' => '装著录',
-'裝著稱' => '装著称',
-'裝著者' => '装著者',
-'裝著述' => '装著述',
-'裹著' => '裹着',
-'裹著書' => '裹著书',
-'裹著书' => '裹著书',
-'裹著作' => '裹著作',
-'裹著名' => '裹著名',
-'裹著录' => '裹著录',
-'裹著錄' => '裹著录',
-'裹著称' => '裹著称',
-'裹著稱' => '裹著称',
-'裹著者' => '裹著者',
-'裹著述' => '裹著述',
 '覆蓋' => '覆蓋',
 '見微知著' => '见微知著',
-'見著' => '见着',
-'見著書' => '见著书',
-'見著作' => '见著作',
-'見著名' => '见著名',
-'見著錄' => '见著录',
-'見著稱' => '见著称',
-'見著者' => '见著者',
-'見著述' => '见著述',
+'見著' => '见著',
 '視微知著' => '视微知著',
 '言幾析理' => '言幾析理',
-'警戒著' => '警戒着',
-'記著' => '记着',
-'記著書' => '记著书',
-'記著作' => '记著作',
-'記著名' => '记著名',
-'記著錄' => '记著录',
-'記著稱' => '记著称',
-'記著者' => '记著者',
-'記著述' => '记著述',
+'諲譔' => '諲譔',
+'警鍾' => '警钟',
+'譩譆' => '譩譆',
 '論著' => '论著',
 '譯著' => '译著',
-'試著' => '试着',
-'試著書' => '试著书',
-'試著作' => '试著作',
-'試著名' => '试著名',
-'試著錄' => '试著录',
-'試著稱' => '试著称',
-'試著者' => '试著者',
-'試著述' => '试著述',
-'語著' => '语着',
-'語著書' => '语著书',
-'語著作' => '语著作',
-'語著名' => '语著名',
-'語著錄' => '语著录',
-'語著稱' => '语著称',
-'語著者' => '语著者',
-'語著述' => '语著述',
-'豫著' => '豫着',
-'豫著书' => '豫著书',
-'豫著書' => '豫著书',
-'豫著作' => '豫著作',
-'豫著名' => '豫著名',
-'豫著录' => '豫著录',
-'豫著錄' => '豫著录',
-'豫著称' => '豫著称',
-'豫著稱' => '豫著称',
-'豫著者' => '豫著者',
-'豫著述' => '豫著述',
-'貞著' => '贞着',
-'貞著書' => '贞著书',
-'貞著作' => '贞著作',
-'貞著名' => '贞著名',
-'貞著錄' => '贞著录',
-'貞著稱' => '贞著称',
-'貞著者' => '贞著者',
-'貞著述' => '贞著述',
-'走著' => '走着',
-'走著書' => '走著书',
-'走著书' => '走著书',
-'走著作' => '走著作',
-'走著名' => '走著名',
-'走著錄' => '走著录',
-'走著录' => '走著录',
-'走著稱' => '走著称',
-'走著称' => '走著称',
-'走著者' => '走著者',
-'走著述' => '走著述',
-'趕著' => '赶着',
-'趕著書' => '赶著书',
-'趕著作' => '赶著作',
-'趕著名' => '赶著名',
-'趕著錄' => '赶著录',
-'趕著稱' => '赶著称',
-'趕著者' => '赶著者',
-'趕著述' => '赶著述',
-'趴著' => '趴着',
-'趴著書' => '趴著书',
-'趴著书' => '趴著书',
-'趴著作' => '趴著作',
-'趴著名' => '趴著名',
-'趴著录' => '趴著录',
-'趴著錄' => '趴著录',
-'趴著称' => '趴著称',
-'趴著稱' => '趴著称',
-'趴著者' => '趴著者',
-'趴著述' => '趴著述',
-'躍著' => '跃着',
-'躍著書' => '跃著书',
-'躍著作' => '跃著作',
-'躍著名' => '跃著名',
-'躍著錄' => '跃著录',
-'躍著稱' => '跃著称',
-'躍著者' => '跃著者',
-'躍著述' => '跃著述',
-'跑著' => '跑着',
-'跑著書' => '跑著书',
-'跑著书' => '跑著书',
-'跑著作' => '跑著作',
-'跑著名' => '跑著名',
-'跑著录' => '跑著录',
-'跑著錄' => '跑著录',
-'跑著稱' => '跑著称',
-'跑著称' => '跑著称',
-'跑著者' => '跑著者',
-'跑著述' => '跑著述',
-'跟著' => '跟着',
-'跟著书' => '跟著书',
-'跟著書' => '跟著书',
-'跟著作' => '跟著作',
-'跟著名' => '跟著名',
-'跟著录' => '跟著录',
-'跟著錄' => '跟著录',
-'跟著称' => '跟著称',
-'跟著稱' => '跟著称',
-'跟著者' => '跟著者',
-'跟著述' => '跟著述',
-'跪著' => '跪着',
-'跪著書' => '跪著书',
-'跪著书' => '跪著书',
-'跪著作' => '跪著作',
-'跪著名' => '跪著名',
-'跪著錄' => '跪著录',
-'跪著录' => '跪著录',
-'跪著稱' => '跪著称',
-'跪著称' => '跪著称',
-'跪著者' => '跪著者',
-'跪著述' => '跪著述',
-'跳著' => '跳着',
-'跳著书' => '跳著书',
-'跳著書' => '跳著书',
-'跳著作' => '跳著作',
-'跳著名' => '跳著名',
-'跳著录' => '跳著录',
-'跳著錄' => '跳著录',
-'跳著称' => '跳著称',
-'跳著稱' => '跳著称',
-'跳著者' => '跳著者',
-'跳著述' => '跳著述',
+'謝肇淛' => '谢肇淛',
+'象乾' => '象乾',
 '躊躇滿志' => '踌躇滿志',
-'踏著' => '踏着',
-'踏著書' => '踏著书',
-'踏著书' => '踏著书',
-'踏著作' => '踏著作',
-'踏著名' => '踏著名',
-'踏著錄' => '踏著录',
-'踏著录' => '踏著录',
-'踏著称' => '踏著称',
-'踏著稱' => '踏著称',
-'踏著者' => '踏著者',
-'踏著述' => '踏著述',
-'踩著' => '踩着',
-'踩著书' => '踩著书',
-'踩著書' => '踩著书',
-'踩著作' => '踩著作',
-'踩著名' => '踩著名',
-'踩著录' => '踩著录',
-'踩著錄' => '踩著录',
-'踩著稱' => '踩著称',
-'踩著称' => '踩著称',
-'踩著者' => '踩著者',
-'踩著述' => '踩著述',
-'身著' => '身着',
-'身著书' => '身著书',
-'身著書' => '身著书',
-'身著作' => '身著作',
-'身著名' => '身著名',
-'身著录' => '身著录',
-'身著錄' => '身著录',
-'身著稱' => '身著称',
-'身著称' => '身著称',
-'身著者' => '身著者',
-'身著述' => '身著述',
-'躺著' => '躺着',
-'躺著書' => '躺著书',
-'躺著书' => '躺著书',
-'躺著作' => '躺著作',
-'躺著名' => '躺著名',
-'躺著錄' => '躺著录',
-'躺著录' => '躺著录',
-'躺著称' => '躺著称',
-'躺著稱' => '躺著称',
-'躺著者' => '躺著者',
-'躺著述' => '躺著述',
-'轉著' => '转着',
-'轉著書' => '转著书',
-'轉著作' => '转著作',
-'轉著名' => '转著名',
-'轉著錄' => '转著录',
-'轉著稱' => '转著称',
-'轉著者' => '转著者',
-'轉著述' => '转著述',
-'載著' => '载着',
-'載著書' => '载著书',
-'載著作' => '载著作',
-'載著名' => '载著名',
-'載著錄' => '载著录',
-'載著稱' => '载著称',
-'載著者' => '载著者',
-'載著述' => '载著述',
 '較著' => '较著',
-'達著' => '达着',
-'達著書' => '达著书',
-'達著作' => '达著作',
-'達著名' => '达著名',
-'達著錄' => '达著录',
-'達著稱' => '达著称',
-'達著者' => '达著者',
-'達著述' => '达著述',
 '近角聪信' => '近角聪信',
-'近角聰信' => '近角聪信',
 '这么' => '这么',
-'遠著' => '远着',
-'遠著書' => '远著书',
-'遠著作' => '远著作',
-'遠著名' => '远著名',
-'遠著錄' => '远著录',
-'遠著稱' => '远著称',
-'遠著者' => '远著者',
-'遠著述' => '远著述',
-'連著' => '连着',
-'連著書' => '连著书',
-'連著作' => '连著作',
-'連著名' => '连著名',
-'連著錄' => '连著录',
-'連著稱' => '连著称',
-'連著者' => '连著者',
-'連著述' => '连著述',
-'迫著' => '迫着',
-'追著' => '追着',
-'追著書' => '追著书',
-'追著书' => '追著书',
-'追著作' => '追著作',
-'追著名' => '追著名',
-'追著錄' => '追著录',
-'追著录' => '追著录',
-'追著称' => '追著称',
-'追著稱' => '追著称',
-'追著者' => '追著者',
-'追著述' => '追著述',
-'逆著' => '逆着',
-'逆著書' => '逆著书',
-'逆著书' => '逆著书',
-'逆著作' => '逆著作',
-'逆著名' => '逆著名',
-'逆著錄' => '逆著录',
-'逆著录' => '逆著录',
-'逆著称' => '逆著称',
-'逆著稱' => '逆著称',
-'逆著者' => '逆著者',
-'逆著述' => '逆著述',
-'逼著' => '逼着',
-'逼著書' => '逼著书',
-'逼著书' => '逼著书',
-'逼著作' => '逼著作',
-'逼著名' => '逼著名',
-'逼著錄' => '逼著录',
-'逼著录' => '逼著录',
-'逼著称' => '逼著称',
-'逼著稱' => '逼著称',
-'逼著者' => '逼著者',
-'逼著述' => '逼著述',
-'遇著' => '遇着',
-'遇著書' => '遇著书',
-'遇著书' => '遇著书',
-'遇著作' => '遇著作',
-'遇著名' => '遇著名',
-'遇著錄' => '遇著录',
-'遇著录' => '遇著录',
-'遇著稱' => '遇著称',
-'遇著称' => '遇著称',
-'遇著者' => '遇著者',
-'遇著述' => '遇著述',
+'進化鍾' => '进化钟',
+'造麴' => '造曲',
 '遺著' => '遗著',
 '那麽' => '那麽',
 '郭子乾' => '郭子乾',
-'配著' => '配着',
-'配著書' => '配著书',
-'配著书' => '配著书',
-'配著作' => '配著作',
-'配著名' => '配著名',
-'配著錄' => '配著录',
-'配著录' => '配著录',
-'配著稱' => '配著称',
-'配著称' => '配著称',
-'配著者' => '配著者',
-'配著述' => '配著述',
-'釀著' => '酿着',
-'釀著書' => '酿著书',
-'釀著作' => '酿著作',
-'釀著名' => '酿著名',
-'釀著錄' => '酿著录',
-'釀著稱' => '酿著称',
-'釀著者' => '酿著者',
-'釀著述' => '酿著述',
-'醯壺' => '醯壶',
+'郭行餘' => '郭行馀',
+'酒麴' => '酒曲',
+'醉瀋' => '醉渖',
 '醯壶' => '醯壶',
-'醯醬' => '醯酱',
+'醯壺' => '醯壶',
 '醯酱' => '醯酱',
+'醯醬' => '醯酱',
 '醯醋' => '醯醋',
 '醯醢' => '醯醢',
 '醯鸡' => '醯鸡',
 '醯雞' => '醯鸡',
 '重覆' => '重复',
+'金尚鍾' => '金尚钟',
+'金民鍾' => '金民钟',
+'金鍾' => '金钟',
 '金鍊' => '金链',
+'鍾麗緹' => '钟丽缇',
+'鍾乳石' => '钟乳石',
+'鍾儀奏楚' => '钟仪奏楚',
+'鍾關' => '钟关',
+'鍾聲' => '钟声',
+'鍾頭' => '钟头',
+'鍾山' => '钟山',
+'鍾差' => '钟差',
+'鍾座' => '钟座',
+'鍾情' => '钟情',
+'鍾意' => '钟意',
+'鍾慧冰' => '钟慧冰',
+'鍾擺' => '钟摆',
+'鍾架' => '钟架',
+'鍾楚紅' => '钟楚红',
+'鍾樓' => '钟楼',
+'鍾漢良' => '钟汉良',
+'鍾汶' => '钟汶',
+'鍾淑慧' => '钟淑慧',
+'鍾靈' => '钟灵',
+'鍾點' => '钟点',
+'鍾愛' => '钟爱',
+'鍾琴' => '钟琴',
+'鍾相' => '钟相',
+'鍾祥' => '钟祥',
+'鍾離' => '钟离',
+'鍾表' => '钟表',
+'鍾鎮濤' => '钟镇涛',
+'鍾面' => '钟面',
+'鍾馗' => '钟馗',
+'鍾鳴漏盡' => '钟鸣漏尽',
+'鍾鳴鼎食' => '钟鸣鼎食',
+'鍾鼓' => '钟鼓',
 '鐵鍊' => '铁链',
 '鉸鍊' => '铰链',
 '銀鍊' => '银链',
-'鋪著' => '铺着',
-'鋪著書' => '铺著书',
-'鋪著作' => '铺著作',
-'鋪著名' => '铺著名',
-'鋪著錄' => '铺著录',
-'鋪著稱' => '铺著称',
-'鋪著者' => '铺著者',
-'鋪著述' => '铺著述',
 '鍊子' => '链子',
 '鍊條' => '链条',
+'鍊表' => '链表',
 '鍊鎖' => '链锁',
 '鍊錘' => '链锤',
 '鎖鍊' => '锁链',
-'鍾鍛' => '锺锻',
-'鍛鍾' => '锻锺',
 '閻懷禮' => '闫怀礼',
-'閉著' => '闭着',
-'閉著書' => '闭著书',
-'閉著作' => '闭著作',
-'閉著名' => '闭著名',
-'閉著錄' => '闭著录',
-'閉著稱' => '闭著称',
-'閉著者' => '闭著者',
-'閉著述' => '闭著述',
-'閑著' => '闲着',
-'閑著書' => '闲著书',
-'閑著作' => '闲著作',
-'閑著名' => '闲著名',
-'閑著錄' => '闲著录',
-'閑著稱' => '闲著称',
-'閑著者' => '闲著者',
-'閑著述' => '闲著述',
-'聞不著' => '闻不着',
-'聞得著' => '闻得着',
-'聞著' => '闻着',
+'鬧鍾' => '闹钟',
+'陽為乾' => '阳为乾',
 '阳为乾' => '阳为乾',
 '陽爲乾' => '阳为乾',
-'陽為乾' => '阳为乾',
 '阿部正瞭' => '阿部正瞭',
-'附著' => '附着',
-'附睪' => '附睾',
-'附著书' => '附著书',
-'附著書' => '附著书',
-'附著作' => '附著作',
-'附著名' => '附著名',
-'附著錄' => '附著录',
-'附著录' => '附著录',
-'附著称' => '附著称',
-'附著稱' => '附著称',
-'附著者' => '附著者',
-'附著述' => '附著述',
+'陆徵祥' => '陆徵祥',
+'陸徵祥' => '陆徵祥',
 '陈乾生' => '陈乾生',
 '陳乾生' => '陈乾生',
+'陈元扞' => '陈元扞',
+'陳元扞' => '陈元扞',
 '陈公乾生' => '陈公乾生',
 '陳公乾生' => '陈公乾生',
-'陋著' => '陋着',
-'陋著書' => '陋著书',
-'陋著书' => '陋著书',
-'陋著作' => '陋著作',
-'陋著名' => '陋著名',
-'陋著錄' => '陋著录',
-'陋著录' => '陋著录',
-'陋著称' => '陋著称',
-'陋著稱' => '陋著称',
-'陋著者' => '陋著者',
-'陋著述' => '陋著述',
-'陪著' => '陪着',
-'陪著书' => '陪著书',
-'陪著書' => '陪著书',
-'陪著作' => '陪著作',
-'陪著名' => '陪著名',
-'陪著录' => '陪著录',
-'陪著錄' => '陪著录',
-'陪著称' => '陪著称',
-'陪著稱' => '陪著称',
-'陪著者' => '陪著者',
-'陪著述' => '陪著述',
+'陳遇乾' => '陈遇乾',
+'陈遇乾' => '陈遇乾',
 '陳堵' => '陳堵',
 '陳禕' => '陳禕',
-'隨著' => '随着',
-'隨著書' => '随著书',
-'隨著作' => '随著作',
-'隨著名' => '随著名',
-'隨著錄' => '随著录',
-'隨著稱' => '随著称',
-'隨著者' => '随著者',
-'隨著述' => '随著述',
-'隔著' => '隔着',
-'隔著书' => '隔著书',
-'隔著書' => '隔著书',
-'隔著作' => '隔著作',
-'隔著名' => '隔著名',
-'隔著录' => '隔著录',
-'隔著錄' => '隔著录',
-'隔著称' => '隔著称',
-'隔著稱' => '隔著称',
-'隔著者' => '隔著者',
-'隔著述' => '隔著述',
-'隱睪' => '隱睾',
-'雅著' => '雅着',
-'雅著书' => '雅著书',
-'雅著書' => '雅著书',
-'雅著作' => '雅著作',
-'雅著名' => '雅著名',
-'雅著录' => '雅著录',
-'雅著錄' => '雅著录',
-'雅著称' => '雅著称',
-'雅著稱' => '雅著称',
-'雅著者' => '雅著者',
-'雅著述' => '雅著述',
 '雍乾' => '雍乾',
-'靠著' => '靠着',
-'靠著作' => '靠著作',
-'靠著名' => '靠著名',
-'靠著錄' => '靠著录',
-'靠著录' => '靠著录',
-'靠著稱' => '靠著称',
-'靠著称' => '靠著称',
-'靠著者' => '靠著者',
-'靠著述' => '靠著述',
-'頂著' => '顶着',
-'頂著書' => '顶著书',
-'頂著作' => '顶著作',
-'頂著名' => '顶著名',
-'頂著錄' => '顶著录',
-'頂著稱' => '顶著称',
-'頂著者' => '顶著者',
-'頂著述' => '顶著述',
+'讎夷' => '雠夷',
+'讎定' => '雠定',
+'讎校' => '雠校',
+'讎問' => '雠问',
+'音聲如鍾' => '音声如钟',
 '項鍊' => '项链',
-'順著' => '顺着',
-'順著書' => '顺著书',
-'順著作' => '顺著作',
-'順著名' => '顺著名',
-'順著錄' => '顺著录',
-'順著稱' => '顺著称',
-'順著者' => '顺著者',
-'順著述' => '顺著述',
-'領著' => '领着',
-'領著書' => '领著书',
-'領著作' => '领著作',
-'領著名' => '领著名',
-'領著錄' => '领著录',
-'領著稱' => '领著称',
-'領著者' => '领著者',
-'領著述' => '领著述',
-'飄著' => '飘着',
-'飄著書' => '飘著书',
-'飄著作' => '飘著作',
-'飄著名' => '飘著名',
-'飄著錄' => '飘著录',
-'飄著稱' => '飘著称',
-'飄著者' => '飘著者',
-'飄著述' => '飘著述',
+'飛昇' => '飞升',
 '飭令' => '飭令',
-'駕著' => '驾着',
-'駕著書' => '驾著书',
-'駕著作' => '驾著作',
-'駕著名' => '驾著名',
-'駕著錄' => '驾著录',
-'駕著稱' => '驾著称',
-'駕著者' => '驾著者',
-'駕著述' => '驾著述',
-'罵著' => '骂着',
-'罵著書' => '骂著书',
-'罵著作' => '骂著作',
-'罵著名' => '骂著名',
-'罵著錄' => '骂著录',
-'罵著稱' => '骂著称',
-'罵著者' => '骂著者',
-'罵著述' => '骂著述',
-'騎著' => '骑着',
-'騎著書' => '骑著书',
-'騎著作' => '骑著作',
-'騎著名' => '骑著名',
-'騎著錄' => '骑著录',
-'騎著稱' => '骑著称',
-'騎著者' => '骑著者',
-'騎著述' => '骑著述',
-'騙著' => '骗着',
-'騙著書' => '骗著书',
-'騙著作' => '骗著作',
-'騙著名' => '骗著名',
-'騙著錄' => '骗著录',
-'騙著稱' => '骗著称',
-'騙著者' => '骗著者',
-'騙著述' => '骗著述',
-'高著' => '高着',
-'高著书' => '高著书',
-'高著書' => '高著书',
-'高著作' => '高著作',
-'高著名' => '高著名',
-'高著录' => '高著录',
-'高著錄' => '高著录',
-'高著稱' => '高著称',
-'高著称' => '高著称',
-'高著者' => '高著者',
-'高著述' => '高著述',
-'髭著' => '髭着',
-'髭著书' => '髭著书',
-'髭著書' => '髭著书',
-'髭著作' => '髭著作',
-'髭著名' => '髭著名',
-'髭著錄' => '髭著录',
-'髭著录' => '髭著录',
-'髭著称' => '髭著称',
-'髭著稱' => '髭著称',
-'髭著者' => '髭著者',
-'髭著述' => '髭著述',
+'餘年無多' => '馀年无多',
+'餘慶' => '馀庆',
+'餘瀋' => '馀渖',
+'馬德鍾' => '马德钟',
+'高昇' => '高升',
+'高陞' => '高升',
 '鬱姓' => '鬱姓',
 '鬱氏' => '鬱氏',
 '魏徵' => '魏徵',
 '魚乾乾' => '鱼干干',
-'麯崇裕' => '麯崇裕',
-'麴義' => '麴义',
-'麴义' => '麴义',
-'麴英' => '麴英',
+'鳴鍾' => '鸣钟',
 '麽氏' => '麽氏',
 '麽麽' => '麽麽',
 '麼麼' => '麽麽',
+'黃麴毒素' => '黄曲毒素',
 '黄润乾' => '黄润乾',
 '黃潤乾' => '黄润乾',
-'黏著' => '黏着',
-'黏著书' => '黏著书',
-'黏著書' => '黏著书',
-'黏著作' => '黏著作',
-'黏著名' => '黏著名',
-'黏著录' => '黏著录',
-'黏著錄' => '黏著录',
-'黏著称' => '黏著称',
-'黏著稱' => '黏著称',
-'黏著者' => '黏著者',
-'黏著述' => '黏著述',
+'黃鍾' => '黄钟',
+'龍鍾' => '龙钟',
+',陞' => ',升',
 );
 
 $zh2TW = array(
-'“' => '「',
-'”' => '」',
-'‘' => '『',
-'’' => '』',
-'三極管' => '三極體',
+'0杆' => '0桿',
+'1杆' => '1桿',
+'2杆' => '2桿',
+'3杆' => '3桿',
+'4杆' => '4桿',
+'5杆' => '5桿',
+'6杆' => '6桿',
+'7杆' => '7桿',
+'8杆' => '8桿',
+'9杆' => '9桿',
+'甲型肝炎' => 'A型肝炎',
+'甲肝' => 'A肝',
+'乙型肝炎' => 'B型肝炎',
+'乙肝' => 'B肝',
+'丙型肝炎' => 'C型肝炎',
+'丙肝' => 'C肝',
+'IP地址' => 'IP位址',
+'乔戈里峰' => 'K2',
+'·威爾士' => '·威爾士',
+'·威尔士' => '·威爾士',
+'一杆' => '一桿',
+'七杆' => '七桿',
+'三杆' => '三桿',
 '三极管' => '三極體',
-'世界裏' => '世界裡',
-'中文裏' => '中文裡',
-'串行' => '串列',
-'串列加速器' => '串列加速器',
+'三極管' => '三極體',
+'达累斯萨拉姆' => '三蘭港',
+'上落客' => '上下客',
+'落車' => '下車',
+'不來梅' => '不萊梅',
+'不来梅' => '不萊梅',
 '以太网' => '乙太網',
-'奶酪' => '乳酪',
-'二極管' => '二極體',
+'九杆' => '九桿',
+'了結他' => '了結他',
+'二手煙' => '二手菸',
+'二杆' => '二桿',
 '二极管' => '二極體',
-'交互式' => '互動式',
+'二極管' => '二極體',
+'交互设计' => '互動設計',
+'五杆' => '五桿',
 '阿塞拜疆' => '亞塞拜然',
+'阿斯旺' => '亞斯文',
 '人工智能' => '人工智慧',
-'接口' => '介面',
+'人机交互' => '人機互動',
+'石勒蘇益格' => '什勒斯維希',
+'石勒苏益格' => '什勒斯維希',
+'界面' => '介面',
+'伊利诺伊州' => '伊利諾州',
+'伊斯坦布爾' => '伊斯坦堡',
+'伊斯坦布尔' => '伊斯坦堡',
+'伊斯兰堡' => '伊斯蘭瑪巴德',
+'伊斯蘭堡' => '伊斯蘭瑪巴德',
+'埃博拉' => '伊波拉',
+'伊丽莎白' => '伊莉莎白',
+'掌上壓' => '伏地挺身',
+'俯卧撑' => '伏地挺身',
+'伯明翰' => '伯明罕',
 '服务器' => '伺服器',
-'字節' => '位元組',
 '字节' => '位元組',
-'作品裏' => '作品裡',
-'信道' => '信道',
-'优先级' => '優先順序',
-'元兇' => '元凶',
-'元凶' => '元凶',
+'字節' => '位元組',
+'佛罗伦萨' => '佛羅倫斯',
+'操作系统' => '作業系統',
+'系数' => '係數',
+'避孕套' => '保險套',
+'傅里叶' => '傅立葉',
 '光盘' => '光碟',
 '光驱' => '光碟機',
 '克羅地亞' => '克羅埃西亞',
 '克罗地亚' => '克羅埃西亞',
-'全角' => '全形',
-'冬天裏' => '冬天裡',
-'冬日裏' => '冬日裡',
-'凉菜' => '冷盤',
-'冷菜' => '冷盤',
-'凶器' => '凶器',
-'兇器' => '凶器',
-'凶徒' => '凶徒',
-'兇徒' => '凶徒',
-'兇手' => '凶手',
-'凶手' => '凶手',
-'兇案' => '凶案',
-'凶案' => '凶案',
-'凶殘' => '凶殘',
-'兇殘' => '凶殘',
-'凶残' => '凶殘',
-'兇殺' => '凶殺',
-'凶杀' => '凶殺',
-'凶殺' => '凶殺',
+'克里斯托弗' => '克里斯多福',
+'万维网' => '全球資訊網',
+'八杆' => '八桿',
+'公共交通' => '公共運輸',
+'六杆' => '六桿',
+'凯瑟琳' => '凱薩琳',
+'嘉芙蓮' => '凱薩琳',
 '打印' => '列印',
 '列支敦士登' => '列支敦斯登',
-'剪彩' => '剪綵',
+'前波美拉尼亚' => '前波莫瑞',
+'前波美拉尼亞' => '前波莫瑞',
 '加蓬' => '加彭',
-'总线' => '匯流排',
+'加沙地带' => '加薩走廊',
+'加沙地帶' => '加薩走廊',
+'包豪斯' => '包浩斯',
+'北朝鲜' => '北韓',
 '局域网' => '區域網',
+'十杆' => '十桿',
 '特立尼達和多巴哥' => '千里達托貝哥',
 '特立尼达和托巴哥' => '千里達托貝哥',
-'å\8d\8aè§\92' => 'å\8d\8aå½¢',
-'卡塔爾' => '卡達',
+'å\8d\97æ\9c\9dé²\9c' => 'å\8d\97é\9f\93',
+'卡斯特罗' => '卡斯楚',
 '卡塔尔' => '卡達',
-'打印機' => '印表機',
+'卡塔爾' => '卡達',
 '打印机' => '印表機',
-'厄立特里亚' => '厄利垂亞',
+'打印機' => '印表機',
 '厄立特里亞' => '厄利垂亞',
-'厄瓜多尔' => '厄瓜多',
+'厄立特里亚' => '厄利垂亞',
+'厄利垂亚' => '厄利垂亞',
 '厄瓜多爾' => '厄瓜多',
+'厄瓜多' => '厄瓜多',
+'厄瓜多尔' => '厄瓜多',
+'源代码' => '原始碼',
+'圆珠笔' => '原子筆',
+'反煙' => '反菸',
+'可卡因' => '古柯鹼',
+'便携式' => '可攜式',
+'叱咤' => '叱吒',
+'叱咤9' => '叱咤9',
+'叱咤M' => '叱咤M',
+'叱咤叱' => '叱咤叱',
+'叱咤咤' => '叱咤咤',
+'叱咤樂壇' => '叱咤樂壇',
+'斯坦福' => '史丹福',
+'斯皮尔伯格' => '史匹柏',
+'斯特劳斯' => '史特勞斯',
 '斯威士兰' => '史瓦濟蘭',
 '斯威士蘭' => '史瓦濟蘭',
-'吉布提' => '吉布地',
+'斯蒂芬' => '史蒂芬',
+'斯大林' => '史達林',
+'結他' => '吉他',
+'乞力馬札羅' => '吉力馬札羅',
+'乞力马扎罗' => '吉力馬札羅',
 '吉布堤' => '吉布地',
+'吉布提' => '吉布地',
+'吉尔吉斯斯坦' => '吉爾吉斯',
 '基里巴斯' => '吉里巴斯',
 '圖瓦盧' => '吐瓦魯',
 '图瓦卢' => '吐瓦魯',
+'吸煙' => '吸菸',
+'呂宋煙' => '呂宋菸',
 '哈萨克斯坦' => '哈薩克',
+'格丁根' => '哥廷根',
+'哥特式' => '哥德式',
 '哥斯達黎加' => '哥斯大黎加',
 '哥斯达黎加' => '哥斯大黎加',
-'格魯吉亞' => '喬治亞',
-'格鲁吉亚' => '喬治亞',
+'卡拉奇' => '喀拉蚩',
+'乔治·奥威尔' => '喬治·歐威爾',
 '佐治亚' => '喬治亞',
 '佐治亞' => '喬治亞',
-'嘴裏' => '嘴裡',
+'格魯吉亞' => '喬治亞',
+'格鲁吉亚' => '喬治亞',
+'单反相机' => '單眼相機',
+'單鏡反光機' => '單眼相機',
+'嘯咤' => '嘯吒',
+'四杆' => '四桿',
 '土库曼斯坦' => '土庫曼',
-'薯仔' => '土豆',
-'土豆網' => '土豆網',
-'土豆网' => '土豆網',
-'坦桑尼亚' => '坦尚尼亞',
+'圖盧茲' => '土魯斯',
+'图卢兹' => '土魯斯',
+'IP' => '地址',
+'戛纳' => '坎城',
+'堪培拉' => '坎培拉',
 '坦桑尼亞' => '坦尚尼亞',
+'坦桑尼亚' => '坦尚尼亞',
 '端口' => '埠',
+'首席执行官' => '執行長',
 '塔吉克斯坦' => '塔吉克',
-'塞舌尔' => '塞席爾',
 '塞舌爾' => '塞席爾',
-'塞浦路斯' => '塞普勒斯',
-'夏天裏' => '夏天裡',
-'夏日裏' => '夏日裡',
-'多明尼加共和國' => '多明尼加',
-'多米尼加共和国' => '多明尼加',
-'多米尼加共和國' => '多明尼加',
-'多米尼加国' => '多米尼克',
-'多明尼加國' => '多米尼克',
-'穿梭機' => '太空梭',
+'塞舌尔' => '塞席爾',
+'萨拉热窝' => '塞拉耶佛',
+'薩拉熱窩' => '塞拉耶佛',
+'塞爾維亞和黑山' => '塞爾維亞與蒙特內哥羅',
+'塞爾維亞與蒙特內哥羅' => '塞爾維亞與蒙特內哥羅',
+'塞尔维亚和黑山' => '塞爾維亞與蒙特內哥羅',
+'塞维利亚' => '塞維亞',
+'西維爾' => '塞維亞',
+'塞黑' => '塞蒙',
+'英联邦' => '大英國協',
+'共和联邦' => '大英國協',
+'英聯邦' => '大英國協',
+'宇航员' => '太空人',
+'太空飛行員' => '太空人',
 '航天飞机' => '太空梭',
-'尼日利亚' => '奈及利亞',
+'穿梭機' => '太空梭',
+'宇航服' => '太空衣',
+'航天器' => '太空飛行器',
 '尼日利亞' => '奈及利亞',
-'字符' => '字元',
-'字号' => '字型大小',
+'尼日利亚' => '奈及利亞',
+'忌廉' => '奶油',
+'荷里活' => '好萊塢',
+'威廉姆斯' => '威廉士',
+'威斯特法倫' => '威斯伐倫',
+'威斯特法伦' => '威斯伐倫',
+'威士顿康星' => '威斯康辛',
+'威爾士' => '威爾斯',
+'威尔士' => '威爾斯',
 '字库' => '字型檔',
-'字符集' => '字符集',
 '存盘' => '存檔',
-'學裏' => '學裡',
+'门德尔松' => '孟德爾頌',
+'孟德爾遜' => '孟德爾頌',
+'安哈爾特' => '安哈特',
+'安哈尔特' => '安哈特',
 '安提瓜和巴布達' => '安地卡及巴布達',
 '安提瓜和巴布达' => '安地卡及巴布達',
-'宋元' => '宋元',
 '洪都拉斯' => '宏都拉斯',
-'寻址' => '定址',
-'寒假裏' => '寒假裡',
+'密歇根' => '密西根',
 '宽带' => '寬頻',
-'老撾' => '寮國',
+'老撾人民民主共和國' => '寮人民民主共和國',
+'老挝人民民主共和国' => '寮人民民主共和國',
 '老挝' => '寮國',
-'打门' => '射門',
-'專輯裏' => '專輯裡',
+'老撾' => '寮國',
+'老挝语' => '寮語',
+'老撾語' => '寮語',
+'高峰时段' => '尖峰時段',
+'高峰时间' => '尖峰時間',
 '贊比亞' => '尚比亞',
 '赞比亚' => '尚比亞',
-'尼日爾' => '尼日',
+'尼克松' => '尼克森',
 '尼日尔' => '尼日',
-'山洞裏' => '山洞裡',
-'巴布亞新畿內亞' => '巴布亞紐幾內亞',
+'尼日爾' => '尼日',
+'雅马哈' => '山葉',
+'机床' => '工具機',
+'機床' => '工具機',
+'珍寶客機' => '巨無霸客機',
+'发达国家' => '已開發國家',
+'巴塞隆拿' => '巴塞隆納',
+'巴塞罗那' => '巴塞隆納',
 '巴布亚新几内亚' => '巴布亞紐幾內亞',
+'巴布亞新畿內亞' => '巴布亞紐幾內亞',
+'巴士拉' => '巴斯拉',
 '巴巴多斯' => '巴貝多',
-'布基纳法索' => '布吉納法索',
+'佈' => '布',
 '布基納法索' => '布吉納法索',
-'布什' => '布希',
+'布基纳法索' => '布吉納法索',
 '布殊' => '布希',
+'布什' => '布希',
+'勃兰登堡' => '布蘭登堡',
+'勃蘭登堡' => '布蘭登堡',
+'布里斯托尔' => '布里斯托',
+'布隆方丹' => '布隆泉',
+'希拉里' => '希拉蕊',
+'希特拉' => '希特勒',
+'巴尔米拉环礁' => '帕邁拉環礁',
 '帕劳' => '帛琉',
-'例程' => '常式',
-'平治之乱' => '平治之亂',
-'平治之亂' => '平治之亂',
-'年代裏' => '年代裡',
+'希拉克' => '席哈克',
+'账' => '帳',
+'干着急' => '干著急',
+'干着' => '幹著',
+'畿內亞' => '幾內亞',
 '几内亚比绍' => '幾內亞比索',
 '幾內亞比紹' => '幾內亞比索',
-'彩带' => '彩帶',
-'彩排' => '彩排',
-'彩楼' => '彩樓',
-'彩牌楼' => '彩牌樓',
-'復蘇' => '復甦',
-'复苏' => '復甦',
-'心裏' => '心裡',
+'比利牛斯' => '庇里牛斯',
+'康涅狄格' => '康乃狄克',
+'约翰斯顿岛' => '強斯頓環礁',
+'形而上学' => '形上學',
+'形而上學' => '形上學',
+'得克薩斯' => '德克薩斯',
+'得克萨斯' => '德克薩斯',
+'德累斯頓' => '德勒斯登',
+'德累斯顿' => '德勒斯登',
+'德里达' => '德希達',
+'特拉华' => '德拉瓦',
+'特拉華' => '德拉瓦',
 '快闪存储器' => '快閃記憶體',
 '闪存' => '快閃記憶體',
 '想象' => '想像',
-'传感' => '感測',
-'习用' => '慣用',
-'戏彩娱亲' => '戲綵娛親',
-'戲裏' => '戲裡',
-'手电筒' => '手電筒',
-'手电' => '手電筒',
-'括号' => '括弧',
-'拿破侖' => '拿破崙',
-'拿破仑' => '拿破崙',
+'愛德文' => '愛德溫',
+'艾滋' => '愛滋',
+'艾奧瓦' => '愛荷華',
+'爱德华州' => '愛達荷州',
+'应用程序' => '應用程式',
+'戈爾巴喬夫' => '戈巴契夫',
+'戈尔巴乔夫' => '戈巴契夫',
+'戒煙' => '戒菸',
+'戴克里先' => '戴克里先',
+'抽煙' => '抽菸',
+'拉普兰' => '拉布蘭',
+'拒煙' => '拒菸',
+'捲煙' => '捲菸',
 '積架' => '捷豹',
-'扫瞄仪' => '掃瞄器',
-'挂钩' => '掛鉤',
-'掛鈎' => '掛鉤',
 '控件' => '控制項',
+'推杆' => '推桿',
+'第比利斯' => '提比里西',
+'揮杆' => '揮桿',
+'挥杆' => '揮桿',
+'搜索引擎' => '搜尋引擎',
+'摩根士丹利' => '摩根史坦利',
 '台球' => '撞球',
-'桌球' => '撞球',
-'便携式' => '攜帶型',
-'故事裏' => '故事裡',
+'攻打印' => '攻打印',
+'数字技术' => '數位技術',
+'數碼技術' => '數位技術',
+'數碼相機' => '數位相機',
+'数码相机' => '數位相機',
+'数字信号' => '數位訊號',
+'數碼訊號' => '數位訊號',
+'数字电视' => '數位電視',
+'數碼電視' => '數位電視',
 '调制解调器' => '數據機',
 '調制解調器' => '數據機',
-'斯洛文尼亞' => '斯洛維尼亞',
 '斯洛文尼亚' => '斯洛維尼亞',
-'新纪元' => '新紀元',
-'新紀元' => '新紀元',
-'日子裏' => '日子裡',
-'春假裏' => '春假裡',
-'春天裏' => '春天裡',
-'春日裏' => '春日裡',
-'時間裏' => '時間裡',
-'芯片' => '晶元',
-'暑假裏' => '暑假裡',
-'村子裏' => '村子裡',
+'斯洛文尼亞' => '斯洛維尼亞',
+'新罕布什尔' => '新罕布夏',
+'施罗德' => '施洛德',
+'旱煙' => '旱菸',
+'普利策' => '普利茲',
+'芯片' => '晶片',
+'智能卡' => '智慧卡',
+'智能手機' => '智慧型手機',
+'智能手机' => '智慧型手機',
+'智能电话' => '智慧型電話',
+'智能電話' => '智慧型電話',
+'知识产权' => '智慧財產權',
+'知識產權' => '智慧財產權',
+'萌島' => '曼島',
+'马恩岛' => '曼島',
+'木杆' => '木桿',
+'列奥纳多' => '李奧納多',
+'杜塞爾多夫' => '杜塞道夫',
+'杜塞尔多夫' => '杜塞道夫',
+'迪拜' => '杜拜',
+'亚细安' => '東協',
+'东盟' => '東協',
+'东南亚国家联盟' => '東南亞國協',
+'柏林墙' => '柏林圍牆',
+'柏林牆' => '柏林圍牆',
 '乍得' => '查德',
-'克林頓' => '柯林頓',
+'查韦斯' => '查維茲',
 '克林顿' => '柯林頓',
-'格林納達' => '格瑞那達',
+'克林頓' => '柯林頓',
+'撒切尔' => '柴契爾',
+'戴卓爾' => '柴契爾',
 '格林纳达' => '格瑞那達',
-'凡高' => '梵谷',
-'森林裏' => '森林裡',
-'棺材裏' => '棺材裡',
-'榴蓮' => '榴槤',
+'格林納達' => '格瑞那達',
+'乒乓球' => '桌球',
+'乒乓' => '桌球',
+'杆弟' => '桿弟',
+'杆身' => '桿身',
+'杆頭' => '桿頭',
+'杆头' => '桿頭',
+'梅尔·吉布森' => '梅爾·吉勃遜',
+'梵高' => '梵谷',
+'桑巴舞' => '森巴舞',
 '榴莲' => '榴槤',
-'仿真' => '模擬',
-'毛里裘斯' => '模里西斯',
+'榴蓮' => '榴槤',
+'枪支' => '槍枝',
+'标准杆' => '標準桿',
+'標準杆' => '標準桿',
 '毛里求斯' => '模里西斯',
+'毛里裘斯' => '模里西斯',
 '機械人' => '機器人',
 '机器人' => '機器人',
+'概率' => '機率',
+'電單車' => '機車',
+'枱' => '檯',
 '字段' => '欄位',
-'歷史裏' => '歷史裡',
-'å\85\83é\9f³' => 'æ¯\8dé\9f³',
-'æ°¸å\8e\86' => 'æ°¸æ\9b\86',
+'奧巴馬' => '歐巴馬',
+'奥巴马' => 'æ­\90巴馬',
+'æ­£å\9c¨å\8f±å\92¤' => 'æ­£å\9c¨å\8f±å\92¤',
 '文莱' => '汶萊',
+'沙律' => '沙拉',
 '沙特阿拉伯' => '沙烏地阿拉伯',
 '沙地阿拉伯' => '沙烏地阿拉伯',
+'法属圭亚那' => '法屬蓋亞那',
+'波斯尼亚' => '波士尼亞',
+'波斯尼亞' => '波士尼亞',
 '波斯尼亞黑塞哥維那' => '波士尼亞赫塞哥維納',
 '波斯尼亚和黑塞哥维那' => '波士尼亞赫塞哥維納',
 '博茨瓦纳' => '波札那',
 '博茨瓦納' => '波札那',
-'流程控制' => '流程控制',
+'波黑' => '波赫',
+'洋煙' => '洋菸',
+'帕特里克' => '派屈克',
+'海洛英' => '海洛因',
 '侯赛因' => '海珊',
 '侯賽因' => '海珊',
-'深淵裏' => '深淵裡',
-'光标' => '游標',
 '鼠标' => '滑鼠',
-'算法' => '演算法',
+'漢诺威' => '漢諾瓦',
+'汉诺威' => '漢諾瓦',
 '乌兹别克斯坦' => '烏茲別克',
-'词组' => '片語',
-'獄裏' => '獄裡',
+'烤煙' => '烤菸',
+'無煙日' => '無菸日',
+'無煙環境' => '無菸環境',
+'烟熏' => '煙燻',
+'首席运营官' => '營運長',
+'熏烤' => '燻烤',
+'熏肉' => '燻肉',
+'熏黑' => '燻黑',
+'版权信息' => '版權資訊',
+'疯牛症' => '狂牛症',
+'鐵托' => '狄托',
+'铁托' => '狄托',
 '塞拉利昂' => '獅子山',
-'危地马拉' => '瓜地馬拉',
+'独联体' => '獨立國協',
+'独立国家联合体' => '獨立國家國協',
+'波利尼西亚' => '玻里尼西亞',
+'波利尼西亞' => '玻里尼西亞',
+'本杰明' => '班傑明',
+'本傑明' => '班傑明',
+'球杆' => '球桿',
+'理查德' => '理察',
+'卢塞恩' => '琉森',
 '危地馬拉' => '瓜地馬拉',
+'危地马拉' => '瓜地馬拉',
+'巴伦西亚' => '瓦倫西亞',
+'華倫西亞' => '瓦倫西亞',
 '冈比亚' => '甘比亞',
 '岡比亞' => '甘比亞',
-'疑兇' => '疑凶',
-'疑凶' => '疑凶',
-'百科裏' => '百科裡',
-'皮裏陽秋' => '皮裡陽秋',
+'肯尼迪' => '甘迺迪',
+'留尼汪' => '留尼旺',
+'毕加索' => '畢卡索',
+'迭代' => '疊代',
+'徵狀' => '症狀',
+'勃朗宁' => '白朗寧',
+'百慕大' => '百慕達',
 '盧旺達' => '盧安達',
 '卢旺达' => '盧安達',
-'真凶' => '真凶',
-'真兇' => '真凶',
-'眼睛裏' => '眼睛裡',
-'硅片' => '矽片',
-'硅谷' => '矽谷',
+'睾' => '睪',
+'知识产权局' => '知識產權局',
+'知識產權署' => '知識產權署',
+'知識產權局' => '知識產權署',
+'知识产权署' => '知識產權署',
+'硅' => '矽',
+'硅藻' => '硅藻',
 '硬盘' => '硬碟',
 '硬件' => '硬體',
 '盘片' => '碟片',
 '磁盘' => '磁碟',
 '磁道' => '磁軌',
-'秋假裏' => '秋假裡',
-'秋天裏' => '秋天裡',
-'秋日裏' => '秋日裡',
-'程控' => '程式控制',
+'禁煙' => '禁菸',
+'福尔马林' => '福馬林',
+'福爾馬林' => '福馬林',
+'私煙' => '私菸',
+'程序员' => '程式設計師',
+'编程语言' => '程式語言',
+'空氣質素' => '空氣品質',
+'空气质量' => '空氣品質',
 '突尼斯' => '突尼西亞',
-'尾注' => '章節附註',
 '蹦极跳' => '笨豬跳',
 '绑紧跳' => '笨豬跳',
-'等于' => '等於',
-'短訊' => '簡訊',
 '短信' => '簡訊',
-'系列裏' => '系列裡',
-'新西蘭' => '紐西蘭',
+'纽黑文' => '紐哈芬',
+'新奥尔良' => '紐奧良',
+'新奧爾良' => '紐奧良',
+'新几内亚' => '紐幾內亞',
 '新西兰' => '紐西蘭',
-'所罗门群岛' => '索羅門群島',
+'新西蘭' => '紐西蘭',
+'紙煙' => '紙菸',
+'索贊尼辛' => '索忍尼辛',
+'索尔仁尼琴' => '索忍尼辛',
 '所羅門群島' => '索羅門群島',
-'索馬里' => '索馬利亞',
+'所罗门群岛' => '索羅門群島',
 '索马里' => '索馬利亞',
-'结彩' => '結綵',
+'索馬里' => '索馬利亞',
+'索马里兰' => '索馬利蘭',
+'索馬里蘭' => '索馬利蘭',
+'維爾京群島' => '維京群島',
+'维尔京群岛' => '維京群島',
+'弗吉尼亚' => '維吉尼亞',
 '佛得角' => '維德角',
-'網絡' => '網路',
-'网络' => '網路',
-'互聯網' => '網際網路',
+'维特根斯坦' => '維根斯坦',
+'互联网络' => '網際網路',
 '因特网' => '網際網路',
-'彩球' => '綵球',
-'彩绸' => '綵綢',
-'彩线' => '綵線',
-'彩船' => '綵船',
-'彩衣' => '綵衣',
-'綫' => '線',
-'缉凶' => '緝凶',
-'緝兇' => '緝凶',
-'緝凶' => '緝凶',
+'互聯網' => '網際網路',
+'互联网' => '網際網路',
+'系着' => '繫著',
+'卢瓦尔' => '羅亞爾',
+'盧瓦爾' => '羅亞爾',
+'卢浮宫' => '羅浮宮',
+'樂行童軍' => '羅浮童軍',
 '意大利' => '義大利',
-'老字号' => '老字號',
+'昂山素姬' => '翁山蘇姬',
+'昂山素季' => '翁山蘇姬',
 '圣基茨和尼维斯' => '聖克里斯多福及尼維斯',
 '聖吉斯納域斯' => '聖克里斯多福及尼維斯',
 '聖文森特和格林納丁斯' => '聖文森及格瑞那丁',
 '圣文森特和格林纳丁斯' => '聖文森及格瑞那丁',
-'圣卢西亚' => '聖露西亞',
+'圣赫勒拿' => '聖赫倫那',
 '聖盧西亞' => '聖露西亞',
+'圣卢西亚' => '聖露西亞',
 '圣马力诺' => '聖馬利諾',
 '聖馬力諾' => '聖馬利諾',
-'肚裏' => '肚裡',
 '肯尼亚' => '肯亞',
-'肯雅' => '肯亞',
-'航天大学' => '航天大學',
-'苦裏' => '苦裡',
-'毛里塔尼亚' => '茅利塔尼亞',
+'氨基酸' => '胺基酸',
+'卧' => '臥',
+'自由泳' => '自由式',
+'三藩市' => '舊金山',
+'艾森豪威尔' => '艾森豪',
+'埃菲尔' => '艾菲爾',
+'阿里埃勒·沙龙' => '艾里爾·夏隆',
+'阿里埃勒·沙龍' => '艾里爾·夏隆',
+'帕塔亚' => '芭達亞',
+'黎克特制' => '芮氏',
+'里氏0' => '芮氏0',
+'里氏1' => '芮氏1',
+'里氏2' => '芮氏2',
+'里氏3' => '芮氏3',
+'里氏4' => '芮氏4',
+'里氏5' => '芮氏5',
+'里氏6' => '芮氏6',
+'里氏7' => '芮氏7',
+'里氏8' => '芮氏8',
+'里氏9' => '芮氏9',
+'里氏地震规模' => '芮氏地震規模',
+'里氏规模' => '芮氏規模',
+'里氏震级' => '芮氏規模',
+'当且仅当' => '若且唯若',
+'味美思' => '苦艾酒',
 '毛里塔尼亞' => '茅利塔尼亞',
+'毛里塔尼亚' => '茅利塔尼亞',
+'霍尔木兹' => '荷姆茲',
+'霍爾木茲' => '荷姆茲',
+'荷李活道' => '荷李活道',
 '莫桑比克' => '莫三比克',
-'万历' => '萬曆',
-'瓦努阿图' => '萬那杜',
+'瓦文萨' => '華勒沙',
+'華里沙' => '華勒沙',
+'瓦格纳' => '華格納',
+'煙具' => '菸具',
+'煙品' => '菸品',
+'煙嘴' => '菸嘴',
+'煙捲' => '菸捲',
+'煙斗' => '菸斗',
+'煙民' => '菸民',
+'煙灰' => '菸灰',
+'煙癮' => '菸癮',
+'煙絲' => '菸絲',
+'煙草' => '菸草',
+'煙葉' => '菸葉',
+'煙蒂' => '菸蒂',
+'煙袋' => '菸袋',
+'煙農' => '菸農',
+'煙酒' => '菸酒',
+'煙頭' => '菸頭',
+'煙鬼' => '菸鬼',
+'煙鹼' => '菸鹼',
+'万历朝鲜战争' => '萬曆朝鮮戰爭',
 '瓦努阿圖' => '萬那杜',
-'也门' => '葉門',
+'瓦努阿图' => '萬那杜',
+'叶利钦' => '葉爾欽',
+'葉利欽' => '葉爾欽',
+'埃里温' => '葉里溫',
+'埃里溫' => '葉里溫',
 '也門' => '葉門',
+'也门' => '葉門',
 '着' => '著',
-'科摩羅' => '葛摩',
 '科摩罗' => '葛摩',
+'科摩羅' => '葛摩',
+'黑山共和國' => '蒙特內哥羅共和國',
+'黑山共和国' => '蒙特內哥羅共和國',
+'蒙特利爾' => '蒙特婁',
+'滿地可' => '蒙特婁',
+'蒙特利尔' => '蒙特婁',
+'普密蓬' => '蒲美蓬',
 '布隆迪' => '蒲隆地',
-'圭亞那' => '蓋亞那',
 '圭亚那' => '蓋亞那',
-'火锅盖帽' => '蓋火鍋',
+'开曼群岛' => '蓋曼群島',
+'開曼群島' => '蓋曼群島',
+'蕭士達高維契' => '蕭士塔高維奇',
+'肖斯塔科维奇' => '蕭士塔高維奇',
+'肖邦' => '蕭邦',
+'薛定谔' => '薛丁格',
+'扎伊爾' => '薩伊',
+'扎伊尔' => '薩伊',
+'素檀' => '蘇丹',
 '苏里南' => '蘇利南',
-'行凶' => '行凶',
-'行兇' => '行凶',
-'行凶后' => '行凶後',
-'行兇後' => '行凶後',
-'行凶後' => '行凶後',
-'流動電話' => '行動電話',
+'浮罗交怡' => '蘭卡威',
+'浮羅交怡' => '蘭卡威',
+'劳拉' => '蘿拉',
+'荧光' => '螢光',
+'荧屏' => '螢屏',
+'屏幕' => '螢幕',
+'流動網絡' => '行動網路',
+'移动网络' => '行動網路',
 '移动电话' => '行動電話',
-'行程控制' => '行程控制',
-'衞' => '衛',
-'卫生' => '衛生',
-'衞生' => '衛生',
-'埃塞俄比亚' => '衣索比亞',
+'流動電話' => '行動電話',
+'冲着' => '衝著',
 '埃塞俄比亞' => '衣索比亞',
-'裏勾外連' => '裡勾外連',
-'裏面' => '裡面',
+'埃塞俄比亚' => '衣索比亞',
+'克隆人' => '複製人',
+'國際象棋' => '西洋棋',
+'囯际象棋' => '西洋棋',
+'国际象棋' => '西洋棋',
+'赫梯' => '西臺',
+'解像度' => '解析度',
 '分辨率' => '解析度',
 '译码' => '解碼',
 '出租车' => '計程車',
-'权限' => '許可權',
+'约翰逊' => '詹森',
+'诺曼底' => '諾曼第',
 '瑙鲁' => '諾魯',
 '瑙魯' => '諾魯',
-'变量' => '變數',
 '科特迪瓦' => '象牙海岸',
-'貝寧' => '貝南',
-'贝宁' => '貝南',
-'伯利茲' => '貝里斯',
+'贝尔格莱德' => '貝爾格勒',
+'貝爾格萊德' => '貝爾格勒',
 '伯利兹' => '貝里斯',
-'買兇' => '買凶',
-'买凶' => '買凶',
-'買凶' => '買凶',
+'伯利茲' => '貝里斯',
+'首席财务官' => '財務長',
+'集装箱' => '貨櫃',
+'數據庫' => '資料庫',
 '数据库' => '資料庫',
 '信息论' => '資訊理論',
-'奔驰' => '賓士',
-'平治' => '賓士',
-'利比里亚' => '賴比瑞亞',
+'宾西法尼亚' => '賓夕法尼亞',
 '利比里亞' => '賴比瑞亞',
-'萊索托' => '賴索托',
+'利比里亚' => '賴比瑞亞',
 '莱索托' => '賴索托',
+'萊索托' => '賴索托',
+'塞浦路斯' => '賽普勒斯',
+'碧咸' => '贝克漢',
+'赫丘勒·波洛' => '赫丘勒·白羅',
+'赫鲁晓夫' => '赫魯雪夫',
+'切尔诺贝利' => '車諾比',
 '软驱' => '軟碟機',
 '軟件' => '軟體',
 '软件' => '軟體',
-'加载' => '載入',
 '津巴布韦' => '辛巴威',
 '津巴布韋' => '辛巴威',
-'词汇' => '辭彙',
-'加纳' => '迦納',
-'加納' => '迦納',
-'追凶' => '追凶',
-'追兇' => '追凶',
-'這裏' => '這裡',
-'逞凶鬥狠' => '逞凶鬥狠',
-'逞兇鬥狠' => '逞凶鬥狠',
-'逞凶斗狠' => '逞凶鬥狠',
-'即食麵' => '速食麵',
-'方便面' => '速食麵',
-'快速面' => '速食麵',
-'连字号' => '連字號',
+'径入' => '逕入',
+'径到' => '逕到',
+'径取' => '逕取',
+'径启' => '逕啟',
+'径寄' => '逕寄',
+'径庭' => '逕庭',
+'径往' => '逕往',
+'径自' => '逕自',
+'径行' => '逕行',
+'径迎' => '逕迎',
+'链接' => '連結',
+'連結他' => '連結他',
 '进制' => '進位',
-'入球' => '進球',
 '算子' => '運算元',
-'遠程控制' => '遠程控制',
-'è¿\9cç¨\8bæ\8e§å\88¶' => 'é\81 ç¨\8bæ\8e§å\88',
+'达·芬奇' => '達·文西',
+'è¾¾è\8a¬å¥\87' => 'é\81\94æ\96\87西',
 '溫納圖萬' => '那杜',
-'醫院裏' => '醫院裡',
+'丘吉尔' => '邱吉爾',
+'多普勒' => '都卜勒',
+'奥斯曼' => '鄂圖曼',
 '酰' => '醯',
+'里士满' => '里奇蒙',
+'金沙薩' => '金夏沙',
+'金沙萨' => '金夏沙',
+'健力士世界纪录' => '金氏世界紀錄',
+'健力士世界紀錄' => '金氏世界紀錄',
+'吉尼斯世界纪录' => '金氏世界紀錄',
+'钚' => '鈽',
 '钩' => '鉤',
 '鈎' => '鉤',
-'钩心斗角' => '鉤心鬥角',
-'鈎心鬥角' => '鉤心鬥角',
 '锎' => '鉲',
+'锫' => '鉳',
+'镅' => '鋂',
+'镎' => '錼',
+'钫' => '鍅',
+'炼金' => '鍊金',
+'锻炼' => '鍛鍊',
+'锝' => '鎝',
+'鐵杆' => '鐵桿',
+'铁杆' => '鐵桿',
+'泰坦尼克号' => '鐵達尼號',
+'锿' => '鑀',
+'关系着' => '關係著',
 '写保护' => '防寫',
+'阿布扎比' => '阿布達比',
 '阿拉伯联合酋长国' => '阿拉伯聯合大公國',
 '阿拉伯聯合酋長國' => '阿拉伯聯合大公國',
-'噪声' => '雜訊',
-'脱机' => '離線',
-'雪裏紅' => '雪裡紅',
-'雪裏蕻' => '雪裡蕻',
-'雪铁龙' => '雪鐵龍',
-'青霉素' => '青黴素',
-'异步' => '非同步',
+'亚拉巴马' => '阿拉巴馬',
+'阿联酋' => '阿聯',
+'阿聯酋' => '阿聯',
+'罗纳德·里根' => '隆納·雷根',
+'私隱' => '隱私',
+'耶加達' => '雅加達',
+'雅尔塔' => '雅爾達',
+'雅爾塔' => '雅爾達',
+'雅穆苏克雷' => '雅穆索戈',
+'雅穆蘇克雷' => '雅穆索戈',
+'悉尼' => '雪梨',
+'雪茄煙' => '雪茄菸',
+'莱特湾' => '雷伊泰灣',
+'萊特灣' => '雷伊泰灣',
+'激光' => '雷射',
+'雷诺阿' => '雷諾瓦',
+'電子煙' => '電子菸',
+'晶體管' => '電晶體',
+'晶体管' => '電晶體',
+'电杆' => '電桿',
+'电线杆' => '電線桿',
+'计算机程序' => '電腦程式',
+'电脑程序' => '電腦程式',
+'荷尔斯泰因' => '霍爾斯坦',
+'荷爾斯泰因' => '霍爾斯坦',
+'朝鲜战争' => '韓戰',
 '声卡' => '音效卡',
 '缺省' => '預設',
-'颁布' => '頒布',
-'頒佈' => '頒布',
-'領域裏' => '領域裡',
-'头球' => '頭槌',
-'粒入球' => '顆進球',
-'館裏' => '館裡',
+'导弹' => '飛彈',
+'糊口' => '餬口',
+'香煙' => '香菸',
 '马里共和国' => '馬利共和國',
 '馬里共和國' => '馬利共和國',
+'马拉维' => '馬拉威',
+'馬斯特里赫特' => '馬斯垂克',
+'马斯特里赫特' => '馬斯垂克',
 '马耳他' => '馬爾他',
-'马尔代夫' => '馬爾地夫',
 '馬爾代夫' => '馬爾地夫',
-'萬事得' => '馬自達',
-'狄安娜' => '黛安娜',
+'马尔代夫' => '馬爾地夫',
+'馬利蘭' => '馬里蘭',
+'高清电视' => '高畫質電視',
+'斗着' => '鬥著',
+'魯賓斯·巴里切羅' => '魯本·巴瑞切羅',
+'咪高峰' => '麥克風',
+'迈克尔' => '麥可',
+'麦克尔' => '麥可',
+'邁凱輪' => '麥拿輪',
+'迈凯轮' => '麥拿輪',
+'马萨诸塞' => '麻薩諸塞',
 '戴安娜' => '黛安娜',
-'點裏' => '點裡',
-'位图' => '點陣圖',
+'狄安娜' => '黛安娜',
+'點煙' => '點菸',
+'霉素' => '黴素',
+);
+
+$zh2HK = array(
+'IP地址' => 'IP位址',
+'·威爾士' => '·威爾士',
+'·威尔士' => '·威爾士',
+'一地里' => '一地裏',
+'一年里' => '一年裏',
+'三十六著' => '三十六着',
+'三極體' => '三極管',
+'旧金山' => '三藩市',
+'舊金山' => '三藩市',
+'下著' => '下着',
+'下著作' => '下著作',
+'下著名' => '下著名',
+'下著有' => '下著有',
+'下著称' => '下著稱',
+'下著稱' => '下著稱',
+'下著者' => '下著者',
+'下著述' => '下著述',
+'下著录' => '下著錄',
+'下著錄' => '下著錄',
+'不占' => '不佔',
+'不萊梅' => '不來梅',
+'不著痕跡' => '不着痕跡',
+'不著邊際' => '不着邊際',
+'世纪里' => '世紀裏',
+'C型肝炎' => '丙型肝炎',
+'C肝' => '丙肝',
+'并发布' => '並發佈',
+'中文里' => '中文裏',
+'乘著' => '乘着',
+'乘著作' => '乘著作',
+'乘著名' => '乘著名',
+'乘著書' => '乘著書',
+'乘著稱' => '乘著稱',
+'乘著者' => '乘著者',
+'乘著述' => '乘著述',
+'乘著錄' => '乘著錄',
+'B型肝炎' => '乙型肝炎',
+'B肝' => '乙肝',
+'吉力馬札羅' => '乞力馬札羅',
+'葉門' => '也門',
+'事里' => '事裏',
+'二極體' => '二極管',
+'因特网' => '互聯網',
+'網際網路' => '互聯網',
+'井里' => '井裏',
+'亮著' => '亮着',
+'亮著作' => '亮著作',
+'亮著名' => '亮著名',
+'亮著書' => '亮著書',
+'亮著稱' => '亮著稱',
+'亮著者' => '亮著者',
+'亮著述' => '亮著述',
+'亮著錄' => '亮著錄',
+'人工智慧' => '人工智能',
+'人数里' => '人數裏',
+'仗著' => '仗着',
+'仗著作' => '仗著作',
+'仗著名' => '仗著名',
+'仗著書' => '仗著書',
+'仗著稱' => '仗著稱',
+'仗著者' => '仗著者',
+'仗著述' => '仗著述',
+'仗著錄' => '仗著錄',
+'代表著' => '代表着',
+'代表著作' => '代表著作',
+'代表著名' => '代表著名',
+'代表著書' => '代表著書',
+'代表著稱' => '代表著稱',
+'代表著者' => '代表著者',
+'代表著述' => '代表著述',
+'代表著錄' => '代表著錄',
+'伊斯坦堡' => '伊斯坦布爾',
+'伊斯蘭瑪巴德' => '伊斯蘭堡',
+'埃博拉' => '伊波拉',
+'貝里斯' => '伯利茲',
+'伯明罕' => '伯明翰',
+'伴著' => '伴着',
+'伴著作' => '伴著作',
+'伴著名' => '伴著名',
+'伴著書' => '伴著書',
+'伴著稱' => '伴著稱',
+'伴著者' => '伴著者',
+'伴著述' => '伴著述',
+'伴著錄' => '伴著錄',
+'布下了' => '佈下了',
+'布下的' => '佈下的',
+'布光' => '佈光',
+'布告' => '佈告',
+'布局' => '佈局',
+'布展' => '佈展',
+'布控' => '佈控',
+'布于' => '佈於',
+'布於' => '佈於',
+'布施' => '佈施',
+'布景' => '佈景',
+'布满' => '佈滿',
+'布滿' => '佈滿',
+'布置' => '佈置',
+'布设' => '佈設',
+'布設' => '佈設',
+'布警' => '佈警',
+'布道' => '佈道',
+'布防' => '佈防',
+'布阵' => '佈陣',
+'布陣' => '佈陣',
+'布雷、' => '佈雷、',
+'布雷。' => '佈雷。',
+'布雷封锁' => '佈雷封鎖',
+'布雷封鎖' => '佈雷封鎖',
+'布雷的' => '佈雷的',
+'布雷艇' => '佈雷艇',
+'布雷艦' => '佈雷艦',
+'布雷舰' => '佈雷艦',
+'布雷速度' => '佈雷速度',
+'布雷,' => '佈雷,',
+'布雷;' => '佈雷;',
+'布点' => '佈點',
+'布點' => '佈點',
+'字節' => '位元組',
+'字节' => '位元組',
+'低著' => '低着',
+'低著作' => '低著作',
+'低著名' => '低著名',
+'低著書' => '低著書',
+'低著稱' => '低著稱',
+'低著者' => '低著者',
+'低著述' => '低著述',
+'低著錄' => '低著錄',
+'住著' => '住着',
+'住著作' => '住著作',
+'住著名' => '住著名',
+'住著書' => '住著書',
+'住著稱' => '住著稱',
+'住著者' => '住著者',
+'住著述' => '住著述',
+'住著錄' => '住著錄',
+'占0' => '佔0',
+'占1' => '佔1',
+'占2' => '佔2',
+'占3' => '佔3',
+'占4' => '佔4',
+'占5' => '佔5',
+'占6' => '佔6',
+'占7' => '佔7',
+'占8' => '佔8',
+'占9' => '佔9',
+'占A' => '佔A',
+'占B' => '佔B',
+'占C' => '佔C',
+'占D' => '佔D',
+'占E' => '佔E',
+'占F' => '佔F',
+'占G' => '佔G',
+'占H' => '佔H',
+'占I' => '佔I',
+'占J' => '佔J',
+'占K' => '佔K',
+'占L' => '佔L',
+'占M' => '佔M',
+'占N' => '佔N',
+'占O' => '佔O',
+'占P' => '佔P',
+'占Q' => '佔Q',
+'占R' => '佔R',
+'占S' => '佔S',
+'占T' => '佔T',
+'占U' => '佔U',
+'占V' => '佔V',
+'占W' => '佔W',
+'占X' => '佔X',
+'占Y' => '佔Y',
+'占Z' => '佔Z',
+'占〇' => '佔〇',
+'占一' => '佔一',
+'占七' => '佔七',
+'占三' => '佔三',
+'占上風' => '佔上風',
+'占上风' => '佔上風',
+'占下' => '佔下',
+'占下风' => '佔下風',
+'占下風' => '佔下風',
+'占不占' => '佔不佔',
+'占不足' => '佔不足',
+'占世界' => '佔世界',
+'占中' => '佔中',
+'占主' => '佔主',
+'占主要' => '佔主要',
+'占九' => '佔九',
+'占了' => '佔了',
+'占二' => '佔二',
+'占五' => '佔五',
+'占人便宜' => '佔人便宜',
+'占位' => '佔位',
+'占住' => '佔住',
+'占占' => '佔佔',
+'占便宜' => '佔便宜',
+'占俄' => '佔俄',
+'占个' => '佔個',
+'占個' => '佔個',
+'占个位' => '佔個位',
+'占個位' => '佔個位',
+'占億' => '佔億',
+'占亿' => '佔億',
+'占優' => '佔優',
+'占优' => '佔優',
+'占先' => '佔先',
+'占光' => '佔光',
+'占全' => '佔全',
+'占两' => '佔兩',
+'占兩' => '佔兩',
+'占八' => '佔八',
+'占六' => '佔六',
+'占分' => '佔分',
+'占到' => '佔到',
+'占加' => '佔加',
+'占劣' => '佔劣',
+'占北' => '佔北',
+'占十' => '佔十',
+'占千' => '佔千',
+'占半' => '佔半',
+'占南' => '佔南',
+'占印' => '佔印',
+'占去' => '佔去',
+'占取' => '佔取',
+'占台' => '佔台',
+'占囁' => '佔囁',
+'占四' => '佔四',
+'占国' => '佔國',
+'占國' => '佔國',
+'占在' => '佔在',
+'占地' => '佔地',
+'占場' => '佔場',
+'占场' => '佔場',
+'占压' => '佔壓',
+'占壓' => '佔壓',
+'占多' => '佔多',
+'占大' => '佔大',
+'占好' => '佔好',
+'占小' => '佔小',
+'占少' => '佔少',
+'占局部' => '佔局部',
+'占屋' => '佔屋',
+'占山为' => '佔山為',
+'占山為' => '佔山為',
+'占市' => '佔市',
+'占平均' => '佔平均',
+'占床' => '佔床',
+'占座' => '佔座',
+'占後' => '佔後',
+'占得' => '佔得',
+'占德' => '佔德',
+'占所有' => '佔所有',
+'占掉' => '佔掉',
+'占據' => '佔據',
+'占据' => '佔據',
+'占整' => '佔整',
+'占新' => '佔新',
+'占有' => '佔有',
+'占东' => '佔東',
+'占東' => '佔東',
+'占查' => '佔查',
+'占次' => '佔次',
+'占比' => '佔比',
+'占法' => '佔法',
+'占满' => '佔滿',
+'占滿' => '佔滿',
+'占澳' => '佔澳',
+'占為' => '佔為',
+'占为' => '佔為',
+'占率' => '佔率',
+'占用' => '佔用',
+'占畢' => '佔畢',
+'占毕' => '佔畢',
+'占百' => '佔百',
+'占盡' => '佔盡',
+'占尽' => '佔盡',
+'占着' => '佔着',
+'占著' => '佔着',
+'占网' => '佔網',
+'占網' => '佔網',
+'占線' => '佔線',
+'占线' => '佔線',
+'占總' => '佔總',
+'占总' => '佔總',
+'占缺' => '佔缺',
+'占美' => '佔美',
+'占耕' => '佔耕',
+'占至多' => '佔至多',
+'占至少' => '佔至少',
+'占臺' => '佔臺',
+'占英' => '佔英',
+'占萬' => '佔萬',
+'占万' => '佔萬',
+'占著名' => '佔著名',
+'占著者' => '佔著者',
+'占葡' => '佔葡',
+'占蘇' => '佔蘇',
+'占苏' => '佔蘇',
+'占西' => '佔西',
+'占資' => '佔資',
+'占资' => '佔資',
+'占起' => '佔起',
+'占超过' => '佔超過',
+'占超過' => '佔超過',
+'占過' => '佔過',
+'占过' => '佔過',
+'占道' => '佔道',
+'占零' => '佔零',
+'占領' => '佔領',
+'占领' => '佔領',
+'占头' => '佔頭',
+'占頭' => '佔頭',
+'占头筹' => '佔頭籌',
+'占頭籌' => '佔頭籌',
+'占香' => '佔香',
+'占馬' => '佔馬',
+'占马' => '佔馬',
+'占高枝' => '佔高枝',
+'維德角' => '佛得角',
+'作品里' => '作品裏',
+'來著' => '來着',
+'來著作' => '來著作',
+'來著名' => '來著名',
+'來著書' => '來著書',
+'來著稱' => '來著稱',
+'來著者' => '來著者',
+'來著述' => '來著述',
+'來著錄' => '來著錄',
+'侵占' => '侵佔',
+'俄占' => '俄佔',
+'保障著' => '保障着',
+'保障著作' => '保障著作',
+'保障著名' => '保障著名',
+'保障著書' => '保障著書',
+'保障著稱' => '保障著稱',
+'保障著者' => '保障著者',
+'保障著述' => '保障著述',
+'保障著錄' => '保障著錄',
+'信著' => '信着',
+'信著作' => '信著作',
+'信著名' => '信著名',
+'信著書' => '信著書',
+'信著稱' => '信著稱',
+'信著者' => '信著者',
+'信著述' => '信著述',
+'信著錄' => '信著錄',
+'个里' => '個裏',
+'倒楣' => '倒霉',
+'候著' => '候着',
+'候著作' => '候著作',
+'候著名' => '候著名',
+'候著書' => '候著書',
+'候著稱' => '候著稱',
+'候著者' => '候著者',
+'候著述' => '候著述',
+'候著錄' => '候著錄',
+'借著' => '借着',
+'借著作' => '借著作',
+'借著名' => '借著名',
+'借著書' => '借著書',
+'借著稱' => '借著稱',
+'借著者' => '借著者',
+'借著述' => '借著述',
+'借著錄' => '借著錄',
+'假里' => '假裏',
+'做著' => '做着',
+'做著作' => '做著作',
+'做著名' => '做著名',
+'做著書' => '做著書',
+'做著稱' => '做著稱',
+'做著者' => '做著者',
+'做著述' => '做著述',
+'做著錄' => '做著錄',
+'金氏世界紀錄' => '健力士世界紀錄',
+'吉尼斯世界纪录' => '健力士世界紀錄',
+'側著' => '側着',
+'側著作' => '側著作',
+'側著名' => '側著名',
+'側著書' => '側著書',
+'側著稱' => '側著稱',
+'側著者' => '側著者',
+'側著述' => '側著述',
+'側著錄' => '側著錄',
+'偷著' => '偷着',
+'偷著作' => '偷著作',
+'偷著名' => '偷著名',
+'偷著書' => '偷著書',
+'偷著稱' => '偷著稱',
+'偷著者' => '偷著者',
+'偷著述' => '偷著述',
+'偷著錄' => '偷著錄',
+'備著' => '備着',
+'備著作' => '備著作',
+'備著名' => '備著名',
+'備著書' => '備著書',
+'備著稱' => '備著稱',
+'備著者' => '備著者',
+'備著述' => '備著述',
+'備著錄' => '備著錄',
+'傻里傻气' => '傻裏傻氣',
+'雇员' => '僱員',
+'雇用' => '僱用',
+'凶惡' => '兇惡',
+'凶殘' => '兇殘',
+'凶殺' => '兇殺',
+'先占' => '先佔',
+'雪鐵龍' => '先進',
+'雪铁龙' => '先進',
+'光著' => '光着',
+'光著作' => '光著作',
+'光著名' => '光著名',
+'光著書' => '光著書',
+'光著稱' => '光著稱',
+'光著者' => '光著者',
+'光著述' => '光著述',
+'光著錄' => '光著錄',
+'柯林頓' => '克林頓',
+'克羅埃西亞' => '克羅地亞',
+'公布' => '公佈',
+'冀著' => '冀着',
+'冀著作' => '冀著作',
+'冀著名' => '冀著名',
+'冀著書' => '冀著書',
+'冀著稱' => '冀著稱',
+'冀著者' => '冀著者',
+'冀著述' => '冀著述',
+'冀著錄' => '冀著錄',
+'冒著' => '冒着',
+'冒著作' => '冒著作',
+'冒著名' => '冒著名',
+'冒著書' => '冒著書',
+'冒著稱' => '冒著稱',
+'冒著者' => '冒著者',
+'冒著述' => '冒著述',
+'冒著錄' => '冒著錄',
+'冰山里' => '冰山裏',
+'恺撒' => '凱撒',
+'函数里' => '函數裏',
+'分布' => '分佈',
+'分占' => '分佔',
+'錢尼' => '切尼',
+'切尔诺贝利' => '切爾諾貝爾',
+'列支敦斯登' => '列支敦士登',
+'別著' => '別着',
+'賴比瑞亞' => '利比里亞',
+'刮著' => '刮着',
+'到山里' => '到山裏',
+'制著' => '制着',
+'制著作' => '制著作',
+'制著名' => '制著名',
+'制著書' => '制著書',
+'制著稱' => '制著稱',
+'制著者' => '制著者',
+'制著述' => '制著述',
+'制著錄' => '制著錄',
+'刻著' => '刻着',
+'刻著作' => '刻著作',
+'刻著名' => '刻著名',
+'刻著書' => '刻著書',
+'刻著稱' => '刻著稱',
+'刻著者' => '刻著者',
+'刻著述' => '刻著述',
+'刻著錄' => '刻著錄',
+'前波莫瑞' => '前波美拉尼亞',
+'剪彩' => '剪綵',
+'割占' => '割佔',
+'劃著' => '劃着',
+'擊劍' => '劍擊',
+'击剑' => '劍擊',
+'加薩走廊' => '加沙地帶',
+'迦納' => '加納',
+'加彭' => '加蓬',
+'努力著' => '努力着',
+'努力著作' => '努力著作',
+'努力著名' => '努力著名',
+'努力著書' => '努力著書',
+'努力著稱' => '努力著稱',
+'努力著者' => '努力著者',
+'努力著述' => '努力著述',
+'努力著錄' => '努力著錄',
+'努著' => '努着',
+'努著作' => '努著作',
+'努著名' => '努著名',
+'努著書' => '努著書',
+'努著稱' => '努著稱',
+'努著者' => '努著者',
+'努著述' => '努著述',
+'努著錄' => '努著錄',
+'布蘭登堡' => '勃蘭登堡',
+'動著' => '動着',
+'動著作' => '動著作',
+'動著名' => '動著名',
+'動著書' => '動著書',
+'動著稱' => '動著稱',
+'動著者' => '動著者',
+'動著述' => '動著述',
+'動著錄' => '動著錄',
+'包著' => '包着',
+'北朝鲜' => '北韓',
+'南朝鲜' => '南韓',
+'波札那' => '博茨瓦納',
+'占卜' => '占卜',
+'占國橋' => '占國橋',
+'占国桥' => '占國橋',
+'占有五不' => '占有五不',
+'占著作' => '占著作',
+'占著稱' => '占著稱',
+'占著述' => '占著述',
+'占著錄' => '占著錄',
+'卡普里亚蒂' => '卡佩雅蒂',
+'喀拉蚩' => '卡拉奇',
+'卡斯楚' => '卡斯特羅',
+'臥' => '卧',
+'印著' => '印着',
+'印著作' => '印著作',
+'印著名' => '印著名',
+'印著書' => '印著書',
+'印著稱' => '印著稱',
+'印著者' => '印著者',
+'印著述' => '印著述',
+'印著錄' => '印著錄',
+'瓜地馬拉' => '危地馬拉',
+'厄瓜多' => '厄瓜多爾',
+'厄瓜多爾' => '厄瓜多爾',
+'厄瓜多尔' => '厄瓜多爾',
+'厄利垂亚' => '厄立特里亞',
+'厄利垂亞' => '厄立特里亞',
+'源代码' => '原始碼',
+'去山里' => '去山裏',
+'去著' => '去着',
+'去著作' => '去著作',
+'去著名' => '去著名',
+'去著書' => '去著書',
+'去著稱' => '去著稱',
+'去著者' => '去著者',
+'去著述' => '去著述',
+'去著錄' => '去著錄',
+'参数里' => '參數裏',
+'受著' => '受着',
+'受著作' => '受著作',
+'受著名' => '受著名',
+'受著書' => '受著書',
+'受著稱' => '受著稱',
+'受著者' => '受著者',
+'受著述' => '受著述',
+'受著錄' => '受著錄',
+'丛林里' => '叢林裏',
+'口里' => '口裏',
+'只占' => '只佔',
+'叫著' => '叫着',
+'叫著作' => '叫著作',
+'叫著名' => '叫著名',
+'叫著書' => '叫著書',
+'叫著稱' => '叫著稱',
+'叫著者' => '叫著者',
+'叫著述' => '叫著述',
+'叫著錄' => '叫著錄',
+'古柯鹼' => '可卡因',
+'叱吒' => '叱咤',
+'斯皮尔伯格' => '史匹堡',
+'史匹柏' => '史匹堡',
+'史蒂芬·史匹柏' => '史提芬·史匹堡',
+'斯蒂芬·斯皮尔伯格' => '史提芬·史匹堡',
+'吃不著' => '吃不着',
+'吃得著' => '吃得着',
+'吃著' => '吃着',
+'吃里扒外' => '吃裏扒外',
+'吃里爬外' => '吃裏爬外',
+'吉布地' => '吉布堤',
+'吉尔吉斯斯坦' => '吉爾吉斯',
+'吊著' => '吊着',
+'向著' => '向着',
+'向著作' => '向著作',
+'向著名' => '向著名',
+'向著書' => '向著書',
+'向著稱' => '向著稱',
+'向著者' => '向著者',
+'向著述' => '向著述',
+'向著錄' => '向著錄',
+'吞占' => '吞佔',
+'吧台' => '吧枱',
+'含著' => '含着',
+'含著作' => '含著作',
+'含著名' => '含著名',
+'含著書' => '含著書',
+'含著稱' => '含著稱',
+'含著者' => '含著者',
+'含著述' => '含著述',
+'含著錄' => '含著錄',
+'吹著' => '吹着',
+'吹著作' => '吹著作',
+'吹著名' => '吹著名',
+'吹著書' => '吹著書',
+'吹著稱' => '吹著稱',
+'吹著者' => '吹著者',
+'吹著述' => '吹著述',
+'吹著錄' => '吹著錄',
+'呆著' => '呆着',
+'呆里呆气' => '呆裏呆氣',
+'味著' => '味着',
+'味著作' => '味著作',
+'味著名' => '味著名',
+'味著書' => '味著書',
+'味著稱' => '味著稱',
+'味著者' => '味著者',
+'味著述' => '味著述',
+'味著錄' => '味著錄',
+'咖哩' => '咖喱',
+'麦克风' => '咪高峰',
+'麥克風' => '咪高峰',
+'哥特式' => '哥德式',
+'哥斯大黎加' => '哥斯達黎加',
+'哪里' => '哪裏',
+'哭著' => '哭着',
+'哭著作' => '哭著作',
+'哭著名' => '哭著名',
+'哭著書' => '哭著書',
+'哭著稱' => '哭著稱',
+'哭著者' => '哭著者',
+'哭著述' => '哭著述',
+'哭著錄' => '哭著錄',
+'唱著' => '唱着',
+'唱著作' => '唱著作',
+'唱著名' => '唱著名',
+'唱著書' => '唱著書',
+'唱著稱' => '唱著稱',
+'唱著者' => '唱著者',
+'唱著述' => '唱著述',
+'唱著錄' => '唱著錄',
+'喝著' => '喝着',
+'喝著作' => '喝著作',
+'喝著名' => '喝著名',
+'喝著書' => '喝著書',
+'喝著稱' => '喝著稱',
+'喝著者' => '喝著者',
+'喝著述' => '喝著述',
+'喝著錄' => '喝著錄',
+'乔治·奥威尔' => '喬治·歐威爾',
+'單眼相機' => '單鏡反光機',
+'单反相机' => '單鏡反光機',
+'嗅不著' => '嗅不着',
+'嗅得著' => '嗅得着',
+'嗅著' => '嗅着',
+'凱薩琳' => '嘉芙蓮',
+'凯瑟琳' => '嘉芙蓮',
+'嘯吒' => '嘯咤',
+'嘴里' => '嘴裏',
+'嚷著' => '嚷着',
+'嚷著作' => '嚷著作',
+'嚷著名' => '嚷著名',
+'嚷著書' => '嚷著書',
+'嚷著稱' => '嚷著稱',
+'嚷著者' => '嚷著者',
+'嚷著述' => '嚷著述',
+'嚷著錄' => '嚷著錄',
+'回著' => '回着',
+'回著名' => '回著名',
+'因著' => '因着',
+'因著〈' => '因著〈',
+'因著《' => '因著《',
+'因著作' => '因著作',
+'因著名' => '因著名',
+'因著書' => '因著書',
+'因著稱' => '因著稱',
+'因著者' => '因著者',
+'因著述' => '因著述',
+'因著錄' => '因著錄',
+'困著' => '困着',
+'困著作' => '困著作',
+'困著名' => '困著名',
+'困著書' => '困著書',
+'困著稱' => '困著稱',
+'困著者' => '困著者',
+'困著述' => '困著述',
+'困著錄' => '困著錄',
+'圈占' => '圈佔',
+'圈里' => '圈裏',
+'西洋棋' => '國際象棋',
+'圍著' => '圍着',
+'圍著作' => '圍著作',
+'圍著名' => '圍著名',
+'圍著書' => '圍著書',
+'圍著稱' => '圍著稱',
+'圍著者' => '圍著者',
+'圍著述' => '圍著述',
+'圍著錄' => '圍著錄',
+'园里' => '園裏',
+'吐瓦魯' => '圖瓦盧',
+'土魯斯' => '圖盧茲',
+'图里的' => '圖裏的',
+'图里,' => '圖裏,',
+'土里' => '土裏',
+'在山里' => '在山裏',
+'在著' => '在着',
+'在著作' => '在著作',
+'在著名' => '在著名',
+'在著書' => '在著書',
+'在著稱' => '在著稱',
+'在著者' => '在著者',
+'在著述' => '在著述',
+'在著錄' => '在著錄',
+'蓋亞那' => '圭亞那',
+'地占' => '地佔',
+'地图里' => '地圖裏',
+'IP' => '地址',
+'堪培拉' => '坎培拉',
+'坐台' => '坐枱',
+'坐著' => '坐着',
+'坐著作' => '坐著作',
+'坐著名' => '坐著名',
+'坐著書' => '坐著書',
+'坐著稱' => '坐著稱',
+'坐著者' => '坐著者',
+'坐著述' => '坐著述',
+'坐著錄' => '坐著錄',
+'坑里' => '坑裏',
+'坦尚尼亞' => '坦桑尼亞',
+'衣索匹亞' => '埃塞俄比亚',
+'衣索比亞' => '埃塞俄比亞',
+'葉里溫' => '埃里溫',
+'城里' => '城裏',
+'域里' => '域裏',
+'吉里巴斯' => '基里巴斯',
+'场里' => '場裏',
+'塗著' => '塗着',
+'塞普勒斯' => '塞浦路斯',
+'賽普勒斯' => '塞浦路斯',
+'塞爾維亞與蒙特內哥羅' => '塞爾維亞和黑山',
+'塞席爾' => '塞舌爾',
+'壓著' => '壓着',
+'壓著作' => '壓著作',
+'壓著名' => '壓著名',
+'壓著書' => '壓著書',
+'壓著稱' => '壓著稱',
+'壓著者' => '壓著者',
+'壓著述' => '壓著述',
+'壓著錄' => '壓著錄',
+'壶里' => '壺裏',
+'多占' => '多佔',
+'夜晚里' => '夜晚裏',
+'夜里' => '夜裏',
+'夢有五不占' => '夢有五不占',
+'梦有五不占' => '夢有五不占',
+'夢著' => '夢着',
+'夢著作' => '夢著作',
+'夢著名' => '夢著名',
+'夢著書' => '夢著書',
+'夢著稱' => '夢著稱',
+'夢著者' => '夢著者',
+'夢著述' => '夢著述',
+'夢著錄' => '夢著錄',
+'梦里' => '夢裏',
+'天里' => '天裏',
+'宇航员' => '太空人',
+'夾著' => '夾着',
+'夾著作' => '夾著作',
+'夾著名' => '夾著名',
+'夾著書' => '夾著書',
+'夾著稱' => '夾著稱',
+'夾著者' => '夾著者',
+'夾著述' => '夾著述',
+'夾著錄' => '夾著錄',
+'奧占' => '奧佔',
+'奥占' => '奧佔',
+'歐巴馬' => '奧巴馬',
+'妆台' => '妝枱',
+'威斯伐倫' => '威斯特法倫',
+'威爾士' => '威爾斯',
+'威尔士' => '威爾斯',
+'子里' => '子裏',
+'字里行间' => '字裏行間',
+'存著' => '存着',
+'存著名' => '存著名',
+'孟德爾頌' => '孟德爾遜',
+'门德尔松' => '孟德爾遜',
+'孤著' => '孤着',
+'孤著作' => '孤著作',
+'孤著名' => '孤著名',
+'孤著書' => '孤著書',
+'孤著稱' => '孤著稱',
+'孤著者' => '孤著者',
+'孤著述' => '孤著述',
+'孤著錄' => '孤著錄',
+'學著' => '學着',
+'學著作' => '學著作',
+'學著名' => '學著名',
+'學著書' => '學著書',
+'學著稱' => '學著稱',
+'學著者' => '學著者',
+'學著述' => '學著述',
+'學著錄' => '學著錄',
+'学里' => '學裏',
+'守著' => '守着',
+'守著作' => '守著作',
+'守著名' => '守著名',
+'守著書' => '守著書',
+'守著稱' => '守著稱',
+'守著者' => '守著者',
+'守著述' => '守著述',
+'守著錄' => '守著錄',
+'安哈特' => '安哈爾特',
+'安地卡及巴布達' => '安提瓜和巴布達',
+'定著' => '定着',
+'定著作' => '定著作',
+'定著名' => '定著名',
+'定著書' => '定著書',
+'定著稱' => '定著稱',
+'定著者' => '定著者',
+'定著述' => '定著述',
+'定著錄' => '定著錄',
+'宣布' => '宣佈',
+'宫里' => '宮裏',
+'家里' => '家裏',
+'密布' => '密佈',
+'密西根' => '密歇根',
+'沃尓沃' => '富豪',
+'寡占' => '寡佔',
+'写字台' => '寫字枱',
+'寫著' => '寫着',
+'寫著作' => '寫著作',
+'寫著名' => '寫著名',
+'寫著書' => '寫著書',
+'寫著稱' => '寫著稱',
+'寫著者' => '寫著者',
+'寫著述' => '寫著述',
+'寫著錄' => '寫著錄',
+'宝里宝气' => '寶裏寶氣',
+'封面里' => '封面裏',
+'將占' => '將佔',
+'将占' => '將佔',
+'將占卜' => '將占卜',
+'将占卜' => '將占卜',
+'专辑里' => '專輯裏',
+'尋著' => '尋着',
+'尋著作' => '尋著作',
+'尋著名' => '尋著名',
+'尋著書' => '尋著書',
+'尋著稱' => '尋著稱',
+'尋著者' => '尋著者',
+'尋著述' => '尋著述',
+'尋著錄' => '尋著錄',
+'對著' => '對着',
+'對著作' => '對著作',
+'對著名' => '對著名',
+'對著書' => '對著書',
+'對著稱' => '對著稱',
+'對著者' => '對著者',
+'對著述' => '對著述',
+'對著錄' => '對著錄',
+'少占' => '少佔',
+'就里' => '就裏',
+'尼克松' => '尼克遜',
+'奈及利亞' => '尼日利亞',
+'局里' => '局裏',
+'屋里' => '屋裏',
+'展著' => '展着',
+'展著作' => '展著作',
+'展著名' => '展著名',
+'展著書' => '展著書',
+'展著稱' => '展著稱',
+'展著者' => '展著者',
+'展著述' => '展著述',
+'展著錄' => '展著錄',
+'屯里' => '屯裏',
+'山里有' => '山裏有',
+'山里的' => '山裏的',
+'甘比亞' => '岡比亞',
+'岸裡' => '岸裡',
+'工作台' => '工作枱',
+'已占' => '已佔',
+'巴塞罗那' => '巴塞隆拿',
+'巴塞隆納' => '巴塞隆拿',
+'巴貝多' => '巴巴多斯',
+'巴布亞紐幾內亞' => '巴布亞新畿內亞',
+'巴士拉' => '巴斯拉',
+'巷里' => '巷裏',
+'市占' => '市佔',
+'市里' => '市裏',
+'布吉納法索' => '布基納法索',
+'布什' => '布殊',
+'布里斯托尔' => '布里斯托',
+'蒲隆地' => '布隆迪',
+'席哈克' => '希拉克',
+'希拉蕊' => '希拉里',
+'希特勒' => '希特拉',
+'帛琉' => '帕勞',
+'巴尔米拉环礁' => '帕邁拉環礁',
+'帕劳' => '帛琉',
+'帶著' => '帶着',
+'帶著作' => '帶著作',
+'帶著名' => '帶著名',
+'帶著書' => '帶著書',
+'帶著稱' => '帶著稱',
+'帶著者' => '帶著者',
+'帶著述' => '帶著述',
+'帶著錄' => '帶著錄',
+'幅图里' => '幅圖裏',
+'幫著' => '幫着',
+'幫著作' => '幫著作',
+'幫著名' => '幫著名',
+'幫著書' => '幫著書',
+'幫著稱' => '幫著稱',
+'幫著者' => '幫著者',
+'幫著述' => '幫著述',
+'幫著錄' => '幫著錄',
+'干着急' => '干着急',
+'賓士' => '平治',
+'年代里' => '年代裏',
+'年里' => '年裏',
+'干着' => '幹着',
+'幹著' => '幹着',
+'幹著名' => '幹著名',
+'幹著稱' => '幹著稱',
+'幾內亞比索' => '幾內亞比紹',
+'店里' => '店裏',
+'坎城' => '康城',
+'戛纳' => '康城',
+'康著' => '康着',
+'康著作' => '康著作',
+'康著名' => '康著名',
+'康著書' => '康著書',
+'康著稱' => '康著稱',
+'康著者' => '康著者',
+'康著述' => '康著述',
+'康著錄' => '康著錄',
+'庙里' => '廟裏',
+'强占' => '強佔',
+'強占' => '強佔',
+'约翰斯顿岛' => '強斯頓環礁',
+'弹子台' => '彈子枱',
+'蹦床' => '彈床',
+'弹珠台' => '彈珠枱',
+'形上學' => '形而上學',
+'谢丽·布莱尔' => '彭雪玲',
+'往里' => '往裏',
+'待著' => '待着',
+'待著作' => '待著作',
+'待著名' => '待著名',
+'待著書' => '待著書',
+'待著稱' => '待著稱',
+'待著者' => '待著者',
+'待著述' => '待著述',
+'待著錄' => '待著錄',
+'得著' => '得着',
+'得著作' => '得著作',
+'得著名' => '得著名',
+'得著書' => '得著書',
+'得著稱' => '得著稱',
+'得著者' => '得著者',
+'得著述' => '得著述',
+'得著錄' => '得著錄',
+'从图里' => '從圖裏',
+'从山里' => '從山裏',
+'从里到外' => '從裏到外',
+'从里向外' => '從裏向外',
+'循著' => '循着',
+'循著作' => '循著作',
+'循著名' => '循著名',
+'循著書' => '循著書',
+'循著稱' => '循著稱',
+'循著者' => '循著者',
+'循著述' => '循著述',
+'循著錄' => '循著錄',
+'徵占' => '徵佔',
+'征占' => '徵佔',
+'德占' => '德佔',
+'得克萨斯' => '德克薩斯',
+'德勒斯登' => '德累斯頓',
+'澈底' => '徹底',
+'心著' => '心着',
+'心著作' => '心著作',
+'心著名' => '心著名',
+'心著書' => '心著書',
+'心著稱' => '心著稱',
+'心著者' => '心著者',
+'心著述' => '心著述',
+'心著錄' => '心著錄',
+'心里' => '心裏',
+'心里面' => '心裏面',
+'忍著' => '忍着',
+'忍著作' => '忍著作',
+'忍著名' => '忍著名',
+'忍著書' => '忍著書',
+'忍著稱' => '忍著稱',
+'忍著者' => '忍著者',
+'忍著述' => '忍著述',
+'忍著錄' => '忍著錄',
+'志著作' => '志著作',
+'志著名' => '志著名',
+'志著書' => '志著書',
+'志著稱' => '志著稱',
+'志著者' => '志著者',
+'志著述' => '志著述',
+'志著錄' => '志著錄',
+'忙著' => '忙着',
+'忙著作' => '忙著作',
+'忙著名' => '忙著名',
+'忙著書' => '忙著書',
+'忙著稱' => '忙著稱',
+'忙著者' => '忙著者',
+'忙著述' => '忙著述',
+'忙著錄' => '忙著錄',
+'忙里' => '忙裏',
+'急著' => '急着',
+'急著作' => '急著作',
+'急著名' => '急著名',
+'急著書' => '急著書',
+'急著稱' => '急著稱',
+'急著者' => '急著者',
+'急著述' => '急著述',
+'急著錄' => '急著錄',
+'性著' => '性着',
+'性著作' => '性著作',
+'性著名' => '性著名',
+'性著書' => '性著書',
+'性著稱' => '性著稱',
+'性著者' => '性著者',
+'性著述' => '性著述',
+'性著錄' => '性著錄',
+'怪里怪气' => '怪裏怪氣',
+'悠著' => '悠着',
+'悠著作' => '悠著作',
+'悠著名' => '悠著名',
+'悠著書' => '悠著書',
+'悠著稱' => '悠著稱',
+'悠著者' => '悠著者',
+'悠著述' => '悠著述',
+'悠著錄' => '悠著錄',
+'悶著' => '悶着',
+'想象' => '想像',
+'想著' => '想着',
+'想著作' => '想著作',
+'想著名' => '想著名',
+'想著書' => '想著書',
+'想著稱' => '想著稱',
+'想著者' => '想著者',
+'想著述' => '想著述',
+'想著錄' => '想著錄',
+'義占' => '意佔',
+'意占' => '意佔',
+'義大利' => '意大利',
+'艾滋' => '愛滋',
+'愛著' => '愛着',
+'愛著作' => '愛著作',
+'愛著名' => '愛著名',
+'愛著書' => '愛著書',
+'愛著稱' => '愛著稱',
+'愛著者' => '愛著者',
+'愛著述' => '愛著述',
+'愛著錄' => '愛著錄',
+'慌里慌张' => '慌裏慌張',
+'慣著' => '慣着',
+'慣著作' => '慣著作',
+'慣著名' => '慣著名',
+'慣著書' => '慣著書',
+'慣著稱' => '慣著稱',
+'慣著者' => '慣著者',
+'慣著述' => '慣著述',
+'慣著錄' => '慣著錄',
+'宪法里' => '憲法裏',
+'应用程序' => '應用程式',
+'應著' => '應着',
+'應著作' => '應著作',
+'應著名' => '應著名',
+'應著書' => '應著書',
+'應著稱' => '應著稱',
+'應著者' => '應著者',
+'應著述' => '應著述',
+'應著錄' => '應著錄',
+'懷著' => '懷着',
+'懷著作' => '懷著作',
+'懷著名' => '懷著名',
+'懷著書' => '懷著書',
+'懷著稱' => '懷著稱',
+'懷著者' => '懷著者',
+'懷著述' => '懷著述',
+'懷著錄' => '懷著錄',
+'怀里' => '懷裏',
+'戀著' => '戀着',
+'戀著作' => '戀著作',
+'戀著名' => '戀著名',
+'戀著書' => '戀著書',
+'戀著稱' => '戀著稱',
+'戀著者' => '戀著者',
+'戀著述' => '戀著述',
+'戀著錄' => '戀著錄',
+'戈巴契夫' => '戈爾巴喬夫',
+'戰著' => '戰着',
+'戰著作' => '戰著作',
+'戰著名' => '戰著名',
+'戰著書' => '戰著書',
+'戰著稱' => '戰著稱',
+'戰著者' => '戰著者',
+'戰著述' => '戰著述',
+'戰著錄' => '戰著錄',
+'戏彩娱亲' => '戲綵娛親',
+'戲彩娛親' => '戲綵娛親',
+'戏里' => '戲裏',
+'撒切尔' => '戴卓爾',
+'柴契爾' => '戴卓爾',
+'狄安娜' => '戴安娜',
+'黛安娜' => '戴安娜',
+'戴著' => '戴着',
+'戴著作' => '戴著作',
+'戴著名' => '戴著名',
+'戴著書' => '戴著書',
+'戴著稱' => '戴著稱',
+'戴著者' => '戴著者',
+'戴著述' => '戴著述',
+'戴著錄' => '戴著錄',
+'房里' => '房裏',
+'所占' => '所佔',
+'索羅門群島' => '所羅門群島',
+'手里' => '手裏',
+'手里剑' => '手裏劍',
+'列印' => '打印',
+'印表機' => '打印機',
+'打著' => '打着',
+'打著作' => '打著作',
+'打著名' => '打著名',
+'打著書' => '打著書',
+'打著稱' => '打著稱',
+'打著者' => '打著者',
+'打著述' => '打著述',
+'打著錄' => '打著錄',
+'扛著' => '扛着',
+'扛著作' => '扛著作',
+'扛著名' => '扛著名',
+'扛著書' => '扛著書',
+'扛著稱' => '扛著稱',
+'扛著者' => '扛著者',
+'扛著述' => '扛著述',
+'扛著錄' => '扛著錄',
+'找不著' => '找不着',
+'找得著' => '找得着',
+'抓著' => '抓着',
+'抓著作' => '抓著作',
+'抓著名' => '抓著名',
+'抓著稱' => '抓著稱',
+'抓著者' => '抓著者',
+'抓著述' => '抓著述',
+'抓著錄' => '抓著錄',
+'披著' => '披着',
+'披著作' => '披著作',
+'披著名' => '披著名',
+'披著書' => '披著書',
+'披著稱' => '披著稱',
+'披著者' => '披著者',
+'披著述' => '披著述',
+'披著錄' => '披著錄',
+'抬著' => '抬着',
+'抬著作' => '抬著作',
+'抬著名' => '抬著名',
+'抬著稱' => '抬著稱',
+'抬著者' => '抬著者',
+'抬著述' => '抬著述',
+'抬著錄' => '抬著錄',
+'抱著' => '抱着',
+'抱著作' => '抱著作',
+'抱著名' => '抱著名',
+'抱著稱' => '抱著稱',
+'抱著者' => '抱著者',
+'抱著述' => '抱著述',
+'抱著錄' => '抱著錄',
+'拉著' => '拉着',
+'拉著作' => '拉著作',
+'拉著名' => '拉著名',
+'拉著書' => '拉著書',
+'拉著稱' => '拉著稱',
+'拉著者' => '拉著者',
+'拉著述' => '拉著述',
+'拉著錄' => '拉著錄',
+'拎著' => '拎着',
+'拎著作' => '拎著作',
+'拎著名' => '拎著名',
+'拎著稱' => '拎著稱',
+'拎著者' => '拎著者',
+'拎著述' => '拎著述',
+'拎著錄' => '拎著錄',
+'拖著' => '拖着',
+'拖著作' => '拖著作',
+'拖著名' => '拖著名',
+'拖著稱' => '拖著稱',
+'拖著者' => '拖著者',
+'拖著述' => '拖著述',
+'拖著錄' => '拖著錄',
+'拼著' => '拼着',
+'拼著作' => '拼著作',
+'拼著名' => '拼著名',
+'拼著稱' => '拼著稱',
+'拼著者' => '拼著者',
+'拼著述' => '拼著述',
+'拼著錄' => '拼著錄',
+'拿著' => '拿着',
+'拿著作' => '拿著作',
+'拿著名' => '拿著名',
+'拿著稱' => '拿著稱',
+'拿著者' => '拿著者',
+'拿著述' => '拿著述',
+'拿著錄' => '拿著錄',
+'持著' => '持着',
+'持著作' => '持著作',
+'持著名' => '持著名',
+'持著稱' => '持著稱',
+'持著者' => '持著者',
+'持著述' => '持著述',
+'持著錄' => '持著錄',
+'挑著' => '挑着',
+'挑著作' => '挑著作',
+'挑著名' => '挑著名',
+'挑著稱' => '挑著稱',
+'挑著者' => '挑著者',
+'挑著述' => '挑著述',
+'挑著錄' => '挑著錄',
+'挨著' => '挨着',
+'挨著作' => '挨著作',
+'挨著名' => '挨著名',
+'挨著稱' => '挨著稱',
+'挨著者' => '挨著者',
+'挨著述' => '挨著述',
+'挨著錄' => '挨著錄',
+'捆著' => '捆着',
+'捆著作' => '捆著作',
+'捆著名' => '捆著名',
+'捆著稱' => '捆著稱',
+'捆著者' => '捆著者',
+'捆著述' => '捆著述',
+'捆著錄' => '捆著錄',
+'俯卧撑' => '掌上壓',
+'伏地挺身' => '掌上壓',
+'掖著' => '掖着',
+'掖著作' => '掖著作',
+'掖著名' => '掖著名',
+'掖著稱' => '掖著稱',
+'掖著者' => '掖著者',
+'掖著述' => '掖著述',
+'掖著錄' => '掖著錄',
+'掙著' => '掙着',
+'掙著作' => '掙著作',
+'掙著名' => '掙著名',
+'掙著書' => '掙著書',
+'掙著稱' => '掙著稱',
+'掙著者' => '掙著者',
+'掙著述' => '掙著述',
+'掙著錄' => '掙著錄',
+'掛著' => '掛着',
+'接著' => '接着',
+'接著作' => '接著作',
+'接著名' => '接著名',
+'接著稱' => '接著稱',
+'接著者' => '接著者',
+'接著述' => '接著述',
+'接著錄' => '接著錄',
+'揉著' => '揉着',
+'揉著作' => '揉著作',
+'揉著名' => '揉著名',
+'揉著書' => '揉著書',
+'揉著稱' => '揉著稱',
+'揉著者' => '揉著者',
+'揉著述' => '揉著述',
+'揉著錄' => '揉著錄',
+'提著' => '提着',
+'提著作' => '提著作',
+'提著名' => '提著名',
+'提著稱' => '提著稱',
+'提著者' => '提著者',
+'提著述' => '提著述',
+'提著錄' => '提著錄',
+'揮著' => '揮着',
+'揮著作' => '揮著作',
+'揮著名' => '揮著名',
+'揮著稱' => '揮著稱',
+'揮著者' => '揮著者',
+'揮著述' => '揮著述',
+'揮著錄' => '揮著錄',
+'搜索引擎' => '搜尋引擎',
+'抢占' => '搶佔',
+'搶占' => '搶佔',
+'摟著' => '摟着',
+'摟著作' => '摟著作',
+'摟著名' => '摟著名',
+'摟著稱' => '摟著稱',
+'摟著者' => '摟著者',
+'摟著述' => '摟著述',
+'摟著錄' => '摟著錄',
+'折台' => '摺枱',
+'撒马尔罕' => '撒馬爾罕',
+'撼著' => '撼着',
+'撼著作' => '撼著作',
+'撼著名' => '撼著名',
+'撼著書' => '撼著書',
+'撼著稱' => '撼著稱',
+'撼著者' => '撼著者',
+'撼著述' => '撼著述',
+'撼著錄' => '撼著錄',
+'擋著' => '擋着',
+'擋著作' => '擋著作',
+'擋著名' => '擋著名',
+'擋著稱' => '擋著稱',
+'擋著者' => '擋著者',
+'擋著述' => '擋著述',
+'擋著錄' => '擋著錄',
+'擔著' => '擔着',
+'據著' => '據着',
+'據著作' => '據著作',
+'據著名' => '據著名',
+'據著書' => '據著書',
+'據著稱' => '據著稱',
+'據著者' => '據著者',
+'據著述' => '據著述',
+'據著錄' => '據著錄',
+'擡著' => '擡着',
+'摆布' => '擺佈',
+'擺布' => '擺佈',
+'擺著' => '擺着',
+'擺著作' => '擺著作',
+'擺著名' => '擺著名',
+'擺著稱' => '擺著稱',
+'擺著者' => '擺著者',
+'擺著述' => '擺著述',
+'擺著錄' => '擺著錄',
+'攻占' => '攻佔',
+'放著' => '放着',
+'放著作' => '放著作',
+'放著名' => '放著名',
+'放著称' => '放著稱',
+'放著稱' => '放著稱',
+'敞著' => '敞着',
+'敞著作' => '敞著作',
+'敞著名' => '敞著名',
+'敞著稱' => '敞著稱',
+'敞著者' => '敞著者',
+'敞著述' => '敞著述',
+'敞著錄' => '敞著錄',
+'散布' => '散佈',
+'數著' => '數着',
+'数字技术' => '數碼技術',
+'數位技術' => '數碼技術',
+'數位相機' => '數碼相機',
+'數碼訊號' => '數碼訊號',
+'数字信号' => '數碼訊號',
+'數位電視' => '數碼電視',
+'数字电视' => '數碼電視',
+'數著作' => '數著作',
+'數著名' => '數著名',
+'數著稱' => '數著稱',
+'數著者' => '數著者',
+'數著述' => '數著述',
+'數著錄' => '數著錄',
+'斥著' => '斥着',
+'斥著作' => '斥著作',
+'斥著名' => '斥著名',
+'斥著書' => '斥著書',
+'斥著稱' => '斥著稱',
+'斥著者' => '斥著者',
+'斥著述' => '斥著述',
+'斥著錄' => '斥著錄',
+'史瓦濟蘭' => '斯威士蘭',
+'斯洛維尼亞' => '斯洛文尼亞',
+'紐澳良' => '新奧爾良',
+'紐西蘭' => '新西蘭',
+'方法里' => '方法裏',
+'族里' => '族裏',
+'日占' => '日佔',
+'日里' => '日裏',
+'昂山素季' => '昂山素姬',
+'翁山蘇姬' => '昂山素姬',
+'昂著' => '昂着',
+'昂著作' => '昂著作',
+'昂著名' => '昂著名',
+'昂著書' => '昂著書',
+'昂著稱' => '昂著稱',
+'昂著者' => '昂著者',
+'昂著述' => '昂著述',
+'昂著錄' => '昂著錄',
+'星羅棋布' => '星羅棋佈',
+'星罗棋布' => '星羅棋佈',
+'映著' => '映着',
+'映著作' => '映著作',
+'映著名' => '映著名',
+'映著書' => '映著書',
+'映著稱' => '映著稱',
+'映著者' => '映著者',
+'映著述' => '映著述',
+'映著錄' => '映著錄',
+'晃著' => '晃着',
+'晃著作' => '晃著作',
+'晃著名' => '晃著名',
+'晃著稱' => '晃著稱',
+'晃著者' => '晃著者',
+'晃著述' => '晃著述',
+'晃著錄' => '晃著錄',
+'芯片' => '晶片',
+'晶元' => '晶片',
+'智慧型' => '智能',
+'智慧卡' => '智能卡',
+'智慧手機' => '智能手機',
+'暗地里' => '暗地裏',
+'暗沟里' => '暗溝裏',
+'暗著' => '暗着',
+'暗著作' => '暗著作',
+'暗著名' => '暗著名',
+'暗著書' => '暗著書',
+'暗著稱' => '暗著稱',
+'暗著者' => '暗著者',
+'暗著述' => '暗著述',
+'暗著錄' => '暗著錄',
+'暗里' => '暗裏',
+'會占' => '會佔',
+'会占' => '會佔',
+'會占卜' => '會占卜',
+'会占卜' => '會占卜',
+'会里' => '會裏',
+'有著' => '有着',
+'有著作' => '有著作',
+'有著名' => '有著名',
+'有著書' => '有著書',
+'有著稱' => '有著稱',
+'有著者' => '有著者',
+'有著述' => '有著述',
+'有著錄' => '有著錄',
+'罗纳德·里根' => '朗奴·列根',
+'罗纳尔多' => '朗拿度',
+'罗纳尔迪尼奥' => '朗拿甸奴',
+'望著' => '望着',
+'望著作' => '望著作',
+'望著名' => '望著名',
+'望著書' => '望著書',
+'望著稱' => '望著稱',
+'望著者' => '望著者',
+'望著述' => '望著述',
+'望著錄' => '望著錄',
+'朝著' => '朝着',
+'朝著作' => '朝著作',
+'朝著名' => '朝著名',
+'朝著稱' => '朝著稱',
+'朝著者' => '朝著者',
+'朝著述' => '朝著述',
+'朝著錄' => '朝著錄',
+'板球' => '木球',
+'班傑明' => '本傑明',
+'本著' => '本着',
+'本著作' => '本著作',
+'本著名' => '本著名',
+'本著書' => '本著書',
+'本著稱' => '本著稱',
+'本著者' => '本著者',
+'本著述' => '本著述',
+'本著錄' => '本著錄',
+'里瓦尔多' => '李華度',
+'村里' => '村裏',
+'杜塞道夫' => '杜塞爾多夫',
+'迪拜' => '杜拜',
+'亚细安' => '東盟',
+'東協' => '東盟',
+'板著臉' => '板着臉',
+'枕著' => '枕着',
+'枕著作' => '枕著作',
+'枕著名' => '枕著名',
+'枕著稱' => '枕著稱',
+'枕著者' => '枕著者',
+'枕著述' => '枕著述',
+'枕著錄' => '枕著錄',
+'檯' => '枱',
+'台布' => '枱布',
+'台历' => '枱曆',
+'台灯' => '枱燈',
+'台面上' => '枱面上',
+'柏林墙' => '柏林圍牆',
+'奧黛莉·朵杜' => '柯德莉·塔圖',
+'奥黛丽·赫本' => '柯德莉·夏萍',
+'奧黛麗·赫本' => '柯德莉·夏萍',
+'哥廷根' => '格丁根',
+'格瑞那達' => '格林納達',
+'格鲁吉亚' => '格魯吉亞',
+'撞球' => '桌球',
+'台球' => '桌球',
+'梅鐸' => '梅鐸',
+'默多克' => '梅鐸',
+'梳著' => '梳着',
+'梳著作' => '梳著作',
+'梳著名' => '梳著名',
+'梳著稱' => '梳著稱',
+'梳著者' => '梳著者',
+'梳著述' => '梳著述',
+'梳著錄' => '梳著錄',
+'棉里' => '棉裏',
+'桑巴舞' => '森巴舞',
+'森林里' => '森林裏',
+'棺材里' => '棺材裏',
+'榴莲' => '榴槤',
+'榴蓮' => '榴槤',
+'樂著' => '樂着',
+'樂著作' => '樂著作',
+'樂著名' => '樂著名',
+'樂著書' => '樂著書',
+'樂著稱' => '樂著稱',
+'樂著者' => '樂著者',
+'樂著述' => '樂著述',
+'樂著錄' => '樂著錄',
+'標志著' => '標志着',
+'寶獅' => '標致',
+'標誌著' => '標誌着',
+'树林里' => '樹林裏',
+'工具機' => '機床',
+'機器人' => '機械人',
+'机器人' => '機械人',
+'柜台' => '櫃枱',
+'历史里' => '歷史裏',
+'死里求生' => '死裏求生',
+'死里逃生' => '死裏逃生',
+'殺著' => '殺着',
+'殺著作' => '殺著作',
+'殺著名' => '殺著名',
+'殺著書' => '殺著書',
+'殺著稱' => '殺著稱',
+'殺著者' => '殺著者',
+'殺著述' => '殺著述',
+'殺著錄' => '殺著錄',
+'壳里' => '殼裏',
+'茅利塔尼亞' => '毛里塔尼亞',
+'模里西斯' => '毛里裘斯',
+'毛里求斯' => '毛里裘斯',
+'公厘' => '毫米',
+'公釐' => '毫米',
+'水来汤里去' => '水來湯裏去',
+'水里' => '水裏',
+'求著' => '求着',
+'求著作' => '求著作',
+'求著名' => '求著名',
+'求著書' => '求著書',
+'求著稱' => '求著稱',
+'求著者' => '求著者',
+'求著述' => '求著述',
+'求著錄' => '求著錄',
+'池里' => '池裏',
+'汙' => '污',
+'文莱' => '汶萊',
+'沈著' => '沈着',
+'沉著' => '沉着',
+'沉著作' => '沉著作',
+'沉著名' => '沉著名',
+'沉著書' => '沉著書',
+'沉著稱' => '沉著稱',
+'沉著者' => '沉著者',
+'沉著述' => '沉著述',
+'沉著錄' => '沉著錄',
+'沖著' => '沖着',
+'沖著。' => '沖著。',
+'沖著《' => '沖著《',
+'沖著,' => '沖著,',
+'沙烏地阿拉伯' => '沙特阿拉伯',
+'沙地阿拉伯' => '沙特阿拉伯',
+'沙里淘金' => '沙裏淘金',
+'河里' => '河裏',
+'沿著' => '沿着',
+'沿著作' => '沿著作',
+'沿著名' => '沿著名',
+'沿著書' => '沿著書',
+'沿著稱' => '沿著稱',
+'沿著者' => '沿著者',
+'沿著述' => '沿著述',
+'沿著錄' => '沿著錄',
+'法占' => '法佔',
+'法里,' => '法裏,',
+'玻里尼西亞' => '波利尼西亞',
+'波士尼亞' => '波斯尼亞',
+'波士尼亞赫塞哥維納' => '波斯尼亞黑塞哥維那',
+'幫浦' => '泵',
+'洞里' => '洞裏',
+'辛巴威' => '津巴布韋',
+'宏都拉斯' => '洪都拉斯',
+'活著' => '活着',
+'活著作' => '活著作',
+'活著名' => '活著名',
+'活著書' => '活著書',
+'活著稱' => '活著稱',
+'活著者' => '活著者',
+'活著述' => '活著述',
+'活著錄' => '活著錄',
+'移动网络' => '流動網絡',
+'行動網路' => '流動網絡',
+'行動電話' => '流動電話',
+'移动电话' => '流動電話',
+'流著' => '流着',
+'流著作' => '流著作',
+'流著名' => '流著名',
+'流著書' => '流著書',
+'流著稱' => '流著稱',
+'流著者' => '流著者',
+'流著述' => '流著述',
+'流著錄' => '流著錄',
+'流露著' => '流露着',
+'浮著' => '浮着',
+'蘭卡威' => '浮羅交怡',
+'浮著作' => '浮著作',
+'浮著名' => '浮著名',
+'浮著書' => '浮著書',
+'浮著稱' => '浮著稱',
+'浮著者' => '浮著者',
+'浮著述' => '浮著述',
+'浮著錄' => '浮著錄',
+'海上布雷' => '海上佈雷',
+'海洛因' => '海洛英',
+'海灣布雷' => '海灣佈雷',
+'海湾布雷' => '海灣佈雷',
+'涵著' => '涵着',
+'涵著作' => '涵著作',
+'涵著名' => '涵著名',
+'涵著書' => '涵著書',
+'涵著稱' => '涵著稱',
+'涵著者' => '涵著者',
+'涵著述' => '涵著述',
+'涵著錄' => '涵著錄',
+'涼著' => '涼着',
+'涼著作' => '涼著作',
+'涼著名' => '涼著名',
+'涼著書' => '涼著書',
+'涼著稱' => '涼著稱',
+'涼著者' => '涼著者',
+'涼著述' => '涼著述',
+'涼著錄' => '涼著錄',
+'深山里' => '深山裏',
+'渊里' => '淵裏',
+'渴著' => '渴着',
+'渴著作' => '渴著作',
+'渴著名' => '渴著名',
+'渴著書' => '渴著書',
+'渴著稱' => '渴著稱',
+'渴著者' => '渴著者',
+'渴著述' => '渴著述',
+'渴著錄' => '渴著錄',
+'湊合著' => '湊合着',
+'湖里' => '湖裏',
+'准将' => '準將',
+'准將' => '準將',
+'准尉' => '準尉',
+'溢著' => '溢着',
+'溢著作' => '溢著作',
+'溢著名' => '溢著名',
+'溢著書' => '溢著書',
+'溢著稱' => '溢著稱',
+'溢著者' => '溢著者',
+'溢著述' => '溢著述',
+'溢著錄' => '溢著錄',
+'演著' => '演着',
+'演著作' => '演著作',
+'演著名' => '演著名',
+'演著書' => '演著書',
+'演著稱' => '演著稱',
+'演著者' => '演著者',
+'演著述' => '演著述',
+'演著錄' => '演著錄',
+'漠里' => '漠裏',
+'漢諾瓦' => '漢諾威',
+'漫著' => '漫着',
+'漫著作' => '漫著作',
+'漫著名' => '漫著名',
+'漫著書' => '漫著書',
+'漫著稱' => '漫著稱',
+'漫著者' => '漫著者',
+'漫著述' => '漫著述',
+'漫著錄' => '漫著錄',
+'潜意识里' => '潛意識裏',
+'潤著' => '潤着',
+'潤著作' => '潤著作',
+'潤著名' => '潤著名',
+'潤著書' => '潤著書',
+'潤著稱' => '潤著稱',
+'潤著者' => '潤著者',
+'潤著述' => '潤著述',
+'潤著錄' => '潤著錄',
+'潭里' => '潭裏',
+'溼' => '濕',
+'火山里' => '火山裏',
+'火箭布雷' => '火箭佈雷',
+'為著' => '為着',
+'為著《' => '為著《',
+'為著作' => '為著作',
+'為著名' => '為著名',
+'為著稱' => '為著稱',
+'為著者' => '為著者',
+'為著述' => '為著述',
+'為著錄' => '為著錄',
+'菸' => '煙',
+'照占' => '照佔',
+'照著' => '照着',
+'照著作' => '照著作',
+'照著名' => '照著名',
+'照著書' => '照著書',
+'照著稱' => '照著稱',
+'照著者' => '照著者',
+'照著述' => '照著述',
+'照著錄' => '照著錄',
+'燒著' => '燒着',
+'燒著作' => '燒著作',
+'燒著名' => '燒著名',
+'燒著書' => '燒著書',
+'燒著稱' => '燒著稱',
+'燒著者' => '燒著者',
+'燒著述' => '燒著述',
+'燒著錄' => '燒著錄',
+'爭著' => '爭着',
+'爭著作' => '爭著作',
+'爭著名' => '爭著名',
+'爭著書' => '爭著書',
+'爭著稱' => '爭著稱',
+'爭著者' => '爭著者',
+'爭著述' => '爭著述',
+'爭著錄' => '爭著錄',
+'墙里' => '牆裏',
+'版图里' => '版圖裏',
+'版权信息' => '版權資訊',
+'千里達托貝哥' => '特立尼達和多巴哥',
+'牽著' => '牽着',
+'牽著作' => '牽著作',
+'牽著名' => '牽著名',
+'牽著書' => '牽著書',
+'牽著稱' => '牽著稱',
+'牽著者' => '牽著者',
+'牽著述' => '牽著述',
+'牽著錄' => '牽著錄',
+'犯不著' => '犯不着',
+'犯不著作' => '犯不著作',
+'犯不著名' => '犯不著名',
+'犯不著書' => '犯不著書',
+'犯不著稱' => '犯不著稱',
+'犯不著者' => '犯不著者',
+'犯不著述' => '犯不著述',
+'犯不著錄' => '犯不著錄',
+'犯得著' => '犯得着',
+'狂占' => '狂佔',
+'猜著' => '猜着',
+'猜著作' => '猜著作',
+'猜著名' => '猜著名',
+'猜著書' => '猜著書',
+'猜著稱' => '猜著稱',
+'猜著者' => '猜著者',
+'猜著述' => '猜著述',
+'猜著錄' => '猜著錄',
+'狱里' => '獄裏',
+'獨占' => '獨佔',
+'独占' => '獨佔',
+'獨著' => '獨着',
+'獨著作' => '獨著作',
+'獨著名' => '獨著名',
+'獨著書' => '獨著書',
+'獨著稱' => '獨著稱',
+'獨著者' => '獨著者',
+'獨著述' => '獨著述',
+'獨著錄' => '獨著錄',
+'獲著' => '獲着',
+'獲著作' => '獲著作',
+'獲著名' => '獲著名',
+'獲著書' => '獲著書',
+'獲著稱' => '獲著稱',
+'獲著者' => '獲著者',
+'獲著述' => '獲著述',
+'獲著錄' => '獲著錄',
+'班里' => '班裏',
+'球台' => '球枱',
+'卢塞恩' => '琉森',
+'諾鲁' => '瑙魯',
+'萬那杜' => '瓦努阿圖',
+'肯尼迪' => '甘迺迪',
+'甜著' => '甜着',
+'甜著作' => '甜著作',
+'甜著名' => '甜著名',
+'甜著書' => '甜著書',
+'甜著稱' => '甜著稱',
+'甜著者' => '甜著者',
+'甜著述' => '甜著述',
+'甜著錄' => '甜著錄',
+'用不著' => '用不着',
+'用得著' => '用得着',
+'用法里' => '用法裏',
+'用著' => '用着',
+'用著作' => '用著作',
+'用著名' => '用著名',
+'用著書' => '用著書',
+'用著稱' => '用著稱',
+'用著者' => '用著者',
+'用著述' => '用著述',
+'用著錄' => '用著錄',
+'田里' => '田裏',
+'由表及里' => '由表及裏',
+'A型肝炎' => '甲型肝炎',
+'A肝' => '甲肝',
+'界里' => '界裏',
+'留著' => '留着',
+'留著作' => '留著作',
+'留著名' => '留著名',
+'留著書' => '留著書',
+'留著稱' => '留著稱',
+'留著者' => '留著者',
+'留著述' => '留著述',
+'留著錄' => '留著錄',
+'畫著' => '畫着',
+'畫著作' => '畫著作',
+'畫著名' => '畫著名',
+'畫著稱' => '畫著稱',
+'畫著者' => '畫著者',
+'當著' => '當着',
+'當著作' => '當著作',
+'過著作' => '當著作',
+'當著名' => '當著名',
+'過著名' => '當著名',
+'過著書' => '當著書',
+'當著書' => '當著書',
+'當著稱' => '當著稱',
+'過著稱' => '當著稱',
+'當著者' => '當著者',
+'過著者' => '當著者',
+'過著述' => '當著述',
+'當著述' => '當著述',
+'過著錄' => '當著錄',
+'當著錄' => '當著錄',
+'几内亚' => '畿內亞',
+'幾內亞' => '畿內亞',
+'迭代' => '疊代',
+'疑著' => '疑着',
+'疑著作' => '疑著作',
+'疑著名' => '疑著名',
+'疑著書' => '疑著書',
+'疑著稱' => '疑著稱',
+'疑著者' => '疑著者',
+'疑著述' => '疑著述',
+'疑著錄' => '疑著錄',
+'狂牛症' => '瘋牛症',
+'發布' => '發佈',
+'发布' => '發佈',
+'發著' => '發着',
+'發著《' => '發著《',
+'發著作' => '發著作',
+'發著名' => '發著名',
+'發著稱' => '發著稱',
+'發著者' => '發著者',
+'白里透红' => '白裏透紅',
+'戈登·布朗' => '白高敦',
+'百科里' => '百科裏',
+'的图里' => '的圖裏',
+'的山里' => '的山裏',
+'皮里春秋' => '皮裏春秋',
+'皮里阳秋' => '皮裏陽秋',
+'皺著' => '皺着',
+'皺著作' => '皺著作',
+'皺著名' => '皺著名',
+'皺著書' => '皺著書',
+'皺著稱' => '皺著稱',
+'皺著者' => '皺著者',
+'皺著述' => '皺著述',
+'皺著錄' => '皺著錄',
+'盒里' => '盒裏',
+'盛著' => '盛着',
+'盛著作' => '盛著作',
+'盛著名' => '盛著名',
+'盛著書' => '盛著書',
+'盛著稱' => '盛著稱',
+'盛著者' => '盛著者',
+'盛著述' => '盛著述',
+'盛著錄' => '盛著錄',
+'盘里' => '盤裏',
+'盧安達' => '盧旺達',
+'羅亞爾' => '盧瓦爾',
+'盯著' => '盯着',
+'盯著作' => '盯著作',
+'盯著名' => '盯著名',
+'盯著書' => '盯著書',
+'盯著稱' => '盯著稱',
+'盯著者' => '盯著者',
+'盯著述' => '盯著述',
+'盯著錄' => '盯著錄',
+'盾著' => '盾着',
+'盾著作' => '盾著作',
+'盾著名' => '盾著名',
+'盾著書' => '盾著書',
+'盾著稱' => '盾著稱',
+'盾著者' => '盾著者',
+'盾著述' => '盾著述',
+'盾著錄' => '盾著錄',
+'看不著' => '看不着',
+'看得著' => '看得着',
+'看法里' => '看法裏',
+'看著' => '看着',
+'看著作' => '看著作',
+'看著名' => '看著名',
+'看著書' => '看著書',
+'看著稱' => '看著稱',
+'看著者' => '看著者',
+'看著述' => '看著述',
+'看著錄' => '看著錄',
+'眼眶里' => '眼眶裏',
+'眼睛里' => '眼睛裏',
+'眼里' => '眼裏',
+'著什' => '着什',
+'著他' => '着他',
+'著你' => '着你',
+'著力' => '着力',
+'著地' => '着地',
+'著墨' => '着墨',
+'著她' => '着她',
+'著妳' => '着妳',
+'著它' => '着它',
+'著實' => '着實',
+'著忙' => '着忙',
+'著急' => '着急',
+'著想' => '着想',
+'著意' => '着意',
+'著我' => '着我',
+'著手' => '着手',
+'著數' => '着數',
+'著法' => '着法',
+'著涼' => '着涼',
+'著火' => '着火',
+'著甚麽' => '着甚麽',
+'著眼' => '着眼',
+'著祂' => '着祂',
+'著筆' => '着筆',
+'著絲' => '着絲',
+'著緊' => '着緊',
+'著腳' => '着腳',
+'著艦' => '着艦',
+'著色' => '着色',
+'著落' => '着落',
+'著衣' => '着衣',
+'著裝' => '着裝',
+'著迷' => '着迷',
+'著重' => '着重',
+'著錄' => '着錄',
+'著陸' => '着陸',
+'著鞭' => '着鞭',
+'睡不著' => '睡不着',
+'睡得著' => '睡得着',
+'睡著' => '睡着',
+'睡著作' => '睡著作',
+'睡著名' => '睡著名',
+'睡著書' => '睡著書',
+'睡著稱' => '睡著稱',
+'睡著者' => '睡著者',
+'睡著述' => '睡著述',
+'睡著錄' => '睡著錄',
+'瞞著' => '瞞着',
+'瞞著作' => '瞞著作',
+'瞞著名' => '瞞著名',
+'瞞著書' => '瞞著書',
+'瞞著稱' => '瞞著稱',
+'瞞著者' => '瞞著者',
+'瞞著述' => '瞞著述',
+'瞞著錄' => '瞞著錄',
+'瞪著' => '瞪着',
+'瞪著作' => '瞪著作',
+'瞪著名' => '瞪著名',
+'瞪著書' => '瞪著書',
+'瞪著稱' => '瞪著稱',
+'瞪著者' => '瞪著者',
+'瞪著述' => '瞪著述',
+'瞪著錄' => '瞪著錄',
+'智慧財產權' => '知識產權',
+'智財權' => '知識產權',
+'短信' => '短訊',
+'簡訊' => '短訊',
+'什勒斯維希' => '石勒蘇益格',
+'硅' => '矽',
+'硅藻' => '硅藻',
+'硬體' => '硬件',
+'硬件' => '硬件',
+'贝克汉姆' => '碧咸',
+'贝克漢' => '碧咸',
+'社里' => '社裏',
+'福馬林' => '福爾馬林',
+'福著' => '福着',
+'福著作' => '福著作',
+'福著名' => '福著名',
+'福著書' => '福著書',
+'福著稱' => '福著稱',
+'福著者' => '福著者',
+'福著述' => '福著述',
+'福著錄' => '福著錄',
+'秀发布' => '秀發佈',
+'私下里' => '私下裏',
+'隱私' => '私隱',
+'隐私' => '私隱',
+'葛摩' => '科摩羅',
+'程序员' => '程式設計師',
+'捷豹' => '積架',
+'穩占' => '穩佔',
+'稳占' => '穩佔',
+'穫著' => '穫着',
+'空中布雷' => '空中佈雷',
+'空投布雷' => '空投佈雷',
+'空氣品質' => '空氣質素',
+'空气质量' => '空氣質素',
+'空著' => '空着',
+'空著作' => '空著作',
+'空著名' => '空著名',
+'空著書' => '空著書',
+'空著稱' => '空著稱',
+'空著者' => '空著者',
+'空著述' => '空著述',
+'空著錄' => '空著錄',
+'航天飞机' => '穿梭機',
+'太空梭' => '穿梭機',
+'穿著' => '穿着',
+'穿著作' => '穿著作',
+'穿著名' => '穿著名',
+'穿著書' => '穿著書',
+'穿著稱' => '穿著稱',
+'穿著者' => '穿著者',
+'穿著述' => '穿著述',
+'穿著錄' => '穿著錄',
+'窝里' => '窩裏',
+'站著' => '站着',
+'站著作' => '站著作',
+'站著名' => '站著名',
+'站著書' => '站著書',
+'站著稱' => '站著稱',
+'站著者' => '站著者',
+'站著述' => '站著述',
+'站著錄' => '站著錄',
+'竪著' => '竪着',
+'笑著' => '笑着',
+'笑著作' => '笑著作',
+'笑著名' => '笑著名',
+'笑著書' => '笑著書',
+'笑著稱' => '笑著稱',
+'笑著者' => '笑著者',
+'笑著述' => '笑著述',
+'笑著錄' => '笑著錄',
+'笑里藏刀' => '笑裏藏刀',
+'提比里西' => '第比利斯',
+'管著' => '管着',
+'管著作' => '管著作',
+'管著名' => '管著名',
+'管著書' => '管著書',
+'管著稱' => '管著稱',
+'管著者' => '管著者',
+'管著述' => '管著述',
+'管著錄' => '管著錄',
+'箱里' => '箱裏',
+'节目里' => '節目裏',
+'簽著' => '簽着',
+'籃板球' => '籃板球',
+'麦克尔' => '米高',
+'迈克尔' => '米高',
+'迈克尔·欧文' => '米高·奧雲',
+'糊里糊涂' => '糊裏糊塗',
+'系列里' => '系列裏',
+'係數' => '系數',
+'系里' => '系裏',
+'約占' => '約佔',
+'约占' => '約佔',
+'紐賓士域' => '紐賓士域',
+'索忍尼辛' => '索贊尼辛',
+'索尔仁尼琴' => '索贊尼辛',
+'索馬利亞' => '索馬里',
+'索馬利里' => '索馬里',
+'紮著' => '紮着',
+'紮著作' => '紮著作',
+'紮著名' => '紮著名',
+'紮著書' => '紮著書',
+'紮著稱' => '紮著稱',
+'紮著者' => '紮著者',
+'紮著述' => '紮著述',
+'紮著錄' => '紮著錄',
+'组里' => '組裏',
+'吉他' => '結他',
+'结彩' => '結綵',
+'結彩' => '結綵',
+'綁著' => '綁着',
+'綁著作' => '綁著作',
+'綁著名' => '綁著名',
+'綁著書' => '綁著書',
+'綁著稱' => '綁著稱',
+'綁著者' => '綁著者',
+'綁著述' => '綁著述',
+'綁著錄' => '綁著錄',
+'網路' => '網絡',
+'网里' => '網裏',
+'彩带' => '綵帶',
+'彩帶' => '綵帶',
+'彩排' => '綵排',
+'彩楼' => '綵樓',
+'彩樓' => '綵樓',
+'彩牌楼' => '綵牌樓',
+'彩牌樓' => '綵牌樓',
+'彩球' => '綵球',
+'彩綢' => '綵綢',
+'彩绸' => '綵綢',
+'彩线' => '綵綫',
+'彩線' => '綵線',
+'彩船' => '綵船',
+'彩衣' => '綵衣',
+'线图里' => '線圖裏',
+'緝凶' => '緝兇',
+'县里' => '縣裏',
+'缝里' => '縫裏',
+'总数里' => '總數裏',
+'尖峰時段' => '繁忙時段',
+'尖峰時間' => '繁忙時間',
+'正體中文' => '繁體中文',
+'繃著' => '繃着',
+'繞著' => '繞着',
+'繞著作' => '繞著作',
+'繞著名' => '繞著名',
+'繞著書' => '繞著書',
+'繞著稱' => '繞著稱',
+'繞著者' => '繞著者',
+'繞著述' => '繞著述',
+'繞著錄' => '繞著錄',
+'繫著' => '繫着',
+'系着' => '繫着',
+'纏著' => '纏着',
+'纏著作' => '纏著作',
+'纏著名' => '纏著名',
+'纏著書' => '纏著書',
+'纏著稱' => '纏著稱',
+'纏著者' => '纏著者',
+'纏著述' => '纏著述',
+'纏著錄' => '纏著錄',
+'罩著' => '罩着',
+'罩著作' => '罩著作',
+'罩著名' => '罩著名',
+'罩著書' => '罩著書',
+'罩著稱' => '罩著稱',
+'罩著者' => '罩著者',
+'罩著述' => '罩著述',
+'罩著錄' => '罩著錄',
+'罵著' => '罵着',
+'罵著作' => '罵著作',
+'罵著名' => '罵著名',
+'罵著書' => '罵著書',
+'罵著稱' => '罵著稱',
+'罵著者' => '罵著者',
+'罵著述' => '罵著述',
+'罵著錄' => '罵著錄',
+'卢浮宫' => '羅浮宮',
+'美占' => '美佔',
+'美著' => '美着',
+'美著作' => '美著作',
+'美著名' => '美著名',
+'美著書' => '美著書',
+'美著稱' => '美著稱',
+'美著者' => '美著者',
+'美著述' => '美著述',
+'美著錄' => '美著錄',
+'耀著' => '耀着',
+'耀著作' => '耀著作',
+'耀著名' => '耀著名',
+'耀著書' => '耀著書',
+'耀著稱' => '耀著稱',
+'耀著者' => '耀著者',
+'耀著述' => '耀著述',
+'耀著錄' => '耀著錄',
+'寮國' => '老撾',
+'寮人民民主共和國' => '老撾人民民主共和國',
+'寮語' => '老撾語',
+'考著' => '考着',
+'考著作' => '考著作',
+'考著名' => '考著名',
+'考著書' => '考著書',
+'考著稱' => '考著稱',
+'考著者' => '考著者',
+'考著述' => '考著述',
+'考著錄' => '考著錄',
+'圣基茨和尼维斯' => '聖吉斯納域斯',
+'聖克里斯多福及尼維斯' => '聖吉斯納域斯',
+'聖文森及格瑞那丁' => '聖文森特和格林納丁斯',
+'聖露西亞' => '聖盧西亞',
+'聖馬利諾' => '聖馬力諾',
+'聽不著' => '聽不着',
+'聽得著' => '聽得着',
+'聽著' => '聽着',
+'聽著作' => '聽著作',
+'聽著名' => '聽著名',
+'聽著書' => '聽著書',
+'聽著稱' => '聽著稱',
+'聽著者' => '聽著者',
+'聽著述' => '聽著述',
+'聽著錄' => '聽著錄',
+'肚里' => '肚裏',
+'肯尼亚' => '肯雅',
+'胃里' => '胃裏',
+'背地里' => '背地裏',
+'背著' => '背着',
+'背著作' => '背著作',
+'背著名' => '背著名',
+'背著書' => '背著書',
+'背著稱' => '背著稱',
+'背著者' => '背著者',
+'背著述' => '背著述',
+'背著錄' => '背著錄',
+'胡里胡涂' => '胡裏胡塗',
+'腰里' => '腰裏',
+'膠著' => '膠着',
+'膠著作' => '膠著作',
+'膠著名' => '膠著名',
+'膠著書' => '膠著書',
+'膠著稱' => '膠著稱',
+'膠著者' => '膠著者',
+'膠著述' => '膠著述',
+'膠著錄' => '膠著錄',
+'臨著' => '臨着',
+'臨著作' => '臨著作',
+'臨著名' => '臨著名',
+'臨著書' => '臨著書',
+'臨著稱' => '臨著稱',
+'臨著者' => '臨著者',
+'臨著述' => '臨著述',
+'臨著錄' => '臨著錄',
+'自行火炮' => '自走炮',
+'與著' => '與着',
+'與著作' => '與著作',
+'與著名' => '與著名',
+'與著書' => '與著書',
+'與著稱' => '與著稱',
+'與著者' => '與著者',
+'與著述' => '與著述',
+'與著錄' => '與著錄',
+'舒马赫' => '舒麥加',
+'爱荷华' => '艾奧瓦',
+'愛荷華' => '艾奧瓦',
+'埃菲尔' => '艾菲爾',
+'帕塔亚' => '芭達亞',
+'花盆里' => '花盆裏',
+'苑里' => '苑裏',
+'苑裡' => '苑裡',
+'苦著' => '苦着',
+'苦著作' => '苦著作',
+'苦著名' => '苦著名',
+'苦著書' => '苦著書',
+'苦著稱' => '苦著稱',
+'苦著者' => '苦著者',
+'苦著述' => '苦著述',
+'苦著錄' => '苦著錄',
+'苦里' => '苦裏',
+'英占' => '英佔',
+'大英國協' => '英聯邦',
+'共和联邦' => '英聯邦',
+'草丛里' => '草叢裏',
+'霍爾斯坦' => '荷爾斯泰因',
+'好萊塢' => '荷里活',
+'好莱坞' => '荷里活',
+'庄里' => '莊裏',
+'莫三比克' => '莫桑比克',
+'瓦倫西亞' => '華倫西亞',
+'巴伦西亚' => '華倫西亞',
+'巴倫西亞' => '華倫西亞',
+'瓦文萨' => '華里沙',
+'華勒沙' => '華里沙',
+'菲利普亲王' => '菲臘親王',
+'菲利普親王' => '菲臘親王',
+'賴索托' => '萊索托',
+'马恩岛' => '萌島',
+'马自达' => '萬事得',
+'馬自達' => '萬事得',
+'万历朝鲜战争' => '萬曆朝鮮戰爭',
+'落著' => '落着',
+'落著作' => '落著作',
+'落著名' => '落著名',
+'落著書' => '落著書',
+'落著稱' => '落著稱',
+'落著者' => '落著者',
+'落著述' => '落著述',
+'落著錄' => '落著錄',
+'葉爾欽' => '葉利欽',
+'葡占' => '葡佔',
+'葫芦里卖甚么药' => '葫蘆裏賣甚麼藥',
+'蒙特婁' => '蒙特利爾',
+'滿地可' => '蒙特利爾',
+'蒙著' => '蒙着',
+'蒙著作' => '蒙著作',
+'蒙著名' => '蒙著名',
+'蒙著書' => '蒙著書',
+'蒙著稱' => '蒙著稱',
+'蒙著者' => '蒙著者',
+'蒙著述' => '蒙著述',
+'蒙著錄' => '蒙著錄',
+'蓋著' => '蓋着',
+'肖斯塔科维奇' => '蕭士達高維契',
+'蕭士塔高維奇' => '蕭士達高維契',
+'肖邦' => '蕭邦',
+'薛丁格' => '薛定諤',
+'塞拉耶佛' => '薩拉熱窩',
+'萨达姆' => '薩達姆',
+'藉著' => '藉着',
+'藏著' => '藏着',
+'藏著作' => '藏著作',
+'藏著名' => '藏著名',
+'藏著書' => '藏著書',
+'藏著稱' => '藏著稱',
+'藏著者' => '藏著者',
+'藏著述' => '藏著述',
+'藏著錄' => '藏著錄',
+'藝著' => '藝着',
+'藝著作' => '藝著作',
+'藝著名' => '藝著名',
+'藝著書' => '藝著書',
+'藝著稱' => '藝著稱',
+'藝著者' => '藝著者',
+'藝著述' => '藝著述',
+'藝著錄' => '藝著錄',
+'蘸著' => '蘸着',
+'蘸著作' => '蘸著作',
+'蘸著名' => '蘸著名',
+'蘸著書' => '蘸著書',
+'蘸著稱' => '蘸著稱',
+'蘸著者' => '蘸著者',
+'蘸著述' => '蘸著述',
+'蘸著錄' => '蘸著錄',
+'蜜里调油' => '蜜裏調油',
+'荧屏' => '螢屏',
+'屏幕' => '螢幕',
+'首席执行官' => '行政總裁',
+'行著' => '行着',
+'行著作' => '行著作',
+'行著名' => '行著名',
+'行著書' => '行著書',
+'行著稱' => '行著稱',
+'行著者' => '行著者',
+'行著述' => '行著述',
+'行著錄' => '行著錄',
+'衝著' => '衝着',
+'衣著' => '衣着',
+'衣著作' => '衣著作',
+'衣著名' => '衣著名',
+'衣著書' => '衣著書',
+'衣著稱' => '衣著稱',
+'衣著者' => '衣著者',
+'衣著述' => '衣著述',
+'衣著錄' => '衣著錄',
+'表里' => '表裏',
+'表里一致' => '表裏一致',
+'表里不一' => '表裏不一',
+'表里如一' => '表裏如一',
+'表里山河' => '表裏山河',
+'袋里' => '袋裏',
+'袖里' => '袖裏',
+'被里' => '被裏',
+'裡' => '裏',
+'里勾外连' => '裏勾外連',
+'里屋' => '裏屋',
+'里层' => '裏層',
+'里带' => '裏帶',
+'里弦' => '裏弦',
+'里应外合' => '裏應外合',
+'里手' => '裏手',
+'里海' => '裏海',
+'里脊' => '裏脊',
+'里衣' => '裏衣',
+'里通外国' => '裏通外國',
+'里通外敌' => '裏通外敵',
+'里边' => '裏邊',
+'里间' => '裏間',
+'里面' => '裏面',
+'里面包' => '裏面包',
+'里头' => '裏頭',
+'裝著' => '裝着',
+'裝著作' => '裝著作',
+'裝著名' => '裝著名',
+'裝著書' => '裝著書',
+'裝著稱' => '裝著稱',
+'裝著者' => '裝著者',
+'裝著述' => '裝著述',
+'裝著錄' => '裝著錄',
+'裡冷' => '裡冷',
+'裹著' => '裹着',
+'裹著作' => '裹著作',
+'裹著名' => '裹著名',
+'裹著書' => '裹著書',
+'裹著稱' => '裹著稱',
+'裹著者' => '裹著者',
+'裹著述' => '裹著述',
+'裹著錄' => '裹著錄',
+'衬里' => '襯裏',
+'西占' => '西佔',
+'塞维利亚' => '西維爾',
+'塞維亞' => '西維爾',
+'要占' => '要佔',
+'要占卜' => '要占卜',
+'覆著' => '覆着',
+'見著' => '見着',
+'見著作' => '見著作',
+'見著名' => '見著名',
+'見著書' => '見著書',
+'見著稱' => '見著稱',
+'見著者' => '見著者',
+'見著述' => '見著述',
+'見著錄' => '見著錄',
+'角落里' => '角落裏',
+'分辨率' => '解像度',
+'解析度' => '解像度',
+'計畫' => '計劃',
+'記著' => '記着',
+'記著作' => '記著作',
+'記著名' => '記著名',
+'記著書' => '記著書',
+'記著稱' => '記著稱',
+'記著者' => '記著者',
+'記著述' => '記著述',
+'記著錄' => '記著錄',
+'試著' => '試着',
+'試著作' => '試著作',
+'試著名' => '試著名',
+'試著書' => '試著書',
+'試著稱' => '試著稱',
+'試著者' => '試著者',
+'試著述' => '試著述',
+'試著錄' => '試著錄',
+'话里有话' => '話裏有話',
+'语法里' => '語法裏',
+'語著' => '語着',
+'語著作' => '語著作',
+'語著名' => '語著名',
+'語著書' => '語著書',
+'語著稱' => '語著稱',
+'語著者' => '語著者',
+'語著述' => '語著述',
+'語著錄' => '語著錄',
+'语里' => '語裏',
+'說著' => '說着',
+'說著作' => '說著作',
+'說著稱' => '說著稱',
+'說著者' => '說著者',
+'說著述' => '說著述',
+'數據機' => '調制解調器',
+'诺曼底' => '諾曼第',
+'警戒著' => '警戒着',
+'變著' => '變着',
+'變著作' => '變著作',
+'變著名' => '變著名',
+'變著書' => '變著書',
+'變著稱' => '變著稱',
+'變著者' => '變著者',
+'變著述' => '變著述',
+'變著錄' => '變著錄',
+'豎著' => '豎着',
+'豎著作' => '豎著作',
+'豎著名' => '豎著名',
+'豎著書' => '豎著書',
+'豎著稱' => '豎著稱',
+'豎著者' => '豎著者',
+'豎著述' => '豎著述',
+'豎著錄' => '豎著錄',
+'象徵著名' => '象徵著名',
+'象徵著' => '象著着',
+'豫著' => '豫着',
+'豫著作' => '豫著作',
+'豫著名' => '豫著名',
+'豫著書' => '豫著書',
+'豫著稱' => '豫著稱',
+'豫著者' => '豫著者',
+'豫著述' => '豫著述',
+'豫著錄' => '豫著錄',
+'貝爾格勒' => '貝爾格萊德',
+'布莱尔' => '貝理雅',
+'貞著' => '貞着',
+'貞著作' => '貞著作',
+'貞著名' => '貞著名',
+'貞著書' => '貞著書',
+'貞著稱' => '貞著稱',
+'貞著者' => '貞著者',
+'貞著述' => '貞著述',
+'貞著錄' => '貞著錄',
+'負著' => '負着',
+'買凶' => '買兇',
+'費占' => '費佔',
+'费占' => '費佔',
+'赌台' => '賭枱',
+'尚比亞' => '贊比亞',
+'西臺人' => '赫梯人',
+'西臺國' => '赫梯國',
+'西臺帝' => '赫梯帝',
+'西臺文' => '赫梯文',
+'西臺族' => '赫梯族',
+'西臺王' => '赫梯王',
+'西臺語' => '赫梯語',
+'赫魯雪夫' => '赫魯曉夫',
+'走為上著' => '走為上着',
+'走著' => '走着',
+'走著作' => '走著作',
+'走著名' => '走著名',
+'走著書' => '走著書',
+'走著稱' => '走著稱',
+'走著者' => '走著者',
+'走著述' => '走著述',
+'走著錄' => '走著錄',
+'趕著' => '趕着',
+'趕著作' => '趕著作',
+'趕著名' => '趕著名',
+'趕著書' => '趕著書',
+'趕著稱' => '趕著稱',
+'趕著者' => '趕著者',
+'趕著述' => '趕著述',
+'趕著錄' => '趕著錄',
+'趴著' => '趴着',
+'趴著作' => '趴著作',
+'趴著名' => '趴著名',
+'趴著書' => '趴著書',
+'趴著稱' => '趴著稱',
+'趴著者' => '趴著者',
+'趴著述' => '趴著述',
+'趴著錄' => '趴著錄',
+'跑著' => '跑着',
+'跑著作' => '跑著作',
+'跑著名' => '跑著名',
+'跑著書' => '跑著書',
+'跑著稱' => '跑著稱',
+'跑著者' => '跑著者',
+'跑著述' => '跑著述',
+'跑著錄' => '跑著錄',
+'跟著' => '跟着',
+'跟著作' => '跟著作',
+'跟著名' => '跟著名',
+'跟著書' => '跟著書',
+'跟著稱' => '跟著稱',
+'跟著者' => '跟著者',
+'跟著述' => '跟著述',
+'跟著錄' => '跟著錄',
+'跪著' => '跪着',
+'跪著作' => '跪著作',
+'跪著名' => '跪著名',
+'跪著書' => '跪著書',
+'跪著稱' => '跪著稱',
+'跪著者' => '跪著者',
+'跪著述' => '跪著述',
+'跪著錄' => '跪著錄',
+'路图里' => '路圖裏',
+'跳著' => '跳着',
+'跳著作' => '跳著作',
+'跳著名' => '跳著名',
+'跳著書' => '跳著書',
+'跳著稱' => '跳著稱',
+'跳著者' => '跳著者',
+'跳著述' => '跳著述',
+'跳著錄' => '跳著錄',
+'踏著' => '踏着',
+'踏著作' => '踏著作',
+'踏著名' => '踏著名',
+'踏著稱' => '踏著稱',
+'踏著者' => '踏著者',
+'踏著述' => '踏著述',
+'踏著錄' => '踏著錄',
+'踩著' => '踩着',
+'踩著作' => '踩著作',
+'踩著名' => '踩著名',
+'踩著書' => '踩著書',
+'踩著稱' => '踩著稱',
+'踩著者' => '踩著者',
+'踩著述' => '踩著述',
+'踩著錄' => '踩著錄',
+'躍著' => '躍着',
+'躍著作' => '躍著作',
+'躍著名' => '躍著名',
+'躍著書' => '躍著書',
+'躍著稱' => '躍著稱',
+'躍著者' => '躍著者',
+'躍著述' => '躍著述',
+'躍著錄' => '躍著錄',
+'身著' => '身着',
+'身著作' => '身著作',
+'身著名' => '身著名',
+'身著書' => '身著書',
+'身著稱' => '身著稱',
+'身著者' => '身著者',
+'身著述' => '身著述',
+'身著錄' => '身著錄',
+'躺著' => '躺着',
+'躺著作' => '躺著作',
+'躺著名' => '躺著名',
+'躺著書' => '躺著書',
+'躺著稱' => '躺著稱',
+'躺著者' => '躺著者',
+'躺著述' => '躺著述',
+'躺著錄' => '躺著錄',
+'车库里' => '車庫裏',
+'车站里' => '車站裏',
+'车里' => '車裏',
+'车里雅宾斯克' => '車里雅賓斯克',
+'軟體' => '軟件',
+'軟體動物' => '軟體動物',
+'軟體家具' => '軟體家具',
+'載著' => '載着',
+'載著作' => '載著作',
+'載著名' => '載著名',
+'載著書' => '載著書',
+'載著稱' => '載著稱',
+'載著者' => '載著者',
+'載著述' => '載著述',
+'載著錄' => '載著錄',
+'轉著' => '轉着',
+'轉著作' => '轉著作',
+'轉著名' => '轉著名',
+'轉著書' => '轉著書',
+'轉著稱' => '轉著稱',
+'轉著者' => '轉著者',
+'轉著述' => '轉著述',
+'轉著錄' => '轉著錄',
+'办公台' => '辦公枱',
+'辦著' => '辦着',
+'辦著作' => '辦著作',
+'辦著名' => '辦著名',
+'辦著書' => '辦著書',
+'辦著稱' => '辦著稱',
+'辦著者' => '辦著者',
+'辦著述' => '辦著述',
+'辦著錄' => '辦著錄',
+'迫著' => '迫着',
+'追著' => '追着',
+'追著作' => '追著作',
+'追著名' => '追著名',
+'追著書' => '追著書',
+'追著稱' => '追著稱',
+'追著者' => '追著者',
+'追著述' => '追著述',
+'追著錄' => '追著錄',
+'逆著' => '逆着',
+'逆著作' => '逆著作',
+'逆著名' => '逆著名',
+'逆著書' => '逆著書',
+'逆著稱' => '逆著稱',
+'逆著者' => '逆著者',
+'逆著述' => '逆著述',
+'逆著錄' => '逆著錄',
+'径入' => '逕入',
+'径到' => '逕到',
+'径取' => '逕取',
+'径启' => '逕啟',
+'径寄' => '逕寄',
+'径庭' => '逕庭',
+'径往' => '逕往',
+'径自' => '逕自',
+'径行' => '逕行',
+'径迎' => '逕迎',
+'这里' => '這裏',
+'连占' => '連佔',
+'連占' => '連佔',
+'連著' => '連着',
+'链接' => '連結',
+'連著作' => '連著作',
+'連著名' => '連著名',
+'連著書' => '連著書',
+'連著稱' => '連著稱',
+'連著者' => '連著者',
+'連著述' => '連著述',
+'連著錄' => '連著錄',
+'进占' => '進佔',
+'進占' => '進佔',
+'演化論' => '進化論',
+'逼著' => '逼着',
+'逼著作' => '逼著作',
+'逼著名' => '逼著名',
+'逼著書' => '逼著書',
+'逼著稱' => '逼著稱',
+'逼著者' => '逼著者',
+'逼著述' => '逼著述',
+'逼著錄' => '逼著錄',
+'遇著' => '遇着',
+'遇著作' => '遇著作',
+'遇著名' => '遇著名',
+'遇著書' => '遇著書',
+'遇著稱' => '遇著稱',
+'遇著者' => '遇著者',
+'遇著述' => '遇著述',
+'遇著錄' => '遇著錄',
+'遍布' => '遍佈',
+'過著' => '過着',
+'达·芬奇' => '達·文西',
+'达芬奇' => '達文西',
+'達著' => '達着',
+'達著作' => '達著作',
+'達著名' => '達著名',
+'達著書' => '達著書',
+'達著稱' => '達著稱',
+'達著者' => '達著者',
+'達著述' => '達著述',
+'達著錄' => '達著錄',
+'遠著' => '遠着',
+'遠著作' => '遠著作',
+'遠著名' => '遠著名',
+'遠著書' => '遠著書',
+'遠著稱' => '遠著稱',
+'遠著者' => '遠著者',
+'遠著述' => '遠著述',
+'遠著錄' => '遠著錄',
+'還占' => '還佔',
+'还占' => '還佔',
+'邋里邋遢' => '邋裏邋遢',
+'那里' => '那裏',
+'奥斯曼' => '鄂圖曼',
+'配合著' => '配合着',
+'配合著名' => '配合著名',
+'配图里' => '配圖裏',
+'配著' => '配着',
+'配著作' => '配著作',
+'配著名' => '配著名',
+'配著書' => '配著書',
+'配著稱' => '配著稱',
+'配著者' => '配著者',
+'配著述' => '配著述',
+'配著錄' => '配著錄',
+'醯' => '酰',
+'醜著' => '醜着',
+'醜著作' => '醜著作',
+'醜著名' => '醜著名',
+'醜著書' => '醜著書',
+'醜著稱' => '醜著稱',
+'醜著者' => '醜著者',
+'醜著述' => '醜著述',
+'醜著錄' => '醜著錄',
+'醯壺' => '醯壺',
+'醯壶' => '醯壺',
+'醯醋' => '醯醋',
+'醯醢' => '醯醢',
+'醯酱' => '醯醬',
+'醯醬' => '醯醬',
+'醯鸡' => '醯雞',
+'醯雞' => '醯雞',
+'釀著' => '釀着',
+'釀著作' => '釀著作',
+'釀著名' => '釀著名',
+'釀著書' => '釀著書',
+'釀著稱' => '釀著稱',
+'釀著者' => '釀著者',
+'釀著述' => '釀著述',
+'釀著錄' => '釀著錄',
+'金装玉里' => '金裝玉裏',
+'鉤' => '鈎',
+'鋪著' => '鋪着',
+'鋪著作' => '鋪著作',
+'鋪著名' => '鋪著名',
+'鋪著書' => '鋪著書',
+'鋪著稱' => '鋪著稱',
+'鋪著者' => '鋪著者',
+'鋪著述' => '鋪著述',
+'鋪著錄' => '鋪著錄',
+'镜图里' => '鏡圖裏',
+'钟在寺里' => '鐘在寺裏',
+'狄托' => '鐵托',
+'泰坦尼克号' => '鐵達尼號',
+'门里' => '門裏',
+'閉著' => '閉着',
+'閉著作' => '閉著作',
+'閉著名' => '閉著名',
+'閉著書' => '閉著書',
+'閉著稱' => '閉著稱',
+'閉著者' => '閉著者',
+'閉著述' => '閉著述',
+'閉著錄' => '閉著錄',
+'蓋曼群島' => '開曼群島',
+'開著' => '開着',
+'開著作' => '開著作',
+'開著名' => '開著名',
+'開著書' => '開著書',
+'開著稱' => '開著稱',
+'開著者' => '開著者',
+'開著述' => '開著述',
+'開著錄' => '開著錄',
+'开诚布公' => '開誠佈公',
+'開誠布公' => '開誠佈公',
+'閑著' => '閑着',
+'閑著作' => '閑著作',
+'閑著名' => '閑著名',
+'閑著書' => '閑著書',
+'閑著稱' => '閑著稱',
+'閑著者' => '閑著者',
+'閑著述' => '閑著述',
+'閑著錄' => '閑著錄',
+'閒著' => '閒着',
+'间里' => '間裏',
+'關係著' => '關係着',
+'關著' => '關着',
+'關著作' => '關著作',
+'關著名' => '關著名',
+'關著書' => '關著書',
+'關著稱' => '關著稱',
+'關著者' => '關著者',
+'關著述' => '關著述',
+'關著錄' => '關著錄',
+'聞不著' => '闻不着',
+'聞得著' => '闻得着',
+'聞著' => '闻着',
+'亞塞拜然' => '阿塞拜疆',
+'阿布達比' => '阿布扎比',
+'阿拉伯聯合大公國' => '阿拉伯聯合酋長國',
+'亞斯文' => '阿斯旺',
+'阿联酋' => '阿聯酋',
+'艾里爾·夏隆' => '阿里埃勒·沙龍',
+'附著' => '附着',
+'附著作' => '附著作',
+'附著名' => '附著名',
+'附著書' => '附著書',
+'附著稱' => '附著稱',
+'附著者' => '附著者',
+'附著述' => '附著述',
+'附著錄' => '附著錄',
+'陋著' => '陋着',
+'陋著作' => '陋著作',
+'陋著名' => '陋著名',
+'陋著書' => '陋著書',
+'陋著稱' => '陋著稱',
+'陋著者' => '陋著者',
+'陋著述' => '陋著述',
+'陋著錄' => '陋著錄',
+'院里' => '院裏',
+'陪著' => '陪着',
+'陪著作' => '陪著作',
+'陪著名' => '陪著名',
+'陪著書' => '陪著書',
+'陪著稱' => '陪著稱',
+'陪著者' => '陪著者',
+'陪著述' => '陪著述',
+'陪著錄' => '陪著錄',
+'阴沟里翻船' => '陰溝裏翻船',
+'隔著' => '隔着',
+'隔著作' => '隔著作',
+'隔著名' => '隔著名',
+'隔著書' => '隔著書',
+'隔著稱' => '隔著稱',
+'隔著者' => '隔著者',
+'隔著述' => '隔著述',
+'隔著錄' => '隔著錄',
+'隨著' => '隨着',
+'隨著作' => '隨著作',
+'隨著名' => '隨著名',
+'隨著書' => '隨著書',
+'隨著稱' => '隨著稱',
+'隨著者' => '隨著者',
+'隨著述' => '隨著述',
+'隨著錄' => '隨著錄',
+'隱占' => '隱佔',
+'隐占' => '隱佔',
+'雅爾達' => '雅爾塔',
+'雅著' => '雅着',
+'雅穆索戈' => '雅穆蘇克雷',
+'雅著作' => '雅著作',
+'雅著名' => '雅著名',
+'雅著書' => '雅著書',
+'雅著稱' => '雅著稱',
+'雅著者' => '雅著者',
+'雅著述' => '雅著述',
+'雅著錄' => '雅著錄',
+'集数里' => '集數裏',
+'集里' => '集裏',
+'雜著' => '雜着',
+'雜著作' => '雜著作',
+'雜著名' => '雜著名',
+'雜著書' => '雜著書',
+'雜著稱' => '雜著稱',
+'雜著者' => '雜著者',
+'雜著述' => '雜著述',
+'雜著錄' => '雜著錄',
+'鸡蛋里挑骨头' => '雞蛋裏挑骨頭',
+'冰淇淋' => '雪糕',
+'冰激凌' => '雪糕',
+'雪里' => '雪裏',
+'萊特灣' => '雷伊泰灣',
+'莱特湾' => '雷伊泰灣',
+'晶體管' => '電晶體',
+'晶体管' => '電晶體',
+'电脑程序' => '電腦程式',
+'计算机程序' => '電腦程式',
+'霄裡' => '霄裡',
+'荷姆茲' => '霍爾木茲',
+'雾里' => '霧裏',
+'霸占' => '霸佔',
+'非占不可' => '非佔不可',
+'靠著' => '靠着',
+'靠著作' => '靠著作',
+'靠著名' => '靠著名',
+'靠著稱' => '靠著稱',
+'靠著称' => '靠著稱',
+'靠著者' => '靠著者',
+'靠著述' => '靠著述',
+'靠著錄' => '靠著錄',
+'靠著录' => '靠著錄',
+'鞋里' => '鞋裏',
+'鞭辟入里' => '鞭辟入裏',
+'朝鲜战争' => '韓戰',
+'響著' => '響着',
+'響著作' => '響著作',
+'響著名' => '響著名',
+'響著書' => '響著書',
+'響著稱' => '響著稱',
+'響著者' => '響著者',
+'響著述' => '響著述',
+'響著錄' => '響著錄',
+'頂著' => '頂着',
+'頂著作' => '頂著作',
+'頂著名' => '頂著名',
+'頂著書' => '頂著書',
+'頂著稱' => '頂著稱',
+'頂著者' => '頂著者',
+'頂著述' => '頂著述',
+'頂著錄' => '頂著錄',
+'順著' => '順着',
+'順著作' => '順著作',
+'順著名' => '順著名',
+'順著書' => '順著書',
+'順著稱' => '順著稱',
+'順著者' => '順著者',
+'順著述' => '順著述',
+'順著錄' => '順著錄',
+'颁布' => '頒佈',
+'頒布' => '頒佈',
+'領著' => '領着',
+'領著作' => '領著作',
+'領著名' => '領著名',
+'領著書' => '領著書',
+'領著稱' => '領著稱',
+'領著者' => '領著者',
+'領著述' => '領著述',
+'領著錄' => '領著錄',
+'头里' => '頭裏',
+'风里' => '風裏',
+'颳著' => '颳着',
+'飃著' => '飃着',
+'飄著' => '飄着',
+'飄著作' => '飄著作',
+'飄著名' => '飄著名',
+'飄著書' => '飄著書',
+'飄著稱' => '飄著稱',
+'飄著者' => '飄著者',
+'飄著述' => '飄著述',
+'飄著錄' => '飄著錄',
+'餐台' => '餐枱',
+'馆里' => '館裏',
+'糊口' => '餬口',
+'马里兰' => '馬利蘭',
+'馬里蘭' => '馬利蘭',
+'马拉特·萨芬' => '馬拉特·沙芬',
+'馬斯垂克' => '馬斯特里赫特',
+'馬爾地夫' => '馬爾代夫',
+'馬利共和國' => '馬里共和國',
+'駕著' => '駕着',
+'駕著作' => '駕著作',
+'駕著名' => '駕著名',
+'駕著書' => '駕著書',
+'駕著稱' => '駕著稱',
+'駕著者' => '駕著者',
+'駕著述' => '駕著述',
+'駕著錄' => '駕著錄',
+'騎著' => '騎着',
+'騎著作' => '騎著作',
+'騎著名' => '騎著名',
+'騎著書' => '騎著書',
+'騎著稱' => '騎著稱',
+'騎著者' => '騎著者',
+'騎著述' => '騎著述',
+'騎著錄' => '騎著錄',
+'騙著' => '騙着',
+'騙著作' => '騙著作',
+'騙著名' => '騙著名',
+'騙著書' => '騙著書',
+'騙著稱' => '騙著稱',
+'騙著者' => '騙著者',
+'騙著述' => '騙著述',
+'騙著錄' => '騙著錄',
+'驶著' => '驶着',
+'高畫質' => '高清',
+'高著' => '高着',
+'高著作' => '高著作',
+'高著名' => '高著名',
+'高著書' => '高著書',
+'高著稱' => '高著稱',
+'高著者' => '高著者',
+'高著述' => '高著述',
+'高著錄' => '高著錄',
+'髭著' => '髭着',
+'髭著作' => '髭著作',
+'髭著名' => '髭著名',
+'髭著書' => '髭著書',
+'髭著稱' => '髭著稱',
+'髭著者' => '髭著者',
+'髭著述' => '髭著述',
+'髭著錄' => '髭著錄',
+'斗着' => '鬥着',
+'鬥著' => '鬥着',
+'鬥著作' => '鬥著作',
+'鬥著名' => '鬥著名',
+'鬥著書' => '鬥著書',
+'鬥著稱' => '鬥著稱',
+'鬥著者' => '鬥著者',
+'鬥著述' => '鬥著述',
+'鬥著錄' => '鬥著錄',
+'鬧著' => '鬧着',
+'牛軋' => '鳥結',
+'牛轧' => '鳥結',
+'鸠占' => '鳩佔',
+'鳩占' => '鳩佔',
+'麗著' => '麗着',
+'麗著作' => '麗著作',
+'麗著名' => '麗著名',
+'麗著書' => '麗著書',
+'麗著稱' => '麗著稱',
+'麗著者' => '麗著者',
+'麗著述' => '麗著述',
+'麗著錄' => '麗著錄',
+'麼著' => '麼着',
+'芮氏0' => '黎克特制0',
+'里氏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',
+'芮氏地震規模' => '黎克特制地震震級',
+'里氏地震规模' => '黎克特制地震震級',
+'里氏震级' => '黎克特制震級',
+'芮氏規模' => '黎克特制震級',
+'里氏规模' => '黎克特制震級',
+'黏著' => '黏着',
+'黏著作' => '黏著作',
+'黏著名' => '黏著名',
+'黏著書' => '黏著書',
+'黏著稱' => '黏著稱',
+'黏著者' => '黏著者',
+'黏著述' => '黏著述',
+'黏著錄' => '黏著錄',
+'蒙特內哥羅' => '黑山',
+'點著' => '點着',
+'點著作' => '點著作',
+'點著名' => '點著名',
+'點著書' => '點著書',
+'點著稱' => '點著稱',
+'點著者' => '點著者',
+'點著述' => '點著述',
+'點著錄' => '點著錄',
+'点里' => '點裏',
+'点里程' => '點里程',
+'鼓里' => '鼓裏',
 );
 
-$zh2HK = array(
-'505線' => '505綫',
-'505线' => '505綫',
-'507線' => '507綫',
-'507线' => '507綫',
-'610線' => '610綫',
-'610线' => '610綫',
-'614P線' => '614P綫',
-'614P线' => '614P綫',
-'614线' => '614綫',
-'614線' => '614綫',
-'615P線' => '615P綫',
-'615P线' => '615P綫',
-'615线' => '615綫',
-'615線' => '615綫',
-'705线' => '705綫',
-'705線' => '705綫',
-'706线' => '706綫',
-'706線' => '706綫',
-'751P線' => '751P綫',
-'751P线' => '751P綫',
-'751線' => '751綫',
-'751线' => '751綫',
-'761P线' => '761P綫',
-'761P線' => '761P綫',
-'“' => '「',
-'”' => '」',
-'‘' => '『',
-'’' => '』',
-'三極體' => '三極管',
-'不著痕跡' => '不着痕跡',
-'不著邊際' => '不着邊際',
-'世界裡' => '世界裏',
-'世界里' => '世界裏',
-'中文里' => '中文裏',
-'中文裡' => '中文裏',
-'民乐' => '中樂',
-'华乐' => '中樂',
-'查德' => '乍得',
+$zh2CN = array(
+'16進位制' => '16进位制',
+'16進位' => '16进制',
+'IP位址' => 'IP地址',
+'一份子' => '一分子',
+'全球資訊網' => '万维网',
+'三十六著' => '三十六着',
+'三極體' => '三极管',
+'下著' => '下着',
+'下著作' => '下著作',
+'下著名' => '下著名',
+'下著錄' => '下著录',
+'下著录' => '下著录',
+'下著有' => '下著有',
+'下著稱' => '下著称',
+'下著称' => '下著称',
+'下著者' => '下著者',
+'下著述' => '下著述',
+'不著' => '不着',
+'不著書' => '不著书',
+'不著名' => '不著名',
+'不著錄' => '不著录',
+'不著稱' => '不著称',
+'不著述' => '不著述',
+'與著' => '与着',
+'與著書' => '与著书',
+'與著作' => '与著作',
+'與著名' => '与著名',
+'與著錄' => '与著录',
+'與著稱' => '与著称',
+'與著者' => '与著者',
+'與著述' => '与著述',
+'醜著' => '丑着',
+'醜著書' => '丑著书',
+'醜著作' => '丑著作',
+'醜著名' => '丑著名',
+'醜著錄' => '丑著录',
+'醜著稱' => '丑著称',
+'醜著者' => '丑著者',
+'醜著述' => '丑著述',
+'邱吉爾' => '丘吉尔',
+'C型肝炎' => '丙型肝炎',
+'C肝' => '丙肝',
+'東協' => '东盟',
+'亚细安' => '东盟',
+'臨著' => '临着',
+'臨著書' => '临著书',
+'臨著作' => '临著作',
+'臨著名' => '临著名',
+'臨著錄' => '临著录',
+'臨著稱' => '临著称',
+'臨著者' => '临著者',
+'臨著述' => '临著述',
+'為著' => '为着',
+'為著《' => '为著《',
+'為著作' => '为著作',
+'為著名' => '为著名',
+'為著錄' => '为著录',
+'為著稱' => '为著称',
+'為著者' => '为著者',
+'為著述' => '为著述',
+'主機板' => '主板',
+'麗著' => '丽着',
+'麗著書' => '丽著书',
+'麗著作' => '丽著作',
+'麗著名' => '丽著名',
+'麗著錄' => '丽著录',
+'麗著稱' => '丽著称',
+'麗著者' => '丽著者',
+'麗著述' => '丽著述',
+'麼著' => '么着',
+'烏茲別克' => '乌兹别克斯坦',
+'樂著' => '乐着',
+'樂著書' => '乐著书',
+'樂著作' => '乐著作',
+'樂著名' => '乐著名',
+'樂著錄' => '乐著录',
+'樂著稱' => '乐著称',
+'樂著者' => '乐著者',
+'樂著述' => '乐著述',
+'喬治·歐威爾' => '乔治·奥威尔',
 '乘著' => '乘着',
+'乘著書' => '乘著书',
 '乘著作' => '乘著作',
 '乘著名' => '乘著名',
-'乘著書' => '乘著書',
-'ä¹\98è\91\97稱' => 'ä¹\98è\91\97稱',
+'乘著錄' => '乘著录',
+'ä¹\98è\91\97稱' => 'ä¹\98è\91\97称',
 '乘著者' => '乘著者',
 '乘著述' => '乘著述',
-'乘著錄' => '乘著錄',
-'葉門' => '也門',
-'二極體' => '二極管',
-'網際網路' => '互聯網',
-'因特网' => '互聯網',
+'B型肝炎' => '乙型肝炎',
+'B肝' => '乙肝',
+'吉力馬札羅' => '乞力马扎罗',
+'葉門' => '也门',
+'買帳' => '买账',
+'了結他' => '了结他',
+'爭著' => '争着',
+'爭著書' => '争著书',
+'爭著作' => '争著作',
+'爭著名' => '争著名',
+'爭著錄' => '争著录',
+'爭著稱' => '争著称',
+'爭著者' => '争著者',
+'爭著述' => '争著述',
+'二極體' => '二极管',
+'二進位制' => '二进位制',
+'二進位' => '二进制',
+'網際網路' => '互联网',
+'網際網絡' => '互联网',
+'亞歷山卓' => '亚历山大',
+'雅穆索戈' => '亚穆苏克罗',
+'互動式' => '交互式',
+'交帳' => '交账',
 '亮著' => '亮着',
+'亮著書' => '亮著书',
 '亮著作' => '亮著作',
 '亮著名' => '亮著名',
-'亮著書' => '亮著書',
-'亮è\91\97稱' => '亮è\91\97稱',
+'亮著錄' => '亮著录',
+'亮è\91\97稱' => '亮è\91\97称',
 '亮著者' => '亮著者',
 '亮著述' => '亮著述',
-'亮著錄' => '亮著錄',
 '人工智慧' => '人工智能',
+'甚麼' => '什么',
+'甚麽' => '什么',
 '仗著' => '仗着',
+'仗著書' => '仗著书',
 '仗著作' => '仗著作',
 '仗著名' => '仗著名',
-'仗著書' => '仗著書',
-'ä»\97è\91\97稱' => 'ä»\97è\91\97稱',
+'仗著錄' => '仗著录',
+'ä»\97è\91\97稱' => 'ä»\97è\91\97称',
 '仗著者' => '仗著者',
 '仗著述' => '仗著述',
-'ä»\97è\91\97é\8c\84' => 'ä»\97è\91\97é\8c\84',
+'ä»\98帳' => 'ä»\98è´¦',
 '代表著' => '代表着',
+'代表著書' => '代表著书',
 '代表著作' => '代表著作',
 '代表著名' => '代表著名',
-'代表著書' => '代表著書',
-'代表è\91\97稱' => '代表è\91\97稱',
+'代表著錄' => '代表著录',
+'代表è\91\97稱' => '代表è\91\97称',
 '代表著者' => '代表著者',
 '代表著述' => '代表著述',
-'代表著錄' => '代表著錄',
-'貝里斯' => '伯利茲',
+'乙太網' => '以太网',
+'伊莉莎白' => '伊丽莎白',
+'伊利諾' => '伊利诺伊',
+'伊利諾伊' => '伊利诺伊',
+'伊斯蘭瑪巴德' => '伊斯兰堡',
+'伊斯坦堡' => '伊斯坦布尔',
+'優先順序' => '优先级',
+'傳著' => '传着',
+'傳著書' => '传著书',
+'傳著作' => '传著作',
+'傳著名' => '传著名',
+'傳著錄' => '传著录',
+'傳著稱' => '传著称',
+'傳著者' => '传著者',
+'傳著述' => '传著述',
+'貝里斯' => '伯利兹',
+'伯明罕' => '伯明翰',
 '伴著' => '伴着',
+'伴著書' => '伴著书',
 '伴著作' => '伴著作',
 '伴著名' => '伴著名',
-'伴著書' => '伴著書',
-'伴著稱' => '伴著稱',
-'伴著者' => '伴著者',
-'伴著述' => '伴著述',
-'伴著錄' => '伴著錄',
-'字節' => '位元組',
-'字节' => '位元組',
+'伴著錄' => '伴著录',
+'伴著稱' => '伴著称',
+'伴著者' => '伴著者',
+'伴著述' => '伴著述',
+'點陣圖' => '位图',
+'IP' => '位址',
 '低著' => '低着',
+'低著書' => '低著书',
 '低著作' => '低著作',
 '低著名' => '低著名',
-'低著書' => '低著書',
-'ä½\8eè\91\97稱' => 'ä½\8eè\91\97稱',
+'低著錄' => '低著录',
+'ä½\8eè\91\97稱' => 'ä½\8eè\91\97称',
 '低著者' => '低著者',
 '低著述' => '低著述',
-'低著錄' => '低著錄',
 '住著' => '住着',
+'住著書' => '住著书',
 '住著作' => '住著作',
 '住著名' => '住著名',
-'住著書' => '住著書',
-'ä½\8fè\91\97稱' => 'ä½\8fè\91\97稱',
+'住著錄' => '住著录',
+'ä½\8fè\91\97稱' => 'ä½\8fè\91\97称',
 '住著者' => '住著者',
 '住著述' => '住著述',
-'住著錄' => '住著錄',
+'餘' => '余',
 '維德角' => '佛得角',
-'作品裡' => '作品裏',
-'作品里' => '作品裏',
-'來著' => '來着',
-'來著作' => '來著作',
-'來著名' => '來著名',
-'來著書' => '來著書',
-'來著稱' => '來著稱',
-'來著者' => '來著者',
-'來著述' => '來著述',
-'來著錄' => '來著錄',
-'海珊' => '侯賽因',
+'侏儸紀' => '侏罗纪',
+'側著' => '侧着',
+'側著書' => '侧著书',
+'側著作' => '侧著作',
+'側著名' => '侧著名',
+'側著錄' => '侧著录',
+'側著稱' => '侧著称',
+'側著者' => '侧著者',
+'側著述' => '侧著述',
+'可攜式' => '便携式',
+'攜帶型' => '便携式',
+'保護著' => '保护着',
 '保障著' => '保障着',
+'保障著書' => '保障著书',
 '保障著作' => '保障著作',
 '保障著名' => '保障著名',
-'保障著書' => '保障著書',
-'ä¿\9dé\9a\9cè\91\97稱' => 'ä¿\9dé\9a\9cè\91\97稱',
+'保障著錄' => '保障著录',
+'ä¿\9dé\9a\9cè\91\97稱' => 'ä¿\9dé\9a\9cè\91\97称',
 '保障著者' => '保障著者',
 '保障著述' => '保障著述',
-'保障著錄' => '保障著錄',
+'資訊理論' => '信息论',
 '信著' => '信着',
+'信著書' => '信著书',
 '信著作' => '信著作',
 '信著名' => '信著名',
-'信著書' => '信著書',
-'ä¿¡è\91\97稱' => 'ä¿¡è\91\97稱',
+'信著錄' => '信著录',
+'ä¿¡è\91\97稱' => 'ä¿¡è\91\97称',
 '信著者' => '信著者',
 '信著述' => '信著述',
-'信著錄' => '信著錄',
+'掌上壓' => '俯卧撑',
+'伏地挺身' => '俯卧撑',
+'倒帳' => '倒账',
 '候著' => '候着',
+'候著書' => '候著书',
 '候著作' => '候著作',
 '候著名' => '候著名',
-'候著書' => '候著書',
-'å\80\99è\91\97稱' => 'å\80\99è\91\97稱',
+'候著錄' => '候著录',
+'å\80\99è\91\97稱' => 'å\80\99è\91\97称',
 '候著者' => '候著者',
 '候著述' => '候著述',
-'候著錄' => '候著錄',
+'藉著' => '借着',
 '借著' => '借着',
+'借著書' => '借著书',
 '借著作' => '借著作',
 '借著名' => '借著名',
-'借著書' => '借著書',
-'å\80\9fè\91\97稱' => 'å\80\9fè\91\97稱',
+'借著錄' => '借著录',
+'å\80\9fè\91\97稱' => 'å\80\9fè\91\97称',
 '借著者' => '借著者',
 '借著述' => '借著述',
-'å\80\9fè\91\97é\8c\84' => 'å\80\9fè\91\97é\8c\84',
+'å\81\87帳' => 'å\81\87è´¦',
 '做著' => '做着',
+'做著書' => '做著书',
 '做著作' => '做著作',
 '做著名' => '做著名',
-'做著書' => '做著書',
-'å\81\9aè\91\97稱' => 'å\81\9aè\91\97稱',
+'做著錄' => '做著录',
+'å\81\9aè\91\97稱' => 'å\81\9aè\91\97称',
 '做著者' => '做著者',
 '做著述' => '做著述',
-'做著錄' => '做著錄',
-'側著' => '側着',
-'側著作' => '側著作',
-'側著名' => '側著名',
-'側著書' => '側著書',
-'側著稱' => '側著稱',
-'側著者' => '側著者',
-'側著述' => '側著述',
-'側著錄' => '側著錄',
 '偷著' => '偷着',
+'偷著書' => '偷著书',
 '偷著作' => '偷著作',
 '偷著名' => '偷著名',
-'偷著書' => '偷著書',
-'å\81·è\91\97稱' => 'å\81·è\91\97稱',
+'偷著錄' => '偷著录',
+'å\81·è\91\97稱' => 'å\81·è\91\97称',
 '偷著者' => '偷著者',
 '偷著述' => '偷著述',
-'偷著錄' => '偷著錄',
-'備著' => '備着',
-'備著作' => '備著作',
-'備著名' => '備著名',
-'備著書' => '備著書',
-'備著稱' => '備著稱',
-'備著者' => '備著者',
-'備著述' => '備著述',
-'備著錄' => '備著錄',
-'凶殘' => '兇殘',
-'凶殺' => '兇殺',
-'雪铁龙' => '先進',
-'雪鐵龍' => '先進',
+'傅利葉' => '傅里叶',
+'母音' => '元音',
 '光著' => '光着',
+'光著書' => '光著书',
 '光著作' => '光著作',
 '光著名' => '光著名',
-'光著書' => '光著書',
-'å\85\89è\91\97稱' => 'å\85\89è\91\97稱',
+'光著錄' => '光著录',
+'å\85\89è\91\97稱' => 'å\85\89è\91\97称',
 '光著者' => '光著者',
 '光著述' => '光著述',
-'光著錄' => '光著錄',
-'柯林頓' => '克林頓',
-'克羅埃西亞' => '克羅地亞',
-'公車上書' => '公車上書',
+'光碟機' => '光驱',
+'柯林頓' => '克林顿',
+'克羅埃西亞' => '克罗地亚',
+'轉殖' => '克隆',
+'複製人' => '克隆人',
+'入帳' => '入账',
+'八進位制' => '八进位制',
+'八進位' => '八进制',
+'西元1' => '公元1',
+'西元2' => '公元2',
+'西元3' => '公元3',
+'西元4' => '公元4',
+'西元5' => '公元5',
+'西元6' => '公元6',
+'西元7' => '公元7',
+'西元8' => '公元8',
+'西元9' => '公元9',
+'西元前' => '公元前',
+'公帳' => '公账',
+'六進位制' => '六进位制',
+'六進位' => '六进制',
+'關著' => '关着',
+'關係著' => '关系着',
+'關著書' => '关著书',
+'關著作' => '关著作',
+'關著名' => '关著名',
+'關著錄' => '关著录',
+'關著稱' => '关著称',
+'關著者' => '关著者',
+'關著述' => '关著述',
+'關帳' => '关账',
+'氧份' => '养分',
 '冀著' => '冀着',
+'冀著書' => '冀著书',
 '冀著作' => '冀著作',
 '冀著名' => '冀著名',
-'冀著書' => '冀著書',
-'å\86\80è\91\97稱' => 'å\86\80è\91\97稱',
+'冀著錄' => '冀著录',
+'å\86\80è\91\97稱' => 'å\86\80è\91\97称',
 '冀著者' => '冀著者',
 '冀著述' => '冀著述',
-'冀著錄' => '冀著錄',
+'記憶體' => '内存',
+'甘比亞' => '冈比亚',
 '冒著' => '冒着',
+'冒著書' => '冒著书',
 '冒著作' => '冒著作',
 '冒著名' => '冒著名',
-'冒著書' => '冒著書',
-'å\86\92è\91\97稱' => 'å\86\92è\91\97稱',
+'冒著錄' => '冒著录',
+'å\86\92è\91\97稱' => 'å\86\92è\91\97称',
 '冒著者' => '冒著者',
 '冒著述' => '冒著述',
-'冒著錄' => '冒著錄',
-'冬天里' => '冬天裏',
-'冬天裡' => '冬天裏',
-'冬日裡' => '冬日裏',
-'冬日里' => '冬日裏',
-'分布' => '分佈',
-'分布於' => '分佈於',
-'分布于' => '分佈於',
+'寫著' => '写着',
+'寫著書' => '写著书',
+'寫著作' => '写著作',
+'寫著名' => '写著名',
+'寫著錄' => '写著录',
+'寫著稱' => '写著称',
+'寫著者' => '写著者',
+'寫著述' => '写著述',
+'沖著' => '冲着',
+'衝著' => '冲着',
+'沖著。' => '冲著。',
+'沖著《' => '冲著《',
+'沖著,' => '冲著,',
+'沖帳' => '冲账',
+'涼著' => '凉着',
+'涼著書' => '凉著书',
+'涼著作' => '凉著作',
+'涼著名' => '凉著名',
+'涼著錄' => '凉著录',
+'涼著稱' => '凉著称',
+'涼著者' => '凉著者',
+'涼著述' => '凉著述',
+'湊合著' => '凑合着',
+'畿內亞' => '几内亚',
+'幾內亞比索' => '几内亚比绍',
+'凱薩琳' => '凯瑟琳',
+'嘉芙蓮' => '凯瑟琳',
+'份內' => '分内',
+'份外' => '分外',
+'解析度' => '分辨率',
+'解像度' => '分辨率',
+'份量' => '分量',
+'車諾比' => '切尔诺贝利',
+'劃著' => '划着',
+'李奧納多' => '列奥那多',
 '列支敦斯登' => '列支敦士登',
-'賴比瑞亞' => '利比里亞',
+'賴比瑞亞' => '利比里亚',
+'別著' => '别着',
+'刮著' => '刮着',
+'颳著' => '刮着',
+'到帳' => '到账',
 '制著' => '制着',
+'制著書' => '制著书',
 '制著作' => '制著作',
 '制著名' => '制著名',
-'制著書' => '制著書',
-'å\88¶è\91\97稱' => 'å\88¶è\91\97稱',
+'制著錄' => '制著录',
+'å\88¶è\91\97稱' => 'å\88¶è\91\97称',
 '制著者' => '制著者',
 '制著述' => '制著述',
-'制著錄' => '制著錄',
+'煞車' => '刹车',
 '刻著' => '刻着',
+'刻著書' => '刻著书',
 '刻著作' => '刻著作',
 '刻著名' => '刻著名',
-'刻著書' => '刻著書',
-'å\88»è\91\97稱' => 'å\88»è\91\97稱',
+'刻著錄' => '刻著录',
+'å\88»è\91\97稱' => 'å\88»è\91\97称',
 '刻著者' => '刻著者',
 '刻著述' => '刻著述',
-'刻著錄' => '刻著錄',
-'迦納' => '加納',
+'前波莫瑞' => '前波美拉尼亚',
+'辦著' => '办着',
+'辦著書' => '办著书',
+'辦著作' => '办著作',
+'辦著名' => '办著名',
+'辦著錄' => '办著录',
+'辦著稱' => '办著称',
+'辦著者' => '办著者',
+'辦著述' => '办著述',
+'加薩走廊' => '加沙地带',
+'迦納' => '加纳',
 '加彭' => '加蓬',
+'動著' => '动着',
+'動著書' => '动著书',
+'動著作' => '动著作',
+'動著名' => '动著名',
+'動著錄' => '动著录',
+'動著稱' => '动著称',
+'動著者' => '动著者',
+'動著述' => '动著述',
 '努力著' => '努力着',
+'努力著書' => '努力著书',
 '努力著作' => '努力著作',
 '努力著名' => '努力著名',
-'努力著書' => '努力著書',
-'å\8aªå\8a\9bè\91\97稱' => 'å\8aªå\8a\9bè\91\97稱',
+'努力著錄' => '努力著录',
+'å\8aªå\8a\9bè\91\97稱' => 'å\8aªå\8a\9bè\91\97称',
 '努力著者' => '努力著者',
 '努力著述' => '努力著述',
-'努力著錄' => '努力著錄',
 '努著' => '努着',
+'努著書' => '努著书',
 '努著作' => '努著作',
 '努著名' => '努著名',
-'努著書' => '努著書',
-'å\8aªè\91\97稱' => 'å\8aªè\91\97稱',
+'努著錄' => '努著录',
+'å\8aªè\91\97稱' => 'å\8aªè\91\97称',
 '努著者' => '努著者',
 '努著述' => '努著述',
-'努著錄' => '努著錄',
-'動著' => '動着',
-'動著作' => '動著作',
-'動著名' => '動著名',
-'動著書' => '動著書',
-'動著稱' => '動著稱',
-'動著者' => '動著者',
-'動著述' => '動著述',
-'動著錄' => '動著錄',
-'北环线' => '北環綫',
-'北環線' => '北環綫',
-'医院里' => '医院裏',
-'波札那' => '博茨瓦納',
-'珍妮弗·卡普里亚蒂' => '卡佩雅蒂',
+'蘿拉' => '劳拉',
+'布蘭登堡' => '勃兰登堡',
+'白朗寧' => '勃朗宁',
+'包著' => '包着',
+'北韓' => '北朝鲜',
+'十進位制' => '十进位制',
+'十進位' => '十进制',
+'公升' => '升',
+'單鏡反光機' => '单反相机',
+'單眼相機' => '单反相机',
+'波札那' => '博茨瓦纳',
+'占著' => '占着',
+'占著作' => '占著作',
+'占著名' => '占著名',
+'占著者' => '占著者',
+'喀拉蚩' => '卡拉奇',
+'卡斯楚' => '卡斯特罗',
+'卡佩雅蒂' => '卡普里亚蒂',
+'盧安達' => '卢旺达',
+'羅浮宮' => '卢浮宫',
+'羅亞爾' => '卢瓦尔',
 '印著' => '印着',
+'印著書' => '印著书',
 '印著作' => '印著作',
 '印著名' => '印著名',
-'印著書' => '印著書',
-'å\8d°è\91\97稱' => 'å\8d°è\91\97稱',
+'印著錄' => '印著录',
+'å\8d°è\91\97稱' => 'å\8d°è\91\97称',
 '印著者' => '印著者',
 '印著述' => '印著述',
-'印著錄' => '印著錄',
-'瓜地馬拉' => '危地馬拉',
-'泡麵' => '即食麵',
-'方便面' => '即食麵',
-'快速面' => '即食麵',
-'速食麵' => '即食麵',
-'厄瓜多' => '厄瓜多爾',
-'厄瓜多爾' => '厄瓜多爾',
-'厄瓜多尔' => '厄瓜多爾',
-'厄利垂亞' => '厄立特里亞',
+'瓜地馬拉' => '危地马拉',
+'厄瓜多尔' => '厄瓜多尔',
+'厄瓜多爾' => '厄瓜多尔',
+'厄瓜多' => '厄瓜多尔',
+'厄立特里亞' => '厄立特里亚',
+'厄利垂亚' => '厄立特里亚',
+'厄利垂亞' => '厄立特里亚',
+'壓著' => '压着',
+'壓著書' => '压著书',
+'壓著作' => '压著作',
+'壓著名' => '压著名',
+'壓著錄' => '压著录',
+'壓著稱' => '压著称',
+'壓著者' => '压著者',
+'壓著述' => '压著述',
 '去著' => '去着',
+'去著書' => '去著书',
 '去著作' => '去著作',
 '去著名' => '去著名',
-'去著書' => '去著書',
-'å\8e»è\91\97稱' => 'å\8e»è\91\97稱',
+'去著錄' => '去著录',
+'å\8e»è\91\97稱' => 'å\8e»è\91\97称',
 '去著者' => '去著者',
 '去著述' => '去著述',
-'去著錄' => '去著錄',
+'發著' => '发着',
+'發著《' => '发著《',
+'發著作' => '发著作',
+'發著名' => '发著名',
+'發著稱' => '发著称',
+'發著者' => '发著者',
+'已開發國家' => '发达国家',
 '受著' => '受着',
+'受著書' => '受著书',
 '受著作' => '受著作',
 '受著名' => '受著名',
-'受著書' => '受著書',
-'å\8f\97è\91\97稱' => 'å\8f\97è\91\97稱',
+'受著錄' => '受著录',
+'å\8f\97è\91\97稱' => 'å\8f\97è\91\97称',
 '受著者' => '受著者',
 '受著述' => '受著述',
-'受著錄' => '受著錄',
+'變著' => '变着',
+'變著書' => '变著书',
+'變著作' => '变著作',
+'變著名' => '变著名',
+'變著錄' => '变著录',
+'變著稱' => '变著称',
+'變著者' => '变著者',
+'變著述' => '变著述',
+'唯讀' => '只读',
 '叫著' => '叫着',
+'叫著書' => '叫著书',
 '叫著作' => '叫著作',
-'叫著名' => '叫著名',
-'叫著書' => '叫著書',
-'å\8f«è\91\97稱' => 'å\8f«è\91\97稱',
+'叫著名' => '叫著名',
+'叫著錄' => '叫著录',
+'å\8f«è\91\97稱' => 'å\8f«è\91\97称',
 '叫著者' => '叫著者',
 '叫著述' => '叫著述',
-'叫著錄' => '叫著錄',
+'撞球' => '台球',
+'台帳' => '台账',
 '叱吒' => '叱咤',
-'叱咤' => '叱咤',
-'吃不著' => '吃不着',
-'吃得著' => '吃得着',
 '吃著' => '吃着',
-'吉布地' => '吉布堤',
+'結他' => '吉他',
+'健力士世界紀錄' => '吉尼斯世界纪录',
+'金氏世界紀錄' => '吉尼斯世界纪录',
+'吉布地' => '吉布提',
+'吊著' => '吊着',
+'名份' => '名分',
 '向著' => '向着',
+'向著書' => '向著书',
 '向著作' => '向著作',
 '向著名' => '向著名',
-'向著書' => '向著書',
-'å\90\91è\91\97稱' => 'å\90\91è\91\97稱',
+'向著錄' => '向著录',
+'å\90\91è\91\97稱' => 'å\90\91è\91\97称',
 '向著者' => '向著者',
 '向著述' => '向著述',
-'向著錄' => '向著錄',
 '含著' => '含着',
+'含著書' => '含著书',
 '含著作' => '含著作',
 '含著名' => '含著名',
-'含著書' => '含著書',
-'å\90«è\91\97稱' => 'å\90«è\91\97稱',
+'含著錄' => '含著录',
+'å\90«è\91\97稱' => 'å\90«è\91\97称',
 '含著者' => '含著者',
 '含著述' => '含著述',
-'含著錄' => '含著錄',
+'聽著' => '听着',
+'聽著書' => '听著书',
+'聽著作' => '听著作',
+'聽著名' => '听著名',
+'聽著錄' => '听著录',
+'聽著稱' => '听著称',
+'聽著者' => '听著者',
+'聽著述' => '听著述',
 '吹著' => '吹着',
+'吹著書' => '吹著书',
 '吹著作' => '吹著作',
 '吹著名' => '吹著名',
-'吹著書' => '吹著書',
-'å\90¹è\91\97稱' => 'å\90¹è\91\97稱',
+'吹著錄' => '吹著录',
+'å\90¹è\91\97稱' => 'å\90¹è\91\97称',
 '吹著者' => '吹著者',
 '吹著述' => '吹著述',
-'吹著錄' => '吹著錄',
+'呆著' => '呆着',
+'呆帳' => '呆账',
 '味著' => '味着',
+'味著書' => '味著书',
 '味著作' => '味著作',
 '味著名' => '味著名',
-'味著書' => '味著書',
-'å\91³è\91\97稱' => 'å\91³è\91\97稱',
+'味著錄' => '味著录',
+'å\91³è\91\97稱' => 'å\91³è\91\97称',
 '味著者' => '味著者',
 '味著述' => '味著述',
-'味著錄' => '味著錄',
-'咤' => '咤',
-'哥斯大黎加' => '哥斯達黎加',
+'咖哩' => '咖喱',
+'諮' => '咨',
+'哈薩克' => '哈萨克斯坦',
+'響著' => '响着',
+'響著書' => '响著书',
+'響著作' => '响著作',
+'響著名' => '响著名',
+'響著錄' => '响著录',
+'響著稱' => '响著称',
+'響著者' => '响著者',
+'響著述' => '响著述',
+'哥斯大黎加' => '哥斯达黎加',
+'哥德式' => '哥特式',
 '哭著' => '哭着',
+'哭著書' => '哭著书',
 '哭著作' => '哭著作',
 '哭著名' => '哭著名',
-'哭著書' => '哭著書',
-'å\93­è\91\97稱' => 'å\93­è\91\97稱',
+'哭著錄' => '哭著录',
+'å\93­è\91\97稱' => 'å\93­è\91\97称',
 '哭著者' => '哭著者',
 '哭著述' => '哭著述',
-'哭著錄' => '哭著錄',
 '唱著' => '唱着',
+'唱著書' => '唱著书',
 '唱著作' => '唱著作',
 '唱著名' => '唱著名',
-'唱著書' => '唱著書',
-'å\94±è\91\97稱' => 'å\94±è\91\97稱',
+'唱著錄' => '唱著录',
+'å\94±è\91\97稱' => 'å\94±è\91\97称',
 '唱著者' => '唱著者',
 '唱著述' => '唱著述',
-'å\94±è\91\97é\8c\84' => 'å\94±è\91\97é\8c\84',
+'å\95¸å\90\92' => 'å\95¸å\92¤',
 '喝著' => '喝着',
+'喝著書' => '喝著书',
 '喝著作' => '喝著作',
 '喝著名' => '喝著名',
-'喝著書' => '喝著書',
-'å\96\9dè\91\97稱' => 'å\96\9dè\91\97稱',
+'喝著錄' => '喝著录',
+'å\96\9dè\91\97稱' => 'å\96\9dè\91\97称',
 '喝著者' => '喝著者',
 '喝著述' => '喝著述',
-'喝著錄' => '喝著錄',
-'自行车' => '單車',
-'嗅不著' => '嗅不着',
-'嗅得著' => '嗅得着',
 '嗅著' => '嗅着',
-'嘴里' => '嘴裏',
-'嘴裡' => '嘴裏',
+'雜訊' => '噪声',
 '嚷著' => '嚷着',
+'嚷著書' => '嚷著书',
 '嚷著作' => '嚷著作',
 '嚷著名' => '嚷著名',
-'嚷著書' => '嚷著書',
-'å\9a·è\91\97稱' => 'å\9a·è\91\97稱',
+'嚷著錄' => '嚷著录',
+'å\9a·è\91\97稱' => 'å\9a·è\91\97称',
 '嚷著者' => '嚷著者',
 '嚷著述' => '嚷著述',
-'嚷著錄' => '嚷著錄',
+'回著' => '回着',
+'回著名' => '回著名',
 '因著' => '因着',
+'因著〈' => '因著〈',
+'因著《' => '因著《',
+'因著書' => '因著书',
 '因著作' => '因著作',
 '因著名' => '因著名',
-'因著書' => '因著書',
-'因著稱' => '因著稱',
+'因著录' => '因著录',
+'因著錄' => '因著录',
+'因著稱' => '因著称',
 '因著者' => '因著者',
 '因著述' => '因著述',
-'因著錄' => '因著錄',
+'西洋棋' => '囯际象棋',
 '困著' => '困着',
+'困著書' => '困著书',
 '困著作' => '困著作',
 '困著名' => '困著名',
-'困著書' => '困著書',
-'å\9b°è\91\97稱' => 'å\9b°è\91\97稱',
+'困著錄' => '困著录',
+'å\9b°è\91\97稱' => 'å\9b°è\91\97称',
 '困著者' => '困著者',
 '困著述' => '困著述',
-'困著錄' => '困著錄',
-'圍著' => '圍着',
-'圍著作' => '圍著作',
-'圍著名' => '圍著名',
-'圍著書' => '圍著書',
-'圍著稱' => '圍著稱',
-'圍著者' => '圍著者',
-'圍著述' => '圍著述',
-'圍著錄' => '圍著錄',
-'吐瓦魯' => '圖瓦盧',
-'土豆網' => '土豆網',
-'土豆网' => '土豆網',
+'圍著' => '围着',
+'圍著書' => '围著书',
+'圍著作' => '围著作',
+'圍著名' => '围著名',
+'圍著錄' => '围著录',
+'圍著稱' => '围著称',
+'圍著者' => '围著者',
+'圍著述' => '围著述',
+'韌體' => '固件',
+'土魯斯' => '图卢兹',
+'吐瓦魯' => '图瓦卢',
+'原子筆' => '圆珠笔',
+'土庫曼' => '土库曼斯坦',
+'聖露西亞' => '圣卢西亚',
+'聖吉斯納域斯' => '圣基茨和尼维斯',
+'聖克里斯多福及尼維斯' => '圣基茨和尼维斯',
+'聖文森及格瑞那丁' => '圣文森特和格林纳丁斯',
+'聖馬利諾' => '圣马力诺',
 '在著' => '在着',
+'在著書' => '在著书',
 '在著作' => '在著作',
 '在著名' => '在著名',
-'在著書' => '在著書',
-'å\9c¨è\91\97稱' => 'å\9c¨è\91\97稱',
+'在著錄' => '在著录',
+'å\9c¨è\91\97稱' => 'å\9c¨è\91\97称',
 '在著者' => '在著者',
 '在著述' => '在著述',
-'在著錄' => '在著錄',
-'蓋亞那' => '圭亞那',
+'蓋亞那' => '圭亚那',
 '坐著' => '坐着',
+'坐著書' => '坐著书',
 '坐著作' => '坐著作',
 '坐著名' => '坐著名',
-'坐著書' => '坐著書',
-'å\9d\90è\91\97稱' => 'å\9d\90è\91\97稱',
+'坐著錄' => '坐著录',
+'å\9d\90è\91\97稱' => 'å\9d\90è\91\97称',
 '坐著者' => '坐著者',
 '坐著述' => '坐著述',
-'坐著錄' => '坐著錄',
-'坦尚尼亞' => '坦桑尼亞',
-'衣索匹亞' => '埃塞俄比亞',
-'衣索比亞' => '埃塞俄比亞',
+'坦尚尼亞' => '坦桑尼亚',
+'伊波拉' => '埃博拉',
+'衣索匹亞' => '埃塞俄比亚',
+'衣索比亞' => '埃塞俄比亚',
+'艾菲爾' => '埃菲尔',
+'葉里溫' => '埃里温',
+'功能變數名稱' => '域名',
 '吉里巴斯' => '基里巴斯',
+'堂姊' => '堂姐',
+'坎培拉' => '堪培拉',
+'塔吉克' => '塔吉克斯坦',
+'塔吉克斯坦' => '塔吉克斯坦',
+'塞爾維亞與蒙特內哥羅' => '塞尔维亚和黑山',
+'塞拉利昂' => '塞拉利昂',
 '塞普勒斯' => '塞浦路斯',
-'塞席爾' => '塞舌爾',
-'壓著' => '壓着',
-'壓著作' => '壓著作',
-'壓著名' => '壓著名',
-'壓著書' => '壓著書',
-'壓著稱' => '壓著稱',
-'壓著者' => '壓著者',
-'壓著述' => '壓著述',
-'壓著錄' => '壓著錄',
-'夏天里' => '夏天裏',
-'夏天裡' => '夏天裏',
-'夏日里' => '夏日裏',
-'夏日裡' => '夏日裏',
-'夢著' => '夢着',
-'夢著作' => '夢著作',
-'夢著名' => '夢著名',
-'夢著書' => '夢著書',
-'夢著稱' => '夢著稱',
-'夢著者' => '夢著者',
-'夢著述' => '夢著述',
-'夢著錄' => '夢著錄',
-'大卫·贝克汉姆' => '大衛碧咸',
-'夾著' => '夾着',
-'夾著作' => '夾著作',
-'夾著名' => '夾著名',
-'夾著書' => '夾著書',
-'夾著稱' => '夾著稱',
-'夾著者' => '夾著者',
-'夾著述' => '夾著述',
-'夾著錄' => '夾著錄',
+'賽普勒斯' => '塞浦路斯',
+'西維爾' => '塞维利亚',
+'塞維亞' => '塞维利亚',
+'塞席爾' => '塞舌尔',
+'音效卡' => '声卡',
+'備著' => '备着',
+'備著書' => '备著书',
+'備著作' => '备著作',
+'備著名' => '备著名',
+'備著錄' => '备著录',
+'備著稱' => '备著称',
+'備著者' => '备著者',
+'備著述' => '备著述',
+'外部連結' => '外部链接',
+'托巴哥' => '多巴哥',
+'都卜勒' => '多普勒',
+'多明尼加' => '多米尼加',
+'大姊' => '大姐',
+'天份' => '天分',
+'夾著' => '夹着',
+'夾著書' => '夹著书',
+'夾著作' => '夹著作',
+'夾著名' => '夹著名',
+'夾著錄' => '夹著录',
+'夾著稱' => '夹著称',
+'夾著者' => '夹著者',
+'夾著述' => '夹著述',
+'賓士' => '奔驰',
+'歐巴馬' => '奥巴马',
+'柯德莉·夏萍' => '奥黛丽·赫本',
+'忌廉' => '奶油',
+'荷里活' => '好莱坞',
+'姊夫' => '姐夫',
+'姊姊' => '姐姐',
+'姊弟' => '姐弟',
+'威爾斯' => '威尔士',
+'威斯伐倫' => '威斯特法伦',
+'字型大小' => '字号',
+'字型檔' => '字库',
+'欄位' => '字段',
+'位元組' => '字节',
+'存著' => '存着',
+'存著名' => '存著名',
 '孤著' => '孤着',
+'孤著書' => '孤著书',
 '孤著作' => '孤著作',
 '孤著名' => '孤著名',
-'孤著書' => '孤著書',
-'å­¤è\91\97稱' => 'å­¤è\91\97稱',
+'孤著錄' => '孤著录',
+'å­¤è\91\97稱' => 'å­¤è\91\97称',
 '孤著者' => '孤著者',
 '孤著述' => '孤著述',
-'å­¤è\91\97é\8c\84' => 'å­¤è\91\97é\8c\84',
-'å­¸è\91\97' => 'å­¸着',
-'學著作' => '學著作',
-'學著名' => '學著名',
-'學著書' => '學著書',
-'學著稱' => '學著稱',
-'學著者' => '學著者',
-'å­¸è\91\97è¿°' => 'å­¸è\91\97è¿°',
-'學著錄' => '學著錄',
-'學裡' => 'å­¸è£\8f',
-'å­¦é\87\8c' => 'å­¸è£\8f',
+'å­¸å§\8a' => 'å­¦å§\90',
+'å­¸è\91\97' => 'å­¦着',
+'學著書' => '学著书',
+'學著作' => '学著作',
+'學著名' => '学著名',
+'學著錄' => '学著录',
+'學著稱' => '学著称',
+'å­¸è\91\97è\80\85' => 'å­¦è\91\97è\80\85',
+'學著述' => '学著述',
+'太空é£\9bè¡\8cå\93¡' => 'å®\87è\88ªå\91\98',
+'太空衣' => 'å®\87è\88ªæ\9c\8d',
 '守著' => '守着',
+'守著書' => '守著书',
 '守著作' => '守著作',
 '守著名' => '守著名',
-'守著書' => '守著書',
-'å®\88è\91\97稱' => 'å®\88è\91\97稱',
+'守著錄' => '守著录',
+'å®\88è\91\97稱' => 'å®\88è\91\97称',
 '守著者' => '守著者',
 '守著述' => '守著述',
-'守著錄' => '守著錄',
-'安地卡及巴布達' => '安提瓜和巴布達',
+'安哈特' => '安哈尔特',
+'安地卡及巴布達' => '安提瓜和巴布达',
+'巨集' => '宏',
 '定著' => '定着',
+'定著書' => '定著书',
 '定著作' => '定著作',
 '定著名' => '定著名',
-'定著書' => '定著書',
-'å®\9aè\91\97稱' => 'å®\9aè\91\97稱',
+'定著錄' => '定著录',
+'å®\9aè\91\97稱' => 'å®\9aè\91\97称',
 '定著者' => '定著者',
 '定著述' => '定著述',
-'定著錄' => '定著錄',
-'沃尓沃' => '富豪',
-'寒假裡' => '寒假裏',
-'寒假里' => '寒假裏',
-'寫著' => '寫着',
-'寫著作' => '寫著作',
-'寫著名' => '寫著名',
-'寫著書' => '寫著書',
-'寫著稱' => '寫著稱',
-'寫著者' => '寫著者',
-'寫著述' => '寫著述',
-'寫著錄' => '寫著錄',
-'将军澳线' => '將軍澳綫',
-'將軍澳線' => '將軍澳綫',
-'专辑里' => '專輯裏',
-'專輯裡' => '專輯裏',
-'尋著' => '尋着',
-'尋著作' => '尋著作',
-'尋著名' => '尋著名',
-'尋著書' => '尋著書',
-'尋著稱' => '尋著稱',
-'尋著者' => '尋著者',
-'尋著述' => '尋著述',
-'尋著錄' => '尋著錄',
-'對著' => '對着',
-'對著作' => '對著作',
-'對著名' => '對著名',
-'對著書' => '對著書',
-'對著稱' => '對著稱',
-'對著者' => '對著者',
-'對著述' => '對著述',
-'對著錄' => '對著錄',
-'奈及利亞' => '尼日利亞',
-'尼日利亚' => '尼日利亞',
-'尼日利亞' => '尼日利亞',
-'尼日尔' => '尼日爾',
-'尼日爾' => '尼日爾',
-'尼日' => '尼日爾',
+'寬頻' => '宽带',
+'密西根' => '密歇根',
+'密执安' => '密歇根',
+'對著' => '对着',
+'對著書' => '对著书',
+'對著作' => '对著作',
+'對著名' => '对著名',
+'對著錄' => '对著录',
+'對著稱' => '对著称',
+'對著者' => '对著者',
+'對著述' => '对著述',
+'對帳' => '对账',
+'尋著' => '寻着',
+'尋著書' => '寻著书',
+'尋著作' => '寻著作',
+'尋著名' => '寻著名',
+'尋著錄' => '寻著录',
+'尋著稱' => '寻著称',
+'尋著者' => '寻著者',
+'尋著述' => '寻著述',
+'飛彈' => '导弹',
+'祖雲達斯' => '尤文图斯',
+'奈及利亞' => '尼日利亚',
+'尼日爾' => '尼日尔',
+'區域網' => '局域网',
+'螢幕' => '屏幕',
 '展著' => '展着',
+'展著書' => '展著书',
 '展著作' => '展著作',
 '展著名' => '展著名',
-'展著書' => '展著書',
-'å±\95è\91\97稱' => 'å±\95è\91\97稱',
+'展著錄' => '展著录',
+'å±\95è\91\97稱' => 'å±\95è\91\97称',
 '展著者' => '展著者',
 '展著述' => '展著述',
-'展著錄' => '展著錄',
-'山洞裡' => '山洞裏',
-'山洞里' => '山洞裏',
-'甘比亞' => '岡比亞',
-'公車' => '巴士',
+'華倫西亞' => '巴伦西亚',
+'瓦倫西亞' => '巴伦西亚',
+'巴塞隆納' => '巴塞罗那',
+'巴塞隆拿' => '巴塞罗那',
+'巴斯拉' => '巴士拉',
+'帕邁拉環礁' => '巴尔米拉环礁',
 '巴貝多' => '巴巴多斯',
-'巴布亞紐幾內亞' => '巴布亞新畿內亞',
-'布吉納法索' => '布基納法索',
-'布希亞' => '布希亞',
-'布希亚' => '布希亞',
-'布希' => '布殊',
-'布什' => '布殊',
+'巴布亞紐幾內亞' => '巴布亚新几内亚',
+'布殊' => '布什',
+'布吉納法索' => '布基纳法索',
+'布隆泉' => '布隆方丹',
 '蒲隆地' => '布隆迪',
-'希特勒' => '希特拉',
-'帕劳' => '帛琉',
-'帶著' => '帶着',
-'帶著作' => '帶著作',
-'帶著名' => '帶著名',
-'帶著書' => '帶著書',
-'帶著稱' => '帶著稱',
-'帶著者' => '帶著者',
-'帶著述' => '帶著述',
-'帶著錄' => '帶著錄',
-'幫著' => '幫着',
-'幫著作' => '幫著作',
-'幫著名' => '幫著名',
-'幫著書' => '幫著書',
-'幫著稱' => '幫著稱',
-'幫著者' => '幫著者',
-'幫著述' => '幫著述',
-'幫著錄' => '幫著錄',
-'干着急' => '干着急',
-'賓士' => '平治',
-'年代里' => '年代裏',
-'年代裡' => '年代裏',
-'幹著' => '幹着',
-'干着' => '幹着',
-'幾內亞比索' => '幾內亞比紹',
+'席哈克' => '希拉克',
+'希特拉' => '希特勒',
+'帛琉' => '帕劳',
+'派屈克' => '帕特里克',
+'頻寬' => '带宽',
+'帶著' => '带着',
+'帶著書' => '带著书',
+'帶著作' => '带著作',
+'帶著名' => '带著名',
+'帶著錄' => '带著录',
+'帶著稱' => '带著称',
+'帶著者' => '带著者',
+'帶著述' => '带著述',
+'幫著' => '帮着',
+'幫著書' => '帮著书',
+'幫著作' => '帮著作',
+'幫著名' => '帮著名',
+'幫著錄' => '帮著录',
+'幫著稱' => '帮著称',
+'幫著者' => '帮著者',
+'幫著述' => '帮著述',
+'乾姊' => '干姐',
+'幹著' => '干着',
+'幹著名' => '幹著名',
+'幹著稱' => '幹著称',
+'庇護著' => '庇护着',
+'應用程式' => '应用程序',
+'應著' => '应着',
+'應著書' => '应著书',
+'應著作' => '应著作',
+'應著名' => '应著名',
+'應著錄' => '应著录',
+'應著稱' => '应著称',
+'應著者' => '应著者',
+'應著述' => '应著述',
 '康著' => '康着',
+'康著書' => '康著书',
 '康著作' => '康著作',
 '康著名' => '康著名',
-'康著書' => '康著書',
-'康è\91\97稱' => '康è\91\97稱',
+'康著錄' => '康著录',
+'康è\91\97稱' => '康è\91\97称',
 '康著者' => '康著者',
 '康著述' => '康著述',
-'康著錄' => '康著錄',
+'建帳' => '建账',
+'克卜勒' => '开普勒',
+'蓋曼群島' => '开曼群岛',
+'開著' => '开着',
+'開著書' => '开著书',
+'開著作' => '开著作',
+'開著名' => '开著名',
+'開著錄' => '开著录',
+'開著稱' => '开著称',
+'開著者' => '开著者',
+'開著述' => '开著述',
+'開帳' => '开账',
+'非同步' => '异步',
+'若且唯若' => '当且仅当',
+'當著' => '当着',
+'當著書' => '当著书',
+'當著作' => '当著作',
+'當著名' => '当著名',
+'當著錄' => '当著录',
+'當著稱' => '当著称',
+'當著者' => '当著者',
+'當著述' => '当著述',
+'錄影帶' => '录像带',
+'形上學' => '形而上学',
+'澈底' => '彻底',
+'逕入' => '径入',
+'逕到' => '径到',
+'逕取' => '径取',
+'逕啟' => '径启',
+'逕寄' => '径寄',
+'逕庭' => '径庭',
+'逕往' => '径往',
+'逕自' => '径自',
+'逕行' => '径行',
+'逕迎' => '径迎',
 '待著' => '待着',
+'待著書' => '待著书',
 '待著作' => '待著作',
 '待著名' => '待著名',
-'待著書' => '待著書',
-'å¾\85è\91\97稱' => 'å¾\85è\91\97稱',
+'待著錄' => '待著录',
+'å¾\85è\91\97稱' => 'å¾\85è\91\97称',
 '待著者' => '待著者',
 '待著述' => '待著述',
-'待著錄' => '待著錄',
 '得著' => '得着',
+'得著書' => '得著书',
 '得著作' => '得著作',
 '得著名' => '得著名',
-'得著書' => '得著書',
-'å¾\97è\91\97稱' => 'å¾\97è\91\97稱',
+'得著錄' => '得著录',
+'å¾\97è\91\97稱' => 'å¾\97è\91\97称',
 '得著者' => '得著者',
 '得著述' => '得著述',
-'得著錄' => '得著錄',
+'御姊' => '御姐',
+'迴圈' => '循环',
 '循著' => '循着',
+'循著書' => '循著书',
 '循著作' => '循著作',
 '循著名' => '循著名',
-'循著書' => '循著書',
-'循è\91\97稱' => '循è\91\97稱',
+'循著錄' => '循著录',
+'循è\91\97稱' => '循è\91\97称',
 '循著者' => '循著者',
 '循著述' => '循著述',
-'循著錄' => '循著錄',
+'德勒斯登' => '德累斯顿',
+'德希達' => '德里达',
 '心著' => '心着',
-'心繫著' => '心繫着',
+'心著書' => '心著书',
 '心著作' => '心著作',
 '心著名' => '心著名',
-'心著書' => '心著書',
-'å¿\83è\91\97稱' => 'å¿\83è\91\97稱',
+'心著錄' => '心著录',
+'å¿\83è\91\97稱' => 'å¿\83è\91\97称',
 '心著者' => '心著者',
 '心著述' => '心著述',
-'心著錄' => '心著錄',
-'心裡' => '心裏',
-'心里' => '心裏',
 '忍著' => '忍着',
+'忍著書' => '忍著书',
 '忍著作' => '忍著作',
 '忍著名' => '忍著名',
-'忍著書' => '忍著書',
-'å¿\8dè\91\97稱' => 'å¿\8dè\91\97稱',
+'忍著錄' => '忍著录',
+'å¿\8dè\91\97稱' => 'å¿\8dè\91\97称',
 '忍著者' => '忍著者',
 '忍著述' => '忍著述',
-'忍著錄' => '忍著錄',
 '志著' => '志着',
+'志著書' => '志著书',
 '志著作' => '志著作',
 '志著名' => '志著名',
-'志著書' => '志著書',
-'å¿\97è\91\97稱' => 'å¿\97è\91\97稱',
+'志著錄' => '志著录',
+'å¿\97è\91\97稱' => 'å¿\97è\91\97称',
 '志著者' => '志著者',
 '志著述' => '志著述',
-'志著錄' => '志著錄',
 '忙著' => '忙着',
+'忙著書' => '忙著书',
 '忙著作' => '忙著作',
 '忙著名' => '忙著名',
-'忙著書' => '忙著書',
-'å¿\99è\91\97稱' => 'å¿\99è\91\97稱',
+'忙著錄' => '忙著录',
+'å¿\99è\91\97稱' => 'å¿\99è\91\97称',
 '忙著者' => '忙著者',
 '忙著述' => '忙著述',
-'忙著錄' => '忙著錄',
+'懷著' => '怀着',
+'懷著書' => '怀著书',
+'懷著作' => '怀著作',
+'懷著名' => '怀著名',
+'懷著錄' => '怀著录',
+'懷著稱' => '怀著称',
+'懷著者' => '怀著者',
+'懷著述' => '怀著述',
 '急著' => '急着',
+'急著書' => '急著书',
 '急著作' => '急著作',
 '急著名' => '急著名',
-'急著書' => '急著書',
-'æ\80¥è\91\97稱' => 'æ\80¥è\91\97稱',
+'急著錄' => '急著录',
+'æ\80¥è\91\97稱' => 'æ\80¥è\91\97称',
 '急著者' => '急著者',
 '急著述' => '急著述',
-'急著錄' => '急著錄',
 '性著' => '性着',
+'性著書' => '性著书',
 '性著作' => '性著作',
 '性著名' => '性著名',
-'性著書' => '性著書',
-'æ\80§è\91\97稱' => 'æ\80§è\91\97稱',
+'性著錄' => '性著录',
+'æ\80§è\91\97稱' => 'æ\80§è\91\97称',
 '性著者' => '性著者',
 '性著述' => '性著述',
-'性著錄' => '性著錄',
+'匯流排' => '总线',
+'總帳' => '总账',
+'戀著' => '恋着',
+'戀著書' => '恋著书',
+'戀著作' => '恋著作',
+'戀著名' => '恋著名',
+'戀著錄' => '恋著录',
+'戀著稱' => '恋著称',
+'戀著者' => '恋著者',
+'戀著述' => '恋著述',
+'恰如其份' => '恰如其分',
 '悠著' => '悠着',
+'悠著書' => '悠著书',
 '悠著作' => '悠著作',
 '悠著名' => '悠著名',
-'悠著書' => '悠著書',
-'æ\82 è\91\97稱' => 'æ\82 è\91\97稱',
+'悠著錄' => '悠著录',
+'æ\82 è\91\97稱' => 'æ\82 è\91\97称',
 '悠著者' => '悠著者',
 '悠著述' => '悠著述',
-'悠著錄' => '悠著錄',
-'想象' => '想像',
+'慣著' => '惯着',
+'慣著書' => '惯著书',
+'慣著作' => '惯著作',
+'慣著名' => '惯著名',
+'慣著錄' => '惯著录',
+'慣著稱' => '惯著称',
+'慣著者' => '惯著者',
+'慣著述' => '惯著述',
 '想著' => '想着',
+'想著書' => '想著书',
 '想著作' => '想著作',
 '想著名' => '想著名',
-'想著書' => '想著書',
-'æ\83³è\91\97稱' => 'æ\83³è\91\97稱',
+'想著錄' => '想著录',
+'æ\83³è\91\97稱' => 'æ\83³è\91\97称',
 '想著者' => '想著者',
 '想著述' => '想著述',
-'想著錄' => '想著錄',
 '義大利' => '意大利',
-'愛著' => '愛着',
-'愛著作' => '愛著作',
-'愛著名' => '愛著名',
-'愛著書' => '愛著書',
-'愛著稱' => '愛著稱',
-'愛著者' => '愛著者',
-'愛著述' => '愛著述',
-'愛著錄' => '愛著錄',
-'慣著' => '慣着',
-'慣著作' => '慣著作',
-'慣著名' => '慣著名',
-'慣著書' => '慣著書',
-'慣著稱' => '慣著稱',
-'慣著者' => '慣著者',
-'慣著述' => '慣著述',
-'慣著錄' => '慣著錄',
-'應著' => '應着',
-'應著作' => '應著作',
-'應著名' => '應著名',
-'應著書' => '應著書',
-'應著稱' => '應著稱',
-'應著者' => '應著者',
-'應著述' => '應著述',
-'應著錄' => '應著錄',
-'懷著' => '懷着',
-'懷著作' => '懷著作',
-'懷著名' => '懷著名',
-'懷著書' => '懷著書',
-'懷著稱' => '懷著稱',
-'懷著者' => '懷著者',
-'懷著述' => '懷著述',
-'懷著錄' => '懷著錄',
-'戀著' => '戀着',
-'戀著作' => '戀著作',
-'戀著名' => '戀著名',
-'戀著書' => '戀著書',
-'戀著稱' => '戀著稱',
-'戀著者' => '戀著者',
-'戀著述' => '戀著述',
-'戀著錄' => '戀著錄',
-'戰著' => '戰着',
-'戰著作' => '戰著作',
-'戰著名' => '戰著名',
-'戰著書' => '戰著書',
-'戰著稱' => '戰著稱',
-'戰著者' => '戰著者',
-'戰著述' => '戰著述',
-'戰著錄' => '戰著錄',
-'戲裡' => '戲裏',
-'戏里' => '戲裏',
+'戈巴契夫' => '戈尔巴乔夫',
+'成份' => '成分',
+'戰著' => '战着',
+'戰著書' => '战著书',
+'戰著作' => '战著作',
+'戰著名' => '战著名',
+'戰著錄' => '战著录',
+'戰著稱' => '战著称',
+'戰著者' => '战著者',
+'戰著述' => '战著述',
+'坎城' => '戛纳',
 '黛安娜' => '戴安娜',
-'狄安娜' => '戴安娜',
 '戴著' => '戴着',
+'戴著書' => '戴著书',
 '戴著作' => '戴著作',
 '戴著名' => '戴著名',
-'戴著書' => '戴著書',
-'æ\88´è\91\97稱' => 'æ\88´è\91\97稱',
+'戴著錄' => '戴著录',
+'æ\88´è\91\97稱' => 'æ\88´è\91\97称',
 '戴著者' => '戴著者',
 '戴著述' => '戴著述',
-'戴著錄' => '戴著錄',
-'索羅門群島' => '所羅門群島',
+'索羅門群島' => '所罗门群岛',
+'紮著' => '扎着',
+'紮著書' => '扎著书',
+'紮著作' => '扎著作',
+'紮著名' => '扎著名',
+'紮著錄' => '扎著录',
+'紮著稱' => '扎著称',
+'紮著者' => '扎著者',
+'紮著述' => '扎著述',
 '列印' => '打印',
-'å\8d°è¡¨æ©\9f' => 'æ\89\93å\8d°æ©\9f',
+'å\8d°è¡¨æ©\9f' => 'æ\89\93å\8d°æ\9cº',
 '打著' => '打着',
+'打著書' => '打著书',
 '打著作' => '打著作',
 '打著名' => '打著名',
-'打著書' => '打著書',
-'æ\89\93è\91\97稱' => 'æ\89\93è\91\97稱',
+'打著錄' => '打著录',
+'æ\89\93è\91\97稱' => 'æ\89\93è\91\97称',
 '打著者' => '打著者',
 '打著述' => '打著述',
-'打著錄' => '打著錄',
 '扛著' => '扛着',
+'扛著書' => '扛著书',
 '扛著作' => '扛著作',
 '扛著名' => '扛著名',
-'扛著書' => '扛著書',
-'æ\89\9bè\91\97稱' => 'æ\89\9bè\91\97稱',
+'扛著錄' => '扛著录',
+'æ\89\9bè\91\97稱' => 'æ\89\9bè\91\97称',
 '扛著者' => '扛著者',
 '扛著述' => '扛著述',
-'扛著錄' => '扛著錄',
-'找不著' => '找不着',
-'找得著' => '找得着',
+'掃瞄' => '扫描',
+'掃瞄器' => '扫描仪',
 '抓著' => '抓着',
 '抓著作' => '抓著作',
 '抓著名' => '抓著名',
-'抓著稱' => '抓著稱',
+'抓著錄' => '抓著录',
+'抓著稱' => '抓著称',
 '抓著者' => '抓著者',
 '抓著述' => '抓著述',
-'抓著錄' => '抓著錄',
+'投機份子' => '投机分子',
+'護著' => '护着',
+'護著書' => '护著书',
+'護著作' => '护著作',
+'護著名' => '护著名',
+'護著錄' => '护著录',
+'護著稱' => '护著称',
+'護著者' => '护著者',
+'護著述' => '护著述',
+'報帳' => '报账',
 '披著' => '披着',
+'披著書' => '披著书',
 '披著作' => '披著作',
 '披著名' => '披著名',
-'披著書' => '披著書',
-'æ\8a«è\91\97稱' => 'æ\8a«è\91\97稱',
+'披著錄' => '披著录',
+'æ\8a«è\91\97稱' => 'æ\8a«è\91\97称',
 '披著者' => '披著者',
 '披著述' => '披著述',
-'æ\8a«è\91\97é\8c\84' => 'æ\8a«è\91\97é\8c\84',
+'æ\93¡è\91\97' => 'æ\8a¬ç\9d\80',
 '抬著' => '抬着',
 '抬著作' => '抬著作',
 '抬著名' => '抬著名',
-'抬著稱' => '抬著稱',
+'抬著錄' => '抬著录',
+'抬著稱' => '抬著称',
 '抬著者' => '抬著者',
 '抬著述' => '抬著述',
-'抬著錄' => '抬著錄',
 '抱著' => '抱着',
 '抱著作' => '抱著作',
 '抱著名' => '抱著名',
-'抱著稱' => '抱著稱',
+'抱著錄' => '抱著录',
+'抱著稱' => '抱著称',
 '抱著者' => '抱著者',
 '抱著述' => '抱著述',
-'æ\8a±è\91\97é\8c\84' => 'æ\8a±è\91\97é\8c\84',
+'æ\93\94è\91\97' => 'æ\8b\85ç\9d\80',
 '拉著' => '拉着',
+'拉著書' => '拉著书',
 '拉著作' => '拉著作',
 '拉著名' => '拉著名',
-'拉著書' => '拉著書',
-'æ\8b\89è\91\97稱' => 'æ\8b\89è\91\97稱',
+'拉著錄' => '拉著录',
+'æ\8b\89è\91\97稱' => 'æ\8b\89è\91\97称',
 '拉著者' => '拉著者',
 '拉著述' => '拉著述',
-'拉著錄' => '拉著錄',
 '拎著' => '拎着',
 '拎著作' => '拎著作',
 '拎著名' => '拎著名',
-'拎著稱' => '拎著稱',
+'拎著錄' => '拎著录',
+'拎著稱' => '拎著称',
 '拎著者' => '拎著者',
 '拎著述' => '拎著述',
-'拎著錄' => '拎著錄',
 '拖著' => '拖着',
 '拖著作' => '拖著作',
 '拖著名' => '拖著名',
-'拖著稱' => '拖著稱',
+'拖著錄' => '拖著录',
+'拖著稱' => '拖著称',
 '拖著者' => '拖著者',
 '拖著述' => '拖著述',
-'拖著錄' => '拖著錄',
 '拼著' => '拼着',
 '拼著作' => '拼著作',
 '拼著名' => '拼著名',
-'拼著稱' => '拼著稱',
+'拼著錄' => '拼著录',
+'拼著稱' => '拼著称',
 '拼著者' => '拼著者',
 '拼著述' => '拼著述',
-'拼著錄' => '拼著錄',
 '拿著' => '拿着',
 '拿著作' => '拿著作',
 '拿著名' => '拿著名',
-'拿著稱' => '拿著稱',
+'拿著錄' => '拿著录',
+'拿著稱' => '拿著称',
 '拿著者' => '拿著者',
 '拿著述' => '拿著述',
-'拿著錄' => '拿著錄',
 '持著' => '持着',
 '持著作' => '持著作',
 '持著名' => '持著名',
-'持著稱' => '持著稱',
+'持著錄' => '持著录',
+'持著稱' => '持著称',
 '持著者' => '持著者',
 '持著述' => '持著述',
-'æ\8c\81è\91\97é\8c\84' => 'æ\8c\81è\91\97é\8c\84',
+'æ\8e\9bè\91\97' => 'æ\8c\82ç\9d\80',
 '挑著' => '挑着',
 '挑著作' => '挑著作',
 '挑著名' => '挑著名',
-'挑著稱' => '挑著稱',
+'挑著錄' => '挑著录',
+'挑著稱' => '挑著称',
 '挑著者' => '挑著者',
 '挑著述' => '挑著述',
-'挑著錄' => '挑著錄',
+'擋著' => '挡着',
+'擋著作' => '挡著作',
+'擋著名' => '挡著名',
+'擋著錄' => '挡著录',
+'擋著稱' => '挡著称',
+'擋著者' => '挡著者',
+'擋著述' => '挡著述',
+'掙著' => '挣着',
+'掙著書' => '挣著书',
+'掙著作' => '挣著作',
+'掙著名' => '挣著名',
+'掙著錄' => '挣著录',
+'掙著稱' => '挣著称',
+'掙著者' => '挣著者',
+'掙著述' => '挣著述',
+'揮著' => '挥着',
+'揮著作' => '挥著作',
+'揮著名' => '挥著名',
+'揮著錄' => '挥著录',
+'揮著稱' => '挥著称',
+'揮著者' => '挥著者',
+'揮著述' => '挥著述',
 '挨著' => '挨着',
 '挨著作' => '挨著作',
 '挨著名' => '挨著名',
-'挨著稱' => '挨著稱',
+'挨著錄' => '挨著录',
+'挨著稱' => '挨著称',
 '挨著者' => '挨著者',
 '挨著述' => '挨著述',
-'挨著錄' => '挨著錄',
 '捆著' => '捆着',
 '捆著作' => '捆著作',
 '捆著名' => '捆著名',
-'捆著稱' => '捆著稱',
+'捆著錄' => '捆著录',
+'捆著稱' => '捆著称',
 '捆著者' => '捆著者',
 '捆著述' => '捆著述',
-'捆著錄' => '捆著錄',
+'據著' => '据着',
+'據著書' => '据著书',
+'據著作' => '据著作',
+'據著名' => '据著名',
+'據著錄' => '据著录',
+'據著稱' => '据著称',
+'據著者' => '据著者',
+'據著述' => '据著述',
+'積架' => '捷豹',
 '掖著' => '掖着',
 '掖著作' => '掖著作',
 '掖著名' => '掖著名',
-'掖著稱' => '掖著稱',
+'掖著錄' => '掖著录',
+'掖著稱' => '掖著称',
 '掖著者' => '掖著者',
 '掖著述' => '掖著述',
-'掖著錄' => '掖著錄',
-'掙著' => '掙着',
-'掙著作' => '掙著作',
-'掙著名' => '掙著名',
-'掙著書' => '掙著書',
-'掙著稱' => '掙著稱',
-'掙著者' => '掙著者',
-'掙著述' => '掙著述',
-'掙著錄' => '掙著錄',
-'掛鉤' => '掛鈎',
 '接著' => '接着',
 '接著作' => '接著作',
 '接著名' => '接著名',
-'接著稱' => '接著稱',
+'接著錄' => '接著录',
+'接著稱' => '接著称',
 '接著者' => '接著者',
 '接著述' => '接著述',
-'æ\8e¥è\91\97é\8c\84' => 'æ\8e¥è\91\97é\8c\84',
+'æ\8e§å\88¶é \85' => 'æ\8e§ä»¶',
 '揉著' => '揉着',
+'揉著書' => '揉著书',
 '揉著作' => '揉著作',
 '揉著名' => '揉著名',
-'揉著書' => '揉著書',
-'æ\8f\89è\91\97稱' => 'æ\8f\89è\91\97稱',
+'揉著錄' => '揉著录',
+'æ\8f\89è\91\97稱' => 'æ\8f\89è\91\97称',
 '揉著者' => '揉著者',
 '揉著述' => '揉著述',
-'揉著錄' => '揉著錄',
 '提著' => '提着',
 '提著作' => '提著作',
 '提著名' => '提著名',
-'提著稱' => '提著稱',
+'提著錄' => '提著录',
+'提著稱' => '提著称',
 '提著者' => '提著者',
 '提著述' => '提著述',
-'提著錄' => '提著錄',
-'揮著' => '揮着',
-'揮著作' => '揮著作',
-'揮著名' => '揮著名',
-'揮著稱' => '揮著稱',
-'揮著者' => '揮著者',
-'揮著述' => '揮著述',
-'揮著錄' => '揮著錄',
-'摟著' => '摟着',
-'摟著作' => '摟著作',
-'摟著名' => '摟著名',
-'摟著稱' => '摟著稱',
-'摟著者' => '摟著者',
-'摟著述' => '摟著述',
-'摟著錄' => '摟著錄',
+'外掛程式' => '插件',
+'摟著' => '搂着',
+'摟著作' => '搂著作',
+'摟著名' => '搂著名',
+'摟著錄' => '搂著录',
+'摟著稱' => '搂著称',
+'摟著者' => '搂著者',
+'摟著述' => '搂著述',
+'搜尋引擎' => '搜索引擎',
+'擺著' => '摆着',
+'擺著作' => '摆著作',
+'擺著名' => '摆著名',
+'擺著錄' => '摆著录',
+'擺著稱' => '摆著称',
+'擺著者' => '摆著者',
+'擺著述' => '摆著述',
+'電單車' => '摩托车',
+'戴卓爾' => '撒切尔',
+'柴契爾' => '撒切尔',
 '撼著' => '撼着',
+'撼著書' => '撼著书',
 '撼著作' => '撼著作',
 '撼著名' => '撼著名',
-'撼著書' => '撼著書',
-'æ\92¼è\91\97稱' => 'æ\92¼è\91\97稱',
+'撼著錄' => '撼著录',
+'æ\92¼è\91\97稱' => 'æ\92¼è\91\97称',
 '撼著者' => '撼著者',
 '撼著述' => '撼著述',
-'撼著錄' => '撼著錄',
-'擋著' => '擋着',
-'擋著作' => '擋著作',
-'擋著名' => '擋著名',
-'擋著稱' => '擋著稱',
-'擋著者' => '擋著者',
-'擋著述' => '擋著述',
-'擋著錄' => '擋著錄',
-'據著' => '據着',
-'據著作' => '據著作',
-'據著名' => '據著名',
-'據著書' => '據著書',
-'據著稱' => '據著稱',
-'據著者' => '據著者',
-'據著述' => '據著述',
-'據著錄' => '據著錄',
-'擺著' => '擺着',
-'擺著作' => '擺著作',
-'擺著名' => '擺著名',
-'擺著稱' => '擺著稱',
-'擺著者' => '擺著者',
-'擺著述' => '擺著述',
-'擺著錄' => '擺著錄',
-'故事里' => '故事裏',
-'故事裡' => '故事裏',
+'作業系統' => '操作系统',
+'收帳' => '收账',
+'放著' => '放着',
+'放著作' => '放著作',
+'放著名' => '放著名',
+'放著称' => '放著称',
+'放著稱' => '放著称',
+'放帳' => '放账',
 '敞著' => '敞着',
 '敞著作' => '敞著作',
 '敞著名' => '敞著名',
-'敞著稱' => '敞著稱',
+'敞著錄' => '敞著录',
+'敞著稱' => '敞著称',
 '敞著者' => '敞著者',
 '敞著述' => '敞著述',
-'敞著錄' => '敞著錄',
-'數著' => '數着',
-'數著作' => '數著作',
-'數著名' => '數著名',
-'數著稱' => '數著稱',
-'數著者' => '數著者',
-'數著述' => '數著述',
-'數著錄' => '數著錄',
+'數碼訊號' => '数字信号',
+'數位訊號' => '数字信号',
+'數位技術' => '数字技术',
+'數碼技術' => '数字技术',
+'數位電視' => '数字电视',
+'數碼電視' => '数字电视',
+'資料庫' => '数据库',
+'數著' => '数着',
+'數位相機' => '数码相机',
+'數著作' => '数著作',
+'數著名' => '数著名',
+'數著錄' => '数著录',
+'數著稱' => '数著称',
+'數著者' => '数著者',
+'數著述' => '数著述',
+'汶萊' => '文莱',
+'鬥著' => '斗着',
+'鬥著書' => '斗著书',
+'鬥著作' => '斗著作',
+'鬥著名' => '斗著名',
+'鬥著錄' => '斗著录',
+'鬥著稱' => '斗著称',
+'鬥著者' => '斗著者',
+'鬥著述' => '斗著述',
 '斥著' => '斥着',
+'斥著書' => '斥著书',
 '斥著作' => '斥著作',
 '斥著名' => '斥著名',
-'斥著書' => '斥著書',
-'æ\96¥è\91\97稱' => 'æ\96¥è\91\97稱',
+'斥著錄' => '斥著录',
+'æ\96¥è\91\97稱' => 'æ\96¥è\91\97称',
 '斥著者' => '斥著者',
 '斥著述' => '斥著述',
-'斥著錄' => '斥著錄',
-'史瓦濟蘭' => '斯威士蘭',
-'斯洛維尼亞' => '斯洛文尼亞',
-'新著龍虎門' => '新著龍虎門',
-'紐西蘭' => '新西蘭',
-'日子里' => '日子裏',
-'日子裡' => '日子裏',
+'史達林' => '斯大林',
+'史瓦濟蘭' => '斯威士兰',
+'斯洛維尼亞' => '斯洛文尼亚',
+'史特勞斯' => '斯特劳斯',
+'紐幾內亞' => '新几内亚',
+'紐澤西' => '新泽西',
+'紐西蘭' => '新西兰',
+'舊帳' => '旧账',
+'三藩市' => '旧金山',
+'昂山素姬' => '昂山素季',
+'翁山蘇姬' => '昂山素季',
 '昂著' => '昂着',
+'昂著書' => '昂著书',
 '昂著作' => '昂著作',
 '昂著名' => '昂著名',
-'昂著書' => '昂著書',
-'æ\98\82è\91\97稱' => 'æ\98\82è\91\97稱',
+'昂著錄' => '昂著录',
+'æ\98\82è\91\97稱' => 'æ\98\82è\91\97称',
 '昂著者' => '昂著者',
 '昂著述' => '昂著述',
-'æ\98\82è\91\97é\8c\84' => 'æ\98\82è\91\97é\8c\84',
+'æ\98\8eç\99½å¸³' => 'æ\98\8eç\99½è´¦',
 '映著' => '映着',
+'映著書' => '映著书',
 '映著作' => '映著作',
 '映著名' => '映著名',
-'映著書' => '映著書',
-'æ\98 è\91\97稱' => 'æ\98 è\91\97稱',
+'映著錄' => '映著录',
+'æ\98 è\91\97稱' => 'æ\98 è\91\97称',
 '映著者' => '映著者',
 '映著述' => '映著述',
-'映著錄' => '映著錄',
-'春假里' => '春假裏',
-'春假裡' => '春假裏',
-'春天裡' => '春天裏',
-'春天里' => '春天裏',
-'春日裡' => '春日裏',
-'春日里' => '春日裏',
-'时间里' => '時間裏',
-'時間裡' => '時間裏',
+'顯示卡' => '显卡',
+'显著' => '显著',
+'顯著' => '显著',
 '晃著' => '晃着',
 '晃著作' => '晃著作',
 '晃著名' => '晃著名',
-'晃著稱' => '晃著稱',
+'晃著錄' => '晃著录',
+'晃著稱' => '晃著称',
 '晃著者' => '晃著者',
 '晃著述' => '晃著述',
-'晃著錄' => '晃著錄',
-'暑假里' => '暑假裏',
-'暑假裡' => '暑假裏',
+'普利茲' => '普利策',
+'蒲美蓬' => '普密蓬',
+'蒲朗克' => '普朗克',
+'電晶體' => '晶体管',
+'智慧型' => '智能',
+'智慧卡' => '智能卡',
+'智慧手機' => '智能手机',
 '暗著' => '暗着',
+'暗著書' => '暗著书',
 '暗著作' => '暗著作',
 '暗著名' => '暗著名',
-'暗著書' => '暗著書',
-'æ\9a\97è\91\97稱' => 'æ\9a\97è\91\97稱',
+'暗著錄' => '暗著录',
+'æ\9a\97è\91\97稱' => 'æ\9a\97è\91\97称',
 '暗著者' => '暗著者',
 '暗著述' => '暗著述',
-'暗著錄' => '暗著錄',
 '有著' => '有着',
+'有著書' => '有著书',
 '有著作' => '有著作',
 '有著名' => '有著名',
-'有著書' => '有著書',
-'æ\9c\89è\91\97稱' => 'æ\9c\89è\91\97稱',
+'有著錄' => '有著录',
+'æ\9c\89è\91\97稱' => 'æ\9c\89è\91\97称',
 '有著者' => '有著者',
 '有著述' => '有著述',
-'有著錄' => '有著錄',
+'伺服器' => '服务器',
 '望著' => '望着',
 '望著作' => '望著作',
 '望著名' => '望著名',
-'望著書' => '望著書',
-'æ\9c\9bè\91\97稱' => 'æ\9c\9bè\91\97稱',
+'望著錄' => '望著录',
+'æ\9c\9bè\91\97稱' => 'æ\9c\9bè\91\97称',
 '望著者' => '望著者',
 '望著述' => '望著述',
-'望著錄' => '望著錄',
 '朝著' => '朝着',
 '朝著作' => '朝著作',
 '朝著名' => '朝著名',
-'朝著稱' => '朝著稱',
+'朝著錄' => '朝著录',
+'朝著稱' => '朝著称',
 '朝著者' => '朝著者',
 '朝著述' => '朝著述',
-'朝著錄' => '朝著錄',
+'本份' => '本分',
+'本本份份' => '本本分分',
+'班傑明' => '本杰明',
 '本著' => '本着',
+'本著書' => '本著书',
 '本著作' => '本著作',
 '本著名' => '本著名',
-'本著書' => '本著書',
-'æ\9c¬è\91\97稱' => 'æ\9c¬è\91\97稱',
+'本著錄' => '本著录',
+'æ\9c¬è\91\97稱' => 'æ\9c¬è\91\97称',
 '本著者' => '本著者',
 '本著述' => '本著述',
-'本著錄' => '本著錄',
-'村子里' => '村子裏',
-'村子裡' => '村子裏',
-'东涌线' => '東涌綫',
-'東涌線' => '東涌綫',
-'東鐵線' => '東鐵綫',
-'东铁线' => '東鐵綫',
+'本帳' => '本账',
+'機械人' => '机器人',
+'工具機' => '机床',
+'殺著' => '杀着',
+'殺著書' => '杀著书',
+'殺著作' => '杀著作',
+'殺著名' => '杀著名',
+'殺著錄' => '杀著录',
+'殺著稱' => '杀著称',
+'殺著者' => '杀著者',
+'殺著述' => '杀著述',
+'雜著' => '杂着',
+'雜著書' => '杂著书',
+'雜著作' => '杂著作',
+'雜著名' => '杂著名',
+'雜著錄' => '杂著录',
+'雜著稱' => '杂著称',
+'雜著者' => '杂著者',
+'雜著述' => '杂著述',
+'杜塞道夫' => '杜塞尔多夫',
+'來著' => '来着',
+'來著書' => '来著书',
+'來著作' => '来著作',
+'來著名' => '来著名',
+'來著錄' => '来著录',
+'來著稱' => '来著称',
+'來著者' => '来著者',
+'來著述' => '来著述',
+'板著臉' => '板着脸',
 '枕著' => '枕着',
 '枕著作' => '枕著作',
 '枕著名' => '枕著名',
-'枕著稱' => '枕著稱',
+'枕著錄' => '枕著录',
+'枕著稱' => '枕著称',
 '枕著者' => '枕著者',
 '枕著述' => '枕著述',
-'枕著錄' => '枕著錄',
-'格瑞那達' => '格林納達',
-'撞球' => '桌球',
-'台球' => '桌球',
+'槍枝' => '枪支',
+'柏林圍牆' => '柏林墙',
+'查帳' => '查账',
+'查維茲' => '查韦斯',
+'標誌著' => '标志着',
+'格瑞那達' => '格林纳达',
+'森巴舞' => '桑巴舞',
+'梅赫西迪' => '梅赛德斯',
+'夢著' => '梦着',
+'夢著書' => '梦著书',
+'夢著作' => '梦著作',
+'夢著名' => '梦著名',
+'夢著錄' => '梦著录',
+'夢著稱' => '梦著称',
+'夢著者' => '梦著者',
+'夢著述' => '梦著述',
 '梳著' => '梳着',
 '梳著作' => '梳著作',
 '梳著名' => '梳著名',
-'梳著稱' => '梳著稱',
+'梳著錄' => '梳著录',
+'梳著稱' => '梳著称',
 '梳著者' => '梳著者',
 '梳著述' => '梳著述',
-'梳著錄' => '梳著錄',
-'森林裡' => '森林裏',
-'森林里' => '森林裏',
-'棺材裡' => '棺材裏',
-'棺材里' => '棺材裏',
-'榴蓮' => '榴槤',
-'榴莲' => '榴槤',
-'樂著' => '樂着',
-'樂著作' => '樂著作',
-'樂著名' => '樂著名',
-'樂著書' => '樂著書',
-'樂著稱' => '樂著稱',
-'樂著者' => '樂著者',
-'樂著述' => '樂著述',
-'樂著錄' => '樂著錄',
-'寶獅' => '標致',
-'標誌著' => '標誌着',
-'機場快線' => '機場快綫',
-'机场快线' => '機場快綫',
-'機器人' => '機械人',
-'机器人' => '機械人',
-'历史里' => '歷史裏',
-'歷史裡' => '歷史裏',
-'殺著' => '殺着',
-'殺著作' => '殺著作',
-'殺著名' => '殺著名',
-'殺著書' => '殺著書',
-'殺著稱' => '殺著稱',
-'殺著者' => '殺著者',
-'殺著述' => '殺著述',
-'殺著錄' => '殺著錄',
-'茅利塔尼亞' => '毛里塔尼亞',
-'毛里求斯' => '毛里裘斯',
-'模里西斯' => '毛里裘斯',
+'梵谷' => '梵高',
+'機率' => '概率',
+'欠帳' => '欠账',
+'死帳' => '死账',
+'庇里牛斯' => '比利牛斯',
+'畢卡索' => '毕加索',
+'茅利塔尼亞' => '毛里塔尼亚',
+'毛里裘斯' => '毛里求斯',
+'模里西斯' => '毛里求斯',
+'公厘' => '毫米',
+'公釐' => '毫米',
+'胺基酸' => '氨基酸',
+'水份' => '水分',
+'水氣' => '水汽',
 '求著' => '求着',
+'求著書' => '求著书',
 '求著作' => '求著作',
 '求著名' => '求著名',
-'求著書' => '求著書',
-'æ±\82è\91\97稱' => 'æ±\82è\91\97稱',
+'求著錄' => '求著录',
+'æ±\82è\91\97稱' => 'æ±\82è\91\97称',
 '求著者' => '求著者',
 '求著述' => '求著述',
-'æ±\82è\91\97é\8c\84' => 'æ±\82è\91\97é\8c\84',
-'æ\96\87è\8e±' => '汶è\90\8a',
+'漢諾ç\93¦' => 'æ±\89诺å¨\81',
+'æ²\88è\91\97' => 'æ²\89ç\9d\80',
 '沉著' => '沉着',
+'沉著書' => '沉著书',
 '沉著作' => '沉著作',
 '沉著名' => '沉著名',
-'沉著書' => '沉著書',
-'æ²\89è\91\97稱' => 'æ²\89è\91\97稱',
+'沉著錄' => '沉著录',
+'æ²\89è\91\97稱' => 'æ²\89è\91\97称',
 '沉著者' => '沉著者',
 '沉著述' => '沉著述',
-'沉著錄' => '沉著錄',
-'沙中线' => '沙中綫',
-'沙中線' => '沙中綫',
-'沙地阿拉伯' => '沙特阿拉伯',
 '沙烏地阿拉伯' => '沙特阿拉伯',
-'沙田至中環線' => '沙田至中環綫',
-'沙田至中环线' => '沙田至中環綫',
-'马拉特·萨芬' => '沙芬',
+'沙地阿拉伯' => '沙特阿拉伯',
 '沿著' => '沿着',
+'沿著書' => '沿著书',
 '沿著作' => '沿著作',
 '沿著名' => '沿著名',
-'沿著書' => '沿著書',
-'沿è\91\97稱' => '沿è\91\97稱',
+'沿著錄' => '沿著录',
+'沿è\91\97稱' => '沿è\91\97称',
 '沿著者' => '沿著者',
 '沿著述' => '沿著述',
-'沿著錄' => '沿著錄',
-'波士尼亞赫塞哥維納' => '波斯尼亞黑塞哥維那',
-'辛巴威' => '津巴布韋',
+'玻里尼西亞' => '波利尼西亚',
+'波士尼亞' => '波斯尼亚',
+'波士尼亞赫塞哥維納' => '波斯尼亚和黑塞哥维那',
+'鐵達尼號' => '泰坦尼克号',
+'幫浦' => '泵',
+'辛巴威' => '津巴布韦',
 '宏都拉斯' => '洪都拉斯',
 '活著' => '活着',
+'活著書' => '活著书',
 '活著作' => '活著作',
 '活著名' => '活著名',
-'活著書' => '活著書',
-'æ´»è\91\97稱' => 'æ´»è\91\97稱',
+'活著錄' => '活著录',
+'æ´»è\91\97稱' => 'æ´»è\91\97称',
 '活著者' => '活著者',
 '活著述' => '活著述',
-'活著錄' => '活著錄',
-'行動電話' => '流動電話',
-'移动电话' => '流動電話',
+'流水帳' => '流水账',
 '流著' => '流着',
+'流著書' => '流著书',
 '流著作' => '流著作',
 '流著名' => '流著名',
-'流著書' => '流著書',
-'æµ\81è\91\97稱' => 'æµ\81è\91\97稱',
+'流著錄' => '流著录',
+'æµ\81è\91\97稱' => 'æµ\81è\91\97称',
 '流著者' => '流著者',
 '流著述' => '流著述',
-'流著錄' => '流著錄',
 '流露著' => '流露着',
 '浮著' => '浮着',
+'蘭卡威' => '浮罗交怡',
+'浮著書' => '浮著书',
 '浮著作' => '浮著作',
 '浮著名' => '浮著名',
-'浮著書' => '浮著書',
-'æµ®è\91\97稱' => 'æµ®è\91\97稱',
+'浮著錄' => '浮著录',
+'æµ®è\91\97稱' => 'æµ®è\91\97称',
 '浮著者' => '浮著者',
 '浮著述' => '浮著述',
-'浮著錄' => '浮著錄',
+'海洛英' => '海洛因',
+'海浬' => '海里',
+'塗著' => '涂着',
+'潤著' => '润着',
+'潤著書' => '润著书',
+'潤著作' => '润著作',
+'潤著名' => '润著名',
+'潤著錄' => '润著录',
+'潤著稱' => '润著称',
+'潤著者' => '润著者',
+'潤著述' => '润著述',
 '涵著' => '涵着',
+'涵著書' => '涵著书',
 '涵著作' => '涵著作',
 '涵著名' => '涵著名',
-'涵著書' => '涵著書',
-'涵è\91\97稱' => '涵è\91\97稱',
+'涵著錄' => '涵著录',
+'涵è\91\97稱' => '涵è\91\97称',
 '涵著者' => '涵著者',
 '涵著述' => '涵著述',
-'涵著錄' => '涵著錄',
-'涼著' => '涼着',
-'涼著作' => '涼著作',
-'涼著名' => '涼著名',
-'涼著書' => '涼著書',
-'涼著稱' => '涼著稱',
-'涼著者' => '涼著者',
-'涼著述' => '涼著述',
-'涼著錄' => '涼著錄',
-'深淵裡' => '深淵裏',
-'深渊里' => '深渊裏',
-'港岛线' => '港島綫',
-'港島線' => '港島綫',
+'混帳' => '混账',
+'清帳' => '清账',
 '渴著' => '渴着',
+'渴著書' => '渴著书',
 '渴著作' => '渴著作',
 '渴著名' => '渴著名',
-'渴著書' => '渴著書',
-'渴è\91\97稱' => '渴è\91\97稱',
+'渴著錄' => '渴著录',
+'渴è\91\97稱' => '渴è\91\97称',
 '渴著者' => '渴著者',
 '渴著述' => '渴著述',
-'渴著錄' => '渴著錄',
+'原始碼' => '源代码',
 '溢著' => '溢着',
+'溢著書' => '溢著书',
 '溢著作' => '溢著作',
 '溢著名' => '溢著名',
-'溢著書' => '溢著書',
-'溢è\91\97稱' => '溢è\91\97稱',
+'溢著錄' => '溢著录',
+'溢è\91\97稱' => '溢è\91\97称',
 '溢著者' => '溢著者',
 '溢著述' => '溢著述',
-'溢著錄' => '溢著錄',
+'滑鼠蛇' => '滑鼠蛇',
+'滿16進位' => '满16进位',
+'滿二進位' => '满二进位',
+'滿八進位' => '满八进位',
+'滿六進位' => '满六进位',
+'滿十六進位' => '满十六进位',
+'滿十進位' => '满十进位',
+'滿著' => '满着',
+'滿著作' => '满著作',
+'滿著名' => '满著名',
+'滿著者' => '满著者',
 '演著' => '演着',
+'演著書' => '演著书',
 '演著作' => '演著作',
 '演著名' => '演著名',
-'演著書' => '演著書',
-'演著稱' => '演著稱',
-'演著者' => '演著者',
-'演著述' => '演著述',
-'演著錄' => '演著錄',
-'漫著' => '漫着',
-'漫著作' => '漫著作',
-'漫著名' => '漫著名',
-'漫著書' => '漫著書',
-'漫著稱' => '漫著稱',
-'漫著者' => '漫著者',
-'漫著述' => '漫著述',
-'漫著錄' => '漫著錄',
-'潤著' => '潤着',
-'潤著作' => '潤著作',
-'潤著名' => '潤著名',
-'潤著書' => '潤著書',
-'潤著稱' => '潤著稱',
-'潤著者' => '潤著者',
-'潤著述' => '潤著述',
-'潤著錄' => '潤著錄',
-'無線劇集' => '無綫劇集',
-'无线剧集' => '無綫劇集',
-'無線收費' => '無綫收費',
-'无线收费' => '無綫收費',
-'无线节目' => '無綫節目',
-'無線節目' => '無綫節目',
-'无线电视' => '無綫電視',
-'無線電視' => '無綫電視',
-'菸' => '煙',
-'照著' => '照着',
-'照著作' => '照著作',
-'照著名' => '照著名',
-'照著書' => '照著書',
-'照著稱' => '照著稱',
-'照著者' => '照著者',
-'照著述' => '照著述',
-'照著錄' => '照著錄',
-'燒著' => '燒着',
-'燒著作' => '燒著作',
-'燒著名' => '燒著名',
-'燒著書' => '燒著書',
-'燒著稱' => '燒著稱',
-'燒著者' => '燒著者',
-'燒著述' => '燒著述',
-'燒著錄' => '燒著錄',
-'爭著' => '爭着',
-'爭著作' => '爭著作',
-'爭著名' => '爭著名',
-'爭著書' => '爭著書',
-'爭著稱' => '爭著稱',
-'爭著者' => '爭著者',
-'爭著述' => '爭著述',
-'爭著錄' => '爭著錄',
-'千里達托貝哥' => '特立尼達和多巴哥',
-'牽著' => '牽着',
-'牽著作' => '牽著作',
-'牽著名' => '牽著名',
-'牽著書' => '牽著書',
-'牽著稱' => '牽著稱',
-'牽著者' => '牽著者',
-'牽著述' => '牽著述',
-'牽著錄' => '牽著錄',
-'犯不著' => '犯不着',
-'犯不著作' => '犯不著作',
-'犯不著名' => '犯不著名',
-'犯不著書' => '犯不著書',
-'犯不著稱' => '犯不著稱',
-'犯不著者' => '犯不著者',
-'犯不著述' => '犯不著述',
-'犯不著錄' => '犯不著錄',
-'犯得著' => '犯得着',
-'犬只' => '狗隻',
+'演著錄' => '演著录',
+'演著稱' => '演著称',
+'演著者' => '演著者',
+'演著述' => '演著述',
+'漫著' => '漫着',
+'漫著書' => '漫著书',
+'漫著作' => '漫著作',
+'漫著名' => '漫著名',
+'漫著錄' => '漫著录',
+'漫著稱' => '漫著称',
+'漫著者' => '漫著者',
+'漫著述' => '漫著述',
+'雷射' => '激光',
+'點著' => '点着',
+'點著作' => '点著作',
+'點著名' => '点著名',
+'點著錄' => '点著录',
+'點著稱' => '点著称',
+'點著者' => '点著者',
+'點著述' => '点著述',
+'爛帳' => '烂账',
+'燒著' => '烧着',
+'燒著作' => '烧著作',
+'燒著名' => '烧著名',
+'燒著錄' => '烧著录',
+'燒著稱' => '烧著称',
+'燒著者' => '烧著者',
+'燒著述' => '烧著述',
+'照著' => '照着',
+'照著書' => '照著书',
+'照著作' => '照著作',
+'照著名' => '照著名',
+'照著錄' => '照著录',
+'照著稱' => '照著称',
+'照著者' => '照著者',
+'照著述' => '照著述',
+'愛護著' => '爱护着',
+'愛著' => '爱着',
+'愛著書' => '爱著书',
+'愛著作' => '爱著作',
+'愛著名' => '爱著名',
+'愛著錄' => '爱著录',
+'愛著稱' => '爱著称',
+'愛著者' => '爱著者',
+'愛著述' => '爱著述',
+'牽著' => '牵着',
+'牽著書' => '牵著书',
+'牽著作' => '牵著作',
+'牽著名' => '牵著名',
+'牽著錄' => '牵著录',
+'牽著稱' => '牵著称',
+'牽著者' => '牵著者',
+'牽著述' => '牵著述',
+'千里達' => '特立尼达',
+'千里達及托巴哥' => '特立尼达和多巴哥',
+'千里達托貝哥' => '特立尼达和托巴哥',
+'狗隻' => '犬只',
+'獨著' => '独着',
+'獨著書' => '独著书',
+'獨著作' => '独著作',
+'獨著名' => '独著名',
+'獨著錄' => '独著录',
+'獨著稱' => '独著称',
+'獨著者' => '独著者',
+'獨著述' => '独著述',
 '猜著' => '猜着',
+'猜著書' => '猜着书',
 '猜著作' => '猜著作',
 '猜著名' => '猜著名',
-'猜著書' => '猜著書',
-'ç\8c\9cè\91\97稱' => 'ç\8c\9cè\91\97稱',
+'猜著錄' => '猜著录',
+'ç\8c\9cè\91\97稱' => 'ç\8c\9cè\91\97称',
 '猜著者' => '猜著者',
 '猜著述' => '猜著述',
-'猜著錄' => '猜著錄',
-'狱里' => '獄裏',
-'獄裡' => '獄裏',
-'獨著' => '獨着',
-'獨著作' => '獨著作',
-'獨著名' => '獨著名',
-'獨著書' => '獨著書',
-'獨著稱' => '獨著稱',
-'獨著者' => '獨著者',
-'獨著述' => '獨著述',
-'獨著錄' => '獨著錄',
-'獲著' => '獲着',
-'獲著作' => '獲著作',
-'獲著名' => '獲著名',
-'獲著書' => '獲著書',
-'獲著稱' => '獲著稱',
-'獲著者' => '獲著者',
-'獲著述' => '獲著述',
-'獲著錄' => '獲著錄',
-'諾魯' => '瑙魯',
-'萬那杜' => '瓦努阿圖',
+'玩著' => '玩着',
+'萬那杜' => '瓦努阿图',
+'溫納圖' => '瓦努阿图',
+'華勒沙' => '瓦文萨',
+'華里沙' => '瓦文萨',
 '甜著' => '甜着',
+'甜著書' => '甜著书',
 '甜著作' => '甜著作',
 '甜著名' => '甜著名',
-'甜著書' => '甜著書',
-'ç\94\9cè\91\97稱' => 'ç\94\9cè\91\97稱',
+'甜著錄' => '甜著录',
+'ç\94\9cè\91\97稱' => 'ç\94\9cè\91\97称',
 '甜著者' => '甜著者',
 '甜著述' => '甜著述',
-'甜著錄' => '甜著錄',
-'用不著' => '用不着',
-'用得著' => '用得着',
 '用著' => '用着',
+'用著書' => '用著书',
 '用著作' => '用著作',
 '用著名' => '用著名',
-'用著書' => '用著書',
-'ç\94¨è\91\97稱' => 'ç\94¨è\91\97稱',
+'用著錄' => '用著录',
+'ç\94¨è\91\97稱' => 'ç\94¨è\91\97称',
 '用著者' => '用著者',
 '用著述' => '用著述',
-'用著錄' => '用著錄',
+'A型肝炎' => '甲型肝炎',
+'A肝' => '甲肝',
+'電視劇集' => '电视剧',
+'電視影集' => '电视系列剧',
+'畫著' => '画着',
+'畫著作' => '画著作',
+'畫著名' => '画著名',
+'畫著稱' => '画著称',
+'畫著者' => '画著者',
+'介面' => '界面',
 '留著' => '留着',
+'留著書' => '留着书',
 '留著作' => '留著作',
 '留著名' => '留著名',
-'留著書' => '留著書',
-'ç\95\99è\91\97稱' => 'ç\95\99è\91\97稱',
+'留著錄' => '留著录',
+'ç\95\99è\91\97稱' => 'ç\95\99è\91\97称',
 '留著者' => '留著者',
 '留著述' => '留著述',
-'留著錄' => '留著錄',
-'當著' => '當着',
-'當著作' => '當著作',
-'當著名' => '當著名',
-'當著書' => '當著書',
-'當著稱' => '當著稱',
-'當著者' => '當著者',
-'當著述' => '當著述',
-'當著錄' => '當著錄',
 '疑著' => '疑着',
+'疑著書' => '疑著书',
 '疑著作' => '疑著作',
 '疑著名' => '疑著名',
-'疑著書' => '疑著書',
-'ç\96\91è\91\97稱' => 'ç\96\91è\91\97稱',
+'疑著錄' => '疑著录',
+'ç\96\91è\91\97稱' => 'ç\96\91è\91\97称',
 '疑著者' => '疑著者',
 '疑著述' => '疑著述',
-'疑著錄' => '疑著錄',
-'发布' => '發佈',
-'發布' => '發佈',
-'百科裡' => '百科裏',
-'百科里' => '百科裏',
-'計程車' => '的士',
-'出租车' => '的士',
-'皮里阳秋' => '皮裏陽秋',
-'皮裡陽秋' => '皮裏陽秋',
-'皺著' => '皺着',
-'皺著作' => '皺著作',
-'皺著名' => '皺著名',
-'皺著書' => '皺著書',
-'皺著稱' => '皺著稱',
-'皺著者' => '皺著者',
-'皺著述' => '皺著述',
-'皺著錄' => '皺著錄',
+'狂牛症' => '疯牛病',
+'徵狀' => '症状',
+'百慕達' => '百慕大',
+'皮雅斯·布士南' => '皮尔斯·布鲁斯南',
+'皺著' => '皱着',
+'皺著書' => '皱著书',
+'皺著作' => '皱著作',
+'皺著名' => '皱著名',
+'皺著錄' => '皱著录',
+'皺著稱' => '皱著称',
+'皺著者' => '皱著者',
+'皺著述' => '皱著述',
+'鹽份' => '盐分',
 '盛著' => '盛着',
+'盛著書' => '盛著书',
 '盛著作' => '盛著作',
 '盛著名' => '盛著名',
-'盛著書' => '盛著書',
-'ç\9b\9bè\91\97稱' => 'ç\9b\9bè\91\97稱',
+'盛著錄' => '盛著录',
+'ç\9b\9bè\91\97稱' => 'ç\9b\9bè\91\97称',
 '盛著者' => '盛著者',
 '盛著述' => '盛著述',
-'盛著錄' => '盛著錄',
-'盧安達' => '盧旺達',
 '盯著' => '盯着',
+'盯著書' => '盯着书',
 '盯著作' => '盯著作',
 '盯著名' => '盯著名',
-'盯著書' => '盯著書',
-'ç\9b¯è\91\97稱' => 'ç\9b¯è\91\97稱',
+'盯著錄' => '盯著录',
+'ç\9b¯è\91\97稱' => 'ç\9b¯è\91\97称',
 '盯著者' => '盯著者',
 '盯著述' => '盯著述',
-'盯著錄' => '盯著錄',
 '盾著' => '盾着',
+'盾著書' => '盾著书',
 '盾著作' => '盾著作',
 '盾著名' => '盾著名',
-'盾著書' => '盾著書',
-'ç\9b¾è\91\97稱' => 'ç\9b¾è\91\97稱',
+'盾著錄' => '盾著录',
+'ç\9b¾è\91\97稱' => 'ç\9b¾è\91\97称',
 '盾著者' => '盾著者',
 '盾著述' => '盾著述',
-'盾著錄' => '盾著錄',
-'看不著' => '看不着',
-'看得著' => '看得着',
 '看著' => '看着',
+'看著書' => '看着书',
 '看著作' => '看著作',
 '看著名' => '看著名',
-'看著書' => '看著書',
-'ç\9c\8bè\91\97稱' => 'ç\9c\8bè\91\97稱',
+'看著錄' => '看著录',
+'ç\9c\8bè\91\97稱' => 'ç\9c\8bè\91\97称',
 '看著者' => '看著者',
 '看著述' => '看著述',
-'看著錄' => '看著錄',
-'眼睛裡' => '眼睛裏',
-'眼睛里' => '眼睛裏',
-'著什麼急' => '着什麼急',
+'著業' => '着业',
+'著絲' => '着丝',
+'著麼' => '着么',
+'著人' => '着人',
+'著甚麽' => '着什么',
+'著什麼' => '着什么',
 '著他' => '着他',
+'著令' => '着令',
+'著位' => '着位',
+'著體' => '着体',
 '著你' => '着你',
+'著便' => '着便',
+'著涼' => '着凉',
 '著力' => '着力',
+'著勁' => '着劲',
+'著號' => '着号',
+'著呢' => '着呢',
+'著哩' => '着哩',
 '著地' => '着地',
 '著墨' => '着墨',
+'著聲' => '着声',
+'著處' => '着处',
 '著她' => '着她',
 '著妳' => '着妳',
+'著姓' => '着姓',
 '著它' => '着它',
-'著實' => '着實',
+'著定' => '着定',
+'著實' => '着实',
+'著己' => '着己',
+'著帳' => '着帐',
+'著床' => '着床',
+'著庸' => '着庸',
+'著式' => '着式',
+'著錄' => '着录',
+'著心' => '着心',
+'著志' => '着志',
 '著忙' => '着忙',
 '著急' => '着急',
+'著惱' => '着恼',
+'著驚' => '着惊',
 '著想' => '着想',
 '著意' => '着意',
+'著慌' => '着慌',
 '著我' => '着我',
 '著手' => '着手',
-'著數' => '着數',
+'著抹' => '着抹',
+'著摸' => '着摸',
+'著撰' => '着撰',
+'著數' => '着数',
+'著明' => '着明',
+'著末' => '着末',
+'著極' => '着极',
+'著格' => '着格',
+'著棋' => '着棋',
+'著氣' => '着气',
 '著法' => '着法',
-'è\91\97涼' => 'ç\9d\80涼',
+'è\91\97æ·º' => 'ç\9d\80æµ\85',
 '著火' => '着火',
+'著然' => '着然',
+'著甚' => '着甚',
+'著生' => '着生',
+'著疑' => '着疑',
+'著白' => '着白',
+'著相' => '着相',
 '著眼' => '着眼',
+'著著' => '着着',
 '著祂' => '着祂',
-'著筆' => '着筆',
-'著絲' => '着絲',
-'著緊' => '着緊',
-'著腳' => '着腳',
-'著艦' => '着艦',
+'著積' => '着积',
+'著稿' => '着稿',
+'著筆' => '着笔',
+'著籍' => '着籍',
+'著緊' => '着紧',
+'著緑' => '着緑',
+'著絆' => '着绊',
+'著績' => '着绩',
+'著緋' => '着绯',
+'著綠' => '着绿',
+'著肉' => '着肉',
+'著腳' => '着脚',
+'著艦' => '着舰',
 '著色' => '着色',
+'著節' => '着节',
+'著花' => '着花',
+'著莫' => '着莫',
 '著落' => '着落',
+'著槁' => '着藁',
 '著衣' => '着衣',
-'著裝' => '着裝',
+'著裝' => '着装',
+'著要' => '着要',
+'著警' => '着警',
+'著趣' => '着趣',
+'著邊' => '着边',
 '著迷' => '着迷',
+'著跡' => '着迹',
 '著重' => '着重',
-'著錄' => '着錄',
-'著陸' => '着陸',
-'著鞭' => '着鞭',
-'睡不著' => '睡不着',
-'睡得著' => '睡得着',
+'著録' => '着録',
+'著聞' => '着闻',
+'著陸' => '着陆',
+'著雝' => '着雝',
+'著鞭' => '着鞭',
+'著題' => '着题',
+'著魔' => '着魔',
 '睡著' => '睡着',
+'睡著書' => '睡著书',
 '睡著作' => '睡著作',
 '睡著名' => '睡著名',
-'睡著書' => '睡著書',
-'ç\9d¡è\91\97稱' => 'ç\9d¡è\91\97稱',
+'睡著錄' => '睡著录',
+'ç\9d¡è\91\97稱' => 'ç\9d¡è\91\97称',
 '睡著者' => '睡著者',
 '睡著述' => '睡著述',
-'睡著錄' => '睡著錄',
-'瞞著' => '瞞着',
-'瞞著作' => '瞞著作',
-'瞞著名' => '瞞著名',
-'瞞著書' => '瞞著書',
-'瞞著稱' => '瞞著稱',
-'瞞著者' => '瞞著者',
-'瞞著述' => '瞞著述',
-'瞞著錄' => '瞞著錄',
+'瞞著' => '瞒着',
+'瞞著書' => '瞒著书',
+'瞞著作' => '瞒著作',
+'瞞著名' => '瞒著名',
+'瞞著錄' => '瞒著录',
+'瞞著稱' => '瞒著称',
+'瞞著者' => '瞒著者',
+'瞞著述' => '瞒著述',
+'瞧著' => '瞧着',
+'瞧著書' => '瞧着书',
+'瞧著作' => '瞧著作',
+'瞧著名' => '瞧著名',
+'瞧著錄' => '瞧著录',
+'瞧著稱' => '瞧著称',
+'瞧著者' => '瞧著者',
+'瞧著述' => '瞧著述',
 '瞪著' => '瞪着',
+'瞪著書' => '瞪著书',
 '瞪著作' => '瞪著作',
 '瞪著名' => '瞪著名',
-'瞪著書' => '瞪著書',
-'ç\9eªè\91\97稱' => 'ç\9eªè\91\97稱',
+'瞪著錄' => '瞪著录',
+'ç\9eªè\91\97稱' => 'ç\9eªè\91\97称',
 '瞪著者' => '瞪著者',
 '瞪著述' => '瞪著述',
-'瞪著錄' => '瞪著錄',
-'簡訊' => '短訊',
-'短信' => '短訊',
-'硬件' => '硬件',
+'智財權' => '知识产权',
+'智慧財產權' => '知识产权',
+'知識份子' => '知识分子',
+'什勒斯維希' => '石勒苏益格',
+'矽塵' => '矽尘',
+'矽尘' => '矽尘',
+'矽肺' => '矽肺',
+'矽鋼' => '矽钢',
+'矽钢' => '矽钢',
+'矽' => '硅',
+'矽片' => '硅片',
+'矽谷' => '硅谷',
 '硬體' => '硬件',
-'福斯' => '福士',
+'硬碟' => '硬盘',
+'磁碟' => '磁盘',
+'磁軌' => '磁道',
+'福馬林' => '福尔马林',
 '福著' => '福着',
+'福著書' => '福著书',
 '福著作' => '福著作',
 '福著名' => '福著名',
-'福著書' => '福著書',
-'ç¦\8fè\91\97稱' => 'ç¦\8fè\91\97稱',
+'福著錄' => '福著录',
+'ç¦\8fè\91\97稱' => 'ç¦\8fè\91\97称',
 '福著者' => '福著者',
 '福著述' => '福著述',
-'福著錄' => '福著錄',
-'秋假裡' => '秋假裏',
-'秋假里' => '秋假裏',
-'秋天裡' => '秋天裏',
-'秋天里' => '秋天裏',
-'秋日里' => '秋日裏',
-'秋日裡' => '秋日裏',
-'葛摩' => '科摩羅',
-'捷豹' => '積架',
+'私帳' => '私账',
+'葛摩' => '科摩罗',
+'象牙海岸' => '科特迪瓦',
+'積極份子' => '积极分子',
+'行動電話' => '移动电话',
+'流動電話' => '移动电话',
+'行動網路' => '移动网络',
+'流動網絡' => '移动网络',
+'程式設計師' => '程序员',
+'程式控制' => '程控',
+'空中巴士' => '空中客车',
+'空氣質素' => '空气质量',
+'空氣品質' => '空气质量',
 '空著' => '空着',
+'空著書' => '空著书',
 '空著作' => '空著作',
 '空著名' => '空著名',
-'空著書' => '空著書',
-'空è\91\97稱' => '空è\91\97稱',
+'空著錄' => '空著录',
+'空è\91\97稱' => '空è\91\97称',
 '空著者' => '空著者',
 '空著述' => '空著述',
-'空著錄' => '空著錄',
-'太空梭' => '穿梭機',
-'航天飞机' => '穿梭機',
 '穿著' => '穿着',
+'穿著書' => '穿著书',
 '穿著作' => '穿著作',
 '穿著名' => '穿著名',
-'穿著書' => '穿著書',
-'ç©¿è\91\97稱' => 'ç©¿è\91\97稱',
+'穿著錄' => '穿著录',
+'ç©¿è\91\97稱' => 'ç©¿è\91\97称',
 '穿著者' => '穿著者',
 '穿著述' => '穿著述',
-'穿著錄' => '穿著錄',
+'突尼西亞' => '突尼斯',
+'豎著' => '竖着',
+'豎著書' => '竖著书',
+'豎著作' => '竖著作',
+'豎著名' => '竖著名',
+'豎著錄' => '竖著录',
+'豎著稱' => '竖著称',
+'豎著者' => '竖著者',
+'豎著述' => '竖著述',
 '站著' => '站着',
+'站著書' => '站著书',
 '站著作' => '站著作',
 '站著名' => '站著名',
-'站著書' => '站著書',
-'ç«\99è\91\97稱' => 'ç«\99è\91\97稱',
+'站著錄' => '站著录',
+'ç«\99è\91\97稱' => 'ç«\99è\91\97称',
 '站著者' => '站著者',
 '站著述' => '站著述',
-'站著錄' => '站著錄',
 '笑著' => '笑着',
+'笑著書' => '笑著书',
 '笑著作' => '笑著作',
 '笑著名' => '笑著名',
-'笑著書' => '笑著書',
-'ç¬\91è\91\97稱' => 'ç¬\91è\91\97稱',
+'笑著錄' => '笑著录',
+'ç¬\91è\91\97稱' => 'ç¬\91è\91\97称',
 '笑著者' => '笑著者',
 '笑著述' => '笑著述',
-'笑著錄' => '笑著錄',
+'筆帳' => '笔账',
+'提比里西' => '第比利斯',
+'簽著' => '签着',
+'簽帳' => '签账',
+'運算元' => '算子',
+'演算法' => '算法',
+'算帳' => '算账',
 '管著' => '管着',
+'管著書' => '管著书',
 '管著作' => '管著作',
 '管著名' => '管著名',
-'管著書' => '管著書',
-'管è\91\97稱' => '管è\91\97稱',
+'管著錄' => '管著录',
+'管è\91\97稱' => '管è\91\97称',
 '管著者' => '管著者',
 '管著述' => '管著述',
-'管著錄' => '管著錄',
-'迈克尔·欧文' => '米高奧雲',
-'系列裡' => '系列裏',
-'系列里' => '系列裏',
-'索馬利亞' => '索馬里',
-'紮著' => '紮着',
-'紮著作' => '紮著作',
-'紮著名' => '紮著名',
-'紮著書' => '紮著書',
-'紮著稱' => '紮著稱',
-'紮著者' => '紮著者',
-'紮著述' => '紮著述',
-'紮著錄' => '紮著錄',
-'綁著' => '綁着',
-'綁著作' => '綁著作',
-'綁著名' => '綁著名',
-'綁著書' => '綁著書',
-'綁著稱' => '綁著稱',
-'綁著者' => '綁著者',
-'綁著述' => '綁著述',
-'綁著錄' => '綁著錄',
-'網路' => '網絡',
-'緝凶' => '緝兇',
-'繞著' => '繞着',
-'繞著作' => '繞著作',
-'繞著名' => '繞著名',
-'繞著書' => '繞著書',
-'繞著稱' => '繞著稱',
-'繞著者' => '繞著者',
-'繞著述' => '繞著述',
-'繞著錄' => '繞著錄',
-'纏著' => '纏着',
-'纏著作' => '纏著作',
-'纏著名' => '纏著名',
-'纏著書' => '纏著書',
-'纏著稱' => '纏著稱',
-'纏著者' => '纏著者',
-'纏著述' => '纏著述',
-'纏著錄' => '纏著錄',
+'管帳' => '管账',
+'公尺' => '米',
+'糊塗帳' => '糊涂账',
+'糖份' => '糖分',
+'動畫影集' => '系列动画片',
+'繫著' => '系着',
+'索贊尼辛' => '索尔仁尼琴',
+'索忍尼辛' => '索尔仁尼琴',
+'蘇辛尼津' => '索尔仁尼琴',
+'索馬利亞' => '索马里',
+'索馬利蘭' => '索马里兰',
+'正體中文' => '繁体中文',
+'強斯頓環礁' => '约翰斯顿岛',
+'組份' => '组分',
+'經常帳' => '经常账',
+'經濟帳' => '经济账',
+'綁著' => '绑着',
+'綁著書' => '绑著书',
+'綁著作' => '绑著作',
+'綁著名' => '绑著名',
+'綁著錄' => '绑著录',
+'綁著稱' => '绑著称',
+'綁著者' => '绑著者',
+'綁著述' => '绑著述',
+'結帳' => '结账',
+'繞著' => '绕着',
+'繞著書' => '绕著书',
+'繞著作' => '绕著作',
+'繞著名' => '绕著名',
+'繞著錄' => '绕著录',
+'繞著稱' => '绕著称',
+'繞著者' => '绕著者',
+'繞著述' => '绕著述',
+'維根斯坦' => '维特根斯坦',
+'繃著' => '绷着',
+'緣份' => '缘分',
+'纏著' => '缠着',
+'纏著書' => '缠著书',
+'纏著作' => '缠著作',
+'纏著名' => '缠著名',
+'纏著錄' => '缠著录',
+'纏著稱' => '缠著称',
+'纏著者' => '缠著者',
+'纏著述' => '缠著述',
+'網站連結' => '网站链接',
+'網路' => '网络',
+'網頁連結' => '网页链接',
 '罩著' => '罩着',
+'罩著書' => '罩著书',
 '罩著作' => '罩著作',
 '罩著名' => '罩著名',
-'罩著書' => '罩著書',
-'罩è\91\97稱' => '罩è\91\97稱',
+'罩著錄' => '罩著录',
+'罩è\91\97稱' => '罩è\91\97称',
 '罩著者' => '罩著者',
 '罩著述' => '罩著述',
-'罩著錄' => '罩著錄',
-'罵著' => '罵着',
-'罵著作' => '罵著作',
-'罵著名' => '罵著名',
-'罵著書' => '罵著書',
-'罵著稱' => '罵著稱',
-'罵著者' => '罵著者',
-'罵著述' => '罵著述',
-'罵著錄' => '罵著錄',
 '美著' => '美着',
+'美著書' => '美著书',
 '美著作' => '美著作',
 '美著名' => '美著名',
-'美著書' => '美著書',
-'ç¾\8eè\91\97稱' => 'ç¾\8eè\91\97稱',
+'美著錄' => '美著录',
+'ç¾\8eè\91\97稱' => 'ç¾\8eè\91\97称',
 '美著者' => '美著者',
 '美著述' => '美著述',
-'美著錄' => '美著錄',
 '耀著' => '耀着',
+'耀著書' => '耀著书',
 '耀著作' => '耀著作',
 '耀著名' => '耀著名',
-'耀著書' => '耀著書',
-'è\80\80è\91\97稱' => 'è\80\80è\91\97稱',
+'耀著錄' => '耀著录',
+'è\80\80è\91\97稱' => 'è\80\80è\91\97称',
 '耀著者' => '耀著者',
 '耀著述' => '耀著述',
-'耀著錄' => '耀著錄',
-'寮國' => '老撾',
+'寮國' => '老挝',
+'寮人民民主共和國' => '老挝人民民主共和国',
+'寮語' => '老挝语',
 '考著' => '考着',
+'考著書' => '考著书',
 '考著作' => '考著作',
 '考著名' => '考著名',
-'考著書' => '考著書',
-'考著稱' => '考著稱',
-'考著者' => '考著者',
-'考著述' => '考著述',
-'考著錄' => '考著錄',
-'圣基茨和尼维斯' => '聖吉斯納域斯',
-'聖克里斯多福及尼維斯' => '聖吉斯納域斯',
-'聖文森及格瑞那丁' => '聖文森特和格林納丁斯',
-'聖露西亞' => '聖盧西亞',
-'聖馬利諾' => '聖馬力諾',
-'聽不著' => '聽不着',
-'聽得著' => '聽得着',
-'聽著' => '聽着',
-'聽著作' => '聽著作',
-'聽著名' => '聽著名',
-'聽著書' => '聽著書',
-'聽著稱' => '聽著稱',
-'聽著者' => '聽著者',
-'聽著述' => '聽著述',
-'聽著錄' => '聽著錄',
-'肚里' => '肚裏',
-'肚裡' => '肚裏',
-'肯尼亚' => '肯雅',
-'肯亞' => '肯雅',
-'背著' => '背着',
-'背著作' => '背著作',
-'背著名' => '背著名',
-'背著書' => '背著書',
-'背著稱' => '背著稱',
-'背著者' => '背著者',
-'背著述' => '背著述',
-'背著錄' => '背著錄',
-'膠著' => '膠着',
-'膠著作' => '膠著作',
-'膠著名' => '膠著名',
-'膠著書' => '膠著書',
-'膠著稱' => '膠著稱',
-'膠著者' => '膠著者',
-'膠著述' => '膠著述',
-'膠著錄' => '膠著錄',
-'臨著' => '臨着',
-'臨著作' => '臨著作',
-'臨著名' => '臨著名',
-'臨著書' => '臨著書',
-'臨著稱' => '臨著稱',
-'臨著者' => '臨著者',
-'臨著述' => '臨著述',
-'臨著錄' => '臨著錄',
-'與著' => '與着',
-'與著作' => '與著作',
-'與著名' => '與著名',
-'與著書' => '與著書',
-'與著稱' => '與著稱',
-'與著者' => '與著者',
-'與著述' => '與著述',
-'與著錄' => '與著錄',
-'迈克尔·舒马赫' => '舒麥加',
+'考著錄' => '考著录',
+'考著稱' => '考著称',
+'考著者' => '考著者',
+'考著述' => '考著述',
+'職份' => '职分',
+'辛康納利' => '肖恩·康纳利',
+'蕭士塔高維奇' => '肖斯塔科维奇',
+'蕭士達高維契' => '肖斯塔科维奇',
+'甘迺迪' => '肯尼迪',
+'背著' => '背着',
+'背著書' => '背著书',
+'背著作' => '背著作',
+'背著名' => '背著名',
+'背著錄' => '背著录',
+'背著稱' => '背著称',
+'背著者' => '背著者',
+'背著述' => '背著述',
+'膠著' => '胶着',
+'膠著書' => '胶著书',
+'膠著作' => '胶著作',
+'膠著名' => '胶著名',
+'膠著錄' => '胶著录',
+'膠著稱' => '胶著称',
+'膠著者' => '胶著者',
+'膠著述' => '胶著述',
+'舒麥加' => '舒马赫',
+'太空梭' => '航天飞机',
+'穿梭機' => '航天飞机',
+'藝著' => '艺着',
+'藝著書' => '艺著书',
+'藝著作' => '艺著作',
+'藝著名' => '艺著名',
+'藝著錄' => '艺著录',
+'藝著稱' => '艺著称',
+'藝著者' => '艺著者',
+'藝著述' => '艺著述',
+'愛滋' => '艾滋',
+'晶片' => '芯片',
+'晶元' => '芯片',
+'蘇利南' => '苏里南',
 '苦著' => '苦着',
+'苦著書' => '苦著书',
 '苦著作' => '苦著作',
 '苦著名' => '苦著名',
-'苦著書' => '苦著書',
-'è\8b¦è\91\97稱' => 'è\8b¦è\91\97稱',
+'苦著錄' => '苦著录',
+'è\8b¦è\91\97稱' => 'è\8b¦è\91\97称',
 '苦著者' => '苦著者',
 '苦著述' => '苦著述',
-'苦著錄' => '苦著錄',
-'苦里' => '苦裏',
-'苦裡' => '苦裏',
-'荃湾线' => '荃灣綫',
-'荃灣線' => '荃灣綫',
+'英吋' => '英寸',
+'英呎' => '英尺',
+'大英國協' => '英联邦',
+'共和联邦' => '英联邦',
+'士多啤梨' => '草莓',
+'螢光棒' => '荧光棒',
+'螢屏' => '荧屏',
+'霍爾斯坦' => '荷尔斯泰因',
 '莫三比克' => '莫桑比克',
-'賴索托' => '萊索托',
-'馬自達' => '萬事得',
-'马自达' => '萬事得',
+'雷伊泰灣' => '莱特湾',
+'賴索托' => '莱索托',
+'穫著' => '获着',
+'獲著' => '获着',
+'獲著書' => '获著书',
+'獲著作' => '获著作',
+'獲著名' => '获著名',
+'獲著錄' => '获著录',
+'獲著稱' => '获著称',
+'獲著者' => '获著者',
+'獲著述' => '获著述',
+'塞拉耶佛' => '萨拉热窝',
 '落著' => '落着',
+'落著書' => '落著书',
 '落著作' => '落著作',
 '落著名' => '落著名',
-'落著書' => '落著書',
-'è\90½è\91\97稱' => 'è\90½è\91\97稱',
+'落著錄' => '落著录',
+'è\90½è\91\97稱' => 'è\90½è\91\97称',
 '落著者' => '落著者',
 '落著述' => '落著述',
-'落著錄' => '落著錄',
+'滿地可' => '蒙特利尔',
+'蒙特婁' => '蒙特利尔',
 '蒙著' => '蒙着',
+'蒙著書' => '蒙著书',
 '蒙著作' => '蒙著作',
 '蒙著名' => '蒙著名',
-'蒙著書' => '蒙著書',
-'è\92\99è\91\97稱' => 'è\92\99è\91\97稱',
+'蒙著錄' => '蒙著录',
+'è\92\99è\91\97稱' => 'è\92\99è\91\97称',
 '蒙著者' => '蒙著者',
 '蒙著述' => '蒙著述',
-'è\92\99è\91\97é\8c\84' => 'è\92\99è\91\97é\8c\84',
-'è\90¨è¾¾å§\86' => 'è\96©é\81\94å§\86',
-'è\97\89è\91\97' => 'è\97\89ç\9d\80',
+'è\93\8bè\91\97' => 'è\93\8bç\9d\80',
+'è\97\8dè\8a½' => 'è\93\9dç\89\99',
+'è\96\9bä¸\81æ ¼' => 'è\96\9bå®\9aè°\94',
 '藏著' => '藏着',
+'藏著書' => '藏著书',
 '藏著作' => '藏著作',
 '藏著名' => '藏著名',
-'藏著書' => '藏著書',
-'è\97\8fè\91\97稱' => 'è\97\8fè\91\97稱',
+'藏著錄' => '藏著录',
+'è\97\8fè\91\97稱' => 'è\97\8fè\91\97称',
 '藏著者' => '藏著者',
 '藏著述' => '藏著述',
-'藏著錄' => '藏著錄',
-'藝著' => '藝着',
-'藝著作' => '藝著作',
-'藝著名' => '藝著名',
-'藝著書' => '藝著書',
-'藝著稱' => '藝著稱',
-'藝著者' => '藝著者',
-'藝著述' => '藝著述',
-'藝著錄' => '藝著錄',
 '蘸著' => '蘸着',
+'蘸著書' => '蘸著书',
 '蘸著作' => '蘸著作',
 '蘸著名' => '蘸著名',
-'蘸著書' => '蘸著書',
-'è\98¸è\91\97稱' => 'è\98¸è\91\97稱',
+'蘸著錄' => '蘸著录',
+'è\98¸è\91\97稱' => 'è\98¸è\91\97称',
 '蘸著者' => '蘸著者',
 '蘸著述' => '蘸著述',
-'蘸著錄' => '蘸著錄',
 '行著' => '行着',
+'行著書' => '行著书',
 '行著作' => '行著作',
 '行著名' => '行著名',
-'行著書' => '行著書',
-'è¡\8cè\91\97稱' => 'è¡\8cè\91\97稱',
+'行著錄' => '行著录',
+'è¡\8cè\91\97稱' => 'è¡\8cè\91\97称',
 '行著者' => '行著者',
 '行著述' => '行著述',
-'行著錄' => '行著錄',
-'衛' => '衞',
 '衣著' => '衣着',
+'衣著書' => '衣著书',
 '衣著作' => '衣著作',
 '衣著名' => '衣著名',
-'衣著書' => '衣著書',
-'è¡£è\91\97稱' => 'è¡£è\91\97稱',
+'衣著錄' => '衣著录',
+'è¡£è\91\97稱' => 'è¡£è\91\97称',
 '衣著者' => '衣著者',
 '衣著述' => '衣著述',
-'衣著錄' => '衣著錄',
-'裡勾外連' => '裏勾外連',
-'里勾外连' => '裏勾外連',
-'里面' => '裏面',
-'裡面' => '裏面',
-'裝著' => '裝着',
-'裝著作' => '裝著作',
-'裝著名' => '裝著名',
-'裝著書' => '裝著書',
-'裝著稱' => '裝著稱',
-'裝著者' => '裝著者',
-'裝著述' => '裝著述',
-'裝著錄' => '裝著錄',
+'表姊' => '表姐',
+'裝著' => '装着',
+'裝著書' => '装著书',
+'裝著作' => '装著作',
+'裝著名' => '装著名',
+'裝著錄' => '装著录',
+'裝著稱' => '装著称',
+'裝著者' => '装著者',
+'裝著述' => '装著述',
 '裹著' => '裹着',
+'裹著書' => '裹著书',
 '裹著作' => '裹著作',
 '裹著名' => '裹著名',
-'裹著書' => '裹著書',
-'裹è\91\97稱' => '裹è\91\97稱',
+'裹著錄' => '裹著录',
+'裹è\91\97稱' => '裹è\91\97称',
 '裹著者' => '裹著者',
 '裹著述' => '裹著述',
-'裹著錄' => '裹著錄',
-'西铁线' => '西鐵綫',
-'西鐵線' => '西鐵綫',
-'見著' => '見着',
-'見著作' => '見著作',
-'見著名' => '見著名',
-'見著書' => '見著書',
-'見著稱' => '見著稱',
-'見著者' => '見著者',
-'見著述' => '見著述',
-'見著錄' => '見著錄',
-'觀塘線' => '觀塘綫',
-'观塘线' => '觀塘綫',
-'記著' => '記着',
-'記著作' => '記著作',
-'記著名' => '記著名',
-'記著書' => '記著書',
-'記著稱' => '記著稱',
-'記著者' => '記著者',
-'記著述' => '記著述',
-'記著錄' => '記著錄',
-'試著' => '試着',
-'試著作' => '試著作',
-'試著名' => '試著名',
-'試著書' => '試著書',
-'試著稱' => '試著稱',
-'試著者' => '試著者',
-'試著述' => '試著述',
-'試著錄' => '試著錄',
-'語著' => '語着',
-'語著作' => '語著作',
-'語著名' => '語著名',
-'語著書' => '語著書',
-'語著稱' => '語著稱',
-'語著者' => '語著者',
-'語著述' => '語著述',
-'語著錄' => '語著錄',
-'數據機' => '調制解調器',
+'要帳' => '要账',
+'覆著' => '覆着',
+'見著' => '见着',
+'見著書' => '见著书',
+'見著作' => '见著作',
+'見著名' => '见著名',
+'見著錄' => '见著录',
+'見著稱' => '见著称',
+'見著者' => '见著者',
+'見著述' => '见著述',
+'占士邦' => '詹姆斯·邦德',
 '警戒著' => '警戒着',
-'變著' => '變着',
-'變著作' => '變著作',
-'變著名' => '變著名',
-'變著書' => '變著書',
-'變著稱' => '變著稱',
-'變著者' => '變著者',
-'變著述' => '變著述',
-'變著錄' => '變著錄',
-'豎著' => '豎着',
-'豎著作' => '豎著作',
-'豎著名' => '豎著名',
-'豎著書' => '豎著書',
-'豎著稱' => '豎著稱',
-'豎著者' => '豎著者',
-'豎著述' => '豎著述',
-'豎著錄' => '豎著錄',
+'計畫' => '计划',
+'電腦程式' => '计算机程序',
+'認帳' => '认账',
+'記著' => '记着',
+'記著書' => '记著书',
+'記著作' => '记著作',
+'記著名' => '记著名',
+'記著錄' => '记著录',
+'記著稱' => '记著称',
+'記著者' => '记著者',
+'記著述' => '记著述',
+'記帳' => '记账',
+'辭彙' => '词汇',
+'片語' => '词组',
+'試著' => '试着',
+'試著書' => '试著书',
+'試著作' => '试著作',
+'試著名' => '试著名',
+'試著錄' => '试著录',
+'試著稱' => '试著称',
+'試著者' => '试著者',
+'試著述' => '试著述',
+'語著' => '语着',
+'語著書' => '语著书',
+'語著作' => '语著作',
+'語著名' => '语著名',
+'語著錄' => '语著录',
+'語著稱' => '语著称',
+'語著者' => '语著者',
+'語著述' => '语著述',
+'說著' => '说着',
+'說著作' => '说著作',
+'說著稱' => '说著称',
+'說著者' => '说著者',
+'說著述' => '说著述',
+'諾曼第' => '诺曼底',
+'數據機' => '调制解调器',
+'象徵著' => '象征着',
+'象徵著名' => '象征著名',
 '豫著' => '豫着',
+'豫著書' => '豫著书',
 '豫著作' => '豫著作',
 '豫著名' => '豫著名',
-'豫著書' => '豫著書',
-'豫è\91\97稱' => '豫è\91\97稱',
+'豫著錄' => '豫著录',
+'豫è\91\97稱' => '豫è\91\97称',
 '豫著者' => '豫著者',
 '豫著述' => '豫著述',
-'豫著錄' => '豫著錄',
-'貝南' => '貝寧',
-'貞著' => '貞着',
-'貞著作' => '貞著作',
-'貞著名' => '貞著名',
-'貞著書' => '貞著書',
-'貞著稱' => '貞著稱',
-'貞著者' => '貞著者',
-'貞著述' => '貞著述',
-'貞著錄' => '貞著錄',
-'買凶' => '買兇',
-'尚比亞' => '贊比亞',
+'碧咸' => '贝克汉姆',
+'貝爾格勒' => '贝尔格莱德',
+'貞著' => '贞着',
+'貞著書' => '贞著书',
+'貞著作' => '贞著作',
+'貞著名' => '贞著名',
+'貞著錄' => '贞著录',
+'貞著稱' => '贞著称',
+'貞著者' => '贞著者',
+'貞著述' => '贞著述',
+'負著' => '负着',
+'帳上' => '账上',
+'帳冊' => '账册',
+'帳務' => '账务',
+'帳單' => '账单',
+'帳號' => '账号',
+'帳外' => '账外',
+'帳戶' => '账户',
+'帳房' => '账房',
+'帳本' => '账本',
+'帳款' => '账款',
+'帳目' => '账目',
+'帳簿' => '账簿',
+'帳面' => '账面',
+'賒帳' => '赊账',
+'賴帳' => '赖账',
+'尚比亞' => '赞比亚',
+'西臺人' => '赫梯人',
+'西臺國' => '赫梯国',
+'西臺帝' => '赫梯帝',
+'西臺文' => '赫梯文',
+'西臺族' => '赫梯族',
+'西臺王' => '赫梯王',
+'西臺語' => '赫梯语',
+'赫魯雪夫' => '赫鲁晓夫',
+'走為上著' => '走为上着',
 '走著' => '走着',
+'走著書' => '走著书',
 '走著作' => '走著作',
 '走著名' => '走著名',
-'走著書' => '走著書',
-'èµ°è\91\97稱' => 'èµ°è\91\97稱',
+'走著錄' => '走著录',
+'èµ°è\91\97稱' => 'èµ°è\91\97称',
 '走著者' => '走著者',
 '走著述' => '走著述',
-'èµ°è\91\97é\8c\84' => 'èµ°è\91\97é\8c\84',
-'趕著' => '趕着',
-'è¶\95è\91\97ä½\9c' => 'è\95著作',
-'è¶\95è\91\97å\90\8d' => 'è\95著名',
-'趕著書' => '趕著書',
-'è¶\95è\91\97稱' => 'è\95è\91\97稱',
-'è¶\95è\91\97è\80\85' => 'è\95著者',
-'è¶\95è\91\97è¿°' => 'è\95著述',
-'è¶\95è\91\97é\8c\84' => 'è¶\95è\91\97é\8c\84',
+'è\95è\91\97' => '赶ç\9d\80',
+'趕著書' => '赶著书',
+'è¶\95è\91\97ä½\9c' => '赶著作',
+'è¶\95è\91\97å\90\8d' => '赶著名',
+'趕著錄' => '赶著录',
+'è¶\95è\91\97稱' => '赶è\91\97称',
+'è¶\95è\91\97è\80\85' => '赶著者',
+'è¶\95è\91\97è¿°' => '赶著述',
+'è¶\85é\80£çµ\90' => 'è¶\85é\93¾æ\8e¥',
 '趴著' => '趴着',
+'趴著書' => '趴著书',
 '趴著作' => '趴著作',
-'趴著名' => '趴著名',
-'趴著書' => '趴著書',
-'趴è\91\97稱' => '趴è\91\97稱',
+'趴著名' => '趴著名',
+'趴著錄' => '趴著录',
+'趴è\91\97稱' => '趴è\91\97称',
 '趴著者' => '趴著者',
 '趴著述' => '趴著述',
-'趴著錄' => '趴著錄',
+'躍著' => '跃着',
+'躍著書' => '跃著书',
+'躍著作' => '跃著作',
+'躍著名' => '跃著名',
+'躍著錄' => '跃著录',
+'躍著稱' => '跃著称',
+'躍著者' => '跃著者',
+'躍著述' => '跃著述',
 '跑著' => '跑着',
+'跑著書' => '跑著书',
 '跑著作' => '跑著作',
 '跑著名' => '跑著名',
-'跑著書' => '跑著書',
-'è·\91è\91\97稱' => 'è·\91è\91\97稱',
+'跑著錄' => '跑著录',
+'è·\91è\91\97稱' => 'è·\91è\91\97称',
 '跑著者' => '跑著者',
 '跑著述' => '跑著述',
-'跑著錄' => '跑著錄',
 '跟著' => '跟着',
+'跟著書' => '跟著书',
 '跟著作' => '跟著作',
 '跟著名' => '跟著名',
-'跟著書' => '跟著書',
-'è·\9fè\91\97稱' => 'è·\9fè\91\97稱',
+'跟著錄' => '跟著录',
+'è·\9fè\91\97稱' => 'è·\9fè\91\97称',
 '跟著者' => '跟著者',
 '跟著述' => '跟著述',
-'跟著錄' => '跟著錄',
 '跪著' => '跪着',
+'跪著書' => '跪著书',
 '跪著作' => '跪著作',
 '跪著名' => '跪著名',
-'跪著書' => '跪著書',
-'è·ªè\91\97稱' => 'è·ªè\91\97稱',
+'跪著錄' => '跪著录',
+'è·ªè\91\97稱' => 'è·ªè\91\97称',
 '跪著者' => '跪著者',
 '跪著述' => '跪著述',
-'跪著錄' => '跪著錄',
 '跳著' => '跳着',
+'跳著書' => '跳著书',
 '跳著作' => '跳著作',
 '跳著名' => '跳著名',
-'跳著書' => '跳著書',
-'è·³è\91\97稱' => 'è·³è\91\97稱',
+'跳著錄' => '跳著录',
+'è·³è\91\97稱' => 'è·³è\91\97称',
 '跳著者' => '跳著者',
 '跳著述' => '跳著述',
-'跳著錄' => '跳著錄',
 '踏著' => '踏着',
+'踏著書' => '踏著书',
 '踏著作' => '踏著作',
 '踏著名' => '踏著名',
-'踏著稱' => '踏著稱',
+'踏著錄' => '踏著录',
+'踏著稱' => '踏著称',
 '踏著者' => '踏著者',
 '踏著述' => '踏著述',
-'踏著錄' => '踏著錄',
 '踩著' => '踩着',
+'踩著書' => '踩著书',
 '踩著作' => '踩著作',
 '踩著名' => '踩著名',
-'踩著書' => '踩著書',
-'踩è\91\97稱' => '踩è\91\97稱',
+'踩著錄' => '踩著录',
+'踩è\91\97稱' => '踩è\91\97称',
 '踩著者' => '踩著者',
 '踩著述' => '踩著述',
-'踩著錄' => '踩著錄',
-'躍著' => '躍着',
-'躍著作' => '躍著作',
-'躍著名' => '躍著名',
-'躍著書' => '躍著書',
-'躍著稱' => '躍著稱',
-'躍著者' => '躍著者',
-'躍著述' => '躍著述',
-'躍著錄' => '躍著錄',
+'笨豬跳' => '蹦极跳',
+'绑紧跳' => '蹦极跳',
+'身分' => '身份',
 '身著' => '身着',
+'身著書' => '身著书',
 '身著作' => '身著作',
 '身著名' => '身著名',
-'身著書' => '身著書',
-'身è\91\97稱' => '身è\91\97稱',
+'身著錄' => '身著录',
+'身è\91\97稱' => '身è\91\97称',
 '身著者' => '身著者',
 '身著述' => '身著述',
-'身著錄' => '身著錄',
 '躺著' => '躺着',
+'躺著書' => '躺著书',
 '躺著作' => '躺著作',
 '躺著名' => '躺著名',
-'躺著書' => '躺著書',
-'躺è\91\97稱' => '躺è\91\97稱',
+'躺著錄' => '躺著录',
+'躺è\91\97稱' => '躺è\91\97称',
 '躺著者' => '躺著者',
 '躺著述' => '躺著述',
-'躺著錄' => '躺著錄',
-'軟體' => '軟件',
-'載著' => '載着',
-'載著作' => '載著作',
-'載著名' => '載著名',
-'載著書' => '載著書',
-'載著稱' => '載著稱',
-'載著者' => '載著者',
-'載著述' => '載著述',
-'載著錄' => '載著錄',
-'轉著' => '轉着',
-'轉著作' => '轉著作',
-'轉著名' => '轉著名',
-'轉著書' => '轉著書',
-'轉著稱' => '轉著稱',
-'轉著者' => '轉著者',
-'轉著述' => '轉著述',
-'轉著錄' => '轉著錄',
-'辦著' => '辦着',
-'辦著作' => '辦著作',
-'辦著名' => '辦著名',
-'辦著書' => '辦著書',
-'辦著稱' => '辦著稱',
-'辦著者' => '辦著者',
-'辦著述' => '辦著述',
-'辦著錄' => '辦著錄',
-'近角聪信' => '近角聰信',
-'近角聰信' => '近角聰信',
-'迪士尼线' => '迪士尼綫',
-'迪士尼線' => '迪士尼綫',
-'迫著' => '迫着',
-'追著' => '追着',
-'追著作' => '追著作',
-'追著名' => '追著名',
-'追著書' => '追著書',
-'追著稱' => '追著稱',
-'追著者' => '追著者',
-'追著述' => '追著述',
-'追著錄' => '追著錄',
-'逆著' => '逆着',
-'逆著作' => '逆著作',
-'逆著名' => '逆著名',
-'逆著書' => '逆著書',
-'逆著稱' => '逆著稱',
-'逆著者' => '逆著者',
-'逆著述' => '逆著述',
-'逆著錄' => '逆著錄',
-'這里' => '這裏',
-'這裡' => '這裏',
-'連著' => '連着',
-'連著作' => '連著作',
-'連著名' => '連著名',
-'連著書' => '連著書',
-'連著稱' => '連著稱',
-'連著者' => '連著者',
-'連著述' => '連著述',
-'連著錄' => '連著錄',
-'逼著' => '逼着',
-'逼著作' => '逼著作',
-'逼著名' => '逼著名',
-'逼著書' => '逼著書',
-'逼著稱' => '逼著稱',
-'逼著者' => '逼著者',
-'逼著述' => '逼著述',
-'逼著錄' => '逼著錄',
-'遇著' => '遇着',
-'遇著作' => '遇著作',
-'遇著名' => '遇著名',
-'遇著書' => '遇著書',
-'遇著稱' => '遇著稱',
-'遇著者' => '遇著者',
-'遇著述' => '遇著述',
-'遇著錄' => '遇著錄',
-'達著' => '達着',
-'達著作' => '達著作',
-'達著名' => '達著名',
-'達著書' => '達著書',
-'達著稱' => '達著稱',
-'達著者' => '達著者',
-'達著述' => '達著述',
-'達著錄' => '達著錄',
-'遠著' => '遠着',
-'遠著作' => '遠著作',
-'遠著名' => '遠著名',
-'遠著書' => '遠著書',
-'遠著稱' => '遠著稱',
-'遠著者' => '遠著者',
-'遠著述' => '遠著述',
-'遠著錄' => '遠著錄',
-'配著' => '配着',
-'配著作' => '配著作',
-'配著名' => '配著名',
-'配著書' => '配著書',
-'配著稱' => '配著稱',
-'配著者' => '配著者',
-'配著述' => '配著述',
-'配著錄' => '配著錄',
-'醯' => '酰',
-'醜著' => '醜着',
-'醜著作' => '醜著作',
-'醜著名' => '醜著名',
-'醜著書' => '醜著書',
-'醜著稱' => '醜著稱',
-'醜著者' => '醜著者',
-'醜著述' => '醜著述',
-'醜著錄' => '醜著錄',
-'醫院裡' => '醫院裏',
-'醯壺' => '醯壺',
-'醯壶' => '醯壺',
-'醯醋' => '醯醋',
-'醯醢' => '醯醢',
-'醯醬' => '醯醬',
-'醯酱' => '醯醬',
-'醯鸡' => '醯雞',
-'醯雞' => '醯雞',
-'釀著' => '釀着',
-'釀著作' => '釀著作',
-'釀著名' => '釀著名',
-'釀著書' => '釀著書',
-'釀著稱' => '釀著稱',
-'釀著者' => '釀著者',
-'釀著述' => '釀著述',
-'釀著錄' => '釀著錄',
-'鉤' => '鈎',
-'鉤心鬥角' => '鈎心鬥角',
-'鋪著' => '鋪着',
-'鋪著作' => '鋪著作',
-'鋪著名' => '鋪著名',
-'鋪著書' => '鋪著書',
-'鋪著稱' => '鋪著稱',
-'鋪著者' => '鋪著者',
-'鋪著述' => '鋪著述',
-'鋪著錄' => '鋪著錄',
-'閉著' => '閉着',
-'閉著作' => '閉著作',
-'閉著名' => '閉著名',
-'閉著書' => '閉著書',
-'閉著稱' => '閉著稱',
-'閉著者' => '閉著者',
-'閉著述' => '閉著述',
-'閉著錄' => '閉著錄',
-'開著' => '開着',
-'開著作' => '開著作',
-'開著名' => '開著名',
-'開著書' => '開著書',
-'開著稱' => '開著稱',
-'開著者' => '開著者',
-'開著述' => '開著述',
-'開著錄' => '開著錄',
-'閑著' => '閑着',
-'閑著作' => '閑著作',
-'閑著名' => '閑著名',
-'閑著書' => '閑著書',
-'閑著稱' => '閑著稱',
-'閑著者' => '閑著者',
-'閑著述' => '閑著述',
-'閑著錄' => '閑著錄',
-'關著' => '關着',
-'關著作' => '關著作',
-'關著名' => '關著名',
-'關著書' => '關著書',
-'關著稱' => '關著稱',
-'關著者' => '關著者',
-'關著述' => '關著述',
-'關著錄' => '關著錄',
-'聞不著' => '闻不着',
-'聞得著' => '闻得着',
+'轉著' => '转着',
+'轉著書' => '转著书',
+'轉著作' => '转著作',
+'轉著名' => '转著名',
+'轉著錄' => '转著录',
+'轉著稱' => '转著称',
+'轉著者' => '转著者',
+'轉著述' => '转著述',
+'轉帳' => '转账',
+'軟體' => '软件',
+'軟體動物' => '软体动物',
+'軟體家具' => '软体家具',
+'軟碟機' => '软驱',
+'載著' => '载着',
+'載著書' => '载著书',
+'載著作' => '载著作',
+'載著名' => '载著名',
+'載著錄' => '载著录',
+'載著稱' => '载著称',
+'載著者' => '载著者',
+'載著述' => '载著述',
+'達·文西' => '达·芬奇',
+'達著' => '达着',
+'三蘭港' => '达累斯萨拉姆',
+'達文西' => '达芬奇',
+'達著書' => '达著书',
+'達著作' => '达著作',
+'達著名' => '达著名',
+'達著錄' => '达著录',
+'達著稱' => '达著称',
+'達著者' => '达著者',
+'達著述' => '达著述',
+'過份' => '过分',
+'過著' => '过着',
+'過著作' => '过著作',
+'過著名' => '过著名',
+'過著錄' => '过著录',
+'過著稱' => '过著称',
+'過著者' => '过著者',
+'過著述' => '过著述',
+'米高·奧雲' => '迈克尔·欧文',
+'還帳' => '还账',
+'演化論' => '进化论',
+'進帳' => '进账',
+'遠著' => '远着',
+'遠著書' => '远著书',
+'遠著作' => '远著作',
+'遠著名' => '远著名',
+'遠著錄' => '远著录',
+'遠著稱' => '远著称',
+'遠著者' => '远著者',
+'遠著述' => '远著述',
+'連著' => '连着',
+'連結他' => '连结他',
+'連著書' => '连著书',
+'連著作' => '连著作',
+'連著名' => '连著名',
+'連著錄' => '连著录',
+'連著稱' => '连著称',
+'連著者' => '连著者',
+'連著述' => '连著述',
+'杜拜' => '迪拜',
+'迫著' => '迫着',
+'疊代' => '迭代',
+'追著' => '追着',
+'追著書' => '追著书',
+'追著作' => '追著作',
+'追著名' => '追著名',
+'追著錄' => '追著录',
+'追著稱' => '追著称',
+'追著者' => '追著者',
+'追著述' => '追著述',
+'逆著' => '逆着',
+'逆著書' => '逆著书',
+'逆著作' => '逆著作',
+'逆著名' => '逆著名',
+'逆著錄' => '逆著录',
+'逆著稱' => '逆著称',
+'逆著者' => '逆著者',
+'逆著述' => '逆著述',
+'逼著' => '逼着',
+'逼著書' => '逼著书',
+'逼著作' => '逼著作',
+'逼著名' => '逼著名',
+'逼著錄' => '逼著录',
+'逼著稱' => '逼著称',
+'逼著者' => '逼著者',
+'逼著述' => '逼著述',
+'遇著' => '遇着',
+'遇著書' => '遇著书',
+'遇著作' => '遇著作',
+'遇著名' => '遇著名',
+'遇著錄' => '遇著录',
+'遇著稱' => '遇著称',
+'遇著者' => '遇著者',
+'遇著述' => '遇著述',
+'部份' => '部分',
+'配合著' => '配合着',
+'配合著名' => '配合著名',
+'配著' => '配着',
+'配著書' => '配著书',
+'配著作' => '配著作',
+'配著名' => '配著名',
+'配著錄' => '配著录',
+'配著稱' => '配著称',
+'配著者' => '配著者',
+'配著述' => '配著述',
+'釀著' => '酿着',
+'釀著書' => '酿著书',
+'釀著作' => '酿著作',
+'釀著名' => '酿著名',
+'釀著錄' => '酿著录',
+'釀著稱' => '酿著称',
+'釀著者' => '酿著者',
+'釀著述' => '酿著述',
+'黎克特制' => '里氏',
+'芮氏0' => '里氏0',
+'芮氏1' => '里氏1',
+'芮氏2' => '里氏2',
+'芮氏3' => '里氏3',
+'芮氏4' => '里氏4',
+'芮氏5' => '里氏5',
+'芮氏6' => '里氏6',
+'芮氏7' => '里氏7',
+'芮氏8' => '里氏8',
+'芮氏9' => '里氏9',
+'芮氏地震規模' => '里氏地震规模',
+'芮氏規模' => '里氏震级',
+'金夏沙' => '金沙萨',
+'鈽' => '钚',
+'鍅' => '钫',
+'狄托' => '铁托',
+'鋪著' => '铺着',
+'鋪著書' => '铺著书',
+'鋪著作' => '铺著作',
+'鋪著名' => '铺著名',
+'鋪著錄' => '铺著录',
+'鋪著稱' => '铺著称',
+'鋪著者' => '铺著者',
+'鋪著述' => '铺著述',
+'銷帳' => '销账',
+'鉲' => '锎',
+'鎝' => '锝',
+'鉳' => '锫',
+'鑀' => '锿',
+'鋂' => '镅',
+'錼' => '镎',
+'孟德爾頌' => '门德尔松',
+'孟德爾遜' => '门德尔松',
+'快閃記憶體' => '闪存',
+'閉著' => '闭着',
+'閉著書' => '闭著书',
+'閉著作' => '闭著作',
+'閉著名' => '闭著名',
+'閉著錄' => '闭著录',
+'閉著稱' => '闭著称',
+'閉著者' => '闭著者',
+'閉著述' => '闭著述',
+'閒著' => '闲着',
+'閑著' => '闲着',
+'閑著書' => '闲著书',
+'閑著作' => '闲著作',
+'閑著名' => '闲著名',
+'閑著錄' => '闲著录',
+'閑著稱' => '闲著称',
+'閑著者' => '闲著者',
+'閑著述' => '闲著述',
+'悶著' => '闷着',
+'鬧著' => '闹着',
 '聞著' => '闻着',
 '亞塞拜然' => '阿塞拜疆',
-'阿拉伯聯合大公國' => '阿拉伯聯合酋長國',
+'阿布達比' => '阿布扎比',
+'阿拉伯聯合大公國' => '阿拉伯联合酋长国',
+'亞斯文' => '阿斯旺',
 '附著' => '附着',
+'附著書' => '附著书',
 '附著作' => '附著作',
 '附著名' => '附著名',
-'附著書' => '附著書',
-'é\99\84è\91\97稱' => 'é\99\84è\91\97稱',
+'附著錄' => '附著录',
+'é\99\84è\91\97稱' => 'é\99\84è\91\97称',
 '附著者' => '附著者',
 '附著述' => '附著述',
-'附著錄' => '附著錄',
 '陋著' => '陋着',
+'陋著書' => '陋著书',
 '陋著作' => '陋著作',
 '陋著名' => '陋著名',
-'陋著書' => '陋著書',
-'é\99\8bè\91\97稱' => 'é\99\8bè\91\97稱',
+'陋著錄' => '陋著录',
+'é\99\8bè\91\97稱' => 'é\99\8bè\91\97称',
 '陋著者' => '陋著者',
 '陋著述' => '陋著述',
-'陋著錄' => '陋著錄',
 '陪著' => '陪着',
+'陪著書' => '陪著书',
 '陪著作' => '陪著作',
 '陪著名' => '陪著名',
-'陪著書' => '陪著書',
-'é\99ªè\91\97稱' => 'é\99ªè\91\97稱',
+'陪著錄' => '陪著录',
+'é\99ªè\91\97稱' => 'é\99ªè\91\97称',
 '陪著者' => '陪著者',
 '陪著述' => '陪著述',
-'陪著錄' => '陪著錄',
+'隨著' => '随着',
+'隨著書' => '随著书',
+'隨著作' => '随著作',
+'隨著名' => '随著名',
+'隨著錄' => '随著录',
+'隨著稱' => '随著称',
+'隨著者' => '随著者',
+'隨著述' => '随著述',
+'私隱' => '隐私',
 '隔著' => '隔着',
+'隔著書' => '隔著书',
 '隔著作' => '隔著作',
 '隔著名' => '隔著名',
-'隔著書' => '隔著書',
-'é\9a\94è\91\97稱' => 'é\9a\94è\91\97稱',
+'隔著錄' => '隔著录',
+'é\9a\94è\91\97稱' => 'é\9a\94è\91\97称',
 '隔著者' => '隔著者',
 '隔著述' => '隔著述',
-'隔著錄' => '隔著錄',
-'隨著' => '隨着',
-'隨著作' => '隨著作',
-'隨著名' => '隨著名',
-'隨著書' => '隨著書',
-'隨著稱' => '隨著稱',
-'隨著者' => '隨著者',
-'隨著述' => '隨著述',
-'隨著錄' => '隨著錄',
+'耶加達' => '雅加达',
+'雅爾達' => '雅尔塔',
 '雅著' => '雅着',
+'雅著書' => '雅著书',
 '雅著作' => '雅著作',
 '雅著名' => '雅著名',
-'雅著書' => '雅著書',
-'é\9b\85è\91\97稱' => 'é\9b\85è\91\97稱',
+'雅著錄' => '雅著录',
+'é\9b\85è\91\97稱' => 'é\9b\85è\91\97称',
 '雅著者' => '雅著者',
 '雅著述' => '雅著述',
-'雅著錄' => '雅著錄',
-'雜著' => '雜着',
-'雜著作' => '雜著作',
-'雜著名' => '雜著名',
-'雜著書' => '雜著書',
-'雜著稱' => '雜著稱',
-'雜著者' => '雜著者',
-'雜著述' => '雜著述',
-'雜著錄' => '雜著錄',
-'冰淇淋' => '雪糕',
-'雪里红' => '雪裏紅',
-'雪裡紅' => '雪裏紅',
-'雪裡蕻' => '雪裏蕻',
-'雪里蕻' => '雪裏蕻',
+'山葉' => '雅马哈',
+'雷諾瓦' => '雷诺阿',
+'荷姆茲' => '霍尔木兹',
+'非份' => '非分',
 '靠著' => '靠着',
 '靠著作' => '靠著作',
 '靠著名' => '靠著名',
-'靠著稱' => '靠著稱',
-'é\9d è\91\97称' => 'é\9d è\91\97稱',
+'靠著錄' => '靠著录',
+'é\9d è\91\97稱' => 'é\9d è\91\97称',
 '靠著者' => '靠著者',
 '靠著述' => '靠著述',
-'靠著錄' => '靠著錄',
-'靠著录' => '靠著錄',
-'響著' => '響着',
-'響著作' => '響著作',
-'響著名' => '響著名',
-'響著書' => '響著書',
-'響著稱' => '響著稱',
-'響著者' => '響著者',
-'響著述' => '響著述',
-'響著錄' => '響著錄',
-'頂著' => '頂着',
-'頂著作' => '頂著作',
-'頂著名' => '頂著名',
-'頂著書' => '頂著書',
-'頂著稱' => '頂著稱',
-'頂著者' => '頂著者',
-'頂著述' => '頂著述',
-'頂著錄' => '頂著錄',
-'順著' => '順着',
-'順著作' => '順著作',
-'順著名' => '順著名',
-'順著書' => '順著書',
-'順著稱' => '順著稱',
-'順著者' => '順著者',
-'順著述' => '順著述',
-'順著錄' => '順著錄',
-'頒布' => '頒佈',
-'颁布' => '頒佈',
-'領域裡' => '領域裏',
-'领域里' => '領域裏',
-'領著' => '領着',
-'領著作' => '領著作',
-'領著名' => '領著名',
-'領著書' => '領著書',
-'領著稱' => '領著稱',
-'領著者' => '領著者',
-'領著述' => '領著述',
-'領著錄' => '領著錄',
-'飄著' => '飄着',
-'飄著作' => '飄著作',
-'飄著名' => '飄著名',
-'飄著書' => '飄著書',
-'飄著稱' => '飄著稱',
-'飄著者' => '飄著者',
-'飄著述' => '飄著述',
-'飄著錄' => '飄著錄',
-'館裡' => '館裏',
-'馆里' => '館裏',
-'馬爾地夫' => '馬爾代夫',
-'馬利共和國' => '馬里共和國',
-'土豆' => '馬鈴薯',
-'馬鞍山線' => '馬鞍山綫',
-'马鞍山线' => '馬鞍山綫',
-'駕著' => '駕着',
-'駕著作' => '駕著作',
-'駕著名' => '駕著名',
-'駕著書' => '駕著書',
-'駕著稱' => '駕著稱',
-'駕著者' => '駕著者',
-'駕著述' => '駕著述',
-'駕著錄' => '駕著錄',
-'騎著' => '騎着',
-'騎著作' => '騎著作',
-'騎著名' => '騎著名',
-'騎著書' => '騎著書',
-'騎著稱' => '騎著稱',
-'騎著者' => '騎著者',
-'騎著述' => '騎著述',
-'騎著錄' => '騎著錄',
-'騙著' => '騙着',
-'騙著作' => '騙著作',
-'騙著名' => '騙著名',
-'騙著書' => '騙著書',
-'騙著稱' => '騙著稱',
-'騙著者' => '騙著者',
-'騙著述' => '騙著述',
-'騙著錄' => '騙著錄',
+'南韓' => '韩国',
+'音樂錄影帶' => '音乐录影带',
+'頂著' => '顶着',
+'頂著書' => '顶著书',
+'頂著作' => '顶著作',
+'頂著名' => '顶著名',
+'頂著錄' => '顶著录',
+'頂著稱' => '顶著称',
+'頂著者' => '顶著者',
+'頂著述' => '顶著述',
+'順著' => '顺着',
+'順著書' => '顺著书',
+'順著作' => '顺著作',
+'順著名' => '顺著名',
+'順著錄' => '顺著录',
+'順著稱' => '顺著称',
+'順著者' => '顺著者',
+'順著述' => '顺著述',
+'領著' => '领着',
+'領著書' => '领著书',
+'領著作' => '领著作',
+'領著名' => '领著名',
+'領著錄' => '领著录',
+'領著稱' => '领著称',
+'領著者' => '领著者',
+'領著述' => '领著述',
+'飄著' => '飘着',
+'飃著' => '飘着',
+'飄著書' => '飘著书',
+'飄著作' => '飘著作',
+'飄著名' => '飘著名',
+'飄著錄' => '飘著录',
+'飄著稱' => '飘著称',
+'飄著者' => '飘著者',
+'飄著述' => '飘著述',
+'行政總裁' => '首席执行官',
+'執行長、' => '首席执行官、',
+'執行長。' => '首席执行官。',
+'執行長,' => '首席执行官,',
+'財務長、' => '首席财务官、',
+'財務長。' => '首席财务官。',
+'財務長,' => '首席财务官,',
+'營運長、' => '首席运营官、',
+'營運長。' => '首席运营官。',
+'營運長,' => '首席运营官,',
+'馬爾地夫' => '马尔代夫',
+'萌島' => '马恩岛',
+'馬拉威' => '马拉维',
+'馬斯垂克' => '马斯特里赫特',
+'馬爾他' => '马耳他',
+'麻薩諸塞' => '马萨诸塞',
+'馬利共和國' => '马里共和国',
+'駛著' => '驶着',
+'駕著' => '驾着',
+'駕著書' => '驾著书',
+'駕著作' => '驾著作',
+'駕著名' => '驾著名',
+'駕著錄' => '驾著录',
+'駕著稱' => '驾著称',
+'駕著者' => '驾著者',
+'駕著述' => '驾著述',
+'罵著' => '骂着',
+'罵著書' => '骂著书',
+'罵著作' => '骂著作',
+'罵著名' => '骂著名',
+'罵著錄' => '骂著录',
+'罵著稱' => '骂著称',
+'罵著者' => '骂著者',
+'罵著述' => '骂著述',
+'騎著' => '骑着',
+'騎著書' => '骑著书',
+'騎著作' => '骑著作',
+'騎著名' => '骑著名',
+'騎著錄' => '骑著录',
+'騎著稱' => '骑著称',
+'騎著者' => '骑著者',
+'騎著述' => '骑著述',
+'騙著' => '骗着',
+'騙著書' => '骗著书',
+'騙著作' => '骗著作',
+'騙著名' => '骗著名',
+'騙著錄' => '骗著录',
+'騙著稱' => '骗著称',
+'騙著者' => '骗著者',
+'騙著述' => '骗著述',
+'尖峰時段' => '高峰时段',
+'尖峰時間' => '高峰时间',
+'高畫質' => '高清',
 '高著' => '高着',
+'高著書' => '高著书',
 '高著作' => '高著作',
 '高著名' => '高著名',
-'高著書' => '高著書',
-'é«\98è\91\97稱' => 'é«\98è\91\97稱',
+'高著錄' => '高著录',
+'é«\98è\91\97稱' => 'é«\98è\91\97称',
 '高著者' => '高著者',
 '高著述' => '高著述',
-'高著錄' => '高著錄',
 '髭著' => '髭着',
+'髭著書' => '髭著书',
 '髭著作' => '髭著作',
 '髭著名' => '髭著名',
-'髭著書' => '髭著書',
-'é«­è\91\97稱' => 'é«­è\91\97稱',
+'髭著錄' => '髭著录',
+'é«­è\91\97稱' => 'é«­è\91\97称',
 '髭著者' => '髭著者',
 '髭著述' => '髭著述',
-'髭著錄' => '髭著錄',
-'鬥著' => '鬥着',
-'鬥著作' => '鬥著作',
-'鬥著名' => '鬥著名',
-'鬥著書' => '鬥著書',
-'鬥著稱' => '鬥著稱',
-'鬥著者' => '鬥著者',
-'鬥著述' => '鬥著述',
-'鬥著錄' => '鬥著錄',
-'麗著' => '麗着',
-'麗著作' => '麗著作',
-'麗著名' => '麗著名',
-'麗著書' => '麗著書',
-'麗著稱' => '麗著稱',
-'麗著者' => '麗著者',
-'麗著述' => '麗著述',
-'麗著錄' => '麗著錄',
+'咪高峰' => '麦克风',
 '黏著' => '黏着',
+'黏著書' => '黏著书',
 '黏著作' => '黏著作',
 '黏著名' => '黏著名',
-'黏著書' => '黏著書',
-'é»\8fè\91\97稱' => 'é»\8fè\91\97稱',
+'黏著錄' => '黏著录',
+'é»\8fè\91\97稱' => 'é»\8fè\91\97称',
 '黏著者' => '黏著者',
 '黏著述' => '黏著述',
-'黏著錄' => '黏著錄',
-'點著' => '點着',
-'點著作' => '點著作',
-'點著名' => '點著名',
-'點著書' => '點著書',
-'點著稱' => '點著稱',
-'點著者' => '點著者',
-'點著述' => '點著述',
-'點著錄' => '點著錄',
-'點裡' => '點裏',
-'点里' => '點裏',
-);
-
-$zh2CN = array(
-'16進位' => '16进位',
-'16進位制' => '16进位制',
-'『' => '‘',
-'』' => '’',
-'「' => '“',
-'」' => '”',
-'萬曆' => '万历',
-'三極體' => '三极管',
-'三極管' => '三极管',
-'串列加速器' => '串列加速器',
-'串列' => '串行',
-'烏茲別克' => '乌兹别克斯坦',
-'葉門' => '也门',
-'芝士' => '乾酪',
-'二極管' => '二极管',
-'二極體' => '二极管',
-'二進位制' => '二进位制',
-'二進位' => '二进制',
-'網際網路' => '互联网',
-'互聯網' => '互联网',
-'互動式' => '交互式',
-'人工智慧' => '人工智能',
-'甚麽' => '什么',
-'甚麼' => '什么',
-'乙太網' => '以太网',
-'優先順序' => '优先级',
-'感測' => '传感',
-'伯利茲' => '伯利兹',
-'貝里斯' => '伯利兹',
-'點陣圖' => '位图',
-'維德角' => '佛得角',
-'常式' => '例程',
-'侏儸紀' => '侏罗纪',
-'海珊' => '侯赛因',
-'攜帶型' => '便携式',
-'資訊理論' => '信息论',
-'母音' => '元音',
-'光碟' => '光盘',
-'光碟機' => '光驱',
-'柯林頓' => '克林顿',
-'克羅埃西亞' => '克罗地亚',
-'進球' => '入球',
-'全形' => '全角',
-'八進位制' => '八进位制',
-'八進位' => '八进制',
-'六進位制' => '六进位制',
-'六進位' => '六进制',
-'記憶體' => '内存',
-'甘比亞' => '冈比亚',
-'防寫' => '写保护',
-'軍中樂園' => '军中乐园',
-'冷菜' => '凉菜',
-'冷盤' => '凉菜',
-'幾內亞比索' => '几内亚比绍',
-'梵谷' => '凡高',
-'計程車' => '出租车',
-'解析度' => '分辨率',
-'列支敦斯登' => '列支敦士登',
-'賴比瑞亞' => '利比里亚',
-'迦納' => '加纳',
-'加彭' => '加蓬',
-'載入' => '加载',
-'十進位制' => '十进位制',
-'十進位' => '十进制',
-'半形' => '半角',
-'华乐街' => '华乐街',
-'波札那' => '博茨瓦纳',
-'盧安達' => '卢旺达',
-'衞生' => '卫生',
-'衛生' => '卫生',
-'瓜地馬拉' => '危地马拉',
-'厄瓜多' => '厄瓜多尔',
-'厄瓜多爾' => '厄瓜多尔',
-'厄瓜多尔' => '厄瓜多尔',
-'厄利垂亞' => '厄立特里亚',
-'變數' => '变量',
-'撞球' => '台球',
-'桌球' => '台球',
-'吉布地' => '吉布提',
-'哈薩克' => '哈萨克斯坦',
-'哥斯大黎加' => '哥斯达黎加',
-'雜訊' => '噪声',
-'因數' => '因子',
-'吐瓦魯' => '图瓦卢',
-'土庫曼' => '土库曼斯坦',
-'聖露西亞' => '圣卢西亚',
-'聖吉斯納域斯' => '圣基茨和尼维斯',
-'聖克里斯多福及尼維斯' => '圣基茨和尼维斯',
-'聖文森及格瑞那丁' => '圣文森特和格林纳丁斯',
-'聖馬利諾' => '圣马力诺',
-'蓋亞那' => '圭亚那',
-'坦尚尼亞' => '坦桑尼亚',
-'衣索比亞' => '埃塞俄比亚',
-'衣索匹亞' => '埃塞俄比亚',
-'功能變數名稱' => '域名',
-'吉里巴斯' => '基里巴斯',
-'塔吉克' => '塔吉克斯坦',
-'塞拉利昂' => '塞拉利昂',
-'塞普勒斯' => '塞浦路斯',
-'塞席爾' => '塞舌尔',
-'音效卡' => '声卡',
-'多米尼克' => '多米尼加国',
-'夜学' => '夜校',
-'福士' => '大众',
-'福斯' => '大众',
-'大衛碧咸' => '大卫·贝克汉姆',
-'頭槌' => '头球',
-'賓士' => '奔驰',
-'平治' => '奔驰',
-'忌廉' => '奶油',
-'字元会' => '字元会',
-'字元會' => '字元会',
-'字元濟' => '字元济',
-'字元济' => '字元济',
-'字型大小' => '字号',
-'字型檔' => '字库',
-'欄位' => '字段',
-'字母' => '字母',
-'字元' => '字符',
-'字節' => '字节',
-'位元組' => '字节',
-'存檔' => '存盘',
-'安地卡及巴布達' => '安提瓜和巴布达',
-'巨集' => '宏',
-'寬頻' => '宽带',
-'定址' => '寻址',
-'奈及利亞' => '尼日利亚',
-'尼日利亞' => '尼日利亚',
-'尼日利亚' => '尼日利亚',
-'尼日爾' => '尼日尔',
-'尼日尔' => '尼日尔',
-'章節附註' => '尾注',
-'區域網' => '局域网',
-'巴貝多' => '巴巴多斯',
-'巴布亞紐幾內亞' => '巴布亚新几内亚',
-'布希' => '布什',
-'布殊' => '布什',
-'布基納法索' => '布基纳法索',
-'布吉納法索' => '布基纳法索',
-'布希亞' => '布希亚',
-'布希亚' => '布希亚',
-'蒲隆地' => '布隆迪',
-'希特拉' => '希特勒',
-'帛琉' => '帕劳',
-'平治之乱' => '平治之乱',
-'平治之亂' => '平治之乱',
-'非同步' => '异步',
-'迴圈' => '循环',
-'快閃記憶體' => '快闪存储器',
-'匯流排' => '总线',
-'義大利' => '意大利',
-'黛安娜' => '戴安娜',
-'屋价' => '房价',
-'索羅門群島' => '所罗门群岛',
-'打印' => '打印',
-'列印' => '打印',
-'印表機' => '打印机',
-'打印機' => '打印机',
-'射門' => '打门',
-'掃瞄器' => '扫瞄仪',
-'括弧' => '括号',
-'拿破崙' => '拿破仑',
-'積架' => '捷豹',
-'介面' => '接口',
-'控制項' => '控件',
-'資料庫' => '数据库',
-'汶萊' => '文莱',
-'史瓦濟蘭' => '斯威士兰',
-'斯洛維尼亞' => '斯洛文尼亚',
-'紐西蘭' => '新西兰',
-'即食麵' => '方便面',
-'快速面' => '方便面',
-'泡麵' => '方便面',
-'速食麵' => '方便面',
-'伺服器' => '服务器',
-'機械人' => '机器人',
-'機器人' => '机器人',
-'許可權' => '权限',
-'寶獅' => '标志',
-'格瑞那達' => '格林纳达',
-'榴槤' => '榴莲',
-'榴梿' => '榴莲',
-'茅利塔尼亞' => '毛里塔尼亚',
-'毛里裘斯' => '毛里求斯',
-'模里西斯' => '毛里求斯',
-'华乐' => '民乐',
-'中樂' => '民乐',
-'永曆' => '永历',
-'沙地阿拉伯' => '沙特阿拉伯',
-'沙烏地阿拉伯' => '沙特阿拉伯',
-'波士尼亞赫塞哥維納' => '波斯尼亚和黑塞哥维那',
-'辛巴威' => '津巴布韦',
-'宏都拉斯' => '洪都拉斯',
-'滑鼠蛇' => '滑鼠蛇',
-'滿16進位' => '满16进位',
-'滿二進位' => '满二进位',
-'滿八進位' => '满八进位',
-'滿六進位' => '满六进位',
-'滿十六進位' => '满十六进位',
-'滿十進位' => '满十进位',
-'蓋火鍋' => '火锅盖帽',
-'千里達托貝哥' => '特立尼达和托巴哥',
-'狗隻' => '犬只',
-'卡佩雅蒂' => '珍妮弗·卡普里亚蒂',
-'諾魯' => '瑙鲁',
-'萬那杜' => '瓦努阿图',
-'溫納圖' => '瓦努阿图',
-'碟片' => '盘片',
-'短訊' => '短信',
-'簡訊' => '短信',
-'矽尘' => '矽尘',
-'矽塵' => '矽尘',
-'矽肺' => '矽肺',
-'矽钢' => '矽钢',
-'矽鋼' => '矽钢',
-'矽' => '硅',
-'矽片' => '硅片',
-'矽谷' => '硅谷',
-'硬體' => '硬件',
-'硬碟' => '硬盘',
-'磁碟' => '磁盘',
-'磁軌' => '磁道',
-'葛摩' => '科摩罗',
-'象牙海岸' => '科特迪瓦',
-'行動電話' => '移动电话',
-'流動電話' => '移动电话',
-'程式控制' => '程控',
-'突尼西亞' => '突尼斯',
-'谐星' => '笑星',
-'等於' => '等于',
-'運算元' => '算子',
-'演算法' => '算法',
-'顆進球' => '粒入球',
-'索馬利亞' => '索马里',
-'網路' => '网络',
-'網絡' => '网络',
-'寮國' => '老挝',
-'肯雅' => '肯尼亚',
-'肯亞' => '肯尼亚',
-'單車' => '自行车',
-'太空梭' => '航天飞机',
-'穿梭機' => '航天飞机',
-'節慶' => '节日',
-'晶元' => '芯片',
-'晶片' => '芯片',
-'蘇利南' => '苏里南',
-'士多啤梨' => '草莓',
-'莫三比克' => '莫桑比克',
-'賴索托' => '莱索托',
-'辭彙' => '词汇',
-'片語' => '词组',
-'調制解調器' => '调制解调器',
-'數據機' => '调制解调器',
-'貝南' => '贝宁',
-'尚比亞' => '赞比亚',
-'绑紧跳' => '蹦极跳',
-'笨豬跳' => '蹦极跳',
-'軟體' => '软件',
-'軟件' => '软件',
-'軟碟機' => '软驱',
-'米高奧雲' => '迈克尔·欧文',
-'舒麥加' => '迈克尔·舒马赫',
-'遠程控制' => '远程控制',
-'远程控制' => '远程控制',
-'亞塞拜然' => '阿塞拜疆',
-'阿拉伯聯合大公國' => '阿拉伯联合酋长国',
-'散钱' => '零钱',
-'南韓' => '韩国',
-'馬爾地夫' => '马尔代夫',
-'沙芬' => '马拉特·萨芬',
-'馬爾他' => '马耳他',
-'萬事得' => '马自达',
-'馬利共和國' => '马里共和国',
-'預設' => '默认',
+'蒙特內哥羅' => '黑山',
 '滑鼠' => '鼠标',
 );
-
-$zh2SG = array(
-'『' => '‘',
-'』' => '’',
-'「' => '“',
-'」' => '”',
-'住房' => '住屋',
-'凉菜' => '冷菜',
-'冷盤' => '冷菜',
-'民乐' => '华乐',
-'夜校' => '夜学',
-'房价' => '屋价',
-'即食麵' => '快速面',
-'速食麵' => '快速面',
-'泡麵' => '快速面',
-'方便面' => '快速面',
-'零钱' => '散钱',
-'散紙' => '散钱',
-'榴莲' => '榴梿',
-'榴蓮' => '榴梿',
-'笨豬跳' => '绑紧跳',
-'蹦极跳' => '绑紧跳',
-'笑星' => '谐星',
-);
index 12f0dff..82424eb 100644 (file)
@@ -41,13 +41,14 @@ class DeleteAction extends FormlessAction {
        }
 
        public function show() {
+               $out = $this->getOutput();
                if ( $this->getContext()->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
-                       $out = $this->getOutput();
                        $out->addModuleStyles( array(
                                'mediawiki.ui.input',
                                'mediawiki.ui.checkbox',
                        ) );
                }
+               $out->addHelpLink( 'Help:Sysop deleting and undeleting' );
                $this->page->delete();
        }
 }
index ff31eb6..b5a7391 100644 (file)
@@ -65,8 +65,8 @@ class InfoAction extends FormlessAction {
         */
        public static function invalidateCache( Title $title ) {
                global $wgMemc;
-               // Clear page info.
-               $revision = WikiPage::factory( $title )->getRevision();
+
+               $revision = Revision::newFromTitle( $title, 0, Revision::READ_LATEST );
                if ( $revision !== null ) {
                        $key = wfMemcKey( 'infoaction', sha1( $title->getPrefixedText() ), $revision->getId() );
                        $wgMemc->delete( $key );
@@ -246,13 +246,13 @@ class InfoAction extends FormlessAction {
                        $pageInfo['header-basic'][] = array(
                                $this->msg( 'pageinfo-redirectsto' ),
                                Linker::link( $this->page->getRedirectTarget() ) .
-                               $this->msg( 'word-separator' )->text() .
-                               $this->msg( 'parentheses', Linker::link(
+                               $this->msg( 'word-separator' )->escaped() .
+                               $this->msg( 'parentheses' )->rawParams( Linker::link(
                                        $this->page->getRedirectTarget(),
                                        $this->msg( 'pageinfo-redirectsto-info' )->escaped(),
                                        array(),
                                        array( 'action' => 'info' )
-                               ) )->text()
+                               ) )->escaped()
                        );
                }
 
index 3a31b2a..74e51c8 100644 (file)
@@ -32,9 +32,6 @@
  * Module parameters: Derived classes can define getAllowedParams() to specify
  *    which parameters to expect, how to parse and validate them.
  *
- * Profiling: various methods to allow keeping tabs on various tasks and their
- *    time costs
- *
  * Self-documentation: code to allow the API to document its own state
  *
  * @ingroup API
@@ -160,6 +157,9 @@ abstract class ApiBase extends ContextSource {
         * If the module may only be used with a certain format module,
         * it should override this method to return an instance of that formatter.
         * A value of null means the default format will be used.
+        * @note Do not use this just because you don't want to support non-json
+        * formats. This should be used only when there is a fundamental
+        * requirement for a specific format.
         * @return mixed Instance of a derived class of ApiFormatBase, or null
         */
        public function getCustomPrinter() {
@@ -380,6 +380,20 @@ abstract class ApiBase extends ContextSource {
                return $this->isMain() ? null : $this->getMain();
        }
 
+       /**
+        * Returns true if the current request breaks the same-origin policy.
+        *
+        * For example, json with callbacks.
+        *
+        * https://en.wikipedia.org/wiki/Same-origin_policy
+        *
+        * @since 1.25
+        * @return bool
+        */
+       public function lacksSameOriginSecurity() {
+               return $this->getMain()->getRequest()->getVal( 'callback' ) !== null;
+       }
+
        /**
         * Get the path to this module
         *
@@ -466,9 +480,7 @@ abstract class ApiBase extends ContextSource {
         */
        protected function getDB() {
                if ( !isset( $this->mSlaveDB ) ) {
-                       $this->profileDBIn();
                        $this->mSlaveDB = wfGetDB( DB_SLAVE, 'api' );
-                       $this->profileDBOut();
                }
 
                return $this->mSlaveDB;
@@ -1280,7 +1292,6 @@ abstract class ApiBase extends ContextSource {
         * @throws UsageException
         */
        public function dieUsage( $description, $errorCode, $httpRespCode = 0, $extradata = null ) {
-               Profiler::instance()->close();
                throw new UsageException(
                        $description,
                        $this->encodeParamName( $errorCode ),
@@ -1937,6 +1948,21 @@ abstract class ApiBase extends ContextSource {
                throw new MWException( "Internal error in $method: $message" );
        }
 
+       /**
+        * Write logging information for API features to a debug log, for usage
+        * analysis.
+        * @param string $feature Feature being used.
+        */
+       protected function logFeatureUsage( $feature ) {
+               $request = $this->getRequest();
+               $s = '"' . addslashes( $feature ) . '"' .
+                       ' "' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) . '"' .
+                       ' "' . $request->getIP() . '"' .
+                       ' "' . addslashes( $request->getHeader( 'Referer' ) ) . '"' .
+                       ' "' . addslashes( $this->getMain()->getUserAgent() ) . '"';
+               wfDebugLog( 'api-feature-usage', $s, 'private' );
+       }
+
        /**@}*/
 
        /************************************************************************//**
@@ -2172,162 +2198,6 @@ abstract class ApiBase extends ContextSource {
 
        /**@}*/
 
-       /************************************************************************//**
-        * @name   Profiling
-        * @{
-        */
-
-       /**
-        * Profiling: total module execution time
-        */
-       private $mTimeIn = 0, $mModuleTime = 0;
-       /** @var ScopedCallback */
-       private $profile;
-       /** @var ScopedCallback */
-       private $dbProfile;
-
-       /**
-        * Get the name of the module as shown in the profiler log
-        *
-        * @param DatabaseBase|bool $db
-        *
-        * @return string
-        */
-       public function getModuleProfileName( $db = false ) {
-               if ( $db ) {
-                       return 'API:' . $this->mModuleName . '-DB';
-               }
-
-               return 'API:' . $this->mModuleName;
-       }
-
-       /**
-        * Start module profiling
-        */
-       public function profileIn() {
-               if ( $this->mTimeIn !== 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'Called twice without calling profileOut()' );
-               }
-               $this->mTimeIn = microtime( true );
-               $this->profile = Profiler::instance()->scopedProfileIn( $this->getModuleProfileName() );
-       }
-
-       /**
-        * End module profiling
-        */
-       public function profileOut() {
-               if ( $this->mTimeIn === 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'Called without calling profileIn() first' );
-               }
-               if ( $this->mDBTimeIn !== 0 ) {
-                       ApiBase::dieDebug(
-                               __METHOD__,
-                               'Must be called after database profiling is done with profileDBOut()'
-                       );
-               }
-
-               $this->mModuleTime += microtime( true ) - $this->mTimeIn;
-               $this->mTimeIn = 0;
-               Profiler::instance()->scopedProfileOut( $this->profile );
-       }
-
-       /**
-        * When modules crash, sometimes it is needed to do a profileOut() regardless
-        * of the profiling state the module was in. This method does such cleanup.
-        */
-       public function safeProfileOut() {
-               if ( $this->mTimeIn !== 0 ) {
-                       if ( $this->mDBTimeIn !== 0 ) {
-                               $this->profileDBOut();
-                       }
-                       $this->profileOut();
-               }
-       }
-
-       /**
-        * Total time the module was executed
-        * @return float
-        */
-       public function getProfileTime() {
-               if ( $this->mTimeIn !== 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'Called without calling profileOut() first' );
-               }
-
-               return $this->mModuleTime;
-       }
-
-       /**
-        * Profiling: database execution time
-        */
-       private $mDBTimeIn = 0, $mDBTime = 0;
-
-       /**
-        * Start module profiling
-        */
-       public function profileDBIn() {
-               if ( $this->mTimeIn === 0 ) {
-                       ApiBase::dieDebug(
-                               __METHOD__,
-                               'Must be called while profiling the entire module with profileIn()'
-                       );
-               }
-               if ( $this->mDBTimeIn !== 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'Called twice without calling profileDBOut()' );
-               }
-               $this->mDBTimeIn = microtime( true );
-
-               $this->dbProfile = Profiler::instance()->scopedProfileIn( $this->getModuleProfileName( true ) );
-       }
-
-       /**
-        * End database profiling
-        */
-       public function profileDBOut() {
-               if ( $this->mTimeIn === 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'Must be called while profiling ' .
-                               'the entire module with profileIn()' );
-               }
-               if ( $this->mDBTimeIn === 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'Called without calling profileDBIn() first' );
-               }
-
-               $time = microtime( true ) - $this->mDBTimeIn;
-               $this->mDBTimeIn = 0;
-
-               $this->mDBTime += $time;
-               $this->getMain()->mDBTime += $time;
-               Profiler::instance()->scopedProfileOut( $this->dbProfile );
-       }
-
-       /**
-        * Total time the module used the database
-        * @return float
-        */
-       public function getProfileDBTime() {
-               if ( $this->mDBTimeIn !== 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'Called without calling profileDBOut() first' );
-               }
-
-               return $this->mDBTime;
-       }
-
-       /**
-        * Write logging information for API features to a debug log, for usage
-        * analysis.
-        * @param string $feature Feature being used.
-        */
-       protected function logFeatureUsage( $feature ) {
-               $request = $this->getRequest();
-               $s = '"' . addslashes( $feature ) . '"' .
-                       ' "' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) . '"' .
-                       ' "' . $request->getIP() . '"' .
-                       ' "' . addslashes( $request->getHeader( 'Referer' ) ) . '"' .
-                       ' "' . addslashes( $this->getMain()->getUserAgent() ) . '"';
-               wfDebugLog( 'api-feature-usage', $s, 'private' );
-       }
-
-       /**@}*/
-
        /************************************************************************//**
         * @name   Deprecated
         * @{
@@ -2778,6 +2648,71 @@ abstract class ApiBase extends ContextSource {
                return false;
        }
 
+       /**
+        * @deprecated since 1.25, always returns empty string
+        * @param DatabaseBase|bool $db
+        * @return string
+        */
+       public function getModuleProfileName( $db = false ) {
+               wfDeprecated( __METHOD__, '1.25' );
+               return '';
+       }
+
+       /**
+        * @deprecated since 1.25
+        */
+       public function profileIn() {
+               // No wfDeprecated() yet because extensions call this and might need to
+               // keep doing so for BC.
+       }
+
+       /**
+        * @deprecated since 1.25
+        */
+       public function profileOut() {
+               // No wfDeprecated() yet because extensions call this and might need to
+               // keep doing so for BC.
+       }
+
+       /**
+        * @deprecated since 1.25
+        */
+       public function safeProfileOut() {
+               wfDeprecated( __METHOD__, '1.25' );
+       }
+
+       /**
+        * @deprecated since 1.25, always returns 0
+        * @return float
+        */
+       public function getProfileTime() {
+               wfDeprecated( __METHOD__, '1.25' );
+               return 0;
+       }
+
+       /**
+        * @deprecated since 1.25
+        */
+       public function profileDBIn() {
+               wfDeprecated( __METHOD__, '1.25' );
+       }
+
+       /**
+        * @deprecated since 1.25
+        */
+       public function profileDBOut() {
+               wfDeprecated( __METHOD__, '1.25' );
+       }
+
+       /**
+        * @deprecated since 1.25, always returns 0
+        * @return float
+        */
+       public function getProfileDBTime() {
+               wfDeprecated( __METHOD__, '1.25' );
+               return 0;
+       }
+
        /**@}*/
 }
 
index dea43ba..f03cef2 100644 (file)
@@ -78,7 +78,7 @@ class ApiBlock extends ApiBase {
                                'other',
                                $params['reason']
                        ),
-                       'Expiry' => $params['expiry'] == 'never' ? 'infinite' : $params['expiry'],
+                       'Expiry' => $params['expiry'],
                        'HardBlock' => !$params['anononly'],
                        'CreateAccount' => $params['nocreate'],
                        'AutoBlock' => $params['autoblock'],
diff --git a/includes/api/ApiCheckToken.php b/includes/api/ApiCheckToken.php
new file mode 100644 (file)
index 0000000..28c6ece
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Created on Jan 29, 2015
+ *
+ * Copyright © 2015 Brad Jorsch bjorsch@wikimedia.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
+ */
+
+/**
+ * @since 1.25
+ * @ingroup API
+ */
+class ApiCheckToken extends ApiBase {
+
+       public function execute() {
+               $params = $this->extractRequestParams();
+               $token = $params['token'];
+               $maxage = $params['maxtokenage'];
+               $request = $this->getRequest();
+               $salts = ApiQueryTokens::getTokenTypeSalts();
+               $salt = $salts[$params['type']];
+
+               $res = array();
+
+               if ( $this->getUser()->matchEditToken( $token, $salt, $request, $maxage ) ) {
+                       $res['result'] = 'valid';
+               } elseif ( $maxage !== null && $this->getUser()->matchEditToken( $token, $salt, $request ) ) {
+                       $res['result'] = 'expired';
+               } else {
+                       $res['result'] = 'invalid';
+               }
+
+               $ts = User::getEditTokenTimestamp( $token );
+               if ( $ts !== null ) {
+                       $mwts = new MWTimestamp();
+                       $mwts->timestamp->setTimestamp( $ts );
+                       $res['generated'] = $mwts->getTimestamp( TS_ISO_8601 );
+               }
+
+               $this->getResult()->addValue( null, $this->getModuleName(), $res );
+       }
+
+       public function getAllowedParams() {
+               return array(
+                       'type' => array(
+                               ApiBase::PARAM_TYPE => array_keys( ApiQueryTokens::getTokenTypeSalts() ),
+                               ApiBase::PARAM_REQUIRED => true,
+                       ),
+                       'token' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_REQUIRED => true,
+                       ),
+                       'maxtokenage' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
+                       ),
+               );
+       }
+
+       protected function getExamplesMessages() {
+               return array(
+                       'action=checktoken&type=csrf&token=123ABC'
+                               => 'apihelp-checktoken-example-simple',
+               );
+       }
+}
index a7ba48a..b56a244 100644 (file)
  */
 class ApiCreateAccount extends ApiBase {
        public function execute() {
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
-                       $this->dieUsage( 'Cannot create account when using a callback', 'aborted' );
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
+                       $this->dieUsage(
+                               'Cannot create account when the same-origin policy is not applied', 'aborted'
+                       );
                }
 
                // $loginForm->addNewaccountInternal will throw exceptions
index 8ad2ad9..ef8957e 100644 (file)
@@ -28,7 +28,9 @@
  * A module that allows for editing and creating pages.
  *
  * Currently, this wraps around the EditPage class in an ugly way,
- * EditPage.php should be rewritten to provide a cleaner interface
+ * EditPage.php should be rewritten to provide a cleaner interface,
+ * see T20654 if you're inspired to fix this.
+ *
  * @ingroup API
  */
 class ApiEditPage extends ApiBase {
@@ -48,8 +50,12 @@ class ApiEditPage extends ApiBase {
                $apiResult = $this->getResult();
 
                if ( $params['redirect'] ) {
-                       if ( $params['prependtext'] === null && $params['appendtext'] === null && $params['section'] !== 'new' ) {
-                               $this->dieUsage( 'You have attempted to edit using the "redirect"-following mode, which must be used in conjuction with section=new, prependtext, or appendtext.', 'redirect-appendonly' );
+                       if ( $params['prependtext'] === null && $params['appendtext'] === null
+                               && $params['section'] !== 'new'
+                       ) {
+                               $this->dieUsage( 'You have attempted to edit using the "redirect"-following'
+                                       . ' mode, which must be used in conjuction with section=new, prependtext'
+                                       . ', or appendtext.', 'redirect-appendonly' );
                        }
                        if ( $titleObj->isRedirect() ) {
                                $oldTitle = $titleObj;
@@ -255,6 +261,7 @@ class ApiEditPage extends ApiBase {
                        'wpIgnoreBlankSummary' => true,
                        'wpIgnoreBlankArticle' => true,
                        'wpIgnoreSelfRedirect' => true,
+                       'bot' => $params['bot'],
                );
 
                if ( !is_null( $params['summary'] ) ) {
@@ -295,10 +302,13 @@ class ApiEditPage extends ApiBase {
                if ( !is_null( $params['section'] ) ) {
                        $section = $params['section'];
                        if ( !preg_match( '/^((T-)?\d+|new)$/', $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" );
                        }
                        $content = $pageObj->getContent();
-                       if ( $section !== '0' && $section != 'new' && ( !$content || !$content->getSection( $section ) ) ) {
+                       if ( $section !== '0' && $section != 'new'
+                               && ( !$content || !$content->getSection( $section ) )
+                       ) {
                                $this->dieUsage( "There is no section {$section}.", 'nosuchsection' );
                        }
                        $requestArray['wpSection'] = $params['section'];
@@ -401,7 +411,7 @@ class ApiEditPage extends ApiBase {
                $oldRequest = $wgRequest;
                $wgRequest = $req;
 
-               $status = $ep->internalAttemptSave( $result, $user->isAllowed( 'bot' ) && $params['bot'] );
+               $status = $ep->attemptSave( $result );
                $wgRequest = $oldRequest;
 
                switch ( $status->value ) {
index 561ff3b..bfa750b 100644 (file)
@@ -117,7 +117,10 @@ class ApiFeedWatchlist extends ApiBase {
 
                        $feedItems = array();
                        foreach ( (array)$data['query']['watchlist'] as $info ) {
-                               $feedItems[] = $this->createFeedItem( $info );
+                               $feedItem = $this->createFeedItem( $info );
+                               if ( $feedItem ) {
+                                       $feedItems[] = $feedItem;
+                               }
                        }
 
                        $msg = wfMessage( 'watchlist' )->inContentLanguage()->text();
@@ -166,10 +169,22 @@ class ApiFeedWatchlist extends ApiBase {
        private function createFeedItem( $info ) {
                $titleStr = $info['title'];
                $title = Title::newFromText( $titleStr );
+               $curidParam = array();
+               if ( !$title || $title->isExternal() ) {
+                       // Probably a formerly-valid title that's now conflicting with an
+                       // interwiki prefix or the like.
+                       if ( isset( $info['pageid'] ) ) {
+                               $title = Title::newFromId( $info['pageid'] );
+                               $curidParam = array( 'curid' => $info['pageid'] );
+                       }
+                       if ( !$title || $title->isExternal() ) {
+                               return null;
+                       }
+               }
                if ( isset( $info['revid'] ) ) {
                        $titleUrl = $title->getFullURL( array( 'diff' => $info['revid'] ) );
                } else {
-                       $titleUrl = $title->getFullURL();
+                       $titleUrl = $title->getFullURL( $curidParam );
                }
                $comment = isset( $info['comment'] ) ? $info['comment'] : null;
 
index aba6921..6fd79f4 100644 (file)
@@ -73,7 +73,7 @@ class ApiImageRotate extends ApiBase {
                                $r['missing'] = '';
                        }
 
-                       $file = wfFindFile( $title );
+                       $file = wfFindFile( $title, array( 'latest' => true ) );
                        if ( !$file ) {
                                $r['result'] = 'Failure';
                                $r['errormessage'] = 'File does not exist';
index 920dbbf..5480d94 100644 (file)
@@ -46,11 +46,12 @@ class ApiLogin extends ApiBase {
         * is reached. The expiry is $this->mLoginThrottle.
         */
        public function execute() {
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        $this->getResult()->addValue( null, 'login', array(
                                'result' => 'Aborted',
-                               'reason' => 'Cannot log in when using a callback',
+                               'reason' => 'Cannot log in when the same-origin policy is not applied',
                        ) );
 
                        return;
index f17b874..2978453 100644 (file)
@@ -64,6 +64,7 @@ class ApiMain extends ApiBase {
                'rsd' => 'ApiRsd',
                'compare' => 'ApiComparePages',
                'tokens' => 'ApiTokens',
+               'checktoken' => 'ApiCheckToken',
 
                // Write modules
                'purge' => 'ApiPurge',
@@ -180,10 +181,10 @@ class ApiMain extends ApiBase {
                        // Remove all modules other than login
                        global $wgUser;
 
-                       if ( $this->getVal( 'callback' ) !== null ) {
-                               // JSON callback allows cross-site reads.
-                               // For safety, strip user credentials.
-                               wfDebug( "API: stripping user credentials for JSON callback\n" );
+                       if ( $this->lacksSameOriginSecurity() ) {
+                               // If we're in a mode that breaks the same-origin policy, strip
+                               // user credentials for security.
+                               wfDebug( "API: stripping user credentials when the same-origin policy is not applied\n" );
                                $wgUser = new User();
                                $this->getContext()->setUser( $wgUser );
                        }
@@ -214,6 +215,8 @@ class ApiMain extends ApiBase {
                $this->mModuleMgr->addModules( self::$Formats, 'format' );
                $this->mModuleMgr->addModules( $config->get( 'APIFormatModules' ), 'format' );
 
+               Hooks::run( 'ApiMain::moduleManager', array( $this->mModuleMgr ) );
+
                $this->mResult = new ApiResult( $this );
                $this->mEnableWrite = $enableWrite;
 
@@ -358,14 +361,11 @@ class ApiMain extends ApiBase {
         * Execute api request. Any errors will be handled if the API was called by the remote client.
         */
        public function execute() {
-               $this->profileIn();
                if ( $this->mInternalMode ) {
                        $this->executeAction();
                } else {
                        $this->executeActionWithErrorHandling();
                }
-
-               $this->profileOut();
        }
 
        /**
@@ -416,7 +416,13 @@ class ApiMain extends ApiBase {
                // Bug 63145: Rollback any open database transactions
                if ( !( $e instanceof UsageException ) ) {
                        // UsageExceptions are intentional, so don't rollback if that's the case
-                       MWExceptionHandler::rollbackMasterChangesAndLog( $e );
+                       try {
+                               MWExceptionHandler::rollbackMasterChangesAndLog( $e );
+                       } catch ( DBError $e2 ) {
+                               // Rollback threw an exception too. Log it, but don't interrupt
+                               // our regularly scheduled exception handling.
+                               MWExceptionHandler::logException( $e2 );
+                       }
                }
 
                // Allow extra cleanup and logging
@@ -447,8 +453,6 @@ class ApiMain extends ApiBase {
                // Reset and print just the error message
                ob_clean();
 
-               // If the error occurred during printing, do a printer->profileOut()
-               $this->mPrinter->safeProfileOut();
                $this->printResult( true );
        }
 
@@ -655,8 +659,24 @@ class ApiMain extends ApiBase {
                        $out->addVaryHeader( 'X-Forwarded-Proto' );
                }
 
+               // The logic should be:
+               // $this->mCacheControl['max-age'] is set?
+               //    Use it, the module knows better than our guess.
+               // !$this->mModule || $this->mModule->isWriteMode(), and mCacheMode is private?
+               //    Use 0 because we can guess caching is probably the wrong thing to do.
+               // Use $this->getParameter( 'maxage' ), which already defaults to 0.
+               $maxage = 0;
+               if ( isset( $this->mCacheControl['max-age'] ) ) {
+                       $maxage = $this->mCacheControl['max-age'];
+               } elseif ( ( $this->mModule && !$this->mModule->isWriteMode() ) ||
+                       $this->mCacheMode !== 'private'
+               ) {
+                       $maxage = $this->getParameter( 'maxage' );
+               }
+               $privateCache = 'private, must-revalidate, max-age=' . $maxage;
+
                if ( $this->mCacheMode == 'private' ) {
-                       $response->header( 'Cache-Control: private' );
+                       $response->header( "Cache-Control: $privateCache" );
                        return;
                }
 
@@ -668,14 +688,14 @@ class ApiMain extends ApiBase {
                                $response->header( $out->getXVO() );
                                if ( $out->haveCacheVaryCookies() ) {
                                        // Logged in, mark this request private
-                                       $response->header( 'Cache-Control: private' );
+                                       $response->header( "Cache-Control: $privateCache" );
                                        return;
                                }
                                // Logged out, send normal public headers below
                        } elseif ( session_id() != '' ) {
                                // Logged in or otherwise has session (e.g. anonymous users who have edited)
                                // Mark request private
-                               $response->header( 'Cache-Control: private' );
+                               $response->header( "Cache-Control: $privateCache" );
 
                                return;
                        } // else no XVO and anonymous, send public headers below
@@ -699,7 +719,7 @@ class ApiMain extends ApiBase {
                        // Public cache not requested
                        // Sending a Vary header in this case is harmless, and protects us
                        // against conditional calls of setCacheMaxAge().
-                       $response->header( 'Cache-Control: private' );
+                       $response->header( "Cache-Control: $privateCache" );
 
                        return;
                }
@@ -752,7 +772,6 @@ class ApiMain extends ApiBase {
                // Printer may not be able to handle errors. This is particularly
                // likely if the module returns something for getCustomPrinter().
                if ( !$this->mPrinter->canPrintErrors() ) {
-                       $this->mPrinter->safeProfileOut();
                        $this->mPrinter = $this->createPrinterByName( self::API_DEFAULT_FORMAT );
                }
 
@@ -1021,10 +1040,8 @@ class ApiMain extends ApiBase {
                $this->checkAsserts( $params );
 
                // Execute
-               $module->profileIn();
                $module->execute();
                Hooks::run( 'APIAfterExecute', array( &$module ) );
-               $module->profileOut();
 
                $this->reportUnusedParams();
 
@@ -1175,13 +1192,10 @@ class ApiMain extends ApiBase {
 
                $this->getResult()->cleanUpUTF8();
                $printer = $this->mPrinter;
-               $printer->profileIn();
 
                $printer->initPrinter( false );
-
                $printer->execute();
                $printer->closePrinter();
-               $printer->profileOut();
        }
 
        /**
index e53e2b2..d462862 100644 (file)
@@ -115,11 +115,9 @@ class ApiPageSet extends ApiBase {
                $this->mAllowGenerator = ( $flags & ApiPageSet::DISABLE_GENERATORS ) == 0;
                $this->mDefaultNamespace = $defaultNamespace;
 
-               $this->profileIn();
                $this->mParams = $this->extractRequestParams();
                $this->mResolveRedirects = $this->mParams['redirects'];
                $this->mConvertTitles = $this->mParams['converttitles'];
-               $this->profileOut();
        }
 
        /**
@@ -143,17 +141,12 @@ class ApiPageSet extends ApiBase {
         *    relevant parameters as used
         */
        private function executeInternal( $isDryRun ) {
-               $this->profileIn();
-
                $generatorName = $this->mAllowGenerator ? $this->mParams['generator'] : null;
                if ( isset( $generatorName ) ) {
                        $dbSource = $this->mDbSource;
-                       $isQuery = $dbSource instanceof ApiQuery;
-                       if ( !$isQuery ) {
+                       if ( !$dbSource instanceof ApiQuery ) {
                                // If the parent container of this pageset is not ApiQuery, we must create it to run generator
                                $dbSource = $this->getMain()->getModuleManager()->getModule( 'query' );
-                               // Enable profiling for query module because it will be used for db sql profiling
-                               $dbSource->profileIn();
                        }
                        $generator = $dbSource->getModuleManager()->getModule( $generatorName, null, true );
                        if ( $generator === null ) {
@@ -174,9 +167,6 @@ class ApiPageSet extends ApiBase {
                        $tmpPageSet->executeInternal( $isDryRun );
 
                        // populate this pageset with the generator output
-                       $this->profileOut();
-                       $generator->profileIn();
-
                        if ( !$isDryRun ) {
                                $generator->executeGenerator( $this );
                                Hooks::run( 'APIQueryGeneratorAfterExecute', array( &$generator, &$this ) );
@@ -187,17 +177,10 @@ class ApiPageSet extends ApiBase {
                                        $main->getVal( $generator->encodeParamName( $paramName ) );
                                }
                        }
-                       $generator->profileOut();
-                       $this->profileIn();
 
                        if ( !$isDryRun ) {
                                $this->resolvePendingRedirects();
                        }
-
-                       if ( !$isQuery ) {
-                               // If this pageset is not part of the query, we called profileIn() above
-                               $dbSource->profileOut();
-                       }
                } else {
                        // Only one of the titles/pageids/revids is allowed at the same time
                        $dataSource = null;
@@ -241,7 +224,6 @@ class ApiPageSet extends ApiBase {
                                }
                        }
                }
-               $this->profileOut();
        }
 
        /**
@@ -678,9 +660,7 @@ class ApiPageSet extends ApiBase {
         * @param array $titles Array of Title objects
         */
        public function populateFromTitles( $titles ) {
-               $this->profileIn();
                $this->initFromTitles( $titles );
-               $this->profileOut();
        }
 
        /**
@@ -688,9 +668,7 @@ class ApiPageSet extends ApiBase {
         * @param array $pageIDs Array of page IDs
         */
        public function populateFromPageIDs( $pageIDs ) {
-               $this->profileIn();
                $this->initFromPageIds( $pageIDs );
-               $this->profileOut();
        }
 
        /**
@@ -703,9 +681,7 @@ class ApiPageSet extends ApiBase {
         * @param ResultWrapper $queryResult Query result object
         */
        public function populateFromQueryResult( $db, $queryResult ) {
-               $this->profileIn();
                $this->initFromQueryResult( $queryResult );
-               $this->profileOut();
        }
 
        /**
@@ -713,9 +689,7 @@ class ApiPageSet extends ApiBase {
         * @param array $revIDs Array of revision IDs
         */
        public function populateFromRevisionIDs( $revIDs ) {
-               $this->profileIn();
                $this->initFromRevIDs( $revIDs );
-               $this->profileOut();
        }
 
        /**
@@ -778,10 +752,8 @@ class ApiPageSet extends ApiBase {
                $set = $linkBatch->constructSet( 'page', $db );
 
                // Get pageIDs data from the `page` table
-               $this->profileDBIn();
                $res = $db->select( 'page', $this->getPageTableFields(), $set,
                        __METHOD__ );
-               $this->profileDBOut();
 
                // Hack: get the ns:titles stored in array(ns => array(titles)) format
                $this->initFromQueryResult( $res, $linkBatch->data, true ); // process Titles
@@ -812,10 +784,8 @@ class ApiPageSet extends ApiBase {
                        $db = $this->getDB();
 
                        // Get pageIDs data from the `page` table
-                       $this->profileDBIn();
                        $res = $db->select( 'page', $this->getPageTableFields(), $set,
                                __METHOD__ );
-                       $this->profileDBOut();
                }
 
                $this->initFromQueryResult( $res, $remaining, false ); // process PageIDs
@@ -921,7 +891,6 @@ class ApiPageSet extends ApiBase {
                        $where = array( 'rev_id' => $revids, 'rev_page = page_id' );
 
                        // Get pageIDs data from the `page` table
-                       $this->profileDBIn();
                        $res = $db->select( $tables, $fields, $where, __METHOD__ );
                        foreach ( $res as $row ) {
                                $revid = intval( $row->rev_id );
@@ -931,7 +900,6 @@ class ApiPageSet extends ApiBase {
                                $pageids[$pageid] = '';
                                unset( $remaining[$revid] );
                        }
-                       $this->profileDBOut();
                }
 
                $this->mMissingRevIDs = array_keys( $remaining );
@@ -948,7 +916,6 @@ class ApiPageSet extends ApiBase {
                        $fields = array( 'ar_rev_id', 'ar_namespace', 'ar_title' );
                        $where = array( 'ar_rev_id' => $this->mMissingRevIDs );
 
-                       $this->profileDBIn();
                        $res = $db->select( $tables, $fields, $where, __METHOD__ );
                        $titles = array();
                        foreach ( $res as $row ) {
@@ -956,7 +923,6 @@ class ApiPageSet extends ApiBase {
                                $titles[$revid] = Title::makeTitle( $row->ar_namespace, $row->ar_title );
                                unset( $remaining[$revid] );
                        }
-                       $this->profileDBOut();
 
                        $this->initFromTitles( $titles );
 
@@ -1012,9 +978,7 @@ class ApiPageSet extends ApiBase {
                                }
 
                                // Get pageIDs data from the `page` table
-                               $this->profileDBIn();
                                $res = $db->select( 'page', $pageFlds, $set, __METHOD__ );
-                               $this->profileDBOut();
 
                                // Hack: get the ns:titles stored in array(ns => array(titles)) format
                                $this->initFromQueryResult( $res, $linkBatch->data, true );
@@ -1033,7 +997,6 @@ class ApiPageSet extends ApiBase {
                $lb = new LinkBatch();
                $db = $this->getDB();
 
-               $this->profileDBIn();
                $res = $db->select(
                        'redirect',
                        array(
@@ -1045,7 +1008,6 @@ class ApiPageSet extends ApiBase {
                        ), array( 'rd_from' => array_keys( $this->mPendingRedirectIDs ) ),
                        __METHOD__
                );
-               $this->profileDBOut();
                foreach ( $res as $row ) {
                        $rdfrom = intval( $row->rd_from );
                        $from = $this->mPendingRedirectIDs[$rdfrom]->getPrefixedText();
index b74d528..f0a5daf 100644 (file)
@@ -156,7 +156,7 @@ class ApiParamInfo extends ApiBase {
                                if ( $joinLists ) {
                                        $ret = preg_replace( '!\s*</([oud]l)>\s*<\1>\s*!', "\n", $ret );
                                }
-                               $res[$key] = $ret;
+                               $res[$key] = Parser::stripOuterParagraph( $ret );
                                break;
 
                        case 'raw':
index 83d2cbc..b565dea 100644 (file)
@@ -70,6 +70,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" );
+                       }
                } else {
                        $this->section = false;
                }
@@ -85,6 +88,9 @@ class ApiParse extends ApiBase {
                $result = $this->getResult();
 
                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' );
+                       }
                        if ( !is_null( $oldid ) ) {
                                // Don't use the parser cache
                                $rev = Revision::newFromId( $oldid );
@@ -101,7 +107,10 @@ class ApiParse extends ApiBase {
                                $popts = $this->makeParserOptions( $pageObj, $params );
 
                                // If for some reason the "oldid" is actually the current revision, it may be cached
-                               if ( $rev->isCurrent() ) {
+                               // Deliberately comparing $pageObj->getLatest() with $rev->getId(), rather than
+                               // checking $rev->isCurrent(), because $pageObj is what actually ends up being used,
+                               // and if its ->getLatest() is outdated, $rev->isCurrent() won't tell us that.
+                               if ( $rev->getId() == $pageObj->getLatest() ) {
                                        // May get from/save to parser cache
                                        $p_result = $this->getParsedContent( $pageObj, $popts,
                                                $pageid, isset( $prop['wikitext'] ) );
@@ -203,7 +212,14 @@ class ApiParse extends ApiBase {
                        }
 
                        if ( $this->section !== false ) {
-                               $this->content = $this->getSectionContent( $this->content, $titleObj->getPrefixedText() );
+                               if ( $this->section === 'new' ) {
+                                       // Insert the section title above the content.
+                                       if ( !is_null( $params['sectiontitle'] ) && $params['sectiontitle'] !== '' ) {
+                                               $this->content = $this->content->addSectionHeader( $params['sectiontitle'] );
+                                       }
+                               } else {
+                                       $this->content = $this->getSectionContent( $this->content, $titleObj->getPrefixedText() );
+                               }
                        }
 
                        if ( $params['pst'] || $params['onlypst'] ) {
@@ -218,6 +234,13 @@ class ApiParse extends ApiBase {
                                        $result_array['wikitext'] = array();
                                        ApiResult::setContent( $result_array['wikitext'], $this->content->serialize( $format ) );
                                }
+                               if ( !is_null( $params['summary'] ) ||
+                                       ( !is_null( $params['sectiontitle'] ) && $this->section === 'new' )
+                               ) {
+                                       $result_array['parsedsummary'] = array();
+                                       ApiResult::setContent( $result_array['parsedsummary'], $this->formatSummary( $titleObj, $params ) );
+                               }
+
                                $result->addValue( null, $this->getModuleName(), $result_array );
 
                                return;
@@ -252,12 +275,11 @@ class ApiParse extends ApiBase {
                        ApiResult::setContent( $result_array['text'], $p_result->getText() );
                }
 
-               if ( !is_null( $params['summary'] ) ) {
+               if ( !is_null( $params['summary'] ) ||
+                       ( !is_null( $params['sectiontitle'] ) && $this->section === 'new' )
+               ) {
                        $result_array['parsedsummary'] = array();
-                       ApiResult::setContent(
-                               $result_array['parsedsummary'],
-                               Linker::formatComment( $params['summary'], $titleObj )
-                       );
+                       ApiResult::setContent( $result_array['parsedsummary'], $this->formatSummary( $titleObj, $params ) );
                }
 
                if ( isset( $prop['langlinks'] ) ) {
@@ -481,6 +503,30 @@ class ApiParse extends ApiBase {
                return $section;
        }
 
+       /**
+        * This mimicks the behavior of EditPage in formatting a summary
+        *
+        * @param Title $title of the page being parsed
+        * @param Array $params the API parameters of the request
+        * @return Content|bool
+        */
+       private function formatSummary( $title, $params ) {
+               global $wgParser;
+               $summary = !is_null( $params['summary'] ) ? $params['summary'] : '';
+               $sectionTitle = !is_null( $params['sectiontitle'] ) ? $params['sectiontitle'] : '';
+
+               if ( $this->section === 'new' && ( $sectionTitle === '' || $summary === '' ) ) {
+                       if( $sectionTitle !== '' ) {
+                               $summary = $params['sectiontitle'];
+                       }
+                       if ( $summary !== '' ) {
+                               $summary = wfMessage( 'newsectionsummary' )->rawParams( $wgParser->stripSectionName( $summary ) )
+                                       ->inContentLanguage()->text();
+                       }
+               }
+               return Linker::formatComment( $summary, $title, $this->section === 'new' );
+       }
+
        private function formatLangLinks( $links ) {
                $result = array();
                foreach ( $links as $link ) {
@@ -698,6 +744,9 @@ class ApiParse extends ApiBase {
                        'onlypst' => false,
                        'effectivelanglinks' => false,
                        'section' => null,
+                       'sectiontitle' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                       ),
                        'disablepp' => false,
                        'disableeditsection' => false,
                        'generatexml' => array(
index ae7d42b..4736cfb 100644 (file)
@@ -77,7 +77,7 @@ class ApiProtect extends ApiBase {
                                $this->dieUsageMsg( array( 'protect-invalidlevel', $p[1] ) );
                        }
 
-                       if ( in_array( $expiry[$i], array( 'infinite', 'indefinite', 'infinity', 'never' ) ) ) {
+                       if ( wfIsInfinity( $expiry[$i] ) ) {
                                $expiryarray[$p[0]] = $db->getInfinity();
                        } else {
                                $exp = strtotime( $expiry[$i] );
index 514d559..ac89419 100644 (file)
@@ -143,6 +143,8 @@ class ApiQuery extends ApiBase {
                $this->mModuleMgr->addModules( self::$QueryMetaModules, 'meta' );
                $this->mModuleMgr->addModules( $config->get( 'APIMetaModules' ), 'meta' );
 
+               Hooks::run( 'ApiQuery::moduleManager', array( $this->mModuleMgr ) );
+
                // Create PageSet that will process titles/pageids/revids/generator
                $this->mPageSet = new ApiPageSet( $this );
        }
@@ -167,9 +169,7 @@ class ApiQuery extends ApiBase {
         */
        public function getNamedDB( $name, $db, $groups ) {
                if ( !array_key_exists( $name, $this->mNamedDB ) ) {
-                       $this->profileDBIn();
                        $this->mNamedDB[$name] = wfGetDB( $db, $groups );
-                       $this->profileDBOut();
                }
 
                return $this->mNamedDB[$name];
@@ -249,16 +249,6 @@ class ApiQuery extends ApiBase {
        public function execute() {
                $this->mParams = $this->extractRequestParams();
 
-               if ( $this->mParams['continue'] === null && !$this->mParams['rawcontinue'] ) {
-                       $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.'
-                       );
-               }
-
                // Instantiate requested modules
                $allModules = array();
                $this->instantiateModules( $allModules, 'prop' );
@@ -293,10 +283,8 @@ class ApiQuery extends ApiBase {
                        $params = $module->extractRequestParams();
                        $cacheMode = $this->mergeCacheMode(
                                $cacheMode, $module->getCacheMode( $params ) );
-                       $module->profileIn();
                        $module->execute();
                        Hooks::run( 'APIQueryAfterExecute', array( &$module ) );
-                       $module->profileOut();
                }
 
                // Set the cache mode
@@ -306,6 +294,18 @@ class ApiQuery extends ApiBase {
                $this->getResult()->endContinuation(
                        $this->mParams['continue'] === null ? 'raw' : 'standard'
                );
+
+               if ( $this->mParams['continue'] === null && !$this->mParams['rawcontinue'] &&
+                       array_key_exists( 'query-continue', $this->getResult()->getData() )
+               ) {
+                       $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.'
+                       );
+               }
        }
 
        /**
index 998cc91..6c9d999 100644 (file)
@@ -123,6 +123,7 @@ abstract class ApiQueryBase extends ApiBase {
         */
        public function selectNamedDB( $name, $db, $groups ) {
                $this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups );
+               return $this->mDb;
        }
 
        /**
@@ -372,12 +373,7 @@ abstract class ApiQueryBase extends ApiBase {
                        isset( $extraQuery['join_conds'] ) ? (array)$extraQuery['join_conds'] : array()
                );
 
-               // getDB has its own profileDBIn/Out calls
-               $db = $this->getDB();
-
-               $this->profileDBIn();
-               $res = $db->select( $tables, $fields, $where, $method, $options, $join_conds );
-               $this->profileDBOut();
+               $res = $this->getDB()->select( $tables, $fields, $where, $method, $options, $join_conds );
 
                return $res;
        }
@@ -513,7 +509,8 @@ abstract class ApiQueryBase extends ApiBase {
         */
        public function titlePartToKey( $titlePart, $namespace = NS_MAIN ) {
                $t = Title::makeTitleSafe( $namespace, $titlePart . 'x' );
-               if ( !$t ) {
+               if ( !$t || $t->hasFragment() ) {
+                       // Invalid title (e.g. bad chars) or contained a '#'.
                        $this->dieUsageMsg( array( 'invalidtitle', $titlePart ) );
                }
                if ( $namespace != $t->getNamespace() || $t->isExternal() ) {
@@ -589,7 +586,6 @@ abstract class ApiQueryBase extends ApiBase {
        protected function checkRowCount() {
                wfDeprecated( __METHOD__, '1.24' );
                $db = $this->getDB();
-               $this->profileDBIn();
                $rowcount = $db->estimateRowCount(
                        $this->tables,
                        $this->fields,
@@ -597,7 +593,6 @@ abstract class ApiQueryBase extends ApiBase {
                        __METHOD__,
                        $this->options
                );
-               $this->profileDBOut();
 
                if ( $rowcount > $this->getConfig()->get( 'APIMaxDBRows' ) ) {
                        return false;
index b7779a7..f6bde41 100644 (file)
@@ -57,12 +57,11 @@ class ApiQueryBlocks extends ApiQueryBase {
                $result = $this->getResult();
 
                $this->addTables( 'ipblocks' );
-               $this->addFields( array( 'ipb_auto', 'ipb_id' ) );
+               $this->addFields( array( 'ipb_auto', 'ipb_id', 'ipb_timestamp' ) );
 
                $this->addFieldsIf( array( 'ipb_address', 'ipb_user' ), $fld_user || $fld_userid );
                $this->addFieldsIf( 'ipb_by_text', $fld_by );
                $this->addFieldsIf( 'ipb_by', $fld_byid );
-               $this->addFieldsIf( 'ipb_timestamp', $fld_timestamp );
                $this->addFieldsIf( 'ipb_expiry', $fld_expiry );
                $this->addFieldsIf( 'ipb_reason', $fld_reason );
                $this->addFieldsIf( array( 'ipb_range_start', 'ipb_range_end' ), $fld_range );
index fcfddd6..6aa714e 100644 (file)
@@ -117,8 +117,6 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                        }
                }
 
-               $this->addOption( 'USE INDEX', array( 'categorylinks' => 'cl_from' ) );
-
                $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
                // Don't order by cl_from if it's constant in the WHERE clause
                if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
index f828255..f46fb34 100644 (file)
@@ -75,8 +75,9 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        );
                }
 
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        $fld_token = false;
                }
 
index 05a1a15..5af44ee 100644 (file)
@@ -48,6 +48,8 @@ class ApiQueryInfo extends ApiQueryBase {
 
        private $tokenFunctions;
 
+       private $countTestedActions = 0;
+
        public function __construct( ApiQuery $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'in' );
        }
@@ -88,8 +90,9 @@ class ApiQueryInfo extends ApiQueryBase {
                        return $this->tokenFunctions;
                }
 
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        return array();
                }
 
@@ -357,7 +360,7 @@ class ApiQueryInfo extends ApiQueryBase {
                /** @var $title Title */
                foreach ( $this->everything as $pageid => $title ) {
                        $pageInfo = $this->extractPageInfo( $pageid, $title );
-                       $fit = $result->addValue( array(
+                       $fit = $pageInfo !== null && $result->addValue( array(
                                'query',
                                'pages'
                        ), $pageid, $pageInfo );
@@ -374,7 +377,7 @@ class ApiQueryInfo extends ApiQueryBase {
         * Get a result array with information about a title
         * @param int $pageid Page ID (negative for missing titles)
         * @param Title $title
-        * @return array
+        * @return array|null
         */
        private function extractPageInfo( $pageid, $title ) {
                $pageInfo = array();
@@ -484,6 +487,22 @@ class ApiQueryInfo extends ApiQueryBase {
                        }
                }
 
+               if ( $this->params['testactions'] ) {
+                       $limit = $this->getMain()->canApiHighLimits() ? self::LIMIT_SML1 : self::LIMIT_SML2;
+                       if ( $this->countTestedActions >= $limit ) {
+                               return null; // force a continuation
+                       }
+
+                       $user = $this->getUser();
+                       $pageInfo['actions'] = array();
+                       foreach ( $this->params['testactions'] as $action ) {
+                               $this->countTestedActions++;
+                               if ( $title->userCan( $action, $user ) ) {
+                                       $pageInfo['actions'][$action] = '';
+                               }
+                       }
+               }
+
                return $pageInfo;
        }
 
@@ -825,6 +844,10 @@ class ApiQueryInfo extends ApiQueryBase {
                                ),
                                ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
+                       'testactions' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_ISMULTI => true,
+                       ),
                        'token' => array(
                                ApiBase::PARAM_DEPRECATED => true,
                                ApiBase::PARAM_DFLT => null,
index 3cdc53c..a9349b1 100644 (file)
@@ -310,14 +310,21 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                if ( $action == 'unblock' ) {
                                        break;
                                }
+                               if ( $legacy ) {
+                                       $durationKey = 0;
+                                       $flagsKey = 1;
+                               } else {
+                                       $durationKey = '5::duration';
+                                       $flagsKey = '6::flags';
+                               }
                                $vals2 = array();
-                               $vals2['duration'] = $params[0];
-                               $vals2['flags'] = isset( $params[1] ) ? $params[1] : '';
+                               $vals2['duration'] = $params[$durationKey];
+                               $vals2['flags'] = isset( $params[$flagsKey] ) ? $params[$flagsKey] : '';
 
                                // Indefinite blocks have no expiry time
-                               if ( SpecialBlock::parseExpiryInput( $params[0] ) !== wfGetDB( DB_SLAVE )->getInfinity() ) {
+                               if ( SpecialBlock::parseExpiryInput( $params[$durationKey] ) !== wfGetDB( DB_SLAVE )->getInfinity() ) {
                                        $vals2['expiry'] = wfTimestamp( TS_ISO_8601,
-                                               strtotime( $params[0], wfTimestamp( TS_UNIX, $ts ) ) );
+                                               strtotime( $params[$durationKey], wfTimestamp( TS_UNIX, $ts ) ) );
                                }
                                $vals[$type] = $vals2;
                                $params = null;
@@ -338,6 +345,36 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                        unset( $params['5::mergepoint'] );
                                }
                                break;
+                       case 'delete':
+                               if ( $action === 'event' || $action === 'revision' ) {
+                                       // replace the named parameter with numbered for backward compatibility
+                                       if ( $action === 'event' ) {
+                                               $idsKey = '4::ids';
+                                               $ofieldKey = '5::ofield';
+                                               $nfieldKey = '6::nfield';
+                                       } else {
+                                               if ( isset( $params['4::type'] ) ) {
+                                                       $params[] = $params['4::type'];
+                                                       unset( $params['4::type'] );
+                                               }
+                                               $idsKey = '5::ids';
+                                               $ofieldKey = '6::ofield';
+                                               $nfieldKey = '7::nfield';
+                                       }
+                                       if ( isset( $params[$idsKey] ) ) {
+                                               $params[] = implode( ',', $params[$idsKey] );
+                                               unset( $params[$idsKey] );
+                                       }
+                                       if ( isset( $params[$ofieldKey] ) ) {
+                                               $params[] = 'ofield=' . $params[$ofieldKey];
+                                               unset( $params[$ofieldKey] );
+                                       }
+                                       if ( isset( $params[$nfieldKey] ) ) {
+                                               $params[] = 'nfield=' . $params[$nfieldKey];
+                                               unset( $params[$nfieldKey] );
+                                       }
+                               }
+                               break;
                }
                if ( !is_null( $params ) ) {
                        $logParams = array();
index 069e30b..7a31c48 100644 (file)
@@ -48,6 +48,10 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                $searcher = new TitlePrefixSearch;
                $titles = $searcher->searchWithVariants( $search, $limit + 1, $namespaces, $offset );
                if ( $resultPageSet ) {
+                       if ( count( $titles ) > $limit ) {
+                               $this->setContinueEnumParameter( 'offset', $offset + $params['limit'] );
+                               array_pop( $titles );
+                       }
                        $resultPageSet->populateFromTitles( $titles );
                        foreach ( $titles as $index => $title ) {
                                $resultPageSet->setGeneratorData( $title, array( 'index' => $index + $offset + 1 ) );
index b6ef604..aa22264 100644 (file)
@@ -56,8 +56,9 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        return $this->tokenFunctions;
                }
 
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        return array();
                }
 
@@ -534,14 +535,15 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                $vals['logid'] = intval( $row->rc_logid );
                                $vals['logtype'] = $row->rc_log_type;
                                $vals['logaction'] = $row->rc_log_action;
-                               $logEntry = DatabaseLogEntry::newFromRow( (array)$row );
+                               $logEntry = DatabaseLogEntry::newFromRow( $row );
                                ApiQueryLogEvents::addLogParams(
                                        $this->getResult(),
                                        $vals,
                                        $logEntry->getParameters(),
                                        $logEntry->getType(),
                                        $logEntry->getSubtype(),
-                                       $logEntry->getTimestamp()
+                                       $logEntry->getTimestamp(),
+                                       $logEntry->isLegacy()
                                );
                        }
                }
@@ -688,6 +690,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                        'type' => array(
+                               ApiBase::PARAM_DFLT => 'edit|new|log',
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'edit',
index 7092fc4..552ca3b 100644 (file)
@@ -53,8 +53,9 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                        return $this->tokenFunctions;
                }
 
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        return array();
                }
 
index 5ac1036..d4f7e6a 100644 (file)
@@ -674,8 +674,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
        protected function appendRightsInfo( $property ) {
                $config = $this->getConfig();
-               $title = Title::newFromText( $config->get( 'RightsPage' ) );
-               $url = $title ? wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ) : $config->get( 'RightsUrl' );
+               $rightsPage = $config->get( 'RightsPage' );
+               if ( is_string( $rightsPage ) ) {
+                       $title = Title::newFromText( $rightsPage );
+                       $url = wfExpandUrl( $title, PROTO_CURRENT );
+               } else {
+                       $title = false;
+                       $url = $config->get( 'RightsUrl' );
+               }
                $text = $config->get( 'RightsText' );
                if ( !$text && $title ) {
                        $text = $title->getPrefixedText();
index 59fe8ad..342e367 100644 (file)
@@ -62,8 +62,6 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                                $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), $modulePrefix );
                        }
                // @todo Update exception handling here to understand current getFile exceptions
-               } catch ( UploadStashNotAvailableException $e ) {
-                       $this->dieUsage( "Session not available: " . $e->getMessage(), "nosession" );
                } catch ( UploadStashFileNotFoundException $e ) {
                        $this->dieUsage( "File not found: " . $e->getMessage(), "invalidsessiondata" );
                } catch ( UploadStashBadPathException $e ) {
index 2e107ac..f8eee8d 100644 (file)
@@ -37,8 +37,8 @@ class ApiQueryTokens extends ApiQueryBase {
                $params = $this->extractRequestParams();
                $res = array();
 
-               if ( $this->getMain()->getRequest()->getVal( 'callback' ) !== null ) {
-                       $this->setWarning( 'Tokens may not be obtained when using a callback' );
+               if ( $this->lacksSameOriginSecurity() ) {
+                       $this->setWarning( 'Tokens may not be obtained when the same-origin policy is not applied' );
                        return;
                }
 
index 7fc0ba8..1e3a432 100644 (file)
@@ -115,7 +115,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
                        );
                }
                if ( isset( $this->prop['preferencestoken'] ) &&
-                       is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) &&
+                       !$this->lacksSameOriginSecurity() &&
                        $user->isAllowed( 'editmyoptions' )
                ) {
                        $vals['preferencestoken'] = $user->getEditToken( '', $this->getMain()->getRequest() );
index b7f2f9a..52636cc 100644 (file)
@@ -67,8 +67,9 @@ class ApiQueryUsers extends ApiQueryBase {
                        return $this->tokenFunctions;
                }
 
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        return array();
                }
 
index 6e60fe4..3857a08 100644 (file)
@@ -412,14 +412,15 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                $vals['logid'] = intval( $row->rc_logid );
                                $vals['logtype'] = $row->rc_log_type;
                                $vals['logaction'] = $row->rc_log_action;
-                               $logEntry = DatabaseLogEntry::newFromRow( (array)$row );
+                               $logEntry = DatabaseLogEntry::newFromRow( $row );
                                ApiQueryLogEvents::addLogParams(
                                        $this->getResult(),
                                        $vals,
                                        $logEntry->getParameters(),
                                        $logEntry->getType(),
                                        $logEntry->getSubtype(),
-                                       $logEntry->getTimestamp()
+                                       $logEntry->getTimestamp(),
+                                       $logEntry->isLegacy()
                                );
                        }
                }
@@ -499,6 +500,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                )
                        ),
                        'type' => array(
+                               ApiBase::PARAM_DFLT => 'edit|new|log',
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'edit',
index 5d37e20..dec64cc 100644 (file)
@@ -73,7 +73,8 @@ class ApiSetNotificationTimestamp extends ApiBase {
                        }
                        $title = reset( $pageSet->getGoodTitles() );
                        if ( $title ) {
-                               $timestamp = Revision::getTimestampFromId( $title, $params['torevid'] );
+                               $timestamp = Revision::getTimestampFromId(
+                                       $title, $params['torevid'], Revision::READ_LATEST );
                                if ( $timestamp ) {
                                        $timestamp = $dbw->timestamp( $timestamp );
                                } else {
@@ -86,7 +87,8 @@ class ApiSetNotificationTimestamp extends ApiBase {
                        }
                        $title = reset( $pageSet->getGoodTitles() );
                        if ( $title ) {
-                               $revid = $title->getNextRevisionID( $params['newerthanrevid'] );
+                               $revid = $title->getNextRevisionID(
+                                       $params['newerthanrevid'], Title::GAID_FOR_UPDATE );
                                if ( $revid ) {
                                        $timestamp = $dbw->timestamp( Revision::getTimestampFromId( $title, $revid ) );
                                } else {
index 09489e4..c4b717c 100644 (file)
  * @since 1.25
  */
 class ApiStashEdit extends ApiBase {
+       const ERROR_NONE = 'stashed';
+       const ERROR_PARSE = 'error_parse';
+       const ERROR_CACHE = 'error_cache';
+       const ERROR_UNCACHEABLE = 'uncacheable';
+
        public function execute() {
                global $wgMemc;
 
@@ -105,41 +110,56 @@ class ApiStashEdit extends ApiBase {
                $key = self::getStashKey( $title, $content, $user );
                // De-duplicate requests on the same key
                if ( $user->pingLimiter( 'stashedit' ) ) {
-                       $editInfo = false;
                        $status = 'ratelimited';
                } elseif ( $wgMemc->lock( $key, 0, 30 ) ) {
-                       $format = $content->getDefaultFormat();
-                       $editInfo = $page->prepareContentForEdit( $content, null, $user, $format, false );
-                       $status = 'error'; // default
                        $unlocker = new ScopedCallback( function() use ( $key ) {
                                global $wgMemc;
                                $wgMemc->unlock( $key );
                        } );
+                       $status = self::parseAndStash( $page, $content, $user );
                } else {
-                       $editInfo = false;
                        $status = 'busy';
                }
 
+               $this->getResult()->addValue( null, $this->getModuleName(), array( 'status' => $status ) );
+       }
+
+       /**
+        * @param WikiPage $page
+        * @param Content $content
+        * @param User $user
+        * @return integer ApiStashEdit::ERROR_* constant
+        * @since 1.25
+        */
+       public static function parseAndStash( WikiPage $page, Content $content, User $user ) {
+               global $wgMemc;
+
+               $format = $content->getDefaultFormat();
+               $editInfo = $page->prepareContentForEdit( $content, null, $user, $format, false );
+
                if ( $editInfo && $editInfo->output ) {
+                       $key = self::getStashKey( $page->getTitle(), $content, $user );
+
                        list( $stashInfo, $ttl ) = self::buildStashValue(
                                $editInfo->pstContent, $editInfo->output, $editInfo->timestamp
                        );
+
                        if ( $stashInfo ) {
                                $ok = $wgMemc->set( $key, $stashInfo, $ttl );
                                if ( $ok ) {
-                                       $status = 'stashed';
                                        wfDebugLog( 'StashEdit', "Cached parser output for key '$key'." );
+                                       return self::ERROR_NONE;
                                } else {
-                                       $status = 'error';
                                        wfDebugLog( 'StashEdit', "Failed to cache parser output for key '$key'." );
+                                       return self::ERROR_CACHE;
                                }
                        } else {
-                               $status = 'uncacheable';
                                wfDebugLog( 'StashEdit', "Uncacheable parser output for key '$key'." );
+                               return self::ERROR_UNCACHEABLE;
                        }
                }
 
-               $this->getResult()->addValue( null, $this->getModuleName(), array( 'status' => $status ) );
+               return self::ERROR_PARSE;
        }
 
        /**
@@ -334,11 +354,7 @@ class ApiStashEdit extends ApiBase {
                $since = time() - wfTimestamp( TS_UNIX, $parserOutput->getTimestamp() );
                $ttl = min( $parserOutput->getCacheExpiry() - $since, 5 * 60 );
 
-               // Note: ParserOutput with that contains secondary data update callbacks can not be
-               // stashed, since the callbacks are not serializable (see ParserOutput::__sleep).
-               $hasCustomDataUpdates = $parserOutput->hasCustomDataUpdates();
-
-               if ( $ttl > 0 && !$parserOutput->getFlag( 'vary-revision' ) && !$hasCustomDataUpdates ) {
+               if ( $ttl > 0 && !$parserOutput->getFlag( 'vary-revision' ) ) {
                        // Only store what is actually needed
                        $stashInfo = (object)array(
                                'pstContent' => $pstContent,
index 073495c..9eb4020 100644 (file)
@@ -54,8 +54,9 @@ class ApiTokens extends ApiBase {
        }
 
        private function getTokenTypes() {
-               // If we're in JSON callback mode, no tokens can be obtained
-               if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+               // If we're in a mode that breaks the same-origin policy, no tokens can
+               // be obtained
+               if ( $this->lacksSameOriginSecurity() ) {
                        return array();
                }
 
index 62d8882..78a4971 100644 (file)
@@ -218,7 +218,11 @@ class ApiUpload extends ApiBase {
                        $status = $this->mUpload->addChunk(
                                $chunkPath, $chunkSize, $this->mParams['offset'] );
                        if ( !$status->isGood() ) {
-                               $this->dieUsage( $status->getWikiText(), 'stashfailed' );
+                               $extradata = array(
+                                       'offset' => $this->mUpload->getOffset(),
+                               );
+
+                               $this->dieUsage( $status->getWikiText(), 'stashfailed', 0, $extradata );
 
                                return array();
                        }
index 1ef9a79..7aa1730 100644 (file)
@@ -1,15 +1,43 @@
 {
        "@metadata": {
                "authors": [
-                       "Toniher"
+                       "Toniher",
+                       "Macofe",
+                       "Xavier Dengra"
                ]
        },
        "apihelp-main-param-format": "El format de la sortida.",
        "apihelp-block-description": "Bloca un usuari.",
+       "apihelp-block-param-reason": "Raó del blocatge.",
        "apihelp-block-param-nocreate": "Evita la creació de comptes.",
+       "apihelp-createaccount-description": "Creeu un nou compte d'usuari.",
        "apihelp-createaccount-param-name": "Nom d'usuari.",
        "apihelp-createaccount-param-password": "Contrasenya (ignorada si es defineix <var>$1mailpassword</var>)",
+       "apihelp-createaccount-param-email": "Adreça electrònica de l'usuari (opcional).",
+       "apihelp-createaccount-param-realname": "Nom real de l'usuari (opcional).",
        "apihelp-delete-description": "Suprimeix una pàgina.",
+       "apihelp-disabled-description": "Aquest mòdul ha estat desactivat.",
        "apihelp-edit-description": "Crea i edita pàgines.",
-       "apihelp-edit-param-text": "Contingut de la pàgina."
+       "apihelp-edit-param-text": "Contingut de la pàgina.",
+       "apihelp-edit-param-minor": "Edició menor.",
+       "apihelp-edit-param-createonly": "No editeu aquesta pàgina si ja existeix.",
+       "apihelp-edit-example-edit": "Editeu una pàgina.",
+       "apihelp-emailuser-description": "Envieu un correu electrònic a un usuari.",
+       "apihelp-emailuser-param-target": "Usuari a qui enviar el correu.",
+       "apihelp-emailuser-param-text": "Cos del correu.",
+       "apihelp-emailuser-param-ccme": "Envia'm una còpia d'aquest correu electrònic.",
+       "apihelp-expandtemplates-param-title": "Títol de la pàgina.",
+       "apihelp-feedcontributions-param-deletedonly": "Mostra només les contribucions esborrades.",
+       "apihelp-feedrecentchanges-param-hideminor": "Amaga les edicions menors.",
+       "apihelp-feedrecentchanges-param-hidebots": "Amaga les edicions de bots.",
+       "apihelp-feedrecentchanges-param-hideanons": "Amaga les edicions anònimes.",
+       "apihelp-feedrecentchanges-param-hideliu": "Amaga les edicions d'usuaris registrats.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Amaga les edicions patrullades.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Amaga les meves edicions.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filtra segons etiqueta.",
+       "apihelp-feedrecentchanges-param-target": "Mostra només els canvis de les pàgines enllaçades a aquesta pàgina.",
+       "apihelp-feedrecentchanges-example-simple": "Mostra els canvis recents.",
+       "apihelp-help-example-recursive": "Tota l'ajuda en una sola pàgina.",
+       "apihelp-import-param-rootpage": "Importa com a subpàgina d'aquesta pàgina.",
+       "apihelp-login-example-login": "Inicia sessió."
 }
index f3e3fcd..059eb82 100644 (file)
@@ -4,33 +4,34 @@
                        "Mormegil",
                        "YjM",
                        "Juandev",
-                       "Aktron"
+                       "Aktron",
+                       "Cvanca"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/API:Main_page Dokumentace]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/API:FAQ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete na stránce https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Dokumentace]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:API:Errors_and_warnings|v dokumentaci]].",
        "apihelp-main-param-action": "Jaká akce se má provést.",
        "apihelp-main-param-format": "Formát výstupu.",
-       "apihelp-main-param-maxlag": "Maximální zpoždění lze použít, když je MediaWiki nainstalováno na cluster s replikovanou databází. Abyste se vyhnuli zhoršování už tak špatného replikačního zpoždění, můžete tímto parametrem nechat klienta čekat, dokud replikační zpoždění neklesne pod uvedenou hodnotu. V případě příliš vysokého zpoždění se vrátí chybový kód „maxlag“ s hlášením typu „Waiting for $host: $lag seconds lagged“.<br />Více informací najdete v [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Maxlag_parameter příručce].",
+       "apihelp-main-param-maxlag": "Maximální zpoždění lze použít, když je MediaWiki nainstalováno na cluster s replikovanou databází. Abyste se vyhnuli zhoršování už tak špatného replikačního zpoždění, můžete tímto parametrem nechat klienta čekat, dokud replikační zpoždění neklesne pod uvedenou hodnotu. V případě příliš vysokého zpoždění se vrátí chybový kód „<samp>maxlag</samp>“ s hlášením typu „<samp>Waiting for $host: $lag seconds lagged</samp>“.<br />Více informací najdete v [[mw:Manual:Maxlag_parameter|příručce]].",
        "apihelp-main-param-smaxage": "Nastaví hlavičku <code>s-maxage</code> na uvedený počet sekund. Chyby se nekešují nikdy.",
        "apihelp-main-param-maxage": "Nastaví hlavičku <code>max-age</code> na uvedený počet sekund. Chyby se nekešují nikdy.",
-       "apihelp-main-param-assert": "Ověřit, že je uživatel přihlášen, pokud je nastaveno na „user“, nebo že má uživatelské oprávnění bot, pokud je nastaveno na „bot“.",
+       "apihelp-main-param-assert": "Pokud je nastaveno na „<kbd>user</kbd>“, ověří, že je uživatel přihlášen, pokud je nastaveno na „<kbd>bot</kbd>“, ověří, že má oprávnění „bot“.",
        "apihelp-main-param-requestid": "Libovolná zde uvedená hodnota bude zahrnuta v odpovědi. Lze použít pro rozlišení požadavků.",
        "apihelp-main-param-servedby": "Zahrnout do odpovědi název hostitele, který požadavek obsloužil.",
        "apihelp-main-param-curtimestamp": "Zahrnout do odpovědi aktuální časové razítko.",
        "apihelp-main-param-origin": "Pokud k API přistupujete pomocí mezidoménového AJAXového požadavku (CORS), nastavte tento parametr na doménu původu. Musí být součástí všech předběžných požadavků, takže musí být součástí URI požadavku (nikoli těla POSTu). Hodnota musí přesně odpovídat jednomu z původů v hlavičce Origin:, takže musí být nastavena na něco jako http://en.wikipedia.org nebo https://meta.wikimedia.org. Pokud parametr neodpovídá hlavičce Origin:, bude vrácena odpověď 403. Pokud parametr odpovídá hlavičce Origin: a tento původ je na bílé listině, bude nastavena hlavička Access-Control-Allow-Origin.",
-       "apihelp-main-param-uselang": "Jazyk, který se má použít pro překlad hlášení. Seznam kódů lze načíst z [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] se siprop=languages nebo uveďte „user“ pro použití předvoleného jazyka aktuálního uživatele či „content“ pro použití jazyka obsahu této wiki.",
+       "apihelp-main-param-uselang": "Jazyk, který se má použít pro překlad hlášení. Seznam kódů lze načíst z <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> se <kbd>siprop=languages</kbd>, nebo zadejte „<kbd>user</kbd>“ pro použití předvoleného jazyka aktuálního uživatele či „<kbd>content</kbd>“ pro použití jazyka obsahu této wiki.",
        "apihelp-block-description": "Zablokovat uživatele.",
        "apihelp-block-param-user": "Uživatelské jméno, IP adresa nebo rozsah IP adres, které chcete zablokovat.",
        "apihelp-block-param-reason": "Důvod bloku.",
        "apihelp-block-param-anononly": "Zablokovat pouze anonymní uživatele (tj. zakázat editovat anonymně z této IP).",
        "apihelp-block-param-nocreate": "Nedovolit registraci nových uživatelů.",
-       "apihelp-block-param-noemail": "Zakázat uživateli posílat e-maily prostřednictvím wiki. (Vyžaduje oprávnění „blockemail“.)",
-       "apihelp-block-param-hidename": "Skrýt uživatelské jméno v knize zablokování. (Vyžaduje oprávnění „hideuser“.)",
+       "apihelp-block-param-noemail": "Zakázat uživateli posílat e-maily prostřednictvím wiki. (Vyžaduje oprávnění „<code>blockemail</code>“.)",
+       "apihelp-block-param-hidename": "Skrýt uživatelské jméno v knize zablokování. (Vyžaduje oprávnění <code>hideuser</code>.)",
        "apihelp-block-param-allowusertalk": "Povolit uživateli editovat svou vlastní diskusní stránku (závisí na <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Pokud již uživatel blokován je, přepsat současný blok.",
        "apihelp-block-param-watchuser": "Sledovat stránku uživatele nebo IP adresy a jejich diskuzní stránky.",
-       "apihelp-block-example-ip-simple": "Zablokovat IP 192.0.2.5 na tři dny s důvodem „First strike“",
-       "apihelp-block-example-user-complex": "Trvale zablokovat uživatele Vandal s odůvodněním „Vandalism“ a bránit vytváření nových účtů a e-mailování",
+       "apihelp-block-example-ip-simple": "Na tři dny zablokovat IP adresu <kbd>192.0.2.5</kbd> s odůvodněním <kbd>First strike</kbd>.",
+       "apihelp-block-example-user-complex": "Trvale zablokovat uživatele <kbd>Vandal</kbd> s odůvodněním <kbd>Vandalism</kbd> a zabránit vytváření nových účtů a odesílání e-mailů.",
        "apihelp-compare-description": "Vrátí rozdíl dvou stránek.\n\nVe „from“ a „to“ musíte zadat číslo revize, název stránky nebo ID stránky.",
        "apihelp-compare-param-fromtitle": "Název první stránky k porovnání.",
        "apihelp-compare-param-fromid": "ID první stránky k porovnání.",
        "apihelp-createaccount-description": "Vytvořit nový uživatelský účet.",
        "apihelp-createaccount-param-name": "Uživatelské jméno.",
        "apihelp-createaccount-param-password": "Heslo (ignorováno, pokud je nastaveno <var>$1mailpassword</var>).",
+       "apihelp-createaccount-param-domain": "Doména pro externí ověření (volitelné).",
        "apihelp-createaccount-param-email": "E-mailová adresa uživatele (nepovinné).",
        "apihelp-createaccount-param-realname": "Skutečné jméno uživatele (nepovinné).",
        "apihelp-createaccount-param-mailpassword": "Pokud je nastaveno na libovolnou hodnotu, zašle se náhodně vygenerované heslo na e-mail uživatele.",
+       "apihelp-createaccount-param-reason": "Případný důvod pro vytvoření účtu, který se zaznamená do logu.",
+       "apihelp-createaccount-param-language": "Kód jazyka, který se má uživateli nastavit jako výchozí (volitelné, výchozí je jazyk obsahu).",
+       "apihelp-createaccount-example-pass": "Vytvořit uživatele <kbd>testuser</kbd> s heslem <kbd>test123</kbd>.",
        "apihelp-createaccount-example-mail": "Vytvořit uživatele <kbd>testmailuser</kbd> a zaslat mu e-mail s náhodně vygenerovaným heslem.",
        "apihelp-delete-description": "Smazat stránku.",
+       "apihelp-delete-param-title": "Název stránky, která se má smazat. Není možné použít společně s <var>$1pageid</var>.",
+       "apihelp-delete-param-pageid": "ID stránky, která se má smazat. Není možné použít společně s <var>$1title</var>.",
+       "apihelp-delete-param-watch": "Přidat stránku na seznam sledovaných.",
+       "apihelp-delete-example-simple": "Smazat stránku <kbd>Main Page</kbd>.",
        "apihelp-disabled-description": "Tento modul byl deaktivován.",
        "apihelp-edit-description": "Vytvářet a upravovat stránky.",
        "apihelp-edit-param-sectiontitle": "Název nové sekce.",
        "apihelp-edit-param-notminor": "Nemalá editace.",
        "apihelp-edit-param-bot": "Označit tuto editaci jako editaci bota.",
        "apihelp-edit-param-createonly": "Needitovat stránku, pokud již existuje.",
-       "apihelp-edit-param-watch": "Přidat stránku na váš seznam sledovaných stránek.",
-       "apihelp-edit-param-unwatch": "Odstranit stránku z vašeho seznamu sledovaných stránek.",
+       "apihelp-edit-param-nocreate": "Pokud stránka neexistuje, vrátit chybu.",
+       "apihelp-edit-param-watch": "Přidat stránku na seznam sledovaných.",
+       "apihelp-edit-param-unwatch": "Odstranit stránku ze seznamu sledovaných.",
        "apihelp-edit-param-watchlist": "Bezpodmíněnečně přidat nebo odstranit stránku ze sledovaných stránek aktuálního uživatele, použít nastavení nebo neměnit sledování.",
        "apihelp-edit-param-redirect": "Automaticky opravit přesměrování.",
        "apihelp-edit-example-edit": "Upravit stránku.",
        "apihelp-emailuser-description": "Poslat uživateli e-mail.",
        "apihelp-emailuser-param-text": "Tělo zprávy.",
        "apihelp-emailuser-param-ccme": "Odeslat mi kopii této zprávy.",
+       "apihelp-expandtemplates-param-text": "Wikitext k převedení.",
+       "apihelp-feedcontributions-description": "Vrátí kanál příspěvků uživatele.",
+       "apihelp-feedcontributions-param-feedformat": "Formát kanálu.",
        "apihelp-feedcontributions-param-year": "Od roku (a dříve).",
        "apihelp-feedcontributions-param-month": "Od měsíce (a dříve)",
        "apihelp-feedcontributions-param-deletedonly": "Zobrazit pouze smazané příspěvky.",
+       "apihelp-feedrecentchanges-param-namespace": "Jmenný prostor, na který mají být výsledky omezeny.",
+       "apihelp-feedrecentchanges-param-from": "Zobrazit změny od",
        "apihelp-feedrecentchanges-param-hideminor": "Skrýt drobné změny.",
        "apihelp-feedrecentchanges-param-hidebots": "Skrýt úpravy provedené roboty.",
        "apihelp-feedrecentchanges-param-hideanons": "Skrýt změny provedené anonymními uživateli.",
        "apihelp-import-param-rootpage": "Importovat jako podstránku k této stránce.",
        "apihelp-login-param-name": "Uživatelské jméno.",
        "apihelp-login-param-password": "Heslo.",
+       "apihelp-login-param-domain": "Doména (volitelná)",
        "apihelp-login-example-login": "Přihlášení",
        "apihelp-logout-example-logout": "Odhlášení aktuálního uživatele.",
        "apihelp-move-description": "Přesunout stránku.",
        "apihelp-opensearch-example-te": "Najít stránky začínající na „<kbd>Te</kbd>“.",
        "apihelp-options-example-reset": "Vrátit všechna nastavení.",
        "apihelp-parse-example-page": "Parsovat stránku.",
+       "apihelp-parse-example-text": "Parsovat wikitext.",
        "apihelp-patrol-example-revid": "Prověřit revizi.",
        "apihelp-protect-description": "Změnit úroveň zamčení stránky.",
        "apihelp-protect-param-reason": "Důvod pro odemčení.",
        "apihelp-protect-example-protect": "Zamknout stránku.",
+       "apihelp-query+alldeletedrevisions-description": "Seznam všech smazaných revizí od konkrétního uživatele nebo v konkrétním jmenném prostoru.",
        "apihelp-query+alldeletedrevisions-example-user": "Seznam posledních 50 smazaných editací uživatele <kbd>Příklad<kbd>.",
        "apihelp-query+alldeletedrevisions-example-ns-main": "Seznam prvních 50 smazaných revizí v hlavním jmenném prostoru.",
        "apihelp-query+allfileusages-description": "Zobrazit seznam všech použití souboru, včetně neexistujících.",
+       "apihelp-query+allfileusages-example-unique": "Zobrazit seznam unikátních názvů souborů.",
        "apihelp-query+alllinks-example-generator": "Získat stránky obsahující odkazy.",
        "apihelp-query+allpages-param-filterredir": "Které stránky uvést na seznam.",
        "apihelp-query+allpages-param-minsize": "Omezit na stránky s určitým počtem bajtů.",
diff --git a/includes/api/i18n/cv.json b/includes/api/i18n/cv.json
new file mode 100644 (file)
index 0000000..88f222f
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Chuvash2014"
+               ]
+       },
+       "apihelp-login-example-login": "Кĕр"
+}
index 9658c81..9617204 100644 (file)
@@ -7,7 +7,9 @@
                        "Inkowik",
                        "Umherirrender",
                        "Giftpflanze",
-                       "Macofe"
+                       "Macofe",
+                       "Se4598",
+                       "Purodha"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokumentation]]\n* [[mw:API:FAQ/de|Häufig gestellte Fragen]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, allerdings ist die API in aktiver Entwicklung und kann sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste], um über Aktualisierungen informiert zu werden.\n\n<strong>Fehlerhafte Anfragen:</strong> Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ gesendet. Der Wert des Headers und der Fehlercode werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe [[mw:API:Errors_and_warnings|API: Fehler und Warnungen]].",
        "apihelp-block-param-allowusertalk": "Dem Benutzer erlauben, seine eigene Diskussionsseite zu bearbeiten (abhängig von <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Falls der Benutzer bereits gesperrt ist, die vorhandene Sperre überschreiben.",
        "apihelp-block-param-watchuser": "Benutzer- und Diskussionsseiten des Benutzers oder der IP-Adresse beobachten.",
-       "apihelp-block-example-ip-simple": "IP 192.0.2.5 für drei Tage mit der Begründung „First strike“ (erste Verwarnung) sperren",
-       "apihelp-block-example-user-complex": "Benutzer unbeschränkt sperren mit der Begründung „Vandalism“ (Vandalismus), Erstellung neuer Benutzerkonten sowie Versand von E-Mails verhindern.",
+       "apihelp-block-example-ip-simple": "IP <kbd>192.0.2.5</kbd> für drei Tage mit der Begründung „First strike“ (erste Verwarnung) sperren",
+       "apihelp-block-example-user-complex": "Benutzer <kbd>Vandal</kbd> unbeschränkt sperren mit der Begründung „Vandalism“ (Vandalismus), Erstellung neuer Benutzerkonten sowie Versand von E-Mails verhindern.",
+       "apihelp-checktoken-description": "Überprüft die Gültigkeit eines über <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> erhaltenen Tokens.",
+       "apihelp-checktoken-param-type": "Typ des Tokens, das getestet werden soll.",
+       "apihelp-checktoken-param-token": "Token, das getestet werden soll.",
+       "apihelp-checktoken-param-maxtokenage": "Maximal erlaubtes Alter des Tokens in Sekunden.",
+       "apihelp-checktoken-example-simple": "Überprüft die Gültigkeit des <kbd>csrf</kbd>-Tokens.",
        "apihelp-clearhasmsg-description": "Löschen des <code>hasmsg</code>-Flags („hat Nachrichten“-Flag) für den aktuellen Benutzer.",
        "apihelp-clearhasmsg-example-1": "<code>hasmsg</code>-Flags für den aktuellen Benutzer löschen",
-       "apihelp-compare-description": "Abrufen des Unterschieds zwischen 2 Seiten.\n\nDu musst eine Versionsnummer, einen Seitentitel oder eine Seitennummer für „from“ als auch „to“ angeben.",
+       "apihelp-compare-description": "Abrufen des Unterschieds zwischen zwei Seiten.\n\nDu musst eine Versionsnummer, einen Seitentitel oder eine Seitennummer für „from“ als auch „to“ angeben.",
        "apihelp-compare-param-fromtitle": "Erster zu vergleichender Titel.",
        "apihelp-compare-param-fromid": "Erste zu vergleichende Seitennummer.",
        "apihelp-compare-param-fromrev": "Erste zu vergleichende Version.",
        "apihelp-createaccount-example-pass": "Benutzer <kbd>testuser</kbd> mit dem Passwort <kbd>test123</kbd> erstellen.",
        "apihelp-createaccount-example-mail": "Benutzer <kbd>testmailuser</kbd> erstellen und zufällig generiertes Passwort per E-Mail verschicken.",
        "apihelp-delete-description": "Löschen einer Seite.",
-       "apihelp-delete-param-title": "Titel der Seite, die gelöscht werden soll. Kann nicht zusammen mit $1pageid verwendet werden.",
-       "apihelp-delete-param-pageid": "Seitennummer der Seite, die gelöscht werden soll. Kann nicht zusammen mit $1title verwendet werden.",
+       "apihelp-delete-param-title": "Titel der Seite, die gelöscht werden soll. Kann nicht zusammen mit <var>$1pageid</var> verwendet werden.",
+       "apihelp-delete-param-pageid": "Seitennummer der Seite, die gelöscht werden soll. Kann nicht zusammen mit <var>$1title</var> verwendet werden.",
        "apihelp-delete-param-reason": "Löschbegründung. Falls nicht festgelegt, wird eine automatisch generierte Begründung verwendet.",
        "apihelp-delete-param-watch": "Seite auf die Beobachtungsliste des aktuellen Benutzers setzen.",
-       "apihelp-delete-param-watchlist": "Seite bedingungslos zur Beobachtungsliste hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.",
+       "apihelp-delete-param-watchlist": "Seite zur Beobachtungsliste des aktuellen Benutzers hinzufügen oder von ihr entfernen, die Standardeinstellungen verwenden oder die Beobachtung nicht ändern.",
        "apihelp-delete-param-unwatch": "Seite von der Beobachtungsliste entfernen.",
        "apihelp-delete-param-oldimage": "Name des alten zu löschenden Bildes, wie von [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] angegeben.",
        "apihelp-delete-example-simple": "<kbd>Hauptseite</kbd> löschen.",
        "apihelp-delete-example-reason": "<kbd>Hauptseite</kbd> löschen mit der Begründung <kbd>Vorbereitung für Verschiebung</kbd>.",
        "apihelp-disabled-description": "Dieses Modul wurde deaktiviert.",
        "apihelp-edit-description": "Erstellen und Bearbeiten von Seiten.",
-       "apihelp-edit-param-title": "Titel der Seite, die du bearbeiten möchtest. Kann nicht zusammen mit $1pageid verwendet werden.",
-       "apihelp-edit-param-pageid": "Seitennummer der Seite, die du bearbeiten möchtest. Kann nicht zusammen mit $1title verwendet werden.",
+       "apihelp-edit-param-title": "Titel der Seite, die bearbeitet werden soll. Kann nicht zusammen mit <var>$1pageid</var> verwendet werden.",
+       "apihelp-edit-param-pageid": "Seitennummer der Seite, die bearbeitet werden soll. Kann nicht zusammen mit <var>$1title</var> verwendet werden.",
        "apihelp-edit-param-section": "Abschnittsnummer. <kbd>0</kbd> für die Einleitung, <kbd>new</kbd> für einen neuen Abschnitt.",
        "apihelp-edit-param-sectiontitle": "Die Überschrift für einen neuen Abschnitt.",
        "apihelp-edit-param-text": "Seiteninhalt.",
        "apihelp-edit-param-notminor": "Nicht-kleine Bearbeitung.",
        "apihelp-edit-param-bot": "Diese Bearbeitung als Bot-Bearbeitung markieren.",
        "apihelp-edit-param-basetimestamp": "Zeitstempel der Basisversion, wird verwendet zum Aufspüren von Bearbeitungskonflikten. Kann abgerufen werden durch [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
-       "apihelp-edit-param-starttimestamp": "Zeitstempel, an dem der Bearbeitungsprozess begonnen wurde, wird verwendet zum Aufspüren von Bearbeitungskonflikten. Ein geeigneter Wert kann abgerufen werden mithilfe [[Special:ApiHelp/main|curtimestamp]] beim Beginn des Bearbeitungsprozesses (z.&nbsp;B. beim Laden des Seiteninhalts zum Bearbeiten).",
+       "apihelp-edit-param-starttimestamp": "Zeitstempel, an dem der Bearbeitungsprozess begonnen wurde. Er wird zum Aufspüren von Bearbeitungskonflikten verwendet. Ein geeigneter Wert kann mithilfe von <var>[[Special:ApiHelp/main|curtimestamp]]</var> beim Beginn des Bearbeitungsprozesses (z.&nbsp;B. beim Laden des Seiteninhalts zum Bearbeiten) abgerufen werden.",
        "apihelp-edit-param-recreate": "Keinen Fehler zurückgeben, wenn die Seite in der Zwischenzeit gelöscht wurde.",
        "apihelp-edit-param-createonly": "Seite nicht bearbeiten, falls sie bereits vorhanden ist.",
        "apihelp-edit-param-nocreate": "Einen Fehler zurückgeben, falls die Seite nicht vorhanden ist.",
        "apihelp-edit-param-watch": "Seite der Beobachtungsliste hinzufügen.",
        "apihelp-edit-param-unwatch": "Seite von der Beobachtungsliste entfernen.",
-       "apihelp-edit-param-watchlist": "Die Seite bedingungslos zu deiner Beobachtungsliste hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.",
+       "apihelp-edit-param-watchlist": "Die Seite zur Beobachtungsliste des aktuellen Benutzers hinzufügen oder von ihr entfernen, die Standardeinstellungen verwenden oder die Beobachtung nicht ändern.",
        "apihelp-edit-param-md5": "Der MD5-Hash des Parameters $1text oder der aneinandergehängten Parameter $1prependtext und $1appendtext. Wenn angegeben, wird die Bearbeitung nicht ausgeführt, wenn der Hash nicht korrekt ist.",
        "apihelp-edit-param-prependtext": "Diesen Text an den Anfang der Seite setzen. Überschreibt $1text.",
        "apihelp-edit-param-appendtext": "Diesen Text an das Ende der Seite hinzufügen. Überschreibt $1text.\n\nVerwende statt dieses Parameters $1section=new zum Anhängen eines neuen Abschnitts.",
        "apihelp-expandtemplates-description": "Alle Vorlagen im Wikitext expandieren.",
        "apihelp-expandtemplates-param-title": "Titel der Seite.",
        "apihelp-expandtemplates-param-text": "Zu konvertierender Wikitext.",
+       "apihelp-expandtemplates-param-revid": "Versionsnummer, die für die Anzeige von <nowiki>{{REVISIONID}}</nowiki> und ähnlichen Variablen verwendet wird.",
        "apihelp-expandtemplates-param-includecomments": "Ob HTML-Kommentare in der Ausgabe eingeschlossen werden sollen.",
        "apihelp-expandtemplates-param-generatexml": "XML-Parserbaum erzeugen (ersetzt durch $1prop=parsetree).",
        "apihelp-expandtemplates-example-simple": "Den Wikitext <kbd><nowiki>{{Project:Spielwiese}}</nowiki></kbd> expandieren.",
        "apihelp-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-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-namespace": "Für Interwiki-Importe: importiere in diesen Namensraum.",
        "apihelp-import-param-rootpage": "Als Unterseite dieser Seite importieren.",
        "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-login-param-domain": "Domain (optional).",
        "apihelp-login-example-login": "Anmelden",
        "apihelp-logout-description": "Abmelden und alle Sitzungsdaten löschen.",
        "apihelp-logout-example-logout": "Meldet den aktuellen Benutzer ab",
+       "apihelp-managetags-description": "Ermöglicht Verwaltungsaufgaben zu Änderungsmarkierungen.",
+       "apihelp-managetags-param-reason": "optionale Begründung für das Erstellen, Löschen, Aktivieren oder Deaktivieren der Markierung.",
+       "apihelp-managetags-param-ignorewarnings": "Warnungen während des Vorgangs ignorieren.",
+       "apihelp-managetags-example-create": "Erstellt eine Markierung namens <kbd>spam</kbd> mit der Begründung <kbd>For use in edit patrolling</kbd> (für die Eingangskontrolle).",
+       "apihelp-managetags-example-delete": "Löscht die <kbd>vandlaism</kbd>-Markierung mit der Begründung <kbd>Misspelt</kbd>.",
+       "apihelp-managetags-example-activate": "Aktiviert eine Markierung namens <kbd>spam</kbd> mit der Begründung <kbd>For use in edit patrolling</kbd> (für die Eingangskontrolle).",
+       "apihelp-managetags-example-deactivate": "Deaktiviert eine Markierung namens <kbd>spam</kbd> mit der Begründung <kbd>No longer required</kbd> (nicht mehr benötigt).",
        "apihelp-move-description": "Eine Seite verschieben.",
-       "apihelp-move-param-from": "Titel der Seite, die du verschieben möchtest. Kann nicht zusammen mit $1fromid verwendet werden.",
-       "apihelp-move-param-fromid": "Seitenkennung der Seite, die du verschieben möchtest. Kann nicht zusammen mit $1from verwendet werden.",
+       "apihelp-move-param-from": "Titel der zu verschiebenden Seite. Kann nicht zusammen mit <var>$1fromid</var> verwendet werden.",
+       "apihelp-move-param-fromid": "Seitenkennung der zu verschiebenden Seite. Kann nicht zusammen mit <var>$1from</var> verwendet werden.",
        "apihelp-move-param-to": "Titel, zu dem die Seite umbenannt werden soll.",
-       "apihelp-move-param-reason": "Grund für die Verschiebung.",
+       "apihelp-move-param-reason": "Grund für die Umbenennung.",
        "apihelp-move-param-movetalk": "Verschiebt die Diskussionsseite, falls vorhanden.",
-       "apihelp-move-param-movesubpages": "Unterseiten verschieben, falls zutreffend.",
+       "apihelp-move-param-movesubpages": "Unterseiten verschieben, falls möglich.",
        "apihelp-move-param-noredirect": "Keine Weiterleitung erstellen.",
+       "apihelp-move-param-watch": "Die Seite und die entstandene Weiterleitung zur Beobachtungsliste hinzufügen.",
+       "apihelp-move-param-unwatch": "Die Seite und die entstandene Weiterleitung von der Beobachtungsliste entfernen.",
+       "apihelp-move-param-watchlist": "Die Seite in jedem Fall zur Beobachtungsliste hinzufügen oder davon entfernen, die Voreinstellungen dafür nutzen oder den Beobachtungsstatus nicht ändern.",
        "apihelp-move-param-ignorewarnings": "Alle Warnungen ignorieren.",
        "apihelp-move-example-move": "<kbd>Schlechter Titel</kbd> nach <kbd>Guter Titel</kbd> verschieben, ohne eine Weiterleitung zu erstellen.",
        "apihelp-opensearch-description": "Das Wiki mithilfe des OpenSearch-Protokolls durchsuchen.",
        "apihelp-options-example-complex": "Setzt alle Einstellungen zurück, dann <kbd>skin</kbd> und <kbd>nickname</kbd> festlegen.",
        "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-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-preview": "Im Vorschaumodus parsen.",
+       "apihelp-parse-param-disabletoc": "Inhaltsverzeichnis in der Ausgabe deaktivieren.",
        "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-parse-example-summary": "Parst eine Zusammenfassung.",
        "apihelp-patrol-description": "Kontrolliert eine Seite oder Version.",
+       "apihelp-patrol-param-rcid": "Letzte-Änderungen-Kennung, die kontrolliert werden soll.",
+       "apihelp-patrol-param-revid": "Versionskennung, die kontrolliert werden soll.",
+       "apihelp-patrol-example-rcid": "Kontrolliert eine kürzlich getätigte Änderung.",
        "apihelp-patrol-example-revid": "Kontrolliert eine Version",
        "apihelp-protect-description": "Ändert den Schutzstatus einer Seite.",
        "apihelp-protect-param-title": "Titel der Seite, die du (ent-)sperren möchtest. Kann nicht zusammen mit $1pageid verwendet werden.",
        "apihelp-protect-param-expiry": "Zeitstempel des Schutzablaufs. Wenn nur ein Zeitstempel übergeben wird, ist dieser für alle Seitenschutze gültig. Um eine unendliche Schutzdauer festzulegen, kannst du die Werte <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> oder <kbd>never</kbd> übergeben.",
        "apihelp-protect-param-reason": "Grund für den Seitenschutz oder dessen Aufhebung.",
        "apihelp-protect-param-cascade": "Aktiviert den Kaskadenschutz (alle eingebundenen Seiten werden ebenfalls geschützt). Wenn die übergebenen Schutzebenen keinen Kaskadenschutz unterstützen, wird dieser Parameter ignoriert.",
-       "apihelp-protect-param-watch": "Wenn vorhanden, fügt dieser Parameter die zu (ent-)sperrende Seite der Beobachtungsliste hinzu.",
-       "apihelp-protect-param-watchlist": "Die Seite bedingungslos zu deiner Beobachtungsliste hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.",
+       "apihelp-protect-param-watch": "Wenn vorhanden, fügt dieser Parameter die zu (ent-)sperrende Seite der Beobachtungsliste des aktuellen Benutzers hinzu.",
+       "apihelp-protect-param-watchlist": "Die Seite bedingungslos zur Beobachtungsliste des aktuellen Benutzers hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.",
        "apihelp-protect-example-protect": "Schützt eine Seite",
        "apihelp-protect-example-unprotect": "Eine Seite entsperren, indem die Einschränkungen durch den Schutz auf <kbd>all</kbd> gestellt werden.",
        "apihelp-protect-example-unprotect2": "Eine Seite entsperren, indem keine Einschränkungen übergeben werden",
+       "apihelp-purge-description": "Setzt den Cache der angegebenen Seiten zurück.\n\nFalls kein Benutzer angemeldet ist, müssen POST-Anfragen genutzt werden.",
        "apihelp-purge-param-forcelinkupdate": "Aktualisiert die Linktabellen.",
+       "apihelp-purge-param-forcerecursivelinkupdate": "Aktualisiert die Linktabelle der Seite und alle Linktabellen der Seiten, die sie als Vorlage einbinden.",
+       "apihelp-purge-example-simple": "Purgt die <kbd>Main Page</kbd> und die <kbd>API</kbd>-Seite.",
+       "apihelp-purge-example-generator": "Purgt die ersten 10 Seiten des Hauptnamensraums.",
+       "apihelp-query-description": "Bezieht Daten von und über MediaWiki.\n\nAlle Änderungsvorgänge müssen unter Angabe eines Tokens ablaufen, um Missbrauch durch böswillige Anwendungen vorzubeugen.",
+       "apihelp-query-param-prop": "Zurückzuliefernde Eigenschaften der abgefragten Seiten.",
        "apihelp-query-param-list": "Welche Listen abgerufen werden sollen.",
+       "apihelp-query-param-meta": "Zurückzugebende Metadaten.",
+       "apihelp-query-param-indexpageids": "Schließt einen zusätzlichen pageids-Abschnitt mit allen zurückgegebenen Seitenkennungen ein.",
+       "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-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+allcategories-param-from": "Kategorie, bei der die Auflistung beginnen soll.",
+       "apihelp-query+allcategories-param-to": "Kategorie, bei der die Auflistung enden soll.",
+       "apihelp-query+allcategories-param-prefix": "Listet alle Kategorien auf, die mit dem angegebenen Wert beginnen.",
+       "apihelp-query+allcategories-param-dir": "Sortierrichtung.",
+       "apihelp-query+allcategories-param-min": "Gibt nur Kategorien zurück, die mindestens die angegebene Anzahl an Einträgen haben.",
+       "apihelp-query+allcategories-param-max": "Gibt nur Kategorien zurück, die höchstens die angegebene Anzahl an Einträgen haben.",
        "apihelp-query+allcategories-param-limit": "Wie viele Kategorien zurückgegeben werden sollen.",
+       "apihelp-query+allcategories-param-prop": "Zurückzugebende Eigenschaften:\n;size: Ergänzt die Anzahl der Einträge in der Antwort.\n;hidden: Markiert über _&#95;HIDDENCAT_&#95; versteckte Kategorien.",
+       "apihelp-query+allcategories-example-size": "Listet Kategorien mit der Anzahl ihrer Einträge auf.",
+       "apihelp-query+allcategories-example-generator": "Bezieht Informationen über die Kategorieseite selbst für Kategorien, die mit <kbd>List</kbd> beginnen.",
+       "apihelp-query+alldeletedrevisions-description": "Bezieht alle gelöschten Versionen eines Benutzers oder eines Namensraumes.",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Darf nur mit <var>$3user</var> verwendet werden.",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Kann nicht zusammen mit <var>$3user</var> benutzt werden.",
+       "apihelp-query+alldeletedrevisions-param-start": "Der Zeitstempel, bei dem die Auflistung beginnen soll.",
+       "apihelp-query+alldeletedrevisions-param-end": "Der Zeitstempel, bei dem die Auflistung enden soll.",
+       "apihelp-query+alldeletedrevisions-param-from": "Seitentitel, bei dem die Auflistung beginnen soll.",
+       "apihelp-query+alldeletedrevisions-param-to": "Seitentitel, bei dem die Auflistung enden soll.",
+       "apihelp-query+alldeletedrevisions-param-prefix": "Listet alle Seitentitel auf, die mit dem angegebenen Wert beginnen.",
+       "apihelp-query+alldeletedrevisions-param-tag": "Listet nur Versionen auf, die die angegebene Markierung haben.",
        "apihelp-query+alldeletedrevisions-param-user": "Nur Versionen von diesem Benutzer auflisten.",
+       "apihelp-query+alldeletedrevisions-param-excludeuser": "Schließt Bearbeitungen des angegebenen Benutzers aus.",
        "apihelp-query+alldeletedrevisions-param-namespace": "Nur Seiten in diesem Namensraum auflisten.",
        "apihelp-query+allfileusages-param-limit": "Wie viele Gesamtobjekte zurückgegeben werden sollen.",
        "apihelp-query+allfileusages-example-unique": "Einheitliche Dateititel auflisten",
        "apihelp-query+allimages-param-sha1": "SHA1-Hash des Bildes. Überschreibt $1sha1base36.",
        "apihelp-query+allimages-param-sha1base36": "SHA1-Hash des Bildes (Basis 36; verwendet in MediaWiki).",
        "apihelp-query+allimages-param-limit": "Wie viele Gesamtbilder zurückgegeben werden sollen.",
+       "apihelp-query+allimages-example-recent": "Zeigt eine Liste von kürzlich hochgeladenen Dateien ähnlich zu [[Special:NewFiles]].",
        "apihelp-query+alllinks-example-unique": "Einheitlich verlinkte Titel auflisten",
        "apihelp-query+allpages-param-filterredir": "Welche Seiten aufgelistet werden sollen.",
-       "apihelp-query+allredirects-example-unique": "Einheitliche Zielseiten auflisten",
+       "apihelp-query+allredirects-example-unique": "Einzigartige Zielseiten auflisten.",
        "apihelp-query+allredirects-example-generator": "Seiten abrufen, die die Weiterleitungen enthalten",
        "apihelp-query+alltransclusions-param-namespace": "Der aufzulistende Namensraum.",
-       "apihelp-query+alltransclusions-example-unique": "Einheitlich eingebundene Titel auflisten",
+       "apihelp-query+alltransclusions-example-unique": "Einzigartige eingebundene Titel auflisten.",
        "apihelp-query+allusers-param-limit": "Wie viele Benutzernamen insgesamt zurückgegeben werden sollen.",
        "apihelp-query+allusers-example-Y": "Benutzer ab <kbd>Y</kbd> auflisten.",
        "apihelp-query+backlinks-description": "Alle Seiten finden, die auf die angegebene Seite verlinken.",
        "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-query+duplicatefiles-example-simple": "Sucht nach Duplikaten von [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+duplicatefiles-example-generated": "Sucht nach Duplikaten aller Dateien.",
+       "apihelp-query+embeddedin-param-namespace": "Der aufzulistende Namensraum.",
+       "apihelp-query+embeddedin-param-filterredir": "Wie Weiterleitungen behandelt werden sollen.",
+       "apihelp-query+embeddedin-param-limit": "Wie viele Seiten insgesamt zurückgegeben werden sollen.",
        "apihelp-query+extlinks-param-limit": "Wie viele Links zurückgegeben werden sollen.",
        "apihelp-query+exturlusage-param-limit": "Wie viele Seiten zurückgegeben werden sollen.",
+       "apihelp-query+filearchive-param-from": "Der Bildertitel, bei dem die Auflistung beginnen soll.",
+       "apihelp-query+filearchive-param-to": "Der Bildertitel, bei dem die Auflistung enden soll.",
+       "apihelp-query+filearchive-param-limit": "Wie viele Bilder insgesamt zurückgegeben werden sollen.",
        "apihelp-query+filearchive-example-simple": "Eine Liste aller gelöschten Dateien auflisten",
        "apihelp-query+imageinfo-param-limit": "Wie viele Dateiversionen pro Datei zurückgegeben werden sollen.",
        "apihelp-query+imageinfo-param-start": "Zeitstempel, von dem die Liste beginnen soll.",
        "apihelp-query+imageinfo-param-end": "Zeitstempel, an dem die Liste enden soll.",
        "apihelp-query+imageinfo-param-urlheight": "Ähnlich wie $1urlwidth.",
        "apihelp-query+info-description": "Ruft Basisinformationen über die Seite ab.",
+       "apihelp-query+info-param-testactions": "Überprüft, ob der aktuelle Benutzer gewisse Aktionen auf der Seite ausführen kann.",
        "apihelp-query+iwbacklinks-param-prefix": "Präfix für das Interwiki.",
        "apihelp-query+langbacklinks-param-limit": "Wie viele Gesamtseiten zurückgegeben werden sollen.",
        "apihelp-query+links-example-simple": "Links von der <kbd>Hauptseite</kbd> abrufen",
        "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, ergänzt &lt;xslt&gt; als Stylesheet. Dies sollte eine Wikiseite im MediaWiki-Namensraum sein, dessen Seitenname mit „.xsl“ endet.",
+       "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.",
        "apihelp-xmlfm-description": "Daten im XML-Format ausgeben (schöngedruckt in HTML).",
        "apihelp-yaml-description": "Daten im YAML-Format ausgeben.",
        "apihelp-yamlfm-description": "Daten im YAML-Format ausgeben (schöngedruckt in HTML).",
        "api-format-title": "MediaWiki-API-Ergebnis",
-       "api-format-prettyprint-header": "Du suchst nach der HTML-Repräsentation des $1-Formats. HTML ist zur Fehlerbehebung gut, aber unpassend für den Anwendungsgebrauch.\n\nGib den Formatparameter an, um das Ausgabeformat zu ändern. Um die Nicht-HTML-Repräsentation des $1-Formats anzusehen, lege format=$2 fest.\n\nSiehe die [https://www.mediawiki.org/wiki/API/de vollständige Dokumentation] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
+       "api-format-prettyprint-header": "Dies ist die HTML-Repräsentation des $1-Formats. HTML ist zur Fehlerbehebung gut, aber unpassend für den Anwendungsgebrauch.\n\nGib den Parameter <var>Format</var> an, um das Ausgabeformat zu ändern. Um die Nicht-HTML-Repräsentation des $1-Formats anzusehen, lege <kbd>format=$2</kbd> fest.\n\nSiehe die [[mw:API|vollständige Dokumentation]] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
        "api-orm-param-props": "Felder an die Anfrage.",
        "api-orm-param-limit": "Maximale Anzahl zurückgegebender Zeilen.",
        "api-pageset-param-titles": "Eine Liste der Titel, an denen gearbeitet werden soll.",
index 6779571..9d0663c 100644 (file)
        "apihelp-block-example-ip-simple": "Block IP address <kbd>192.0.2.5</kbd> for three days with reason <kbd>First strike</kbd>.",
        "apihelp-block-example-user-complex": "Block user <kbd>Vandal</kbd> indefinitely with reason <kbd>Vandalism</kbd>, and prevent new account creation and email sending.",
 
+       "apihelp-checktoken-description": "Check the validity of a token from <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Type of token being tested.",
+       "apihelp-checktoken-param-token": "Token to test.",
+       "apihelp-checktoken-param-maxtokenage": "Maximum allowed age of the token, in seconds.",
+       "apihelp-checktoken-example-simple": "Test the validity of a <kbd>csrf</kbd> token.",
+
        "apihelp-clearhasmsg-description": "Clears the <code>hasmsg</code> flag for the current user.",
        "apihelp-clearhasmsg-example-1": "Clear the <code>hasmsg</code> flag for the current user.",
 
        "apihelp-paraminfo-param-querymodules": "List of query module names (value of <var>prop</var>, <var>meta</var> or <var>list</var> parameter). Use <kbd>$1modules=query+foo</kbd> instead of <kbd>$1querymodules=foo</kbd>.",
        "apihelp-paraminfo-param-mainmodule": "Get information about the main (top-level) module as well. Use <kbd>$1modules=main</kbd> instead.",
        "apihelp-paraminfo-param-pagesetmodule": "Get information about the pageset module (providing titles= and friends) as well.",
-       "apihelp-paraminfo-param-formatmodules": "List of format module names (value of <var>format</var> parameter). Use <var>$1modules</kbd> instead.",
+       "apihelp-paraminfo-param-formatmodules": "List of format module names (value of <var>format</var> parameter). Use <var>$1modules</var> instead.",
        "apihelp-paraminfo-example-1": "Show info for <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-description": "Parses content and returns parser output.\n\nSee the various prop-modules of <kbd>[[Special:ApiHelp/query|action=query]]</kbd> to get information from the current version of a page.\n\nThere are several ways to specify the text to parse:\n# Specify a page or revision, using <var>$1page</var>, <var>$1pageid</var>, or <var>$1oldid</var>.\n# Specify content explicitly, using <var>$1text</var>, <var>$1title</var>, and <var>$1contentmodel</var>.\n# Specify only a summary to parse. <var>$1prop</var> should be given an empty value.",
        "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.",
+       "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-query+info-paramvalue-prop-readable": "Whether the user can read this page.",
        "apihelp-query+info-paramvalue-prop-preload": "Gives the text returned by EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "Gives the way the page title is actually displayed.",
+       "apihelp-query+info-param-testactions": "Test whether the current user can perform certain actions on the page.",
        "apihelp-query+info-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
        "apihelp-query+info-example-simple": "Get information about the page <kbd>Main Page</kbd>.",
        "apihelp-query+info-example-protection": "Get general and protection information about the page <kbd>Main Page</kbd>.",
index 1b17871..d097477 100644 (file)
        "apihelp-feedcontributions-param-feedformat": "El formato del canal.",
        "apihelp-feedcontributions-param-year": "A partir del año (y anteriores).",
        "apihelp-feedcontributions-param-month": "A partir del mes (y anteriores).",
+       "apihelp-feedcontributions-param-tagfilter": "Filtrar las contribuciones que tienen estas etiquetas.",
        "apihelp-feedcontributions-param-deletedonly": "Mostrar solo las contribuciones borradas.",
+       "apihelp-feedcontributions-param-toponly": "Mostrar solo ediciones que son últimas revisiones.",
+       "apihelp-feedcontributions-param-newonly": "Mostrar solo ediciones que son creaciones de páginas.",
+       "apihelp-feedcontributions-param-showsizediff": "Mostrar la diferencia de tamaño entre revisiones.",
+       "apihelp-feedcontributions-example-simple": "Devolver las contribuciones del usuario <kbd>Ejemplo</kbd>.",
+       "apihelp-feedrecentchanges-description": "Devuelve un canal de cambios recientes.",
        "apihelp-feedrecentchanges-param-feedformat": "El formato del canal.",
+       "apihelp-feedrecentchanges-param-invert": "Todos los espacios de nombres menos el que está seleccionado.",
+       "apihelp-feedrecentchanges-param-associated": "Incluir el espacio de nombres asociado (discusión o principal).",
+       "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados que devolver.",
        "apihelp-feedrecentchanges-param-from": "Mostrar los cambios realizados a partir de entonces.",
        "apihelp-feedrecentchanges-param-hideminor": "Ocultar cambios menores.",
        "apihelp-feedrecentchanges-param-hidebots": "Ocultar los cambios realizados por bots.",
        "apihelp-feedrecentchanges-example-30days": "Mostrar los cambios recientes limitados a 30 días",
        "apihelp-feedwatchlist-description": "Devuelve el canal de una lista de seguimiento.",
        "apihelp-feedwatchlist-param-feedformat": "El formato del canal.",
+       "apihelp-feedwatchlist-param-linktosections": "Enlazar directamente a las secciones cambiadas de ser posible.",
+       "apihelp-feedwatchlist-example-default": "Mostrar el canal de la lista de seguimiento.",
        "apihelp-feedwatchlist-example-all6hrs": "Mostrar todos los cambios en páginas vigiladas en las últimas 6 horas.",
        "apihelp-filerevert-description": "Revertir el archivo a una versión anterior.",
        "apihelp-filerevert-param-filename": "Nombre de archivo final, sin el prefijo Archivo:",
        "apihelp-filerevert-param-comment": "Comentario de carga.",
+       "apihelp-help-description": "Mostrar la ayuda para los módulos especificados.",
        "apihelp-help-example-main": "Ayuda del módulo principal",
        "apihelp-help-example-recursive": "Toda la ayuda en una página",
        "apihelp-help-example-help": "Ayuda del módulo de ayuda en sí",
        "apihelp-imagerotate-description": "Girar una o más imágenes.",
+       "apihelp-imagerotate-param-rotation": "Grados que rotar una imagen en sentido horario.",
+       "apihelp-imagerotate-example-simple": "Rotar <kbd>File:Ejemplo.png</kbd> <kbd>90</kbd> grados.",
+       "apihelp-imagerotate-example-generator": "Rotar todas las imágenes en la  <kbd>Categoría:Girar</kbd> <kbd>180</kbd> grados.",
        "apihelp-import-param-summary": "Resumen de importación.",
        "apihelp-import-param-xml": "Se cargó el archivo XML.",
        "apihelp-import-param-rootpage": "Importar como subpágina de esta página.",
        "apihelp-logout-description": "Salir y vaciar los datos de la sesión.",
        "apihelp-logout-example-logout": "Cerrar la sesión del usuario actual",
        "apihelp-managetags-param-reason": "Un motivo opcional para crear, eliminar, activar o desactivar la etiqueta.",
+       "apihelp-managetags-example-delete": "Eliminar la etiqueta <kbd>vandlaismo</kbd> con el motivo <kbd>mal deletreado</kbd>",
        "apihelp-move-description": "Mover una página.",
        "apihelp-move-param-reason": "Motivo del cambio de nombre.",
        "apihelp-move-param-movetalk": "Renombrar la página de discusión si existe.",
        "apihelp-patrol-example-revid": "Patrullar una revisión",
        "apihelp-protect-param-reason": "Motivo de la (des)protección.",
        "apihelp-protect-example-protect": "Proteger una página",
+       "apihelp-query+allcategories-description": "Enumerar todas las categorías.",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Solo puede usarse con <var>$3user</var>.",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "No puede ser utilizado con <var>$3user</var>.",
+       "apihelp-query+alldeletedrevisions-param-from": "Empezar a listar en este título.",
+       "apihelp-query+alldeletedrevisions-param-to": "Terminar de listar en este título.",
+       "apihelp-query+alldeletedrevisions-param-prefix": "Buscar todos los títulos de las páginas que comiencen con este valor.",
+       "apihelp-query+alldeletedrevisions-param-tag": "Listar solo las revisiones con esta etiqueta.",
+       "apihelp-query+alldeletedrevisions-param-user": "Listar solo las revisiones de este usuario.",
+       "apihelp-query+alldeletedrevisions-param-excludeuser": "No listar las revisiones de este usuario.",
+       "apihelp-query+alldeletedrevisions-param-namespace": "Listar solo las páginas en este espacio de nombres.",
+       "apihelp-query+alldeletedrevisions-example-user": "Listar las últimas 50 contribuciones borradas del usuario <kbd>Ejemplo<kbd>.",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "Listar las primeras 50 revisiones borradas en el espacio de nombres principal.",
+       "apihelp-query+allfileusages-description": "Listar todos los usos del archivo, incluyendo los que no existen.",
        "apihelp-query+allimages-param-sha1": "Suma SHA1 de la imagen. Invalida $1sha1base36.",
        "apihelp-query+allimages-param-sha1base36": "Suma SHA1 de la imagen en base 36 (usada en MediaWiki).",
        "apihelp-query+alllinks-example-unique-generator": "Obtiene todos los títulos enlazados, marcando los que falten.",
        "apihelp-query+blocks-example-simple": "Listar bloques.",
        "apihelp-query+categoryinfo-example-simple": "Obtener información acerca de <kbd>Category:Foo</kbd> y <kbd>Category:Bar</kbd>",
        "apihelp-query+categorymembers-example-generator": "Obtener información sobre las primeras 10 páginas de la <kbd>Categoría:Física</kbd>",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
        "apihelp-query+deletedrevs-example-mode3-talk": "Listar las primeras 50 páginas en el espacio de nombres {{ns:talk}} (modo 3).",
        "apihelp-query+duplicatefiles-example-simple": "Buscar duplicados de [[:File:Alber Einstein Head.jpg]].",
        "apihelp-query+duplicatefiles-example-generated": "Buscar duplicados en todos los ficheros.",
        "apihelp-query+watchlistraw-example-simple": "Listar las páginas de la lista de seguimiento del usuario actual.",
        "apihelp-unblock-example-user": "Desbloquear al usuario <kbd>Bob</kbd> con el motivo <kbd>Lo siento, Bob</kbd>",
        "apihelp-undelete-example-revisions": "Restaurar dos revisiones de la página <kbd>Portada</kbd>.",
+       "apihelp-upload-param-watch": "Vigilar la página.",
+       "apihelp-upload-param-ignorewarnings": "Ignorar las advertencias.",
        "apihelp-upload-example-url": "Subir desde una URL.",
+       "apihelp-userrights-param-user": "Nombre de usuario.",
+       "apihelp-userrights-param-add": "Agregar el usuario a estos grupos.",
+       "apihelp-userrights-param-remove": "Eliminar el usuario de estos grupos.",
+       "apihelp-userrights-param-reason": "Motivo del cambio.",
        "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>.",
+       "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.",
+       "api-help-flag-writerights": "Este módulo requiere permisos de escritura.",
+       "api-help-flag-mustbeposted": "Este módulo solo acepta solicitudes POST.",
+       "api-help-flag-generator": "Este módulo puede utilizarse como un generador.",
        "api-help-parameters": "{{PLURAL:$1|Parámetro|Parámetros}}:",
+       "api-help-param-deprecated": "En desuso.",
+       "api-help-param-required": "Este parámetro es obligatorio.",
+       "api-help-param-list": "{{PLURAL:$1|1=Un valor|2=Valores (separados por <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Debe estar vacío|Puede estar vacío, o $2}}",
        "api-help-param-multi-separate": "Separar los valores con <kbd>|</kbd>.",
-       "api-help-examples": "{{PLURAL:$1|Ejemplo|Ejemplos}}:"
+       "api-help-param-default": "Predeterminado: $1",
+       "api-help-param-default-empty": "Predeterminado: <span class=\"apihelp-empty\">(vacío)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(sin descripción)</span>",
+       "api-help-examples": "{{PLURAL:$1|Ejemplo|Ejemplos}}:",
+       "api-help-permissions": "{{PLURAL:$1|Permiso|Permisos}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Concedido a|Concedidos a}}: $2",
+       "api-credits-header": "Créditos",
+       "api-credits": "Desarrolladores de la API:\n* Roan Kattouw (desarrollador principal sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creador, desarrollador principal sep 2006–sep 2007)\n* Brad Jorsch (desarrollador principal 2013–actualidad)\n\nEnvía comentarios, sugerencias y preguntas a mediawiki-api@lists.wikimedia.org\no reporta un error en https://phabricator.wikimedia.org/."
 }
index 7a0c773..d792fd6 100644 (file)
@@ -6,7 +6,9 @@
                        "Fatemi127",
                        "Reza1615",
                        "KhabarNegar",
-                       "Sahehco"
+                       "Sahehco",
+                       "Signal89",
+                       "Mjbmr"
                ]
        },
        "apihelp-main-param-action": "کدام عملیات را انجام دهد.",
        "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": "از کاربر در برابر ارسال پست الکترونیکی از طریق ویکی جلوگیری شود. (نیازمند دسترسی «blockemail» است).",
-       "apihelp-block-param-hidename": "نام کاربری را از سیاههٔ بستن پنهان کن. (نیازمند دسترسی «hideuser» است).",
+       "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": "صفحه‌های کاربر و بحث کاربر نشانی آی‌پی یا کاربر را پی‌گیری کنید.",
-       "apihelp-block-example-ip-simple": "آی‌پی ۱۹۲.۰.۲.۵ را برای سه روز همراه دلیل «نخستین برخورد» ببندید",
+       "apihelp-block-example-ip-simple": "آی‌پی <kbd>۱۹۲٫۰٫۲٫۵</kbd> را برای سه روز همراه دلیل <kbd>برخورد اول</kbd> ببندید",
        "apihelp-clearhasmsg-description": "پرچم <code>hasmsg</code> را برای کاربر جاری پاک کن.",
        "apihelp-clearhasmsg-example-1": "پاک‌کردن پرچم <code>hasmsg</code> برای کاربر جاری",
        "apihelp-compare-description": "تفاوت بین ۲ صفحه را بیابید.\n\nشما باید یک شماره بازبینی، یک عنوان صفحه، یا یک شناسه صفحه برای هر دو «از» و «به» مشخص کنید.",
        "apihelp-createaccount-param-name": "نام کاربری.",
        "apihelp-createaccount-param-password": "رمز عبور (نادیده گرفته می‌شود اگر <var>$1mailpassword</var> تنظیم شده‌باشد).",
        "apihelp-createaccount-param-domain": "دامنه برای احراز هویت خارجی (اختیاری).",
-       "apihelp-createaccount-param-email": "راÛ\8cاÙ\86اÙ\85Ù\87 کاربر (اختیاری)",
+       "apihelp-createaccount-param-email": "آدرس Ø§Û\8cÙ\85Û\8cÙ\84 کاربر (اختیاری)",
        "apihelp-createaccount-param-realname": "نام واقعی کاربر (اختیاری).",
        "apihelp-createaccount-param-mailpassword": "اگر به هر مقداری تنظیم شود، یک رمز عبور تصادفی به کاربر ایمیل خواهد شد.",
        "apihelp-createaccount-param-reason": "دلیل اختیاری برای ایجاد حساب کاربری جهت قرارگرفتن در سیاهه‌ها.",
-       "apihelp-createaccount-example-pass": "ایجاد کاربر «testuser» همراه رمز عبور «test123»",
-       "apihelp-createaccount-example-mail": "ایجاد کاربر «testmailuser» و ایمیل‌کردن یک رمز عبور تصادفی ساخته‌شده",
+       "apihelp-createaccount-example-pass": "ایجاد کاربر <kbd>testuser</kbd> همراه رمز عبور <kbd>test123</kbd>",
+       "apihelp-createaccount-example-mail": "ایجاد کاربر <kbd>testmailuser</kbd> و ارسال یک رمز عبور تصادفی به ای‌میل.",
        "apihelp-delete-description": "حذف صفحه",
-       "apihelp-delete-param-title": "عنوان صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار $1pageid استفاده شود.",
-       "apihelp-delete-param-pageid": "شناسه صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار $1title استفاده شود.",
+       "apihelp-delete-param-title": "عنوان صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار <var>$1pageid</var> استفاده شود.",
+       "apihelp-delete-param-pageid": "شناسه صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار <var>$1title</var> استفاده شود.",
        "apihelp-delete-param-reason": "دلیل برای حذف. اگر تنظیم نشود، یک دلیل خودکار ساخته‌شده استفاده می‌شود.",
-       "apihelp-delete-param-watch": "افزودن صفحه به فهرست پی‌گیری شما",
+       "apihelp-delete-param-watch": "افزودن صفحه به فهرست پی‌گیری کاربر فعلی",
        "apihelp-delete-param-unwatch": "صفحه را از پی‌گیری‌تان حذف کنید.",
-       "apihelp-delete-example-simple": "حذف صفحه اصلی",
-       "apihelp-delete-example-reason": "حذف صفحهٔ اصلی همراه دلیل «آماده برای انتقال»",
+       "apihelp-delete-example-simple": "حذف <kbd>صفحهٔ اصلی</kbd>",
+       "apihelp-delete-example-reason": "حذف <kbd>صفحهٔ اصلی</kbd> همراه دلیل  <kbd>آماده‌سازی برای انتقال</kbd>",
        "apihelp-disabled-description": "این پودمان غیرفعال شده است.",
        "apihelp-edit-description": "ایجاد و ویرایش صفحه",
-       "apihelp-edit-param-title": "عنوان صفحه‌ای که قصد ویرایشش را دارید. نمی‌تواند در کنار $1pageid استفاده شود.",
-       "apihelp-edit-param-pageid": "شناسه صفحهٔ صفحه‌ای که می‌خواهید ویرایشش کنید. نمی‌تواند در کنار $1title استفاده شود.",
-       "apihelp-edit-param-section": "شماره بخش. ۰ برای بخش بالا، «تازه» برای یک بخش تازه.",
+       "apihelp-edit-param-title": "عنوان صفحه‌ای که قصد ویرایشش را دارید. نمی‌تواند در کنار <var>$1pageid</var> استفاده شود.",
+       "apihelp-edit-param-pageid": "شناسه صفحهٔ صفحه‌ای که می‌خواهید ویرایشش کنید. نمی‌تواند در کنار <var>$1title</var> استفاده شود.",
+       "apihelp-edit-param-section": "شماره بخش. <kbd>۰</kbd> برای بخش بالا، «<kbd>تازه</kbd>» برای یک بخش تازه.",
        "apihelp-edit-param-sectiontitle": "عنوان برای بخش جدید.",
        "apihelp-edit-param-text": "محتوای صفحه.",
        "apihelp-edit-param-summary": "خلاصه را ویرایش کنید. همچنین عنوان بخش را زمانی که $1section=تازه و $1sectiontitle تنظیم نشده‌است.",
@@ -73,7 +75,7 @@
        "apihelp-edit-param-redirect": "اصلاح خودکار تغییرمسیرها.",
        "apihelp-edit-example-edit": "ویرایش صفحه",
        "apihelp-emailuser-description": "ایمیل به کاربر",
-       "apihelp-emailuser-param-target": "کاربر Ø¨Ø±Ø§Û\8c Ø§Ø±Ø³Ø§Ù\84 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87.",
+       "apihelp-emailuser-param-target": "کاربر Ø¨Ø±Ø§Û\8c Ø§Ø±Ø³Ø§Ù\84 Ø§Û\8cÙ\85Û\8cÙ\84 Ø¨Ù\87 Ù\88Û\8c.",
        "apihelp-emailuser-param-subject": "موضوع هدر.",
        "apihelp-emailuser-param-text": "متن رایانه.",
        "apihelp-emailuser-param-ccme": "ارسال یک نسخه از رایانه به شما.",
        "apihelp-feedrecentchanges-param-hideanons": "پنهان کردن ویرایش‌های کاربران ناشناس.",
        "apihelp-feedrecentchanges-param-hideliu": "پنهان کردن ویرایش‌های کاربران ثبت‌نام کرده.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "پنهان کردن ویرایش گشت‌زن‌ها.",
-       "apihelp-feedrecentchanges-param-hidemyself": "پنهان کردن ویرایش‌های خودتان.",
+       "apihelp-feedrecentchanges-param-hidemyself": "پنهان کردن ویرایش‌های کاربر فعلی.",
        "apihelp-feedrecentchanges-param-tagfilter": "فیلتر کردن براساس برچسب",
        "apihelp-feedrecentchanges-param-target": "فقط نمایش ویرایش‌هایی که پیوند دارند به این صفحه.",
        "apihelp-feedrecentchanges-param-showlinkedto": "نمایش ویرایش‌ها بر روی صفحات پیوند داده شده به صفحات انتخاب شده.",
        "apihelp-help-example-query": "راهنما برای دو زیر پودمان کوئری",
        "apihelp-imagerotate-description": "چرخاندن یک یا چند تصویر",
        "apihelp-imagerotate-param-rotation": "درجه برای چرخاندن تصویر در جهت ساعت‌گرد.",
-       "apihelp-imagerotate-example-simple": "چرخاندن ۹۰ درجه برای [[:File:Example.png]]",
-       "apihelp-imagerotate-example-generator": "چرخاندن ۱۸۰ درجه برای همهٔ تصاویر موجود در [[:Category:Flip]]",
+       "apihelp-imagerotate-example-simple": "چرخاندن <kbd>۹۰</kbd> درجه برای <kbd>File:Example.png</kbd>",
+       "apihelp-imagerotate-example-generator": "چرخاندن <kbd>۱۸۰</kbd> درجه برای همهٔ تصاویر موجود در <kbd>Category:Flip</kbd>",
        "apihelp-import-param-summary": "خلاصه درون‌ریزی.",
        "apihelp-import-param-xml": "پرونده XML بارگذاری شد.",
        "apihelp-import-param-interwikisource": "برای درون‌ریز میان‌ویکی: ویکی برای درون‌ریزی از.",
        "apihelp-logout-description": "خروج به همراه پاک نمودن اطلاعات این نشست",
        "apihelp-logout-example-logout": "خروج کاربر فعلی",
        "apihelp-move-description": "انتقال صفحه",
-       "apihelp-move-param-to": "عنوانی که شما قصد دارید صفحه را به آن نام تغییر دهید.",
+       "apihelp-move-param-to": "عنوانی که قصد دارید صفحه را به آن نام تغییر دهید.",
        "apihelp-move-param-reason": "دلیل انتقال",
-       "apihelp-move-param-movetalk": "اÙ\86تÙ\82اÙ\84 ØµÙ\81Ø­Ù\87Ù\94 Ø¨Ø­Ø« Ø§Ú¯Ø± Ù\88جÙ\88د دارد.",
-       "apihelp-move-param-movesubpages": "اÙ\86تÙ\82اÙ\84 Ø²Û\8cر ØµÙ\81Ø­Ù\87â\80\8cÙ\87ا Ø§Ú¯Ø± Ø§Ù\85کاÙ\86â\80\8cپذÛ\8cر است.",
+       "apihelp-move-param-movetalk": "صÙ\81Ø­Ù\87Ù\94 Ø¨Ø­Ø« Ø±Ø§ ØªØºÛ\8cÛ\8cرÙ\86اÙ\85 Ø¯Ù\87Û\8cدØ\8c Ø§Ú¯Ø± Ù\88جÙ\88ددارد.",
+       "apihelp-move-param-movesubpages": "زÛ\8cرصÙ\81Ø­Ù\87 Ø±Ø§ ØªØºÛ\8cÛ\8cرÙ\86اÙ\85 Ø¯Ù\87Û\8cدØ\8c Ø§Ú¯Ø± Ø´Ø¯Ù\86Û\8c است.",
        "apihelp-move-param-noredirect": "عدم ساخت تغییرمسیر.",
+       "apihelp-move-param-watch": "صفحه و تغییرمسیر را به پی‌گیری کاربر کنونی بیافزایید.",
+       "apihelp-move-param-unwatch": "صفحه و تغییرمسیر را از پی‌گیری کاربر کنونی حذف کنید.",
        "apihelp-move-param-ignorewarnings": "چشم‌پوشی از همهٔ هشدارها.",
+       "apihelp-opensearch-description": "جستجو در ویکی بااستفاده از پروتکل اوپن‌سرچ.",
        "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-format": "فرمت خروجی.",
-       "apihelp-opensearch-example-te": "یافتن صفحه‌هایی که با «ته» آغاز می‌شوند",
+       "apihelp-opensearch-example-te": "یافتن صفحه‌هایی که با <kbd>ته</kbd> آغاز می‌شوند",
        "apihelp-options-example-reset": "بازنشانی همه تنظیمات.",
        "apihelp-paraminfo-param-helpformat": "ساختار راهنمای رشته‌ها",
        "apihelp-parse-example-page": "تجزیه یک صفحه.",
        "apihelp-protect-description": "تغییر سطح محافظت صفحه",
        "apihelp-protect-param-reason": "دلیل برای (عدم) حفاظت.",
        "apihelp-protect-example-protect": "محافظت از صفحه",
-       "apihelp-protect-example-unprotect": "خارج ساختن صفحه از حفاظت با تغییر سطح حفاظتی به \"همگان\"",
+       "apihelp-protect-example-unprotect": "خارج ساختن صفحه از حفاظت با تغییر سطح حفاظتی به <kbd>همگان</kbd>.",
        "apihelp-protect-example-unprotect2": "خارج ساختن صفحه از حفاظت با قراردادن هیچ‌گونه محدودیت‌حفاظتی",
        "apihelp-purge-param-forcelinkupdate": "به‌روزرسانی جداول پیوندها.",
        "apihelp-purge-param-forcerecursivelinkupdate": "جدول پیوندها را به‌روز رسانی کنید، و جدول‌های پیوندهای هر صفحه‌ای را که از این صفحه به عنوان الگو استفاده می‌کند به‌روز رسانی کنید.",
        "apihelp-query-param-meta": "کدام فراداده‌ها دریافت شود.",
        "apihelp-query+allcategories-param-prefix": "عنوان همهٔ رده‌ها را که با این مقدار آغاز می‌شود جستجو کنید.",
        "apihelp-query+allcategories-param-limit": "میزان رده‌ها برای بازگرداندن.",
-       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "نمی‌تواند همراه $3user به کار رود.",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "نمی‌تواند همراه <var>$3user</var> به کار رود.",
        "apihelp-query+allfileusages-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
        "apihelp-query+allfileusages-param-dir": "جهتی که باید فهرست شود.",
        "apihelp-query+allfileusages-example-unique": "فهرست پرونده‌های با عنوان یکتا",
        "apihelp-query+allpages-param-minsize": "محدودکردن به صفحه‌هایی که همراه دست کم این تعداد بایت است.",
        "apihelp-query+allpages-param-limit": "میزان کل صفحه‌ها برای بازگرداندن.",
        "apihelp-query+allredirects-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
-       "apihelp-query+backlinks-example-simple": "نمایش پیوندها به [[صفحهٔ اصلی]]",
+       "apihelp-query+backlinks-example-simple": "نمایش پیوندها به <kbd>صفحهٔ اصلی<kbd>",
        "apihelp-query+blocks-example-simple": "فهرست بسته‌شده‌ها",
        "apihelp-query+categories-param-show": "کدام نوع رده‌ها نمایش داده‌شود.",
        "apihelp-query+categories-param-limit": "چه میزان رده بازگردانده شود.",
        "apihelp-query+imageinfo-param-urlheight": "مشابه $1urlwidth.",
        "apihelp-query+info-description": "دریافت اطلاعات سادهٔ صفحه.",
        "apihelp-query+iwbacklinks-param-prefix": "پیشوند میان‌ویکی.",
-       "apihelp-query+iwbacklinks-param-title": "پیوند میان‌ویکی برای جستجو. باید همراه $1blprefix استفاده شود.",
+       "apihelp-query+iwbacklinks-param-title": "پیوند میان‌ویکی برای جستجو. باید همراه <var>$1blprefix</var> استفاده شود.",
        "apihelp-query+iwbacklinks-param-limit": "تعداد صفحه‌ها برای بازگرداندن.",
        "apihelp-query+linkshere-param-limit": "تعداد برای بازگرداندن.",
        "apihelp-query+logevents-description": "دریافت رویدادها از سیاهه‌ها.",
index 6f7ccf3..114e36c 100644 (file)
@@ -7,7 +7,11 @@
                        "McDutchie",
                        "Element303",
                        "Macofe",
-                       "Linedwell"
+                       "Linedwell",
+                       "Nicolapps",
+                       "Raulel",
+                       "Arkanosis",
+                       "Ltrlg"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en cours de développement et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un en-tête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet en-tête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
        "apihelp-block-param-watchuser": "Surveiller les pages utilisateur et de discussion de l’utilisateur ou de l’adresse IP.",
        "apihelp-block-example-ip-simple": "Bloquer l’adresse IP <kbd>192.0.2.5</kbd> pour trois jours avec le motif <kbd>Premier avertissement</kbd>.",
        "apihelp-block-example-user-complex": "Bloquer indéfiniment l’utilisateur <kbd>Vandale</kbd> avec le motif <kbd>Vandalisme</kbd>, et empêcher la création de nouveau compte et l'envoi de courriel.",
+       "apihelp-checktoken-description": "Vérifier la validité d'un jeton de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Type de jeton testé",
+       "apihelp-checktoken-param-token": "Jeton à tester.",
+       "apihelp-checktoken-param-maxtokenage": "Temps maximum autorisé pour le jeton, en secondes",
+       "apihelp-checktoken-example-simple": "Tester la validité d'un jeton de <kbd>csrf</kbd>.",
        "apihelp-clearhasmsg-description": "Efface le drapeau <code>hasmsg</code> pour l’utilisateur courant.",
        "apihelp-clearhasmsg-example-1": "Effacer le drapeau <code>hasmsg</code> pour l’utilisateur courant",
        "apihelp-compare-description": "Obtenir la différence entre 2 pages.\n\nVous devez passer un numéro de révision, un titre de page, ou un ID de page, à la fois pour « from » et « to ».",
@@ -63,7 +72,7 @@
        "apihelp-delete-param-pageid": "ID de la page que vous voulez supprimer. Impossible à utiliser avec <var>$1title</var>.",
        "apihelp-delete-param-reason": "Motif de suppression. Si non défini, un motif généré automatiquement sera utilisé.",
        "apihelp-delete-param-watch": "Ajouter la page à la liste de suivi de l’utilisateur actuel.",
-       "apihelp-delete-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas modifier le suivi.",
+       "apihelp-delete-param-watchlist": "Ajouter ou supprimer sans distinction la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne rien changer au suivi.",
        "apihelp-delete-param-unwatch": "Supprimer la page de la liste de suivi de l'utilisateur actuel.",
        "apihelp-delete-param-oldimage": "Le nom de l’ancienne image à supprimer tel que fourni par [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
        "apihelp-delete-example-simple": "Supprimer <kbd>Page principale</kbd>.",
@@ -80,8 +89,8 @@
        "apihelp-edit-param-notminor": "Modification non mineure.",
        "apihelp-edit-param-bot": "Marquer cette modification comme robot.",
        "apihelp-edit-param-basetimestamp": "Horodatage de la révision de base, utilisé pour détecter les conflits de modification. Peut être obtenu via [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
-       "apihelp-edit-param-starttimestamp": "Horodatage quand vous avez commencé le processus de modification, utilisé pour détecter les conflits de modification. Une valeur appropriée peut être obtenue en utilisant [[Special:ApiHelp/main|curtimestamp]] lors du démarrage du processus de modification (par ex. en chargeant le contenu de la page à modifier).",
-       "apihelp-edit-param-recreate": "Écraser toutes les erreurs sur l’article ayant été supprimé pendant ce temps.",
+       "apihelp-edit-param-starttimestamp": "L'horodatage, lorsque le processus d'édition est démarré, est utilisé pour détecter les conflits de modification. Une valeur appropriée peut être obtenue en utilisant <var>[[Special:ApiHelp/main|curtimestamp]]</var> lors du démarrage du processus d'édition (par ex. en chargeant le contenu de la page à modifier).",
+       "apihelp-edit-param-recreate": "Ignorer toutes les erreurs concernant la page \nqui a été supprimée entre-temps.",
        "apihelp-edit-param-createonly": "Ne pas modifier la page si elle existe déjà.",
        "apihelp-edit-param-nocreate": "Lever une erreur si la page n’existe pas.",
        "apihelp-edit-param-watch": "Ajouter la page à la liste de suivi de l'utilisateur actuel.",
        "apihelp-logout-description": "Se déconnecter et effacer les données de session.",
        "apihelp-logout-example-logout": "Déconnecter l’utilisateur actuel.",
        "apihelp-managetags-description": "Effectuer des tâches de gestion relatives à la modification des balises.",
+       "apihelp-managetags-param-operation": "Quelle opération effectuer :\n;create:Créer une nouvelle balise de modification pour un usage manuel.\n;delete:Supprimer une balise de modification de la base de données, y compris la suppression de la marque de toutes les révisions, entrées de modification récente et entrées de journal dans lesquelles elle serait utilisée.\n;activate:Activer une balise de modification, permettant aux utilisateurs de l’appliquer manuellement.\n;deactivate:Désactiver une balise de modification, empêchant les utilisateurs de l’appliquer manuellement.",
+       "apihelp-managetags-param-tag": "Balise à créer, supprimer, activer ou désactiver. Pour la création de balise, elle ne doit pas exister. Pour la suppression de balise, elle doit exister. Pour l’activation de balise, elle doit exister et ne pas être utilisée par une extension. Pour la désactivation de balise, elle doit être actuellement active et définie manuellement.",
+       "apihelp-managetags-param-reason": "Un motif facultatif pour créer, supprimer, activer ou désactiver la balise.",
+       "apihelp-managetags-param-ignorewarnings": "S’il faut ignorer tout avertissement qui se produirait au cours de l’opération.",
+       "apihelp-managetags-example-create": "Créer une balise nommée <kbd>pourriel</kbd> avec le motif <kbd>À utiliser lors de la revue des modifications</kbd>",
+       "apihelp-managetags-example-delete": "Supprimer la balise <kbd>vandlaisme</kbd> avec le motif <kbd>Mal épelé</kbd>",
+       "apihelp-managetags-example-activate": "Activer une balise nommée <kbd>pourriel</kbd> avec le motif <kbd>À utiliser dans la revue des modifications</kbd>",
+       "apihelp-managetags-example-deactivate": "Désactiver une balise nommée <kbd>pourriel</kbd> avec le motif <kbd>Plus nécessaire</kbd>",
        "apihelp-move-description": "Déplacer une page.",
-       "apihelp-move-param-from": "Titre de la page que vous voulez déplacer. Impossible de l’utiliser avec $1fromid.",
-       "apihelp-move-param-fromid": "ID de la page que vous voulez déplacer. Impossible à utiliser avec $1from.",
+       "apihelp-move-param-from": "Titre de la page à renommer. Impossible de l’utiliser avec <var>$1fromid</var>.",
+       "apihelp-move-param-fromid": "ID de la page à renommer. Impossible à utiliser avec <var>$1from</var>.",
        "apihelp-move-param-to": "Titre de la page renommée.",
-       "apihelp-move-param-reason": "Motif du déplacement.",
-       "apihelp-move-param-movetalk": "Déplacer la page de discussion, si elle existe.",
-       "apihelp-move-param-movesubpages": "Déplacer les sous-pages, le cas échéant.",
+       "apihelp-move-param-reason": "Motif du renommage.",
+       "apihelp-move-param-movetalk": "Renommer la page de discussion, si elle existe.",
+       "apihelp-move-param-movesubpages": "Renommer les sous-pages, le cas échéant.",
        "apihelp-move-param-noredirect": "Ne pas créer une redirection.",
-       "apihelp-move-param-watch": "Ajouter une page et la redirection à votre liste de suivi.",
-       "apihelp-move-param-unwatch": "Supprimer la page et la redirection de votre liste de suivi.",
-       "apihelp-move-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas changer le suivi.",
+       "apihelp-move-param-watch": "Ajouter une page et la redirection à liste de suivi de l'utilisateur actuel.",
+       "apihelp-move-param-unwatch": "Supprimer la page et la redirection de la liste de suivi de l'utilisateur actuel.",
+       "apihelp-move-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne pas changer le suivi.",
        "apihelp-move-param-ignorewarnings": "Ignorer tous les avertissements.",
        "apihelp-move-example-move": "Déplacer <kbd>Mauvais titre</kbd> en <kbd>Bon titre</kbd> sans garder de redirection.",
        "apihelp-opensearch-description": "Rechercher dans le wiki en utilisant le protocole OpenSearch.",
        "apihelp-paraminfo-param-querymodules": "Liste des noms de module de requêtage (valeur des paramètres <var>prop</var>, <var>meta</var> ou <var>list</var>=). Utiliser <kbd>$1modules=query+foo</kbd> au lieu de <kbd>$1querymodules=foo</kbd>.",
        "apihelp-paraminfo-param-mainmodule": "Obtenir aussi des informations sur le module principal (niveau supérieur). Utiliser plutôt <kbd>$1modules=main</kbd>.",
        "apihelp-paraminfo-param-pagesetmodule": "Obtenir aussi des informations sur le module pageset (en fournissant titles= et ses amis).",
-       "apihelp-paraminfo-param-formatmodules": "Liste des noms de module de mise en forme (valeur du paramètre <var>format</var>). Utiliser plutôt <var>$1modules</kbd>.",
+       "apihelp-paraminfo-param-formatmodules": "Liste des noms de module de mise en forme (valeur du paramètre <var>format</var>). Utiliser plutôt <var>$1modules</var>.",
        "apihelp-paraminfo-example-1": "Afficher les informations pour <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> et <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
        "apihelp-parse-description": "Analyse le contenu et renvoie le résultat de l’analyseur.\n\nVoyez les différents modules prop de <kbd>[[Special:ApiHelp/query|action=query]]</kbd> pour avoir de l’information sur la version actuelle d’une page.\n\nIl y a plusieurs moyens de spécifier le texte à analyser :\n# Spécifier une page ou une révision, en utilisant <var>$1page</var>, <var>$1pageid</var> ou <var>$1oldid</var>.\n# Spécifier explicitement un contenu, en utilisant <var>$1text</var>, <var>$1title</var> et <var>$1contentmodel</var>\n# Spécifier uniquement un résumé à analyser. <var>$1prop</var> doit recevoir une valeur vide.",
        "apihelp-parse-param-title": "Titre de la page à laquelle appartient le texte. Si omis, <var>$1contentmodel</var> doit être spécifié, et [[API]] sera utilisé comme titre.",
        "apihelp-parse-param-pst": "Faire une transformation avant enregistrement de l’entrée avant de l’analyser. Valide uniquement quand utilisé avec du texte.",
        "apihelp-parse-param-onlypst": "Faire une transformation avant enregistrement (PST) de l’entrée, mais ne pas l’analyser. Renvoie le même wikitexte, après que la PST a été appliquée. Valide uniquement quand utilisé avec <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Inclut les liens de langue fournis par les extensions (à utiliser avec <kbd>$1prop=langlinks</kbd>).",
-       "apihelp-parse-param-section": "Récupérer uniquement le contenu de ce numéro de section.",
+       "apihelp-parse-param-section": "Récupérer uniquement le contenu de ce numéro de section ou quand <kbd>nouveau</kbd> génère une nouvelle section.\n\nLa <kbd>nouvelle</kbd> section est mise à l’honneur uniquement quand <var>text</var> est spécifié.",
+       "apihelp-parse-param-sectiontitle": "Nouveau titre de section quand <var>section</var> vaut <kbd>nouveau</kbd>.\n\nÀ la différence de la modification de page, cela ne revient pas à <var>summary</var> quand il est omis ou vide.",
        "apihelp-parse-param-disablepp": "Désactiver le rapport PP de la sortie de l’analyseur.",
        "apihelp-parse-param-disableeditsection": "Désactiver les liens de modification de section de la sortie de l’analyseur.",
        "apihelp-parse-param-generatexml": "Générer un arbre d’analyse XML (nécessite le modèle de contenu <code>$1</code>).",
        "apihelp-protect-param-expiry": "Horodatages d’expiration. Si un seul horodatage est fourni, il sera utilisé pour toutes les protections. Utiliser <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> ou <kbd>never</kbd> pour une protection sans expiration.",
        "apihelp-protect-param-reason": "Motif de (dé)protection.",
        "apihelp-protect-param-cascade": "Activer la protection en cascade (c’est-à-dire protéger les pages incluses dans cette page). Ignoré si tous les niveaux de protection fournis ne supportent pas la mise en cascade.",
-       "apihelp-protect-param-watch": "Si activé, ajouter la page (dé)protégée à votre liste de suivi.",
-       "apihelp-protect-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas modifier le suivi.",
+       "apihelp-protect-param-watch": "Si activé, ajouter la page (dé)protégée à la liste de suivi de l'utilisateur actuel.",
+       "apihelp-protect-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne pas modifier le suivi.",
        "apihelp-protect-example-protect": "Protéger une page",
        "apihelp-protect-example-unprotect": "Enlever la protection d’une page en mettant les restrictions à <kbd>all</kbd>.",
        "apihelp-protect-example-unprotect2": "Enlever la protection de la page en ne mettant aucune restriction",
        "apihelp-query+backlinks-param-namespace": "L’espace de noms à énumérer.",
        "apihelp-query+backlinks-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+backlinks-param-filterredir": "Comment filtrer les redirections. Si positionné à <kbd>nonredirects</kbd> quand <var>$1redirect</var> est activé, cela ne s’applique qu’au second niveau.",
-       "apihelp-query+backlinks-param-limit": "Combien de pages renvoyer au total. Si $1redirect est activé, la limite s’applique à chaque niveau séparément (ce qui signifie que vous pouvez obtenir jusqu’à 2 * limite résultats).",
+       "apihelp-query+backlinks-param-limit": "Combien de pages renvoyer au total. Si $1redirect est activé, la limite s’applique à chaque niveau séparément (ce qui signifie jusqu’à 2 * limite résultats peut être retourné).",
        "apihelp-query+backlinks-param-redirect": "Si le lien vers une page est une redirection, trouver toutes les pages qui ont un lien vers cette redirection aussi. La limite maximale est divisée par deux.",
        "apihelp-query+backlinks-example-simple": "Afficher les liens vers <kbd>Main page<kbd>.",
        "apihelp-query+backlinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers <kbd>Main page<kbd>.",
        "apihelp-query+blocks-example-simple": "Lister les blocages",
        "apihelp-query+blocks-example-users": "Lister les blocages des utilisateurs <kbd>Alice</kbd> et <kbd>Bob</kbd>.",
        "apihelp-query+categories-description": "Lister toutes les catégories auxquelles les pages appartiennent.",
-       "apihelp-query+categories-param-prop": "Quelles propriétés supplémentaires obtenir de chaque catégorie :\n;sortkey:Ajoute la clé de tri (chaîne hexadécimale) et son préfixe (partie lisible) de la catégorie.\n;timestamp:Ajoute l’horodatage de l’ajout de la catégorie.\n;hidden:Marque els catégories cachées avec _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+categories-param-prop": "Quelles propriétés supplémentaires obtenir de chaque catégorie :\n;sortkey:Ajoute la clé de tri (chaîne hexadécimale) et son préfixe (partie lisible) de la catégorie.\n;timestamp:Ajoute l’horodatage de l’ajout de la catégorie.\n;hidden:Marque les catégories cachées avec _&#95;HIDDENCAT_&#95;.",
        "apihelp-query+categories-param-show": "Quelle sorte de catégories afficher.",
        "apihelp-query+categories-param-limit": "Combien de catégories renvoyer.",
        "apihelp-query+categories-param-categories": "Lister uniquement ces catégories. Utile pour vérifier si une certaine page est dans une certaine catégorie.",
        "apihelp-query+imageusage-param-namespace": "L’espace de noms à énumérer.",
        "apihelp-query+imageusage-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+imageusage-param-filterredir": "Comment filtrer les redirections. Si mis à nonredirects quand $1redirect est activé, cela ne s’appliquera qu’au second niveau.",
-       "apihelp-query+imageusage-param-limit": "Combien de pages renvoyer au total. Si $1redirect est activé, la limite s’applique à chaque niveau séparément (ce qui veut dire que vous pouvez obtenir jusqu’à 2 * limite résultats).",
+       "apihelp-query+imageusage-param-limit": "Combien de pages renvoyer au total. Si <var>$1redirect</var> est activé, la limite s’applique à chaque niveau séparément (ce qui veut dire que jusqu’à 2 * <var>$1limit</var> résultats peuvent être renvoyés).",
        "apihelp-query+imageusage-param-redirect": "Si le lien vers une page est une redirection, trouver toutes les pages qui ont aussi un lien vers cette redirection. La limite maximale est divisée par deux.",
        "apihelp-query+imageusage-example-simple": "Afficher les pages utilisant [[:File:Albert Einstein Head.jpg]]",
        "apihelp-query+imageusage-example-generator": "Obtenir des informations sur les pages utilisant [[:File:Albert Einstein Head.jpg]]",
        "apihelp-query+info-paramvalue-prop-readable": "Si l’utilisateur peut lire cette page.",
        "apihelp-query+info-paramvalue-prop-preload": "Fournit le texte renvoyé par EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "Fournit la manière dont le titre de la page est réellement affiché.",
+       "apihelp-query+info-param-testactions": "Tester si l’utilisateur actuel peut effectuer certaines actions sur la page.",
        "apihelp-query+info-param-token": "Utiliser plutôt [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
        "apihelp-query+info-example-simple": "Obtenir des informations sur la page <kbd>Main Page</kbd>.",
        "apihelp-query+info-example-protection": "Obtenir des informations générale et de protection sur la page <kbd>Main Page</kbd>.",
        "apihelp-query+links-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+links-example-simple": "Obtenir les liens de la page <kbd>Main Page</kbd>",
        "apihelp-query+links-example-generator": "Obtenir des informations sur tous les liens de page dans <kbd>Main Page</kbd>.",
-       "apihelp-query+links-example-namespaces": "Obtenir les liens de [[Main Page]] dans les espaces de nom Utilisateur et Modèle",
+       "apihelp-query+links-example-namespaces": "Obtenir les liens de la page <kbd>Accueil</kbd> dans les espaces de nom {{ns:user}} et {{ns:template}}.",
        "apihelp-query+linkshere-description": "Trouver toutes les pages ayant un lien vers les pages données.",
        "apihelp-query+linkshere-param-prop": "Quelles propriétés obtenir :\n;pageid:ID de chaque page.\n;title:Titre de chaque page.\n;redirect:Indique si la page est une redirection.",
        "apihelp-query+linkshere-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
        "apihelp-query+querypage-param-page": "Le nom de la page spéciale. Remarque, ce nom est sensible à la casse.",
        "apihelp-query+querypage-param-limit": "Nombre de résultats à renvoyer.",
        "apihelp-query+querypage-example-ancientpages": "Renvoyer les résultats de [[Special:Ancientpages]].",
-       "apihelp-query+random-description": "Obtenir un ensemble de pages au hasard.\n\nLes pages sont listées dans un ordre prédéterminé, seul le point de départ est aléatoire. Par exemple, cela signifie que si la première page sur votre liste est « Accueil », la seconde sera *toujours* « Liste des singes de fiction », la troisième « Liste de personnes figurant sur les timbres de Vanuatu », etc.\n\nSi le nombre de page dans l’espace de nom est inférieur à $1limit, vous obtiendrez moins de page. Vous n'obtiendrez jamais deux fois la même page.",
+       "apihelp-query+random-description": "Obtenir un ensemble de pages au hasard.\n\nLes pages sont listées dans un ordre prédéterminé, seul le point de départ est aléatoire. Par exemple, cela signifie que si la première page dans la liste est <samp>Accueil</samp>, la seconde sera <em>toujours</em> <samp>Liste des singes de fiction</samp>, la troisième <samp>Liste de personnes figurant sur les timbres de Vanuatu</samp>, etc.\n\nSi le nombre de page dans l’espace de nom est inférieur à <var>$1limit</var>, moins de pages seront renvoyées. La même page ne sera jamais renvoyée deux fois.",
        "apihelp-query+random-param-namespace": "Renvoyer seulement des pages de ces espaces de noms.",
        "apihelp-query+random-param-limit": "Limite sur le nombre de pages aléatoires renvoyées.",
        "apihelp-query+random-param-redirect": "Charger une redirection aléatoire plutôt qu’une page aléatoire.",
        "apihelp-query+search-example-text": "Rechercher des textes pour <kbd>signification</kbd>.",
        "apihelp-query+search-example-generator": "Obtenir les informations sur les pages renvoyées par une recherche de <kbd>signification</kbd>.",
        "apihelp-query+siteinfo-description": "Renvoyer les informations générales sur le site.",
-       "apihelp-query+siteinfo-param-prop": "Quelles informations obtenir :\n;general:Information globale du système.\n;namespaces:Liste des espaces de nom déclarés et leur nom canonique.\n;namespacealiases:Liste des alias des espaces de nom déclarés.\n;specialpagealiases:Liste des alias des pages spéciales.\n;magicwords:Liste des mots magiques et leurs alias.\n;statistics:Renvoie les statistiques du site.\n;interwikimap:Renvoie la correspondance interwiki (éventuellement filtrée, éventuellement localisée en utilisant <var>$1inlanguagecode</var>).\n;dbrepllag:Renvoie le serveur de base de donnée avec la plus grande latence de réplication.\n;usergroups:Renvoie les groupes utilisateur et les droits associés.\n;extensions:Renvoie les extensions installées sur le wiki.\n;fileextensions:Renvoie la liste des extensions de fichier autorisées au téléchargement.\n;rightsinfo:Renvoie l’information sur les droits du wiki (sa licence), si elle est disponible.\n;restrictions:Renvoie l’information sur les types de restriction disponibles (protection).\n;languages:Renvoie une liste des langues que supporte MédiaWiki (éventuellement localisé en utilisant <var>$1inlanguagecode</var>).\n;skins:Renvoie une liste de tous les habillages activés (éventuellement localisé en utilisant <var>$1inlanguagecode</var>, sinon dans la langue du contenu).\n;extensiontags:Renvoie une liste des balises d’extension de l’analyseur.\n;functionhooks:Renvoie une liste des accroches de fonction de l’analyseur.\n;showhooks:Renvoie une liste de toutes les accroches souscrites (contenu de <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).\n;variables:Renvoie une liste des IDs de variable.\n;protocols:Renvoie une liste des protocoles qui sont autorisés dans les liens externes.\n;defaultoptions:Renvoie les valeurs par défaut pour les préférences utilisateur.",
+       "apihelp-query+siteinfo-param-prop": "Quelles informations obtenir :\n;general:Information globale du système.\n;namespaces:Liste des espaces de nom déclarés et leur nom canonique.\n;namespacealiases:Liste des alias des espaces de nom déclarés.\n;specialpagealiases:Liste des alias des pages spéciales.\n;magicwords:Liste des mots magiques et leurs alias.\n;statistics:Renvoie les statistiques du site.\n;interwikimap:Renvoie la correspondance interwiki (éventuellement filtrée, éventuellement localisée en utilisant <var>$1inlanguagecode</var>).\n;dbrepllag:Renvoie le serveur de base de donnée avec la plus grande latence de réplication.\n;usergroups:Renvoie les groupes utilisateur et les droits associés.\n;libraries:Renvoie les bibliothèques installées sur le wiki.\n;extensions:Renvoie les extensions installées sur le wiki.\n;fileextensions:Renvoie la liste des extensions de fichier autorisées au téléchargement.\n;rightsinfo:Renvoie l’information sur les droits du wiki (sa licence), si elle est disponible.\n;restrictions:Renvoie l’information sur les types de restriction disponibles (protection).\n;languages:Renvoie une liste des langues que supporte MédiaWiki (éventuellement localisé en utilisant <var>$1inlanguagecode</var>).\n;skins:Renvoie une liste de tous les habillages activés (éventuellement localisé en utilisant <var>$1inlanguagecode</var>, sinon dans la langue du contenu).\n;extensiontags:Renvoie une liste des balises d’extension de l’analyseur.\n;functionhooks:Renvoie une liste des accroches de fonction de l’analyseur.\n;showhooks:Renvoie une liste de toutes les accroches souscrites (contenu de <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).\n;variables:Renvoie une liste des IDs de variable.\n;protocols:Renvoie une liste des protocoles qui sont autorisés dans les liens externes.\n;defaultoptions:Renvoie les valeurs par défaut pour les préférences utilisateur.",
        "apihelp-query+siteinfo-param-filteriw": "Renvoyer uniquement les entrées locales ou uniquement les non locales de la correspondance interwiki.",
        "apihelp-query+siteinfo-param-showalldb": "Lister tous les serveurs de base de données, pas seulement celui avec la plus grande latence.",
        "apihelp-query+siteinfo-param-numberingroup": "Liste le nombre d’utilisateurs dans les groupes.",
        "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis en réserve",
        "apihelp-query+tags-description": "Lister les balises de modification.",
        "apihelp-query+tags-param-limit": "Le nombre maximal de balises à lister.",
-       "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :\n;name:Ajoute le nom de la balise.\n;displayname:Ajoute le message système pour la balise.\n;description:Ajoute la description de la balise.\n;hitcount:Ajoute le nombre de révisions qui ont cette balise.\n;defined:Indique si la balise est définie.",
+       "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :\n;name:Ajoute le nom de la balise.\n;displayname:Ajoute le message système pour la balise.\n;description:Ajoute la description de la balise.\n;hitcount:Ajoute le nombre de révisions et d’entrées du journal qui ont cette balise.\n;defined:Indique si la balise est définie.\n;source:Obtient les sources de la balise, ce qui comprend <samp>extension</samp> pour les balises définies par une extension et <samp>manual</samp> pour les balises pouvant être appliquées manuellement par les utilisateurs.\n;active:Si la balise est encore appliquée.",
        "apihelp-query+tags-example-simple": "Lister les balises disponibles",
        "apihelp-query+templates-description": "Renvoie toutes les pages incluses dans les pages fournies.",
        "apihelp-query+templates-param-namespace": "Afficher les modèles uniquement dans ces espaces de nom.",
        "apihelp-query+templates-param-limit": "Combien de modèles renvoyer.",
        "apihelp-query+templates-param-templates": "Lister uniquement ces modèles. Utile pour vérifier si une certaine page utilise un modèle donné.",
        "apihelp-query+templates-param-dir": "La direction dans laquelle lister.",
-       "apihelp-query+templates-example-simple": "Obtenir les modèles de [[Main Page]]",
+       "apihelp-query+templates-example-simple": "Obtenir les modèles utilisés sur la page <kbd>Accueil</kbd>.",
        "apihelp-query+templates-example-generator": "Obtenir des informations sur les pages modèle utilisé sur <kbd>Main Page</kbd>.",
-       "apihelp-query+templates-example-namespaces": "Obtenir les modèles de [[Main Page]] dans les espaces de nom Utilisateur et Modèle",
+       "apihelp-query+templates-example-namespaces": "Obtenir les pages des espaces de nom {{ns:user}} et {{ns:template}} qui sont inclues dans la page <kdb>Main Page<kdb>.",
        "apihelp-query+tokens-description": "Récupère les jetons pour les actions de modification de données.",
        "apihelp-query+tokens-param-type": "Types de jeton à demander.",
        "apihelp-query+tokens-example-simple": "Récupérer un jeton csrf (par défaut)",
        "apihelp-query+users-param-users": "Une liste des utilisateurs sur lesquels obtenir de l’information.",
        "apihelp-query+users-param-token": "Utiliser plutôt <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
        "apihelp-query+users-example-simple": "Renvoyer des informations pour l'utilisateur <kbd>Exemple</kbd>.",
-       "apihelp-query+watchlist-description": "Obtenir les modifications récentes des pages dans la liste de suivi de l’utilisateur connecté.",
+       "apihelp-query+watchlist-description": "Obtenir les modifications récentes des pages dans la liste de suivi de l’utilisateur actuel.",
        "apihelp-query+watchlist-param-allrev": "Inclure les multiples révisions de la même page dans l’intervalle de temps fourni.",
        "apihelp-query+watchlist-param-start": "L’horodatage auquel démarrer l’énumération.",
        "apihelp-query+watchlist-param-end": "L’horodatage auquel arrêter l’énumération.",
        "apihelp-query+watchlist-example-generator": "Chercher l’information de la page sur les pages récemment modifiées de la liste de suivi de l’utilisateur actuel",
        "apihelp-query+watchlist-example-generator-rev": "Chercher l’information de la révision pour les modifications récentes des pages de la liste de suivi de l’utilisateur actuel",
        "apihelp-query+watchlist-example-wlowner": "Lister la révision de tête des pages récemment modifiées de la liste de suivi de l'utilisateur <kbd>Exemple</kbd>.",
-       "apihelp-query+watchlistraw-description": "Obtenir toutes les pages de la liste de suivi de l’utilisateur connecté.",
+       "apihelp-query+watchlistraw-description": "Obtenir toutes les pages de la liste de suivi de l’utilisateur actuel.",
        "apihelp-query+watchlistraw-param-namespace": "Lister uniquement les pages dans les espaces de nom fournis.",
        "apihelp-query+watchlistraw-param-limit": "Combien de résultats renvoyer au total par requête.",
        "apihelp-query+watchlistraw-param-prop": "Quelles propriétés supplémentaires obtenir :\n;changed:Ajoute l’horodatage de la dernière notification de l’utilisateur à propos de la modification.",
        "apihelp-revisiondelete-example-revision": "Masquer le contenu de la révision <kbd>12345</kbd> de la page <kbd>Main Page</kbd>",
        "apihelp-revisiondelete-example-log": "Masquer toutes les données de l’entrée de journal <kbd>67890</kbd> avec le motif <kbd>Violation de Biographie de Personne Vivante</kbd>.",
        "apihelp-rollback-description": "Annuler la dernière modification de la page.\n\nSi le dernier utilisateur à avoir modifié la page a fait plusieurs modifications sur une ligne, elles seront toutes annulées.",
-       "apihelp-rollback-param-title": "Titre de la page que vous voulez restaurer. Impossible à utiliser avec $1pageid.",
-       "apihelp-rollback-param-pageid": "ID de la page que vous voulez restaurer. Impossible à utiliser avec $1title.",
+       "apihelp-rollback-param-title": "Titre de la page à restaurer. Impossible à utiliser avec <var>$1pageid</var>.",
+       "apihelp-rollback-param-pageid": "ID de la page à restaurer. Impossible à utiliser avec <var>$1title</var>.",
        "apihelp-rollback-param-user": "Nom de l’utilisateur dont les modifications doivent être annulées.",
        "apihelp-rollback-param-summary": "Personnaliser le résumé de la modification. S’il est vide, le résumé par défaut sera utilisé.",
        "apihelp-rollback-param-markbot": "Marquer les modifications annulées et les modifications annulées comme robot.",
-       "apihelp-rollback-param-watchlist": "Ajouter ou supprimer la page de votre liste de suivi sans condition, utiliser les préférences ou ne pas modifier le suivi.",
+       "apihelp-rollback-param-watchlist": "Ajouter ou supprimer la page de la liste de suivi de l’utilisateur actuel sans condition, utiliser les préférences ou ne pas modifier le suivi.",
        "apihelp-rollback-example-simple": "Annuler les dernières modifications à [<kbd>Main Page</kbd> par l’utilisateur <kbd>Exemple</kbd>.",
        "apihelp-rollback-example-summary": "Annuler les dernières modifications de la page <kbd>Main Page</kbd> par l’utilisateur à l’adresse IP <kbd>192.0.2.5</kbd> avec le résumé <kbd>Annulation de vandalisme<kbd>, et marquer ces modifications et l’annulation comme modifications de robots.",
        "apihelp-rsd-description": "Exporter un schéma RSD (Découverte Très Simple).",
        "apihelp-undelete-param-reason": "Motif de restauration.",
        "apihelp-undelete-param-timestamps": "Horodatages des révisions à restaurer. Si <var>$1timestamps</var> et <var>$1fileids</var> sont vides, toutes seront restaurées.",
        "apihelp-undelete-param-fileids": "IDs des révisions de fichier à restaurer. Si <var>$1timestamps</var> et <var>$1fileids</var> sont vides, toutes seront restaurées.",
-       "apihelp-undelete-param-watchlist": "Ajouter ou supprimer la page de votre liste de suivi sans condition, utiliser les préférences ou ne pas modifier le suivi.",
+       "apihelp-undelete-param-watchlist": "Ajouter ou supprimer la page de la liste de suivi de l’utilisateur actuel sans condition, utiliser les préférences ou ne pas modifier le suivi.",
        "apihelp-undelete-example-page": "Annuler la suppression de la page <kbd>Main Page</kbd>.",
        "apihelp-undelete-example-revisions": "Annuler la suppression de deux révisions de la page <kbd>Main Page</kbd>.",
        "apihelp-upload-description": "Télécharger un fichier, ou obtenir l’état des téléchargements en cours.\n\nPlusieurs méthodes sont disponibles :\n* Télécharger directement le contenu du fichier, en utilisant le paramètre <var>$1file</var>.\n* Télécharger le fichier par morceaux, en utilsiant les paramètres <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var>.* Pour que le serveur MédiaWiki cherche un fichier depuis une URL, utiliser le paramètre <var>$1url</var>.\n* Terminer un téléchargement précédent qui a échoué à cause d’avertissements, en utilisant le paramètre <var>$1filekey</var>.\nNoter que le POST HTTP doit être fait comme un téléchargement de fichier (par ex. en utilisant <code>multipart/form-data</code>) en envoyant le <code>multipart/form-data</code>.",
        "apihelp-upload-param-comment": "Télécharger le commentaire. Utilisé aussi comme texte de la page initiale pour les nouveaux fichiers si <var>$1text</var> n’est pas spécifié.",
        "apihelp-upload-param-text": "Texte de page initiale pour les nouveaux fichiers.",
        "apihelp-upload-param-watch": "Suivre la page.",
-       "apihelp-upload-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas changer le suivi.",
+       "apihelp-upload-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l’utilisateur actuel, utiliser les préférences ou ne pas changer le suivi.",
        "apihelp-upload-param-ignorewarnings": "Ignorer tous les avertissements.",
        "apihelp-upload-param-file": "Contenu du fichier.",
        "apihelp-upload-param-url": "URL où chercher le fichier.",
        "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 &lt;xslt&gt; comme feuille de style. Ce devrait être une page du wiki dans l’espace de noms MediaWiki dont le nom de page se termine par « .xsl ».",
+       "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-xmlfm-description": "Extraire les données au format XML (affiché proprement en HTML).",
        "apihelp-yaml-description": "Extraire les données au format YAML.",
        "apihelp-yamlfm-description": "Extraire les données YAML (affiché proprement en HTML).",
        "api-format-title": "Résultat de l’API de MédiaWiki",
-       "api-format-prettyprint-header": "Vous regardez 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 format pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez format=$2.\n\nVoyez la [https://www.mediawiki.org/wiki/API documentation complète], ou l’ [[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
+       "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-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.",
index 6d3ed76..065ced3 100644 (file)
        "apihelp-main-param-action": "Que acción se realizará.",
        "apihelp-main-param-format": "O formato de saída.",
        "apihelp-main-param-maxlag": "O retardo máximo pode usarse cando MediaWiki está instalada nun cluster de base de datos replicadas. Para gardar accións que causen calquera retardo máis de replicación do sitio, este parámetro pode facer que o cliente espere ata que o retardo de replicación sexa menor que o valor especificado. No caso de retardo excesivo, é devolto o código de erro <samp>maxlag</samp> cunha mensaxe como <samp>esperando por $host: $lag segundos de retardo</samp>.<br />Para máis información, ver [[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]].",
+       "apihelp-main-param-smaxage": "Fixar a cabeceira <code>s-maxage</code> a esos segundos. Os erros nunca se gardan na caché.",
+       "apihelp-main-param-maxage": "Fixar a cabeceira <code>max-age</code> a esos segundos. Os erros nunca se gardan na caché.",
+       "apihelp-main-param-assert": "Verificar se o usuario está conectado como <kbd>usuario</kbd> ou ten a marca de <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Calquera valor dado aquí será incluído na resposta. Pode usarse para distingir peticións.",
        "apihelp-main-param-servedby": "Inclúa o nome do servidor que servía a solicitude nos resultados.",
        "apihelp-main-param-curtimestamp": "Incluir a marca de tempo actual no resultado.",
+       "apihelp-main-param-origin": "Cando se accede á API usando unha petición AJAX entre-dominios (CORS), inicializar o parámetro co dominio orixe. Isto debe incluírse en calquera petición pre-flight, e polo tanto debe ser parte da petición URI (non do corpo POST). Debe coincidir exactamente cunha das orixes na cabeceira <code>Origin</code>, polo que ten que ser fixado a algo como <kbd>https://en.wikipedia.org</kbd> ou <kbd>https://meta.wikimedia.org</kbd>. Se este parámetro non coincide coa cabeceira <code>Origin</code>, devolverase unha resposta 403. Se este parámetro coincide coa cabeceira <code>Origin</code> e a orixe está na lista branca, porase unha cabeceira <code>Access-Control-Allow-Origin</code>.",
+       "apihelp-main-param-uselang": "Linga a usar para a tradución de mensaxes. Pode consultarse unha lista de códigos en <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> con <kbd>siprop=languages</kbd>, ou especificando <kbd>user</kbd> coa preferencia de lingua do usuario actual, ou especificando <kbd>content</kbd> para usar a lingua do contido desta wiki.",
        "apihelp-block-description": "Bloquear un usuario.",
        "apihelp-block-param-user": "Nome de usuario, dirección ou rango de IPs que quere bloquear.",
+       "apihelp-block-param-expiry": "Tempo de caducidade. Pode ser relativo (p. ex.<kbd>5 meses</kbd> ou <kbd>2 semanas</kbd>) ou absoluto (p. ex. 2014-09-18T12:34:56Z</kbd>). Se se pon kbd>infinite</kbd>, <kbd>indefinite</kbd>, ou <kbd>never</kbd>, o bloqueo nunca caducará.",
        "apihelp-block-param-reason": "Motivo para o bloqueo.",
        "apihelp-block-param-anononly": "Bloquear só usuarios anónimos (é dicir, desactivar edicións anónimas desta dirección IP).",
        "apihelp-block-param-nocreate": "Previr a creación de contas.",
        "apihelp-block-param-autoblock": "Bloquear automaticamente o último enderezo IP utilizado, e calquera outro enderezo desde o que intente conectarse.",
+       "apihelp-block-param-noemail": "Impide que o usuario envíe correos electrónicos a través da wiki. (Require o permiso <code>blockemail</code>).",
+       "apihelp-block-param-hidename": "Ocultar o nome de usuario do rexistro de bloqueos. (Precisa do permiso <code>hideuser</code>).",
        "apihelp-block-param-allowusertalk": "Permitir que o usuario edite a súa propia páxina de conversa (depende de <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Se o usuario xa está bloqueado, sobreescribir o bloqueo existente.",
        "apihelp-block-param-watchuser": "Vixiar a páxina de usuario ou direccións IP e a de conversa deste usuario",
+       "apihelp-block-example-ip-simple": "Bloquear dirección IP <kbd>192.0.2.5</kbd> durante tres días coa razón <kbd>Primeiro aviso</kbd>.",
+       "apihelp-block-example-user-complex": "Bloquear indefinidamente ó usuario <kbd>Vándalo</kbd> coa razón <kbd>Vandalismo</kbd>, e impedir a creación de novas contas e envío de correos electrónicos.",
+       "apihelp-checktoken-description": "Verificar a validez dun identificador de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Tipo de identificador a probar.",
+       "apihelp-checktoken-param-token": "Símbolo a testar",
+       "apihelp-checktoken-param-maxtokenage": "Tempo máximo autorizado para o identificador, en segundos.",
+       "apihelp-checktoken-example-simple": "Verificar a validez de un identificador   <kbd>csrf</kbd>.",
        "apihelp-clearhasmsg-description": "Limpar a bandeira <code>hasmsg</code> para o usuario actual",
        "apihelp-clearhasmsg-example-1": "Limpar a bandeira <code>hasmsg</code> para o usuario actual",
+       "apihelp-compare-description": "Obter as diferencias entre dúas páxinas.\n\nDebe indicar un número de revisión, un título de páxina, ou un ID de páxina tanto para \"from\" como para \"to\".",
        "apihelp-compare-param-fromtitle": "Primeiro título para comparar.",
        "apihelp-compare-param-fromid": "Identificador da primeira páxina a comparar.",
        "apihelp-compare-param-fromrev": "Primeira revisión a comparar.",
        "apihelp-createaccount-param-name": "Nome de usuario.",
        "apihelp-createaccount-param-password": "Contrasinal (ignorado se <var>$1mailpassword</var> está activo)",
        "apihelp-createaccount-param-domain": "Dominio para autenticación externa (opcional)",
+       "apihelp-createaccount-param-token": "Símbolo de creación de conta obtido á primeira.",
        "apihelp-createaccount-param-email": "Enderezo de correo eletrónico do usuario (opcional).",
        "apihelp-createaccount-param-realname": "Nome real do usuario (opcional).",
        "apihelp-createaccount-param-mailpassword": "Se se establece calquera valor, enviarase un contrasinal aleatorio ao usuario.",
+       "apihelp-createaccount-param-reason": "Razón opcional de creación da conta para gardar nos rexistros.",
+       "apihelp-createaccount-param-language": "Código de lingua para usar como defecto polo usuario (de xeito opcional, usarase a lingua por defecto)",
        "apihelp-createaccount-example-pass": "Crear usuario <kbd>testuser</kbd> con contrasinal <kbd>test123</kbd>.",
        "apihelp-createaccount-example-mail": "Crear usuario <kbd>testmailuser</kbd>\"testmailuser\" e enviar por correo electrónico un contrasinal xenerado de forma aleatoria.",
        "apihelp-delete-description": "Borrar a páxina.",
@@ -48,7 +67,9 @@
        "apihelp-delete-param-pageid": "Identificador da páxina a eliminar. Non pode usarse xunto con <var>$1title</var>.",
        "apihelp-delete-param-reason": "Razón para o borrado. Se non se indica, usarase unha razón xenerada automaticamente.",
        "apihelp-delete-param-watch": "Engadir esta páxina á lista de vixilancia do usuario actual.",
+       "apihelp-delete-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
        "apihelp-delete-param-unwatch": "Eliminar esta páxina da lista de vixilancia do usuario actual.",
+       "apihelp-delete-param-oldimage": "Nome da imaxe antiga a borrar como se proporciona en [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
        "apihelp-delete-example-simple": "Borrar <kbd>Main Page</kbd>.",
        "apihelp-delete-example-reason": "Eliminar <kbd>Main Page</kbd>  coa razón <kbd>Preparing for move</kbd>.",
        "apihelp-disabled-description": "Este módulo foi desactivado.",
        "apihelp-edit-param-section": "Número de selección. O <kbd>0</kbd> é para a sección superior, <kbd>new</kbd> para unha sección nova.",
        "apihelp-edit-param-sectiontitle": "Título para unha nova sección.",
        "apihelp-edit-param-text": "Contido da páxina.",
+       "apihelp-edit-param-summary": "Resumo de edición. Tamén título de sección cando $1section=new e $1sectiontitle non está definido.",
        "apihelp-edit-param-minor": "Edición pequena.",
        "apihelp-edit-param-notminor": "Edición non pequena.",
        "apihelp-edit-param-bot": "Marcar esta edición como de bot.",
+       "apihelp-edit-param-basetimestamp": "Selo de tempo da revisión de base, usado para detectar conflitos de edición. Pode obterse con [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+       "apihelp-edit-param-starttimestamp": "Selo de tempo do comezo do proceso de edición, usado para detectar conflitos de edición. Pode obterse un valor axeitado usando <var>[[Special:ApiHelp/main|curtimestamp]]</var> cando se comeza o proceso de edición (p.ex. cando se carga o contido da páxina a editar).",
+       "apihelp-edit-param-recreate": "Ignorar todos os erros da páxina mentres está a ser borrada.",
        "apihelp-edit-param-createonly": "Non editar a páxina se xa existe.",
        "apihelp-edit-param-nocreate": "Amosar un mensaxe de erro se a páxina non existe",
        "apihelp-edit-param-watch": "Engadir esta páxina á lista de vixilancia do usuario actual.",
        "apihelp-edit-param-unwatch": "Eliminar esta páxina da lista de vixilancia do usuario actual.",
+       "apihelp-edit-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+       "apihelp-edit-param-md5": "A función hash MD5 do parámetro $1text, ou dos parámetros $1prependtext e $1appendtext concatenados. Se está definida, non se fará a edición ata que a función hash sexa correcta.",
        "apihelp-edit-param-prependtext": "Engadir este texto ao comezo da páxina. Sobreescribirase $1text.",
+       "apihelp-edit-param-appendtext": "Engadir este texto no final da páxina. Ignorar $1text.\n\nUse $1section=new para engadir unha nova sección, máis que este parámetro.",
+       "apihelp-edit-param-undo": "Desfacer esta revisión. Ignorar $1text, $1prependtext e $1appendtext.",
+       "apihelp-edit-param-undoafter": "Desfacer tódalas revisións dende $1undo ata esta. Se non está definido, só desfacer unha revisión.",
        "apihelp-edit-param-redirect": "Resolver redireccións automáticamente",
+       "apihelp-edit-param-contentformat": "Formato de serialización de contido utilizado para o texto de entrada.",
+       "apihelp-edit-param-contentmodel": "Modelo de contido para o novo contido.",
+       "apihelp-edit-param-token": "O identificador debería enviarse empre como o último parámetro, ou polo menos despois do parámetro $1text.",
        "apihelp-edit-example-edit": "Editar a páxina",
+       "apihelp-edit-example-prepend": "Antepor <kbd>_&#95;NOTOC_&#95;</kbd> a unha páxina.",
+       "apihelp-edit-example-undo": "Desfacer revisións 13579 a 13585 con resumo automático.",
        "apihelp-emailuser-description": "Enviar un correo electrónico a un usuario.",
        "apihelp-emailuser-param-target": "Usuario ó que lle mandar correo electrónico.",
        "apihelp-emailuser-param-subject": "Asunto.",
        "apihelp-emailuser-param-text": "Corpo do correo.",
        "apihelp-emailuser-param-ccme": "Enviarme unha copia deste correo.",
+       "apihelp-emailuser-example-email": "Enviar un correo electrónico ó usuario <kbd>Administrador da wiki</kbd> co texto <kbd>Contido</kbd>.",
        "apihelp-expandtemplates-description": "Expandir tódolos modelos en wikitexto.",
        "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-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-feedcontributions-description": "Devolve a lista de contribucións dun usuario.",
+       "apihelp-feedcontributions-param-feedformat": "O formato de alimentación.",
+       "apihelp-feedcontributions-param-user": "Para que usuarios recuperar as contribucións.",
+       "apihelp-feedcontributions-param-namespace": "Que espazo de nomes filtrar polas contribucións.",
        "apihelp-feedcontributions-param-year": "Desde o ano (e anteriores).",
        "apihelp-feedcontributions-param-month": "Desde o mes de (e anteriores).",
        "apihelp-feedcontributions-param-tagfilter": "Filtrar as contribucións que teñan estas etiquetas.",
        "apihelp-feedcontributions-param-newonly": "Mostrar só as edicións que crearon páxinas.",
        "apihelp-feedcontributions-param-showsizediff": "Mostrar diferenza de tamaño entre edicións.",
        "apihelp-feedcontributions-example-simple": "Mostrar as contribucións do usuario <kbd>Example</kbd>.",
+       "apihelp-feedrecentchanges-description": "Devolve un ficheiro de cambios recentes.",
+       "apihelp-feedrecentchanges-param-feedformat": "O formato da saída.",
+       "apihelp-feedrecentchanges-param-namespace": "Espazo de nomes ó que limitar os resultados.",
        "apihelp-feedrecentchanges-param-invert": "Tódolos nomes de espazos agás o seleccionado",
+       "apihelp-feedrecentchanges-param-associated": "Incluir o espazo de nomes asociado (conversa ou principal).",
        "apihelp-feedrecentchanges-param-days": "Días a limitar os resultados",
        "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados a visualizar.",
        "apihelp-feedrecentchanges-param-from": "Mostrar modificacións desde entón.",
        "apihelp-feedrecentchanges-param-showlinkedto": "Mostrar os cambios nas páxinas ligadas coa páxina seleccionada.",
        "apihelp-feedrecentchanges-example-simple": "Mostrar os cambios recentes",
        "apihelp-feedrecentchanges-example-30days": "Mostrar os cambios recentes limitados a 30 días",
+       "apihelp-feedwatchlist-description": "Devolve o fluxo dunha lista de vixiancia.",
+       "apihelp-feedwatchlist-param-feedformat": "O formato da saída.",
+       "apihelp-feedwatchlist-param-hours": "Lista as páxinas modificadas desde estas horas ata agora.",
+       "apihelp-feedwatchlist-param-linktosections": "Ligar directamente ás seccións modificadas se é posible.",
+       "apihelp-feedwatchlist-example-default": "Mostar o fluxo da lista de vixiancia.",
        "apihelp-feedwatchlist-example-all6hrs": "Amosar tódolos cambios feitos ás páxinas vixiadas nas últimas 6 horas.",
        "apihelp-filerevert-description": "Revertir o ficheiro a unha versión anterior.",
        "apihelp-filerevert-param-filename": "Nome de ficheiro final, sen o prefixo Ficheiro:",
        "apihelp-filerevert-param-comment": "Comentario de carga.",
        "apihelp-filerevert-param-archivename": "Nome de ficheiro da revisión á que reverter.",
+       "apihelp-filerevert-example-revert": "Reverter <kbd>Wiki.png</kbd> á versión do <kbd>2011-03-05T15:27:40Z</kbd>.",
        "apihelp-help-description": "Mostrar axuda para os módulos indicados.",
+       "apihelp-help-param-modules": "Módulos para mostar axuda (valores dos parámetros <var>acción</var> e <var>formato</var>, ou <kbd>principal</kbd>). Pode especificar submódulos con un <kbd>+</kbd>.",
        "apihelp-help-param-submodules": "Incluír axuda para os submódulos do módulo nomeado.",
        "apihelp-help-param-recursivesubmodules": "Incluír axuda para os submódulos de forma recursiva.",
        "apihelp-help-param-helpformat": "Formato de saída da axuda.",
+       "apihelp-help-param-wrap": "Incluír a saída nunha estrutura de resposta API estándar.",
        "apihelp-help-param-toc": "Incluír unha táboa de contidos na saída por HTML",
        "apihelp-help-example-main": "Axuda para o módulo principal",
        "apihelp-help-example-recursive": "Toda a axuda nunha páxina",
        "apihelp-help-example-help": "Axuda do módulo de axuda en si",
+       "apihelp-help-example-query": "Axuda para dous submódulos de consulta.",
        "apihelp-imagerotate-description": "Xirar unha ou máis imaxes.",
        "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-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": "Para importacións interwiki: importar a este espazo de nomes.",
        "apihelp-import-param-rootpage": "Importar como subpáxina desta páxina.",
+       "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-login-param-domain": "Dominio (opcional).",
+       "apihelp-login-param-token": "Identificador de conexión obtido na primeira petición.",
+       "apihelp-login-example-gettoken": "Recuperar un identificador de conexión.",
        "apihelp-login-example-login": "Identificarse",
        "apihelp-logout-description": "Terminar e limpar datos de sesión.",
+       "apihelp-logout-example-logout": "Cerrar a sesión do usuario actual",
        "apihelp-managetags-description": "Realizar tarefas de xestión relacionadas coa modificación de etiquetas.",
+       "apihelp-managetags-param-operation": "Que operación realizar:\n;create:Crear unha nova etiqueta de modificación para uso manual.\n;delete:Borar unha etiqueta de modificación da base de datos, incluíndo o borrado da etiqueta de todas as revisións, entradas de cambios recentes e entradas de rexistro onde estea a usarse.\n;activate:Activar unha etiqueta de modificación, permitindo que os usuarios a usen manualmente.\n;deactivate:Desactivar unha etiqueta de modificación, impedindo que os usuarios a usen manualmente.",
+       "apihelp-managetags-param-tag": "Etiqueta para crear, borrar, activar ou desactivar. Para a creación da etiqueta, a etiqueta non pode existir previamente. Para o borrado da etiqueta, a etiqueta debe existir. Para a activación da etiqueta, a etiqueta debe existir e non pode ser usada por unha extensión. Para desactivar unha etiqueta, a etiqueta debe estar activa e definida manualmente.",
+       "apihelp-managetags-param-reason": "Un motivo opcional para crear, borrar, activar ou desactivar a etiqueta.",
+       "apihelp-managetags-param-ignorewarnings": "Ignorar calquera aviso que apareza durante a operación.",
+       "apihelp-managetags-example-create": "Crear unha etiqueta chamada <kbd>publicidade</kbd> coa razón <kbd>Para usar en vixiancia de edicións</kbd>",
+       "apihelp-managetags-example-delete": "Borrar a etiqueta <kbd>vandalismo</kbd> coa razón <kbd>Erros ortográficos</kbd>",
+       "apihelp-managetags-example-activate": "Activar a etiqueta chamada <kbd>publicidade</kbd> coa razón <kbd>Para usar en vixiancia de edicións</kbd>",
+       "apihelp-managetags-example-deactivate": "Desactivar a etiqueta chamada <kbd>publicidade</kbd> coa razón <kbd>Xa non é necesaria</kbd>",
        "apihelp-move-description": "Mover unha páxina.",
        "apihelp-move-param-from": "Título da páxina que quere renomear. Non pode usarse xunto con <var>$1fromid</var>.",
        "apihelp-move-param-fromid": "Identificador da páxina que quere renomear. Non pode usarse xunto con <var>$1from</var>.",
        "apihelp-move-param-noredirect": "Non crear unha redirección.",
        "apihelp-move-param-watch": "Engadir a páxina e a redirección á páxina de vixiancia do usuario actual.",
        "apihelp-move-param-unwatch": "Eliminar a páxina e a redirección da páxina de vixiancia do usuario actual.",
+       "apihelp-move-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
        "apihelp-move-param-ignorewarnings": "Ignorar as advertencias.",
        "apihelp-move-example-move": "Mover <kbd>Títulomalo</kbd> a <kbd>Títulobo</kbd> sen deixar unha redirección.",
        "apihelp-opensearch-description": "Buscar no wiki mediante o protocolo OpenSearch.",
        "apihelp-opensearch-param-search": "Buscar texto.",
        "apihelp-opensearch-param-limit": "Número máximo de resultados a visualizar.",
        "apihelp-opensearch-param-namespace": "Espazo de nomes no que buscar.",
+       "apihelp-opensearch-param-suggest": "Non facer nada se <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> é falso.",
+       "apihelp-opensearch-param-redirects": "Como xestionar as redireccións:\n;return:Devolve a mesma redirección.\n;resolve:Devolve a páxina á que apunta. Pode devolver menos de $1limit resultados.\nPor razóns históricas, o valor por defecto para $1format=json é \"return\" e \"resolve\" para outros formatos.",
        "apihelp-opensearch-param-format": "O formato de saída.",
        "apihelp-opensearch-example-te": "Atopar páxinas que comezan por <kbd>Te</kbd>.",
+       "apihelp-options-description": "Cambiar as preferencias do usuario actual.\n\nSó se poden cambiar opcións que estean rexistradas no núcleo ou nunha das extensións instaladas, ou opcións con claves prefixadas con \"userjs-\" (previstas para ser usadas por scripts de usuario).",
        "apihelp-options-param-reset": "Reiniciar preferencias ás iniciais do sitio.",
+       "apihelp-options-param-resetkinds": "Lista de tipos de opcións a reinicializar cando a opción <var>$1reset</var> está definida.",
+       "apihelp-options-param-change": "Lista de cambios, con formato nome=valor (p. ex. skin=vector). O valor non pode ter caracteres de barra vertical. Se non se indica un valor (sen u signo igual), p. ex. nomeopcion|outraopcion|..., a opción será gardada co seu valor por defecto.",
+       "apihelp-options-param-optionname": "Nome dunha opción que debe ser fixado ó valor dado por <var>$1optionvalue</var>.",
+       "apihelp-options-param-optionvalue": "Valor da opción especificada por <var>$1optionname</var>, pode conter o caracter da barra vertical.",
        "apihelp-options-example-reset": "Restablecer tódaalas preferencias",
+       "apihelp-options-example-change": "Cambiar as preferencias <kbd>skin</kbd> and <kbd>hideminor</kbd>.",
+       "apihelp-options-example-complex": "Restaurar todas as preferencias, logo fixar <kbd>skin</kbd> e <kbd>nickname</kbd>.",
        "apihelp-paraminfo-description": "Obter información sobre módulos API.",
+       "apihelp-paraminfo-param-modules": "Lista de nomes de módulos (valores dos parámetros <var>acción</var e <var>formato</var>, ou <kbd>principal</kbd>). Pode especificar submódulos con <kbd>+</kbd>.",
+       "apihelp-paraminfo-param-helpformat": "Formato das cadeas de axuda.",
+       "apihelp-paraminfo-param-querymodules": "Lista dos nomes de módulos de consulta (valores dos parámetros <var>prop</var>, <var>meta</var> ou <var>list</var>). Use <kbd>$1modules=query+foo</kbd> no canto de <kbd>$1querymodules=foo</kbd>.",
+       "apihelp-paraminfo-param-mainmodule": "Obter información sobre o módulo principal (nivel superior). No canto use <kbd>$1modules=main</kbd>.",
+       "apihelp-paraminfo-param-pagesetmodule": "Obter información sobre o módulo pageset (proporcionando títulos= e amigos).",
+       "apihelp-paraminfo-param-formatmodules": "Lista dos nomes de módulo de formato (valores do parámetro <var>formato</var>). No canto use <var>$1modules</var>.",
+       "apihelp-paraminfo-example-1": "Amosar información para <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, e <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+       "apihelp-parse-param-title": "Título da páxina á que pertence o texto. Se non se indica, debe especificarse <var>$1contentmodel</var>, e [[API]] usarase como o título.",
+       "apihelp-parse-param-text": "Texto a analizar. Use <var>$1title</var> ou <var>$1contentmodel</var> para controlar o modelo de contido.",
+       "apihelp-parse-param-summary": "Resumo a analizar.",
+       "apihelp-parse-param-page": "Analizar o contido desta páxina. Non pode usarse de forma conxunta con <var>$1text</var> e <var>$1title</var>.",
+       "apihelp-parse-param-pageid": "Analizar o contido desta páxina. Ignora <var>$1page</var>.",
+       "apihelp-parse-param-redirects": "Se <var>$1page</var> ou <var>$1pageid</var> apuntar a unha redirección, resólvea.",
+       "apihelp-parse-param-oldid": "Analizar o contido desta revisión. Ignora <var>$1page</var> e <var>$1pageid</var>.",
+       "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-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-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-parse-example-text": "Analizar un wikitexto.",
+       "apihelp-parse-example-texttitle": "Analizar wikitexto, especificando o título da páxina.",
+       "apihelp-parse-example-summary": "Analizar un resumo.",
        "apihelp-patrol-description": "Patrullar unha páxina ou edición.",
+       "apihelp-patrol-param-rcid": "ID de modificación recente a vixiar.",
+       "apihelp-patrol-param-revid": "ID de revisión a vixiar.",
        "apihelp-patrol-example-rcid": "Patrullar un cambio recente",
        "apihelp-patrol-example-revid": "Patrullar unha revisión",
+       "apihelp-protect-description": "Cambiar o nivel de protección dunha páxina.",
        "apihelp-protect-param-title": "Título da páxina que quere (des)protexer. Non pode usarse xunto con $1pageid.",
        "apihelp-protect-param-pageid": "Identificador da páxina que quere (des)protexer. Non pode usarse xunto con $1title.",
+       "apihelp-protect-param-protections": "Lista dos niveis de protección, con formato <kbd>action=level</kbd> (p.ex. <kbd>edit=sysop</kbd>).\n\n<strong>Nota:</strong> Todas as accións que non estean listadas terán restriccións para ser eliminadas.",
+       "apihelp-protect-param-expiry": "Selos de tempo de caducidade. Se só se indica un selo de tempo, usarase para todas as proteccións. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, ou <kbd>never</kbd>, para unha protección sen caducidade.",
        "apihelp-protect-param-reason": "Razón para (des)protexer.",
+       "apihelp-protect-param-cascade": "Activar protección en cascada (p. ex. protexer páxinas incluídas nesta páxina). Ignorado se todos os niveis de protección proporcionados non permiten o uso en cascada.",
        "apihelp-protect-param-watch": "Se se define este parámetro, engadir a páxina que se (des)protexe á lista de vixilancia do usuario actual.",
+       "apihelp-protect-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
        "apihelp-protect-example-protect": "Protexer unha páxina",
+       "apihelp-protect-example-unprotect": "Desprotexer unha páxina poñendo as restricións a <kbd>all</kbd>.",
+       "apihelp-protect-example-unprotect2": "Desprotexer unha páxina quitando as restricións.",
+       "apihelp-purge-description": "Borrar a caché para os títulos indicados.\n\nPrecisa dunha petición POST se o usuario non está conectado.",
        "apihelp-purge-param-forcelinkupdate": "Actualizar as táboas de ligazóns.",
+       "apihelp-purge-param-forcerecursivelinkupdate": "Actualizar a táboa de ligazóns, e actualizar as táboas de ligazóns para calquera páxina que use esta páxina como modelo.",
        "apihelp-purge-example-simple": "Purgar a <kbd>Páxina Principal</kbd> e páxina da <kbd>API</kbd>.",
        "apihelp-purge-example-generator": "Purgar as primeiras 10 páxinas no espazo de nomes principal.",
+       "apihelp-query-description": "Consultar datos de e sobre MediaWiki.\n\nTodas as modificacións de datos primeiro teñen que facer unha busca para obter un identificador para evitar  abusos de sitios maliciosos.",
+       "apihelp-query-param-prop": "Que propiedades obter para as páxinas buscadas.",
+       "apihelp-query-param-list": "Que lista obter.",
+       "apihelp-query-param-meta": "Que metadatos obter.",
+       "apihelp-query-param-indexpageids": "Incluir una sección adicional de identificadores de páxina listando todos os IDs das páxinas devoltas.",
+       "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-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+allcategories-param-from": "Categoría pola que comezar a enumeración.",
+       "apihelp-query+allcategories-param-to": "Categoría pola que rematar a enumeración.",
+       "apihelp-query+allcategories-param-prefix": "Buscar todos os títulos de categoría que comezan con este valor.",
+       "apihelp-query+allcategories-param-dir": "Dirección na que ordenar.",
+       "apihelp-query+allcategories-param-min": "Devolver só categorías con polo menos este número de membros.",
+       "apihelp-query+allcategories-param-max": "Devolver só categorías con como moito este número de membros.",
+       "apihelp-query+allcategories-param-limit": "Cantas categorías devolver.",
+       "apihelp-query+allcategories-param-prop": "Que propiedades recuperar:\n;size: Engade o número de páxinas na categoría.\n;hidden: Marca as categorías que están ocultas con _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-example-size": "Listar categorías con información do número de páxinas en cada unha.",
+       "apihelp-query+allcategories-example-generator": "Obter información sobre a páxina de categoría para categorías que comezan por <kbd>List</kbd>.",
+       "apihelp-query+alldeletedrevisions-description": "Listar todas as revisións borradas por un usuario ou nun espazo de nomes.",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Só pode usarse con <var>$3user</var>.",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Non pode usarse con <var>$3user</var>.",
        "apihelp-query+alldeletedrevisions-param-start": "Selo de tempo para comezar a enumeración.",
        "apihelp-query+alldeletedrevisions-param-end": "Selo de tempo para rematar a enumeración.",
        "apihelp-query+alldeletedrevisions-param-user": "Só listar revisións deste usuario.",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "Non listar revisións deste usuario.",
        "apihelp-query+alldeletedrevisions-param-namespace": "Só listar páxinas neste espazo de nomes.",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Nota:</strong> Debido ó [[mw:Manual:$wgMiserMode|modo minimal]], ó usar á vez <var>$1user</var> e <var>$1namespace</var> pode devolver menos resultados de <var>$1limit</var> antes de continuar, en casos extremos, pode que non devolva resultados.",
+       "apihelp-query+alldeletedrevisions-param-generatetitles": "Usado como xenerador, xenera títulos no canto de IDs de revisión.",
        "apihelp-query+alldeletedrevisions-example-user": "Listar as últimas 50 contribucións borradas do usuario <kbd>Exemplo<kbd>.",
        "apihelp-query+alldeletedrevisions-example-ns-main": "Listar as 50 primeiras revisións borradas no espazo de nomes principal.",
+       "apihelp-query+allfileusages-description": "Lista todos os usos de ficheiro, incluído os que non existen.",
        "apihelp-query+allfileusages-param-from": "Título do ficheiro no que comezar a enumerar.",
        "apihelp-query+allfileusages-param-to": "Título do ficheiro no que rematar de enumerar.",
        "apihelp-query+allfileusages-param-prefix": "Buscar tódolos títulos de ficheiro que comezan con este valor.",
+       "apihelp-query+allfileusages-param-unique": "Mostrar só nomes de ficheiro distintos. Non pode usarse con $1prop=ids.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+       "apihelp-query+allfileusages-param-prop": "Que partes de información incluír:\n;ids:Engade o ID de páxina usada (non pode usarse con $1unique).\n;title:Engade o nome do ficheiro.",
        "apihelp-query+allfileusages-param-limit": "Número total de obxectos a devolver.",
        "apihelp-query+allfileusages-param-dir": "Dirección na cal listar.",
+       "apihelp-query+allfileusages-example-B": "Lista títulos de ficheiro, incluíndo os   eliminados, cos IDs de páxina dos que proveñen, comezando en <kbd>B</kbd>.",
        "apihelp-query+allfileusages-example-unique": "Listar títulos únicos de ficheiros.",
+       "apihelp-query+allfileusages-example-unique-generator": "Obter todos os títulos de ficheiro, marcando os eliminados.",
+       "apihelp-query+allfileusages-example-generator": "Obtén as páxinas que conteñen os ficheiros.",
        "apihelp-query+allimages-description": "Enumerar tódalas imaxes secuencialmente.",
-       "apihelp-query+allimages-param-sort": "Propiedade pol que ordenar.",
+       "apihelp-query+allimages-param-sort": "Propiedade pola que ordenar.",
        "apihelp-query+allimages-param-dir": "Dirección na cal listar.",
+       "apihelp-query+allimages-param-from": "Título da imaxe no que comezar a enumerar. Só pode usarse con $1sort=name.",
+       "apihelp-query+allimages-param-to": "Título da imaxe no que rematar a enumerar. Só pode usarse con $1sort=name.",
+       "apihelp-query+allimages-param-start": "Título do selo de tempo no que comezar a enumerar. Só pode usarse con $1sort=timestamp.",
+       "apihelp-query+allimages-param-end": "Título do selo de tempo no que rematar a enumerar. Só pode usarse con $1sort=timestamp.",
+       "apihelp-query+allimages-param-prefix": "Buscar todas as imaxes cuxo título comeza por este valor. Só pode usarse con $1sort=name.",
+       "apihelp-query+allimages-param-minsize": "Limitar a imaxes con polo menos este número de bytes.",
+       "apihelp-query+allimages-param-maxsize": "Limitar a imaxes con como máximo este número de bytes.",
+       "apihelp-query+allimages-param-sha1": "Función hash SHA1 da imaxe. Invalida $1sha1base36.",
+       "apihelp-query+allimages-param-sha1base36": "Función hash SHA1 da imaxe en base 36 (usada en MediaWiki).",
        "apihelp-query+allimages-param-user": "Mostrar só ficheiros subidos por este usuario. Só pode usarse con $1sort=timestamp. Non se pode usar xunto a $1filterbots.",
        "apihelp-query+allimages-param-filterbots": "Como filtrar ficheiros subidos por bots. Só pode usarse con $1sort=timestamp. Non pode usarse xunto con $1user.",
        "apihelp-query+allimages-param-mime": "Que tipos MIME  buscar, por exemplo <kbd>imaxe/jpeg</kbd>.",
        "apihelp-query+allimages-param-limit": "Cantas imaxes mostar en total.",
+       "apihelp-query+allimages-example-B": "Mostrar unha lista de ficheiros que comezan por <kbd>B</kbd>.",
+       "apihelp-query+allimages-example-recent": "Mostrar unha lista de ficheiros subidos recentemente, similares a [[Special:NewFiles]].",
+       "apihelp-query+allimages-example-mimetypes": "Mostrar unha lista de ficheiros con tipo MIME <kbd>image/png</kbd> ou <kbd>image/gif</kbd>",
+       "apihelp-query+allimages-example-generator": "Mostar información sobre catro ficheiros que comecen pola letra <kbd>T</kbd>.",
        "apihelp-query+alllinks-description": "Numerar tódalas ligazóns que apuntan a un nome de espazos determinado.",
        "apihelp-query+alllinks-param-from": "Título da ligazón na que comezar a enumerar.",
        "apihelp-query+alllinks-param-to": "Título da ligazón na que rematar de enumerar.",
        "apihelp-query+alllinks-param-prefix": "Buscar tódolos títulos ligados que comezan con este valor.",
+       "apihelp-query+alllinks-param-unique": "Mostrar só títulos ligados distintos. Non pode usarse con <kbd>$1prop=ids</kbd>.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+       "apihelp-query+alllinks-param-prop": "Que partes de información incluír:\n;ids: Engade o ID da páxina da ligazón (non pode usarse con <var>$1unique</var>).\n;título: Engade o título da ligazón.",
        "apihelp-query+alllinks-param-namespace": "Espazo de nomes a enumerar.",
        "apihelp-query+alllinks-param-limit": "Número total de obxectos a devolver.",
        "apihelp-query+alllinks-param-dir": "Dirección na cal listar.",
+       "apihelp-query+alllinks-example-B": "Lista os títulos ligados, incluíndo os eliminados, cos ID das páxinas das que proveñen, comezando en <kbd>B</kbd>.",
        "apihelp-query+alllinks-example-unique": "Listar títulos ligados únicos",
+       "apihelp-query+alllinks-example-unique-generator": "Obtén tódolos títulos ligados, marcando  os eliminados.",
+       "apihelp-query+alllinks-example-generator": "Obtén as páxinas que conteñen as ligazóns.",
+       "apihelp-query+allmessages-description": "Devolver mensaxes deste sitio.",
+       "apihelp-query+allmessages-param-messages": "Que mensaxes devolver. <kbd>*</kbd> (por defecto) significa todas as mensaxes",
        "apihelp-query+allmessages-param-prop": "Que propiedades obter.",
+       "apihelp-query+allmessages-param-enableparser": "Marcar para activar o analizador, isto preprocesará o texto wiki da mensaxe (substituir palabras máxicas, xestionar modelo, etc.)",
+       "apihelp-query+allmessages-param-nocontent": "Se se marca, non inclúe o contido das mensaxes na saída.",
+       "apihelp-query+allmessages-param-includelocal": "Tamén inclúe mensaxes locais, p.ex. mensaxes que non existen no software pero existen como unha páxina MediaWiki:. \nIsto lista todas as páxinas MediaWiki:, polo que tamén listará as que non son realmente mensaxes como [[MediaWiki:Common.js|Common.js]].",
        "apihelp-query+allmessages-param-args": "Argumentos a substituír na mensaxe.",
        "apihelp-query+allmessages-param-filter": "Retornar só mensaxes con nomes que conteñan esta cadea.",
+       "apihelp-query+allmessages-param-customised": "Devolver só mensaxes neste estado de personalización.",
        "apihelp-query+allmessages-param-lang": "Retornar mensaxes nesta lingua.",
        "apihelp-query+allmessages-param-from": "Retornar mensaxes que comezan nesta mensaxe.",
        "apihelp-query+allmessages-param-to": "Retornar mensaxes que rematan nesta mensaxe.",
+       "apihelp-query+allmessages-param-title": "Nome de páxina a usar como contexto cando se analice a mensaxe (para a opción $1enableparser)",
+       "apihelp-query+allmessages-param-prefix": "Devolver mensaxes con este prefixo.",
        "apihelp-query+allmessages-example-ipb": "Mostar mensaxes que comecen por <kbd>ipb-</kbd>.",
+       "apihelp-query+allmessages-example-de": "Mostrar mensaxes <kbd>august</kbd> e <kbd>mainpage</kbd> en Alemán.",
        "apihelp-query+allpages-description": "Numerar tódalas páxinas secuencialmente nun espazo de nomes determinado.",
        "apihelp-query+allpages-param-from": "Título da páxina na que comezar a enumerar.",
        "apihelp-query+allpages-param-to": "Título da páxina na que rematar de enumerar.",
        "apihelp-query+allpages-param-prefix": "Buscar tódolos títulos de páxinas que comezan con este valor.",
        "apihelp-query+allpages-param-namespace": "Espazo de nomes a enumerar.",
        "apihelp-query+allpages-param-filterredir": "Que páxinas listar.",
+       "apihelp-query+allpages-param-minsize": "Limitar a páxinas con polo menos este número de bytes.",
+       "apihelp-query+allpages-param-maxsize": "Limitar a páxinas con como máximo este número de bytes.",
        "apihelp-query+allpages-param-prtype": "Limitar a só protección de páxinas.",
        "apihelp-query+allpages-param-prlevel": "Filtrar proteccións baseándose no nivel de protección (debe empregarse có parámetro $1prtype= ).",
+       "apihelp-query+allpages-param-prfiltercascade": "Filtrar proteccións baseadas en cascada (ignoradas se $1prtype non ten valor).",
        "apihelp-query+allpages-param-limit": "Número total de páxinas a devolver.",
        "apihelp-query+allpages-param-dir": "Dirección na cal listar.",
+       "apihelp-query+allpages-param-filterlanglinks": "Filtro baseado en si unha páxina ten ligazóns de lingua. Decátese de que esto pode non considerar as ligazóns de lingua engadidas polas extensións.",
+       "apihelp-query+allpages-param-prexpiry": "Que finalización de protección pola que filtrar a páxina:\n;indefinida: Só obter páxinas coa finalización de protección indefinida.\n;definite: Só obter páxinas cunha finalización de protección definida.\n;all: Obter páxinas con calquera finalización de protección.",
        "apihelp-query+allpages-example-B": "Mostrar unha lista de páxinas que comezan pola letra <kbd>B</kbd>.",
        "apihelp-query+allpages-example-generator": "Mostrar inforfmación sobre 4 páxinas que comecen pola letra <kbd>T</kbd>.",
+       "apihelp-query+allpages-example-generator-revisions": "Motrar o contido das dúas primeiras páxinas que non sexan redirección que comecen por <kbd>Re</kbd>.",
        "apihelp-query+allredirects-description": "Lista tódalas redireccións a un espazo de nomes.",
        "apihelp-query+allredirects-param-from": "Título da redirección na que comezar a enumerar.",
        "apihelp-query+allredirects-param-to": "Título da redirección na que rematar de enumerar.",
+       "apihelp-query+allredirects-param-prefix": "Buscar todas as páxinas que comecen con este valor.",
+       "apihelp-query+allredirects-param-unique": "Só mostrar páxinas obxectivo distintas. Non pode usarse con $1prop=ids|fragment|interwiki.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+       "apihelp-query+allredirects-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina da redirección (non pode usarse con <var>$1unique</var>).\n;title:Engade o título da redirección.\n;fragment:Engade o fragmento da redirección, se o hai (non pode usarse con <var>$1unique</var>).\n;interwiki:Engade o prefixo interwiki da redirección, se o hai (non pode usarse con <var>$1unique</var>).",
        "apihelp-query+allredirects-param-namespace": "Espazo de nomes a enumerar.",
        "apihelp-query+allredirects-param-limit": "Número total de obxectos a devolver.",
        "apihelp-query+allredirects-param-dir": "Dirección na cal listar.",
+       "apihelp-query+allredirects-example-B": "Lista as páxinas obxectivo, incluíndo as eliminadas, cos ID das páxinas das que proveñen, comezando en <kbd>B</kbd>.",
+       "apihelp-query+allredirects-example-unique": "Lista páxinas obxectivo únicas.",
+       "apihelp-query+allredirects-example-unique-generator": "Obtén tódalas páxinas obxectivo, marcando as eliminadas.",
+       "apihelp-query+allredirects-example-generator": "Obtén as páxinas que conteñen as redireccións.",
+       "apihelp-query+alltransclusions-description": "Listar todas as transclusións (páxinas integradas usando &#123;&#123;x&#125;&#125;), incluíndo as eliminadas.",
        "apihelp-query+alltransclusions-param-from": "Título da transclusión na que comezar a enumerar.",
        "apihelp-query+alltransclusions-param-to": "Título da transclusión na que rematar de enumerar.",
+       "apihelp-query+alltransclusions-param-prefix": "Buscar todos os títulos transcluídos que comezan con este valor.",
+       "apihelp-query+alltransclusions-param-unique": "Mostrar só títulos transcluídos distintos. Non pode usarse con <kbd>$1prop=ids</kbd>.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+       "apihelp-query+alltransclusions-param-prop": "Que partes de información incluír:\n;ids: Engade o ID da páxina da páxina transcluída (non pode usarse con $1unique).\n;title: Engade o título da transclusión.",
        "apihelp-query+alltransclusions-param-namespace": "Nome de espazos a numerar.",
+       "apihelp-query+alltransclusions-param-limit": "Número total de obxectos a devolver.",
+       "apihelp-query+alltransclusions-param-dir": "Dirección na cal listar.",
+       "apihelp-query+alltransclusions-example-B": "Lista os títulos transcluídos, incluíndo os eliminados, cos ID das páxinas das que proveñen, comezando en <kbd>B</kbd>.",
+       "apihelp-query+alltransclusions-example-unique": "Lista os títulos transcluídos únicos.",
+       "apihelp-query+alltransclusions-example-unique-generator": "Obtén tódolos títulos transcluídos, marcando  os eliminados.",
+       "apihelp-query+alltransclusions-example-generator": "Obtén as páxinas que conteñen as transclusións.",
        "apihelp-query+allusers-description": "Enumerar tódolos usuarios rexistrados.",
+       "apihelp-query+allusers-param-from": "Nome de usuario para comezar a enumeración",
+       "apihelp-query+allusers-param-to": "Nome de usuario para rematar a enumeración.",
+       "apihelp-query+allusers-param-prefix": "Buscar tódolos nomes de usuario que comezan con este valor.",
+       "apihelp-query+allusers-param-dir": "Dirección na que ordenar.",
+       "apihelp-query+allusers-param-group": "Só incluír os usuarios nos grupos dados.",
        "apihelp-query+allusers-param-excludegroup": "Excluír usuarios nos grupos dados.",
+       "apihelp-query+allusers-param-rights": "Incluír só ós usuarios cos dereitos dados. Non se inclúen grupo implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+       "apihelp-query+allusers-param-prop": "Que información incluír:\n;blockinfo:Engade información sobre o bloque actual do usuario.\n;groups:Lista de grupos nos que está o usuario. Isto usa máis recursos no servidor e pode devolver menos resultados que o límite.\n;implicitgroups:Lista todos os grupos ós que usuario pertence de forma automática.\n;rights:Lista os dereitos que ten o usuario.\n;editcount:Engade o número de edicións do usuario.\n;registration:Engade o selo de tempo do momento no que se rexistrou o usuario, se está dispoñible (pode ser branco).",
+       "apihelp-query+allusers-param-limit": "Número total de nomes de usuario a devolver.",
        "apihelp-query+allusers-param-witheditsonly": "Só listar usuarios que teñan feito edicións.",
+       "apihelp-query+allusers-param-activeusers": "Só listar usuarios activos {{PLURAL:$1|no último día|nos $1 últimos días}}.",
+       "apihelp-query+allusers-example-Y": "Listar usuarios que comecen por <kbd>Y</kbd>.",
+       "apihelp-query+backlinks-description": "Atopar todas as páxinas que ligan coa páxina dada.",
+       "apihelp-query+backlinks-param-title": "Título a buscar. Non pode usarse xunto con <var>$1pageid</var>.",
+       "apihelp-query+backlinks-param-pageid": "Identificador de páxina a buscar. Non pode usarse xunto con <var>$1title</var>.",
+       "apihelp-query+backlinks-param-namespace": "Espazo de nomes a enumerar.",
+       "apihelp-query+backlinks-param-dir": "Dirección na cal listar.",
+       "apihelp-query+backlinks-param-filterredir": "Como filtrar as redireccións. Se o valor é <kbd>nonredirects</kbd> cando <var>$1redirect</var> está activa, só se aplica ó segundo nivel.",
+       "apihelp-query+backlinks-param-limit": "Cantas páxinas devolver. Se <var>$1redirect</var> está activa, aplícase o límite a cada nivel de forma separada (isto significa que poden devolverse ata 2 * <var>$1limit</var> resultados).",
+       "apihelp-query+backlinks-param-redirect": "Se a ligazón sobre unha páxina é unha redirección, atopa tamén todas as páxinas que ligan con esa redirección. O límite máximo divídese á metade.",
+       "apihelp-query+backlinks-example-simple": "Mostrar ligazóns á <kbd>Páxina principal<kbd>.",
+       "apihelp-query+backlinks-example-generator": "Obter a información das páxinas que ligan á <kbd>Páxina principal<kbd>.",
+       "apihelp-query+blocks-description": "Listar todos os usuarios e direccións IP bloqueados.",
+       "apihelp-query+blocks-param-start": "Selo de tempo para comezar a enumeración.",
+       "apihelp-query+blocks-param-end": "Selo de tempo para rematar a enumeración.",
+       "apihelp-query+blocks-param-ids": "Lista de IDs de bloque a listar (opcional).",
+       "apihelp-query+blocks-param-users": "Lista de usuarios a buscar (opcional).",
+       "apihelp-query+blocks-param-ip": "Obter todos os bloques aplicables a esta IPs ou a este rango CIDR, incluíndo bloques de rangos.\nNon pode usarse xunto con <var>$3users</var>. Os rangos CIDR maiores que IPv4/$1 ou IPv6/$2 non se aceptan.",
+       "apihelp-query+blocks-param-limit": "Número máximo de bloques a listar.",
+       "apihelp-query+blocks-param-show": "Só mostrar elementos correspondentes a eses criterios.\nPor exemplo, para ver só bloques indefinidos en direccións IP, ponga <kbd>$1show=ip|!temp</kbd>.",
+       "apihelp-query+blocks-example-simple": "Listar bloques.",
+       "apihelp-query+blocks-example-users": "Lista de bloques de usuarios <kbd>Alice</kbd> e <kbd>Bob</kbd>.",
+       "apihelp-query+categories-description": "Listar todas as categorías ás que pertencen as páxinas.",
+       "apihelp-query+categories-param-prop": "Que propiedades adicionais obter para cada categoría:\n;sortkey:Engade a clave de ordenación (cadea hexadecimal) e o prefixo da clave de ordenación (parte lexible) da categoría.\n;timestamp:Engade o selo de tempo de cando se engadíu a categoría.\n;hidden:Pon unha marca nas categorías que están ocultas con _&#95;HIDDENCAT_&#95;.",
        "apihelp-query+categories-param-show": "Tipo de categorías a amosar.",
+       "apihelp-query+categories-param-limit": "Cantas categorías devolver.",
+       "apihelp-query+categories-param-categories": "Listar só esas categorías. Útil para verificar se unha páxina concreta está nunha categoría determinada.",
+       "apihelp-query+categories-param-dir": "Dirección na cal listar.",
+       "apihelp-query+categories-example-simple": "Obter a lista de categorías ás que pertence a páxina <kbd>Albert Einstein</kbd>",
+       "apihelp-query+categories-example-generator": "Obter a información de todas as categorías usadas na páxina <kbd>Albert Einstein</kbd>.",
+       "apihelp-query+categoryinfo-description": "Devolver información sobre as categorías dadas.",
+       "apihelp-query+categoryinfo-example-simple": "Obter información sobre <kbd>Category:Foo</kbd> e <kbd>Category:Bar</kbd>",
        "apihelp-query+categorymembers-description": "Listar tódalas páxinas nunha categoría determinada.",
+       "apihelp-query+categorymembers-param-title": "Que categoría enumerar (obrigatorio). Debe incluír o prefixo <kbd>{{ns:category}}:</kbd>. Non pode usarse xunto con <var>$1pageid</var>.",
+       "apihelp-query+categorymembers-param-pageid": "ID de páxina da categoría a enumerar. Non se pode usar xunto con <var>$1title</var>.",
+       "apihelp-query+categorymembers-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina.\n;title:Engade o título e o ID do espazo de nomes da páxina.\n;sortkey:Engade a clave de ordenación usada para ordenala na categoría (cadea hexadecimal).\n;sortkeyprefix:Engade o prefixo da clave de ordenación usado para ordenala na categoría (parte lexible da clave de ordenación).\n;type:Engade o tipo no que foi categorizado a páxina (páxina, subcategoría ou ficheiro)\n;timestamp:Engade o selo de tempo no que foi incluída a páxina.",
+       "apihelp-query+categorymembers-param-namespace": "Só incluír páxinas nestes espazos de nomes. Decátese de que poden usarse  <kbd>$1type=subcat</kbd> ou <kbd>$1type=file</kbd> no canto de <kbd>$1namespace=14</kbd> ou <kbd>6</kbd>.",
+       "apihelp-query+categorymembers-param-type": "Que tipo de membros da categoría incluír. Ignorado cando está activo <kbd>$1sort=timestamp</kbd>.",
        "apihelp-query+categorymembers-param-limit": "Máximo número de páxinas a retornar.",
+       "apihelp-query+categorymembers-param-sort": "Propiedade pola que ordenar.",
+       "apihelp-query+categorymembers-param-dir": "En que dirección ordenar.",
+       "apihelp-query+categorymembers-param-start": "Selo de tempo para comezar o listado. Só pode usarse con <kbd>$1sort=timestamp</kbd>.",
+       "apihelp-query+categorymembers-param-end": "Selo de tempo co que rematar o listado. Só pode usarse con <kbd>$1sort=timestamp</kbd>.",
+       "apihelp-query+categorymembers-param-starthexsortkey": "Chave de ordenación coa que comezar o listado, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
+       "apihelp-query+categorymembers-param-endhexsortkey": "Chave de ordenación coa que rematar o listado, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "Prefixo da chave de ordenación coa que comezar o listado. Pode usarse só con <kbd>$1sort=sortkey</kbd>. Ignórase <var>$1starthexsortkey</var>.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "Prefixo da chave de ordenación ANTES de rematar o listado (e non a, se existe este valor entón non será incluído!). Pode usarse só con <kbd>$1sort=sortkey</kbd>. Ignórase $1endhexsortkey.",
+       "apihelp-query+categorymembers-param-startsortkey": "Usar $1starthexsortkey no canto.",
+       "apihelp-query+categorymembers-param-endsortkey": "Usar $1endhexsortkey no canto.",
+       "apihelp-query+categorymembers-example-simple": "Obter as dez primeiras páxinas de <kbd>Category:Physics</kbd>.",
+       "apihelp-query+categorymembers-example-generator": "Obter a información das primeiras dez páxinas de <kbd>Category:Physics</kbd>.",
+       "apihelp-query+contributors-description": "Obter a lista de contribuidores conectados e o número de contribuidores anónimos dunha páxina.",
+       "apihelp-query+contributors-param-group": "Incluír só ós usuarios dos grupos dados. Non se inclúen grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
        "apihelp-query+contributors-param-excludegroup": "Excluír usuarios nos grupos dados. Non se inclúen grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+       "apihelp-query+contributors-param-rights": "Incluír só ós usuarios cos dereitos dados. Non se inclúen os dereitos dados a grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+       "apihelp-query+contributors-param-excluderights": "Excluír usuarios cos dereitos dados. Non se inclúen os dereitos dados a grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+       "apihelp-query+contributors-param-limit": "Número total de contribuidores a devolver.",
+       "apihelp-query+contributors-example-simple": "Mostrar os contribuidores á páxina <kbd>Main Page</kbd>.",
+       "apihelp-query+deletedrevisions-description": "Obter a información da revisión eliminada.\n\nPode usarse de varias formas:\n#Obter as revisións borradas dun conxunto de páxinas, indicando os títulos ou os IDs das páxinas. Ordenado por título e selo de tempo.\n#Obter datos sobre un conxunto de revisións borradas, indicando os seus IDs e os seus IDs de revisión. Ordenado por ID de revisión.",
+       "apihelp-query+deletedrevisions-param-start": "Selo de tempo no que comezar a enumeración. Ignorado cando se está procesando unha lista de IDs de revisións.",
+       "apihelp-query+deletedrevisions-param-end": "Selo de tempo no que rematar a enumeración. Ignorado cando se está procesando unha lista de IDs de revisións.",
+       "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+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
+       "apihelp-query+deletedrevs-param-start": "Selo de tempo no que comezar a enumeración.",
+       "apihelp-query+deletedrevs-param-end": "Selo de tempo para rematar a enumeración.",
+       "apihelp-query+deletedrevs-param-from": "Comezar listado neste título.",
+       "apihelp-query+deletedrevs-param-to": "Rematar listado neste título.",
        "apihelp-query+deletedrevs-param-prefix": "Buscar tódolos títulos de páxina que comezan con este valor.",
        "apihelp-query+deletedrevs-param-unique": "Só listar unha revisión por cada páxina.",
        "apihelp-query+deletedrevs-param-tag": "Só listar revisións marcadas con esta etiqueta.",
        "apihelp-query+deletedrevs-param-excludeuser": "Non listar revisións deste usuario.",
        "apihelp-query+deletedrevs-param-namespace": "Só listar páxinas neste espazo de nomes.",
        "apihelp-query+deletedrevs-param-limit": "Máximo número de revisións a listar.",
+       "apihelp-query+deletedrevs-example-mode1": "Listar as últimas revisións borradas das páxinas <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, con contido (modo 1).",
        "apihelp-query+deletedrevs-example-mode2": "Listar as últimas 50 contribucións borradas de <kbd>Bob</kbd> (modo 2).",
        "apihelp-query+deletedrevs-example-mode3-main": "Listar as primeiras 50 revisións borradas no espazo de nomes principal (modo 3)",
+       "apihelp-query+deletedrevs-example-mode3-talk": "Listar as primeiras 50 páxinas no espazo de nomes {{ns:talk}} (modo 3).",
        "apihelp-query+disabled-description": "Este módulo de consulta foi desactivado.",
+       "apihelp-query+duplicatefiles-description": "Listar todos os ficheiros que son duplicados dos fichieros dados baseado nos valores da función hash.",
        "apihelp-query+duplicatefiles-param-limit": "Cantos ficheiros duplicados devolver.",
        "apihelp-query+duplicatefiles-param-dir": "Dirección na cal listar.",
        "apihelp-query+duplicatefiles-param-localonly": "Só buscar por ficheiros no repositorio local.",
        "apihelp-query+duplicatefiles-example-simple": "Buscar duplicados de [[:File:Albert Einstein Head.jpg]]",
        "apihelp-query+duplicatefiles-example-generated": "Buscar duplicados de tódolos ficheiros",
+       "apihelp-query+embeddedin-description": "Atopar todas as páxinas que inclúen (por transclusión) o título dado.",
        "apihelp-query+embeddedin-param-title": "Título a buscar. Non pode usarse xunto con $1pageid.",
        "apihelp-query+embeddedin-param-pageid": "Identificador de páxina a buscar. Non pode usarse xunto con $1title.",
        "apihelp-query+embeddedin-param-namespace": "Espazo de nomes a enumerar.",
        "apihelp-query+embeddedin-param-dir": "Dirección na cal listar.",
        "apihelp-query+embeddedin-param-filterredir": "Como filtrar para redireccións.",
        "apihelp-query+embeddedin-param-limit": "Número total de páxinas a devolver.",
+       "apihelp-query+embeddedin-example-simple": "Mostrar as páxinas que inclúan <kbd>Template:Stub</kbd>.",
+       "apihelp-query+embeddedin-example-generator": "Obter información sobre as páxinas que inclúen <kbd>Template:Stub</kbd>.",
+       "apihelp-query+extlinks-description": "Devolve todas as URLs externas (sen ser interwikis) das páxinas dadas.",
        "apihelp-query+extlinks-param-limit": "Cantas ligazóns devolver.",
+       "apihelp-query+extlinks-param-protocol": "Protocolo da URL. Se está baleiro e está activo <var>$1query</var>, o protocolo é <kbd>http</kbd>. Deixar esa variable e a <var>$1query</var> baleiras para listar todas as ligazóns externas.",
+       "apihelp-query+extlinks-param-query": "Buscar cadea sen protocolo. Útil para verificar se unha páxina determinada contén unha URL externa determinada.",
+       "apihelp-query+extlinks-param-expandurl": "Expandir as URLs relativas a un protocolo co protocolo canónico.",
        "apihelp-query+extlinks-example-simple": "Obter unha de ligazóns externas á <kbd>Páxina Principal<kbd>.",
        "apihelp-query+exturlusage-description": "Enumerar páxinas que conteñen unha dirección URL dada.",
+       "apihelp-query+exturlusage-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina.\n;title:Engade o título e o ID do espazo de nomes da páxina.\n;url:Engade a URL usada na páxina.",
+       "apihelp-query+exturlusage-param-protocol": "Protocolo da URL. Se está baleiro e está activo <var>$1query</var>, o protocolo é <kbd>http</kbd>. Deixar esa variable e a <var>$1query</var> baleiras para listar todas as ligazóns externas.",
+       "apihelp-query+exturlusage-param-query": "Buscar unha cadea sen protocolo. Ver [[Special:LinkSearch]]. Deixar baleira para listar todas as ligazóns externas.",
        "apihelp-query+exturlusage-param-namespace": "Espazo de nomes a enumerar.",
        "apihelp-query+exturlusage-param-limit": "Cantas páxinas devolver.",
+       "apihelp-query+exturlusage-param-expandurl": "Expandir as URLs relativas a un protocolo co protocolo canónico.",
        "apihelp-query+exturlusage-example-simple": "Mostrar páxinas ligando a <kbd>http://www.mediawiki.org</kbd>.",
+       "apihelp-query+filearchive-description": "Enumerar secuencialmente todos os ficheiros borrados.",
+       "apihelp-query+filearchive-param-from": "Título da imaxe coa que comezar a enumeración.",
+       "apihelp-query+filearchive-param-to": "Título da imaxe coa que rematar a enumeración.",
        "apihelp-query+filearchive-param-prefix": "Buscar tódolos títulos de imaxes que comezan con este valor.",
        "apihelp-query+filearchive-param-limit": "Cantas imaxes devolver en total.",
        "apihelp-query+filearchive-param-dir": "Dirección na cal listar.",
+       "apihelp-query+filearchive-param-sha1": "Función hash SHA1 da imaxe. Invalida $1sha1base36.",
+       "apihelp-query+filearchive-param-sha1base36": "Función hash SHA1 da imaxe en base 36 (usado en MediaWiki).",
        "apihelp-query+filearchive-example-simple": "Mostrar unha lista de tódolos fichieiros eliminados.",
+       "apihelp-query+filerepoinfo-description": "Devolver a meta información sobre os repositorios de imaxes configurados na wiki.",
+       "apihelp-query+filerepoinfo-param-prop": "Que propiedades do repositorio mostrar (pode haber máis dispoñible nalgunhas wikis):\n;apiurl:URL ó API do repositorio - útil para obter información das imaxes no host.\n;name:A clave do repositorio - usada p. ex. nas variables de retorno de <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e [[Special:ApiHelp/query+imageinfo|imageinfo]]\n;displayname:O nome lexible do wiki repositorio.\n;rooturl:URL raíz dos camiños de imaxe.\n;local:Se o repositorio é o repositorio local ou non.",
        "apihelp-query+filerepoinfo-example-simple": "Obter infomación sobre os repositorios de ficheiros",
        "apihelp-query+fileusage-description": "Atopar tódalas páxinas que usan os ficheiros dados.",
+       "apihelp-query+fileusage-param-prop": "Que propiedades obter:\n;pageid:ID de cada páxina.\n;título:Título de cada páxina.\n;redirect:Marca de se a páxina é unha redirección.",
        "apihelp-query+fileusage-param-namespace": "Só incluír páxinas nestes espazos de nomes.",
        "apihelp-query+fileusage-param-limit": "Cantos mostrar.",
+       "apihelp-query+fileusage-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
        "apihelp-query+fileusage-example-simple": "Obter unha lista de páxinas usando [[:File:Example.jpg]]",
        "apihelp-query+fileusage-example-generator": "Obter infomación sobre páxinas que usan [[:File:Example.jpg]]",
        "apihelp-query+imageinfo-description": "Devolve información de ficheiros e historial de subidas.",
-       "apihelp-query+imageinfo-paramvalue-prop-user": "Engade o usuario que subeu cada versión de ficheiro.",
+       "apihelp-query+imageinfo-param-prop": "Que información do ficheiro obter:",
+       "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Engade selo de tempo á versión subida.",
+       "apihelp-query+imageinfo-paramvalue-prop-user": "Engade o usuario que subiu cada versión do ficheiro.",
+       "apihelp-query+imageinfo-paramvalue-prop-userid": "Engade o ID de usuario que subiu cada versión do ficheiro.",
        "apihelp-query+imageinfo-paramvalue-prop-comment": "Comentario da versión.",
+       "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Analizar o comentario da versión.",
+       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Engade o título canónico do ficheiro.",
+       "apihelp-query+imageinfo-paramvalue-prop-url": "Devolve a URL ó ficheiro e á páxina de descrición.",
+       "apihelp-query+imageinfo-paramvalue-prop-size": "Engade o tamaño do ficheiro en bytes e a altura, a anchura e o contador de páxina (se é aplicable).",
+       "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias para o tamaño.",
+       "apihelp-query+imageinfo-paramvalue-prop-sha1": "Engade a función hash SHA-1 do ficheiro.",
+       "apihelp-query+imageinfo-paramvalue-prop-mime": "Engade o tipo MIME do ficheiro.",
+       "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Engade o tipo MIME da miniatura da imaxe (precisa a url e o parámetro $1urlwidth).",
+       "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Engade o tipo do ficheiro.",
+       "apihelp-query+imageinfo-paramvalue-prop-metadata": "Lista os metadatos Exif da versión do ficheiro.",
+       "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Lista os metadatos xenéricos do formato do ficheiro para a versión do ficheiro.",
+       "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Lista os metadatos combinados formateados de múltiples fontes. Os resultados están en formato HTML.",
+       "apihelp-query+imageinfo-paramvalue-prop-archivename": "Engade o nome de ficheiro da versión do ficheiro para versións anteriores ás últimas.",
+       "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Engade a profundidade de bits da versión.",
+       "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Usado pola páxina Special:Upload para obter información sobre un ficheiro existente. Non previsto para usar fóra do núcleo MediaWiki.",
+       "apihelp-query+imageinfo-param-limit": "Cantas revisións de ficheiro a devolver por ficheiro.",
+       "apihelp-query+imageinfo-param-start": "Selo de tempo dende o que comezar a lista.",
+       "apihelp-query+imageinfo-param-end": "Selo de tempo no que rematar a lista.",
+       "apihelp-query+imageinfo-param-urlwidth": "Se $2prop=url está definido, será devolta unha URL a unha imaxe escalada a este ancho.\nPor razóns de rendimento se se usa esta opción, non se devolverán máis de $1 imaxes.",
+       "apihelp-query+imageinfo-param-urlheight": "Similar a $1urlwidth.",
+       "apihelp-query+imageinfo-param-metadataversion": "Versión de metadata a usar. Se <kbd>latest</kbd> está especificado, usa a última versión. Por defecto <kbd>1</kbd> para compatibilidade con versións anteriores.",
+       "apihelp-query+imageinfo-param-extmetadatalanguage": "Que lingua buscar en extmetadata. Isto afecta tanto á tradución a buscar, se hai varias dispoñibles, como a como se formatean cousas como os números e outros valores.",
+       "apihelp-query+imageinfo-param-extmetadatamultilang": "Se as traducións para a propiedade extmetadata están dispoñibles, búscaas todas.",
+       "apihelp-query+imageinfo-param-extmetadatafilter": "Se está especificado e non baleiro, só se devolverán esas claves para $1prop=extmetadata.",
        "apihelp-query+imageinfo-param-localonly": "Só buscar ficheiros no repositorio local.",
+       "apihelp-query+imageinfo-example-simple": "Busca a información sobre a versión actual de [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+imageinfo-example-dated": "Busca información sobre as versións de [[:File:Test.jpg]] posteriores a 2008.",
+       "apihelp-query+images-description": "Devolve todos os ficheiros contidos nas páxinas dadas.",
+       "apihelp-query+images-param-limit": "Cantos ficheiros devolver.",
+       "apihelp-query+images-param-images": "Listar só eses ficheiros. Útil para verificar se unha páxina concreta ten un ficheiro determinado.",
+       "apihelp-query+images-param-dir": "Dirección na cal listar.",
        "apihelp-query+images-example-simple": "Obter unha lista de arquivos empregados na [[Main Page]].",
+       "apihelp-query+images-example-generator": "Obter información sobre todos os ficheiros usados na [[Main Page]].",
+       "apihelp-query+imageusage-description": "Atopar tódalas páxinas que usan o título da imaxe dada.",
+       "apihelp-query+imageusage-param-title": "Título a buscar. Non pode usarse xunto con $1pageid.",
+       "apihelp-query+imageusage-param-pageid": "ID de páxina a buscar. Non pode usarse xunto con $1title.",
        "apihelp-query+imageusage-param-namespace": "Nome de espazos a numerar.",
+       "apihelp-query+imageusage-param-dir": "Dirección na cal listar.",
+       "apihelp-query+imageusage-param-filterredir": "Como filtrar redireccións. Se se fixa a non redirección cando está activo $1redirect, isto só se aplica ó segundo nivel.",
+       "apihelp-query+imageusage-param-limit": "Cantas páxinas devolver. Se <var>$1redirect</var> está activa, aplícase o límite a cada nivel de forma separada (isto significa que poden devolverse ata 2 * <var>$1limit</var> resultados).",
+       "apihelp-query+imageusage-param-redirect": "Se a ligazón sobre unha páxina é unha redirección, atopa tamén todas as páxinas que ligan con esa redirección. O límite máximo divídese á metade.",
+       "apihelp-query+imageusage-example-simple": "Mostrar as páxinas que usan [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+imageusage-example-generator": "Obter información sobre as páxinas que usan [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+info-description": "Obter información básica da páxina.",
+       "apihelp-query+info-param-prop": "Que propiedades adicionais obter:",
+       "apihelp-query+info-paramvalue-prop-protection": "Listar o nivel de protección de cada páxina.",
+       "apihelp-query+info-paramvalue-prop-talkid": "O ID de páxina da páxina de conversa para cada páxina que non é páxina de conversa.",
+       "apihelp-query+info-paramvalue-prop-watched": "Listar o estado de vixiancia de cada páxina.",
+       "apihelp-query+info-paramvalue-prop-watchers": "O número de vixiantes, se está permitido.",
+       "apihelp-query+info-paramvalue-prop-notificationtimestamp": "O selo de tempo de notificación da lista de vixiancia de cada páxina.",
+       "apihelp-query+info-paramvalue-prop-subjectid": "O ID de páxina da páxina pai para cada páxina de conversa.",
+       "apihelp-query+info-paramvalue-prop-url": "Devolve unha URL completa, unha URL de modificación, e a URL canónica de cada páxina.",
+       "apihelp-query+info-paramvalue-prop-readable": "Se o usuario pode ler esta páxina.",
+       "apihelp-query+info-paramvalue-prop-preload": "Devolve o texto devolto por EditFormPreloadText.",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "Devolve a forma na que se visualiza actualmente o título da páxina.",
+       "apihelp-query+info-param-testactions": "Proba se o usuario actual pode realizar certas accións na páxina.",
+       "apihelp-query+info-param-token": "Usar  [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] no canto diso.",
+       "apihelp-query+info-example-simple": "Obter información sobre a páxina <kbd>Main Page</kbd>.",
+       "apihelp-query+info-example-protection": "Obter información xeral e de protección  sobre a páxina <kbd>Main Page</kbd>.",
+       "apihelp-query+iwbacklinks-description": "Atopar todas as páxina que ligan á ligazón interwiki indicada.\n\nPode usarse para atopar todas as ligazóns cun prefixo, ou todas as ligazóns a un título (co prefixo indicado). Se non se usa ningún parámetro funciona como \"todas as ligazóns interwiki\".",
+       "apihelp-query+iwbacklinks-param-prefix": "Prefixo para a interwiki.",
+       "apihelp-query+iwbacklinks-param-title": "Ligazón interwiki a buscar. Debe usarse con <var>$1blprefix</var>.",
+       "apihelp-query+iwbacklinks-param-limit": "Número total de páxinas a devolver.",
+       "apihelp-query+iwbacklinks-param-prop": "Que propiedades obter:\n;iwprefix:Engade o prefixo da interwiki.\n;iwtitle:Engade o título da interwiki.",
+       "apihelp-query+iwbacklinks-param-dir": "Dirección na cal listar.",
+       "apihelp-query+iwbacklinks-example-simple": "Obter as páxinas ligadas a [[wikibooks:Test]]",
+       "apihelp-query+iwbacklinks-example-generator": "Obter información sobre as páxinas que ligan a [[wikibooks:Test]].",
+       "apihelp-query+iwlinks-description": "Devolve todas as ligazóns interwiki ás páxinas indicadas.",
+       "apihelp-query+iwlinks-param-url": "Se obter a URL completa (non pode usarse con $1prop).",
+       "apihelp-query+iwlinks-param-prop": "Que propiedades adicionais obter para cada ligazón interwiki:\n;url:Engade a URL completa.",
+       "apihelp-query+iwlinks-param-limit": "Cantas ligazóns interwiki devolver.",
+       "apihelp-query+iwlinks-param-prefix": "Só devolver ligazóns interwiki con este prefixo.",
+       "apihelp-query+iwlinks-param-title": "Ligazón interwiki a buscar. Debe usarse con <var>$1prefix</var>.",
+       "apihelp-query+iwlinks-param-dir": "Dirección na cal listar.",
+       "apihelp-query+iwlinks-example-simple": "Obter as ligazóns interwiki da páxina <kbd>Main Page</kbd>.",
+       "apihelp-query+langbacklinks-description": "Atopar todas as páxinas que ligan coa ligazón de lingua dada. \n\nPode usarse para atopar todas as ligazóns cun código de lingua, ou todas as ligazón a un título (cunha lingua dada). Non usar cun parámetro que sexa \"todas as ligazóns de lingua\".\n\nDecátese que isto pode non considerar as ligazóns de idioma engadidas polas extensións.",
+       "apihelp-query+langbacklinks-param-lang": "Lingua para a ligazón de lingua.",
+       "apihelp-query+langbacklinks-param-title": "Ligazón de lingua a buscar. Debe usarse con $1lang.",
+       "apihelp-query+langbacklinks-param-limit": "Número total de páxinas a devolver.",
+       "apihelp-query+langbacklinks-param-prop": "Que propiedades obter:\n;lllang:Engade o código de lingua á ligazón de páxina.\n;lltitle:Engade o título da ligazón de lingua.",
+       "apihelp-query+langbacklinks-param-dir": "Dirección na cal listar.",
+       "apihelp-query+langbacklinks-example-simple": "Obter as páxinas ligadas a [[:fr:Test]].",
+       "apihelp-query+langbacklinks-example-generator": "Obter información sobre as páxinas que ligan a [[:fr:Test]].",
+       "apihelp-query+langlinks-description": "Devolve todas as ligazóns interwiki ás páxinas indicadas.",
+       "apihelp-query+langlinks-param-limit": "Cantas ligazóns de lingua devolver.",
+       "apihelp-query+langlinks-param-url": "Se obter a URL completa (non pode usarse con <var>$1prop</var>).",
+       "apihelp-query+langlinks-param-prop": "Que propiedades adicionais obter para cada ligazón interlingüística:\n;url:Engade a URL completa.\n;langname:Engade o nome localizado da lingua (o mellor intento). Use <var>$1inlanguagecode</var> para controlar a lingua.\n;autonym:Engade o nome nativo da lingua.",
+       "apihelp-query+langlinks-param-lang": "Devolver só ligazóns de lingua con este código de lingua.",
+       "apihelp-query+langlinks-param-title": "Ligazón a buscar. Debe usarse con <var>$1lang</var>.",
+       "apihelp-query+langlinks-param-dir": "Dirección na cal listar.",
+       "apihelp-query+langlinks-param-inlanguagecode": "Código de lingua para nomes de lingua localizados.",
+       "apihelp-query+langlinks-example-simple": "Obter ligazóns interlingua da páxina <kbd>Main Page</kbd>.",
+       "apihelp-query+links-description": "Devolve todas as ligazóns das páxinas indicadas.",
+       "apihelp-query+links-param-namespace": "Mostra ligazóns só neste espazo de nomes.",
+       "apihelp-query+links-param-limit": "Cantas ligazóns devolver.",
+       "apihelp-query+links-param-titles": "Listar só as ligazóns a eses títulos. Útil para verificar se unha páxina concreta liga a un título determinado.",
+       "apihelp-query+links-param-dir": "Dirección na cal listar.",
+       "apihelp-query+links-example-simple": "Obter as ligazóns da páxina <kbd>Main Page</kbd>.",
+       "apihelp-query+links-example-generator": "Obter información sobre as ligazóns de páxina da <kbd>Main Page</kbd>.",
+       "apihelp-query+links-example-namespaces": "Obter as ligazóns á páxina <kbd>Main Page</kbd> nos espazos de nome {{ns:user}} e {{ns:template}}.",
+       "apihelp-query+linkshere-description": "Atopar todas as páxinas que ligan coas páxinas dadas.",
+       "apihelp-query+linkshere-param-prop": "Que propiedades obter:\n;pageid:ID de cada páxina.\n;título:Título de cada páxina.\n;redirect:Marca de se a páxina é unha redirección.",
+       "apihelp-query+linkshere-param-namespace": "Só incluír páxinas nestes espazos de nomes.",
+       "apihelp-query+linkshere-param-limit": "Cantos mostrar.",
+       "apihelp-query+linkshere-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
+       "apihelp-query+linkshere-example-simple": "Obter unha lista que ligan á [[Main Page]]",
+       "apihelp-query+linkshere-example-generator": "Obter a información das páxinas que ligan á [[Main Page]].",
+       "apihelp-query+logevents-description": "Obter os eventos dos rexistros.",
+       "apihelp-query+logevents-param-type": "Filtrar as entradas do rexistro para mostrar só as deste tipo.",
+       "apihelp-query+logevents-param-action": "Filtrar accións no rexistro para mostrar só esta acción. Ignora <var>$1type</var>. Accións comodín como  <kbd>action/*</kbd> permiten especificar calquera cadea para o asterisco.",
+       "apihelp-query+logevents-param-start": "Selo de tempo no que comezar a enumeración.",
+       "apihelp-query+logevents-param-end": "Selo de tempo para rematar a enumeración.",
+       "apihelp-query+logevents-param-user": "Filtrar entradas ás feitas polo usuario indicado.",
+       "apihelp-query+logevents-param-title": "Filtrar entradas ás asociadas á páxina indicada.",
+       "apihelp-query+logevents-param-namespace": "Filtrar entradas ás do espazo de nomes indicado.",
+       "apihelp-query+logevents-param-prefix": "Filtrar entradas ás que comezan por este prefixo.",
+       "apihelp-query+logevents-param-tag": "Só listar entradas de evento marcadas con esta etiqueta.",
+       "apihelp-query+logevents-param-limit": "Número total de entradas de evento a devolver.",
+       "apihelp-query+logevents-example-simple": "Lista de eventos recentes do rexistro.",
+       "apihelp-query+pagepropnames-description": "Listar os nomes de todas as propiedades de páxina usados na wiki.",
        "apihelp-query+pagepropnames-param-limit": "Máximo número de nomes a retornar.",
+       "apihelp-query+pagepropnames-example-simple": "Obter os dez primeiros nomes de propiedade.",
+       "apihelp-query+pageprops-description": "Obter varias propiedades definidas no contido da páxina.",
+       "apihelp-query+pageprops-param-prop": "Listar só esas propiedades. Útil para verificar se unha páxina concreta usa unha propiedade de páxina determinada.",
+       "apihelp-query+pageprops-example-simple": "Obter as propiedades para <kbd>Category:Foo</kbd>.",
        "apihelp-query+pageswithprop-description": "Mostrar a lista de páxinas que empregan unha propiedade determinada.",
+       "apihelp-query+pageswithprop-param-propname": "Propiedade de páxina pola que enumerar as páxinas.",
+       "apihelp-query+pageswithprop-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina.\n;title:Engade o título e o ID do espazo de nomes da páxina.\n;value:Engade o valor da propiedade da páxina.",
+       "apihelp-query+pageswithprop-param-limit": "Máximo número de páxinas a retornar.",
+       "apihelp-query+pageswithprop-param-dir": "En que dirección ordenar.",
+       "apihelp-query+pageswithprop-example-simple": "Lista as dez primeiras páxinas que usan  <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+       "apihelp-query+pageswithprop-example-generator": "Obter a infomación de páxina das dez primeiras páxinas que usan <code>_&#95;NOTOC_&#95;</code>.",
+       "apihelp-query+prefixsearch-description": "Facer unha busca de prefixo nos títulos das páxinas.",
        "apihelp-query+prefixsearch-param-search": "Buscar texto.",
        "apihelp-query+prefixsearch-param-namespace": "Espazo de nomes no que buscar.",
        "apihelp-query+prefixsearch-param-limit": "Número máximo de resultados a visualizar.",
        "apihelp-query+prefixsearch-param-offset": "Número de resultados a saltar.",
+       "apihelp-query+prefixsearch-example-simple": "Buscar títulos de páxina que comecen con <kbd>meaning</kbd>.",
+       "apihelp-query+protectedtitles-description": "Listar todos os títulos protexidos en creación.",
        "apihelp-query+protectedtitles-param-namespace": "Só listar títulos nestes espazos de nomes.",
        "apihelp-query+protectedtitles-param-level": "Só listar títulos con estos niveis de protección.",
        "apihelp-query+protectedtitles-param-limit": "Número total de páxinas a devolver.",
+       "apihelp-query+protectedtitles-param-start": "Comezar a listar neste selo de tempo de protección.",
+       "apihelp-query+protectedtitles-param-end": "Rematar de listar neste selo de tempo de protección.",
+       "apihelp-query+protectedtitles-param-prop": "Que propiedades obter:\n;timestamp:Engade o selo de tempo de cando se fixo a protección.\n;user:Engade o usuario que fixo a protección.\n;userid:Engade o ID do usuario que fixo a protección.\n;comment:Engade o comentario da protección.\n;parsedcomment:Engade o comentario analizado da protección.\n;expiry:Engade o selo de tempo no que rematará a protección\n;level:Engade o nivel de protección.",
        "apihelp-query+protectedtitles-example-simple": "Listar títulos protexidos",
        "apihelp-query+protectedtitles-example-generator": "Atopar ligazóns ós títulos protexidos no espazo de nomes principal",
+       "apihelp-query+querypage-description": "Obtén unha lista proporcionada por unha páxina especial basada en QueryPage.",
        "apihelp-query+querypage-param-page": "Nome da páxina especial. Teña en conta que diferencia entre maiúsculas e minúsculas.",
        "apihelp-query+querypage-param-limit": "Número de resultados a visualizar.",
        "apihelp-query+querypage-example-ancientpages": "Resultados devoltos de [[Special:Ancientpages]].",
        "apihelp-query+random-param-namespace": "Devolver páxinas só neste espazo de nomes.",
        "apihelp-query+random-param-limit": "Limitar cantas páxinas aleatorias se van devolver.",
+       "apihelp-query+random-param-redirect": "Cargar unha redirección aleatoria no canto dunha páxina aleatoria.",
+       "apihelp-query+random-example-simple": "Obter dúas páxinas aleatorias do espazo de nomes principal.",
+       "apihelp-query+random-example-generator": "Obter a información da páxina de dúas páxinas aleatorias do espazo de nomes principal.",
        "apihelp-query+recentchanges-description": "Enumerar cambios recentes.",
-       "apihelp-query+recentchanges-param-start": "Selo de tempo para comenzar a enumeración.",
+       "apihelp-query+recentchanges-param-start": "Selo de tempo para comezar a enumeración.",
        "apihelp-query+recentchanges-param-end": "Selo de tempo para rematar a enumeración.",
+       "apihelp-query+recentchanges-param-namespace": "Filtrar os cambios a só eses espazos de nomes.",
        "apihelp-query+recentchanges-param-user": "Só listar cambios deste usuario.",
        "apihelp-query+recentchanges-param-excludeuser": "Non listar cambios deste usuario.",
        "apihelp-query+recentchanges-param-tag": "Só listar cambios marcados con esta etiqueta.",
+       "apihelp-query+recentchanges-param-token": "Usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> no canto diso.",
+       "apihelp-query+recentchanges-param-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
        "apihelp-query+recentchanges-param-limit": "Número total de páxinas a devolver.",
        "apihelp-query+recentchanges-param-type": "Que tipos de cambios mostrar.",
        "apihelp-query+recentchanges-param-toponly": "Listar só cambios que son a última revisión.",
        "apihelp-query+recentchanges-example-simple": "Listar cambios recentes.",
+       "apihelp-query+recentchanges-example-generator": "Obter a información de páxina sobre cambios recentes sen vixiancia.",
+       "apihelp-query+redirects-description": "Devolve todas as redireccións das páxinas indicadas.",
+       "apihelp-query+redirects-param-prop": "Que propiedades recuperar:\n;pageid:ID de páxina de cada redirección.\n;title:Título de cada redirección.\n;fragment:Fragmento de cada redirección, se hai algún.",
        "apihelp-query+redirects-param-namespace": "Só incluir páxinas nestes espacios de nomes.",
+       "apihelp-query+redirects-param-limit": "Cantos redireccións devolver.",
+       "apihelp-query+redirects-param-show": "Só mostrar elementos que cumpran estos criterios:\n;fragment:Só mostrar redireccións que teñan un fragmento.\n;!fragment:Só mostrar redireccións que non teñan un fragmento.",
        "apihelp-query+redirects-example-simple": "Obter unha lista de redireccións á [[Main Page]]",
        "apihelp-query+redirects-example-generator": "Obter información sobre tódalas redireccións á [[Main Page]]",
+       "apihelp-query+revisions-description": "Obter información da modificación.\n\nPode usarse de varias formas:\n#Obter datos sobre un conxunto de páxinas (última modificación), fixando os títulos ou os IDs das páxinas.\n#Obter as modificacións da páxina indicada, usando os títulos ou os IDs de páxinas con comezar, rematar ou límite.\n#Obter os datos sobre un conxunto de modificacións fixando os seus IDs cos seus IDs de modificación.",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "Só pode usarse cunha única páxina (mode #2).",
+       "apihelp-query+revisions-param-startid": "Desde que ID de revisión comezar a enumeración.",
+       "apihelp-query+revisions-param-endid": "Rematar a enumeración de revisión neste ID de revisión.",
+       "apihelp-query+revisions-param-start": "Desde que selo de tempo comezar a enumeración.",
+       "apihelp-query+revisions-param-end": "Enumerar desde este selo de tempo.",
        "apihelp-query+revisions-param-user": "Só incluir revisión feitas polo usuario.",
        "apihelp-query+revisions-param-excludeuser": "Excluír revisións feitas polo usuario.",
        "apihelp-query+revisions-param-tag": "Só listar revisións marcadas con esta etiqueta.",
+       "apihelp-query+revisions-param-token": "Que identificadores obter para cada revisión.",
+       "apihelp-query+revisions-example-content": "Obter datos con contido da última revisión dos títulos <kbd>API</kbd> e <kbd>Main Page</kbd>.",
        "apihelp-query+revisions-example-last5": "Mostrar as cinco últimas revisión da <kbd>Páxina Principal</kbd>.",
        "apihelp-query+revisions-example-first5": "Mostar as cinco primeiras revisións da <kbd>Páxina Principal</kbd>.",
        "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-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-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-namespace": "Buscar só nestes espazos de nomes.",
        "apihelp-query+search-param-info": "Que metadatos devolver.",
        "apihelp-query+search-param-limit": "Número total de páxinas a devolver.",
        "apihelp-query+search-param-interwiki": "Incluir na busca resultados de interwikis, se é posible.",
+       "apihelp-query+search-param-backend": "Que servidor de busca usar, se non se indica usa o que hai por defecto.",
        "apihelp-query+search-example-simple": "Buscar por <kbd>significado</kbd>.",
        "apihelp-query+search-example-text": "Buscar texto por <kbd>significado</kbd>.",
+       "apihelp-query+search-example-generator": "Obter información da páxina sobre as páxinas devoltas por unha busca por <kbd>significado</kbd>.",
        "apihelp-query+siteinfo-description": "Devolver información xeral sobre o sitio.",
+       "apihelp-query+siteinfo-param-filteriw": "Só devolver entradas locais ou só non locais da correspondencia interwiki.",
+       "apihelp-query+siteinfo-param-showalldb": "Listar todos os servidores de base de datos, non só o que teña máis retardo.",
        "apihelp-query+siteinfo-param-numberingroup": "Listar o número de usuarios nos grupos de usuarios.",
+       "apihelp-query+siteinfo-param-inlanguagecode": "Código de lingua para os nomes de lingua localizados (a mellor forma posible) e nomes de presentación.",
+       "apihelp-query+siteinfo-example-simple": "Obter información do sitio.",
+       "apihelp-query+siteinfo-example-interwiki": "Obter unha lista de prefixos interwiki locais.",
+       "apihelp-query+siteinfo-example-replag": "Revisar o retardo de replicación actual.",
+       "apihelp-query+stashimageinfo-description": "Devolve a información dos ficheiros almacenados.",
+       "apihelp-query+stashimageinfo-param-filekey": "Clave que identifica unha subida precedente e que foi almacenada temporalmente.",
+       "apihelp-query+stashimageinfo-param-sessionkey": "Alias para $1filekey, para compatibilidade con versións antigas.",
+       "apihelp-query+stashimageinfo-example-simple": "Devolve a información dun ficheiro almacenado.",
+       "apihelp-query+stashimageinfo-example-params": "Devolve as miniaturas de dous ficheiros almacenados.",
+       "apihelp-query+tags-description": "Lista de marcas de cambios.",
        "apihelp-query+tags-param-limit": "Máximo número de etiquetas a listar.",
        "apihelp-query+tags-example-simple": "Listar as marcas dispoñibles",
+       "apihelp-query+templates-description": "Devolve todas as páxinas incluídas na páxina indicada.",
        "apihelp-query+templates-param-namespace": "Mostrar modelos só neste espazo de nomes.",
        "apihelp-query+templates-param-limit": "Número de modelos a devolver.",
+       "apihelp-query+templates-param-templates": "Listar só eses modelos. Útil para verificar se unha páxina concreta ten un modelo determinado.",
        "apihelp-query+templates-param-dir": "Dirección na cal listar.",
        "apihelp-query+templates-example-simple": "Coller os modelos usado na <kbd>Páxina Principal</kbd>.",
        "apihelp-query+templates-example-generator": "Obter información sobre os modelos usados na <kbd>Páxina Principal</kbd>.",
        "apihelp-query+templates-example-namespaces": "Obter páxinas nos espazos de nomes {{ns:user}} e {{ns:template}} que se transclúen na <kbd>Páxina Principal</kbd>.",
+       "apihelp-query+tokens-description": "Recupera os identificadores das accións de modificación de datos.",
+       "apihelp-query+tokens-param-type": "Tipos de identificadores a consultar.",
+       "apihelp-query+tokens-example-simple": "Recuperar un identificador csrf (por defecto).",
+       "apihelp-query+tokens-example-types": "Recuperar un identificador vixiancia e un de patrulla.",
+       "apihelp-query+transcludedin-description": "Atopar todas as páxinas que inclúen ás páxinas indicadas.",
+       "apihelp-query+transcludedin-param-prop": "Que propiedades obter:\n;pageid:ID de páxina de cada páxina.\n;title:Título de cada páxina.\n;redirect:Marca si a páxina é unha redirección.",
        "apihelp-query+transcludedin-param-namespace": "Só incluir páxinas nestes espacios de nomes.",
        "apihelp-query+transcludedin-param-limit": "Cantos mostrar.",
+       "apihelp-query+transcludedin-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
+       "apihelp-query+transcludedin-example-simple": "Obter unha lista de páxinas que inclúen a <kbd>Main Page</kbd>.",
+       "apihelp-query+transcludedin-example-generator": "Obter información sobre as páxinas que inclúen <kbd>Main Page</kbd>.",
        "apihelp-query+usercontribs-description": "Mostrar tódalas edicións dun usuario.",
        "apihelp-query+usercontribs-param-limit": "Máximo número de contribucións a mostar.",
+       "apihelp-query+usercontribs-param-start": "Selo de tempo de comezo ó que volver.",
+       "apihelp-query+usercontribs-param-end": "Selo de tempo de fin ó que volver.",
+       "apihelp-query+usercontribs-param-user": "Usuarios para os que recuperar as contribucións.",
+       "apihelp-query+usercontribs-param-userprefix": "Recuperar as contribucións de todos os usuarios cuxo nome comece por este valor. Ignora $1user.",
        "apihelp-query+usercontribs-param-namespace": "Só listar contribucións nestes espazos de nomes.",
+       "apihelp-query+usercontribs-param-show": "Só mostrar elementos que cumpran estos criterios, p.ex. só edicións menores: <kbd>$2show=!minor</kbd>.\n\nSe está fixado <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd>, as modificacións máis antigas que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) non se mostrarán.",
        "apihelp-query+usercontribs-param-tag": "Só listar revisións marcadas con esta etiqueta.",
        "apihelp-query+usercontribs-param-toponly": "Listar só cambios que son a última revisión.",
        "apihelp-query+usercontribs-example-user": "Mostrar as contribucións do usuario <kbd>Exemplo</kbd>.",
        "apihelp-query+userinfo-example-simple": "Obter información sobre o usuario actual.",
        "apihelp-query+userinfo-example-data": "Obter información adicional sobre o usuario actual.",
        "apihelp-query+users-description": "Obter información sobre unha lista de usuarios.",
+       "apihelp-query+users-param-prop": "Que información incluír:\n;blockinfo:Etiquetas se o usuario está bloqueado, por quen, e por que razón.\n;groups:Lista todos os grupos ós que pertence cada usuario.\n;implicitgroups:Lista os grupos dos que un usuario é membro de forma automatica.\n;rights:Lista todos os dereitos que ten cada usuario.\n;editcount:Engade o contador de edicións do usuario.\n;registration:Engade o selo de tempo do rexistro do usuario.\n;emailable:Marca se o usuario pode e quere recibir correos usando [[Special:Emailuser]].\n;gender:Marca o xénero do usuario. Devolve \"home\", \"muller\" ou \"descoñecido\".",
        "apihelp-query+users-param-users": "Lista de usuarios para os que obter información.",
+       "apihelp-query+users-param-token": "Usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> no canto diso.",
        "apihelp-query+users-example-simple": "Mostar información para o usuario <kbd>Exemplo</kbd>.",
-       "apihelp-query+watchlist-param-start": "Selo de tempo para comenzar a enumeración",
+       "apihelp-query+watchlist-description": "Ver os cambios recentes das páxinas na lista de vixiancia do usuario actual.",
+       "apihelp-query+watchlist-param-allrev": "Incluír múltiples revisións da mesma páxina dentro do intervalo de tempo indicado.",
+       "apihelp-query+watchlist-param-start": "Selo de tempo para comezar a enumeración",
        "apihelp-query+watchlist-param-end": "Selo de tempo para rematar a enumeración.",
+       "apihelp-query+watchlist-param-namespace": "Filtrar os cambios a só os espazos de nomes indicados.",
        "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-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
+       "apihelp-query+watchlist-param-type": "Que tipos de cambios mostrar:\n;edit:Modificacións normais de páxina.\n;external:Modificacións externas.\n;new:Creación de páxinas.\n;log:Entradas no rexistro.",
+       "apihelp-query+watchlist-param-owner": "Usado con $1token para acceder á lista de páxinas de vixiancia doutro usuario.",
+       "apihelp-query+watchlist-param-token": "Identificador de seguridade (dispoñible nas [[Special:Preferences#mw-prefsection-watchlist|preferencias]] de usuario) para permitir o acceso a outros á súa páxina de vixiancia.",
+       "apihelp-query+watchlist-example-simple": "Listar a última revisión das páxinas recentemente modificadas da lista de vixiancia do usuario actual.",
+       "apihelp-query+watchlist-example-props": "Buscar información adicional sobre a última revisión das páxinas modificadas recentemente da lista de vixiancia do usuario actual.",
+       "apihelp-query+watchlist-example-allrev": "Buscar a información sobre todos os cambios recentes das páxinas da lista de vixiancia do usuario actual.",
+       "apihelp-query+watchlist-example-generator": "Buscar a información de páxina das páxinas cambiadas recentemente da lista de vixiancia do usuario actual.",
+       "apihelp-query+watchlist-example-generator-rev": "Buscar a información da revisión dos cambios recentes de páxinas na lista de vixiancia do usuario actual.",
+       "apihelp-query+watchlist-example-wlowner": "Listar a última revisión das páxinas cambiadas recentemente da lista de vixiancia do usuario <kbd>Example</kbd>.",
+       "apihelp-query+watchlistraw-description": "Obter todas as páxinas da lista de vixiancia do usuario actual.",
        "apihelp-query+watchlistraw-param-namespace": "Só listar páxinas nestes espazos de nomes.",
        "apihelp-query+watchlistraw-param-limit": "Cantos resultados totais mostrar por petición.",
+       "apihelp-query+watchlistraw-param-prop": "Que propiedades adicionais obter:\n;changed:Engade o selo de tempo da última notificación ó usuario dunha modificación.",
        "apihelp-query+watchlistraw-param-show": "Só listar os elementos que cumplen estos criterios.",
+       "apihelp-query+watchlistraw-param-owner": "Usado con $1token para acceder á lista de páxinas de vixiancia doutro usuario.",
+       "apihelp-query+watchlistraw-param-token": "Identificador de seguridade (dispoñible nas [[Special:Preferences#mw-prefsection-watchlist|preferencias]] de usuario) para permitir o acceso a outros á súa páxina de vixiancia.",
        "apihelp-query+watchlistraw-example-simple": "Listar páxinas na lista de vixiancia do usuario actual.",
+       "apihelp-query+watchlistraw-example-generator": "Buscar a información de páxina das páxinas da lista de vixiancia do usuario actual.",
        "apihelp-revisiondelete-description": "Borrar e restaurar revisións.",
+       "apihelp-revisiondelete-param-type": "Tipo de borrado de revisión a ser tratada.",
+       "apihelp-revisiondelete-param-target": "Título de páxina para o borrado da revisión, se requerido para o tipo.",
+       "apihelp-revisiondelete-param-ids": "Identificadores para as revisións a ser  borradas.",
        "apihelp-revisiondelete-param-hide": "Que ocultar para cada revisión.",
        "apihelp-revisiondelete-param-show": "Que mostrar para cada revisión.",
+       "apihelp-revisiondelete-param-suppress": "Eliminar os datos dos administradores así coma dos doutros.",
        "apihelp-revisiondelete-param-reason": "Razón para o borrado ou restaurado.",
        "apihelp-revisiondelete-example-revision": "Ocultar contido para revisión <kbd>12345</kbd> na <kbd>Páxina Principal</kbd>.",
+       "apihelp-revisiondelete-example-log": "Ocultar todos os datos da entrada de rexistro <kbd>67890</kbd> coa razón <kbd>BLP violation</kbd>.",
+       "apihelp-rollback-description": "Desfacer a última modificación da páxina.\n\nSe o último usuario que modificou a páxina fixo varias modificacións nunha fila, desfaranse todas.",
+       "apihelp-rollback-param-title": "Título da páxina a desfacer. Non pode usarse xunto con <var>$1pageid</var>.",
+       "apihelp-rollback-param-pageid": "ID da páxina a desfacer. Non pode usarse xunto con <var>$1title</var>.",
+       "apihelp-rollback-param-user": "Nome do usuario cuxas modificacións van a desfacerse.",
+       "apihelp-rollback-param-summary": "Personalizar o resumo de edición. Se está baleiro, usarase o resumo por defecto.",
        "apihelp-rollback-param-markbot": "Marcar as edicións revertidas e a reversión como edicións de bot.",
+       "apihelp-rollback-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
        "apihelp-rollback-example-simple": "Desfacer as últimas edicións á <kbd>Páxina Principal</kbd> do usuario <kbd>Exemplo</kbd>.",
+       "apihelp-rollback-example-summary": "Desfacer as últimas edicións á páxina <kbd>Main Page</kbd> polo usuario da dirección IP <kbd>192.0.2.5</kbd> co resumo de edición <kbd>Revertindo vandalismo</kbd>, marcar esas edicións e a reversión como edicións de bot.",
+       "apihelp-rsd-description": "Exportar un esquema RSD (Really Simple Discovery, Descubrimento Moi Simple).",
+       "apihelp-rsd-example-simple": "Exportar o esquema RSD.",
+       "apihelp-setnotificationtimestamp-description": "Actualiza o selo de tempo de notificación das páxinas vixiadas.\n\nIsto afecta ó resalte das páxinas modificadas na lista de vixiancia e historial, e o envío de correo cando a preferencia \"Mandarme un correo cando cambie unha páxina da miña lista de vixiancia\" está activa.",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "Traballar en tódalas páxinas vixiadas.",
+       "apihelp-setnotificationtimestamp-param-timestamp": "Selo de tempo ó que fixar a notificación.",
+       "apihelp-setnotificationtimestamp-param-torevid": "Modificación á que fixar o selo de tempo de modificación (só unha páxina).",
+       "apihelp-setnotificationtimestamp-param-newerthanrevid": "Modificación na que fixar o selo de tempo de modificación máis recente (só unha páxina).",
        "apihelp-setnotificationtimestamp-example-all": "Restaurar o estado de notificación para toda a páxina de vixiancia",
        "apihelp-setnotificationtimestamp-example-page": "Restaurar o estado de notificación para a <kbd>Páxina Principal</kbd>.",
+       "apihelp-setnotificationtimestamp-example-pagetimestamp": "Fixar o selo de tempo de notificación para a <kbd>Main page</kbd> de forma que todas as edicións dende o 1 se xaneiro de 2012 queden sen revisar.",
        "apihelp-setnotificationtimestamp-example-allpages": "Restaurar o estado de notificación para as páxinas no espazo de nomes de <kbd>{{ns:user}}</kbd>.",
+       "apihelp-tokens-description": "Obter os identificadores para accións de modificación de datos.\n\nEste módulo está obsoleto e foi reemprazado por [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-tokens-param-type": "Tipos de identificadores a consultar.",
+       "apihelp-tokens-example-edit": "Recuperar un identificador de modificación (por defecto).",
+       "apihelp-tokens-example-emailmove": "Recuperar un identificador de correo e un identificador de movemento.",
        "apihelp-unblock-description": "Desbloquear un usuario.",
+       "apihelp-unblock-param-id": "ID do bloque a desbloquear (obtido de <kbd>list=blocks</kbd>). Non pode usarse xunto con <var>$1user</var>.",
+       "apihelp-unblock-param-user": "Nome de usuario, dirección IP ou rango de direccións IP a desbloquear. Non pode usarse xunto con <var>$1id</var>.",
        "apihelp-unblock-param-reason": "Razón para desbloquear.",
        "apihelp-unblock-example-id": "Desbloquear bloqueo ID #<kbd>105</kbd>.",
        "apihelp-unblock-example-user": "Desbloquear usuario <kbd>Bob</kbd> con razón <kbd>Síntoo Bob</kbd>.",
+       "apihelp-undelete-description": "Restaurar modificacións dunha páxina borrada.\n\nUnha lista de modificacións borradas (incluíndo os seus selos de tempo) pode consultarse a través de [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], e unha lista de IDs de ficheiros borrados pode consultarse a través de [[Special:ApiHelp/query+filearchive|list=filearchive]].",
        "apihelp-undelete-param-title": "Título da páxina a restaurar.",
        "apihelp-undelete-param-reason": "Razón para restaurar.",
+       "apihelp-undelete-param-timestamps": "Selos de tempo das modificacións a restaurar. Se <var>$1timestamps</var> e <var>$1fileids</var> están baleiras, restaurarase todo.",
+       "apihelp-undelete-param-fileids": "IDs das modificacións de ficheiro a restaurar. Se <var>$1timestamps</var> e <var>$1fileids</var> están baleiras, serán restauradas todas.",
+       "apihelp-undelete-param-watchlist": "Engadir ou eliminar a páxina da lista de vixiancia do usuario actual sen condicións, use as preferencias ou non cambie a vixiancia.",
        "apihelp-undelete-example-page": "Restaurar a <kbd>Páxina Principal</kbd>.",
        "apihelp-undelete-example-revisions": "Restaurar dúas revisións de <kbd>[[Main Page]]</kbd>.",
+       "apihelp-upload-param-filename": "Nome de ficheiro obxectivo.",
+       "apihelp-upload-param-comment": "Subir comentario. Tamén usado como texto da páxina inicial para ficheiros novos se non se especifica <var>$1text</var>.",
        "apihelp-upload-param-text": "Texto da páxina inicial para novos ficheiros.",
        "apihelp-upload-param-watch": "Vixiar a páxina.",
+       "apihelp-upload-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
        "apihelp-upload-param-ignorewarnings": "Ignorar as advertencias.",
        "apihelp-upload-param-file": "Contido do ficheiro.",
+       "apihelp-upload-param-url": "URL onde buscar o ficheiro.",
+       "apihelp-upload-param-filekey": "Clave que identifica unha subida precedente e que foi almacenada temporalmente.",
+       "apihelp-upload-param-sessionkey": "Igual a $1filekey, mantido por razóns de compatibilidade con procesos antigos.",
+       "apihelp-upload-param-stash": "Se está indicado, o servidor almacenará o ficheiro temporalmente no canto de engadilo ó repositorio.",
        "apihelp-upload-param-filesize": "Tamaño de ficheiro completo da carga.",
+       "apihelp-upload-param-offset": "Desaxuste do bloque en bytes.",
+       "apihelp-upload-param-chunk": "Contido do bloque.",
+       "apihelp-upload-param-async": "Facer de forma asíncrona as operacións de ficheiro potencialmente grandes cando sexa posible.",
+       "apihelp-upload-param-asyncdownload": "Facer de forma asíncrona a busca dunha URL.",
+       "apihelp-upload-param-leavemessage": "Se se usa asyncdownload, deixar unha mensaxe na páxina de conversa do usuario cando se remate.",
+       "apihelp-upload-param-statuskey": "Buscar o estado da subida para esta clave de ficheiro (subida por URL).",
+       "apihelp-upload-param-checkstatus": "Só buscar o estado da subida da clave de ficheiro indicada.",
        "apihelp-upload-example-url": "Carga dunha URL",
        "apihelp-upload-example-filekey": "Completar carga que fallou debido a avisos",
+       "apihelp-userrights-description": "Cambiar a pertencia dun usuario a un grupo.",
        "apihelp-userrights-param-user": "Nome de usuario.",
        "apihelp-userrights-param-userid": "ID de usuario.",
        "apihelp-userrights-param-add": "Engadir o usuario a estes grupos.",
        "apihelp-userrights-param-remove": "Eliminar o usuario destes grupos.",
        "apihelp-userrights-param-reason": "Motivo para o cambio.",
+       "apihelp-userrights-example-user": "Engadir o usuario <kbd>FooBot</kbd> ó grupo <kbd>bot</kbd>, e eliminar dos grupos <kbd>sysop</kbd> e <kbd>burócrata</kbd>.",
+       "apihelp-userrights-example-userid": "Engadir ó usuario con ID <kbd>123</kbd> ó grupo <kbd>bot</kbd>, e borralo dos grupos <kbd>sysop</kbd> e <kbd>burócrata</kbd>.",
+       "apihelp-watch-description": "Engadir ou borrar páxinas da lista de vixiancia do usuario actual.",
+       "apihelp-watch-param-title": "Páxina a vixiar/deixar de vixiar. Usar no canto <var>$1titles</var>.",
+       "apihelp-watch-param-unwatch": "Se está definido, a páxina deixará de estar vixiada en vez de vixiada.",
        "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-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.",
+       "apihelp-jsonfm-description": "Datos de saída en formato JSON(impresión en HTML).",
+       "apihelp-none-description": "Ningunha saída.",
+       "apihelp-php-description": "Datos de saída en formato serializado de PHP.",
+       "apihelp-phpfm-description": "Datos de saída en formato serializado de PHP(impresión en HTML).",
+       "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-xmlfm-description": "Datos de saída en formato XML(impresión en HTML).",
+       "apihelp-yaml-description": "Datos de saída en formato YAML.",
+       "apihelp-yamlfm-description": "Datos de saída en formato YAML(impresión en HTML).",
+       "api-format-title": "Resultado de API de MediaWiki",
+       "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.",
        "api-pageset-param-pageids": "Lista de identificadores de páxina nos que traballar.",
+       "api-pageset-param-revids": "Unha lista de IDs de modificacións sobre as que traballar.",
+       "api-pageset-param-generator": "Obter a lista de páxinas sobre as que traballar executando o módulo de consulta especificado.\n\n<strong>Nota:</strong>Os nomes de parámetro do xerador deben comezar cunha \"g\", vexa os exemplos.",
+       "api-pageset-param-redirects-generator": "Resolver automaticamente as redireccións en <var>$1titles</var>, <var>$1pageids</var>, e <var>$1revids</var>, e nas páxinas devoltas por <var>$1generator</var>.",
+       "api-pageset-param-redirects-nogenerator": "Resolver automaticamente as redireccións en <var>$1titles</var>, <var>$1pageids</var>, e <var>$1revids</var>.",
+       "api-pageset-param-converttitles": "Converter títulos a outras variantes se é preciso. Só funciona se a lingua de contido da wiki soporta a conversión en variantes. As linguas que soportan conversión en variante inclúen $1.",
        "api-help-title": "Axuda da API de MediaWiki",
+       "api-help-lead": "Esta é unha páxina de documentación da API de MediaWiki xerada automaticamente.\n\nDocumentación e exemplos:\nhttps://www.mediawiki.org/wiki/API",
        "api-help-main-header": "Módulo principal",
        "api-help-flag-deprecated": "Este módulo está obsoleto.",
+       "api-help-flag-internal": "<strong>Este módulo é interno ou inestable. </strong> O seu funcionamento pode cambiar sen aviso previo.",
        "api-help-flag-readrights": "Este módulo precisa permisos de lectura.",
        "api-help-flag-writerights": "Este módulo precisa permisos de escritura.",
        "api-help-flag-mustbeposted": "Este módulo só acepta peticións POST.",
        "api-help-param-integer-min": "{{PLURAL:$1|1=O valor debe ser maior |2=Os valores deben ser maiores}} que $2.",
        "api-help-param-integer-max": "{{PLURAL:$1|1=O valor debe ser menor |2=Os valores deben ser menores}} que $3.",
        "api-help-param-integer-minmax": "{{PLURAL:$1|1=O valor debe estar entre $2 e $3 |2=Os valores deben estar entre $2 e $3}}.",
+       "api-help-param-upload": "Debe ser enviado como un ficheiro importado usando multipart/form-data.",
        "api-help-param-multi-separate": "Separe os valores con <kbd>|</kbd>.",
+       "api-help-param-multi-max": "O número máximo de valores é {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} para os bots).",
        "api-help-param-default": "Por defecto: $1",
        "api-help-param-default-empty": "Por defecto: <span class=\"apihelp-empty\">(baleiro)</span>",
+       "api-help-param-token": "Un identificador \"$1\" recuperado por [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-token-webui": "Por compatibilidade, o identificador usado na web UI tamén é aceptado.",
+       "api-help-param-disabled-in-miser-mode": "Desactivado debido ó [[mw:Manual:$wgMiserMode|modo minimal]].",
+       "api-help-param-limited-in-miser-mode": "<strong>Nota:</strong> Debido ó [[mw:Manual:$wgMiserMode|modo minimal]], usar isto pode devolver menos de <var>$1limit</var> resultados antes de seguir, en casos extremos, pode que non se devolvan resultados.",
+       "api-help-param-direction": "En que dirección enumerar:\n;newer:Lista os máis antigos primeiro. Nota: $1start ten que estar antes que $1end.\n;older:Lista os máis novos primeiro (por defecto). Nota: $1start ten que estar despois que $1end.",
+       "api-help-param-continue": "Cando estean dispoñibles máis resultados, use isto para continuar.",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(sen descrición)</span>",
        "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
        "api-help-permissions": "{{PLURAL:$1|Permiso|Permisos}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Concedida a|Concedidas a}}: $2",
+       "api-help-right-apihighlimits": "Usar os valores superiores das consultas da API (consultas lentas: $1; consultas rápidas: $2). Os límites para as consultas lentas tamén se aplican ós parámetros multivaluados.",
        "api-credits-header": "Créditos"
 }
index 6552dc4..fcc7f7b 100644 (file)
@@ -5,7 +5,8 @@
                        "Amire80",
                        "Inkbug",
                        "Danny-w",
-                       "YaronSh"
+                       "YaronSh",
+                       "ערן"
                ]
        },
        "apihelp-main-param-action": "איזו פעולה לבצע.",
@@ -40,6 +41,7 @@
        "apihelp-delete-param-watch": "הוספת העמוד לרשימת המעקב של המשתמש הנוכחי.",
        "apihelp-delete-param-unwatch": "הסרת הדף מרשימת המעקב של של המשתמש הנוכחי.",
        "apihelp-delete-example-simple": "מחיקת הדף הראשי",
+       "apihelp-edit-param-text": "תוכן הדף.",
        "apihelp-edit-param-minor": "עריכה משנית.",
        "apihelp-edit-example-edit": "עריכת דף",
        "apihelp-emailuser-description": "שליחת דוא\"ל למשתמש.",
        "apihelp-feedcontributions-param-deletedonly": "הצגת תרומות שנמחקו בלבד.",
        "apihelp-feedcontributions-param-toponly": "הצגת עריכות שהן הגרסה העדכנית ביותר בלבד.",
        "apihelp-feedcontributions-example-simple": "החזרת תרומות עבור המשתמש <kbd>Example</kbd>.",
+       "apihelp-feedrecentchanges-param-hideminor": "הסתרת שינוים משניים.",
+       "apihelp-feedrecentchanges-param-hidebots": "הסתרת שינויים שנעשו על ידי בוטים.",
+       "apihelp-feedrecentchanges-param-hideanons": "הסתרת שינויים שנעשו על ידי אנונימים.",
+       "apihelp-feedrecentchanges-param-hideliu": "הסתרת שינויים שנעשו על ידי משתמשים רשומים.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "הסתרת שינויים שנבדקו.",
+       "apihelp-feedrecentchanges-param-hidemyself": "הסתרת שינוים שנעשו על ידי המשתמש הנוכחי.",
        "apihelp-feedrecentchanges-param-tagfilter": "סינון לפי תגית.",
+       "apihelp-feedrecentchanges-param-target": "הצגת שינויים שנעשו בדפים המקושרים לדף זה בלבד.",
+       "apihelp-feedrecentchanges-example-simple": "הצגת שינויים אחרונים.",
+       "apihelp-feedrecentchanges-example-30days": "הצגת שינויים אחרונים עבור 30 ימים.",
        "apihelp-help-description": "הצגת עזרה עבור היחידות שצוינו.",
        "apihelp-help-param-helpformat": "תסדיר פלט העזרה.",
        "apihelp-help-param-toc": "לכלול תוכן עניינים בפלט HTML.",
index 218d24c..68f4e40 100644 (file)
@@ -2,9 +2,22 @@
        "@metadata": {
                "authors": [
                        "Beta16",
-                       "Nivit"
+                       "Nivit",
+                       "Toadino2"
                ]
        },
+       "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)]].",
+       "apihelp-main-param-action": "Azione da compiere.",
+       "apihelp-main-param-format": "Formato dell'output.",
+       "apihelp-main-param-assert": "Verifica che l'utente sia loggato se si è impostato <kbd>utente</kbd>, o che abbia i permessi di bot se si è impostato <kbd>bot</kbd>.",
+       "apihelp-main-param-requestid": "Tutti i valori forniti saranno implementati nella risposta. Potrebbero venir utilizzati per distinguere le richieste.",
+       "apihelp-block-description": "Blocca  un utente.",
+       "apihelp-block-param-reason": "Motivo del blocco.",
+       "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-query+recentchanges-example-simple": "Elenco modifiche recenti.",
        "apihelp-upload-example-url": "Carica da un URL.",
        "api-help-parameters": "{{PLURAL:$1|Parametro|Parametri}}:",
index 4c7b20a..3940469 100644 (file)
@@ -4,7 +4,8 @@
                        "Shirayuki",
                        "2nd-player",
                        "Los688",
-                       "Whym"
+                       "Whym",
+                       "Mfuji"
                ]
        },
        "apihelp-main-param-action": "実行する操作です。",
@@ -28,6 +29,9 @@
        "apihelp-block-param-watchuser": "その利用者またはIPアドレスの利用者ページとトークページをウォッチします。",
        "apihelp-block-example-ip-simple": "IPアドレス <kbd>192.0.2.5</kbd> を <kbd>First strike<kbd> という理由で3日ブロックする",
        "apihelp-block-example-user-complex": "利用者 <kbd>Vandal</kbd> を <kbd>Vandalism</kbd> という理由で無期限ブロックし、新たなアカウント作成とメールの送信を禁止する。",
+       "apihelp-checktoken-param-type": "調べるトークンの種類。",
+       "apihelp-checktoken-param-token": "調べるトークン。",
+       "apihelp-checktoken-example-simple": "<kbd>csrf</kbd> トークンの妥当性を調べる。",
        "apihelp-compare-example-1": "版1と2の差分を生成する。",
        "apihelp-createaccount-description": "新しい利用者アカウントを作成します。",
        "apihelp-createaccount-param-name": "利用者名。",
@@ -36,6 +40,7 @@
        "apihelp-createaccount-param-email": "利用者の電子メールアドレス (任意)。",
        "apihelp-createaccount-param-realname": "利用者の本名 (省略可能)。",
        "apihelp-createaccount-param-mailpassword": "設定されると (その値を問わず)、ランダムなパスワードがその利用者に電子メールで送られます。",
+       "apihelp-createaccount-param-reason": "ログに記録されるアカウント作成の理由 (任意)。",
        "apihelp-createaccount-example-pass": "利用者 <kbd>testuser</kbd> をパスワード <kbd>test123</kbd> として作成する。",
        "apihelp-createaccount-example-mail": "利用者 <kbd>testuser</kbd>を作成し、ランダムに生成されたパスワードをメールで送る",
        "apihelp-delete-description": "ページを削除します。",
        "apihelp-feedcontributions-param-toponly": "最新版の編集のみ表示します。",
        "apihelp-feedcontributions-param-newonly": "ページ作成を伴う編集のみを表示します。",
        "apihelp-feedcontributions-example-simple": "利用者 <kbd>Example</kbd> の投稿記録を取得する。",
+       "apihelp-feedrecentchanges-param-limit": "返す結果の最大数。",
+       "apihelp-feedrecentchanges-param-hideminor": "細部の変更を隠す。",
+       "apihelp-feedrecentchanges-param-hidebots": "ボットによる変更を隠す。",
+       "apihelp-feedrecentchanges-param-hideanons": "未登録利用者による変更を隠す。",
+       "apihelp-feedrecentchanges-param-hideliu": "登録利用者による変更を隠す。",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "巡回済みの変更を隠す。",
+       "apihelp-feedrecentchanges-example-simple": "最近の更新を表示する。",
+       "apihelp-feedrecentchanges-example-30days": "最近30日間の変更を表示する。",
        "apihelp-filerevert-example-revert": "<kbd>Wiki.png</kbd> を <kbd>2011-03-05T15:27:40Z</kbd> の版に差し戻す。",
        "apihelp-help-description": "指定したモジュールのヘルプを表示します。",
        "apihelp-help-param-modules": "ヘルプを表示するモジュールです (<var>action</var> パラメーターおよび <var>format</var> パラメーターの値、または <kbd>main</kbd>)。<kbd>+</kbd> を使用して下位モジュールを指定できます。",
        "apihelp-imagerotate-example-simple": "<kbd>File:Example.png</kbd> を <kbd>90</kbd> 度回転させる。",
        "apihelp-imagerotate-example-generator": "<kbd>Category:Flip</kbd> 内のすべての画像を <kbd>180</kbd> 度回転させる。",
        "apihelp-import-param-xml": "XMLファイルをアップロード",
+       "apihelp-import-param-rootpage": "このページの下位ページとしてインポートする。",
+       "apihelp-import-example-import": "[[meta:Help:Parserfunctions]] をすべての履歴とともに名前空間100 にインポートする。",
        "apihelp-login-param-name": "利用者名。",
        "apihelp-login-param-password": "パスワード。",
        "apihelp-login-param-token": "最初のリクエストで取得したログイントークンです。",
        "apihelp-move-param-from": "移動するページのページ名です。<var>$1fromid</var> とは同時に使用できません。",
        "apihelp-move-param-fromid": "移動するページのページIDです。<var>$1from</var> とは同時に使用できません。",
        "apihelp-move-param-to": "移動後のページ名。",
-       "apihelp-move-param-reason": "移動の理由。",
+       "apihelp-move-param-reason": "名称変更の理由。",
        "apihelp-move-param-movetalk": "存在する場合、トークページも名前を変更します。",
        "apihelp-move-param-movesubpages": "可能であれば、下位ページも名前を変更します。",
        "apihelp-move-param-noredirect": "転送ページを作成しません。",
        "apihelp-move-param-unwatch": "そのページと転送ページを現在の利用者のウォッチリストから除去します。",
        "apihelp-move-param-ignorewarnings": "あらゆる警告を無視",
        "apihelp-move-example-move": "<kbd>Badtitle</kbd> を <kbd>Goodtitle</kbd> に転送ページを残さず移動",
+       "apihelp-opensearch-param-search": "検索文字列。",
+       "apihelp-opensearch-param-limit": "返す結果の最大数。",
+       "apihelp-opensearch-param-namespace": "検索する名前空間。",
        "apihelp-opensearch-param-suggest": "<var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> が false の場合、何もしません。",
        "apihelp-paraminfo-description": "API モジュールに関する情報を取得します。",
        "apihelp-patrol-description": "ページまたは版を巡回済みにします。",
index 5e18dc1..540f64c 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Kwj2772",
-                       "Twotwo2019"
+                       "Twotwo2019",
+                       "아라"
                ]
        },
        "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-block-param-watchuser": "해당 사용자 또는 IP 주소의 사용자 문서 및 토론 문서를 주시합니다.",
        "apihelp-block-example-ip-simple": "IP <kbd>192.0.2.5</kbd>에 대해 <kbd>First strike</kbd>라는 이유로 3일간 차단하기",
        "apihelp-block-example-user-complex": "사용자 <kbd>Vandal</kbd>을 <kbd>Vandalism</kbd>이라는 이유로 무기한 차단하며 계정 생성 및 이메일 발송을 막기",
+       "apihelp-delete-example-simple": "<kbd>Main Page</kbd>를 삭제합니다.",
+       "apihelp-edit-description": "문서를 만들고 편집합니다.",
+       "apihelp-edit-param-sectiontitle": "새 문단을 위한 제목.",
+       "apihelp-edit-param-text": "문서 내용.",
+       "apihelp-edit-param-summary": "편집 요약. 또한 $1section=new 및 $1sectiontitle이 설정되어 있지 않을 때 문단 제목.",
+       "apihelp-edit-param-minor": "사소한 편집.",
+       "apihelp-edit-param-notminor": "사소하지 않은 편집.",
+       "apihelp-edit-param-bot": "이 편집을 봇으로 표시.",
        "api-help-param-list": "{{PLURAL:$1|1=하나의 값|2=값 (\"{{!}}\"로 구분)}}: $2",
        "api-help-param-default": "기본값: $1"
 }
index eeee854..93691a5 100644 (file)
@@ -4,19 +4,25 @@
                        "Purodha"
                ]
        },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokemäntazjohn]]\n* [[mw:API:FAQ/de|Öff jefrohch]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mäileng_Leß]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Aanköndejonge zom <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Jemäldte Fähler un Wönsch]\n</div>\n<strong>Status:</strong> Alle op heh dä Sigg aanjzeischte Ußwahle sullte donn, ävver et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> wee jrahd noch äntwekeld un et kann sesch alle Nahslangs jädd ändere. Holl Der de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ Mäileng_Leß med Aanköndejonge], öm automattesch övver Neujeschkeite enfommehrt ze wähde.\n\n<strong>Kapodde Aanfrohe:</strong> Wam_mer kapodde Aanfroheaan et API <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> schek, kritt mer ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">HTTP</i>-Kopp ußjejovve met däm Täx „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki-API-Error</code>“ dren, dä mer als ene Schlößel bedraachte kann. Mih dohzoh fengk met op dä Sigg [[mw:API:Errors_and_warnings|<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>: Fähler un Warnonge]].",
        "apihelp-main-param-action": "Wat för en Aufjahb.",
        "apihelp-main-param-format": "Et Fommaht för ußzejävve.",
+       "apihelp-main-param-smaxage": "Säz <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">s-maxage</code> em Kobb obb esu vill Sekonde. Fähler wähde nit faßjehallde.",
+       "apihelp-main-param-maxage": "Säz <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">max-age</code> em Kobb obb esu vill Sekonde. Fähler wähde nit 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).",
        "apihelp-main-param-requestid": "Jehde Aanjahb vun heh weed widder med ußjejovve. Esuh kam_mer einzel Affrohre ussenein hallde.",
        "apihelp-main-param-servedby": "Donn däm ẞööver, dä et jedonn hät, singe Nahme med ußjävve.",
        "apihelp-main-param-curtimestamp": "Donn de aktoälle Zigg un et Dattum med ußjävve.",
        "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-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äß verhendere.",
+       "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-autoblock": "Dun automattesch de läzde <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräß schpärre, di dä Metmaacher jehatt hät, un och all di <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräße, vun wo dä versöhk, jet ze ändere.",
+       "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-compare-description": "Donn de Ongerscheide zwesche zwai Sigge beschtemme.\n\nDo moß derför jeweils en Väsjohn, ene Tettel, odder ener Sigg iehr Kännong aanjävve, för de beide Sigge.",
+       "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-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-fromid": "De Kännong vun dä eezte Sigg zom verjlihsche.",
        "apihelp-compare-param-fromrev": "De Väsjohn vun dä zwaite Sigg zom verjlihsche.",
        "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-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 Medmaacher singe reschtejje 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-createaccount-param-reason": "Ene Jrond för dä Zojang aanzelähje, dä en de Logböhscher kütt.",
+       "apihelp-createaccount-param-language": "Dat Schprohcheköözel, wadd als der Schtandatt för dä Metmaacher jesaz wähde sull. Kann läddesch blihve, dann es et di Schprohch vum Wikki.",
+       "apihelp-createaccount-example-pass": "Lääsch dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">testuser</kbd> aan, mem Paßwood <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">test123</kbd>.",
+       "apihelp-createaccount-example-mail": "Lääsch dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">testmailuser</kbd> aan med emem zohfällesch ußjewörfelte Paßwoot un schegg_em dat övver de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">e-mail</i>.",
        "apihelp-delete-description": "Schmieß en Sigg fott.",
-       "apihelp-delete-param-watch": "Donn die Sigg en Ding Oppassliss opnemme.",
-       "apihelp-delete-param-unwatch": "Schmiiß di Sigg us Dinge Oppassless erus.",
-       "apihelp-delete-example-simple": "Schmiiß de Houpsigg fott"
+       "apihelp-delete-param-watch": "Donn di Sigg en däm aktoälle Metmaacher sing Oppaßleß opnämme.",
+       "apihelp-delete-param-unwatch": "Schmihß di Sigg us däm aktoälle Metmaacher singe Oppaßless erus.",
+       "apihelp-delete-example-simple": "Schmiiß de <kbd>Houpsigg</kbd> fott",
+       "apihelp-delete-example-reason": "Schmiiß de <kbd>Houpsigg</kbd> fott mem Jrond: <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Preparing for move</kbd>.",
+       "apihelp-disabled-description": "Dat Moduhl wohd affjeschalldt.",
+       "apihelp-edit-description": "Sigge aanlähje un verändere.",
+       "apihelp-edit-param-sectiontitle": "De Övverschreff för ene neue Affschnett.",
+       "apihelp-edit-param-text": "Dä Sigg ehre Ennhalld.",
+       "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-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-redirect": "Verfollsch de Ömleidonge automattesch.",
+       "apihelp-edit-param-contentmodel": "Et Enhalltsmodäll för dä neue Ennhalld.",
+       "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-emailuser-description": "Donn en <i lang=\"en\" xml:lang=\"en\">e-mail</i> aan dä Metmaacher schecke.",
+       "apihelp-emailuser-param-target": "D ä Metmaacher, dä di <i lang=\"en\" xml:lang=\"en\">e-mail</i> krijje sull.",
+       "apihelp-emailuser-param-subject": "Koppeih mem Beträff.",
+       "apihelp-emailuser-param-text": "Dä Täx en dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">e-mail</i>.",
+       "apihelp-emailuser-param-ccme": "scheck mer en Koppih vun heh dä <i lang=\"en\" xml:lang=\"en\">e-mail</i>.",
+       "apihelp-emailuser-example-email": "Donn en <i lang=\"en\" xml:lang=\"en\">e-mail</i> aan dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\">WikiSysop</kbd> schecke mem Täx <kbd>Dä Enhalld</kbd> dren.",
+       "apihelp-expandtemplates-description": "Deiht alle Schablohne en Wikkitäx ömsäze.",
+       "apihelp-expandtemplates-param-title": "De Övverschreff vun dä Sigg.",
+       "apihelp-expandtemplates-param-text": "Dä Wikitäx zom ömwandelle.",
+       "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-feedcontributions-param-feedformat": "Däm Kannahl sing Fommaht.",
+       "apihelp-feedcontributions-param-year": "Vum johr un fröhjer.",
+       "apihelp-feedcontributions-param-month": "Vun däm Mohnd un derför",
+       "apihelp-feedcontributions-param-deletedonly": "zeijsch blohß de fottjeschmeße Beijdrähsch.",
+       "apihelp-feedcontributions-param-toponly": "Zeich blohß de Änderonge, di och de neußte sin.",
+       "apihelp-feedcontributions-param-newonly": "Zeich blohß de Änderonge, woh Sigge neu aanjelaat woode sin.",
+       "apihelp-feedcontributions-param-showsizediff": "Zeijsch de Ongerscheijd en de Jrühße zwesche de Väsjohne.",
+       "apihelp-feedcontributions-example-simple": "Zeijsch de Änderonge vum Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>.",
+       "apihelp-feedrecentchanges-param-feedformat": "Däm Kannahl sing Fommaht.",
+       "apihelp-feedrecentchanges-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
+       "apihelp-feedrecentchanges-param-from": "Zeijsch de Änderonge zigg dämm.",
+       "apihelp-feedrecentchanges-param-hideminor": "De kein Minni_Änderonge verschteijsche.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Nohjelohrte Änderonge övverjonn.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Änderonge vun heh dämm Metmaacher övverjonn.",
+       "apihelp-feedwatchlist-param-feedformat": "Däm Kannahl sing Fommaht.",
+       "apihelp-filerevert-param-filename": "De Zih_Dattei, der ohne „{{ne:file}}“ derför.",
+       "apihelp-filerevert-param-comment": "Aanmärkong huh lahde.",
+       "apihelp-help-description": "zeisch Hölp för de aanjejovve Moduhle.",
+       "apihelp-help-example-recursive": "Alle Hölp en eine Sigg.",
+       "apihelp-help-example-help": "Alle Hölp övver de Hölp säälver.",
+       "apihelp-imagerotate-description": "Ein udder mieh Bellder driehje.",
+       "apihelp-imagerotate-param-rotation": "Öm wi vill Jrahd sulle de Bellder noh de Uhr drieh wääde?",
+       "apihelp-imagerotate-example-simple": "Drieh de <kbd>Dattei:Beijschpell.png</kbd> öm <kbd>90</kbd> Jrahd.",
+       "apihelp-imagerotate-example-generator": "Drieh alle Bellder en dä <kbd>Saachjropp:Ömdriehje</kbd> öm <kbd>180</kbd> Jrahd.",
+       "apihelp-import-param-xml": "Donn en Dattei em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Fommaht huhjahde.",
+       "apihelp-import-param-rootpage": "Als Ongersiff vun heh dä Sigg empottehre-",
+       "apihelp-login-param-name": "Metmaacher_Nahme.",
+       "apihelp-login-param-password": "Paßwoot.",
+       "apihelp-login-param-domain": "De Domaijn (kann fott bliehve)",
+       "apihelp-login-example-login": "Enlogge.",
+       "apihelp-logout-example-logout": "Donn dä aktoälle Metmaacher ußlogge.",
+       "apihelp-move-description": "Donn en Sigg ömbenänne",
+       "apihelp-move-param-to": "De neue Övverschreff för di Sigg drop ömzebenänne.",
+       "apihelp-move-param-reason": "Der jrond för di Sigg ömzebenänne.",
+       "apihelp-move-param-movetalk": "Donn de Klaafsigg ömbenänne, wann et se jitt.",
+       "apihelp-move-param-movesubpages": "Donn de Ongersigge ömbenänne, wann müjjelesch.",
+       "apihelp-move-param-noredirect": "Donn kein Ömleidong aanlähje.",
+       "apihelp-move-param-watch": "Donn de Sigg un de Ömleijdong op dem aktoälle Metmaacher sing Oppaßleß.",
+       "apihelp-move-param-unwatch": "Donn de Sigg un de Ömleijdong uß dem aktoälle Metmaacher sing Oppaßleß eruß nämme.",
+       "apihelp-move-param-watchlist": "Donn di Sigg en dem aktoälle Metmaacher sing Oppaßleß udder nemm se eruß, donn de Enschtällonge nämme udder donn de Oppaßleß nid ändere.",
+       "apihelp-move-param-ignorewarnings": "Donn alle Warnonge övverjonn",
+       "apihelp-move-example-move": "Donn <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Schlääschte Övverschreff</kbd> nach <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Johde Övverschreff</kbd> önmännde, der ohne en Ömleijdong aanzelähje.",
+       "apihelp-opensearch-description": "Em Wikki söhke mem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„Offe Söhke“\">OpenSearch</i>",
+       "apihelp-opensearch-param-search": "Noh wat söhke?",
+       "apihelp-opensearch-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
+       "apihelp-opensearch-param-namespace": "En wällschem Appachtemang söhke.",
+       "apihelp-opensearch-param-redirects": "How to handle redirects:\n;return:Return the redirect itself.\n;resolve:Return the target page. May return fewer than $1limit results.\nFor historical reasons, the default is \"return\" for $1format=json and \"resolve\" for other formats.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-opensearch-param-redirects/en\n-->",
+       "apihelp-opensearch-param-format": "Et Fommaht zom Ußjävve.",
+       "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-example-reset": "Alle enschtälloonge retuur schtälle.",
+       "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-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-example-page": "Donn en Sigg pahse.",
+       "apihelp-parse-example-text": "Donn Wikkitäx pahse.",
+       "apihelp-parse-example-texttitle": "Donn Wikkitäx pahse, un jiff derför en Övverschreff för en Sigg aan.",
+       "apihelp-parse-example-summary": "Donn Zersammefaßong pahse.",
+       "apihelp-patrol-description": "Donn en Sigg udder Väsjohn nohkike.",
+       "apihelp-patrol-param-rcid": "De Kännong in de läzde Änderonge zum Nohkike.",
+       "apihelp-patrol-param-revid": "De Kännong vun dä Väsjohn zum Nohkike.",
+       "apihelp-patrol-example-rcid": "Donn en läzde Änderonge nohkike.",
+       "apihelp-patrol-example-revid": "Donn en Väsjohn nohkike.",
+       "apihelp-protect-description": "Änder der Siggeschoz för en Sigg.",
+       "apihelp-protect-param-title": "De Övverschreff vun dä Sigg zom Schöze udder Freijävve. Kam_mer nit zesamme met\n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</code>“ bruche.",
+       "apihelp-protect-param-pageid": "De Kännong vun dä Sigg zom Schöze udder Freijävve. Kam_mer nit zesamme met\n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</code>“ bruche.",
+       "apihelp-protect-param-reason": "Der Jrond för et Schöze udder Freijävve.",
+       "apihelp-protect-example-protect": "Donn en Sigg schöze.",
+       "apihelp-query-param-list": "Wat för en Leßte holle.",
+       "apihelp-query-param-meta": "Wat för en Matta_Dahte ze holle.",
+       "apihelp-query+allcategories-description": "Alle Saachjroppe opzälle.",
+       "apihelp-query+allcategories-param-from": "De Saachjropp, vun woh aan opzälle.",
+       "apihelp-query+allcategories-param-to": "De Saachjropp, bes woh hen opzälle.",
+       "apihelp-query+allcategories-param-dir": "De Reijefollsch zum Zotehre.",
+       "apihelp-query+allcategories-param-limit": "Wi vell Saachjroppe ußjävve?",
+       "apihelp-query+allcategories-param-prop": "Which properties to get:\n;size:Adds number of pages in the category.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Ballcategories-param-prop/ksh\n-->",
+       "apihelp-query+alldeletedrevisions-description": "Donn alle fottjeschmeße Väsjohne vun enem Metmaacher udder en enem Appachemang opleßte.",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kam_mer blohß met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3user</var> bruche.",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Kam_mer nit met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3user</var> bruche.",
+       "apihelp-query+alldeletedrevisions-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+       "apihelp-query+alldeletedrevisions-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
+       "apihelp-query+alldeletedrevisions-param-from": "Bejenn de Leß bei heh dä Överschreff.",
+       "apihelp-query+alldeletedrevisions-param-to": "Hühr de Leß bei heh dä Överschreff oop.",
+       "apihelp-query+alldeletedrevisions-param-prefix": "Söhk noh Sigge, woh de Övverschrevv esu aanfängk.",
+       "apihelp-query+alldeletedrevisions-param-user": "Donn blohß Väsjohne vun heh däm Metmaacher opleßte.",
+       "apihelp-query+alldeletedrevisions-param-excludeuser": "Donn kein Väsjohne vun heh däm Metmaacher opleßte.",
+       "apihelp-query+alldeletedrevisions-param-namespace": "Donn blohß Siegg en heh däm Appachtemang opleßte.",
+       "apihelp-query+alldeletedrevisions-param-generatetitles": "Wann als ene  Jenerahtor enjesaz, bräng Övverschreffte un kein Kännonge vu Väsjohne.",
+       "apihelp-query+alldeletedrevisions-example-user": "Donn de läzde fuffzisch fottjeschmeße Beijdrähsch vim Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example<kbd>“ opleste.",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "Donn de läzde fuffzisch fottjeschmeße Väsjohne em Houp-Appachemang opleste.",
+       "apihelp-query+allfileusages-description": "Donn alle Dattei_Oprohfe opleste, och vun Datteije, di (noch) nit doh sin.",
+       "apihelp-query+allfileusages-param-from": "De Övverschreff vun dä Dattei, woh de Leß medd aanfange sull.",
+       "apihelp-query+allfileusages-param-to": "De Övverschreff vun dä Dattei, woh de Leß medd ophühre sull.",
+       "apihelp-query+allfileusages-param-prefix": "Söhk noh alle Övverschreffte, di met heh däm Täx aanfange.",
+       "apihelp-query+allfileusages-param-unique": "Donn blohß ongerscheidlijje Övverschreffte vun Datteije aanzeije. Kammer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids<code>“ bruche.\nWann als ene  Jenerahtor enjesaz, bräng Zihlsigge un kein Kwällsigge.",
+       "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the using page (cannot be used with $1unique).\n;title:Adds the title of the file.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Ballfileusages-param-prop/ksh\n-->",
+       "apihelp-query+allfileusages-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
+       "apihelp-query+allfileusages-param-dir": "En wälsche Reijefollsch?",
+       "apihelp-query+allfileusages-example-B": "Donn Övverschreffte vun Datteije aanzeije, och vun Datteije, di (noch) nit doh sin, zesame met dä Kännonge vun dä Sigge, woh se vun sin, aanjevange vun <kbd>B</kbd>.",
+       "apihelp-query+allfileusages-example-unique": "Donn ongerscheidlejje Övverschreffte vun Datteije opleßte.",
+       "apihelp-query+allfileusages-example-generator": "Holl Sigge, woh Datteieje dren vorkumme.",
+       "apihelp-query+allimages-description": "Donn alle Bellder der Reih noh opzälle.",
+       "apihelp-query+allimages-param-sort": "De Eijeschavv öm dernoh ze zottehre.",
+       "apihelp-query+allimages-param-dir": "En wälsche Reijefollsch?",
+       "apihelp-query+allimages-param-limit": "Wi vell Bellder ennsjesamp ußjävve.",
+       "apihelp-query+allimages-example-generator": "Zeisch Aanjahbe övver veer Bellder un bejenn mem Bohchschtabe <kbd>T</kbd>.",
+       "apihelp-query+alllinks-description": "Donn alle Lengk opzälle, di en e beschtemmpt Appachtemang jonn.",
+       "apihelp-query+alllinks-param-from": "De Övverschreff vun däm Lengk, woh de Leß medd aanfange sull.",
+       "apihelp-query+alllinks-param-to": "De Övverschreff vun dä Dattei, woh et Zälle ophühre sull.",
+       "apihelp-query+alllinks-param-prefix": "Söhk noh alle verlengk Övverschreffte, di met heh däm Täx aanfange.",
+       "apihelp-query+alllinks-param-namespace": "Dat Appachtemang zom opzälle.",
+       "apihelp-query+alllinks-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
+       "apihelp-query+alllinks-param-dir": "En wälsche Reijefollsch?",
+       "apihelp-query+alllinks-example-unique": "Leß ongerscheidlejje verlengk Övverschreffte.",
+       "apihelp-query+alllinks-example-generator": "Holl Sigge, di di Lengks änthallde.",
+       "apihelp-query+allmessages-description": "Donn em Wikki sing Täxte un Nohreescht ußjävve.",
+       "apihelp-query+allmessages-param-prop": "Wat för en Eijeschaffte holle.",
+       "apihelp-query+allmessages-param-args": "De Parramehtere för en dä Täx udder en di Nohreesch enzeföhje.",
+       "apihelp-query+allmessages-param-filter": "Jiv blohß de Täxte un Nohreesche uß, woh heh dat Täxschtöck dren änthallde es.",
+       "apihelp-query+allmessages-param-customised": "Jiv bloß de Täxte un Nohreesche en heh däm Zohschtand uß.",
+       "apihelp-query+allmessages-param-lang": "Jiv de Täxte un Nohreesche en heh dä Schprohch uß.",
+       "apihelp-query+allmessages-param-from": "Jiv de Täxte un Nohreesche vun heh aan uß.",
+       "apihelp-query+allmessages-param-to": "Jiv de Täxte un Nohreesche bes heh uß.",
+       "apihelp-query+allmessages-param-prefix": "Jiv de Täxte un Nohreesche met heh däm Aanfang uß.",
+       "apihelp-query+allmessages-example-ipb": "Zeijsch Täxde udder Nohreeschte di met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">ipb</kbd>“ aanfange.",
+       "apihelp-query+allmessages-example-de": "Zeijsch de Täxde udder Nohreeschte „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">august</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">mainpage</kbd>“ en Deutsch aan.",
+       "apihelp-query+allpages-description": "Donn alle Sigge der Reih noh en enem jejovve Appachtemang aan.",
+       "apihelp-query+allpages-param-from": "De Övverschreff vun dä Sigg, woh de Leß medd aanfange sull.",
+       "apihelp-query+allpages-param-to": "De Kännong vun dä Sigg, bes woh hen opzälle.",
+       "apihelp-query+allpages-param-prefix": "Söhk noh alle Övverschreffte vun Sigge, di met heh dämm Wäät bejenne.",
+       "apihelp-query+allpages-param-namespace": "De Saachjropp zom opzälle.",
+       "apihelp-query+allpages-param-filterredir": "Wat för en Sigg zem opleßte.",
+       "apihelp-query+allpages-param-minsize": "Bejränz op Sigge met winneschßdens esu vill Bytes dren.",
+       "apihelp-query+allpages-param-maxsize": "Bejränz op Sigge met hüüschßdens esu vill Bytes dren.",
+       "apihelp-query+allpages-param-prtype": "Bejränz op jeschöz Sigge.",
+       "apihelp-query+allpages-param-limit": "Wi vill Sigge zen aanzeije?",
+       "apihelp-query+allpages-param-dir": "En wälsche Reijefollsch?",
+       "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-namespace": "Dat Appachtemang zom opzälle.",
+       "apihelp-query+allredirects-param-limit": "Wi vill sulle överhoup aanjezeisch wääde?",
+       "apihelp-query+allredirects-param-dir": "En wälsche Reijefollsch?",
+       "apihelp-query+allredirects-example-B": "Zeisch Zihlsigge, och di et (noch) nit jitt, met dä Kännonge, wo se her sin, un bejenn mem Bohchschtabe <kbd>B</kbd>.",
+       "apihelp-query+allredirects-example-unique": "Ongerscheidlijje Sigge opleste.",
+       "apihelp-query+allredirects-example-generator": "Holl de Sigge met de Ömleidonge.",
+       "apihelp-query+alltransclusions-param-namespace": "Dat Appachtemang zom opzälle.",
+       "apihelp-query+alltransclusions-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
+       "apihelp-query+alltransclusions-param-dir": "En wälsche Reijefollsch?",
+       "apihelp-query+allusers-description": "Donn alle aanjemälldte Metmaacher opzälle.",
+       "apihelp-query+allusers-param-from": "Dä Metmaacher_Nahme vun woh aan opzälle.",
+       "apihelp-query+allusers-param-to": "Dä Metmaacher_Nahme bes woh hen opzälle.",
+       "apihelp-query+allusers-param-prefix": "Söhk noh alle Metmaacher_Nahme, di mit heh däm Wäät bejenne.",
+       "apihelp-query+allusers-param-dir": "De Reijefollsch zum Zotehre.",
+       "apihelp-query+allusers-param-group": "Donn blohß Metmaacher uß dä aanjejovve Jroppe enschlehße.",
+       "apihelp-query+allusers-param-excludegroup": "Donn keine Metmaacher uß dä aanjejovve Jroppe enschlehße.",
+       "apihelp-query+allusers-param-limit": "Wi vill Nahme Metmaacher sulle mer krijje?",
+       "apihelp-query+allusers-param-witheditsonly": "Blohß Metmahcher, di och ens jät verändert han.",
+       "apihelp-query+allusers-param-activeusers": "Donn blohß Metmaacher opleßte, di  {{PLURAL:$1|der läzde Daach|en de läzde $1 Dääsch|keine läzde Daach}} aktihf wohre.",
+       "apihelp-query+allusers-example-Y": "Monn metmaacher opleßte, woh de Nahme vun met <kbd>Y</kbd> aanfange.",
+       "apihelp-query+backlinks-description": "Fengk alle Sigge, di op de aanjejovve Sigg lengke.",
+       "apihelp-query+backlinks-param-namespace": "Dat Appachtemang zom opzälle.",
+       "apihelp-query+backlinks-param-dir": "En wälsche Reijefollsch?",
+       "apihelp-query+backlinks-example-simple": "Zeijsch Lengks op de Sigg <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main page<kbd>.",
+       "apihelp-query+blocks-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+       "apihelp-query+blocks-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
+       "apihelp-query+blocks-param-limit": "De hühßde Aanzahl Spärre zom opleste.",
+       "apihelp-query+blocks-param-prop": "Which properties to get:\n;id:Adds the ID of the block.\n;user:Adds the username of the blocked user.\n;userid:Adds the user ID of the blocked user.\n;by:Adds the username of the blocking user.\n;byid:Adds the user ID of the blocking user.\n;timestamp:Adds the timestamp of when the block was given.\n;expiry:Adds the timestamp of when the block expires.\n;reason:Adds the reason given for the block.\n;range:Adds the range of IP addresses affected by the block.\n;flags:Tags the ban with (autoblock, anononly, etc.).\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bblocks-param-prop/ksh\n-->",
+       "apihelp-query+blocks-example-simple": "Schpärre opleßte.",
+       "apihelp-query+blocks-example-users": "Donn de Schpärre vun dä Metmaacher <lang=\"en\" xml:lang=\"en\" dir=\"ltr\" kbd>Alice</kbd> un <lang=\"en\" xml:lang=\"en\" dir=\"ltr\" kbd>Bob</kbd> opleßte.",
+       "apihelp-query+categories-description": "Donn alle Saachjroppe epleßte, woh di Sigge dren sin.",
+       "apihelp-query+categories-param-prop": "Which additional properties to get for each category:\n;sortkey:Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category.\n;timestamp:Adds timestamp of when the category was added.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bcategories-param-prop/ksh\n-->",
+       "apihelp-query+categories-param-show": "Wat för en Zoot Saachjroppe zeije.",
+       "apihelp-query+categories-param-limit": "Wi vell Saachjroppe ußjävve?",
+       "apihelp-query+categories-param-dir": "En wälsche Reijefollsch?",
+       "apihelp-query+categories-example-simple": "Holl en Leß med alle Saachjroppe, woh di Sigg <kbd>Albert Einstein</kbd> dren es.",
+       "apihelp-query+categories-example-generator": "Holl Aanjahbe övver alle Saachjroppe, di en dä Sigg <kbd>Albert Einstein</kbd> jebruch wähde.",
+       "apihelp-query+categoryinfo-description": "Holl Aanjahbe övver de aanjejovve Saachjroppe.",
+       "apihelp-query+categorymembers-description": "Donn alle Sigge en ener aanjejove saachjrobb opleste.",
+       "apihelp-query+categorymembers-param-limit": "De jrüüßte Zahl Sigge för ußzejävve.",
+       "apihelp-query+categorymembers-param-sort": "De Eijeschavv öm dernoh ze zottehre.",
+       "apihelp-query+categorymembers-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+categorymembers-param-startsortkey": "Söhk „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1starthexsortkey</code>“ schtatt dämm.",
+       "apihelp-query+categorymembers-param-endsortkey": "Söhk „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1endhexsortkey </code>“ schtatt dämm.",
+       "apihelp-query+categorymembers-example-simple": "Holl de eezde zehn Sigge de dä <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Category:Physics</kbd>.",
+       "apihelp-query+categorymembers-example-generator": "Holl anjahbe övver de eezde zehn Sigge de dä <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Category:Physics</kbd>.",
+       "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: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.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bdeletedrevisions-param-prop/en\n-->",
+       "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+duplicatefiles-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+embeddedin-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+filearchive-param-dir": "En wälsche Reijefollsch opleßte.",
+       "apihelp-query+images-param-dir": "En wälsche Reijefollsch opleßte.",
+       "apihelp-query+imageusage-param-namespace": "Dat Appachtemang zom opzälle.",
+       "apihelp-query+imageusage-param-dir": "En wälsche Reijefollsch opleßte.",
+       "apihelp-query+info-paramvalue-prop-watchers": "De Aanzahl Oppaßer, wann zohjelohße.",
+       "apihelp-query+iwbacklinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+iwlinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+langbacklinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+langlinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+links-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+pagepropnames-param-limit": "De jrüüßte Zahl Nahme för ußzejävve.",
+       "apihelp-query+pagepropnames-example-simple": "Holl de eezde zehn Nahme vun Eijeschaffte.",
+       "apihelp-query+pageswithprop-param-limit": "De jrüüßte Zahl Sigge för ußzejävve.",
+       "apihelp-query+pageswithprop-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+prefixsearch-param-namespace": "En wällschem Appachtemang söhke.",
+       "apihelp-query+prefixsearch-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
+       "apihelp-query+querypage-param-limit": "De Aanzahl vun Äjeebnesse för zeröck ze jävve",
+       "apihelp-query+random-param-limit": "Wi vill zohfälleje Sigge sulle ußjejovve wähde?",
+       "apihelp-query+revisions+base-param-limit": "Wi vill Väsjohne sulle ußjejovve wähde?",
+       "apihelp-query+siteinfo-param-numberingroup": "Donn de Aanzahl Metmaacher en de Jroppe vun Metmaacher opleßte.",
+       "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:Adds name of tag.\n;displayname:Adds system message for the tag.\n;description:Adds description of the tag.\n;hitcount:Adds the number of revisions and log entries that have this tag.\n;defined:Indicate whether the tag is defined.\n;source:Gets the sources of the tag, which may include <samp>extension</samp> for extension-defined tags and <samp>manual</samp> for tags that may be applied manually by users.\n;active:Whether the tag is still being applied.\n<!-- https://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Btags-param-prop/ksh\n -->",
+       "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+usercontribs-param-limit": "De hühßte Aanzahl vun Meddeilonge för zeröck ze jävve",
+       "api-help-param-default": "Schtandatt: $1",
+       "api-help-param-default-empty": "Schtandatt: <span class=\"apihelp-empty\">(läddesch)</span>",
+       "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:List oldest first. Note: $1start has to be before $1end.\n;older:List newest first (default). Note: $1start has to be later than $1end.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Api-help-param-direction/ksh\n-->",
+       "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}}:",
+       "api-help-permissions": "{{PLURAL:$1|Rääsch|Rääschde|Rääsch}}:",
+       "api-help-permissions-granted-to": "Jejovve aan: $2{{PLURAL:$1|}}",
+       "api-help-right-apihighlimits": "Donn de Beschängkonge vun Opdrähscht aan de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> kleiner maache (langsamme Opdrähscht: $1; flöcke Opdrähscht: $2). De Beschränkonge för lahme Opdrähscht jällde och för Parramehtere met vill Wähte.",
+       "api-credits-header": "Aanäkännong för Beijdrähsch",
+       "api-credits": "Dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ier Äntweklere:\n* Roan Kattouw (Aanföhrer zigg em Säptämber 2007 bes 2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (Bejenner un Aanföhrer vum Säptämber 2006 bes Säptämber 2007)\n* Brad Jorsch (Aanföhrer vun 2013 bes hük)\n\nDoht Ühr Aanmärkonge, Vörschlähsch un Frohre aan de Meijlengleß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">mediawiki-api@lists.wikimedia.org</code> scheke, Ühr Vörschlähsch un Fählermälldong doht op <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">https://phabricator.wikimedia.org/</code> ennjävve."
 }
index c54e089..ac2a1d3 100644 (file)
@@ -11,6 +11,7 @@
        "apihelp-block-param-nocreate": "Opmaache vun engem Benotzerkont verhënneren.",
        "apihelp-block-param-reblock": "Wann de Benotzer scho gespaart ass, déi aktuell Spär iwwerschreiwen.",
        "apihelp-block-param-watchuser": "Dem Benotzer oder der IP-Adress hier Benotzer- an Diskussiouns-Säiten iwwerwaachen.",
+       "apihelp-compare-param-fromtitle": "Éischten Titel fir ze vergläichen.",
        "apihelp-createaccount-description": "En neie Benotzerkont uleeën.",
        "apihelp-createaccount-param-name": "Benotzernumm.",
        "apihelp-createaccount-param-email": "E-Mail-Adress vum Benotzer (fakultativ).",
diff --git a/includes/api/i18n/ln.json b/includes/api/i18n/ln.json
new file mode 100644 (file)
index 0000000..cd11746
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Moyogo"
+               ]
+       },
+       "apihelp-edit-example-edit": "Kobɔngisa lokásá lɔ̌kɔ́."
+}
index 28a1404..72816b9 100644 (file)
@@ -6,16 +6,18 @@
                        "Robin0van0der0vliet",
                        "Mar(c)",
                        "Valhallasw",
-                       "Sikjes"
+                       "Sikjes",
+                       "Macofe",
+                       "SPQRobin"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page Documentatie]\n* [https://www.mediawiki.org/wiki/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 https://www.mediawiki.org/wiki/API:Errors_and_warnings voor meer informatie.",
+       "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 \"maxlag\" teruggegeven met een bericht als \"Waiting for $host: $lag seconds lagged\".<br />Zie https://www.mediawiki.org/wiki/Manual:Maxlag_parameter voor mee informatie.",
+       "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-assert": "Controleer of de gebruiker is aangemeld als \"user\" is meegegeven, en of de gebruiker het robotgebruikersrecht heeft als \"bot\" is meegegeven.",
+       "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.",
        "apihelp-main-param-curtimestamp": "Huidige tijd aan het antwoord toevoegen.",
        "apihelp-block-param-reason": "Reden voor blokkade.",
        "apihelp-block-param-autoblock": "Blokkeer automatisch het laatst gebruikte IP-adres en ieder volgend IP-adres van waaruit ze proberen in te loggen.",
        "apihelp-block-param-reblock": "De huidige blokkade aanpassen als de gebruiker al geblokkeerd is.",
+       "apihelp-createaccount-param-name": "Gebruikersnaam.",
        "apihelp-delete-description": "Verwijder een pagina.",
-       "apihelp-delete-example-simple": "Verwijder de Hoofdpagina",
-       "apihelp-delete-example-reason": "Verwijder de Hoofdpagina met als reden \"Voorbereiding voor verplaatsing\"",
+       "apihelp-delete-example-simple": "Verwijder <kbd>Hoofdpagina</kbd>.",
+       "apihelp-delete-example-reason": "Verwijder <kbd>Hoofdpagina</kbd> met als reden <kbd>Voorbereiding voor verplaatsing</kbd>.",
        "apihelp-disabled-description": "Deze module is uitgeschakeld.",
        "apihelp-edit-param-minor": "Kleine bewerking.",
        "apihelp-edit-param-notminor": "Geen kleine bewerking.",
diff --git a/includes/api/i18n/oc.json b/includes/api/i18n/oc.json
new file mode 100644 (file)
index 0000000..dc12b66
--- /dev/null
@@ -0,0 +1,17 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Cedric31"
+               ]
+       },
+       "apihelp-main-param-action": "Quina accion cal efectuar.",
+       "apihelp-main-param-format": "Lo format de sortida.",
+       "apihelp-block-description": "Blocar un utilizaire.",
+       "apihelp-block-param-reason": "Motiu del blocatge.",
+       "apihelp-block-param-nocreate": "Empachar la creacion de compte.",
+       "apihelp-checktoken-param-token": "Geton de testar.",
+       "apihelp-createaccount-param-name": "Nom d'utilizaire.",
+       "apihelp-delete-example-simple": "Suprimir la <kbd>Pagina principala</kbd>.",
+       "apihelp-edit-param-text": "Contengut de la pagina.",
+       "apihelp-edit-param-minor": "Modificacion menora."
+}
index a652de6..c82d88f 100644 (file)
@@ -6,6 +6,7 @@
        },
        "apihelp-delete-example-simple": "Buran ya ing <kbd>Pun Bulung</kbd>.",
        "apihelp-edit-example-edit": "Alilan ya ing bulung.",
+       "apihelp-feedrecentchanges-example-simple": "Pakit deng bayung mengayalili.",
        "apihelp-help-example-main": "Saup para king pun modyul.",
        "apihelp-help-example-recursive": "Deng eganaganang saup king metung a bulung.",
        "apihelp-login-example-login": "Magpatala (login)",
index 825f35c..ab54515 100644 (file)
@@ -5,18 +5,23 @@
                        "Py64",
                        "Pan Cube",
                        "Alan ffm",
-                       "Devwebtel"
+                       "Devwebtel",
+                       "Macofe",
+                       "Pio387",
+                       "Peter Bowman",
+                       "Darellur"
                ]
        },
        "apihelp-main-param-action": "Wybierz akcję do wykonania.",
        "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 \"maxlag\" jest zwracany z wiadomością jak \"Oczekiwanie na $host: $lag sekund opóźnienia\".<br />Zobacz https://www.mediawiki.org/wiki/Manual:Maxlag_parameter by uzyskać więcej informacji.",
-       "apihelp-main-param-assert": "Sprawdź, czy użytkownik jest zalogowany jeżeli jest ustawiony na \"użytkownik\", lub ma prawa bota jeśli \"bot\".",
+       "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-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-nocreate": "Zapobiegnij utworzeniu konta.",
        "apihelp-block-param-watchuser": "Obserwuj stronę użytkownika i jego IP oraz jego stronę dyskusji.",
-       "apihelp-block-example-ip-simple": "Zablokuj IP 192.0.2.5 na 3 dni za \"Pierwszy atak\"",
+       "apihelp-block-example-ip-simple": "Zablokuj IP <kbd>192.0.2.5</kbd> na 3 dni za <kbd>Pierwszy atak</kbd>.",
        "apihelp-createaccount-param-name": "Nazwa użytkownika",
        "apihelp-delete-description": "Usuń stronę.",
        "apihelp-delete-param-watch": "Dodaj stronę do twojej listy obserwowanych.",
        "apihelp-edit-param-text": "Zawartość strony.",
        "apihelp-edit-param-minor": "Drobna zmiana.",
        "apihelp-edit-param-notminor": "Nie drobna zmiana.",
-       "apihelp-edit-param-bot": "Oznacz tą edycję jako edycję bota.",
+       "apihelp-edit-param-bot": "Oznacz tę edycję jako edycję bota.",
+       "apihelp-edit-param-watch": "Dodaj stronę do aktualnej listy obserwacji użytkownika.",
+       "apihelp-edit-param-unwatch": "Usuń stronę z aktualnej listy obserwacji użytkownika.",
        "apihelp-edit-example-edit": "Edytuj stronę",
        "apihelp-emailuser-description": "Wyślij e‐mail do użytkownika.",
+       "apihelp-feedrecentchanges-example-simple": "Pokaż ostatnie zmiany.",
        "apihelp-help-description": "Wyświetl pomoc dla określonych modułów.",
-       "apihelp-help-param-modules": "Moduły do wyświetlenia pomocy dla (wartości akcji= i format= parametry, lub \"głównego\"). Może określić podmoduły z \"+\".",
+       "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-example-main": "Pomoc dla modułu głównego",
        "apihelp-help-example-recursive": "Cała pomoc na jednej stronie.",
        "apihelp-login-example-login": "Zaloguj się",
        "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-move-param-ignorewarnings": "Ignoruj wszystkie ostrzeżenia.",
        "apihelp-protect-example-protect": "Zabezpiecz stronę",
        "apihelp-query+allpages-example-B": "Pokaż listę stron rozpoczynających się na literę <kbd>B</kbd>.",
+       "apihelp-query+filearchive-example-simple": "Pokaż listę wszystkich usuniętych plików.",
        "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Dodaje kanoniczny tytuł pliku.",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias rozmiaru.",
        "apihelp-query+imageinfo-paramvalue-prop-mime": "Dodaje typ MIME pliku.",
        "api-help-param-integer-max": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być nie większa niż $3.",
        "api-help-param-integer-minmax": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być pomiędzy $2 a $3.",
        "api-help-param-multi-separate": "Oddziel wartości za pomocą <kbd>|</kbd>.",
-       "api-help-param-multi-max": "Maksymalna ilość wartości to {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} dla botów).",
+       "api-help-param-multi-max": "Maksymalna liczba wartości to {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} dla botów).",
        "api-help-param-default": "Domyślnie: $1",
        "api-help-param-default-empty": "Domyślnie: <span class=\"apihelp-empty\">(puste)</span>",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(bez opisu)</span>",
diff --git a/includes/api/i18n/ps.json b/includes/api/i18n/ps.json
new file mode 100644 (file)
index 0000000..b939902
--- /dev/null
@@ -0,0 +1,29 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ahmed-Najib-Biabani-Ibrahimkhel"
+               ]
+       },
+       "apihelp-block-description": "په يو کارن بنديز لگول.",
+       "apihelp-block-param-user": "کارن-نوم، IP پته، يا IP سيمې باندې بنديز لگول.",
+       "apihelp-block-param-reason": "د بنديز سبب.",
+       "apihelp-createaccount-param-name": "کارن-نوم.",
+       "apihelp-delete-description": "يو مخ ړنگول.",
+       "apihelp-edit-param-text": "مخ مېنځپانگه.",
+       "apihelp-edit-example-edit": "يو مخ سمول.",
+       "apihelp-emailuser-description": "کارن ته برېښليک لېږل.",
+       "apihelp-expandtemplates-param-title": "د مخ سرليک.",
+       "apihelp-login-param-name": "کارن نوم.",
+       "apihelp-login-param-password": "پټنوم.",
+       "apihelp-login-param-domain": "شپول (اختياري).",
+       "apihelp-login-example-login": "ننوتل.",
+       "apihelp-move-description": "يو مخ لېږدول.",
+       "apihelp-query+search-example-simple": "د <kbd>مانا</kbd> پلټل.",
+       "apihelp-query+search-example-text": "د <kbd>مانا</kbd> لپاره متنونه پلټل.",
+       "apihelp-userrights-param-user": "کارن نوم.",
+       "apihelp-userrights-param-userid": "کارن پېژند.",
+       "api-help-param-default": "تلواليز: $1",
+       "api-help-param-default-empty": "تلواليز: <span class=\"apihelp-empty\">(تش)</span>",
+       "api-help-examples": "{{PLURAL:$1|بېلگه|بېلگې}}:",
+       "api-help-permissions": "{{PLURAL:$1|پرېښه|پرېښې}}:"
+}
index f539ac6..05b7722 100644 (file)
@@ -6,7 +6,8 @@
                        "Shirayuki",
                        "Umherirrender",
                        "McDutchie",
-                       "Raymond"
+                       "Raymond",
+                       "Anomie"
                ]
        },
        "apihelp-main-description": "{{doc-apihelp-description|main}}",
        "apihelp-block-param-watchuser": "{{doc-apihelp-param|block|watchuser}}",
        "apihelp-block-example-ip-simple": "{{doc-apihelp-example|block}}",
        "apihelp-block-example-user-complex": "{{doc-apihelp-example|block}}",
-       "apihelp-clearhasmsg-description": "{{doc-apihelp-description|clear<code>hasmsg</code>}}",
-       "apihelp-clearhasmsg-example-1": "{{doc-apihelp-example|clear<code>hasmsg</code>}}",
+       "apihelp-checktoken-description": "{{doc-apihelp-description|checktoken}}",
+       "apihelp-checktoken-param-type": "{{doc-apihelp-param|checktoken|type}}",
+       "apihelp-checktoken-param-token": "{{doc-apihelp-param|checktoken|token}}",
+       "apihelp-checktoken-param-maxtokenage": "{{doc-apihelp-param|checktoken|maxtokenage}}",
+       "apihelp-checktoken-example-simple": "{{doc-apihelp-example|checktoken}}",
+       "apihelp-clearhasmsg-description": "{{doc-apihelp-description|clearhasmsg}}",
+       "apihelp-clearhasmsg-example-1": "{{doc-apihelp-example|clearhasmsg}}",
        "apihelp-compare-description": "{{doc-apihelp-description|compare}}",
        "apihelp-compare-param-fromtitle": "{{doc-apihelp-param|compare|fromtitle}}",
        "apihelp-compare-param-fromid": "{{doc-apihelp-param|compare|fromid}}",
        "apihelp-managetags-param-reason": "{{doc-apihelp-param|managetags|reason}}",
        "apihelp-managetags-param-ignorewarnings": "{{doc-apihelp-param|managetags|ignorewarnings}}",
        "apihelp-managetags-example-create": "{{doc-apihelp-example|managetags}}",
-       "apihelp-managetags-example-delete": "{{doc-apihelp-example|managetags}}",
+       "apihelp-managetags-example-delete": "{{doc-apihelp-example|managetags|info={{doc-important|The text \"vandlaism\" in this message is intentionally misspelled; the example being documented by this message is the deletion of a misspelled tag.}}}}",
        "apihelp-managetags-example-activate": "{{doc-apihelp-example|managetags}}",
        "apihelp-managetags-example-deactivate": "{{doc-apihelp-example|managetags}}",
        "apihelp-move-description": "{{doc-apihelp-description|move}}",
        "apihelp-parse-param-onlypst": "{{doc-apihelp-param|parse|onlypst}}",
        "apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
        "apihelp-parse-param-section": "{{doc-apihelp-param|parse|section}}",
+       "apihelp-parse-param-sectiontitle": "{{doc-apihelp-param|parse|sectiontitle}}",
        "apihelp-parse-param-disablepp": "{{doc-apihelp-param|parse|disablepp}}",
        "apihelp-parse-param-disableeditsection": "{{doc-apihelp-param|parse|disableeditsection}}",
        "apihelp-parse-param-generatexml": "{{doc-apihelp-param|parse|generatexml|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
        "apihelp-query+info-paramvalue-prop-readable": "{{doc-apihelp-paramvalue|query+info|prop|readable}}",
        "apihelp-query+info-paramvalue-prop-preload": "{{doc-apihelp-paramvalue|query+info|prop|preload}}",
        "apihelp-query+info-paramvalue-prop-displaytitle": "{{doc-apihelp-paramvalue|query+info|prop|displaytitle}}",
+       "apihelp-query+info-param-testactions": "{{doc-apihelp-param|query+info|testactions}}",
        "apihelp-query+info-param-token": "{{doc-apihelp-param|query+info|token}}",
        "apihelp-query+info-example-simple": "{{doc-apihelp-example|query+info}}",
        "apihelp-query+info-example-protection": "{{doc-apihelp-example|query+info}}",
index 56d34ef..e533d79 100644 (file)
@@ -3,28 +3,33 @@
                "authors": [
                        "Mahairod",
                        "Okras",
-                       "Eakarpov"
+                       "Eakarpov",
+                       "Kaganer"
                ]
        },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки, и может измениться в любой момент. Подпишитесь на  [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом \"MediaWiki-API-Error\", после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].",
        "apihelp-main-param-action": "Действие, которое следует выполнить.",
        "apihelp-main-param-format": "Формат вывода.",
        "apihelp-main-param-smaxage": "Устанавливает заголовок <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
        "apihelp-main-param-maxage": "Устанавливает заголовок <code>max-age</code> в заданное число секунд. Ошибки никогда не кэшируются.",
-       "apihelp-main-param-assert": "Удостовериться, что пользователь авторизован, если задано \"user\", или что имеет права бота, если задано \"bot\".",
-       "apihelp-main-param-requestid": "Ð\9bÑ\8eбое Ð·Ð½Ð°Ñ\87ение, Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ðµ Ð·Ð´ÐµÑ\81Ñ\8c, будет включено в ответ. Может быть использовано для различения запросов.",
+       "apihelp-main-param-assert": "Удостовериться, что пользователь авторизован, если задано <kbd>user</kbd>, или что имеет права бота, если задано <kbd>bot</kbd>.",
+       "apihelp-main-param-requestid": "Ð\9bÑ\8eбое Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ðµ Ð·Ð´ÐµÑ\81Ñ\8c Ð·Ð½Ð°Ñ\87ение будет включено в ответ. Может быть использовано для различения запросов.",
        "apihelp-main-param-servedby": "Включить в результаты имя хоста, обработавшего запрос.",
        "apihelp-main-param-curtimestamp": "Включить в результаты временную метку.",
-       "apihelp-main-param-origin": "При обращении к API, используя кросс-доменный AJAX запрос (CORS), задайте параметру значение исходного домена. Он должен быть включён в любой предварительный запрос и таким образом должен быть частью URI запроса (не тела POST). Он должен точно соответствовать одному из источников в заголовке Origin:, так что он должен быть задан наподобие http://en.wikipedia.org или https://meta.wikimedia.org. Если параметр не соответствует заголовку Origin:, будет возвращён ответ с кодом ошибки 403. Если параметр соответствует заголовку Origin: и источник в белом списке, будет установлен заголовок Access-Control-Allow-Origin.",
+       "apihelp-main-param-origin": "При обращении к API, используя кросс-доменный AJAX-запрос (CORS), задайте параметру значение исходного домена. Он должен быть включён в любой предварительный запрос и таким образом должен быть частью URI-запроса (не тела POST). Он должен точно соответствовать одному из источников в заголовке <code>Origin<code>, так что он должен быть задан наподобие <kbd>https://ru.wikipedia.org</kbd> или <kbd>https://meta.wikimedia.org</kbd>. Если параметр не соответствует заголовку <code>Origin<code>, будет возвращён ответ с кодом ошибки 403. Если параметр соответствует заголовку <code>Origin</code>, и источник находится в белом списке, будет установлен заголовок <code>Access-Control-Allow-Origin</code>.",
        "apihelp-block-description": "Блокировка участника.",
        "apihelp-block-param-user": "Имя участника, IP-адрес или диапазон IP-адресов, которые вы хотите заблокировать.",
        "apihelp-block-param-reason": "Причина блокировки.",
        "apihelp-block-param-nocreate": "Запретить создание учётных записей.",
        "apihelp-createaccount-param-name": "Имя участника.",
        "apihelp-delete-description": "Удалить страницу.",
-       "apihelp-delete-param-watch": "Ð\94обавиÑ\82Ñ\8c Ñ\8dÑ\82Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð² Ñ\81пиÑ\81ок Ð½Ð°Ð±Ð»Ñ\8eдения.",
+       "apihelp-delete-param-watch": "Ð\94обавиÑ\82Ñ\8c Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ðº Ñ\82екÑ\83Ñ\89емÑ\83 Ñ\81пиÑ\81кÑ\83 Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f Ð¿Ð¾Ð»Ñ\8cзоваÑ\82еля.",
        "apihelp-disabled-description": "Этот модуль был отключен.",
        "apihelp-edit-param-sectiontitle": "Заголовок для нового раздела.",
        "apihelp-edit-param-text": "Содержание страницы.",
+       "apihelp-edit-param-minor": "Незначительное изменение (малая правка).",
+       "apihelp-edit-param-notminor": "Значительное изменение (обычная, не «малая», правка).",
+       "apihelp-edit-param-bot": "Пометить правку как сделанную ботом.",
        "apihelp-edit-param-watch": "Добавить страницу к текущему списку наблюдения пользователя.",
        "apihelp-edit-example-edit": "Редактировать страницу",
        "apihelp-expandtemplates-param-title": "Заголовок страницы.",
index 207a74e..aa88484 100644 (file)
@@ -9,12 +9,16 @@
                        "Peki01",
                        "Stens51",
                        "Boom",
-                       "Jenniesarina"
+                       "Jenniesarina",
+                       "Marfuas",
+                       "VickyC"
                ]
        },
        "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]].",
        "apihelp-main-param-action": "Vilken åtgärd som ska utföras.",
        "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-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.",
@@ -62,6 +66,7 @@
        "apihelp-delete-param-pageid": "Sid-ID för sidan att radera. Kan inte användas tillsammans med <var>$1titel</var>.",
        "apihelp-delete-param-reason": "Orsak till radering. Om orsak inte ges kommer en orsak att automatiskt genereras och användas.",
        "apihelp-delete-param-watch": "Lägg till sidan i aktuell användares bevakningslista.",
+       "apihelp-delete-param-watchlist": "Lägg till eller ta bort sidan ovillkorligen från den aktuella användarens bevakningslista, använd inställningar eller ändra inte bevakning.",
        "apihelp-delete-param-unwatch": "Ta bort sidan från aktuell användares bevakningslista.",
        "apihelp-delete-param-oldimage": "Namnet på den gamla bilden att radera som tillhandahålls av [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
        "apihelp-delete-example-simple": "Radera <kbd>huvudsidan</kbd>.",
        "apihelp-edit-param-nocreate": "Kasta ett fel om sidan inte finns.",
        "apihelp-edit-param-watch": "Lägg till sidan i den aktuella användarens bevakningslista.",
        "apihelp-edit-param-unwatch": "Ta bort sidan från aktuell användares bevakningslista.",
+       "apihelp-edit-param-watchlist": "Lägg till eller ta bort sidan ovillkorligen från den aktuella användarens bevakningslista, använd inställningar eller ändra inte bevakning.",
        "apihelp-edit-param-md5": "MD5-hash för $1text-parametern, eller $1prependtext- och $1appendtext-parametrarna sammanfogade.",
        "apihelp-edit-param-prependtext": "Lägg till denna text i början på sidan. Ersätter $1text.",
        "apihelp-edit-param-appendtext": "Lägg till denna text i slutet på sidan. Ersätter $1text.\n\nAnvänd $1section=new för att lägga till en ny sektion, hellre än denna parameter.",
        "apihelp-edit-param-redirect": "Åtgärda automatiskt omdirigeringar.",
+       "apihelp-edit-param-contentformat": "Det serialiseringsformat som används för indatatexten.",
+       "apihelp-edit-param-contentmodel": "Det nya innehållets innehållsmodell.",
        "apihelp-edit-param-token": "Token ska alltid skickas som sista parameter, eller åtminstone efter $1text-parametern",
        "apihelp-edit-example-edit": "Redigera en sida",
        "apihelp-emailuser-description": "Skicka e-post till en användare.",
        "apihelp-expandtemplates-param-includecomments": "Om HTML-kommentarer skall inkluderas i utdata.",
        "apihelp-expandtemplates-param-generatexml": "Generera ett XML tolknings träd (ersatt av $1prop=parsetree).",
        "apihelp-expandtemplates-example-simple": "Expandera wikitexten <kbd><nowiki>{{Projekt:Sandbox}}</nowiki></kbd>.",
+       "apihelp-feedcontributions-description": "Returnerar en användares bidragsflöde.",
+       "apihelp-feedcontributions-param-feedformat": "Flödets format.",
+       "apihelp-feedcontributions-param-user": "De användare vars bidrag ska hämtas.",
        "apihelp-feedcontributions-param-namespace": "Vilken namnrymd att filtrera bidrag med.",
        "apihelp-feedcontributions-param-year": "Från år (och tidigare).",
        "apihelp-feedcontributions-param-month": "Från månad (och tidigare).",
        "apihelp-feedcontributions-param-toponly": "Visa endast ändringar som är senaste revideringen.",
        "apihelp-feedcontributions-param-newonly": "Visa endast redigeringar där sidor skapas.",
        "apihelp-feedcontributions-param-showsizediff": "Visa skillnaden i storlek mellan revisioner.",
-       "apihelp-feedcontributions-example-simple": "Returnera bidrag för [[User:Example]]",
+       "apihelp-feedcontributions-example-simple": "Returnera bidrag för <kbd>Exempel</kbd>",
+       "apihelp-feedrecentchanges-description": "Returnerar ett flöde med senaste ändringar.",
+       "apihelp-feedrecentchanges-param-feedformat": "Flödets format.",
        "apihelp-feedrecentchanges-param-namespace": "Namnrymder att begränsa resultaten till.",
        "apihelp-feedrecentchanges-param-invert": "Alla namnrymder utom den valda.",
        "apihelp-feedrecentchanges-param-days": "Dagar att begränsa resultaten till.",
        "apihelp-feedrecentchanges-param-showlinkedto": "Visa ändringarna på sidor som är länkade till den valda sidan i stället.",
        "apihelp-feedrecentchanges-example-simple": "Visa senaste ändringar",
        "apihelp-feedrecentchanges-example-30days": "Visa senaste ändringar för 30 dygn",
+       "apihelp-feedwatchlist-description": "Returnerar ett flöde från bevakningslistan.",
+       "apihelp-feedwatchlist-param-feedformat": "Flödets format.",
        "apihelp-feedwatchlist-param-hours": "Lista sidor ändrade inom så här många timmar från nu.",
        "apihelp-feedwatchlist-param-linktosections": "Länka direkt till ändrade avsnitt om möjligt.",
+       "apihelp-feedwatchlist-example-default": "Visa flödet från bevakningslistan.",
        "apihelp-feedwatchlist-example-all6hrs": "Visa alla ändringar på besökta sidor under de senaste sex timmarna.",
        "apihelp-filerevert-description": "Återställ en fil till en äldre version.",
+       "apihelp-filerevert-param-filename": "Målfilens namn, utan prefixet Fil:.",
        "apihelp-filerevert-param-comment": "Ladda upp kommentar.",
        "apihelp-filerevert-param-archivename": "Arkiv-namn för revisionen att gå tillbaka till.",
        "apihelp-filerevert-example-revert": "Återställ <kbd>Wiki.png</kbd> till versionen från <kbd>2011-03-05T15:27:40Z</kbd>",
        "apihelp-help-description": "Visa hjälp för de angivna modulerna.",
+       "apihelp-help-param-modules": "Vilka moduler som hjälpen ska visas för (värdena på parametrarna <var>action</var> och <var>format</var>, eller <kbd>main</kbd>). Undermoduler kan anges med ett plustecken (<kbd>+</kbd>).",
        "apihelp-help-param-submodules": "Inkludera hjälp för undermoduler av den namngivna modulen.",
        "apihelp-help-param-recursivesubmodules": "Inkludera hjälp för undermoduler rekursivt.",
        "apihelp-help-param-helpformat": "Formatet för hjälp-utdata.",
        "apihelp-import-param-namespace": "För interwiki-importer: importera till denna namnrymd.",
        "apihelp-import-param-rootpage": "Importera som undersida till denna sida.",
        "apihelp-import-example-import": "Importera [[meta:Help:Parserfunktioner]] 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-login-param-domain": "Domän (valfritt).",
        "apihelp-logout-description": "Logga ut och rensa sessionsdata.",
        "apihelp-logout-example-logout": "Logga ut den aktuella användaren",
        "apihelp-managetags-description": "Utför hanterings uppgifter relaterade till förändrings taggar.",
-       "apihelp-managetags-param-tag": "Tagg att skapa, radera, aktivera eller inaktivera. För skapande av tagg, får taggen inte existera. För raderande av tagg, så måste taggen existera. För aktiverande av tagg, taggen måste existera och inte användas i en förlängning. För tagg inaktivering, taggen måste användas just nu och vara manuellt definierat.",
+       "apihelp-managetags-param-tag": "Tagg för att skapa, radera, aktivera eller inaktivera. Vid skapande av tagg kan taggen inte existera. Vid raderande av tagg måste taggen existera. För aktiverande av tagg måste taggen existera och inte användas i ett tillägg. För inaktivering av tagg måste taggen användas just nu och vara manuellt definierad.",
        "apihelp-managetags-param-reason": "En icke-obligatorisk orsak för att skapa, radera, aktivera, eller inaktivera taggen.",
        "apihelp-managetags-param-ignorewarnings": "Om du vill ignorera varningar som utfärdas under operationen.",
        "apihelp-managetags-example-create": "Skapa en tagg vid namn <kbd>spam</kbd> med anledningen: <kbd>För användning i redigerings patrullering</kbd>",
        "apihelp-move-param-noredirect": "Skapa inte en omdirigering.",
        "apihelp-move-param-watch": "Lägg till sidan och omdirigeringen till den aktuella användarens bevakningslista.",
        "apihelp-move-param-unwatch": "Ta bort sidan och omdirigeringen från den aktuella användarens bevakningslista.",
+       "apihelp-move-param-watchlist": "Lägg till eller ta bort sidan ovillkorligen från den aktuella användarens bevakningslista, använd inställningar eller ändra inte bevakning.",
        "apihelp-move-param-ignorewarnings": "Ignorera alla varningar.",
+       "apihelp-move-example-move": "Flytta <kbd>Felaktig titel</kbd> till <kbd>Korrekt titel</kbd> utan att lämna en omdirigering.",
        "apihelp-opensearch-description": "Sök wikin med protokollet OpenSearch.",
        "apihelp-opensearch-param-search": "Söksträng.",
        "apihelp-opensearch-param-limit": "Maximalt antal resultat att returnera.",
        "apihelp-options-example-complex": "Återställ alla inställningar, ställ sedan in <kbd>skin</kbd> och <kbd>nickname</kbd>.",
        "apihelp-paraminfo-description": "Få information om API moduler.",
        "apihelp-paraminfo-param-helpformat": "Format för hjälpsträngar.",
+       "apihelp-paraminfo-param-mainmodule": "Få information om huvud-modulen (top-level) också. Använd <kbd>$1modules=main</kbd> istället.",
        "apihelp-parse-param-summary": "Sammanfattning att tolka.",
        "apihelp-parse-param-page": "Tolka innehållet av denna sida. Kan inte användas tillsammans med <var>$1text</var> och <var>$1title</var>.",
        "apihelp-parse-param-pageid": "Tolka innehållet på denna sida. Åsidosätter <var>$1sidan</var>.",
        "apihelp-query+allimages-param-sha1base36": "SHA1 hash av bild i bas 36 (används i MediaWiki).",
        "apihelp-query+allimages-param-user": "Returnera enbart filer uppladdade av denna användare. Kan enbart användas med $1sort=timestamp. Kan inte användas tillsammans med $1filterbots.",
        "apihelp-query+allimages-param-filterbots": "Hur man filtrerar filer uppladdade av bots. Kan enbart användas med $1sort=timestamp. Kan inte användas tillsammans med $1user.",
+       "apihelp-query+allimages-param-mime": "Vilka MIME-typer du vill söka efter, t.ex. <kbd>image/jpeg</kbd>.",
        "apihelp-query+allimages-param-limit": "Hur många bilder att returnera totalt.",
        "apihelp-query+allimages-example-B": "Visa en lista över filer som börjar på bokstaven <kbd>B</kbd>.",
-       "apihelp-query+allimages-example-generator": "Visa infom om 4 filer som börjar med bokstaven <kbd>T</kbd>.",
+       "apihelp-query+allimages-example-recent": "Visa en lista över nyligen överförda filer, ungefär som [[Special:Nya_filer]].",
+       "apihelp-query+allimages-example-mimetypes": "Visa en lista över filer med MIME-typen <kbd>image/png</kbd> eller <kbd>image/gif</kbd>",
+       "apihelp-query+allimages-example-generator": "Visa info om 4 filer som börjar med bokstaven <kbd>T</kbd>.",
        "apihelp-query+alllinks-param-prefix": "Sök alla länkade titlar som börjar med detta värde.",
        "apihelp-query+alllinks-param-limit": "Hur många saker att returnera totalt.",
        "apihelp-query+alllinks-param-dir": "Riktningen att lista mot.",
        "apihelp-query+allmessages-description": "Returnera meddelande från denna sida.",
        "apihelp-query+allmessages-param-messages": "Vilka meddelande att ge som utdata. <kbd>*</kbd> (standard) betyder alla meddelande .",
        "apihelp-query+allmessages-param-prop": "Vilka egenskaper att hämta.",
+       "apihelp-query+allmessages-param-args": "Argument som ska substitueras i meddelandet.",
        "apihelp-query+allmessages-param-filter": "Returnera enbart meddelande med namn som innehåller denna sträng.",
+       "apihelp-query+allmessages-param-customised": "Returnera endast meddelanden i detta anpassningstillstånd.",
        "apihelp-query+allmessages-param-lang": "Returnera meddelanden på detta språk.",
-       "apihelp-query+allmessages-example-ipb": "Visa meddelanden som börjar med \"ipb-\"",
-       "apihelp-query+allmessages-example-de": "Visa meddelandena \"august\" och \"mainpage\" på tyska",
+       "apihelp-query+allmessages-param-from": "Returnera meddelanden med början på detta meddelande.",
+       "apihelp-query+allmessages-param-to": "Returnera meddelanden fram till och med detta meddelande.",
+       "apihelp-query+allmessages-param-title": "Sidnamn som ska användas som kontext vid parsning av meddelande (för alternativet $1enableparser).",
+       "apihelp-query+allmessages-param-prefix": "Returnera meddelanden med detta prefix.",
+       "apihelp-query+allmessages-example-ipb": "Visa meddelanden som börjar med <kbd>ipb-</kbd>.",
+       "apihelp-query+allmessages-example-de": "Visa meddelanden <kbd>august</kbd> och <kbd>mainpage</kbd> på tyska.",
+       "apihelp-query+allpages-param-prefix": "Sök efter alla sidtitlar som börjar med detta värde.",
        "apihelp-query+allpages-param-filterredir": "Vilka sidor att lista.",
+       "apihelp-query+allpages-param-minsize": "Begränsa till sidor med detta antal byte eller fler.",
+       "apihelp-query+allpages-param-maxsize": "Begränsa till sidor med högst så här många byte.",
+       "apihelp-query+allpages-param-prtype": "Begränsa till endast skyddade sidor.",
        "apihelp-query+allpages-param-limit": "Hur många sidor att returnera totalt.",
        "apihelp-query+allpages-param-dir": "Riktningen att lista mot.",
        "apihelp-query+allpages-example-B": "Visa en lista över sidor som börjar på bokstaven <kbd>B</kbd>.",
        "apihelp-query+allredirects-param-dir": "Riktningen att lista mot.",
-       "apihelp-query+allredirects-example-unique-generator": "Hämtar alla målsidor, markerar dem som saknas.",
+       "apihelp-query+allredirects-example-unique-generator": "Hämtar alla målsidor, markerar de som saknas.",
        "apihelp-query+alltransclusions-param-dir": "Riktningen att lista mot.",
        "apihelp-query+allusers-param-prefix": "Sök för alla användare som börjar med detta värde.",
        "apihelp-query+allusers-param-dir": "Riktning att sortera i.",
        "apihelp-query+langlinks-param-dir": "Riktningen att lista mot.",
        "apihelp-query+links-param-dir": "Riktningen att lista mot.",
        "apihelp-query+protectedtitles-param-limit": "Hur många sidor att returnera totalt.",
+       "apihelp-query+protectedtitles-example-simple": "Lista skyddade titlar.",
+       "apihelp-query+recentchanges-example-simple": "Lista de senaste ändringarna.",
        "apihelp-query+revisions-example-first5-not-localhost": "Hämta första 5 revideringarna av \"huvudsidan\" och som inte gjorts av anonym användare \"127.0.0.1\"",
        "apihelp-query+siteinfo-example-simple": "Hämta information om webbplatsen.",
        "apihelp-query+stashimageinfo-description": "Returnerar filinformation för temporära filer.",
        "apihelp-query+watchlist-example-generator": "Hämta sidinformation för nyligen uppdaterade sidor på nuvarande användares bevakningslista.",
        "apihelp-query+watchlist-example-generator-rev": "Hämta ändringsinformation för nyligen uppdaterade sidor på nuvarande användares bevakningslista.",
        "apihelp-query+watchlistraw-description": "Hämta alla sidor på den aktuella användarens bevakningslista.",
+       "apihelp-query+watchlistraw-example-simple": "Lista sidor på den aktuella användarens bevakningslista.",
        "apihelp-setnotificationtimestamp-example-all": "Återställ meddelandestatus för hela bevakningslistan.",
        "apihelp-upload-param-filekey": "Nyckel som identifierar en tidigare uppladdning som lagrats temporärt.",
        "apihelp-upload-param-stash": "Om angiven, kommer servern att temporärt lagra filen istället för att lägga till den i centralförvaret.",
+       "apihelp-upload-example-url": "Ladda upp från URL.",
        "apihelp-upload-example-filekey": "Slutför en uppladdning som misslyckades på grund av varningar.",
        "api-help-main-header": "Huvudmodul",
        "api-help-flag-deprecated": "Denna modul är föråldrad.",
index d35ce3e..ddf52d4 100644 (file)
@@ -4,18 +4,32 @@
                        "Leeheonjin"
                ]
        },
+       "apihelp-feedrecentchanges-example-simple": "Ipakit ang mga kamakailangang pagbabago.",
+       "apihelp-feedrecentchanges-example-30days": "Ipakita ang mga huling pagbabago sa loob para sa 30 araw.",
        "apihelp-help-example-main": "Tulong para sa pangunahing modulo.",
+       "apihelp-help-example-recursive": "Lahat ng tulong sa iisang pahina.",
+       "apihelp-login-example-login": "Lumagda (Mag-log in).",
        "apihelp-move-example-move": "I-urong ang <kbd>Badtitle</kbd> sa <kbd>Goodtitle</kbd> nang hindi nag-iiwan ng redirekta.",
+       "apihelp-options-example-reset": "Ibalik sa dati ang lahat ng mga kanaisan.",
        "apihelp-patrol-example-rcid": "Bantayan ang kasalukuyang pagbabago.",
+       "apihelp-query+allimages-example-B": "Ipakita ang talaan ng mga talakasang nagsisimula sa titik <kbd>B</kbd>.",
+       "apihelp-query+alllinks-example-generator": "Kinukuha ang mga pahinang naglalaman ng mga kawing.",
        "apihelp-query+allpages-example-B": "Ipakita ang talaan ng mga pahinang nagsisimula sa titik <kbd>B</kbd>.",
        "apihelp-query+alltransclusions-example-generator": "Kinukuha ang mga pahinang naglalaman ng mga transklusyon.",
+       "apihelp-query+backlinks-example-simple": "Ipakita ang mga kawing sa <kbd>Unang pahina<kbd>.",
        "apihelp-query+categoryinfo-example-simple": "Kumuha ng impormasyon tungkol sa <kbd>Kategorya:Foo</kbd> at <kbd>Kategorya:Bar</kbd>.",
+       "apihelp-query+duplicatefiles-example-simple": "Maghanap para sa mga duplika ng [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+duplicatefiles-example-generated": "Hanapin ang mga duplika ng lahat ng talakasan.",
        "apihelp-query+images-example-simple": "Kumuha ng talaan ng mga talakasang ginagamit sa [[Unang Pahina]].",
        "apihelp-query+imageusage-example-simple": "Ipakita ang mga pahina gamit ang [[:File:Albert Einstein Head.jpg]].",
        "apihelp-query+iwbacklinks-example-simple": "Kumuha ng mga pahinang nakarugtong sa [[wikibooks:Test]].",
+       "apihelp-query+linkshere-example-generator": "Kumuha ng kabatiran tungkol sa mga pahina na kumakawing sa [[Unang Pahina]].",
        "apihelp-query+recentchanges-example-simple": "Talaan ng mga kamakailang pagbabago.",
        "apihelp-query+search-example-text": "Hanapin ang mga teksto para sa <kbd>kahulugan</kbd>.",
+       "apihelp-query+siteinfo-example-simple": "Kunin ang impormasyon ng sityo.",
+       "apihelp-query+templates-example-simple": "Kumuha ng mga suleras o padron na ginamit sa pahinang <kbd>Unang Pahina</kbd>.",
        "apihelp-query+watchlist-example-simple": "Itala ang mga punong pagbabago ng mga kasalukuyang binagong pahina sa kasalukuyang listahan ng binabantayan ng tagagamit.",
        "apihelp-revisiondelete-example-revision": "Itago ang nilalaman para sa pagbabago ng <kbd>12345</kbd> sa pahinang <kbd>Unang Pahina</kbd>.",
-       "apihelp-upload-example-url": "Mag-karga mula sa URL."
+       "apihelp-upload-example-url": "Mag-karga mula sa URL.",
+       "apihelp-watch-example-watch": "Bantayan ang pahinang <kbd>Unang Pahina</kbd>."
 }
index 4bd5c26..13ce490 100644 (file)
@@ -7,6 +7,10 @@
        },
        "apihelp-main-param-action": "Яку дію виконати.",
        "apihelp-main-param-format": "Формат виводу.",
+       "apihelp-block-description": "Заблокувати користувача.",
+       "apihelp-block-param-user": "Ім'я користувача, IP-адреса або діапазон IP-адрес для блокування.",
+       "apihelp-block-param-reason": "Причина блокування.",
+       "apihelp-block-param-nocreate": "Заборонити створення облікових записів.",
        "apihelp-createaccount-param-name": "Ім'я користувача.",
        "apihelp-createaccount-param-password": "Пароль (ігнорується, якщо встановлено <var>$1mailpassword</var>).",
        "apihelp-createaccount-param-domain": "Домен для зовнішньої аутентифікації (опціонально).",
index ff00e7c..a027d9d 100644 (file)
@@ -53,6 +53,8 @@
        "apihelp-edit-param-nocreate": "Gây lỗi nếu trang không tồn tại.",
        "apihelp-edit-param-watch": "Thêm trang vào danh sách theo dõi của bạn.",
        "apihelp-edit-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của bạn.",
+       "apihelp-edit-param-undo": "Hoàn tác sửa đổi này. Ghi đè $1text, $1prependtext và $ 1appendtext.",
+       "apihelp-edit-param-undoafter": "Hoàn tác tất cả các sửa đổi từ $1undo cho tới sửa đổi này. Nếu không được thiết lập, chỉ cần lùi lại một sửa đổi.",
        "apihelp-edit-example-edit": "Sửa đổi trang",
        "apihelp-edit-example-prepend": "Đưa <kbd>_&#95;NOTOC_&#95;</kbd> vào đầu trang",
        "apihelp-edit-example-undo": "Lùi sửa các thay đổi 13579–13585 và tự động tóm lược",
        "apihelp-query-param-list": "Các danh sách để lấy.",
        "apihelp-query-param-meta": "Siêu dữ liệu để lấy.",
        "apihelp-query+allcategories-param-dir": "Hướng xếp loại.",
+       "apihelp-rollback-description": "Hoàn tác chỉnh sửa cuối cùng của trang này.\n\nNếu người dùng cuối cùng đã cỉnh sửa trang này nhiều lần, tất cả chúng sẽ được hoàn tác lại như ban đầu.",
        "apihelp-format-example-generic": "Định dạng kết quả truy vấn dưới dạng $1",
        "apihelp-dbg-description": "Cho ra dữ liệu dưới dạng var_export() của PHP.",
        "apihelp-dbgfm-description": "Cho ra dữ liệu dưới dạng var_export() của PHP (định dạng bằng HTML).",
index 6f85600..722803b 100644 (file)
@@ -8,13 +8,16 @@
                        "LNDDYL",
                        "Shizhao",
                        "Yfdyh000",
-                       "JuneAugsut"
+                       "JuneAugsut",
+                       "EagerLin",
+                       "Simon xianyu",
+                       "Kuailong"
                ]
        },
        "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-main-param-action": "要执行的操作。",
        "apihelp-main-param-format": "输出的格式。",
-       "apihelp-main-param-maxlag": "最大延迟可被用于MediaWiki安装于数据库复制集中。要保存导致更多网站复制延迟的操作,此参数可使客户端等待直到复制延迟少于指定值时。万一发生过多延迟,错误代码“maxlag”会返回消息,例如“等待$host中:延迟$lag秒”。<br />参见https://www.mediawiki.org/wiki/Manual:Maxlag_parameter以获取更多信息。",
+       "apihelp-main-param-maxlag": "最大延迟可被用于MediaWiki安装于数据库复制集中。要保存导致更多网站复制延迟的操作,此参数可使客户端等待直到复制延迟少于指定值时。万一发生过多延迟,错误代码<samp>maxlag</samp>会返回消息,例如<samp>等待$host中:延迟$lag秒</samp>。<br />参见[[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]]以获取更多信息。",
        "apihelp-main-param-smaxage": "设置<code>s-maxage</code>页顶至这些秒。错误不会缓存。",
        "apihelp-main-param-maxage": "设置<code>max-age</code>页顶至这些秒。错误不会缓存。",
        "apihelp-main-param-assert": "如果设置为<kbd>user</kbd>就验证用户是否登录,或如果设置为<kbd>bot</kbd>就验证是否有机器人用户权限。",
        "apihelp-block-param-autoblock": "自动封禁最近使用的IP地址,以及以后他们尝试登陆使用的IP地址。",
        "apihelp-block-param-noemail": "阻止用户通过wiki发送电子邮件。(需要<code>blockemail</code>权限)。",
        "apihelp-block-param-hidename": "从封禁日志中隐藏用户名。(需要<code>hideuser</code>权限)。",
-       "apihelp-block-param-allowusertalk": "允许用户编辑自己的讨论页 (取决于 <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>)。",
+       "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": "è\8e·å\8f\962个页面之间的差别。\n\n用于“from”和“to”的修订版本号、页面标题或页面 ID 必须获得通过。",
+       "apihelp-clearhasmsg-example-1": "清除当前用户的<code>hasmsg</code>标记。",
+       "apihelp-compare-description": "è\8e·å¾\972个页面之间的差别。\n\n用于“from”和“to”的修订版本号、页面标题或页面 ID 必须获得通过。",
        "apihelp-compare-param-fromtitle": "要比较的第一个标题。",
        "apihelp-compare-param-fromid": "要比较的第一个页面 ID。",
        "apihelp-compare-param-fromrev": "要比较的第一个修订版本。",
@@ -64,7 +72,7 @@
        "apihelp-delete-param-pageid": "要删除的页面的页面 ID。不能与<var>$1title</var>一起使用。",
        "apihelp-delete-param-reason": "删除原因。如果未设置,将使用一个自动生成的原因。",
        "apihelp-delete-param-watch": "将该页面加入当前用户的监视列表。",
-       "apihelp-delete-param-watchlist": "无条件地将页面加入至的监视列表或将其移除,使用设置或不更改监视。",
+       "apihelp-delete-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-delete-param-unwatch": "将该页面从当前用户的监视列表删除。",
        "apihelp-delete-param-oldimage": "由[[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]]提供的要删除的旧图片名称。",
        "apihelp-delete-example-simple": "删除<kbd>Main Page</kbd>。",
        "apihelp-edit-param-notminor": "不是小编辑。",
        "apihelp-edit-param-bot": "标记此编辑为机器人编辑。",
        "apihelp-edit-param-basetimestamp": "基础修订的时间戳,用于检测编辑冲突。也许可以通过[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]得到。",
-       "apihelp-edit-param-starttimestamp": "您开始编辑过程的时间戳,用于检测编辑冲突。当开始编辑过程时(例如当加载要编辑的页面时)使用[[Special:ApiHelp/main|curtimestamp]]可能取得一个适当的值。",
+       "apihelp-edit-param-starttimestamp": "编辑过程开始的时间戳,用于检测编辑冲突。当开始编辑过程时(例如当加载要编辑的页面时)使用<var>[[Special:ApiHelp/main|curtimestamp]]</var>可能取得一个适当的值。",
        "apihelp-edit-param-recreate": "覆盖有关该页面在此期间已被删除的任何错误。",
        "apihelp-edit-param-createonly": "不要编辑页面,如果已经存在。",
        "apihelp-edit-param-nocreate": "如果该页面不存在,则抛出一个错误。",
        "apihelp-edit-param-watch": "将页面加入当前用户的监视列表。",
        "apihelp-edit-param-unwatch": "将页面从当前用户的监视列表中移除。",
-       "apihelp-edit-param-watchlist": "无条件地将页面加入至的监视列表或将其移除,使用设置或不更改监视。",
+       "apihelp-edit-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-edit-param-md5": "$1text参数或$1prependtext和$1appendtext级联参数的MD5哈希值。如果设置,除非哈希值正确否则编辑无法完成。",
        "apihelp-edit-param-prependtext": "将该文本添加到该页面的开始。覆盖$1text。",
        "apihelp-edit-param-appendtext": "将该文本添加到该页面的结尾。覆盖$1text。\n\n采用$1section=new来添加一个新的章节,而不是这个参数。",
        "apihelp-filerevert-param-archivename": "恢复到修订版存档名称。",
        "apihelp-filerevert-example-revert": "回退<kbd>Wiki.png</kbd>至<kbd>2011-03-05T15:27:40Z</kbd>的版本。",
        "apihelp-help-description": "显示指定模块的帮助。",
+       "apihelp-help-param-modules": "用于显示帮助的模块(<var>action</var>和<var>format</var>参数值,或<kbd>main</kbd>)。可通过<kbd>+</kbd>指定子模块。",
        "apihelp-help-param-submodules": "包括给定名称模块的子模块的帮助。",
        "apihelp-help-param-recursivesubmodules": "包括递归子模块的帮助。",
        "apihelp-help-param-helpformat": "帮助的输出格式。",
        "apihelp-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-param-summary": "导入摘要。",
        "apihelp-import-param-xml": "上传的XML文件。",
        "apihelp-import-param-interwikisource": "用于跨wiki导入:导入的来源wiki。",
        "apihelp-logout-example-logout": "退出当前用户",
        "apihelp-managetags-description": "执行有关更改标签的管理任务。",
        "apihelp-managetags-param-operation": "要执行哪个操作:\n;create:创建一个新的更改标签供手动使用。\n;delete:从数据库中移除一个更改标签,包括移除已使用在所有修订版本、最近更改记录和日志记录上的该标签。\n;activate:激活一个更改标签,允许用户手动应用它。\n;deactivate:停用一个更改标签,阻止用户手动应用它。",
+       "apihelp-managetags-param-tag": "要创建、删除、激活或取消激活的标签。要创建标签,标签必须不存在。要删除标签,标签必须存在。要激活标签,标签必须存在,且不被任何扩展使用。要取消激活标签,标签必须当前处于激活状态,且被手动定义。",
        "apihelp-managetags-param-reason": "一个创建、删除、激活或停用标签时的原因,可选。",
        "apihelp-managetags-param-ignorewarnings": "是否忽略操作期间发生的任何警告。",
        "apihelp-managetags-example-create": "创建一个名为<kbd>spam</kbd>的标签,原因<kbd>For use in edit patrolling</kbd>",
        "apihelp-managetags-example-deactivate": "停用一个名为<kbd>spam</kbd>的标签,原因<kbd>No longer required</kbd>",
        "apihelp-move-description": "移动一个页面。",
        "apihelp-move-param-from": "要重命名的页面标题。不能与<var>$1fromid</var>一起使用。",
-       "apihelp-move-param-fromid": "您希望移动的页面ID。不能与$1from一起使用。",
+       "apihelp-move-param-fromid": "您希望移动的页面ID。不能与<var>$1from</var>一起使用。",
        "apihelp-move-param-to": "页面重命名的目标标题。",
        "apihelp-move-param-reason": "重命名的原因。",
        "apihelp-move-param-movetalk": "重命名讨论页,如果存在。",
        "apihelp-move-param-movesubpages": "重命名子页面,如果可以。",
        "apihelp-move-param-noredirect": "不要创建重定向。",
-       "apihelp-move-param-watch": "将页面和重定向加入至的监视列表中。",
+       "apihelp-move-param-watch": "将页面和重定向加入至当前用户的监视列表中。",
        "apihelp-move-param-unwatch": "从当前用户的监视列表中移除页面及重定向。",
-       "apihelp-move-param-watchlist": "无条件地将页面加入至的监视列表或将其移除,使用设置或不更改监视。",
+       "apihelp-move-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-move-param-ignorewarnings": "忽略任何警告。",
        "apihelp-move-example-move": "移动<kbd>坏标题</kbd>到<kbd>好标题</kbd>并且不留下重定向。",
        "apihelp-opensearch-description": "使用OpenSearch协议搜索本wiki。",
        "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由于历史原因,$1format=json默认为\"return\",其他格式默认为\"resolve\"",
+       "apihelp-opensearch-param-redirects": "如何处理重定向:\n;return:返回重定向本身。\n;resolve:返回目标页面。可能返回少于$1limit个结果。\n由于历史原因,$1format=json默认为\"return\",其他格式默认为\"resolve\"。",
        "apihelp-opensearch-param-format": "输出格式。",
        "apihelp-opensearch-example-te": "查找以<kbd>Te</kbd>开头的页面。",
        "apihelp-options-description": "更改当前用户的偏好设置。\n\n只有注册在核心或者已安装扩展中的选项,或者具有\"userjs-\"键值前缀(旨在被用户脚本使用)的选项可被设置。",
        "apihelp-options-param-reset": "重置偏好设置到网站默认设置。",
+       "apihelp-options-param-resetkinds": "当<var>$1reset</var>选项被设置时,要重置的选项类型列表。",
+       "apihelp-options-param-change": "更改列表,以name=value格式化(例如skin=vector)。值不能包含管道字符。如果没提供值(甚至没有等号),例如optionname|otheroption|...,选项将重置为默认值。",
+       "apihelp-options-param-optionname": "应设置为由<var>$1optionvalue</var>提供值的选项名称。",
+       "apihelp-options-param-optionvalue": "使用<var>$1选项名</var>指定的选项值中,可以包含管道字符",
        "apihelp-options-example-reset": "重置所有用户设置",
        "apihelp-options-example-change": "更改<kbd>skin</kbd>和<kbd>hideminor</kbd>设置。",
        "apihelp-options-example-complex": "重置所有设置,然后设置<kbd>皮肤</kbd>和<kbd>昵称</kbd>。",
        "apihelp-paraminfo-param-querymodules": "查询模块名称(<var>prop</var>、<var>meta</var>或<var>list</var>参数值)的列表。使用<kbd>$1modules=query+foo</kbd>而不是<kbd>$1querymodules=foo</kbd>。",
        "apihelp-paraminfo-param-mainmodule": "获得有关主要(最高级)模块的信息。也可使用<kbd>$1modules=main</kbd>。",
        "apihelp-paraminfo-param-pagesetmodule": "获得有关页面设置模块(提供titles=和朋友)的信息。",
-       "apihelp-paraminfo-param-formatmodules": "格式模块名称(<var>format</var>参数的值)的列表。也可使用<var>$1modules</kbd>。",
+       "apihelp-paraminfo-param-formatmodules": "格式模块名称(<var>format</var>参数的值)的列表。也可使用<var>$1modules</var>。",
        "apihelp-paraminfo-example-1": "显示<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>、<kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>、<kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>和<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>的信息。",
        "apihelp-parse-description": "解析内容并返回解析器输出。\n\n参见<kbd>[[Special:ApiHelp/query|action=query]]</kbd>的各种prop-module以从页面的当前版本获得信息。\n\n这里有几种方法可以指定解析的文本:\n# 指定一个页面或修订,使用<var>$1page</var>、<var>$1pageid</var>或<var>$1oldid</var>。\n# 明确指定内容,使用<var>$1text</var>、<var>$1title</var>和<var>$1contentmodel</var>。\n# 只指定一段摘要解析。<var>$1prop</var>应提供一个空值。",
+       "apihelp-parse-param-title": "文本属于的页面标题。如果省略,<var>$1contentmodel</var>就必须被指定,且[[API]]将作为标题使用。",
+       "apihelp-parse-param-text": "要解析的文本。使用<var>$1title</var>或<var>$1contentmodel</var>以控制内容模型。",
        "apihelp-parse-param-summary": "所要解析的摘要。",
        "apihelp-parse-param-page": "解析此页的内容。不能与<var>$1text</var>和<var>$1title</var>一起使用。",
        "apihelp-parse-param-pageid": "解析此页的内容。覆盖<var>$1page</var>。",
-       "apihelp-parse-param-redirects": "如果 $1page 或 $1 pageid 参数被设置为一个重定向,则解析它。",
-       "apihelp-parse-param-oldid": "解析该修订版本的内容。覆盖 $1page 和 $1 pageid。",
+       "apihelp-parse-param-redirects": "如果<var>$1page</var>或<var>$1pageid</var>被设置为一个重定向,则解析它。",
+       "apihelp-parse-param-oldid": "解析该修订版本的内容。覆盖<var>$1page</var>和<var>$1pageid</var>。",
+       "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-protect-param-protections": "保护等级列表,格式:<kbd>action=level</kbd>(例如<kbd>edit=sysop</kbd>)。\n\n<strong>注意:</strong>未列出的操作将移除限制。",
        "apihelp-protect-param-expiry": "到期时间戳。如果只有一个时间戳被设置,它将被用于所有保护。使用<kbd>infinite</kbd>、<kbd>indefinite</kbd>、<kbd>infinity</kbd>或<kbd>never</kbd>用于永不过期的保护。",
        "apihelp-protect-param-reason": "(解除)保护的原因。",
+       "apihelp-protect-param-cascade": "启用级联保护(也就是保护包含于此页面的页面)。如果所有提供的保护等级不支持级联,就将其忽略。",
+       "apihelp-protect-param-watch": "如果设置,就加入已开始(解除)保护的页面至当前用户的监视列表。",
+       "apihelp-protect-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-protect-example-protect": "保护一个页面",
        "apihelp-protect-example-unprotect": "通过设置限制为<kbd>all</kbd>解除保护一个页面。",
        "apihelp-protect-example-unprotect2": "通过设置没有限制解除保护一个页面",
+       "apihelp-purge-description": "为指定标题刷新缓存。\n\n如果用户尚未登录的话,就需要POST请求。",
        "apihelp-purge-param-forcelinkupdate": "更新链接表。",
        "apihelp-purge-param-forcerecursivelinkupdate": "更新链接表中,并更新任何使用此页作为模板的页面的链接表。",
        "apihelp-purge-example-simple": "刷新<kbd>Main Page</kbd>和<kbd>API</kbd>页面。",
        "apihelp-purge-example-generator": "刷新主名字空间的前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-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+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-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-tag": "只列出被此标签标记的修订。",
        "apihelp-query+alldeletedrevisions-param-user": "只列出此用户做出的修订。",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "不要列出此用户做出的修订。",
        "apihelp-query+alldeletedrevisions-param-namespace": "只列出此名字空间的页面。",
        "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-prefix": "搜索此值开头的所有文件标题。",
+       "apihelp-query+allfileusages-param-prop": "要包含的信息束:\n;ids:添加使用中的页面的页面ID(不能与$1unique一起使用)。\n;title:添加文件的标题。",
        "apihelp-query+allfileusages-param-limit": "要返回的总计项目。",
        "apihelp-query+allfileusages-param-dir": "罗列所采用的方向。",
        "apihelp-query+allfileusages-example-unique": "列出唯一性的文件标题",
        "apihelp-query+allimages-param-minsize": "限于至少这么多字节的图像。",
        "apihelp-query+allimages-param-maxsize": "限于顶多这么多字节的图像。",
        "apihelp-query+allimages-param-sha1": "图像的 SHA1 哈希。覆盖$1sha1base36。",
+       "apihelp-query+allimages-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
        "apihelp-query+allimages-param-mime": "要搜索的MIME类型,例如<kbd>image/jpeg</kbd>。",
        "apihelp-query+allimages-param-limit": "共计要返回多少图像。",
        "apihelp-query+allimages-example-B": "显示以字母<kbd>B</kbd>开始的文件列表。",
        "apihelp-query+alllinks-example-unique": "列出唯一的链接标题",
        "apihelp-query+alllinks-example-unique-generator": "获得所有已链接的标题,标记缺少的。",
        "apihelp-query+alllinks-example-generator": "获取包含这些链接的页面",
-       "apihelp-query+allmessages-description": "è¿\94å\9b\9eæ\9d¥è\87ªè¯¥ç«\99ç\82¹的消息。",
+       "apihelp-query+allmessages-description": "è¿\94å\9b\9eæ\9d¥è\87ªè¯¥ç½\91ç«\99的消息。",
        "apihelp-query+allmessages-param-messages": "要输出的消息。<kbd>*</kbd>(默认)表示所有消息。",
        "apihelp-query+allmessages-param-prop": "要获取的属性。",
+       "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+allmessages-example-ipb": "显示以<kbd>ipb-</kbd>开始的消息。",
        "apihelp-query+allmessages-example-de": "显示德语版的<kbd>august</kbd>和<kbd>mainpage</kbd>消息。",
        "apihelp-query+allpages-param-prtype": "仅限于受保护页面。",
        "apihelp-query+allpages-param-limit": "返回的总计页面数。",
        "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-namespace": "要列举的名字空间。",
        "apihelp-query+allredirects-param-limit": "返回的总计项目数。",
        "apihelp-query+allredirects-example-generator": "获得包含重定向的页面",
        "apihelp-query+alltransclusions-description": "列出所有嵌入页面(使用&#123;&#123;x&#125;&#125;嵌入的页面),包括不存在的。",
        "apihelp-query+alltransclusions-param-namespace": "要列举的名字空间。",
+       "apihelp-query+alltransclusions-param-limit": "要返回的总计项目。",
        "apihelp-query+alltransclusions-param-dir": "罗列所采用的方向。",
        "apihelp-query+alltransclusions-example-unique": "列出孤立嵌入标题",
+       "apihelp-query+alltransclusions-example-generator": "获得包含嵌入内容的页面。",
        "apihelp-query+allusers-description": "列举所有注册用户。",
+       "apihelp-query+allusers-param-from": "枚举的起始用户名。",
+       "apihelp-query+allusers-param-to": "枚举的结束用户名。",
+       "apihelp-query+allusers-param-prefix": "搜索以此值开始的所有用户。",
        "apihelp-query+allusers-param-dir": "排序方向。",
        "apihelp-query+allusers-param-group": "只包含指定组中的用户。",
        "apihelp-query+allusers-param-excludegroup": "排除指定组中的用户。",
+       "apihelp-query+allusers-param-rights": "仅列出有所选权限的用户。不包括隐性的或自动加入的用户组别(如*、用户或自动确认用户)所授予的权限。",
+       "apihelp-query+allusers-param-limit": "返回的总计用户数。",
        "apihelp-query+allusers-param-witheditsonly": "只列出有编辑的用户。",
        "apihelp-query+allusers-param-activeusers": "只列出最近$1天内活跃的用户。",
        "apihelp-query+allusers-example-Y": "列出以<kbd>Y</kbd>开头的用户。",
+       "apihelp-query+backlinks-description": "查找所有链接至指定页面的页面。",
        "apihelp-query+backlinks-param-title": "要搜索的标题。不能与<var>$1pageid</var>一起使用。",
        "apihelp-query+backlinks-param-pageid": "要搜索的页面ID。不能与<var>$1title</var>一起使用。",
        "apihelp-query+backlinks-param-namespace": "要列举的名字空间。",
        "apihelp-query+blocks-description": "列出所有被封禁的用户和IP地址。",
        "apihelp-query+blocks-param-ids": "要列出的封禁ID列表(可选)。",
        "apihelp-query+blocks-param-users": "要搜索的用户列表(可选)。",
+       "apihelp-query+blocks-param-prop": "要获取的属性:\n;id:添加封禁ID。\n;user:添加被封禁用户的用户名。\n;userid:添加被封禁用户的用户ID。\n;by:添加执行封禁的用户的用户名。\n;byid:添加执行封禁的用户的用户ID。\n;timestamp:添加封禁生效时的时间戳。\n;expiry:添加封禁截止时的时间戳。\n;reason:添加封禁原因。\n;range:添加受封禁影响的IP地址段。\n;flags:标记编辑禁止(自动封禁、仅限匿名用户等)。",
        "apihelp-query+blocks-example-simple": "封禁列表",
        "apihelp-query+blocks-example-users": "列出用户<kbd>Alice</kbd>和<kbd>Bob</kbd>的封禁。",
+       "apihelp-query+categories-description": "页面属于的所有分类列表。",
+       "apihelp-query+categories-param-prop": "要为每个分类获取的额外属性:\n;sortkey:为每个分类添加关键词(十六进制字符串)和关键词前缀(人类可读部分)。\n;timestamp:添加分类添加时的时间戳。\n;hidden:标记由_&#95;HIDDENCAT_&#95;隐藏的分类。",
        "apihelp-query+categories-param-show": "显示何种分类。",
        "apihelp-query+categories-param-limit": "返回多少分类。",
        "apihelp-query+categories-param-dir": "罗列所采用的方向。",
        "apihelp-query+categories-example-simple": "获取属于<kbd>Albert Einstein</kbd>的分类列表。",
        "apihelp-query+categories-example-generator": "获得有关用于<kbd>Albert Einstein</kbd>的分类的信息。",
+       "apihelp-query+categoryinfo-description": "返回有关给定分类的信息。",
        "apihelp-query+categoryinfo-example-simple": "获取有关<kbd>Category:Foo</kbd>和<kbd>Category:Bar</kbd>的信息。",
        "apihelp-query+categorymembers-description": "在指定的分类中列出所有页面。",
        "apihelp-query+categorymembers-param-title": "要列举的分类(必需)。必须包括<kbd>{{ns:category}}:</kbd>前缀。不能与<var>$1pageid</var>一起使用。",
+       "apihelp-query+categorymembers-param-pageid": "要枚举的分类的页面 ID。不能与<var>$1title</var>一起使用。",
        "apihelp-query+categorymembers-param-namespace": "仅包含这些名字空间的页面。注意<kbd>$1type=subcat</kbd>或<kbd>$1type=file</kbd>可能被使用,而不是<kbd>$1namespace=14</kbd>或<kbd>6</kbd>。",
        "apihelp-query+categorymembers-param-type": "包含的分类成员类型。当<kbd>$1sort=timestamp</kbd>被设置时会忽略。",
+       "apihelp-query+categorymembers-param-limit": "返回页面的最大数量。",
        "apihelp-query+categorymembers-param-sort": "要作为排序方式的属性。",
        "apihelp-query+categorymembers-param-dir": "排序的方向。",
        "apihelp-query+categorymembers-param-start": "开始列举的时间戳。只能与<kbd>$1sort=timestamp</kbd>一起使用。",
        "apihelp-query+categorymembers-param-end": "列举的结尾时间戳。只能与<kbd>$1sort=timestamp</kbd>一起使用。",
+       "apihelp-query+categorymembers-param-starthexsortkey": "开始列举的关键词,由<kbd>$1prop=sortkey</kbd>返回。不能与<kbd>$1sort=sortkey</kbd>一起使用。",
+       "apihelp-query+categorymembers-param-endhexsortkey": "结束列举的关键词,由<kbd>$1prop=sortkey</kbd>返回。不能与<kbd>$1sort=sortkey</kbd>一起使用。",
        "apihelp-query+categorymembers-param-startsortkey": "请改用$1starthexsortkey。",
        "apihelp-query+categorymembers-param-endsortkey": "请改用$1endhexsortkey。",
        "apihelp-query+categorymembers-example-simple": "获得<kbd>Category:Physics</kbd>中的前10个页面。",
        "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-paraminfo-modes": "{{PLURAL:$1|模式}}:$2",
        "apihelp-query+deletedrevs-param-user": "只列出此用户做出的修订。",
        "apihelp-query+deletedrevs-param-excludeuser": "不要列出此用户做出的修订。",
        "apihelp-query+deletedrevs-param-namespace": "只列出此名字空间的页面。",
-       "apihelp-query+deletedrevs-example-mode1": "å\88\97å\87ºæ\9c\80è¿\91å·²å\88 é\99¤ç\9a\84对é¦\96页å\92\8cTalk:é¦\96页ç\9a\84è´¡ç\8c®ï¼\8c带å\86\85容ï¼\88模å¼\8f1ï¼\89",
+       "apihelp-query+deletedrevs-example-mode1": "å\88\97å\87ºæ\9c\80è¿\91å·²å\88 é\99¤ç\9a\84对页é\9d¢<kbd>Main Page</kbd>å\92\8c<kbd>Talk:Main Page</kbd>ç\9a\84è´¡ç\8c®ï¼\8c带å\86\85容ï¼\88模å¼\8f1ï¼\89ã\80\82",
        "apihelp-query+deletedrevs-example-mode2": "列出由<kbd>Bob</kbd>作出的最近50次已删除贡献(模式2)。",
        "apihelp-query+deletedrevs-example-mode3-main": "列出前50次主名字空间已删除贡献(模式3)",
        "apihelp-query+deletedrevs-example-mode3-talk": "列出前50次{{ns:talk}}名字空间已删除页面(模式3):",
        "apihelp-query+embeddedin-example-generator": "获得有关显示嵌入<kbd>Template:Stub</kbd>的页面的信息。",
        "apihelp-query+extlinks-param-limit": "返回多少链接。",
        "apihelp-query+extlinks-example-simple": "获取<kbd>首页</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+exturlusage-param-limit": "返回多少页面。",
        "apihelp-query+exturlusage-example-simple": "显示链接至<kbd>http://www.mediawiki.org</kbd>的页面。",
+       "apihelp-query+filearchive-param-from": "枚举的起始图片标题。",
+       "apihelp-query+filearchive-param-to": "枚举的结束图片标题。",
+       "apihelp-query+filearchive-param-prefix": "搜索所有以此值开头的图像标题。",
+       "apihelp-query+filearchive-param-limit": "返回图像的总数。",
        "apihelp-query+filearchive-param-dir": "罗列所采用的方向。",
        "apihelp-query+filearchive-param-sha1": "图片的SHA1哈希值。覆盖$1sha1base36。",
        "apihelp-query+filearchive-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
        "apihelp-query+filearchive-example-simple": "显示已删除文件列表",
+       "apihelp-query+filerepoinfo-example-simple": "获得有关文件存储库的信息。",
        "apihelp-query+fileusage-param-prop": "要获取的属性:\n;pageid:每个页面的页面ID。\n;title:每个页面的标题。\n;redirect:标记作为重定向的页面。",
        "apihelp-query+fileusage-param-namespace": "只包括这些名字空间的页面。",
        "apihelp-query+fileusage-param-limit": "返回多少。",
        "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-mediatype": "添加文件媒体类型。",
+       "apihelp-query+imageinfo-param-start": "开始列举的时间戳。",
+       "apihelp-query+imageinfo-param-end": "列举的结束时间戳。",
        "apihelp-query+imageinfo-param-urlheight": "与$1urlwidth类似。",
+       "apihelp-query+imageinfo-param-metadataversion": "要使用的元数据版本。如果<kbd>latest</kbd>被指定,则使用最新版本。默认为<kbd>1</kbd>以便向下兼容。",
+       "apihelp-query+imageinfo-param-localonly": "只看本地存储库的文件。",
        "apihelp-query+imageinfo-example-simple": "获取有关[[:File:Albert Einstein Head.jpg]]的当前版本的信息",
        "apihelp-query+imageinfo-example-dated": "获取有关[[:File:Albert Einstein Head.jpg]]自2008年以来版本的信息",
        "apihelp-query+images-param-limit": "返回多少文件。",
        "apihelp-query+images-param-dir": "罗列所采用的方向。",
        "apihelp-query+images-example-simple": "获取[[首页]]使用的文件列表",
        "apihelp-query+images-example-generator": "获取有关[[首页]]使用的文件的信息",
+       "apihelp-query+imageusage-description": "查找所有使用指定图片标题的页面。",
        "apihelp-query+imageusage-param-title": "要搜索的标题。不能与$1pageid一起使用。",
        "apihelp-query+imageusage-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
        "apihelp-query+imageusage-param-namespace": "要列举的名字空间。",
        "apihelp-query+imageusage-example-generator": "获取有关使用[[:File:Albert Einstein Head.jpg]]的页面的信息",
        "apihelp-query+info-description": "获取基本页面信息。",
        "apihelp-query+info-param-prop": "要获取的额外属性:",
+       "apihelp-query+info-paramvalue-prop-protection": "列出每个页面的保护等级。",
+       "apihelp-query+info-paramvalue-prop-watched": "列出每个页面的被监视状态。",
        "apihelp-query+info-paramvalue-prop-watchers": "监视人员数,如果允许。",
+       "apihelp-query+info-paramvalue-prop-readable": "用户是否可以阅读此页面。",
+       "apihelp-query+info-param-testactions": "测试当前用户是否可以在页面上执行某种操作。",
        "apihelp-query+info-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
        "apihelp-query+info-example-simple": "获得有关页面<kbd>Main Page</kbd>的信息。",
        "apihelp-query+info-example-protection": "获取<kbd>首页</kbd>相关的常规和保护信息。",
        "apihelp-query+links-example-simple": "从页面<kbd>Main Page</kbd>获得链接",
        "apihelp-query+links-example-generator": "获得有关在页面<kbd>Main Page</kbd>中连接的页面的信息。",
        "apihelp-query+links-example-namespaces": "获得在{{ns:user}}和{{ns:template}}名字空间中来自页面<kbd>Main Page</kbd>的链接。",
+       "apihelp-query+linkshere-description": "查找所有链接至指定页面的页面。",
+       "apihelp-query+linkshere-param-prop": "要获得的属性:\n;pageid:每个页面的页面ID。\n;title:每个页面的标题。\n;redirect:如果页面是一个重定向就标记。",
        "apihelp-query+linkshere-param-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+logevents-description": "从日志获取事件。",
+       "apihelp-query+logevents-param-start": "枚举的起始时间戳。",
+       "apihelp-query+logevents-param-end": "枚举的结束时间戳。",
        "apihelp-query+logevents-example-simple": "列出最近日志活动",
        "apihelp-query+pagepropnames-description": "列出wiki中所有使用中的页面属性名称。",
+       "apihelp-query+pagepropnames-param-limit": "返回名称的最大数量。",
        "apihelp-query+pagepropnames-example-simple": "获取前10个属性名称。",
        "apihelp-query+pageprops-example-simple": "获得用于<kbd>Category:Foo</kbd>的属性。",
        "apihelp-query+pageswithprop-description": "列出所有使用指定页面属性的页面。",
+       "apihelp-query+pageswithprop-param-limit": "返回页面的最大数量。",
        "apihelp-query+pageswithprop-param-dir": "排序的方向。",
        "apihelp-query+pageswithprop-example-simple": "列出前10个使用<code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>的页面。",
        "apihelp-query+pageswithprop-example-generator": "获取有关前10个使用<code>_&#95;NOTOC_&#95;</code>的页面的信息。",
        "apihelp-query+prefixsearch-param-search": "搜索字符串。",
        "apihelp-query+prefixsearch-param-namespace": "搜索的名字空间。",
+       "apihelp-query+prefixsearch-param-limit": "要返回的结果最大数。",
        "apihelp-query+prefixsearch-param-offset": "跳过的结果数。",
        "apihelp-query+prefixsearch-example-simple": "搜索以<kbd>meaning</kbd>开头的页面标题。",
        "apihelp-query+protectedtitles-param-namespace": "只列出这些名字空间的标题。",
        "apihelp-query+random-param-redirect": "加载一个随机重定向而不是一个随机页面。",
        "apihelp-query+random-example-simple": "从主名字空间返回两个随机页面。",
        "apihelp-query+recentchanges-description": "枚举最近更改。",
+       "apihelp-query+recentchanges-param-start": "枚举的起始时间戳。",
+       "apihelp-query+recentchanges-param-end": "枚举的结束时间戳。",
        "apihelp-query+recentchanges-param-user": "只列出此用户的更改。",
        "apihelp-query+recentchanges-param-excludeuser": "不要列出此用户的更改。",
        "apihelp-query+recentchanges-param-tag": "只列出带此标签的更改。",
        "apihelp-query+recentchanges-param-token": "请改用<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
-       "apihelp-query+recentchanges-param-limit": "返回总计更新数。",
+       "apihelp-query+recentchanges-param-limit": "返回总计更新数。",
        "apihelp-query+recentchanges-param-type": "显示的更改类型。",
        "apihelp-query+recentchanges-example-simple": "最近更改列表",
        "apihelp-query+redirects-description": "返回至指定页面的所有重定向。",
        "apihelp-query+siteinfo-example-simple": "获取网站信息",
        "apihelp-query+siteinfo-example-interwiki": "获取本地跨wiki前缀列表",
        "apihelp-query+siteinfo-example-replag": "检查当前的响应延迟。",
+       "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-param-namespace": "只显示此名字空间的模板。",
        "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-namespace": "只列出这些名字空间的贡献。",
        "apihelp-query+usercontribs-example-user": "显示用户<kbd>Example</kbd>的贡献。",
        "apihelp-query+usercontribs-example-ipprefix": "显示来自<kbd>192.0.2.</kbd>前缀所有 IP 地址的贡献。",
        "apihelp-query+users-description": "获取有关列出用户的信息。",
        "apihelp-query+users-param-token": "请改用<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
        "apihelp-query+users-example-simple": "返回用户<kbd>Example</kbd>的信息。",
+       "apihelp-query+watchlist-param-start": "枚举的起始时间戳。",
+       "apihelp-query+watchlist-param-end": "枚举的结束时间戳。",
        "apihelp-query+watchlist-param-user": "只列出此用户的更改。",
        "apihelp-query+watchlist-param-excludeuser": "不要列出此用户的更改。",
+       "apihelp-query+watchlist-param-limit": "根据结果返回的结果总数。",
        "apihelp-query+watchlist-param-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-token": "允许访问其他用户监视列表的安全密钥(可通过用户的[[Special:Preferences#mw-prefsection-watchlist|参数设置]]找到)。",
        "apihelp-query+watchlistraw-example-simple": "列出当前用户的监视列表中的页面。",
        "apihelp-revisiondelete-description": "删除和恢复修订版本。",
        "apihelp-revisiondelete-param-reason": "删除或恢复的原因。",
        "apihelp-revisiondelete-example-revision": "隐藏<kbd>首页</kbd>的修订版本<kbd>12345</kbd>的内容。",
        "apihelp-rollback-param-title": "要回退的页面标题。不能与<var>$1pageid</var>一起使用。",
+       "apihelp-rollback-param-pageid": "要回退的页面的页面 ID。不能与<var>$1title</var>一起使用。",
+       "apihelp-rollback-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-rollback-example-simple": "回退由用户<kbd>Example</kbd>对<kbd>Main Page</kbd>做出的最近编辑。",
-       "apihelp-rollback-example-summary": "回退由IP用户192.0.2.5对[[首页]]做出的最近编辑,带编辑摘要“回退破坏”,并将这些编辑和回退标记为“机器人”",
+       "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-param-entirewatchlist": "工作于所有已监视页面。",
+       "apihelp-setnotificationtimestamp-example-all": "重置整个监视列表的通知状态。",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "设置<kbd>Main page</kbd>的通知时间戳,这样所有从2012年1月1日起的编辑都会是未复核的。",
        "apihelp-setnotificationtimestamp-example-allpages": "重置在<kbd>{{ns:user}}</kbd>名字空间中的页面的通知状态。",
        "apihelp-tokens-param-type": "要请求的令牌类型。",
        "apihelp-unblock-description": "解封一位用户。",
        "apihelp-unblock-param-id": "解封时需要的封禁ID(通过<kbd>list=blocks</kbd>获得)。不能与<var>$1user</var>一起使用。",
-       "apihelp-unblock-param-user": "要解封的用户名、IP地址或IP段。不能与$1id一起使用。",
+       "apihelp-unblock-param-user": "要解封的用户名、IP地址或IP段。不能与<var>$1id</var>一起使用。",
        "apihelp-unblock-param-reason": "解封的原因。",
        "apihelp-unblock-example-id": "解封封禁ID #<kbd>105</kbd>。",
        "apihelp-unblock-example-user": "解封用户<kbd>Bob</kbd>,原因<kbd>Sorry Bob</kbd>。",
        "apihelp-undelete-param-title": "要恢复的页面标题。",
        "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-upload-param-filename": "目标文件名。",
+       "apihelp-upload-param-comment": "上传注释。如果没有指定<var>$1text</var>,那么它也被用于新文件的初始页面文本。",
        "apihelp-upload-param-watch": "监视页面。",
+       "apihelp-upload-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-upload-param-ignorewarnings": "忽略任何警告。",
        "apihelp-upload-param-file": "文件内容。",
        "apihelp-upload-param-stash": "如果设置,服务器将临时藏匿文件而不是加入存储库。",
+       "apihelp-upload-param-offset": "块的偏移量(字节)。",
        "apihelp-upload-param-chunk": "大块内容。",
        "apihelp-upload-example-url": "从URL上传",
        "apihelp-upload-example-filekey": "完成一次由于警告而失败的上传。",
        "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的var_dump()格式(HTML优质打印效果)。",
+       "apihelp-dumpfm-description": "输出数据为PHP的<code>var_dump()</code>格式(HTML优质打印效果)。",
        "apihelp-json-description": "输出数据为JSON格式。",
        "apihelp-jsonfm-description": "输出数据为JSON格式(HTML优质打印效果)。",
        "apihelp-none-description": "不输出任何东西。",
        "apihelp-yaml-description": "输出数据为YAML格式。",
        "apihelp-yamlfm-description": "输出数据为YAML格式(HTML优质打印效果)。",
        "api-format-title": "MediaWiki API 结果",
-       "api-format-prettyprint-header": "您正在查看$1格式的HTML表示。HTML对调试很有用,但不适合应用程序使用。\n\n指定格式参数以更改输出格式。要查看$1格式的非HTML表示,设置format=$2。\n\n参见[https://www.mediawiki.org/wiki/Special:MyLanguage/API 完整文档],或[[Special:ApiHelp/main|API帮助]]以获取更多信息。",
+       "api-format-prettyprint-header": "这是$1格式的HTML表示。HTML对调试很有用,但不适合应用程序使用。\n\n指定<var>format</var>参数以更改输出格式。要查看$1格式的非HTML表示,设置<kbd>format=$2</kbd>。\n\n参见[[mw:API|完整文档]],或[[Special:ApiHelp/main|API 帮助]]以获取更多信息。",
        "api-orm-param-props": "要查询的字段。",
        "api-orm-param-limit": "返回的总行数。",
+       "api-pageset-param-generator": "通过执行指定查询模块获得页面列表以工作。\n\n<strong>注意:</strong>发生器参数名称必须以“g”开头,参见例子。",
        "api-pageset-param-redirects-nogenerator": "自动解决<var>$1titles</var>、<var>$1pageids</var>和<var>$1revids</var>中的重定向。",
        "api-help-title": "MediaWiki API 帮助",
        "api-help-lead": "这是自动生成的MediaWiki API文档页面。\n\n文档和例子:https://www.mediawiki.org/wiki/API:Main_page/zh",
        "api-help-param-limit": "不允许超过$1。",
        "api-help-param-limit2": "不允许超过$1个(对于机器人则是$2个)。",
        "api-help-param-integer-min": "{{PLURAL:$1|值}}必须不少于$2。",
-       "api-help-param-integer-max": "{{PLURAL:$1|值}}必须不大于$2。",
+       "api-help-param-integer-max": "{{PLURAL:$1|值}}必须不大于$3。",
        "api-help-param-integer-minmax": "{{PLURAL:$1|值}}必须介于$2和$3之间。",
        "api-help-param-multi-separate": "通过“<kbd>|</kbd>”隔开各值。",
        "api-help-param-multi-max": "值的最高数字是{{PLURAL:$1|$1}}(对于机器人则是{{PLURAL:$2|$2}})。",
index c6aa730..dc3cc2d 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Cwlin0416",
                        "Liuxinyu970226",
-                       "LNDDYL"
+                       "LNDDYL",
+                       "EagerLin"
                ]
        },
        "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: 錯誤與警告]]。",
        "apihelp-block-description": "封鎖使用者。",
        "apihelp-block-param-user": "您要封鎖的使用者名稱、IP 位址或 IP 範圍。",
        "apihelp-block-param-reason": "封鎖原因。",
-       "apihelp-block-param-anononly": "僅封鎖匿名使用者 (禁止這個 IP 的匿名使用者編輯)。",
+       "apihelp-block-param-anononly": "僅封鎖匿名使用者 (禁止這個 IP 位址的匿名使用者編輯)。",
        "apihelp-block-param-nocreate": "禁止建立帳號。",
        "apihelp-block-param-autoblock": "自動封鎖最後使用的 IP 位址,以及在這之後嘗試登入的 IP 位址。",
-       "apihelp-block-param-noemail": "禁止使用者透過 Wiki 寄送電子郵件。 (需要 \"blockemail\" 權限)。",
-       "apihelp-block-param-hidename": "隱藏封鎖日誌的使用者名稱。 (需要 \"hideuser\" 權限)。",
+       "apihelp-block-param-noemail": "禁止使用者透過 Wiki 寄送電子郵件。 (需要 <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-param-watchuser": "監視使用者或 IP 位址的使用者頁面與對話頁面。",
+       "apihelp-block-example-ip-simple": "封鎖 IP 位址 <kbd>192.0.2.5</kbd> 三天,原因為 <kbd>First strike</kbd>。",
+       "apihelp-block-example-user-complex": "永久封鎖 IP 位址 <kbd>Vandal</kbd>,原因為 <kbd>First strike</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\" 的修訂編號,頁面標題或頁面 ID 為必填。",
        "apihelp-compare-param-fromtitle": "要比對的第一個標題。",
        "apihelp-compare-param-fromid": "要比對的第一個頁面 ID。",
        "apihelp-compare-param-fromrev": "要比對的第一個修訂。",
        "apihelp-createaccount-param-password": "密碼 (若有設定 <var>$1mailpassword</var> 則可略過)。",
        "apihelp-createaccount-param-domain": "外部認証使用的網域 (選填)。",
        "apihelp-createaccount-param-token": "已取得帳號建立密鑰於第一次請求。",
-       "apihelp-createaccount-param-email": "使用者的電子郵件位址 (選填)。",
+       "apihelp-createaccount-param-email": "使用者的電子郵件地址 (選填) 。",
        "apihelp-createaccount-param-realname": "使用者的真實姓名 (選填)。",
        "apihelp-createaccount-param-mailpassword": "若設為其他值,將會以電子郵件寄送隨機密碼給使用者。",
        "apihelp-createaccount-param-reason": "建立帳號時選填的原因,會被記錄到日誌當中。",
        "apihelp-createaccount-param-language": "要設定的使用者預設語言代碼 (選填,預設依據內容語言)。",
-       "apihelp-createaccount-example-pass": "建立使用者 \"testuser\" 使用密碼 \"test123\"",
-       "apihelp-createaccount-example-mail": "建立使用者 \"testmailuser\" 並且電子郵件通知隨機產生的密碼",
+       "apihelp-createaccount-example-pass": "建立使用者 <kbd>testuser</kbd> 使用密碼 <kbd>test123</kbd>",
+       "apihelp-createaccount-example-mail": "建立使用者 <kbd>testmailuser</kbd> 並且電子郵件通知隨機產生的密碼。",
        "apihelp-delete-description": "刪除頁面。",
-       "apihelp-delete-param-title": "您欲刪除的頁面標題。 無法與 $1pageid 同時使用。",
-       "apihelp-delete-param-pageid": "您欲刪除頁面的頁面 ID。 無法與 $1title 同時使用。",
+       "apihelp-delete-param-title": "您欲刪除的頁面標題。 無法與 <var>$1pageid</var> 同時使用。",
+       "apihelp-delete-param-pageid": "您欲刪除頁面的頁面 ID。 無法與 <var>$1title</var> 同時使用。",
        "apihelp-delete-param-reason": "刪除的原因。 若未設定,將會使用自動產生的原因。",
-       "apihelp-delete-param-watch": "加入頁面至您的監視清單。",
-       "apihelp-delete-param-unwatch": "從您的監視清單中移除頁面。",
-       "apihelp-delete-example-simple": "刪除主頁面",
-       "apihelp-delete-example-reason": "刪除主頁面使用原因 \"準備移至它處\"",
+       "apihelp-delete-param-watch": "加入目前頁面至您的監視清單。",
+       "apihelp-delete-param-watchlist": "無條件使用設置將頁面加入或移除目前使用者的監視清單或者是不更改監視清單。",
+       "apihelp-delete-param-unwatch": "從您的監視清單中移除目前頁面。",
+       "apihelp-delete-param-oldimage": "由 [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] 所提供要刪除的舊圖片名稱。",
+       "apihelp-delete-example-simple": "刪除 <kbd>Main Page</kbd>。",
+       "apihelp-delete-example-reason": "刪除 <kbd>Main Page</kbd> 原因為 <kbd>Preparing for move</kbd>。",
        "apihelp-disabled-description": "已停用此模組。",
        "apihelp-edit-description": "建立與編輯頁面。",
-       "apihelp-edit-param-title": "您欲編輯的頁面標題。 無法與 $1pageid 同時使用。",
-       "apihelp-edit-param-pageid": "您欲編輯頁面的頁面 ID。 無法與 $1title 同時使用。",
-       "apihelp-edit-param-section": "章節編號。 0 代表最上層章節,\"new\" 代表新章節。",
+       "apihelp-edit-param-title": "您欲編輯的頁面標題。 無法與 <var>$1pageid</var> 同時使用。",
+       "apihelp-edit-param-pageid": "您欲編輯頁面的頁面 ID。 無法與 <var>$1title</var> 同時使用。",
+       "apihelp-edit-param-section": "章節編號。 <kbd>0</kbd> 代表最上層章節,<kbd>new</kbd> 代表新章節。",
        "apihelp-edit-param-sectiontitle": "新章節的標題。",
        "apihelp-edit-param-text": "頁面內容。",
        "apihelp-edit-param-summary": "編輯摘要。 當未設定 $1section=new 與 $1sectiontitle 時也會當做章節標題。",
        "apihelp-edit-param-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-createonly": "若頁面已存在,則不編輯頁面。",
        "apihelp-edit-param-nocreate": "若頁面不存在,則產生錯誤。",
-       "apihelp-edit-param-watch": "加入頁面至您的監視清單。",
-       "apihelp-edit-param-unwatch": "從您的監視清單中移除頁面。",
+       "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": "寄送電子郵件給使用者 \"WikiSysop\" 使用內容 \"Content\"",
+       "apihelp-emailuser-example-email": "寄送電子郵件給使用者 <kbd>WikiSysop</kbd> 使用內容 <kbd>Content</kbd>",
        "apihelp-expandtemplates-description": "展開所有於 wikitext 中模板。",
        "apihelp-expandtemplates-param-title": "頁面標題。",
        "apihelp-expandtemplates-param-text": "要轉換的 Wikitext。",
+       "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-limit": "回傳的結果數量上限。",
+       "apihelp-feedrecentchanges-param-hideminor": "隱藏小編輯。",
+       "apihelp-feedrecentchanges-param-hidebots": "隱藏由機器人做的變更。",
+       "apihelp-feedrecentchanges-param-hideanons": "隱藏匿名使用者做的變更。",
+       "apihelp-feedrecentchanges-param-hideliu": "隱藏已註冊使用者做的變更。",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "隱藏已巡查的變更。",
        "apihelp-feedrecentchanges-example-simple": "顯示近期變動",
        "apihelp-feedrecentchanges-example-30days": "顯示近期30天內的變動",
        "apihelp-feedwatchlist-description": "返回監視清單 feed。",
        "apihelp-move-param-reason": "重新命名的原因。",
        "apihelp-move-param-movesubpages": "如果適用,則重新命名子頁面。",
        "apihelp-move-param-noredirect": "不要建立重新導向。",
+       "apihelp-move-param-ignorewarnings": "忽略所有警告。",
        "apihelp-opensearch-description": "使用 OpenSearch 協定搜尋本 wiki。",
        "apihelp-opensearch-param-search": "搜尋字串。",
+       "apihelp-opensearch-param-limit": "回傳的結果數量上限。",
        "apihelp-opensearch-param-namespace": "搜尋的命名空間。",
+       "apihelp-opensearch-param-format": "輸出的格式。",
        "apihelp-options-example-reset": "重設所有偏好設定",
+       "apihelp-query+allcategories-param-limit": "要回傳的分類數量。",
+       "apihelp-query+allfileusages-param-limit": "要回傳的項目總數。",
+       "apihelp-query+allimages-param-limit": "要回傳的圖片總數。",
+       "apihelp-query+alllinks-param-limit": "要回傳的項目總數。",
+       "apihelp-query+allpages-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+allredirects-param-limit": "要回傳的項目總數。",
+       "apihelp-query+alltransclusions-param-limit": "要回傳的項目總數。",
+       "apihelp-query+categories-param-limit": "要回傳的分類數量。",
+       "apihelp-query+categorymembers-param-limit": "回傳的頁面數量上限。",
+       "apihelp-query+contributors-param-limit": "要回傳的貢獻人員數量。",
+       "apihelp-query+duplicatefiles-param-limit": "要回傳的重複檔案數量。",
+       "apihelp-query+embeddedin-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+extlinks-param-limit": "要回傳的連結數量。",
+       "apihelp-query+exturlusage-param-limit": "要回傳的頁面數量。",
+       "apihelp-query+filearchive-param-limit": "要回傳的圖片總數。",
+       "apihelp-query+fileusage-param-limit": "要回傳的數量。",
+       "apihelp-query+imageinfo-param-limit": "每個檔案要回傳的檔案修訂數量。",
+       "apihelp-query+images-param-limit": "要回傳的檔案數量。",
+       "apihelp-query+iwlinks-param-limit": "要回傳的跨 Wiki 連結數量。",
+       "apihelp-query+langbacklinks-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+langlinks-param-limit": "要回傳的 langlinks 數量。",
+       "apihelp-query+links-param-limit": "要回傳的連結數量。",
+       "apihelp-query+linkshere-param-limit": "要回傳的數量。",
+       "apihelp-query+logevents-param-limit": "要回傳的事件項目總數。",
+       "apihelp-query+pagepropnames-param-limit": "回傳的名稱數量上限。",
+       "apihelp-query+pageswithprop-param-limit": "回傳的頁面數量上限。",
+       "apihelp-query+prefixsearch-param-limit": "回傳的結果數量上限。",
+       "apihelp-query+protectedtitles-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+querypage-param-limit": "回傳的結果數量。",
+       "apihelp-query+recentchanges-description": "列舉出近期變動。",
+       "apihelp-query+recentchanges-param-limit": "要回傳變更總數。",
+       "apihelp-query+recentchanges-example-simple": "近期變動清單",
+       "apihelp-query+redirects-param-limit": "要回傳的重新導向數量。",
+       "apihelp-query+search-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+templates-param-limit": "要回傳的樣板數量。",
+       "apihelp-query+tokens-param-type": "要請求的密鑰類型。",
+       "apihelp-query+tokens-example-simple": "接收 csrf 密鑰 (預設)。",
+       "apihelp-query+tokens-example-types": "接收監視密鑰以及巡邏密鑰。",
+       "apihelp-query+transcludedin-param-limit": "回傳的數量。",
+       "apihelp-query+usercontribs-param-limit": "回傳的貢獻數量上限。",
+       "apihelp-query+watchlist-param-limit": "每個請求要回傳的結果總數。",
+       "apihelp-query+watchlistraw-param-limit": "每個請求要回傳的結果總數。",
+       "apihelp-tokens-description": "取得資料修改動作的密鑰。\n\n此模組已因支援 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] 而停用。",
+       "apihelp-unblock-param-reason": "解除封鎖的原因。",
+       "apihelp-unblock-example-id": "解除封銷 ID #<kbd>105</kbd>。",
+       "apihelp-undelete-param-reason": "還原的原因。",
+       "apihelp-userrights-description": "更改一位使用者的群組成員。",
        "apihelp-userrights-param-user": "使用者名稱。",
        "apihelp-userrights-param-userid": "使用者 ID。",
+       "apihelp-userrights-param-add": "加入使用者至這些群組。",
+       "apihelp-userrights-param-remove": "從這些群組移除使用者。",
+       "apihelp-userrights-param-reason": "變更的原因。",
        "apihelp-format-example-generic": "格式化查詢結果為 $1 格式",
-       "apihelp-dbg-description": "使用 PHP 的 var_export() 格式輸出資料。",
-       "apihelp-dbgfm-description": "使用 PHP 的 var_export() 格式輸出資料 (使用 HTML 格式顯示)。",
-       "apihelp-dump-description": "使用 PHP 的 var_dump() 格式輸出資料。",
-       "apihelp-dumpfm-description": "使用 PHP 的 var_dump() 格式輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-dbg-description": "使用 PHP 的 <code>var_export()</code> 格式輸出資料。",
+       "apihelp-dbgfm-description": "使用 PHP 的 <code>var_export()</code> 格式輸出資料 (使用 HTML 格式顯示)。",
+       "apihelp-dump-description": "使用 PHP 的 <code>var_dump()</code> 格式輸出資料。",
+       "apihelp-dumpfm-description": "使用 PHP 的 <code>var_dump()</code> 格式輸出資料 (使用 HTML 格式顯示)。",
        "apihelp-json-description": "使用 JSON 格式輸出資料。",
        "apihelp-jsonfm-description": "使用 JSON 格式輸出資料 (使用 HTML 格式顯示)。",
        "apihelp-none-description": "不輸出。",
        "apihelp-php-description": "使用序列化 PHP 格式輸出資料。",
        "apihelp-phpfm-description": "使用序列化 PHP 格式輸出資料 (使用 HTML 格式顯示)。",
        "apihelp-rawfm-description": "使用 JSON 格式的除錯元素輸出資料 (使用 HTML 格式顯示)。",
-       "apihelp-txt-description": "使用 PHP 的 print_r() 格式輸出資料。",
-       "apihelp-txtfm-description": "使用 PHP 的 print_r() 格式輸出資料 (使用 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-yaml-description": "使用 YAML 格式輸出資料。",
        "apihelp-yamlfm-description": "使用 YAML 格式輸出資料 (使用 HTML 格式顯示)。",
        "api-format-title": "MediaWiki API 結果",
+       "api-orm-param-props": "要查詢的欄位。",
+       "api-orm-param-limit": "回傳的列數上限。",
+       "api-pageset-param-titles": "要使用的標題清單。",
+       "api-pageset-param-pageids": "要使用的頁面 ID 清單。",
+       "api-pageset-param-revids": "要使用的修訂 ID 清單。",
        "api-help-title": "MediaWiki API 說明",
+       "api-help-lead": "此頁為自動產生的 MediaWiki API 說明文件頁面。\n\n說明文件與範例:https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "主要模組",
        "api-help-flag-deprecated": "此模組已停用。",
        "api-help-flag-readrights": "此模組需要讀取權限。",
        "api-help-parameters": "{{PLURAL:$1|參數}}:",
        "api-help-param-deprecated": "已停用。",
        "api-help-param-required": "此參數為必填。",
+       "api-help-param-list": "{{PLURAL:$1|1=單值|2=多值 (以 <kbd>{{!}}</kbd> 分隔)}}:$2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=必須空白|可以空白,或 $2}}",
        "api-help-param-limit": "不允許超過 $1。",
        "api-help-param-limit2": "不允許超過 $1 (機器人為 $2)。",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=數值|2=數值}}不可小於 $2。",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=數值|2=數值}}不可大於 $3。",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=數值|2=數值}}必須在 $2 與 $3 之間。",
+       "api-help-param-upload": "必須使用 multipart/form-data 以檔案上傳的方式傳送。",
        "api-help-param-multi-separate": "使用 <kbd>|</kbd> 分隔數值。",
+       "api-help-param-multi-max": "上限值為 {{PLURAL:$1|$1}} (機器人為 {{PLURAL:$2|$2}})。",
        "api-help-param-default": "預設值:$1",
        "api-help-param-default-empty": "預設值:<span class=\"apihelp-empty\">(空)</span>",
+       "api-help-param-token": "自 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] 接收的 \"$1\" 密鑰。",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(無描述)</span>",
        "api-help-examples": "{{PLURAL:$1|範例}}:",
        "api-help-permissions": "{{PLURAL:$1|權限}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|已授權給}}: $2",
-       "api-credits-header": "製作群"
+       "api-credits-header": "製作群",
+       "api-credits": "API 開發人員:\n* Roan Kattouw (首席開發者 Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (創立者,首席開發者 Sep 2006–Sep 2007)\n* Brad Jorsch (首席開發者 2013–present)\n\n請傳送您的評論、建議以及問題至 mediawiki-api@lists.wikimedia.org\n或者回報問題至 https://phabricator.wikimedia.org/。"
 }
index c6d9a18..10b4fb0 100644 (file)
@@ -38,8 +38,6 @@
  * of memory.
  *
  * Introduced by r47317
- *
- * @internal documentation reviewed on 18 Mar 2011 by hashar
  */
 class BacklinkCache {
        /** @var ProcessCacheLRU */
@@ -487,4 +485,55 @@ class BacklinkCache {
 
                return array( 'numRows' => $numRows, 'batches' => $batches );
        }
+
+       /**
+        * Get a Title iterator for cascade-protected template/file use backlinks
+        *
+        * @return TitleArray
+        * @since 1.25
+        */
+       public function getCascadeProtectedLinks() {
+               $dbr = $this->getDB();
+
+               // @todo: use UNION without breaking tests that use temp tables
+               $resSets = array();
+               $resSets[] = $dbr->select(
+                       array( 'templatelinks', 'page_restrictions', 'page' ),
+                       array( 'page_namespace', 'page_title', 'page_id' ),
+                       array(
+                               'tl_namespace' => $this->title->getNamespace(),
+                               'tl_title' => $this->title->getDBkey(),
+                               'tl_from = pr_page',
+                               'pr_cascade' => 1,
+                               'page_id = tl_from'
+                       ),
+                       __METHOD__,
+                       array( 'DISTINCT' )
+               );
+               if ( $this->title->getNamespace() == NS_FILE ) {
+                       $resSets[] = $dbr->select(
+                               array( 'imagelinks', 'page_restrictions', 'page' ),
+                               array( 'page_namespace', 'page_title', 'page_id' ),
+                               array(
+                                       'il_to' => $this->title->getDBkey(),
+                                       'il_from = pr_page',
+                                       'pr_cascade' => 1,
+                                       'page_id = il_from'
+                               ),
+                               __METHOD__,
+                               array( 'DISTINCT' )
+                       );
+               }
+
+               // Combine and de-duplicate the results
+               $mergedRes = array();
+               foreach ( $resSets as $res ) {
+                       foreach ( $res as $row ) {
+                               $mergedRes[$row->page_id] = $row;
+                       }
+               }
+
+               return TitleArray::newFromResult(
+                       new FakeResultWrapper( array_values( $mergedRes ) ) );
+       }
 }
index 9b48ecb..517f379 100644 (file)
@@ -181,13 +181,11 @@ class FileDependency extends CacheDependency {
 
        function loadDependencyValues() {
                if ( is_null( $this->timestamp ) ) {
-                       if ( !file_exists( $this->filename ) ) {
-                               # Dependency on a non-existent file
-                               # This is a valid concept!
-                               $this->timestamp = false;
-                       } else {
-                               $this->timestamp = filemtime( $this->filename );
-                       }
+                       wfSuppressWarnings();
+                       # Dependency on a non-existent file stores "false"
+                       # This is a valid concept!
+                       $this->timestamp = filemtime( $this->filename );
+                       wfRestoreWarnings();
                }
        }
 
@@ -195,7 +193,10 @@ class FileDependency extends CacheDependency {
         * @return bool
         */
        function isExpired() {
-               if ( !file_exists( $this->filename ) ) {
+               wfSuppressWarnings();
+               $lastmod = filemtime( $this->filename );
+               wfRestoreWarnings();
+               if ( $lastmod === false ) {
                        if ( $this->timestamp === false ) {
                                # Still nonexistent
                                return false;
@@ -206,7 +207,6 @@ class FileDependency extends CacheDependency {
                                return true;
                        }
                } else {
-                       $lastmod = filemtime( $this->filename );
                        if ( $lastmod > $this->timestamp ) {
                                # Modified or created
                                wfDebug( "Dependency triggered: {$this->filename} changed.\n" );
index e270f5f..dc5a2eb 100644 (file)
@@ -1020,7 +1020,8 @@ class LocalisationCache {
                # HACK: If using a null (i.e. disabled) storage backend, we
                # can't write to the MessageBlobStore either
                if ( $purgeBlobs && !$this->store instanceof LCStoreNull ) {
-                       MessageBlobStore::getInstance()->clear();
+                       $blobStore = new MessageBlobStore();
+                       $blobStore->clear();
                }
 
        }
index 04f5887..a55e25a 100644 (file)
@@ -562,7 +562,8 @@ class MessageCache {
 
                // Update the message in the message blob store
                global $wgContLang;
-               MessageBlobStore::getInstance()->updateMessage( $wgContLang->lcfirst( $msg ) );
+               $blobStore = new MessageBlobStore();
+               $blobStore->updateMessage( $wgContLang->lcfirst( $msg ) );
 
                Hooks::run( 'MessageCacheReplace', array( $title, $text ) );
 
@@ -1048,7 +1049,7 @@ class MessageCache {
                if ( !$title ) {
                        # It's not uncommon having a null $wgTitle in scripts. See r80898
                        # Create a ghost title in such case
-                       $title = Title::newFromText( 'Dwimmerlaik' );
+                       $title = Title::makeTitle( NS_SPECIAL, 'Badtitle/title not set in ' . __METHOD__ );
                }
 
                $this->mInParser = true;
diff --git a/includes/cache/bloom/BloomCache.php b/includes/cache/bloom/BloomCache.php
deleted file mode 100644 (file)
index 6ecaacb..0000000
+++ /dev/null
@@ -1,324 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Persistent bloom filter used to avoid expensive lookups
- *
- * @since 1.24
- */
-abstract class BloomCache {
-       /** @var string Unique ID for key namespacing */
-       protected $cacheID;
-
-       /** @var array Map of (id => BloomCache) */
-       protected static $instances = array();
-
-       /**
-        * @param string $id
-        * @return BloomCache
-        */
-       final public static function get( $id ) {
-               global $wgBloomFilterStores;
-
-               if ( !isset( self::$instances[$id] ) ) {
-                       if ( isset( $wgBloomFilterStores[$id] ) ) {
-                               $class = $wgBloomFilterStores[$id]['class'];
-                               self::$instances[$id] = new $class( $wgBloomFilterStores[$id] );
-                       } else {
-                               wfDebug( "No bloom filter store '$id'; using EmptyBloomCache." );
-                               return new EmptyBloomCache( array() );
-                       }
-               }
-
-               return self::$instances[$id];
-       }
-
-       /**
-        * Create a new bloom cache instance from configuration.
-        * This should only be called from within BloomCache.
-        *
-        * @param array $config Parameters include:
-        *   - cacheID : Prefix to all bloom filter names that is unique to this cache.
-        *               It should only consist of alphanumberic, '-', and '_' characters.
-        *               This ID is what avoids collisions if multiple logical caches
-        *               use the same storage system, so this should be set carefully.
-        * @throws MWException
-        */
-       public function __construct( array $config ) {
-               $this->cacheID = $config['cacheId'];
-               if ( !preg_match( '!^[a-zA-Z0-9-_]{1,32}$!', $this->cacheID ) ) {
-                       throw new MWException( "Cache ID '{$this->cacheID}' is invalid." );
-               }
-       }
-
-       /**
-        * Check if a member is set in the bloom filter
-        *
-        * A member being set means that it *might* have been added.
-        * A member not being set means it *could not* have been added.
-        *
-        * This abstracts over isHit() to deal with filter updates and readiness.
-        * A class must exist with the name BloomFilter<type> and a static public
-        * mergeAndCheck() method. The later takes the following arguments:
-        *              (BloomCache $bcache, $domain, $virtualKey, array $status)
-        * The method should return a bool indicating whether to use the filter.
-        *
-        * The 'shared' bloom key must be used for any updates and will be used
-        * for the membership check if the method returns true. Since the key is shared,
-        * the method should never use delete(). The filter cannot be used in cases where
-        * membership in the filter needs to be taken away. In such cases, code *cannot*
-        * use this method - instead, it can directly use the other BloomCache methods
-        * to manage custom filters with their own keys (e.g. not 'shared').
-        *
-        * @param string $domain
-        * @param string $type
-        * @param string $member
-        * @return bool True if set, false if not (also returns true on error)
-        */
-       final public function check( $domain, $type, $member ) {
-               $ps = Profiler::instance()->scopedProfileIn( get_class( $this ) . '::' . __FUNCTION__ );
-
-               if ( method_exists( "BloomFilter{$type}", 'mergeAndCheck' ) ) {
-                       try {
-                               $virtualKey = "$domain:$type";
-
-                               $status = $this->getStatus( $virtualKey );
-                               if ( $status == false ) {
-                                       wfDebug( "Could not query virtual bloom filter '$virtualKey'." );
-                                       return true;
-                               }
-
-                               $useFilter = call_user_func_array(
-                                       array( "BloomFilter{$type}", 'mergeAndCheck' ),
-                                       array( $this, $domain, $virtualKey, $status )
-                               );
-
-                               if ( $useFilter ) {
-                                       return ( $this->isHit( 'shared', "$virtualKey:$member" ) !== false );
-                               }
-                       } catch ( Exception $e ) {
-                               MWExceptionHandler::logException( $e );
-                               return true;
-                       }
-               }
-
-               return true;
-       }
-
-       /**
-        * Inform the bloom filter of a new member in order to keep it up to date
-        *
-        * @param string $domain
-        * @param string $type
-        * @param string|array $members
-        * @return bool Success
-        */
-       final public function insert( $domain, $type, $members ) {
-               $ps = Profiler::instance()->scopedProfileIn( get_class( $this ) . '::' . __FUNCTION__ );
-
-               if ( method_exists( "BloomFilter{$type}", 'mergeAndCheck' ) ) {
-                       try {
-                               $virtualKey = "$domain:$type";
-                               $prefixedMembers = array();
-                               foreach ( (array)$members as $member ) {
-                                       $prefixedMembers[] = "$virtualKey:$member";
-                               }
-
-                               return $this->add( 'shared', $prefixedMembers );
-                       } catch ( Exception $e ) {
-                               MWExceptionHandler::logException( $e );
-                               return false;
-                       }
-               }
-
-               return true;
-       }
-
-       /**
-        * Create a new bloom filter at $key (if one does not exist yet)
-        *
-        * @param string $key
-        * @param integer $size Bit length [default: 1000000]
-        * @param float $precision [default: .001]
-        * @return bool Success
-        */
-       final public function init( $key, $size = 1000000, $precision = .001 ) {
-               $ps = Profiler::instance()->scopedProfileIn( get_class( $this ) . '::' . __FUNCTION__ );
-
-               return $this->doInit( "{$this->cacheID}:$key", $size, min( .1, $precision ) );
-       }
-
-       /**
-        * Add a member to the bloom filter at $key
-        *
-        * @param string $key
-        * @param string|array $members
-        * @return bool Success
-        */
-       final public function add( $key, $members ) {
-               $ps = Profiler::instance()->scopedProfileIn( get_class( $this ) . '::' . __FUNCTION__ );
-
-               return $this->doAdd( "{$this->cacheID}:$key", (array)$members );
-       }
-
-       /**
-        * Check if a member is set in the bloom filter.
-        *
-        * A member being set means that it *might* have been added.
-        * A member not being set means it *could not* have been added.
-        *
-        * If this returns true, then the caller usually should do the
-        * expensive check (whatever that may be). It can be avoided otherwise.
-        *
-        * @param string $key
-        * @param string $member
-        * @return bool|null True if set, false if not, null on error
-        */
-       final public function isHit( $key, $member ) {
-               $ps = Profiler::instance()->scopedProfileIn( get_class( $this ) . '::' . __FUNCTION__ );
-
-               return $this->doIsHit( "{$this->cacheID}:$key", $member );
-       }
-
-       /**
-        * Destroy a bloom filter at $key
-        *
-        * @param string $key
-        * @return bool Success
-        */
-       final public function delete( $key ) {
-               $ps = Profiler::instance()->scopedProfileIn( get_class( $this ) . '::' . __FUNCTION__ );
-
-               return $this->doDelete( "{$this->cacheID}:$key" );
-       }
-
-       /**
-        * Set the status map of the virtual bloom filter at $key
-        *
-        * @param string $virtualKey
-        * @param array $values Map including some of (lastID, asOfTime, epoch)
-        * @return bool Success
-        */
-       final public function setStatus( $virtualKey, array $values ) {
-               $ps = Profiler::instance()->scopedProfileIn( get_class( $this ) . '::' . __FUNCTION__ );
-
-               return $this->doSetStatus( "{$this->cacheID}:$virtualKey", $values );
-       }
-
-       /**
-        * Get the status map of the virtual bloom filter at $key
-        *
-        * The map includes:
-        *   - lastID    : the highest ID of the items merged in
-        *   - asOfTime  : UNIX timestamp that the filter is up-to-date as of
-        *   - epoch     : UNIX timestamp that filter started being populated
-        * Unset fields will have a null value.
-        *
-        * @param string $virtualKey
-        * @return array|bool False on failure
-        */
-       final public function getStatus( $virtualKey ) {
-               $ps = Profiler::instance()->scopedProfileIn( get_class( $this ) . '::' . __FUNCTION__ );
-
-               return $this->doGetStatus( "{$this->cacheID}:$virtualKey" );
-       }
-
-       /**
-        * Get an exclusive lock on a filter for updates
-        *
-        * @param string $virtualKey
-        * @return ScopedCallback|ScopedLock|null Returns null if acquisition failed
-        */
-       public function getScopedLock( $virtualKey ) {
-               return null;
-       }
-
-       /**
-        * @param string $key
-        * @param integer $size Bit length
-        * @param float $precision
-        * @return bool Success
-        */
-       abstract protected function doInit( $key, $size, $precision );
-
-       /**
-        * @param string $key
-        * @param array $members
-        * @return bool Success
-        */
-       abstract protected function doAdd( $key, array $members );
-
-       /**
-        * @param string $key
-        * @param string $member
-        * @return bool|null
-        */
-       abstract protected function doIsHit( $key, $member );
-
-       /**
-        * @param string $key
-        * @return bool Success
-        */
-       abstract protected function doDelete( $key );
-
-       /**
-        * @param string $virtualKey
-        * @param array $values
-        * @return bool Success
-        */
-       abstract protected function doSetStatus( $virtualKey, array $values );
-
-       /**
-        * @param string $key
-        * @return array|bool
-        */
-       abstract protected function doGetStatus( $key );
-}
-
-class EmptyBloomCache extends BloomCache {
-       public function __construct( array $config ) {
-               parent::__construct( array( 'cacheId' => 'none' ) );
-       }
-
-       protected function doInit( $key, $size, $precision ) {
-               return true;
-       }
-
-       protected function doAdd( $key, array $members ) {
-               return true;
-       }
-
-       protected function doIsHit( $key, $member ) {
-               return true;
-       }
-
-       protected function doDelete( $key ) {
-               return true;
-       }
-
-       protected function doSetStatus( $virtualKey, array $values ) {
-               return true;
-       }
-
-       protected function doGetStatus( $virtualKey ) {
-               return array( 'lastID' => null, 'asOfTime' => null, 'epoch' => null );
-       }
-}
diff --git a/includes/cache/bloom/BloomCacheRedis.php b/includes/cache/bloom/BloomCacheRedis.php
deleted file mode 100644 (file)
index 583556f..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Bloom filter implemented using Redis
- *
- * The Redis server must be >= 2.6 and should have volatile-lru or volatile-ttl
- * if there is any eviction policy. It should not be allkeys-* in any case. Also,
- * this can be used in a simple master/slave setup or with Redis Sentinel preferably.
- *
- * Some bits are based on https://github.com/ErikDubbelboer/redis-lua-scaling-bloom-filter
- * but are simplified to use a single filter instead of up to 32 filters.
- *
- * @since 1.24
- */
-class BloomCacheRedis extends BloomCache {
-       /** @var RedisConnectionPool */
-       protected $redisPool;
-       /** @var RedisLockManager */
-       protected $lockMgr;
-       /** @var array */
-       protected $servers;
-       /** @var integer Federate each filter into this many redis bitfield objects */
-       protected $segments = 128;
-
-       /**
-        * @params include:
-        *   - redisServers : list of servers (address:<port>) (the first is the master)
-        *   - redisConf    : additional redis configuration
-        *
-        * @param array $config
-        */
-       public function __construct( array $config ) {
-               parent::__construct( $config );
-
-               $redisConf = $config['redisConfig'];
-               $redisConf['serializer'] = 'none'; // manage that in this class
-               $this->redisPool = RedisConnectionPool::singleton( $redisConf );
-               $this->servers = $config['redisServers'];
-               $this->lockMgr = new RedisLockManager( array(
-                       'lockServers'  => array( 'srv1' => $this->servers[0] ),
-                       'srvsByBucket' => array( 0 => array( 'srv1' ) ),
-                       'redisConfig'  => $config['redisConfig']
-               ) );
-       }
-
-       protected function doInit( $key, $size, $precision ) {
-               $conn = $this->getConnection( 'master' );
-               if ( !$conn ) {
-                       return false;
-               }
-
-               // 80000000 items at p = .001 take up 500MB and fit into one value.
-               // Do not hit the 512MB redis value limit by reducing the demands.
-               $size = min( $size, 80000000 * $this->segments );
-               $precision = max( round( $precision, 3 ), .001 );
-               $epoch = microtime( true );
-
-               static $script =
-<<<LUA
-               local kMetadata, kData = unpack(KEYS)
-               local aEntries, aPrec, aEpoch = unpack(ARGV)
-               if redis.call('EXISTS',kMetadata) == 0 or redis.call('EXISTS',kData) == 0 then
-                       redis.call('DEL',kMetadata)
-                       redis.call('HSET',kMetadata,'entries',aEntries)
-                       redis.call('HSET',kMetadata,'precision',aPrec)
-                       redis.call('HSET',kMetadata,'epoch',aEpoch)
-                       redis.call('SET',kData,'')
-                       return 1
-               end
-               return 0
-LUA;
-
-               $res = false;
-               try {
-                       $conn->script( 'load', $script );
-                       $conn->multi( Redis::MULTI );
-                       for ( $i = 0; $i < $this->segments; ++$i ) {
-                               $res = $conn->luaEval( $script,
-                                       array(
-                                               "$key:$i:bloom-metadata", # KEYS[1]
-                                               "$key:$i:bloom-data", # KEYS[2]
-                                               ceil( $size / $this->segments ), # ARGV[1]
-                                               $precision, # ARGV[2]
-                                               $epoch # ARGV[3]
-                                       ),
-                                       2 # number of first argument(s) that are keys
-                               );
-                       }
-                       $results = $conn->exec();
-                       $res = $results && !in_array( false, $results, true );
-               } catch ( RedisException $e ) {
-                       $this->handleException( $conn, $e );
-               }
-
-               return ( $res !== false );
-       }
-
-       protected function doAdd( $key, array $members ) {
-               $conn = $this->getConnection( 'master' );
-               if ( !$conn ) {
-                       return false;
-               }
-
-               static $script =
-<<<LUA
-               local kMetadata, kData = unpack(KEYS)
-               local aMember = unpack(ARGV)
-
-               -- Check if the filter was initialized
-               if redis.call('EXISTS',kMetadata) == 0 or redis.call('EXISTS',kData) == 0 then
-                       return false
-               end
-
-               -- Initial expected entries and desired precision
-               local entries = 1*redis.call('HGET',kMetadata,'entries')
-               local precision = 1*redis.call('HGET',kMetadata,'precision')
-               local hash = redis.sha1hex(aMember)
-
-               -- Based on the math from: http://en.wikipedia.org/wiki/Bloom_filter#Probability_of_false_positives
-               -- 0.480453013 = ln(2)^2
-               local bits = math.ceil((entries * math.log(precision)) / -0.480453013)
-
-               -- 0.693147180 = ln(2)
-               local k = math.floor(0.693147180 * bits / entries)
-
-               -- This uses a variation on:
-               -- 'Less Hashing, Same Performance: Building a Better Bloom Filter'
-               -- http://www.eecs.harvard.edu/~kirsch/pubs/bbbf/esa06.pdf
-               local h = { }
-               h[0] = tonumber(string.sub(hash, 1, 8 ), 16)
-               h[1] = tonumber(string.sub(hash, 9, 16), 16)
-               h[2] = tonumber(string.sub(hash, 17, 24), 16)
-               h[3] = tonumber(string.sub(hash, 25, 32), 16)
-
-               for i=1, k do
-                       local pos = (h[i % 2] + i * h[2 + (((i + (i % 2)) % 4) / 2)]) % bits
-                       redis.call('SETBIT', kData, pos, 1)
-               end
-
-               return 1
-LUA;
-
-               $res = false;
-               try {
-                       $conn->script( 'load', $script );
-                       $conn->multi( Redis::PIPELINE );
-                       foreach ( $members as $member ) {
-                               $i = $this->getSegment( $member );
-                               $conn->luaEval( $script,
-                                       array(
-                                               "$key:$i:bloom-metadata", # KEYS[1],
-                                               "$key:$i:bloom-data", # KEYS[2]
-                                               $member # ARGV[1]
-                                       ),
-                                       2 # number of first argument(s) that are keys
-                               );
-                       }
-                       $results = $conn->exec();
-                       $res = $results && !in_array( false, $results, true );
-               } catch ( RedisException $e ) {
-                       $this->handleException( $conn, $e );
-               }
-
-               if ( $res === false ) {
-                       wfDebug( "Could not add to the '$key' bloom filter; it may be missing." );
-               }
-
-               return ( $res !== false );
-       }
-
-       protected function doSetStatus( $virtualKey, array $values ) {
-               $conn = $this->getConnection( 'master' );
-               if ( !$conn ) {
-                       return null;
-               }
-
-               $res = false;
-               try {
-                       $res = $conn->hMSet( "$virtualKey:filter-metadata", $values );
-               } catch ( RedisException $e ) {
-                       $this->handleException( $conn, $e );
-               }
-
-               return ( $res !== false );
-       }
-
-       protected function doGetStatus( $virtualKey ) {
-               $conn = $this->getConnection( 'slave' );
-               if ( !$conn ) {
-                       return false;
-               }
-
-               $res = false;
-               try {
-                       $res = $conn->hGetAll( "$virtualKey:filter-metadata" );
-               } catch ( RedisException $e ) {
-                       $this->handleException( $conn, $e );
-               }
-
-               if ( is_array( $res ) ) {
-                       $res['lastID'] = isset( $res['lastID'] ) ? $res['lastID'] : null;
-                       $res['asOfTime'] = isset( $res['asOfTime'] ) ? $res['asOfTime'] : null;
-                       $res['epoch'] = isset( $res['epoch'] ) ? $res['epoch'] : null;
-               }
-
-               return $res;
-       }
-
-       protected function doIsHit( $key, $member ) {
-               $conn = $this->getConnection( 'slave' );
-               if ( !$conn ) {
-                       return null;
-               }
-
-               static $script =
-<<<LUA
-               local kMetadata, kData = unpack(KEYS)
-               local aMember = unpack(ARGV)
-
-               -- Check if the filter was initialized
-               if redis.call('EXISTS',kMetadata) == 0 or redis.call('EXISTS',kData) == 0 then
-                       return false
-               end
-
-               -- Initial expected entries and desired precision.
-               -- This determines the size of the first and subsequent filters.
-               local entries = redis.call('HGET',kMetadata,'entries')
-               local precision = redis.call('HGET',kMetadata,'precision')
-               local hash = redis.sha1hex(aMember)
-
-               -- This uses a variation on:
-               -- 'Less Hashing, Same Performance: Building a Better Bloom Filter'
-               -- http://www.eecs.harvard.edu/~kirsch/pubs/bbbf/esa06.pdf
-               local h = { }
-               h[0] = tonumber(string.sub(hash, 1, 8 ), 16)
-               h[1] = tonumber(string.sub(hash, 9, 16), 16)
-               h[2] = tonumber(string.sub(hash, 17, 24), 16)
-               h[3] = tonumber(string.sub(hash, 25, 32), 16)
-
-               -- 0.480453013 = ln(2)^2
-               local bits = math.ceil((entries * math.log(precision)) / -0.480453013)
-
-               -- 0.693147180 = ln(2)
-               local k = math.floor(0.693147180 * bits / entries)
-
-               local found = 1
-               for i=1, k do
-                       local pos = (h[i % 2] + i * h[2 + (((i + (i % 2)) % 4) / 2)]) % bits
-                       if redis.call('GETBIT', kData, pos) == 0 then
-                               found = 0
-                               break
-                       end
-               end
-
-               return found
-LUA;
-
-               $res = null;
-               try {
-                       $i = $this->getSegment( $member );
-                       $res = $conn->luaEval( $script,
-                               array(
-                                       "$key:$i:bloom-metadata", # KEYS[1],
-                                       "$key:$i:bloom-data", # KEYS[2]
-                                       $member # ARGV[1]
-                               ),
-                               2 # number of first argument(s) that are keys
-                       );
-               } catch ( RedisException $e ) {
-                       $this->handleException( $conn, $e );
-               }
-
-               return is_int( $res ) ? (bool)$res : null;
-       }
-
-       protected function doDelete( $key ) {
-               $conn = $this->getConnection( 'master' );
-               if ( !$conn ) {
-                       return false;
-               }
-
-               $res = false;
-               try {
-                       $keys = array();
-                       for ( $i = 0; $i < $this->segments; ++$i ) {
-                               $keys[] = "$key:$i:bloom-metadata";
-                               $keys[] = "$key:$i:bloom-data";
-                       }
-                       $res = $conn->delete( $keys );
-               } catch ( RedisException $e ) {
-                       $this->handleException( $conn, $e );
-               }
-
-               return ( $res !== false );
-       }
-
-       public function getScopedLock( $virtualKey ) {
-               $status = Status::newGood();
-               return ScopedLock::factory( $this->lockMgr,
-                       array( $virtualKey ), LockManager::LOCK_EX, $status );
-       }
-
-       /**
-        * @param string $member
-        * @return integer
-        */
-       protected function getSegment( $member ) {
-               return hexdec( substr( md5( $member ), 0, 2 ) ) % $this->segments;
-       }
-
-       /**
-        * @param string $to (master/slave)
-        * @return RedisConnRef|bool Returns false on failure
-        */
-       protected function getConnection( $to ) {
-               if ( $to === 'master' ) {
-                       $conn = $this->redisPool->getConnection( $this->servers[0] );
-               } else {
-                       static $lastServer = null;
-
-                       $conn = false;
-                       if ( $lastServer ) {
-                               $conn = $this->redisPool->getConnection( $lastServer );
-                               if ( $conn ) {
-                                       return $conn; // reuse connection
-                               }
-                       }
-                       $servers = $this->servers;
-                       $attempts = min( 3, count( $servers ) );
-                       for ( $i = 1; $i <= $attempts; ++$i ) {
-                               $index = mt_rand( 0, count( $servers ) - 1 );
-                               $conn = $this->redisPool->getConnection( $servers[$index] );
-                               if ( $conn ) {
-                                       $lastServer = $servers[$index];
-                                       return $conn;
-                               }
-                               unset( $servers[$index] ); // skip next time
-                               $servers = array_values( $servers ); // reindex
-                       }
-               }
-
-               return $conn;
-       }
-
-       /**
-        * @param RedisConnRef $conn
-        * @param Exception $e
-        */
-       protected function handleException( RedisConnRef $conn, $e ) {
-               $this->redisPool->handleError( $conn, $e );
-       }
-}
diff --git a/includes/cache/bloom/BloomFilters.php b/includes/cache/bloom/BloomFilters.php
deleted file mode 100644 (file)
index 9b710d7..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * @since 1.24
- */
-class BloomFilterTitleHasLogs {
-       public static function mergeAndCheck(
-               BloomCache $bcache, $domain, $virtualKey, array $status
-       ) {
-               $age = microtime( true ) - $status['asOfTime']; // seconds
-               $scopedLock = ( mt_rand( 1, (int)pow( 3, max( 0, 5 - $age ) ) ) == 1 )
-                       ? $bcache->getScopedLock( $virtualKey )
-                       : false;
-
-               if ( $scopedLock ) {
-                       $updates = self::merge( $bcache, $domain, $virtualKey, $status );
-                       if ( isset( $updates['asOfTime'] ) ) {
-                               $age = ( microtime( true ) - $updates['asOfTime'] );
-                       }
-               }
-
-               return ( $age < 30 );
-       }
-
-       public static function merge(
-               BloomCache $bcache, $domain, $virtualKey, array $status
-       ) {
-               $limit = 1000;
-               $dbr = wfGetDB( DB_SLAVE, array(), $domain );
-               $res = $dbr->select( 'logging',
-                       array( 'log_namespace', 'log_title', 'log_id', 'log_timestamp' ),
-                       array( 'log_id > ' . $dbr->addQuotes( (int)$status['lastID'] ) ),
-                       __METHOD__,
-                       array( 'ORDER BY' => 'log_id', 'LIMIT' => $limit )
-               );
-
-               $updates = array();
-               if ( $res->numRows() > 0 ) {
-                       $members = array();
-                       foreach ( $res as $row ) {
-                               $members[] = "$virtualKey:{$row->log_namespace}:{$row->log_title}";
-                       }
-                       $lastID = $row->log_id;
-                       $lastTime = $row->log_timestamp;
-                       if ( !$bcache->add( 'shared', $members ) ) {
-                               return false;
-                       }
-                       $updates['lastID'] = $lastID;
-                       $updates['asOfTime'] = wfTimestamp( TS_UNIX, $lastTime );
-               } else {
-                       $updates['asOfTime'] = microtime( true );
-               }
-
-               $updates['epoch'] = $status['epoch'] ?: microtime( true );
-
-               $bcache->setStatus( $virtualKey, $updates );
-
-               return $updates;
-       }
-}
index 2cee726..19277f1 100644 (file)
@@ -181,14 +181,12 @@ class EnhancedChangesList extends ChangesList {
                $isnew = false;
                $allBots = true;
                $allMinors = true;
-               $curId = $currentRevision = 0;
+               $curId = 0;
                # Some catalyst variables...
                $namehidden = true;
                $allLogs = true;
-               $oldid = '';
                $RCShowChangedSize = $this->getConfig()->get( 'RCShowChangedSize' );
                foreach ( $block as $rcObj ) {
-                       $oldid = $rcObj->mAttribs['rc_last_oldid'];
                        if ( $rcObj->mAttribs['rc_type'] == RC_NEW ) {
                                $isnew = true;
                        }
@@ -212,9 +210,6 @@ class EnhancedChangesList extends ChangesList {
                        if ( !$curId && $rcObj->mAttribs['rc_cur_id'] ) {
                                $curId = $rcObj->mAttribs['rc_cur_id'];
                        }
-                       if ( !$currentRevision && $rcObj->mAttribs['rc_this_oldid'] ) {
-                               $currentRevision = $rcObj->mAttribs['rc_this_oldid'];
-                       }
 
                        if ( !$rcObj->mAttribs['rc_bot'] ) {
                                $allBots = false;
@@ -275,87 +270,7 @@ class EnhancedChangesList extends ChangesList {
 
                $queryParams['curid'] = $curId;
 
-               # Changes message
-               static $nchanges = array();
-               static $sinceLastVisitMsg = array();
-
-               $n = count( $block );
-               if ( !isset( $nchanges[$n] ) ) {
-                       $nchanges[$n] = $this->msg( 'nchanges' )->numParams( $n )->escaped();
-               }
-
-               $sinceLast = 0;
-               $unvisitedOldid = null;
-               /** @var $rcObj RCCacheEntry */
-               foreach ( $block as $rcObj ) {
-                       // Same logic as below inside main foreach
-                       if ( $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched ) {
-                               $sinceLast++;
-                               $unvisitedOldid = $rcObj->mAttribs['rc_last_oldid'];
-                       }
-               }
-               if ( !isset( $sinceLastVisitMsg[$sinceLast] ) ) {
-                       $sinceLastVisitMsg[$sinceLast] =
-                               $this->msg( 'enhancedrc-since-last-visit' )->numParams( $sinceLast )->escaped();
-               }
-
-               # Total change link
-               $r .= ' ';
-               $logtext = '';
-               /** @var $block0 RecentChange */
-               $block0 = $block[0];
-               if ( !$allLogs ) {
-                       if ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) {
-                               $logtext .= $nchanges[$n];
-                       } elseif ( $isnew ) {
-                               $logtext .= $nchanges[$n];
-                       } else {
-                               $logtext .= Linker::link(
-                                       $block0->getTitle(),
-                                       $nchanges[$n],
-                                       array(),
-                                       $queryParams + array(
-                                               'diff' => $currentRevision,
-                                               'oldid' => $oldid,
-                                       ),
-                                       array( 'known', 'noclasses' )
-                               );
-                               if ( $sinceLast > 0 && $sinceLast < $n ) {
-                                       $logtext .= $this->message['pipe-separator'] . Linker::link(
-                                               $block0->getTitle(),
-                                               $sinceLastVisitMsg[$sinceLast],
-                                               array(),
-                                               $queryParams + array(
-                                                       'diff' => $currentRevision,
-                                                       'oldid' => $unvisitedOldid,
-                                               ),
-                                               array( 'known', 'noclasses' )
-                                       );
-                               }
-                       }
-               }
-
-               # History
-               if ( $allLogs ) {
-                       // don't show history link for logs
-               } elseif ( $namehidden || !$block0->getTitle()->exists() ) {
-                       $logtext .= $this->message['pipe-separator'] . $this->message['enhancedrc-history'];
-               } else {
-                       $params = $queryParams;
-                       $params['action'] = 'history';
-
-                       $logtext .= $this->message['pipe-separator'] .
-                               Linker::linkKnown(
-                                       $block0->getTitle(),
-                                       $this->message['enhancedrc-history'],
-                                       array(),
-                                       $params
-                               );
-               }
-
-               if ( $logtext !== '' ) {
-                       $r .= $this->msg( 'parentheses' )->rawParams( $logtext )->escaped();
-               }
+               $r .= $this->getLogText( $block, $queryParams, $allLogs, $isnew, $namehidden );
 
                $r .= ' <span class="mw-changeslist-separator">. .</span> ';
 
@@ -381,7 +296,7 @@ class EnhancedChangesList extends ChangesList {
                }
 
                $r .= $users;
-               $r .= $this->numberofWatchingusers( $block0->numberofWatchingusers );
+               $r .= $this->numberofWatchingusers( $block[0]->numberofWatchingusers );
                $r .= '</td></tr>';
 
                # Sub-entries
@@ -468,6 +383,114 @@ class EnhancedChangesList extends ChangesList {
                return $r;
        }
 
+       /**
+        * Generates amount of changes (linking to diff ) & link to history.
+        *
+        * @param array $block
+        * @param array $queryParams
+        * @param bool $allLogs
+        * @param bool $isnew
+        * @param bool $namehidden
+        * @return string
+        */
+       protected function getLogText( $block, $queryParams, $allLogs, $isnew, $namehidden ) {
+               # Changes message
+               static $nchanges = array();
+               static $sinceLastVisitMsg = array();
+
+               $n = count( $block );
+               if ( !isset( $nchanges[$n] ) ) {
+                       $nchanges[$n] = $this->msg( 'nchanges' )->numParams( $n )->escaped();
+               }
+
+               $sinceLast = 0;
+               $unvisitedOldid = null;
+               /** @var $rcObj RCCacheEntry */
+               foreach ( $block as $rcObj ) {
+                       // Same logic as below inside main foreach
+                       if ( $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched ) {
+                               $sinceLast++;
+                               $unvisitedOldid = $rcObj->mAttribs['rc_last_oldid'];
+                       }
+               }
+               if ( !isset( $sinceLastVisitMsg[$sinceLast] ) ) {
+                       $sinceLastVisitMsg[$sinceLast] =
+                               $this->msg( 'enhancedrc-since-last-visit' )->numParams( $sinceLast )->escaped();
+               }
+
+               $currentRevision = 0;
+               foreach ( $block as $rcObj ) {
+                       if ( !$currentRevision ) {
+                               $currentRevision = $rcObj->mAttribs['rc_this_oldid'];
+                       }
+               }
+
+               # Total change link
+               $links = array();
+               /** @var $block0 RecentChange */
+               $block0 = $block[0];
+               $last = $block[count( $block ) - 1];
+               if ( !$allLogs ) {
+                       if ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) {
+                               $links['total-changes'] = $nchanges[$n];
+                       } elseif ( $isnew ) {
+                               $links['total-changes'] = $nchanges[$n];
+                       } else {
+                               $links['total-changes'] = Linker::link(
+                                       $block0->getTitle(),
+                                       $nchanges[$n],
+                                       array(),
+                                       $queryParams + array(
+                                               'diff' => $currentRevision,
+                                               'oldid' => $last->mAttribs['rc_last_oldid'],
+                                       ),
+                                       array( 'known', 'noclasses' )
+                               );
+                               if ( $sinceLast > 0 && $sinceLast < $n ) {
+                                       $links['total-changes-since-last'] = Linker::link(
+                                                       $block0->getTitle(),
+                                                       $sinceLastVisitMsg[$sinceLast],
+                                                       array(),
+                                                       $queryParams + array(
+                                                               'diff' => $currentRevision,
+                                                               'oldid' => $unvisitedOldid,
+                                                       ),
+                                                       array( 'known', 'noclasses' )
+                                               );
+                               }
+                       }
+               }
+
+               # History
+               if ( $allLogs ) {
+                       // don't show history link for logs
+               } elseif ( $namehidden || !$block0->getTitle()->exists() ) {
+                       $links['history'] = $this->message['enhancedrc-history'];
+               } else {
+                       $params = $queryParams;
+                       $params['action'] = 'history';
+
+                       $links['history'] = Linker::linkKnown(
+                                       $block0->getTitle(),
+                                       $this->message['enhancedrc-history'],
+                                       array(),
+                                       $params
+                               );
+               }
+
+               # Allow others to alter, remove or add to these links
+               Hooks::run( 'EnhancedChangesList::getLogText',
+                       array( $this, &$links, $block ) );
+
+               if ( !$links ) {
+                       return '';
+               }
+
+               $logtext = implode( $this->message['pipe-separator'], $links );
+               $logtext = $this->msg( 'parentheses' )->rawParams( $logtext )->escaped();
+               return ' ' . $logtext;
+       }
+
        /**
         * Enhanced RC ungrouped line.
         *
index 75cd5ee..3b3ba9d 100644 (file)
@@ -25,5 +25,5 @@
  *
  * @since 1.23
  */
-class ConfigException extends MWException {
+class ConfigException extends Exception {
 }
index 816572c..6542d7d 100644 (file)
@@ -204,13 +204,13 @@ abstract class AbstractContent implements Content {
         * Returns a list of DataUpdate objects for recording information about this
         * Content in some secondary data store.
         *
-        * This default implementation calls
-        * $this->getParserOutput( $content, $title, null, null, false ),
-        * and then calls getSecondaryDataUpdates( $title, $recursive ) on the
-        * resulting ParserOutput object.
+        * This default implementation returns a LinksUpdate object and calls the
+        * SecondaryDataUpdates hook.
         *
         * Subclasses may override this to determine the secondary data updates more
         * efficiently, preferably without the need to generate a parser output object.
+        * They should however make sure to call SecondaryDataUpdates to give extensions
+        * a chance to inject additional updates.
         *
         * @since 1.21
         *
@@ -224,12 +224,19 @@ abstract class AbstractContent implements Content {
         * @see Content::getSecondaryDataUpdates()
         */
        public function getSecondaryDataUpdates( Title $title, Content $old = null,
-               $recursive = true, ParserOutput $parserOutput = null ) {
+               $recursive = true, ParserOutput $parserOutput = null
+       ) {
                if ( $parserOutput === null ) {
                        $parserOutput = $this->getParserOutput( $title, null, null, false );
                }
 
-               return $parserOutput->getSecondaryDataUpdates( $title, $recursive );
+               $updates = array(
+                       new LinksUpdate( $title, $parserOutput, $recursive )
+               );
+
+               Hooks::run( 'SecondaryDataUpdates', array( $title, $old, $recursive, $parserOutput, &$updates ) );
+
+               return $updates;
        }
 
        /**
@@ -386,7 +393,7 @@ abstract class AbstractContent implements Content {
         *
         * @see Content::prepareSave
         */
-       public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user ) {
+       public function prepareSave( WikiPage $page, $flags, $parentRevId, User $user ) {
                if ( $this->isValid() ) {
                        return Status::newGood();
                } else {
index 61b9254..8ed761f 100644 (file)
@@ -292,6 +292,9 @@ interface Content {
         * Subclasses may implement this to determine the necessary updates more
         * efficiently, or make use of information about the old content.
         *
+        * @note Implementations should call the SecondaryDataUpdates hook, like
+        *   AbstractContent does.
+        *
         * @param Title $title The context for determining the necessary updates
         * @param Content $old An optional Content object representing the
         *    previous content, i.e. the content being replaced by this Content
@@ -461,7 +464,7 @@ interface Content {
         *
         * @param WikiPage $page The page to be saved.
         * @param int $flags Bitfield for use with EDIT_XXX constants, see WikiPage::doEditContent()
-        * @param int $baseRevId The ID of the current revision
+        * @param int $parentRevId The ID of the current revision
         * @param User $user
         *
         * @return Status A status object indicating whether the content was
@@ -470,7 +473,7 @@ interface Content {
         *
         * @see WikiPage::doEditContent()
         */
-       public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user );
+       public function prepareSave( WikiPage $page, $flags, $parentRevId, User $user );
 
        /**
         * Returns a list of updates to perform when this content is deleted.
index 8c806c6..371b267 100644 (file)
@@ -626,8 +626,15 @@ abstract class ContentHandler {
        public function createDifferenceEngine( IContextSource $context, $old = 0, $new = 0,
                $rcid = 0, //FIXME: Deprecated, no longer used
                $refreshCache = false, $unhide = false ) {
-               $diffEngineClass = $this->getDiffEngineClass();
 
+               // hook: get difference engine
+               $differenceEngine = null;
+               if ( !wfRunHooks( 'GetDifferenceEngine',
+                       array( $context, $old, $new, $refreshCache, $unhide, &$differenceEngine )
+               ) ) {
+                       return $differenceEngine;
+               }
+               $diffEngineClass = $this->getDiffEngineClass();
                return new $diffEngineClass( $context, $old, $new, $rcid, $refreshCache, $unhide );
        }
 
index 1d9ee33..bf3a25b 100644 (file)
@@ -68,7 +68,7 @@ class JsonContent extends TextContent {
         * @return string
         */
        public function beautifyJSON() {
-               return FormatJson::encode( $this->getData()->getValue(), true );
+               return FormatJson::encode( $this->getData()->getValue(), true, FormatJson::UTF8_OK );
        }
 
        /**
index 076504e..d526d84 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Request-dependant objects containers.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -17,8 +15,6 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
- * @since 1.18
- *
  * @author Happy-melon
  * @file
  */
@@ -26,6 +22,8 @@
 /**
  * The simplest way of implementing IContextSource is to hold a RequestContext as a
  * member variable and provide accessors to it.
+ *
+ * @since 1.18
  */
 abstract class ContextSource implements IContextSource {
        /**
@@ -154,6 +152,17 @@ abstract class ContextSource implements IContextSource {
                return $this->getContext()->getSkin();
        }
 
+       /**
+        * Get the Stats object
+        *
+        * @since 1.25
+        * @return BufferingStatsdDataFactory
+        */
+       public function getStats() {
+               return $this->getContext()->getStats();
+       }
+
+
        /**
         * Get a Message object with context set
         * Parameters are the same as wfMessage()
index b8966f0..00323ca 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Request-dependant objects containers.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -17,8 +15,6 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
- * @since 1.19
- *
  * @author Daniel Friesen
  * @file
  */
@@ -28,6 +24,7 @@
  * but allow individual pieces of context to be changed locally
  * eg: A ContextSource that can inherit from the main RequestContext but have
  *     a different Title instance set on it.
+ * @since 1.19
  */
 class DerivativeContext extends ContextSource {
        /**
@@ -100,6 +97,19 @@ class DerivativeContext extends ContextSource {
                }
        }
 
+       /**
+        * Get the stats object
+        *
+        * @return BufferingStatsdDataFactory
+        */
+       public function getStats() {
+               if ( !is_null( $this->stats ) ) {
+                       return $this->stats;
+               } else {
+                       return $this->getContext()->getStats();
+               }
+       }
+
        /**
         * Set the WebRequest object
         *
index f718103..713c5cb 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Request-dependant objects containers.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  */
 
 /**
- * Interface for objects which can provide a context on request.
+ * Interface for objects which can provide a MediaWiki context on request
+ *
+ * Context objects contain request-dependent objects that manage the core
+ * web request/response logic for essentially all requests to MediaWiki.
+ * The contained objects include:
+ *   a) Key objects that depend (for construction/loading) on the HTTP request
+ *   b) Key objects used for response building and PHP session state control
+ *   c) Performance metric deltas accumulated from request execution
+ *   d) The site configuration object
+ * All of the objects are useful for the vast majority of MediaWiki requests.
+ * The site configuration object is included on grounds of extreme
+ * utility, even though it should not actually depend on the web request.
+ *
+ * More specifically, the scope of the context includes:
+ *   a) Objects that represent the HTTP request/response and PHP session state
+ *   b) Object representing the MediaWiki user (as determined by the HTTP request)
+ *   c) Primary MediaWiki output builder objects (OutputPage, user skin object)
+ *   d) The language object for the user/request
+ *   e) The title and wiki page objects requested via URL (if any)
+ *   f) Performance metric deltas accumulated from request execution
+ *   g) The site configuration object
+ *
+ * This class is not intended as a service-locator nor a service singleton.
+ * Objects that only depend on site configuration do not belong here (aside
+ * from Config itself). Objects that represent persistent data stores do not
+ * belong here either. Session state changes should only be propagated on
+ * shutdown by separate persistence handler objects, for example.
  */
 interface IContextSource {
        /**
@@ -99,6 +123,14 @@ interface IContextSource {
         */
        public function getConfig();
 
+       /**
+        * Get the stats object
+        *
+        * @since 1.25
+        * @return BufferingStatsdDataFactory
+        */
+       public function getStats();
+
        /**
         * Get a Message object with context set
         *
index 89ccd0b..4e790c0 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Request-dependant objects containers.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -63,6 +61,11 @@ class RequestContext implements IContextSource {
         */
        private $skin;
 
+       /**
+        * @var StatsdDataFactory
+        */
+       private $stats;
+
        /**
         * @var Config
         */
@@ -120,6 +123,22 @@ class RequestContext implements IContextSource {
                return $this->request;
        }
 
+       /**
+        * Get the Stats object
+        *
+        * @return BufferingStatsdDataFactory
+        */
+       public function getStats() {
+               if ( $this->stats === null ) {
+                       $config = $this->getConfig();
+                       $prefix = $config->has( 'StatsdMetricPrefix' )
+                               ? rtrim( $config->get( 'StatsdMetricPrefix' ), '.' )
+                               : 'MediaWiki';
+                       $this->stats = new BufferingStatsdDataFactory( $prefix );
+               }
+               return $this->stats;
+       }
+
        /**
         * Set the Title object
         *
index 8fa10a6..511edf8 100644 (file)
@@ -153,6 +153,9 @@ abstract class DatabaseBase implements IDatabase {
         */
        protected $allViews = null;
 
+       /** @var TransactionProfiler */
+       protected $trxProfiler;
+
        /**
         * A string describing the current software version, and possibly
         * other details in a user-friendly way. Will be listed on Special:Version, etc.
@@ -345,6 +348,15 @@ abstract class DatabaseBase implements IDatabase {
        public function setFakeMaster( $enabled = true ) {
        }
 
+       /**
+        * @return TransactionProfiler
+        */
+       protected function getTransactionProfiler() {
+               return $this->trxProfiler
+                       ? $this->trxProfiler
+                       : Profiler::instance()->getTransactionProfiler();
+       }
+
        /**
         * Returns true if this database supports (and uses) cascading deletes
         *
@@ -753,32 +765,19 @@ abstract class DatabaseBase implements IDatabase {
         *
         * @param array $params Parameters passed from DatabaseBase::factory()
         */
-       function __construct( $params = null ) {
+       function __construct( array $params ) {
                global $wgDBprefix, $wgDBmwschema, $wgCommandLineMode, $wgDebugDBTransactions;
 
                $this->mTrxAtomicLevels = new SplStack;
 
-               if ( is_array( $params ) ) { // MW 1.22
-                       $server = $params['host'];
-                       $user = $params['user'];
-                       $password = $params['password'];
-                       $dbName = $params['dbname'];
-                       $flags = $params['flags'];
-                       $tablePrefix = $params['tablePrefix'];
-                       $schema = $params['schema'];
-                       $foreign = $params['foreign'];
-               } else { // legacy calling pattern
-                       wfDeprecated( __METHOD__ . " method called without parameter array.", "1.23" );
-                       $args = func_get_args();
-                       $server = isset( $args[0] ) ? $args[0] : false;
-                       $user = isset( $args[1] ) ? $args[1] : false;
-                       $password = isset( $args[2] ) ? $args[2] : false;
-                       $dbName = isset( $args[3] ) ? $args[3] : false;
-                       $flags = isset( $args[4] ) ? $args[4] : 0;
-                       $tablePrefix = isset( $args[5] ) ? $args[5] : 'get from global';
-                       $schema = 'get from global';
-                       $foreign = isset( $args[6] ) ? $args[6] : false;
-               }
+               $server = $params['host'];
+               $user = $params['user'];
+               $password = $params['password'];
+               $dbName = $params['dbname'];
+               $flags = $params['flags'];
+               $tablePrefix = $params['tablePrefix'];
+               $schema = $params['schema'];
+               $foreign = $params['foreign'];
 
                $this->mFlags = $flags;
                if ( $this->mFlags & DBO_DEFAULT ) {
@@ -811,13 +810,13 @@ abstract class DatabaseBase implements IDatabase {
 
                $this->mForeign = $foreign;
 
+               if ( isset( $params['trxProfiler'] ) ) {
+                       $this->trxProfiler = $params['trxProfiler']; // override
+               }
+
                if ( $user ) {
                        $this->open( $server, $user, $password, $dbName );
                }
-
-               $isMaster = !is_null( $this->getLBInfo( 'master' ) );
-               $trxProf = Profiler::instance()->getTransactionProfiler();
-               $trxProf->recordConnection( $this->mServer, $this->mDBname, $isMaster );
        }
 
        /**
@@ -902,18 +901,17 @@ abstract class DatabaseBase implements IDatabase {
 
                $class = 'Database' . ucfirst( $driver );
                if ( class_exists( $class ) && is_subclass_of( $class, 'DatabaseBase' ) ) {
-                       $params = array(
-                               'host' => isset( $p['host'] ) ? $p['host'] : false,
-                               'user' => isset( $p['user'] ) ? $p['user'] : false,
-                               'password' => isset( $p['password'] ) ? $p['password'] : false,
-                               'dbname' => isset( $p['dbname'] ) ? $p['dbname'] : false,
-                               'flags' => isset( $p['flags'] ) ? $p['flags'] : 0,
-                               'tablePrefix' => isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global',
-                               'schema' => isset( $p['schema'] ) ? $p['schema'] : $defaultSchemas[$dbType],
-                               'foreign' => isset( $p['foreign'] ) ? $p['foreign'] : false
-                       );
-
-                       return new $class( $params );
+                       // Resolve some defaults for b/c
+                       $p['host'] = isset( $p['host'] ) ? $p['host'] : false;
+                       $p['user'] = isset( $p['user'] ) ? $p['user'] : false;
+                       $p['password'] = isset( $p['password'] ) ? $p['password'] : false;
+                       $p['dbname'] = isset( $p['dbname'] ) ? $p['dbname'] : false;
+                       $p['flags'] = isset( $p['flags'] ) ? $p['flags'] : 0;
+                       $p['tablePrefix'] = isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global';
+                       $p['schema'] = isset( $p['schema'] ) ? $p['schema'] : $defaultSchemas[$dbType];
+                       $p['foreign'] = isset( $p['foreign'] ) ? $p['foreign'] : false;
+
+                       return new $class( $p );
                } else {
                        return null;
                }
@@ -1117,28 +1115,25 @@ abstract class DatabaseBase implements IDatabase {
                # Keep track of whether the transaction has write queries pending
                if ( $this->mTrxLevel && !$this->mTrxDoneWrites && $isWriteQuery ) {
                        $this->mTrxDoneWrites = true;
-                       Profiler::instance()->getTransactionProfiler()->transactionWritingIn(
+                       $this->getTransactionProfiler()->transactionWritingIn(
                                $this->mServer, $this->mDBname, $this->mTrxShortId );
                }
 
-               $queryProf = '';
-               $totalProf = '';
                $isMaster = !is_null( $this->getLBInfo( 'master' ) );
+               # generalizeSQL will probably cut down the query to reasonable
+               # logging size most of the time. The substr is really just a sanity check.
+               if ( $isMaster ) {
+                       $queryProf = 'query-m: ' . substr( DatabaseBase::generalizeSQL( $sql ), 0, 255 );
+                       $totalProf = 'DatabaseBase::query-master';
+               } else {
+                       $queryProf = 'query: ' . substr( DatabaseBase::generalizeSQL( $sql ), 0, 255 );
+                       $totalProf = 'DatabaseBase::query';
+               }
+               # Include query transaction state
+               $queryProf .= $this->mTrxShortId ? " [TRX#{$this->mTrxShortId}]" : "";
 
                $profiler = Profiler::instance();
                if ( !$profiler instanceof ProfilerStub ) {
-                       # generalizeSQL will probably cut down the query to reasonable
-                       # logging size most of the time. The substr is really just a sanity check.
-                       if ( $isMaster ) {
-                               $queryProf = 'query-m: ' . substr( DatabaseBase::generalizeSQL( $sql ), 0, 255 );
-                               $totalProf = 'DatabaseBase::query-master';
-                       } else {
-                               $queryProf = 'query: ' . substr( DatabaseBase::generalizeSQL( $sql ), 0, 255 );
-                               $totalProf = 'DatabaseBase::query';
-                       }
-                       # Include query transaction state
-                       $queryProf .= $this->mTrxShortId ? " [TRX#{$this->mTrxShortId}]" : "";
-
                        $totalProfSection = $profiler->scopedProfileIn( $totalProf );
                        $queryProfSection = $profiler->scopedProfileIn( $queryProf );
                }
@@ -1162,22 +1157,12 @@ abstract class DatabaseBase implements IDatabase {
                        throw new DBUnexpectedError( $this, "DB connection was already closed." );
                }
 
-               # Log the query time and feed it into the DB trx profiler
-               if ( $queryProf != '' ) {
-                       $that = $this;
-                       $queryStartTime = microtime( true );
-                       $queryProfile = new ScopedCallback(
-                               function () use ( $that, $queryStartTime, $queryProf, $isWriteQuery ) {
-                                       $n = $that->affectedRows();
-                                       $trxProf = Profiler::instance()->getTransactionProfiler();
-                                       $trxProf->recordQueryCompletion(
-                                               $queryProf, $queryStartTime, $isWriteQuery, $n );
-                               }
-                       );
-               }
-
                # Do the query and handle errors
+               $startTime = microtime( true );
                $ret = $this->doQuery( $commentedSql );
+               # Log the query time and feed it into the DB trx profiler
+               $this->getTransactionProfiler()->recordQueryCompletion(
+                       $queryProf, $startTime, $isWriteQuery, $this->affectedRows() );
 
                MWDebug::queryTime( $queryId );
 
@@ -1204,7 +1189,11 @@ abstract class DatabaseBase implements IDatabase {
                                        $this->reportQueryError( $lastError, $lastErrno, $sql, $fname, $tempIgnore );
                                } else {
                                        # Should be safe to silently retry (no trx and thus no callbacks)
+                                       $startTime = microtime( true );
                                        $ret = $this->doQuery( $commentedSql );
+                                       # Log the query time and feed it into the DB trx profiler
+                                       $this->getTransactionProfiler()->recordQueryCompletion(
+                                               $queryProf, $startTime, $isWriteQuery, $this->affectedRows() );
                                }
                        } else {
                                wfDebug( "Failed\n" );
@@ -1212,7 +1201,8 @@ abstract class DatabaseBase implements IDatabase {
                }
 
                if ( false === $ret ) {
-                       $this->reportQueryError( $this->lastError(), $this->lastErrno(), $sql, $fname, $tempIgnore );
+                       $this->reportQueryError(
+                               $this->lastError(), $this->lastErrno(), $sql, $fname, $tempIgnore );
                }
 
                $res = $this->resultObject( $ret );
@@ -1236,13 +1226,10 @@ abstract class DatabaseBase implements IDatabase {
         * @throws DBQueryError
         */
        public function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
-               # Ignore errors during error handling to avoid infinite recursion
-               $ignore = $this->ignoreErrors( true );
                ++$this->mErrorCount;
 
-               if ( $ignore || $tempIgnore ) {
+               if ( $this->ignoreErrors() || $tempIgnore ) {
                        wfDebug( "SQL ERROR (ignored): $error\n" );
-                       $this->ignoreErrors( $ignore );
                } else {
                        $sql1line = mb_substr( str_replace( "\n", "\\n", $sql ), 0, 5 * 1024 );
                        wfLogDBError(
@@ -1646,9 +1633,10 @@ abstract class DatabaseBase implements IDatabase {
         *     - If the value of such an array element is a scalar (such as a
         *       string), it will be treated as data and thus quoted appropriately.
         *       If it is null, an IS NULL clause will be added.
-        *     - If the value is an array, an IN(...) clause will be constructed,
-        *       such that the field name may match any of the elements in the
-        *       array. The elements of the array will be quoted.
+        *     - If the value is an array, an IN (...) clause will be constructed
+        *       from its non-null elements, and an IS NULL clause will be added
+        *       if null is present, such that the field may match any of the
+        *       elements in the array. The non-null elements will be quoted.
         *
         * Note that expressions are often DBMS-dependent in their syntax.
         * DBMS-independent wrappers are provided for constructing several types of
@@ -2687,10 +2675,13 @@ abstract class DatabaseBase implements IDatabase {
        /**
         * Adds quotes and backslashes.
         *
-        * @param string $s
+        * @param string|Blob $s
         * @return string
         */
        public function addQuotes( $s ) {
+               if ( $s instanceof Blob ) {
+                       $s = $s->fetch();
+               }
                if ( $s === null ) {
                        return 'NULL';
                } else {
@@ -3330,41 +3321,40 @@ abstract class DatabaseBase implements IDatabase {
         * @return bool
         */
        public function deadlockLoop() {
-               $this->begin( __METHOD__ );
                $args = func_get_args();
                $function = array_shift( $args );
-               $oldIgnore = $this->ignoreErrors( true );
                $tries = self::DEADLOCK_TRIES;
-
                if ( is_array( $function ) ) {
                        $fname = $function[0];
                } else {
                        $fname = $function;
                }
 
-               do {
-                       $retVal = call_user_func_array( $function, $args );
-                       $error = $this->lastError();
-                       $errno = $this->lastErrno();
-                       $sql = $this->lastQuery();
+               $this->begin( __METHOD__ );
 
-                       if ( $errno ) {
+               $e = null;
+               do {
+                       try {
+                               $retVal = call_user_func_array( $function, $args );
+                               break;
+                       } catch ( DBQueryError $e ) {
+                               $error = $this->lastError();
+                               $errno = $this->lastErrno();
+                               $sql = $this->lastQuery();
                                if ( $this->wasDeadlock() ) {
-                                       # Retry
+                                       // Retry after a randomized delay
                                        usleep( mt_rand( self::DEADLOCK_DELAY_MIN, self::DEADLOCK_DELAY_MAX ) );
                                } else {
-                                       $this->reportQueryError( $error, $errno, $sql, $fname );
+                                       // Throw the error back up
+                                       throw $e;
                                }
                        }
-               } while ( $this->wasDeadlock() && --$tries > 0 );
-
-               $this->ignoreErrors( $oldIgnore );
+               } while ( --$tries > 0 );
 
                if ( $tries <= 0 ) {
+                       // Too many deadlocks; give up
                        $this->rollback( __METHOD__ );
-                       $this->reportQueryError( $error, $errno, $sql, $fname );
-
-                       return false;
+                       throw $e;
                } else {
                        $this->commit( __METHOD__ );
 
@@ -3535,7 +3525,11 @@ abstract class DatabaseBase implements IDatabase {
                if ( !$this->mTrxLevel ) {
                        $this->begin( $fname );
                        $this->mTrxAutomatic = true;
-                       $this->mTrxAutomaticAtomic = true;
+                       // If DBO_TRX is set, a series of startAtomic/endAtomic pairs will result
+                       // in all changes being in one transaction to keep requests transactional.
+                       if ( !$this->getFlag( DBO_TRX ) ) {
+                               $this->mTrxAutomaticAtomic = true;
+                       }
                }
 
                $this->mTrxAtomicLevels->push( $fname );
@@ -3617,7 +3611,8 @@ abstract class DatabaseBase implements IDatabase {
                        $this->runOnTransactionPreCommitCallbacks();
                        $this->doCommit( $fname );
                        if ( $this->mTrxDoneWrites ) {
-                               Profiler::instance()->getTransactionProfiler()->transactionWritingOut(
+                               $this->mDoneWrites = microtime( true );
+                               $this->getTransactionProfiler()->transactionWritingOut(
                                        $this->mServer, $this->mDBname, $this->mTrxShortId );
                        }
                        $this->runOnTransactionIdleCallbacks();
@@ -3697,7 +3692,8 @@ abstract class DatabaseBase implements IDatabase {
                $this->runOnTransactionPreCommitCallbacks();
                $this->doCommit( $fname );
                if ( $this->mTrxDoneWrites ) {
-                       Profiler::instance()->getTransactionProfiler()->transactionWritingOut(
+                       $this->mDoneWrites = microtime( true );
+                       $this->getTransactionProfiler()->transactionWritingOut(
                                $this->mServer, $this->mDBname, $this->mTrxShortId );
                }
                $this->runOnTransactionIdleCallbacks();
@@ -3756,7 +3752,7 @@ abstract class DatabaseBase implements IDatabase {
                $this->mTrxPreCommitCallbacks = array(); // cancel
                $this->mTrxAtomicLevels = new SplStack;
                if ( $this->mTrxDoneWrites ) {
-                       Profiler::instance()->getTransactionProfiler()->transactionWritingOut(
+                       $this->getTransactionProfiler()->transactionWritingOut(
                                $this->mServer, $this->mDBname, $this->mTrxShortId );
                }
        }
@@ -3954,10 +3950,13 @@ abstract class DatabaseBase implements IDatabase {
         * in result objects. Pass the object through this function to return the
         * original string.
         *
-        * @param string $b
+        * @param string|Blob $b
         * @return string
         */
        public function decodeBlob( $b ) {
+               if ( $b instanceof Blob ) {
+                       $b = $b->fetch();
+               }
                return $b;
        }
 
index d62769c..2b8f395 100644 (file)
@@ -812,64 +812,27 @@ class DatabaseMssql extends DatabaseBase {
                                'DatabaseBase::makeList called with incorrect parameters' );
                }
 
-               $first = true;
-               $list = '';
+               if ( $mode != LIST_NAMES ) {
+                       // In MS SQL, values need to be specially encoded when they are
+                       // inserted into binary fields. Perform this necessary encoding
+                       // for the specified set of columns.
+                       foreach ( array_keys( $a ) as $field ) {
+                               if ( !isset( $binaryColumns[$field] ) ) {
+                                       continue;
+                               }
 
-               foreach ( $a as $field => $value ) {
-                       if ( $mode != LIST_NAMES && isset( $binaryColumns[$field] ) ) {
-                               if ( is_array( $value ) ) {
-                                       foreach ( $value as &$v ) {
+                               if ( is_array( $a[$field] ) ) {
+                                       foreach ( $a[$field] as &$v ) {
                                                $v = new MssqlBlob( $v );
                                        }
+                                       unset( $v );
                                } else {
-                                       $value = new MssqlBlob( $value );
-                               }
-                       }
-
-                       if ( !$first ) {
-                               if ( $mode == LIST_AND ) {
-                                       $list .= ' AND ';
-                               } elseif ( $mode == LIST_OR ) {
-                                       $list .= ' OR ';
-                               } else {
-                                       $list .= ',';
+                                       $a[$field] = new MssqlBlob( $a[$field] );
                                }
-                       } else {
-                               $first = false;
-                       }
-
-                       if ( ( $mode == LIST_AND || $mode == LIST_OR ) && is_numeric( $field ) ) {
-                               $list .= "($value)";
-                       } elseif ( ( $mode == LIST_SET ) && is_numeric( $field ) ) {
-                               $list .= "$value";
-                       } elseif ( ( $mode == LIST_AND || $mode == LIST_OR ) && is_array( $value ) ) {
-                               if ( count( $value ) == 0 ) {
-                                       throw new MWException( __METHOD__ . ": empty input for field $field" );
-                               } elseif ( count( $value ) == 1 ) {
-                                       // Special-case single values, as IN isn't terribly efficient
-                                       // Don't necessarily assume the single key is 0; we don't
-                                       // enforce linear numeric ordering on other arrays here.
-                                       $value = array_values( $value );
-                                       $list .= $field . " = " . $this->addQuotes( $value[0] );
-                               } else {
-                                       $list .= $field . " IN (" . $this->makeList( $value ) . ") ";
-                               }
-                       } elseif ( $value === null ) {
-                               if ( $mode == LIST_AND || $mode == LIST_OR ) {
-                                       $list .= "$field IS ";
-                               } elseif ( $mode == LIST_SET ) {
-                                       $list .= "$field = ";
-                               }
-                               $list .= 'NULL';
-                       } else {
-                               if ( $mode == LIST_AND || $mode == LIST_OR || $mode == LIST_SET ) {
-                                       $list .= "$field = ";
-                               }
-                               $list .= $mode == LIST_NAMES ? $value : $this->addQuotes( $value );
                        }
                }
 
-               return $list;
+               return parent::makeList( $a, $mode );
        }
 
        /**
@@ -1131,7 +1094,7 @@ class DatabaseMssql extends DatabaseBase {
        }
 
        /**
-        * @param string $s
+        * @param string|Blob $s
         * @return string
         */
        public function addQuotes( $s ) {
index 458b286..aac95a8 100644 (file)
@@ -1188,7 +1188,8 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
  */
 class MySQLField implements Field {
        private $name, $tablename, $default, $max_length, $nullable,
-               $is_pk, $is_unique, $is_multiple, $is_key, $type, $binary;
+               $is_pk, $is_unique, $is_multiple, $is_key, $type, $binary,
+               $is_numeric, $is_blob, $is_unsigned, $is_zerofill;
 
        function __construct( $info ) {
                $this->name = $info->name;
@@ -1202,6 +1203,10 @@ class MySQLField implements Field {
                $this->is_key = ( $this->is_pk || $this->is_unique || $this->is_multiple );
                $this->type = $info->type;
                $this->binary = isset( $info->binary ) ? $info->binary : false;
+               $this->is_numeric = isset( $info->numeric ) ? $info->numeric : false;
+               $this->is_blob = isset( $info->blob ) ? $info->blob : false;
+               $this->is_unsigned = isset( $info->unsigned ) ? $info->unsigned : false;
+               $this->is_zerofill = isset( $info->zerofill ) ? $info->zerofill : false;
        }
 
        /**
@@ -1250,9 +1255,40 @@ class MySQLField implements Field {
                return $this->is_multiple;
        }
 
+       /**
+        * @return bool
+        */
        function isBinary() {
                return $this->binary;
        }
+
+       /**
+        * @return bool
+        */
+       function isNumeric() {
+               return $this->is_numeric;
+       }
+
+       /**
+        * @return bool
+        */
+       function isBlob() {
+               return $this->is_blob;
+       }
+
+       /**
+        * @return bool
+        */
+       function isUnsigned() {
+               return $this->is_unsigned;
+       }
+
+       /**
+        * @return bool
+        */
+       function isZerofill() {
+               return $this->is_zerofill;
+       }
 }
 
 class MySQLMasterPos implements DBMasterPos {
index e9c4b39..ad12e19 100644 (file)
@@ -224,11 +224,18 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         */
        protected function mysqlFetchField( $res, $n ) {
                $field = $res->fetch_field_direct( $n );
+
+               // Add missing properties to result (using flags property)
+               // which will be part of function mysql-fetch-field for backward compatibility
                $field->not_null = $field->flags & MYSQLI_NOT_NULL_FLAG;
                $field->primary_key = $field->flags & MYSQLI_PRI_KEY_FLAG;
                $field->unique_key = $field->flags & MYSQLI_UNIQUE_KEY_FLAG;
                $field->multiple_key = $field->flags & MYSQLI_MULTIPLE_KEY_FLAG;
                $field->binary = $field->flags & MYSQLI_BINARY_FLAG;
+               $field->numeric = $field->flags & MYSQLI_NUM_FLAG;
+               $field->blob = $field->flags & MYSQLI_BLOB_FLAG;
+               $field->unsigned = $field->flags & MYSQLI_UNSIGNED_FLAG;
+               $field->zerofill = $field->flags & MYSQLI_ZEROFILL_FLAG;
 
                return $field;
        }
index e150206..9b00fbd 100644 (file)
@@ -207,23 +207,9 @@ class DatabaseOracle extends DatabaseBase {
        /** @var array */
        private $mFieldInfoCache = array();
 
-       function __construct( $p = null ) {
+       function __construct( array $p ) {
                global $wgDBprefix;
 
-               if ( !is_array( $p ) ) { // legacy calling pattern
-                       wfDeprecated( __METHOD__ . " method called without parameter array.", "1.22" );
-                       $args = func_get_args();
-                       $p = array(
-                               'host' => isset( $args[0] ) ? $args[0] : false,
-                               'user' => isset( $args[1] ) ? $args[1] : false,
-                               'password' => isset( $args[2] ) ? $args[2] : false,
-                               'dbname' => isset( $args[3] ) ? $args[3] : false,
-                               'flags' => isset( $args[4] ) ? $args[4] : 0,
-                               'tablePrefix' => isset( $args[5] ) ? $args[5] : 'get from global',
-                               'schema' => 'get from global',
-                               'foreign' => isset( $args[6] ) ? $args[6] : false
-                       );
-               }
                if ( $p['tablePrefix'] == 'get from global' ) {
                        $p['tablePrefix'] = $wgDBprefix;
                }
index abf26e0..9287f7a 100644 (file)
@@ -530,10 +530,12 @@ class DatabasePostgres extends DatabaseBase {
                                return;
                        }
                }
-               /* Transaction stays in the ERROR state until rolledback */
+               /* Transaction stays in the ERROR state until rolled back */
                if ( $this->mTrxLevel ) {
+                       $ignore = $this->ignoreErrors( true );
                        $this->rollback( __METHOD__ );
-               };
+                       $this->ignoreErrors( $ignore );
+               }
                parent::reportQueryError( $error, $errno, $sql, $fname, false );
        }
 
@@ -1495,12 +1497,14 @@ SQL;
         * @return Blob
         */
        function encodeBlob( $b ) {
-               return new Blob( pg_escape_bytea( $this->mConn, $b ) );
+               return new PostgresBlob( pg_escape_bytea( $b ) );
        }
 
        function decodeBlob( $b ) {
-               if ( $b instanceof Blob ) {
+               if ( $b instanceof PostgresBlob ) {
                        $b = $b->fetch();
+               } elseif ( $b instanceof Blob ) {
+                       return $b->fetch();
                }
 
                return pg_unescape_bytea( $b );
@@ -1520,7 +1524,12 @@ SQL;
                } elseif ( is_bool( $s ) ) {
                        return intval( $s );
                } elseif ( $s instanceof Blob ) {
-                       return "'" . $s->fetch( $s ) . "'";
+                       if ( $s instanceof PostgresBlob ) {
+                               $s = $s->fetch();
+                       } else {
+                               $s = pg_escape_bytea( $this->mConn, $s->fetch() );
+                       }
+                       return "'$s'";
                }
 
                return "'" . pg_escape_string( $this->mConn, $s ) . "'";
@@ -1692,3 +1701,5 @@ SQL;
                return wfBaseConvert( substr( sha1( $lockName ), 0, 15 ), 16, 10 );
        }
 } // end DatabasePostgres class
+
+class PostgresBlob extends Blob {}
index 9257ffe..ed86bab 100644 (file)
@@ -29,8 +29,14 @@ class DatabaseSqlite extends DatabaseBase {
        /** @var bool Whether full text is enabled */
        private static $fulltextEnabled = null;
 
+       /** @var string Directory */
+       protected $dbDir;
+
        /** @var string File name for SQLite database file */
-       public $mDatabaseFile;
+       protected $dbPath;
+
+       /** @var string Transaction mode */
+       protected $trxMode;
 
        /** @var int The number of rows affected as an integer */
        protected $mAffectedRows;
@@ -44,35 +50,63 @@ class DatabaseSqlite extends DatabaseBase {
        /** @var FSLockManager (hopefully on the same server as the DB) */
        protected $lockMgr;
 
-       function __construct( $p = null ) {
+       /**
+        * Additional params include:
+        *   - dbDirectory : directory containing the DB and the lock file directory
+        *                   [defaults to $wgSQLiteDataDir]
+        *   - dbFilePath  : use this to force the path of the DB file
+        *   - trxMode     : one of (deferred, immediate, exclusive)
+        * @param array $p
+        */
+       function __construct( array $p ) {
                global $wgSharedDB, $wgSQLiteDataDir;
 
-               if ( !is_array( $p ) ) { // legacy calling pattern
-                       wfDeprecated( __METHOD__ . " method called without parameter array.", "1.22" );
-                       $args = func_get_args();
-                       $p = array(
-                               'host' => isset( $args[0] ) ? $args[0] : false,
-                               'user' => isset( $args[1] ) ? $args[1] : false,
-                               'password' => isset( $args[2] ) ? $args[2] : false,
-                               'dbname' => isset( $args[3] ) ? $args[3] : false,
-                               'flags' => isset( $args[4] ) ? $args[4] : 0,
-                               'tablePrefix' => isset( $args[5] ) ? $args[5] : 'get from global',
-                               'schema' => 'get from global',
-                               'foreign' => isset( $args[6] ) ? $args[6] : false
-                       );
-               }
-               $this->mDBname = $p['dbname'];
-               parent::__construct( $p );
-               // parent doesn't open when $user is false, but we can work with $dbName
-               if ( $p['dbname'] && !$this->isOpen() ) {
-                       if ( $this->open( $p['host'], $p['user'], $p['password'], $p['dbname'] ) ) {
-                               if ( $wgSharedDB ) {
-                                       $this->attachDatabase( $wgSharedDB );
+               $this->dbDir = isset( $p['dbDirectory'] ) ? $p['dbDirectory'] : $wgSQLiteDataDir;
+
+               if ( isset( $p['dbFilePath'] ) ) {
+                       $this->mFlags = isset( $p['flags'] ) ? $p['flags'] : 0;
+                       // Standalone .sqlite file mode
+                       $this->openFile( $p['dbFilePath'] );
+                       // @FIXME: clean up base constructor so this can call super instead
+                       $this->mTrxAtomicLevels = new SplStack;
+               } else {
+                       $this->mDBname = $p['dbname'];
+                       // Stock wiki mode using standard file names per DB
+                       parent::__construct( $p );
+                       // parent doesn't open when $user is false, but we can work with $dbName
+                       if ( $p['dbname'] && !$this->isOpen() ) {
+                               if ( $this->open( $p['host'], $p['user'], $p['password'], $p['dbname'] ) ) {
+                                       if ( $wgSharedDB ) {
+                                               $this->attachDatabase( $wgSharedDB );
+                                       }
                                }
                        }
                }
 
-               $this->lockMgr = new FSLockManager( array( 'lockDirectory' => "$wgSQLiteDataDir/locks" ) );
+               $this->trxMode = isset( $p['trxMode'] ) ? strtoupper( $p['trxMode'] ) : null;
+               if ( $this->trxMode &&
+                       !in_array( $this->trxMode, array( 'DEFERRED', 'IMMEDIATE', 'EXCLUSIVE' ) )
+               ) {
+                       $this->trxMode = null;
+                       wfWarn( "Invalid SQLite transaction mode provided." );
+               }
+
+               $this->lockMgr = new FSLockManager( array( 'lockDirectory' => "{$this->dbDir}/locks" ) );
+       }
+
+       /**
+        * @param string $filename
+        * @param array $p Options map; supports:
+        *   - flags       : (same as __construct counterpart)
+        *   - trxMode     : (same as __construct counterpart)
+        *   - dbDirectory : (same as __construct counterpart)
+        * @return DatabaseSqlite
+        * @since 1.25
+        */
+       public static function newStandaloneInstance( $filename, array $p = array() ) {
+               $p['dbFilePath'] = $filename;
+
+               return new self( $p );
        }
 
        /**
@@ -103,10 +137,8 @@ class DatabaseSqlite extends DatabaseBase {
         * @return PDO
         */
        function open( $server, $user, $pass, $dbName ) {
-               global $wgSQLiteDataDir;
-
                $this->close();
-               $fileName = self::generateFileName( $wgSQLiteDataDir, $dbName );
+               $fileName = self::generateFileName( $this->dbDir, $dbName );
                if ( !is_readable( $fileName ) ) {
                        $this->mConn = false;
                        throw new DBConnectionError( $this, "SQLite database not accessible" );
@@ -123,10 +155,10 @@ class DatabaseSqlite extends DatabaseBase {
         * @throws DBConnectionError
         * @return PDO|bool SQL connection or false if failed
         */
-       function openFile( $fileName ) {
+       protected function openFile( $fileName ) {
                $err = false;
 
-               $this->mDatabaseFile = $fileName;
+               $this->dbPath = $fileName;
                try {
                        if ( $this->mFlags & DBO_PERSISTENT ) {
                                $this->mConn = new PDO( "sqlite:$fileName", '', '',
@@ -144,8 +176,8 @@ class DatabaseSqlite extends DatabaseBase {
                }
 
                $this->mOpened = !!$this->mConn;
-               # set error codes only, don't raise exceptions
                if ( $this->mOpened ) {
+                       # Set error codes only, don't raise exceptions
                        $this->mConn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
                        # Enforce LIKE to be case sensitive, just like MySQL
                        $this->query( 'PRAGMA case_sensitive_like = 1' );
@@ -156,6 +188,14 @@ class DatabaseSqlite extends DatabaseBase {
                return false;
        }
 
+       /**
+        * @return string SQLite DB file path
+        * @since 1.25
+        */
+       public function getDbFilePath() {
+               return $this->dbPath;
+       }
+
        /**
         * Does not actually close the connection, just destroys the reference for GC to do its work
         * @return bool
@@ -206,8 +246,7 @@ class DatabaseSqlite extends DatabaseBase {
                $cachedResult = false;
                $table = 'dummy_search_test';
 
-               $db = new DatabaseSqliteStandalone( ':memory:' );
-
+               $db = self::newStandaloneInstance( ':memory:' );
                if ( $db->query( "CREATE VIRTUAL TABLE $table USING FTS3(dummy_field)", __METHOD__, true ) ) {
                        $cachedResult = 'FTS3';
                }
@@ -223,14 +262,13 @@ class DatabaseSqlite extends DatabaseBase {
         * @param string $name Database name to be used in queries like
         *   SELECT foo FROM dbname.table
         * @param bool|string $file Database file name. If omitted, will be generated
-        *   using $name and $wgSQLiteDataDir
+        *   using $name and configured data directory
         * @param string $fname Calling function name
         * @return ResultWrapper
         */
        function attachDatabase( $name, $file = false, $fname = __METHOD__ ) {
-               global $wgSQLiteDataDir;
                if ( !$file ) {
-                       $file = self::generateFileName( $wgSQLiteDataDir, $name );
+                       $file = self::generateFileName( $this->dbDir, $name );
                }
                $file = $this->addQuotes( $file );
 
@@ -712,37 +750,14 @@ class DatabaseSqlite extends DatabaseBase {
        }
 
        protected function doBegin( $fname = '' ) {
-               if ( $this->mTrxLevel == 1 ) {
-                       $this->commit( __METHOD__ );
-               }
-               try {
-                       $this->mConn->beginTransaction();
-               } catch ( PDOException $e ) {
-                       throw new DBUnexpectedError( $this, 'Error in BEGIN query: ' . $e->getMessage() );
+               if ( $this->trxMode ) {
+                       $this->query( "BEGIN {$this->trxMode}", $fname );
+               } else {
+                       $this->query( 'BEGIN', $fname );
                }
                $this->mTrxLevel = 1;
        }
 
-       protected function doCommit( $fname = '' ) {
-               if ( $this->mTrxLevel == 0 ) {
-                       return;
-               }
-               try {
-                       $this->mConn->commit();
-               } catch ( PDOException $e ) {
-                       throw new DBUnexpectedError( $this, 'Error in COMMIT query: ' . $e->getMessage() );
-               }
-               $this->mTrxLevel = 0;
-       }
-
-       protected function doRollback( $fname = '' ) {
-               if ( $this->mTrxLevel == 0 ) {
-                       return;
-               }
-               $this->mConn->rollBack();
-               $this->mTrxLevel = 0;
-       }
-
        /**
         * @param string $s
         * @return string
@@ -886,11 +901,9 @@ class DatabaseSqlite extends DatabaseBase {
        }
 
        public function lock( $lockName, $method, $timeout = 5 ) {
-               global $wgSQLiteDataDir;
-
-               if ( !is_dir( "$wgSQLiteDataDir/locks" ) ) { // create dir as needed
-                       if ( !is_writable( $wgSQLiteDataDir ) || !mkdir( "$wgSQLiteDataDir/locks" ) ) {
-                               throw new DBError( "Cannot create directory \"$wgSQLiteDataDir/locks\"." );
+               if ( !is_dir( "{$this->dbDir}/locks" ) ) { // create dir as needed
+                       if ( !is_writable( $this->dbDir ) || !mkdir( "{$this->dbDir}/locks" ) ) {
+                               throw new DBError( "Cannot create directory \"{$this->dbDir}/locks\"." );
                        }
                }
 
@@ -984,18 +997,6 @@ class DatabaseSqlite extends DatabaseBase {
        }
 } // end DatabaseSqlite class
 
-/**
- * This class allows simple acccess to a SQLite database independently from main database settings
- * @ingroup Database
- */
-class DatabaseSqliteStandalone extends DatabaseSqlite {
-       public function __construct( $fileName, $flags = 0 ) {
-               $this->mFlags = $flags;
-               $this->tablePrefix( null );
-               $this->openFile( $fileName );
-       }
-}
-
 /**
  * @ingroup Database
  */
index 4e5ed08..9a520ff 100644 (file)
  * @ingroup Database
  */
 
-/**
- * Utility class.
- * @ingroup Database
- */
-class DBObject {
-       public $mData;
-
-       function __construct( $data ) {
-               $this->mData = $data;
-       }
-
-       /**
-        * @return bool
-        */
-       function isLOB() {
-               return false;
-       }
-
-       function data() {
-               return $this->mData;
-       }
-}
-
 /**
  * Utility class
  * @ingroup Database
index 4c9fd32..bc17911 100644 (file)
@@ -214,7 +214,7 @@ class LoadBalancer {
         * @return bool|int|string
         */
        public function getReaderIndex( $group = false, $wiki = false ) {
-               global $wgReadOnly, $wgDBtype;
+               global $wgDBtype;
 
                # @todo FIXME: For now, only go through all this for mysql databases
                if ( $wgDBtype != 'mysql' ) {
@@ -258,7 +258,7 @@ class LoadBalancer {
                # meets our criteria
                $currentLoads = $nonErrorLoads;
                while ( count( $currentLoads ) ) {
-                       if ( $wgReadOnly || $this->mAllowLagged || $laggedSlaveMode ) {
+                       if ( $this->mAllowLagged || $laggedSlaveMode ) {
                                $i = ArrayUtils::pickRandom( $currentLoads );
                        } else {
                                $i = false;
@@ -277,8 +277,6 @@ class LoadBalancer {
                                if ( $i === false && count( $currentLoads ) != 0 ) {
                                        # All slaves lagged. Switch to read-only mode
                                        wfDebugLog( 'replication', "All slaves lagged. Switch to read-only mode" );
-                                       $wgReadOnly = 'The database has been automatically locked ' .
-                                               'while the slave database servers catch up to the master';
                                        $i = ArrayUtils::pickRandom( $currentLoads );
                                        $laggedSlaveMode = true;
                                }
@@ -328,9 +326,15 @@ class LoadBalancer {
                                        $this->mServers[$i]['slave pos'] = $conn->getSlavePos();
                                }
                        }
-                       if ( $this->mReadIndex <= 0 && $this->mLoads[$i] > 0 && $group !== false ) {
+                       if ( $this->mReadIndex <= 0 && $this->mLoads[$i] > 0 && $group === false ) {
                                $this->mReadIndex = $i;
+                               # Record if the generic reader index is in "lagged slave" mode
+                               if ( $laggedSlaveMode ) {
+                                       $this->mLaggedSlaveMode = true;
+                               }
                        }
+                       $serverName = $this->getServerName( $i );
+                       wfDebug( __METHOD__ . ": using server $serverName for group '$group'\n" );
                }
 
                return $i;
@@ -469,6 +473,9 @@ class LoadBalancer {
                        ? array( false ) // check one "group": the generic pool
                        : (array)$groups;
 
+               $masterOnly = ( $i == DB_MASTER || $i == $this->getWriterIndex() );
+               $oldConnsOpened = $this->connsOpened; // connections open now
+
                if ( $i == DB_MASTER ) {
                        $i = $this->getWriterIndex();
                } else {
@@ -476,8 +483,6 @@ class LoadBalancer {
                        foreach ( $groups as $group ) {
                                $groupIndex = $this->getReaderIndex( $group, $wiki );
                                if ( $groupIndex !== false ) {
-                                       $serverName = $this->getServerName( $groupIndex );
-                                       wfDebug( __METHOD__ . ": using server $serverName for group $group\n" );
                                        $i = $groupIndex;
                                        break;
                                }
@@ -506,6 +511,14 @@ class LoadBalancer {
                        return $this->reportConnectionError();
                }
 
+               # Profile any new connections that happen
+               if ( $this->connsOpened > $oldConnsOpened ) {
+                       $host = $conn->getServer();
+                       $dbname = $conn->getDBname();
+                       $trxProf = Profiler::instance()->getTransactionProfiler();
+                       $trxProf->recordConnection( $host, $dbname, $masterOnly );
+               }
+
                return $conn;
        }
 
@@ -967,7 +980,6 @@ class LoadBalancer {
         *  Issue COMMIT only on master, only if queries were done on connection
         */
        public function commitMasterChanges() {
-               // Always 0, but who knows.. :)
                $masterIndex = $this->getWriterIndex();
                foreach ( $this->mConns as $conns2 ) {
                        if ( empty( $conns2[$masterIndex] ) ) {
@@ -987,7 +999,8 @@ class LoadBalancer {
         * @since 1.23
         */
        public function rollbackMasterChanges() {
-               // Always 0, but who knows.. :)
+               $failedServers = array();
+
                $masterIndex = $this->getWriterIndex();
                foreach ( $this->mConns as $conns2 ) {
                        if ( empty( $conns2[$masterIndex] ) ) {
@@ -996,10 +1009,20 @@ class LoadBalancer {
                        /** @var DatabaseBase $conn */
                        foreach ( $conns2[$masterIndex] as $conn ) {
                                if ( $conn->trxLevel() && $conn->writesOrCallbacksPending() ) {
-                                       $conn->rollback( __METHOD__, 'flush' );
+                                       try {
+                                               $conn->rollback( __METHOD__, 'flush' );
+                                       } catch ( DBError $e ) {
+                                               MWExceptionHandler::logException( $e );
+                                               $failedServers[] = $conn->getServer();
+                                       }
                                }
                        }
                }
+
+               if ( $failedServers ) {
+                       throw new DBExpectedError( null, "Rollback failed on server(s) " .
+                               implode( ', ', array_unique( $failedServers ) ) );
+               }
        }
 
        /**
@@ -1011,13 +1034,11 @@ class LoadBalancer {
        }
 
        /**
-        * Determine if there are any pending changes that need to be rolled back
-        * or committed.
+        * Determine if there are pending changes in a transaction by this thread
         * @since 1.23
         * @return bool
         */
        public function hasMasterChanges() {
-               // Always 0, but who knows.. :)
                $masterIndex = $this->getWriterIndex();
                foreach ( $this->mConns as $conns2 ) {
                        if ( empty( $conns2[$masterIndex] ) ) {
@@ -1033,6 +1054,41 @@ class LoadBalancer {
                return false;
        }
 
+       /**
+        * Get the timestamp of the latest write query done by this thread
+        * @since 1.25
+        * @return float|bool UNIX timestamp or false
+        */
+       public function lastMasterChangeTimestamp() {
+               $lastTime = false;
+               $masterIndex = $this->getWriterIndex();
+               foreach ( $this->mConns as $conns2 ) {
+                       if ( empty( $conns2[$masterIndex] ) ) {
+                               continue;
+                       }
+                       /** @var DatabaseBase $conn */
+                       foreach ( $conns2[$masterIndex] as $conn ) {
+                               $lastTime = max( $lastTime, $conn->lastDoneWrites() );
+                       }
+               }
+               return $lastTime;
+       }
+
+       /**
+        * Check if this load balancer object had any recent or still
+        * pending writes issued against it by this PHP thread
+        *
+        * @param float $age How many seconds ago is "recent" [defaults to mWaitTimeout]
+        * @return bool
+        * @since 1.25
+        */
+       public function hasOrMadeRecentMasterChanges( $age = null ) {
+               $age = ( $age === null ) ? $this->mWaitTimeout : $age;
+
+               return ( $this->hasMasterChanges()
+                       || $this->lastMasterChangeTimestamp() > microtime( true ) - $age );
+       }
+
        /**
         * @param mixed $value
         * @return mixed
@@ -1042,9 +1098,12 @@ class LoadBalancer {
        }
 
        /**
-        * @return bool
+        * @return bool Whether the generic connection for reads is highly "lagged"
         */
        public function getLaggedSlaveMode() {
+               # Get a generic reader connection
+               $this->getConnection( DB_SLAVE );
+
                return $this->mLaggedSlaveMode;
        }
 
index c4c6cf3..1939e06 100644 (file)
@@ -309,12 +309,25 @@ class MWDebug {
         *
         * @since 1.19
         * @param string $str
+        * @param array $context
         */
-       public static function debugMsg( $str ) {
+       public static function debugMsg( $str, $context = array() ) {
                global $wgDebugComments, $wgShowDebug;
 
                if ( self::$enabled || $wgDebugComments || $wgShowDebug ) {
-                       self::$debug[] = rtrim( UtfNormal::cleanUp( $str ) );
+                       if ( $context ) {
+                               $prefix = '';
+                               if ( isset( $context['prefix'] ) ) {
+                                       $prefix = $context['prefix'];
+                               } elseif ( isset( $context['channel'] ) && $context['channel'] !== 'wfDebug' ) {
+                                       $prefix = "[{$context['channel']}] ";
+                               }
+                               if ( isset( $context['seconds_elapsed'] ) && isset( $context['memory_used'] ) ) {
+                                       $prefix .= "{$context['seconds_elapsed']} {$context['memory_used']}  ";
+                               }
+                               $str = $prefix . $str;
+                       }
+                       self::$debug[] = rtrim( UtfNormal\Validator::cleanUp( $str ) );
                }
        }
 
diff --git a/includes/debug/logger/Factory.php b/includes/debug/logger/Factory.php
deleted file mode 100644 (file)
index 2660b92..0000000
+++ /dev/null
@@ -1,115 +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
- */
-
-
-/**
- * PSR-3 logger instance factory.
- *
- * Creation of \Psr\Log\LoggerInterface instances is managed via the
- * MWLoggerFactory::getInstance() static method which in turn delegates to the
- * currently registered service provider.
- *
- * A service provider is any class implementing the MWLoggerSpi interface.
- * There are two possible methods of registering a service provider. The
- * MWLoggerFactory::registerProvider() static method can be called at any time
- * to change the service provider. If MWLoggerFactory::getInstance() is called
- * before any service provider has been registered, it will attempt to use the
- * $wgMWLoggerDefaultSpi global to bootstrap MWLoggerSpi registration.
- * $wgMWLoggerDefaultSpi is expected to be an array usable by
- * ObjectFactory::getObjectFromSpec() to create a class.
- *
- * @see MWLoggerSpi
- * @since 1.25
- * @author Bryan Davis <bd808@wikimedia.org>
- * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
- */
-class MWLoggerFactory {
-
-       /**
-        * Service provider.
-        * @var MWLoggerSpi $spi
-        */
-       private static $spi;
-
-
-       /**
-        * Register a service provider to create new \Psr\Log\LoggerInterface
-        * instances.
-        *
-        * @param MWLoggerSpi $provider Provider to register
-        */
-       public static function registerProvider( MWLoggerSpi $provider ) {
-               self::$spi = $provider;
-       }
-
-
-       /**
-        * Get the registered service provider.
-        *
-        * If called before any service provider has been registered, it will
-        * attempt to use the $wgMWLoggerDefaultSpi global to bootstrap
-        * MWLoggerSpi registration. $wgMWLoggerDefaultSpi is expected to be an
-        * array usable by ObjectFactory::getObjectFromSpec() to create a class.
-        *
-        * @return MWLoggerSpi
-        * @see registerProvider()
-        * @see ObjectFactory::getObjectFromSpec()
-        */
-       public static function getProvider() {
-               if ( self::$spi === null ) {
-                       global $wgMWLoggerDefaultSpi;
-                       $provider = ObjectFactory::getObjectFromSpec(
-                               $wgMWLoggerDefaultSpi
-                       );
-                       self::registerProvider( $provider );
-               }
-               return self::$spi;
-       }
-
-
-       /**
-        * Get a named logger instance from the currently configured logger factory.
-        *
-        * @param string $channel Logger channel (name)
-        * @return \Psr\Log\LoggerInterface
-        */
-       public static function getInstance( $channel ) {
-               if ( !interface_exists( '\Psr\Log\LoggerInterface' ) ) {
-                       $message = <<<TXT
-MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging library</a> to be present. This library is not embedded directly in MediaWiki's git repository and must be installed separately by the end user.
-
-Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a> for help on installing the required components.
-TXT;
-                       echo $message;
-                       trigger_error( $message, E_USER_ERROR );
-                       die( 1 );
-               }
-
-               return self::getProvider()->getLogger( $channel );
-       }
-
-
-       /**
-        * Construction of utility class is not allowed.
-        */
-       private function __construct() {
-               // no-op
-       }
-}
diff --git a/includes/debug/logger/LegacyLogger.php b/includes/debug/logger/LegacyLogger.php
new file mode 100644 (file)
index 0000000..9cf104a
--- /dev/null
@@ -0,0 +1,379 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+use MWDebug;
+use Psr\Log\AbstractLogger;
+use Psr\Log\LogLevel;
+use UDPTransport;
+
+/**
+ * PSR-3 logger that mimics the historic implementation of MediaWiki's
+ * wfErrorLog logging implementation.
+ *
+ * This logger is configured by the following global configuration variables:
+ * - `$wgDebugLogFile`
+ * - `$wgDebugLogGroups`
+ * - `$wgDBerrorLog`
+ * - `$wgDBerrorLogTZ`
+ *
+ * See documentation in DefaultSettings.php for detailed explanations of each
+ * variable.
+ *
+ * @see \MediaWiki\Logger\LoggerFactory
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class LegacyLogger extends AbstractLogger {
+
+       /**
+        * @var string $channel
+        */
+       protected $channel;
+
+       /**
+        * Convert Psr\Log\LogLevel constants into int for sane comparisons
+        * These are the same values that Monlog uses
+        *
+        * @var array
+        */
+       protected static $levelMapping = array(
+               LogLevel::DEBUG => 100,
+               LogLevel::INFO => 200,
+               LogLevel::NOTICE => 250,
+               LogLevel::WARNING => 300,
+               LogLevel::ERROR => 400,
+               LogLevel::CRITICAL => 500,
+               LogLevel::ALERT => 550,
+               LogLevel::EMERGENCY => 600,
+       );
+
+
+       /**
+        * @param string $channel
+        */
+       public function __construct( $channel ) {
+               $this->channel = $channel;
+       }
+
+       /**
+        * Logs with an arbitrary level.
+        *
+        * @param string|int $level
+        * @param string $message
+        * @param array $context
+        */
+       public function log( $level, $message, array $context = array() ) {
+               if ( self::shouldEmit( $this->channel, $message, $level, $context ) ) {
+                       $text = self::format( $this->channel, $message, $context );
+                       $destination = self::destination( $this->channel, $message, $context );
+                       self::emit( $text, $destination );
+               }
+               // Add to debug toolbar
+               MWDebug::debugMsg( $message, array( 'channel' => $this->channel ) + $context );
+       }
+
+
+       /**
+        * Determine if the given message should be emitted or not.
+        *
+        * @param string $channel
+        * @param string $message
+        * @param string|int $level Psr\Log\LogEvent constant or Monlog level int
+        * @param array $context
+        * @return bool True if message should be sent to disk/network, false
+        * otherwise
+        */
+       public static function shouldEmit( $channel, $message, $level, $context ) {
+               global $wgDebugLogFile, $wgDBerrorLog, $wgDebugLogGroups;
+
+               if ( $channel === 'wfLogDBError' ) {
+                       // wfLogDBError messages are emitted if a database log location is
+                       // specfied.
+                       $shouldEmit = (bool)$wgDBerrorLog;
+
+               } elseif ( $channel === 'wfErrorLog' ) {
+                       // All messages on the wfErrorLog channel should be emitted.
+                       $shouldEmit = true;
+
+               } elseif ( isset( $wgDebugLogGroups[$channel] ) ) {
+                       $logConfig = $wgDebugLogGroups[$channel];
+
+                       if ( is_array( $logConfig ) ) {
+                               $shouldEmit = true;
+                               if ( isset( $logConfig['sample'] ) ) {
+                                       // Emit randomly with a 1 in 'sample' chance for each message.
+                                       $shouldEmit = mt_rand( 1, $logConfig['sample'] ) === 1;
+                               }
+
+                               if ( isset( $logConfig['level'] ) ) {
+                                       if ( is_string( $level ) ) {
+                                               $level = self::$levelMapping[$level];
+                                       }
+                                       $shouldEmit = $level >= self::$levelMapping[$logConfig['level']];
+                               }
+                       } else {
+                               // Emit unless the config value is explictly false.
+                               $shouldEmit = $logConfig !== false;
+                       }
+
+               } elseif ( isset( $context['private'] ) && $context['private'] ) {
+                       // Don't emit if the message didn't match previous checks based on
+                       // the channel and the event is marked as private. This check
+                       // discards messages sent via wfDebugLog() with dest == 'private'
+                       // and no explicit wgDebugLogGroups configuration.
+                       $shouldEmit = false;
+               } else {
+                       // Default return value is the same as the historic wfDebug
+                       // method: emit if $wgDebugLogFile has been set.
+                       $shouldEmit = $wgDebugLogFile != '';
+               }
+
+               return $shouldEmit;
+       }
+
+
+       /**
+        * Format a message.
+        *
+        * Messages to the 'wfDebug', 'wfLogDBError' and 'wfErrorLog' channels
+        * receive special fomatting to mimic the historic output of the functions
+        * of the same name. All other channel values are formatted based on the
+        * historic output of the `wfDebugLog()` global function.
+        *
+        * @param string $channel
+        * @param string $message
+        * @param array $context
+        * @return string
+        */
+       public static function format( $channel, $message, $context ) {
+               global $wgDebugLogGroups;
+
+               if ( $channel === 'wfDebug' ) {
+                       $text = self::formatAsWfDebug( $channel, $message, $context );
+
+               } elseif ( $channel === 'wfLogDBError' ) {
+                       $text = self::formatAsWfLogDBError( $channel, $message, $context );
+
+               } elseif ( $channel === 'wfErrorLog' ) {
+                       $text = "{$message}\n";
+
+               } elseif ( $channel === 'profileoutput' ) {
+                       // Legacy wfLogProfilingData formatitng
+                       $forward = '';
+                       if ( isset( $context['forwarded_for'] )) {
+                               $forward = " forwarded for {$context['forwarded_for']}";
+                       }
+                       if ( isset( $context['client_ip'] ) ) {
+                               $forward .= " client IP {$context['client_ip']}";
+                       }
+                       if ( isset( $context['from'] ) ) {
+                               $forward .= " from {$context['from']}";
+                       }
+                       if ( $forward ) {
+                               $forward = "\t(proxied via {$context['proxy']}{$forward})";
+                       }
+                       if ( $context['anon'] ) {
+                               $forward .= ' anon';
+                       }
+                       if ( !isset( $context['url'] ) ) {
+                               $context['url'] = 'n/a';
+                       }
+
+                       $log = sprintf( "%s\t%04.3f\t%s%s\n",
+                               gmdate( 'YmdHis' ), $context['elapsed'], $context['url'], $forward );
+
+                       $text = self::formatAsWfDebugLog(
+                               $channel, $log . $context['output'], $context );
+
+               } elseif ( !isset( $wgDebugLogGroups[$channel] ) ) {
+                       $text = self::formatAsWfDebug(
+                               $channel, "[{$channel}] {$message}", $context );
+
+               } else {
+                       // Default formatting is wfDebugLog's historic style
+                       $text = self::formatAsWfDebugLog( $channel, $message, $context );
+               }
+
+               return self::interpolate( $text, $context );
+       }
+
+
+       /**
+        * Format a message as `wfDebug()` would have formatted it.
+        *
+        * @param string $channel
+        * @param string $message
+        * @param array $context
+        * @return string
+        */
+       protected static function formatAsWfDebug( $channel, $message, $context ) {
+               $text = preg_replace( '![\x00-\x08\x0b\x0c\x0e-\x1f]!', ' ', $message );
+               if ( isset( $context['seconds_elapsed'] ) ) {
+                       // Prepend elapsed request time and real memory usage with two
+                       // trailing spaces.
+                       $text = "{$context['seconds_elapsed']} {$context['memory_used']}  {$text}";
+               }
+               if ( isset( $context['prefix'] ) ) {
+                       $text = "{$context['prefix']}{$text}";
+               }
+               return "{$text}\n";
+       }
+
+
+       /**
+        * Format a message as `wfLogDBError()` would have formatted it.
+        *
+        * @param string $channel
+        * @param string $message
+        * @param array $context
+        * @return string
+        */
+       protected static function formatAsWfLogDBError( $channel, $message, $context ) {
+               global $wgDBerrorLogTZ;
+               static $cachedTimezone = null;
+
+               if ( $wgDBerrorLogTZ && !$cachedTimezone ) {
+                       $cachedTimezone = new DateTimeZone( $wgDBerrorLogTZ );
+               }
+
+               // Workaround for https://bugs.php.net/bug.php?id=52063
+               // Can be removed when min PHP > 5.3.6
+               if ( $cachedTimezone === null ) {
+                       $d = date_create( 'now' );
+               } else {
+                       $d = date_create( 'now', $cachedTimezone );
+               }
+               $date = $d->format( 'D M j G:i:s T Y' );
+
+               $host = wfHostname();
+               $wiki = wfWikiID();
+
+               $text = "{$date}\t{$host}\t{$wiki}\t{$message}\n";
+               return $text;
+       }
+
+
+       /**
+        * Format a message as `wfDebugLog() would have formatted it.
+        *
+        * @param string $channel
+        * @param string $message
+        * @param array $context
+        */
+       protected static function formatAsWfDebugLog( $channel, $message, $context ) {
+               $time = wfTimestamp( TS_DB );
+               $wiki = wfWikiID();
+               $host = wfHostname();
+               $text = "{$time} {$host} {$wiki}: {$message}\n";
+               return $text;
+       }
+
+
+       /**
+        * Interpolate placeholders in logging message.
+        *
+        * @param string $message
+        * @param array $context
+        * @return string Interpolated message
+        */
+       public static function interpolate( $message, array $context ) {
+               if ( strpos( $message, '{' ) !== false ) {
+                       $replace = array();
+                       foreach ( $context as $key => $val ) {
+                               $replace['{' . $key . '}'] = $val;
+                       }
+                       $message = strtr( $message, $replace );
+               }
+               return $message;
+       }
+
+
+       /**
+        * Select the appropriate log output destination for the given log event.
+        *
+        * If the event context contains 'destination'
+        *
+        * @param string $channel
+        * @param string $message
+        * @param array $context
+        * @return string
+        */
+       protected static function destination( $channel, $message, $context ) {
+               global $wgDebugLogFile, $wgDBerrorLog, $wgDebugLogGroups;
+
+               // Default destination is the debug log file as historically used by
+               // the wfDebug function.
+               $destination = $wgDebugLogFile;
+
+               if ( isset( $context['destination'] ) ) {
+                       // Use destination explicitly provided in context
+                       $destination = $context['destination'];
+
+               } elseif ( $channel === 'wfDebug' ) {
+                       $destination = $wgDebugLogFile;
+
+               } elseif ( $channel === 'wfLogDBError' ) {
+                       $destination = $wgDBerrorLog;
+
+               } elseif ( isset( $wgDebugLogGroups[$channel] ) ) {
+                       $logConfig = $wgDebugLogGroups[$channel];
+
+                       if ( is_array( $logConfig ) ) {
+                               $destination = $logConfig['destination'];
+                       } else {
+                               $destination = strval( $logConfig );
+                       }
+               }
+
+               return $destination;
+       }
+
+
+       /**
+       * Log to a file without getting "file size exceeded" signals.
+       *
+       * Can also log to UDP with the syntax udp://host:port/prefix. This will send
+       * lines to the specified port, prefixed by the specified prefix and a space.
+       *
+       * @param string $text
+       * @param string $file Filename
+       * @throws MWException
+       */
+       public static function emit( $text, $file ) {
+               if ( substr( $file, 0, 4 ) == 'udp:' ) {
+                       $transport = UDPTransport::newFromString( $file );
+                       $transport->emit( $text );
+               } else {
+                       wfSuppressWarnings();
+                       $exists = file_exists( $file );
+                       $size = $exists ? filesize( $file ) : false;
+                       if ( !$exists ||
+                               ( $size !== false && $size + strlen( $text ) < 0x7fffffff )
+                       ) {
+                               file_put_contents( $file, $text, FILE_APPEND );
+                       }
+                       wfRestoreWarnings();
+               }
+       }
+
+}
diff --git a/includes/debug/logger/LegacySpi.php b/includes/debug/logger/LegacySpi.php
new file mode 100644 (file)
index 0000000..1bf39e4
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+/**
+ * LoggerFactory service provider that creates LegacyLogger instances.
+ *
+ * Usage:
+ * @code
+ * $wgMWLoggerDefaultSpi = array(
+ *   'class' => '\\MediaWiki\\Logger\\LegacySpi',
+ * );
+ * @endcode
+ *
+ * @see \MediaWiki\Logger\LoggerFactory
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class LegacySpi implements Spi {
+
+       /**
+        * @var array $singletons
+        */
+       protected $singletons = array();
+
+
+       /**
+        * Get a logger instance.
+        *
+        * @param string $channel Logging channel
+        * @return \Psr\Log\LoggerInterface Logger instance
+        */
+       public function getLogger( $channel ) {
+               if ( !isset( $this->singletons[$channel] ) ) {
+                       $this->singletons[$channel] = new LegacyLogger( $channel );
+               }
+               return $this->singletons[$channel];
+       }
+
+}
diff --git a/includes/debug/logger/Logger.php b/includes/debug/logger/Logger.php
deleted file mode 100644 (file)
index 27cf0cd..0000000
+++ /dev/null
@@ -1,72 +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
- */
-
-
-/**
- * Backwards compatibility stub for usage from before the introduction of
- * MWLoggerFactory.
- *
- * @deprecated since 1.25 Use MWLoggerFactory
- * @todo This class should be removed before the 1.25 final release.
- */
-class MWLogger {
-
-       /**
-        * Register a service provider to create new \Psr\Log\LoggerInterface
-        * instances.
-        *
-        * @param MWLoggerSpi $provider Provider to register
-        * @deprecated since 1.25 Use MWLoggerFactory::registerProvider()
-        */
-       public static function registerProvider( MWLoggerSpi $provider ) {
-               MWLoggerFactory::registerProvider( $provider );
-       }
-
-
-       /**
-        * Get the registered service provider.
-        *
-        * If called before any service provider has been registered, it will
-        * attempt to use the $wgMWLoggerDefaultSpi global to bootstrap
-        * MWLoggerSpi registration. $wgMWLoggerDefaultSpi is expected to be an
-        * array usable by ObjectFactory::getObjectFromSpec() to create a class.
-        *
-        * @return MWLoggerSpi
-        * @see registerProvider()
-        * @see ObjectFactory::getObjectFromSpec()
-        * @deprecated since 1.25 Use MWLoggerFactory::getProvider()
-        */
-       public static function getProvider() {
-               return MWLoggerFactory::getProvider();
-       }
-
-
-       /**
-        * Get a named logger instance from the currently configured logger factory.
-        *
-        * @param string $channel Logger channel (name)
-        * @return \Psr\Log\LoggerInterface
-        * @deprecated since 1.25 Use MWLoggerFactory::getInstance()
-        */
-       public static function getInstance( $channel ) {
-               return MWLoggerFactory::getInstance( $channel );
-       }
-
-}
diff --git a/includes/debug/logger/LoggerFactory.php b/includes/debug/logger/LoggerFactory.php
new file mode 100644 (file)
index 0000000..f6699ec
--- /dev/null
@@ -0,0 +1,121 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+use ObjectFactory;
+
+/**
+ * PSR-3 logger instance factory.
+ *
+ * Creation of \Psr\Log\LoggerInterface instances is managed via the
+ * LoggerFactory::getInstance() static method which in turn delegates to the
+ * currently registered service provider.
+ *
+ * A service provider is any class implementing the Spi interface.
+ * There are two possible methods of registering a service provider. The
+ * LoggerFactory::registerProvider() static method can be called at any time
+ * to change the service provider. If LoggerFactory::getInstance() is called
+ * before any service provider has been registered, it will attempt to use the
+ * $wgMWLoggerDefaultSpi global to bootstrap Spi registration.
+ * $wgMWLoggerDefaultSpi is expected to be an array usable by
+ * ObjectFactory::getObjectFromSpec() to create a class.
+ *
+ * @see \MediaWiki\Logger\Spi
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class LoggerFactory {
+
+       /**
+        * Service provider.
+        * @var \MediaWiki\Logger\Spi $spi
+        */
+       private static $spi;
+
+
+       /**
+        * Register a service provider to create new \Psr\Log\LoggerInterface
+        * instances.
+        *
+        * @param \MediaWiki\Logger\Spi $provider Provider to register
+        */
+       public static function registerProvider( Spi $provider ) {
+               self::$spi = $provider;
+       }
+
+
+       /**
+        * Get the registered service provider.
+        *
+        * If called before any service provider has been registered, it will
+        * attempt to use the $wgMWLoggerDefaultSpi global to bootstrap
+        * Spi registration. $wgMWLoggerDefaultSpi is expected to be an
+        * array usable by ObjectFactory::getObjectFromSpec() to create a class.
+        *
+        * @return \MediaWiki\Logger\Spi
+        * @see registerProvider()
+        * @see ObjectFactory::getObjectFromSpec()
+        */
+       public static function getProvider() {
+               if ( self::$spi === null ) {
+                       global $wgMWLoggerDefaultSpi;
+                       $provider = ObjectFactory::getObjectFromSpec(
+                               $wgMWLoggerDefaultSpi
+                       );
+                       self::registerProvider( $provider );
+               }
+               return self::$spi;
+       }
+
+
+       /**
+        * Get a named logger instance from the currently configured logger factory.
+        *
+        * @param string $channel Logger channel (name)
+        * @return \Psr\Log\LoggerInterface
+        */
+       public static function getInstance( $channel ) {
+               if ( !interface_exists( '\Psr\Log\LoggerInterface' ) ) {
+                       $message = (
+                               'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
+                               "library</a> to be present. This library is not embedded directly in MediaWiki's " .
+                               "git repository and must be installed separately by the end user.\n\n" .
+                               'Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
+                               '#Fetch_external_libraries">mediawiki.org</a> for help on installing ' .
+                               'the required components.'
+                       );
+                       echo $message;
+                       trigger_error( $message, E_USER_ERROR );
+                       die( 1 );
+               }
+
+               return self::getProvider()->getLogger( $channel );
+       }
+
+
+       /**
+        * Construction of utility class is not allowed.
+        */
+       private function __construct() {
+               // no-op
+       }
+}
diff --git a/includes/debug/logger/MonologSpi.php b/includes/debug/logger/MonologSpi.php
new file mode 100644 (file)
index 0000000..a07fdc4
--- /dev/null
@@ -0,0 +1,251 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+use Monolog\Logger;
+use ObjectFactory;
+
+/**
+ * LoggerFactory service provider that creates loggers implemented by
+ * Monolog.
+ *
+ * Configured using an array of configuration data with the keys 'loggers',
+ * 'processors', 'handlers' and 'formatters'.
+ *
+ * The ['loggers']['@default'] configuration will be used to create loggers
+ * for any channel that isn't explicitly named in the 'loggers' configuration
+ * section.
+ *
+ * Configuration will most typically be provided in the $wgMWLoggerDefaultSpi
+ * global configuration variable used by LoggerFactory to construct its
+ * default SPI provider:
+ * @code
+ * $wgMWLoggerDefaultSpi = array(
+ *   'class' => '\\MediaWiki\\Logger\\MonologSpi',
+ *   'args' => array( array(
+ *       'loggers' => array(
+ *           '@default' => array(
+ *               'processors' => array( 'wiki', 'psr', 'pid', 'uid', 'web' ),
+ *               'handlers'   => array( 'stream' ),
+ *           ),
+ *           'runJobs' => array(
+ *               'processors' => array( 'wiki', 'psr', 'pid' ),
+ *               'handlers'   => array( 'stream' ),
+ *           )
+ *       ),
+ *       'processors' => array(
+ *           'wiki' => array(
+ *               'class' => '\\MediaWiki\\Logger\\Monolog\\WikiProcessor',
+ *           ),
+ *           'psr' => array(
+ *               'class' => '\\Monolog\\Processor\\PsrLogMessageProcessor',
+ *           ),
+ *           'pid' => array(
+ *               'class' => '\\Monolog\\Processor\\ProcessIdProcessor',
+ *           ),
+ *           'uid' => array(
+ *               'class' => '\\Monolog\\Processor\\UidProcessor',
+ *           ),
+ *           'web' => array(
+ *               'class' => '\\Monolog\\Processor\\WebProcessor',
+ *           ),
+ *       ),
+ *       'handlers' => array(
+ *           'stream' => array(
+ *               'class'     => '\\Monolog\\Handler\\StreamHandler',
+ *               'args'      => array( 'path/to/your.log' ),
+ *               'formatter' => 'line',
+ *           ),
+ *           'redis' => array(
+ *               'class'     => '\\Monolog\\Handler\\RedisHandler',
+ *               'args'      => array( function() {
+ *                       $redis = new Redis();
+ *                       $redis->connect( '127.0.0.1', 6379 );
+ *                       return $redis;
+ *                   },
+ *                   'logstash'
+ *               ),
+ *               'formatter' => 'logstash',
+ *           ),
+ *           'udp2log' => array(
+ *               'class' => '\\MediaWiki\\Logger\\Monolog\\LegacyHandler',
+ *               'args' => array(
+ *                   'udp://127.0.0.1:8420/mediawiki
+ *               ),
+ *               'formatter' => 'line',
+ *           ),
+ *       ),
+ *       'formatters' => array(
+ *           'line' => array(
+ *               'class' => '\\Monolog\\Formatter\\LineFormatter',
+ *            ),
+ *            'logstash' => array(
+ *                'class' => '\\Monolog\\Formatter\\LogstashFormatter',
+ *                'args'  => array( 'mediawiki', php_uname( 'n' ), null, '', 1 ),
+ *            ),
+ *       ),
+ *   ) ),
+ * );
+ * @endcode
+ *
+ * @see https://github.com/Seldaek/monolog
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class MonologSpi implements Spi {
+
+       /**
+        * @var array $singletons
+        */
+       protected $singletons;
+
+       /**
+        * Configuration for creating new loggers.
+        * @var array $config
+        */
+       protected $config;
+
+
+       /**
+        * @param array $config Configuration data.
+        */
+       public function __construct( array $config ) {
+               $this->config = $config;
+               $this->reset();
+       }
+
+
+       /**
+        * Reset internal caches.
+        *
+        * This is public for use in unit tests. Under normal operation there should
+        * be no need to flush the caches.
+        */
+       public function reset() {
+               $this->singletons = array(
+                       'loggers'    => array(),
+                       'handlers'   => array(),
+                       'formatters' => array(),
+                       'processors' => array(),
+               );
+       }
+
+
+       /**
+        * Get a logger instance.
+        *
+        * Creates and caches a logger instance based on configuration found in the
+        * $wgMWLoggerMonologSpiConfig global. Subsequent request for the same channel
+        * name will return the cached instance.
+        *
+        * @param string $channel Logging channel
+        * @return \Psr\Log\LoggerInterface Logger instance
+        */
+       public function getLogger( $channel ) {
+               if ( !isset( $this->singletons['loggers'][$channel] ) ) {
+                       // Fallback to using the '@default' configuration if an explict
+                       // configuration for the requested channel isn't found.
+                       $spec = isset( $this->config['loggers'][$channel] ) ?
+                               $this->config['loggers'][$channel] :
+                               $this->config['loggers']['@default'];
+
+                       $monolog = $this->createLogger( $channel, $spec );
+                       $this->singletons['loggers'][$channel] = $monolog;
+               }
+
+               return $this->singletons['loggers'][$channel];
+       }
+
+
+       /**
+        * Create a logger.
+        * @param string $channel Logger channel
+        * @param array $spec Configuration
+        * @return \Monolog\Logger
+        */
+       protected function createLogger( $channel, $spec ) {
+               $obj = new Logger( $channel );
+
+               if ( isset( $spec['processors'] ) ) {
+                       foreach ( $spec['processors'] as $processor ) {
+                               $obj->pushProcessor( $this->getProcessor( $processor ) );
+                       }
+               }
+
+               if ( isset( $spec['handlers'] ) ) {
+                       foreach ( $spec['handlers'] as $handler ) {
+                               $obj->pushHandler( $this->getHandler( $handler ) );
+                       }
+               }
+               return $obj;
+       }
+
+
+       /**
+        * Create or return cached processor.
+        * @param string $name Processor name
+        * @return callable
+        */
+       public function getProcessor( $name ) {
+               if ( !isset( $this->singletons['processors'][$name] ) ) {
+                       $spec = $this->config['processors'][$name];
+                       $processor = ObjectFactory::getObjectFromSpec( $spec );
+                       $this->singletons['processors'][$name] = $processor;
+               }
+               return $this->singletons['processors'][$name];
+       }
+
+
+       /**
+        * Create or return cached handler.
+        * @param string $name Processor name
+        * @return \Monolog\Handler\HandlerInterface
+        */
+       public function getHandler( $name ) {
+               if ( !isset( $this->singletons['handlers'][$name] ) ) {
+                       $spec = $this->config['handlers'][$name];
+                       $handler = ObjectFactory::getObjectFromSpec( $spec );
+                       if ( isset( $spec['formatter'] ) ) {
+                               $handler->setFormatter(
+                                       $this->getFormatter( $spec['formatter'] )
+                               );
+                       }
+                       $this->singletons['handlers'][$name] = $handler;
+               }
+               return $this->singletons['handlers'][$name];
+       }
+
+
+       /**
+        * Create or return cached formatter.
+        * @param string $name Formatter name
+        * @return \Monolog\Formatter\FormatterInterface
+        */
+       public function getFormatter( $name ) {
+               if ( !isset( $this->singletons['formatters'][$name] ) ) {
+                       $spec = $this->config['formatters'][$name];
+                       $formatter = ObjectFactory::getObjectFromSpec( $spec );
+                       $this->singletons['formatters'][$name] = $formatter;
+               }
+               return $this->singletons['formatters'][$name];
+       }
+}
index 617842c..a82d2c4 100644 (file)
  * @file
  */
 
+namespace MediaWiki\Logger;
+
+use Psr\Log\NullLogger;
 
 /**
- * MWLoggerFactory service provider that creates \Psr\Log\NullLogger
+ * LoggerFactory service provider that creates \Psr\Log\NullLogger
  * instances. A NullLogger silently discards all log events sent to it.
  *
  * Usage:
  * @code
  * $wgMWLoggerDefaultSpi = array(
- *   'class' => 'MWLoggerNullSpi',
+ *   'class' => '\\MediaWiki\\Logger\\NullSpi',
  * );
  * @endcode
  *
- * @see MWLoggerFactory
+ * @see \MediaWiki\Logger\LoggerFactory
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
  */
-class MWLoggerNullSpi implements MWLoggerSpi {
+class NullSpi implements Spi {
 
        /**
         * @var \Psr\Log\NullLogger $singleton
@@ -44,7 +47,7 @@ class MWLoggerNullSpi implements MWLoggerSpi {
 
 
        public function __construct() {
-               $this->singleton = new \Psr\Log\NullLogger();
+               $this->singleton = new NullLogger();
        }
 
 
diff --git a/includes/debug/logger/Shims.php b/includes/debug/logger/Shims.php
new file mode 100644 (file)
index 0000000..0476d0f
--- /dev/null
@@ -0,0 +1,121 @@
+<?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
+ */
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * MediaWiki\Logger\LoggerFactory.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\LoggerFactory
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLogger {
+
+       /**
+        * Register a service provider to create new \Psr\Log\LoggerInterface
+        * instances.
+        *
+        * @param \MediaWiki\Logger\Spi $provider Provider to register
+        * @deprecated since 1.25 Use MediaWiki\Logger\LoggerFactory::registerProvider()
+        */
+       public static function registerProvider( \MediaWiki\Logger\Spi $provider ) {
+               \MediaWiki\Logger\LoggerFactory::registerProvider( $provider );
+       }
+
+
+       /**
+        * Get the registered service provider.
+        *
+        * If called before any service provider has been registered, it will
+        * attempt to use the $wgMWLoggerDefaultSpi global to bootstrap
+        * MWLoggerSpi registration. $wgMWLoggerDefaultSpi is expected to be an
+        * array usable by ObjectFactory::getObjectFromSpec() to create a class.
+        *
+        * @return \MediaWiki\Logger\Spi
+        * @see registerProvider()
+        * @see ObjectFactory::getObjectFromSpec()
+        * @deprecated since 1.25 Use MediaWiki\Logger\LoggerFactory::getProvider()
+        */
+       public static function getProvider() {
+               return \MediaWiki\Logger\LoggerFactory::getProvider();
+       }
+
+
+       /**
+        * Get a named logger instance from the currently configured logger factory.
+        *
+        * @param string $channel Logger channel (name)
+        * @return \Psr\Log\LoggerInterface
+        * @deprecated since 1.25 Use MediaWiki\Logger\LoggerFactory::getInstance()
+        */
+       public static function getInstance( $channel ) {
+               return \MediaWiki\Logger\LoggerFactory::getInstance( $channel );
+       }
+
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\LoggerFactory
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerFactory extends \MediaWiki\Logger\LoggerFactory {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\LegacyLogger
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerLegacyLogger extends \MediaWiki\Logger\LegacyLogger {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\LegacySpi
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerLegacySpi extends \MediaWiki\Logger\LegacySpi {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\NullSpi
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerNullSpi extends \MediaWiki\Logger\NullSpi {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\Spi
+ * @todo This class should be removed before the 1.25 final release.
+ */
+interface MWLoggerSpi extends \MediaWiki\Logger\Spi {
+}
index cd9f17f..044789f 100644 (file)
@@ -18,6 +18,8 @@
  * @file
  */
 
+namespace MediaWiki\Logger;
+
 /**
  * Service provider interface for \Psr\Log\LoggerInterface implementation
  * libraries.
  * MediaWiki can be configured to use a class implementing this interface to
  * create new \Psr\Log\LoggerInterface instances via either the
  * $wgMWLoggerDefaultSpi global variable or code that constructs an instance
- * and registers it via the MWLoggerFactory::registerProvider() static method.
+ * and registers it via the LoggerFactory::registerProvider() static method.
  *
- * @see MWLoggerFactory
+ * @see \MediaWiki\Logger\LoggerFactory
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
  */
-interface MWLoggerSpi {
+interface Spi {
 
        /**
         * Get a logger instance.
diff --git a/includes/debug/logger/legacy/Logger.php b/includes/debug/logger/legacy/Logger.php
deleted file mode 100644 (file)
index be46c27..0000000
+++ /dev/null
@@ -1,372 +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
- */
-
-/**
- * PSR-3 logger that mimics the historic implementation of MediaWiki's
- * wfErrorLog logging implementation.
- *
- * This logger is configured by the following global configuration variables:
- * - `$wgDebugLogFile`
- * - `$wgDebugLogGroups`
- * - `$wgDBerrorLog`
- * - `$wgDBerrorLogTZ`
- *
- * See documentation in DefaultSettings.php for detailed explanations of each
- * variable.
- *
- * @see MWLoggerFactory
- * @since 1.25
- * @author Bryan Davis <bd808@wikimedia.org>
- * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
- */
-use Psr\Log\AbstractLogger;
-use Psr\Log\LogLevel;
-
-class MWLoggerLegacyLogger extends AbstractLogger {
-
-       /**
-        * @var string $channel
-        */
-       protected $channel;
-
-       /**
-        * Convert Psr\Log\LogLevel constants into int for sane comparisons
-        * These are the same values that Monlog uses
-        *
-        * @var array
-        */
-       protected static $levelMapping = array(
-               LogLevel::DEBUG => 100,
-               LogLevel::INFO => 200,
-               LogLevel::NOTICE => 250,
-               LogLevel::WARNING => 300,
-               LogLevel::ERROR => 400,
-               LogLevel::CRITICAL => 500,
-               LogLevel::ALERT => 550,
-               LogLevel::EMERGENCY => 600,
-       );
-
-
-       /**
-        * @param string $channel
-        */
-       public function __construct( $channel ) {
-               $this->channel = $channel;
-       }
-
-       /**
-        * Logs with an arbitrary level.
-        *
-        * @param string|int $level
-        * @param string $message
-        * @param array $context
-        */
-       public function log( $level, $message, array $context = array() ) {
-               if ( self::shouldEmit( $this->channel, $message, $level, $context ) ) {
-                       $text = self::format( $this->channel, $message, $context );
-                       $destination = self::destination( $this->channel, $message, $context );
-                       self::emit( $text, $destination );
-               }
-       }
-
-
-       /**
-        * Determine if the given message should be emitted or not.
-        *
-        * @param string $channel
-        * @param string $message
-        * @param string|int $level Psr\Log\LogEvent constant or Monlog level int
-        * @param array $context
-        * @return bool True if message should be sent to disk/network, false
-        * otherwise
-        */
-       public static function shouldEmit( $channel, $message, $level, $context ) {
-               global $wgDebugLogFile, $wgDBerrorLog, $wgDebugLogGroups;
-
-               if ( $channel === 'wfLogDBError' ) {
-                       // wfLogDBError messages are emitted if a database log location is
-                       // specfied.
-                       $shouldEmit = (bool)$wgDBerrorLog;
-
-               } elseif ( $channel === 'wfErrorLog' ) {
-                       // All messages on the wfErrorLog channel should be emitted.
-                       $shouldEmit = true;
-
-               } elseif ( isset( $wgDebugLogGroups[$channel] ) ) {
-                       $logConfig = $wgDebugLogGroups[$channel];
-
-                       if ( is_array( $logConfig ) ) {
-                               $shouldEmit = true;
-                               if ( isset( $logConfig['sample'] ) ) {
-                                       // Emit randomly with a 1 in 'sample' chance for each message.
-                                       $shouldEmit = mt_rand( 1, $logConfig['sample'] ) === 1;
-                               }
-
-                               if ( isset( $logConfig['level'] ) ) {
-                                       if ( is_string( $level ) ) {
-                                               $level = self::$levelMapping[$level];
-                                       }
-                                       $shouldEmit = $level >= self::$levelMapping[$logConfig['level']];
-                               }
-                       } else {
-                               // Emit unless the config value is explictly false.
-                               $shouldEmit = $logConfig !== false;
-                       }
-
-               } elseif ( isset( $context['private'] ) && $context['private'] ) {
-                       // Don't emit if the message didn't match previous checks based on
-                       // the channel and the event is marked as private. This check
-                       // discards messages sent via wfDebugLog() with dest == 'private'
-                       // and no explicit wgDebugLogGroups configuration.
-                       $shouldEmit = false;
-               } else {
-                       // Default return value is the same as the historic wfDebug
-                       // method: emit if $wgDebugLogFile has been set.
-                       $shouldEmit = $wgDebugLogFile != '';
-               }
-
-               return $shouldEmit;
-       }
-
-
-       /**
-        * Format a message.
-        *
-        * Messages to the 'wfDebug', 'wfLogDBError' and 'wfErrorLog' channels
-        * receive special fomatting to mimic the historic output of the functions
-        * of the same name. All other channel values are formatted based on the
-        * historic output of the `wfDebugLog()` global function.
-        *
-        * @param string $channel
-        * @param string $message
-        * @param array $context
-        * @return string
-        */
-       public static function format( $channel, $message, $context ) {
-               global $wgDebugLogGroups;
-
-               if ( $channel === 'wfDebug' ) {
-                       $text = self::formatAsWfDebug( $channel, $message, $context );
-
-               } elseif ( $channel === 'wfLogDBError' ) {
-                       $text = self::formatAsWfLogDBError( $channel, $message, $context );
-
-               } elseif ( $channel === 'wfErrorLog' ) {
-                       $text = "{$message}\n";
-
-               } elseif ( $channel === 'profileoutput' ) {
-                       // Legacy wfLogProfilingData formatitng
-                       $forward = '';
-                       if ( isset( $context['forwarded_for'] )) {
-                               $forward = " forwarded for {$context['forwarded_for']}";
-                       }
-                       if ( isset( $context['client_ip'] ) ) {
-                               $forward .= " client IP {$context['client_ip']}";
-                       }
-                       if ( isset( $context['from'] ) ) {
-                               $forward .= " from {$context['from']}";
-                       }
-                       if ( $forward ) {
-                               $forward = "\t(proxied via {$context['proxy']}{$forward})";
-                       }
-                       if ( $context['anon'] ) {
-                               $forward .= ' anon';
-                       }
-                       if ( !isset( $context['url'] ) ) {
-                               $context['url'] = 'n/a';
-                       }
-
-                       $log = sprintf( "%s\t%04.3f\t%s%s\n",
-                               gmdate( 'YmdHis' ), $context['elapsed'], $context['url'], $forward );
-
-                       $text = self::formatAsWfDebugLog(
-                               $channel, $log . $context['output'], $context );
-
-               } elseif ( !isset( $wgDebugLogGroups[$channel] ) ) {
-                       $text = self::formatAsWfDebug(
-                               $channel, "[{$channel}] {$message}", $context );
-
-               } else {
-                       // Default formatting is wfDebugLog's historic style
-                       $text = self::formatAsWfDebugLog( $channel, $message, $context );
-               }
-
-               return self::interpolate( $text, $context );
-       }
-
-
-       /**
-        * Format a message as `wfDebug()` would have formatted it.
-        *
-        * @param string $channel
-        * @param string $message
-        * @param array $context
-        * @return string
-        */
-       protected static function formatAsWfDebug( $channel, $message, $context ) {
-               $text = preg_replace( '![\x00-\x08\x0b\x0c\x0e-\x1f]!', ' ', $message );
-               if ( isset( $context['seconds_elapsed'] ) ) {
-                       // Prepend elapsed request time and real memory usage with two
-                       // trailing spaces.
-                       $text = "{$context['seconds_elapsed']} {$context['memory_used']}  {$text}";
-               }
-               if ( isset( $context['prefix'] ) ) {
-                       $text = "{$context['prefix']}{$text}";
-               }
-               return "{$text}\n";
-       }
-
-
-       /**
-        * Format a message as `wfLogDBError()` would have formatted it.
-        *
-        * @param string $channel
-        * @param string $message
-        * @param array $context
-        * @return string
-        */
-       protected static function formatAsWfLogDBError( $channel, $message, $context ) {
-               global $wgDBerrorLogTZ;
-               static $cachedTimezone = null;
-
-               if ( $wgDBerrorLogTZ && !$cachedTimezone ) {
-                       $cachedTimezone = new DateTimeZone( $wgDBerrorLogTZ );
-               }
-
-               // Workaround for https://bugs.php.net/bug.php?id=52063
-               // Can be removed when min PHP > 5.3.6
-               if ( $cachedTimezone === null ) {
-                       $d = date_create( 'now' );
-               } else {
-                       $d = date_create( 'now', $cachedTimezone );
-               }
-               $date = $d->format( 'D M j G:i:s T Y' );
-
-               $host = wfHostname();
-               $wiki = wfWikiID();
-
-               $text = "{$date}\t{$host}\t{$wiki}\t{$message}\n";
-               return $text;
-       }
-
-
-       /**
-        * Format a message as `wfDebugLog() would have formatted it.
-        *
-        * @param string $channel
-        * @param string $message
-        * @param array $context
-        */
-       protected static function formatAsWfDebugLog( $channel, $message, $context ) {
-               $time = wfTimestamp( TS_DB );
-               $wiki = wfWikiID();
-               $host = wfHostname();
-               $text = "{$time} {$host} {$wiki}: {$message}\n";
-               return $text;
-       }
-
-
-       /**
-        * Interpolate placeholders in logging message.
-        *
-        * @param string $message
-        * @param array $context
-        */
-       public static function interpolate( $message, array $context ) {
-               if ( strpos( $message, '{' ) !== false ) {
-                       $replace = array();
-                       foreach ( $context as $key => $val ) {
-                               $replace['{' . $key . '}'] = $val;
-                       }
-                       $message = strtr( $message, $replace );
-               }
-               return $message;
-       }
-
-
-       /**
-        * Select the appropriate log output destination for the given log event.
-        *
-        * If the event context contains 'destination'
-        *
-        * @param string $channel
-        * @param string $message
-        * @param array $context
-        * @return string
-        */
-       protected static function destination( $channel, $message, $context ) {
-               global $wgDebugLogFile, $wgDBerrorLog, $wgDebugLogGroups;
-
-               // Default destination is the debug log file as historically used by
-               // the wfDebug function.
-               $destination = $wgDebugLogFile;
-
-               if ( isset( $context['destination'] ) ) {
-                       // Use destination explicitly provided in context
-                       $destination = $context['destination'];
-
-               } elseif ( $channel === 'wfDebug' ) {
-                       $destination = $wgDebugLogFile;
-
-               } elseif ( $channel === 'wfLogDBError' ) {
-                       $destination = $wgDBerrorLog;
-
-               } elseif ( isset( $wgDebugLogGroups[$channel] ) ) {
-                       $logConfig = $wgDebugLogGroups[$channel];
-
-                       if ( is_array( $logConfig ) ) {
-                               $destination = $logConfig['destination'];
-                       } else {
-                               $destination = strval( $logConfig );
-                       }
-               }
-
-               return $destination;
-       }
-
-
-       /**
-       * Log to a file without getting "file size exceeded" signals.
-       *
-       * Can also log to UDP with the syntax udp://host:port/prefix. This will send
-       * lines to the specified port, prefixed by the specified prefix and a space.
-       *
-       * @param string $text
-       * @param string $file Filename
-       * @throws MWException
-       */
-       public static function emit( $text, $file ) {
-               if ( substr( $file, 0, 4 ) == 'udp:' ) {
-                       $transport = UDPTransport::newFromString( $file );
-                       $transport->emit( $text );
-               } else {
-                       wfSuppressWarnings();
-                       $exists = file_exists( $file );
-                       $size = $exists ? filesize( $file ) : false;
-                       if ( !$exists ||
-                               ( $size !== false && $size + strlen( $text ) < 0x7fffffff )
-                       ) {
-                               file_put_contents( $file, $text, FILE_APPEND );
-                       }
-                       wfRestoreWarnings();
-               }
-       }
-
-}
diff --git a/includes/debug/logger/legacy/Spi.php b/includes/debug/logger/legacy/Spi.php
deleted file mode 100644 (file)
index 79d4f24..0000000
+++ /dev/null
@@ -1,58 +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
- */
-
-/**
- * MWLoggerFactory service provider that creates MWLoggerLegacyLogger
- * instances.
- *
- * Usage:
- * @code
- * $wgMWLoggerDefaultSpi = array(
- *   'class' => 'MWLoggerLegacySpi',
- * );
- * @endcode
- *
- * @see MWLoggerFactory
- * @since 1.25
- * @author Bryan Davis <bd808@wikimedia.org>
- * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
- */
-class MWLoggerLegacySpi implements MWLoggerSpi {
-
-       /**
-        * @var array $singletons
-        */
-       protected $singletons = array();
-
-
-       /**
-        * Get a logger instance.
-        *
-        * @param string $channel Logging channel
-        * @return \Psr\Log\LoggerInterface Logger instance
-        */
-       public function getLogger( $channel ) {
-               if ( !isset( $this->singletons[$channel] ) ) {
-                       $this->singletons[$channel] = new MWLoggerLegacyLogger( $channel );
-               }
-               return $this->singletons[$channel];
-       }
-
-}
diff --git a/includes/debug/logger/monolog/Handler.php b/includes/debug/logger/monolog/Handler.php
deleted file mode 100644 (file)
index a872d84..0000000
+++ /dev/null
@@ -1,233 +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
- */
-
-
-/**
- * Log handler that replicates the behavior of MediaWiki's wfErrorLog()
- * logging service. Log output can be directed to a local file, a PHP stream,
- * or a udp2log server.
- *
- * For udp2log output, the stream specification must have the form:
- * "udp://HOST:PORT[/PREFIX]"
- * where:
- * - HOST: IPv4, IPv6 or hostname
- * - PORT: server port
- * - PREFIX: optional (but recommended) prefix telling udp2log how to route
- * the log event
- *
- * When not targeting a udp2log stream this class will act as a drop-in
- * replacement for Monolog's StreamHandler.
- *
- * @since 1.25
- * @author Bryan Davis <bd808@wikimedia.org>
- * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
- */
-class MWLoggerMonologHandler extends \Monolog\Handler\AbstractProcessingHandler {
-
-       /**
-        * Log sink descriptor
-        * @var string $uri
-        */
-       protected $uri;
-
-       /**
-        * Filter log events using legacy rules
-        * @var bool $useLegacyFilter
-        */
-       protected $useLegacyFilter;
-
-       /**
-        * Log sink
-        * @var resource $sink
-        */
-       protected $sink;
-
-       /**
-        * @var string $error
-        */
-       protected $error;
-
-       /**
-        * @var string $host
-        */
-       protected $host;
-
-       /**
-        * @var int $port
-        */
-       protected $port;
-
-       /**
-        * @var string $prefix
-        */
-       protected $prefix;
-
-
-       /**
-        * @param string $stream Stream URI
-        * @param bool $useLegacyFilter Filter log events using legacy rules
-        * @param int $level Minimum logging level that will trigger handler
-        * @param bool $bubble Can handled meesages bubble up the handler stack?
-        */
-       public function __construct(
-               $stream,
-               $useLegacyFilter = false,
-               $level = \Monolog\Logger::DEBUG,
-               $bubble = true
-       ) {
-               parent::__construct( $level, $bubble );
-               $this->uri = $stream;
-               $this->useLegacyFilter = $useLegacyFilter;
-       }
-
-       /**
-        * Open the log sink described by our stream URI.
-        */
-       protected function openSink() {
-               if ( !$this->uri ) {
-                       throw new LogicException(
-                               'Missing stream uri, the stream can not be opened.' );
-               }
-               $this->error = null;
-               set_error_handler( array( $this, 'errorTrap' ) );
-
-               if ( substr( $this->uri, 0, 4 ) == 'udp:' ) {
-                       $parsed = parse_url( $this->uri );
-                       if ( !isset( $parsed['host'] ) ) {
-                               throw new UnexpectedValueException( sprintf(
-                                       'Udp transport "%s" must specify a host', $this->uri
-                               ) );
-                       }
-                       if ( !isset( $parsed['port'] ) ) {
-                               throw new UnexpectedValueException( sprintf(
-                                       'Udp transport "%s" must specify a port', $this->uri
-                               ) );
-                       }
-
-                       $this->host = $parsed['host'];
-                       $this->port = $parsed['port'];
-                       $this->prefix = '';
-
-                       if ( isset( $parsed['path'] ) ) {
-                               $this->prefix = ltrim( $parsed['path'], '/' );
-                       }
-
-                       if ( filter_var( $this->host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
-                               $domain = AF_INET6;
-
-                       } else {
-                               $domain = AF_INET;
-                       }
-
-                       $this->sink = socket_create( $domain, SOCK_DGRAM, SOL_UDP );
-
-               } else {
-                       $this->sink = fopen( $this->uri, 'a' );
-               }
-               restore_error_handler();
-
-               if ( !is_resource( $this->sink ) ) {
-                       $this->sink = null;
-                       throw new UnexpectedValueException( sprintf(
-                               'The stream or file "%s" could not be opened: %s',
-                               $this->uri, $this->error
-                       ) );
-               }
-       }
-
-
-       /**
-        * Custom error handler.
-        * @param int $code Error number
-        * @param string $msg Error message
-        */
-       protected function errorTrap( $code, $msg ) {
-               $this->error = $msg;
-       }
-
-
-       /**
-        * Should we use UDP to send messages to the sink?
-        * @return bool
-        */
-       protected function useUdp() {
-               return $this->host !== null;
-       }
-
-
-       protected function write( array $record ) {
-               if ( $this->useLegacyFilter &&
-                       !MWLoggerLegacyLogger::shouldEmit(
-                               $record['channel'], $record['message'],
-                               $record['level'], $record
-               ) ) {
-                       // Do not write record if we are enforcing legacy rules and they
-                       // do not pass this message. This used to be done in isHandling(),
-                       // but Monolog 1.12.0 made a breaking change that removed access
-                       // to the needed channel and context information.
-                       return;
-               }
-
-               if ( $this->sink === null ) {
-                       $this->openSink();
-               }
-
-               $text = (string)$record['formatted'];
-               if ( $this->useUdp() ) {
-
-                       // Clean it up for the multiplexer
-                       if ( $this->prefix !== '' ) {
-                               $text = preg_replace( '/^/m', "{$this->prefix} ", $text );
-
-                               // Limit to 64KB
-                               if ( strlen( $text ) > 65506 ) {
-                                       $text = substr( $text, 0, 65506 );
-                               }
-
-                               if ( substr( $text, -1 ) != "\n" ) {
-                                       $text .= "\n";
-                               }
-
-                       } elseif ( strlen( $text ) > 65507 ) {
-                               $text = substr( $text, 0, 65507 );
-                       }
-
-                       socket_sendto(
-                               $this->sink, $text, strlen( $text ), 0, $this->host, $this->port );
-
-               } else {
-                       fwrite( $this->sink, $text );
-               }
-       }
-
-
-       public function close() {
-               if ( is_resource( $this->sink ) ) {
-                       if ( $this->useUdp() ) {
-                               socket_close( $this->sink );
-
-                       } else {
-                               fclose( $this->sink );
-                       }
-               }
-               $this->sink = null;
-       }
-
-}
index 67acf57..9ec15cb 100644 (file)
  * @file
  */
 
+namespace MediaWiki\Logger\Monolog;
+
+use MediaWiki\Logger\LegacyLogger;
+use Monolog\Formatter\NormalizerFormatter;
+
 /**
  * Log message formatter that mimics the legacy log message formatting of
  * `wfDebug`, `wfDebugLog`, `wfLogDBError` and `wfErrorLog` global functions by
- * delegating the formatting to MWLoggerLegacyLogger.
+ * delegating the formatting to \MediaWiki\Logger\LegacyLogger.
  *
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
- * @see MWLoggerLegacyLogger
+ * @see \MediaWiki\Logger\LegacyLogger
  */
-class MWLoggerMonologLegacyFormatter extends \Monolog\Formatter\NormalizerFormatter {
+class LegacyFormatter extends NormalizerFormatter {
 
        public function __construct() {
                parent::__construct( 'c' );
@@ -36,7 +41,7 @@ class MWLoggerMonologLegacyFormatter extends \Monolog\Formatter\NormalizerFormat
 
        public function format( array $record ) {
                $normalized = parent::format( $record );
-               return MWLoggerLegacyLogger::format(
+               return LegacyLogger::format(
                        $normalized['channel'], $normalized['message'], $normalized
                );
        }
diff --git a/includes/debug/logger/monolog/LegacyHandler.php b/includes/debug/logger/monolog/LegacyHandler.php
new file mode 100644 (file)
index 0000000..8405819
--- /dev/null
@@ -0,0 +1,243 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+use LogicException;
+use MediaWiki\Logger\LegacyLogger;
+use Monolog\Handler\AbstractProcessingHandler;
+use Monolog\Logger;
+use UnexpectedValueException;
+
+/**
+ * Log handler that replicates the behavior of MediaWiki's wfErrorLog()
+ * logging service. Log output can be directed to a local file, a PHP stream,
+ * or a udp2log server.
+ *
+ * For udp2log output, the stream specification must have the form:
+ * "udp://HOST:PORT[/PREFIX]"
+ * where:
+ * - HOST: IPv4, IPv6 or hostname
+ * - PORT: server port
+ * - PREFIX: optional (but recommended) prefix telling udp2log how to route
+ * the log event. The special prefix "{channel}" will use the log event's
+ * channel as the prefix value.
+ *
+ * When not targeting a udp2log stream this class will act as a drop-in
+ * replacement for Monolog's StreamHandler.
+ *
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
+ */
+class LegacyHandler extends AbstractProcessingHandler {
+
+       /**
+        * Log sink descriptor
+        * @var string $uri
+        */
+       protected $uri;
+
+       /**
+        * Filter log events using legacy rules
+        * @var bool $useLegacyFilter
+        */
+       protected $useLegacyFilter;
+
+       /**
+        * Log sink
+        * @var resource $sink
+        */
+       protected $sink;
+
+       /**
+        * @var string $error
+        */
+       protected $error;
+
+       /**
+        * @var string $host
+        */
+       protected $host;
+
+       /**
+        * @var int $port
+        */
+       protected $port;
+
+       /**
+        * @var string $prefix
+        */
+       protected $prefix;
+
+
+       /**
+        * @param string $stream Stream URI
+        * @param bool $useLegacyFilter Filter log events using legacy rules
+        * @param int $level Minimum logging level that will trigger handler
+        * @param bool $bubble Can handled meesages bubble up the handler stack?
+        */
+       public function __construct(
+               $stream,
+               $useLegacyFilter = false,
+               $level = Logger::DEBUG,
+               $bubble = true
+       ) {
+               parent::__construct( $level, $bubble );
+               $this->uri = $stream;
+               $this->useLegacyFilter = $useLegacyFilter;
+       }
+
+       /**
+        * Open the log sink described by our stream URI.
+        */
+       protected function openSink() {
+               if ( !$this->uri ) {
+                       throw new LogicException(
+                               'Missing stream uri, the stream can not be opened.' );
+               }
+               $this->error = null;
+               set_error_handler( array( $this, 'errorTrap' ) );
+
+               if ( substr( $this->uri, 0, 4 ) == 'udp:' ) {
+                       $parsed = parse_url( $this->uri );
+                       if ( !isset( $parsed['host'] ) ) {
+                               throw new UnexpectedValueException( sprintf(
+                                       'Udp transport "%s" must specify a host', $this->uri
+                               ) );
+                       }
+                       if ( !isset( $parsed['port'] ) ) {
+                               throw new UnexpectedValueException( sprintf(
+                                       'Udp transport "%s" must specify a port', $this->uri
+                               ) );
+                       }
+
+                       $this->host = $parsed['host'];
+                       $this->port = $parsed['port'];
+                       $this->prefix = '';
+
+                       if ( isset( $parsed['path'] ) ) {
+                               $this->prefix = ltrim( $parsed['path'], '/' );
+                       }
+
+                       if ( filter_var( $this->host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
+                               $domain = AF_INET6;
+
+                       } else {
+                               $domain = AF_INET;
+                       }
+
+                       $this->sink = socket_create( $domain, SOCK_DGRAM, SOL_UDP );
+
+               } else {
+                       $this->sink = fopen( $this->uri, 'a' );
+               }
+               restore_error_handler();
+
+               if ( !is_resource( $this->sink ) ) {
+                       $this->sink = null;
+                       throw new UnexpectedValueException( sprintf(
+                               'The stream or file "%s" could not be opened: %s',
+                               $this->uri, $this->error
+                       ) );
+               }
+       }
+
+
+       /**
+        * Custom error handler.
+        * @param int $code Error number
+        * @param string $msg Error message
+        */
+       protected function errorTrap( $code, $msg ) {
+               $this->error = $msg;
+       }
+
+
+       /**
+        * Should we use UDP to send messages to the sink?
+        * @return bool
+        */
+       protected function useUdp() {
+               return $this->host !== null;
+       }
+
+
+       protected function write( array $record ) {
+               if ( $this->useLegacyFilter &&
+                       !LegacyLogger::shouldEmit(
+                               $record['channel'], $record['message'],
+                               $record['level'], $record
+               ) ) {
+                       // Do not write record if we are enforcing legacy rules and they
+                       // do not pass this message. This used to be done in isHandling(),
+                       // but Monolog 1.12.0 made a breaking change that removed access
+                       // to the needed channel and context information.
+                       return;
+               }
+
+               if ( $this->sink === null ) {
+                       $this->openSink();
+               }
+
+               $text = (string)$record['formatted'];
+               if ( $this->useUdp() ) {
+
+                       // Clean it up for the multiplexer
+                       if ( $this->prefix !== '' ) {
+                               $leader = ( $this->prefix === '{channel}' ) ?
+                                       $record['channel'] : $this->prefix;
+                               $text = preg_replace( '/^/m', "{$leader} ", $text );
+
+                               // Limit to 64KB
+                               if ( strlen( $text ) > 65506 ) {
+                                       $text = substr( $text, 0, 65506 );
+                               }
+
+                               if ( substr( $text, -1 ) != "\n" ) {
+                                       $text .= "\n";
+                               }
+
+                       } elseif ( strlen( $text ) > 65507 ) {
+                               $text = substr( $text, 0, 65507 );
+                       }
+
+                       socket_sendto(
+                               $this->sink, $text, strlen( $text ), 0, $this->host, $this->port
+                       );
+
+               } else {
+                       fwrite( $this->sink, $text );
+               }
+       }
+
+
+       public function close() {
+               if ( is_resource( $this->sink ) ) {
+                       if ( $this->useUdp() ) {
+                               socket_close( $this->sink );
+
+                       } else {
+                               fclose( $this->sink );
+                       }
+               }
+               $this->sink = null;
+       }
+}
diff --git a/includes/debug/logger/monolog/Processor.php b/includes/debug/logger/monolog/Processor.php
deleted file mode 100644 (file)
index 4aa07f1..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
- */
-
-/**
- * Injects `wfHostname()` and `wfWikiID()` in all records.
- *
- * @since 1.25
- * @author Bryan Davis <bd808@wikimedia.org>
- * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
- */
-class MWLoggerMonologProcessor {
-
-       /**
-        * @param array $record
-        * @return array
-        */
-       public function __invoke( array $record ) {
-               $record['extra'] = array_merge(
-                       $record['extra'],
-                       array(
-                               'host' => wfHostname(),
-                               'wiki' => wfWikiID(),
-                       )
-               );
-               return $record;
-       }
-
-}
diff --git a/includes/debug/logger/monolog/SamplingHandler.php b/includes/debug/logger/monolog/SamplingHandler.php
deleted file mode 100644 (file)
index a9f83b0..0000000
+++ /dev/null
@@ -1,123 +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
- */
-
-use Monolog\Handler\HandlerInterface;
-use Monolog\Formatter\FormatterInterface;
-
-/**
- * Wrapper for another HandlerInterface that will only handle a percentage of
- * records offered to it.
- *
- * When HandlerInterface::handle() is called for a given record, it will be
- * handled or ignored with a one in N chance based on the sample factor given
- * for the handler.
- *
- * Usage with MWLoggerMonologSpi:
- * @code
- * $wgMWLoggerDefaultSpi = array(
- *   'class' => 'MWLoggerMonologSpi',
- *   'args' => array( array(
- *     'handlers' => array(
- *       'some-handler' => array( ... ),
- *       'sampled-some-handler' => array(
- *         'class' => 'MWLoggerMonologSamplingHandler',
- *         'args' => array(
- *           function() {
- *             return MWLoggerFactory::getProvider()->getHandler( 'some-handler');
- *           },
- *           2, // emit logs with a 1:2 chance
- *         ),
- *       ),
- *     ),
- *   ) ),
- * );
- * @endcode
- *
- * A sampled event stream can be useful for logging high frequency events in
- * a production environment where you only need an idea of what is happening
- * and are not concerned with capturing every occurence. Since the decision to
- * handle or not handle a particular event is determined randomly, the
- * resulting sampled log is not guaranteed to contain 1/N of the events that
- * occurred in the application but based on [[Law of large numbers]] it will
- * tend to be close to this ratio with a large number of attempts.
- *
- * @since 1.25
- * @author Bryan Davis <bd808@wikimedia.org>
- * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
- */
-class MWLoggerMonologSamplingHandler implements HandlerInterface {
-
-       /**
-        * @var HandlerInterface $delegate
-        */
-       protected $delegate;
-
-       /**
-        * @var int $factor
-        */
-       protected $factor;
-
-       /**
-        * @param HandlerInterface $handler Wrapped handler
-        * @param int $factor Sample factor
-        */
-       public function __construct( HandlerInterface $handler, $factor ) {
-               $this->delegate = $handler;
-               $this->factor = $factor;
-       }
-
-       public function isHandling( array $record ) {
-               return $this->delegate->isHandling( $record );
-       }
-
-       public function handle( array $record ) {
-               if ( $this->isHandling( $record )
-                       && mt_rand( 1, $this->factor ) === 1
-               ) {
-                       return $this->delegate->handle( $record );
-               }
-               return false;
-       }
-
-       public function handleBatch( array $records ) {
-               foreach ( $records as $record ) {
-                       $this->handle( $record );
-               }
-       }
-
-       public function pushProcessor( $callback ) {
-               $this->delegate->pushProcessor( $callback );
-               return $this;
-       }
-
-       public function popProcessor() {
-               return $this->delegate->popProcessor();
-       }
-
-       public function setFormatter( FormatterInterface $formatter ) {
-               $this->delegate->setFormatter( $formatter );
-               return $this;
-       }
-
-       public function getFormatter() {
-               return $this->delegate->getFormatter();
-       }
-
-}
diff --git a/includes/debug/logger/monolog/Shims.php b/includes/debug/logger/monolog/Shims.php
new file mode 100644 (file)
index 0000000..f250713
--- /dev/null
@@ -0,0 +1,69 @@
+<?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
+ */
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\LegacyHandler
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerMonologHandler extends \MediaWiki\Logger\Monolog\LegacyHandler {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\LegacyFormatter
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerMonologLegacyFormatter extends \MediaWiki\Logger\Monolog\LegacyFormatter {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\WikiProcessor
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerMonologProcessor extends \MediaWiki\Logger\Monolog\WikiProcessor {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\MonologSpi
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerMonologSpi extends \MediaWiki\Logger\MonologSpi {
+}
+
+/**
+ * Backwards compatibility stub for usage from before the introduction of
+ * the MediaWiki\Logger namespace.
+ *
+ * @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\SyslogHandler
+ * @todo This class should be removed before the 1.25 final release.
+ */
+class MWLoggerMonologSyslogHandler extends \MediaWiki\Logger\Monolog\SyslogHandler {
+}
diff --git a/includes/debug/logger/monolog/Spi.php b/includes/debug/logger/monolog/Spi.php
deleted file mode 100644 (file)
index 68acf1d..0000000
+++ /dev/null
@@ -1,246 +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
- */
-
-/**
- * MWLoggerFactory service provider that creates loggers implemented by
- * Monolog.
- *
- * Configured using an array of configuration data with the keys 'loggers',
- * 'processors', 'handlers' and 'formatters'.
- *
- * The ['loggers']['@default'] configuration will be used to create loggers
- * for any channel that isn't explicitly named in the 'loggers' configuration
- * section.
- *
- * Configuration will most typically be provided in the $wgMWLoggerDefaultSpi
- * global configuration variable used by MWLoggerFactory to construct its
- * default SPI provider:
- * @code
- * $wgMWLoggerDefaultSpi = array(
- *   'class' => 'MWLoggerMonologSpi',
- *   'args' => array( array(
- *       'loggers' => array(
- *           '@default' => array(
- *               'processors' => array( 'wiki', 'psr', 'pid', 'uid', 'web' ),
- *               'handlers'   => array( 'stream' ),
- *           ),
- *           'runJobs' => array(
- *               'processors' => array( 'wiki', 'psr', 'pid' ),
- *               'handlers'   => array( 'stream' ),
- *           )
- *       ),
- *       'processors' => array(
- *           'wiki' => array(
- *               'class' => 'MWLoggerMonologProcessor',
- *           ),
- *           'psr' => array(
- *               'class' => '\\Monolog\\Processor\\PsrLogMessageProcessor',
- *           ),
- *           'pid' => array(
- *               'class' => '\\Monolog\\Processor\\ProcessIdProcessor',
- *           ),
- *           'uid' => array(
- *               'class' => '\\Monolog\\Processor\\UidProcessor',
- *           ),
- *           'web' => array(
- *               'class' => '\\Monolog\\Processor\\WebProcessor',
- *           ),
- *       ),
- *       'handlers' => array(
- *           'stream' => array(
- *               'class'     => '\\Monolog\\Handler\\StreamHandler',
- *               'args'      => array( 'path/to/your.log' ),
- *               'formatter' => 'line',
- *           ),
- *           'redis' => array(
- *               'class'     => '\\Monolog\\Handler\\RedisHandler',
- *               'args'      => array( function() {
- *                       $redis = new Redis();
- *                       $redis->connect( '127.0.0.1', 6379 );
- *                       return $redis;
- *                   },
- *                   'logstash'
- *               ),
- *               'formatter' => 'logstash',
- *           ),
- *           'udp2log' => array(
- *               'class' => 'MWLoggerMonologHandler',
- *               'args' => array(
- *                   'udp://127.0.0.1:8420/mediawiki
- *               ),
- *               'formatter' => 'line',
- *           ),
- *       ),
- *       'formatters' => array(
- *           'line' => array(
- *               'class' => '\\Monolog\\Formatter\\LineFormatter',
- *            ),
- *            'logstash' => array(
- *                'class' => '\\Monolog\\Formatter\\LogstashFormatter',
- *                'args'  => array( 'mediawiki', php_uname( 'n' ), null, '', 1 ),
- *            ),
- *       ),
- *   ) ),
- * );
- * @endcode
- *
- * @see https://github.com/Seldaek/monolog
- * @since 1.25
- * @author Bryan Davis <bd808@wikimedia.org>
- * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
- */
-class MWLoggerMonologSpi implements MWLoggerSpi {
-
-       /**
-        * @var array $singletons
-        */
-       protected $singletons;
-
-       /**
-        * Configuration for creating new loggers.
-        * @var array $config
-        */
-       protected $config;
-
-
-       /**
-        * @param array $config Configuration data.
-        */
-       public function __construct( array $config ) {
-               $this->config = $config;
-               $this->reset();
-       }
-
-
-       /**
-        * Reset internal caches.
-        *
-        * This is public for use in unit tests. Under normal operation there should
-        * be no need to flush the caches.
-        */
-       public function reset() {
-               $this->singletons = array(
-                       'loggers'    => array(),
-                       'handlers'   => array(),
-                       'formatters' => array(),
-                       'processors' => array(),
-               );
-       }
-
-
-       /**
-        * Get a logger instance.
-        *
-        * Creates and caches a logger instance based on configuration found in the
-        * $wgMWLoggerMonologSpiConfig global. Subsequent request for the same channel
-        * name will return the cached instance.
-        *
-        * @param string $channel Logging channel
-        * @return \Psr\Log\LoggerInterface Logger instance
-        */
-       public function getLogger( $channel ) {
-               if ( !isset( $this->singletons['loggers'][$channel] ) ) {
-                       // Fallback to using the '@default' configuration if an explict
-                       // configuration for the requested channel isn't found.
-                       $spec = isset( $this->config['loggers'][$channel] ) ?
-                               $this->config['loggers'][$channel] :
-                               $this->config['loggers']['@default'];
-
-                       $monolog = $this->createLogger( $channel, $spec );
-                       $this->singletons['loggers'][$channel] = $monolog;
-               }
-
-               return $this->singletons['loggers'][$channel];
-       }
-
-
-       /**
-        * Create a logger.
-        * @param string $channel Logger channel
-        * @param array $spec Configuration
-        * @return \Monolog\Logger
-        */
-       protected function createLogger( $channel, $spec ) {
-               $obj = new \Monolog\Logger( $channel );
-
-               if ( isset( $spec['processors'] ) ) {
-                       foreach ( $spec['processors'] as $processor ) {
-                               $obj->pushProcessor( $this->getProcessor( $processor ) );
-                       }
-               }
-
-               if ( isset( $spec['handlers'] ) ) {
-                       foreach ( $spec['handlers'] as $handler ) {
-                               $obj->pushHandler( $this->getHandler( $handler ) );
-                       }
-               }
-               return $obj;
-       }
-
-
-       /**
-        * Create or return cached processor.
-        * @param string $name Processor name
-        * @return callable
-        */
-       public function getProcessor( $name ) {
-               if ( !isset( $this->singletons['processors'][$name] ) ) {
-                       $spec = $this->config['processors'][$name];
-                       $processor = ObjectFactory::getObjectFromSpec( $spec );
-                       $this->singletons['processors'][$name] = $processor;
-               }
-               return $this->singletons['processors'][$name];
-       }
-
-
-       /**
-        * Create or return cached handler.
-        * @param string $name Processor name
-        * @return \Monolog\Handler\HandlerInterface
-        */
-       public function getHandler( $name ) {
-               if ( !isset( $this->singletons['handlers'][$name] ) ) {
-                       $spec = $this->config['handlers'][$name];
-                       $handler = ObjectFactory::getObjectFromSpec( $spec );
-                       if ( isset( $spec['formatter'] ) ) {
-                               $handler->setFormatter(
-                                       $this->getFormatter( $spec['formatter'] )
-                               );
-                       }
-                       $this->singletons['handlers'][$name] = $handler;
-               }
-               return $this->singletons['handlers'][$name];
-       }
-
-
-       /**
-        * Create or return cached formatter.
-        * @param string $name Formatter name
-        * @return \Monolog\Formatter\FormatterInterface
-        */
-       public function getFormatter( $name ) {
-               if ( !isset( $this->singletons['formatters'][$name] ) ) {
-                       $spec = $this->config['formatters'][$name];
-                       $formatter = ObjectFactory::getObjectFromSpec( $spec );
-                       $this->singletons['formatters'][$name] = $formatter;
-               }
-               return $this->singletons['formatters'][$name];
-       }
-}
index 50c2fb5..008efbc 100644 (file)
@@ -18,6 +18,8 @@
  * @file
  */
 
+namespace MediaWiki\Logger\Monolog;
+
 use Monolog\Handler\SyslogUdpHandler;
 use Monolog\Logger;
 
@@ -44,7 +46,7 @@ use Monolog\Logger;
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2015 Bryan Davis and Wikimedia Foundation.
  */
-class MWLoggerMonologSyslogHandler extends SyslogUdpHandler {
+class SyslogHandler extends SyslogUdpHandler {
 
        /**
         * @var string $appname
diff --git a/includes/debug/logger/monolog/WikiProcessor.php b/includes/debug/logger/monolog/WikiProcessor.php
new file mode 100644 (file)
index 0000000..a52f636
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+/**
+ * Injects `wfHostname()` and `wfWikiID()` in all records.
+ *
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
+ */
+class WikiProcessor {
+
+       /**
+        * @param array $record
+        * @return array
+        */
+       public function __invoke( array $record ) {
+               $record['extra'] = array_merge(
+                       $record['extra'],
+                       array(
+                               'host' => wfHostname(),
+                               'wiki' => wfWikiID(),
+                       )
+               );
+               return $record;
+       }
+
+}
index e02cfbc..79a10e6 100644 (file)
@@ -43,11 +43,11 @@ class HTMLCacheUpdate implements DeferrableUpdate {
        }
 
        public function doUpdate() {
-
                $job = new HTMLCacheUpdateJob(
                        $this->mTitle,
                        array(
                                'table' => $this->mTable,
+                               'recursive' => true
                        ) + Job::newRootJobParams( // "overall" refresh links job info
                                "htmlCacheUpdate:{$this->mTable}:{$this->mTitle->getPrefixedText()}"
                        )
@@ -63,6 +63,5 @@ class HTMLCacheUpdate implements DeferrableUpdate {
                                $job->run(); // just do the purge query now
                        } );
                }
-
        }
 }
index 9c377df..e4f00e7 100644 (file)
@@ -228,12 +228,24 @@ class LinksUpdate extends SqlDataUpdate {
         * Which means do LinksUpdate on all pages that include the current page,
         * using the job queue.
         */
-       function queueRecursiveJobs() {
+       protected function queueRecursiveJobs() {
                self::queueRecursiveJobsForTable( $this->mTitle, 'templatelinks' );
                if ( $this->mTitle->getNamespace() == NS_FILE ) {
                        // Process imagelinks in case the title is or was a redirect
                        self::queueRecursiveJobsForTable( $this->mTitle, 'imagelinks' );
                }
+
+               $bc = $this->mTitle->getBacklinkCache();
+               // Get jobs for cascade-protected backlinks for a high priority queue.
+               // If meta-templates change to using a new template, the new template
+               // should be implicitly protected as soon as possible, if applicable.
+               // These jobs duplicate a subset of the above ones, but can run sooner.
+               // Which ever runs first generally no-ops the other one.
+               $jobs = array();
+               foreach ( $bc->getCascadeProtectedLinks() as $title ) {
+                       $jobs[] = new RefreshLinksJob( $title, array( 'prioritize' => true ) );
+               }
+               JobQueueGroup::singleton()->push( $jobs );
        }
 
        /**
@@ -253,6 +265,7 @@ class LinksUpdate extends SqlDataUpdate {
                                        "refreshlinks:{$table}:{$title->getPrefixedText()}"
                                )
                        );
+
                        JobQueueGroup::singleton()->push( $job );
                        JobQueueGroup::singleton()->deduplicateRootJob( $job );
                }
index 97a17c3..3c77238 100644 (file)
@@ -128,7 +128,7 @@ class SiteStatsUpdate implements DeferrableUpdate {
         */
        public static function cacheUpdate( $dbw ) {
                global $wgActiveUserDays;
-               $dbr = wfGetDB( DB_SLAVE, array( 'SpecialStatistics', 'vslow' ) );
+               $dbr = wfGetDB( DB_SLAVE, 'vslow' );
                # Get non-bot users than did some recent action other than making accounts.
                # If account creation is included, the number gets inflated ~20+ fold on enwiki.
                $activeUsers = $dbr->selectField(
index 5823b2e..49164e3 100644 (file)
@@ -111,39 +111,40 @@ abstract class SqlDataUpdate extends DataUpdate {
                        return;
                }
 
-               /**
-                * Determine which pages need to be updated
-                * This is necessary to prevent the job queue from smashing the DB with
-                * large numbers of concurrent invalidations of the same page
-                */
-               $now = $this->mDb->timestamp();
-               $ids = array();
-               $res = $this->mDb->select( 'page', array( 'page_id' ),
-                       array(
-                               'page_namespace' => $namespace,
-                               'page_title' => $dbkeys,
-                               'page_touched < ' . $this->mDb->addQuotes( $now )
-                       ), __METHOD__
-               );
-
-               foreach ( $res as $row ) {
-                       $ids[] = $row->page_id;
-               }
-
-               if ( $ids === array() ) {
-                       return;
-               }
-
-               /**
-                * Do the update
-                * We still need the page_touched condition, in case the row has changed since
-                * the non-locking select above.
-                */
-               $this->mDb->update( 'page', array( 'page_touched' => $now ),
-                       array(
-                               'page_id' => $ids,
-                               'page_touched < ' . $this->mDb->addQuotes( $now )
-                       ), __METHOD__
-               );
+               $dbw = $this->mDb;
+               $dbw->onTransactionPreCommitOrIdle( function() use ( $dbw, $namespace, $dbkeys ) {
+                       /**
+                        * Determine which pages need to be updated
+                        * This is necessary to prevent the job queue from smashing the DB with
+                        * large numbers of concurrent invalidations of the same page
+                        */
+                       $now = $dbw->timestamp();
+                       $ids = $dbw->selectFieldValues( 'page',
+                               'page_id',
+                               array(
+                                       'page_namespace' => $namespace,
+                                       'page_title' => $dbkeys,
+                                       'page_touched < ' . $dbw->addQuotes( $now )
+                               ),
+                               __METHOD__
+                       );
+
+                       if ( $ids === array() ) {
+                               return;
+                       }
+
+                       /**
+                        * Do the update
+                        * We still need the page_touched condition, in case the row has changed since
+                        * the non-locking select above.
+                        */
+                       $dbw->update( 'page',
+                               array( 'page_touched' => $now ),
+                               array(
+                                       'page_id' => $ids,
+                                       'page_touched < ' . $dbw->addQuotes( $now )
+                               ), __METHOD__
+                       );
+               } );
        }
 }
index 1bd2092..77bbd36 100644 (file)
@@ -94,6 +94,10 @@ class DifferenceEngine extends ContextSource {
 
        /** @var bool Show rev_deleted content if allowed */
        protected $unhide = false;
+
+       /** @var bool Refresh the diff cache */
+       protected $mRefreshCache = false;
+
        /**#@-*/
 
        /**
@@ -546,7 +550,7 @@ class DifferenceEngine extends ContextSource {
                $out = $this->getOutput();
                $revHeader = $this->getRevisionHeader( $this->mNewRev );
                # Add "current version as of X" title
-               $out->addHTML( "<hr class='diff-hr' />
+               $out->addHTML( "<hr class='diff-hr' id='mw-oldid' />
                <h2 class='diff-currentversion-title'>{$revHeader}</h2>\n" );
                # Page content may be handled by a hooked call instead...
                # @codingStandardsIgnoreStart Ignoring long lines.
index e5155bf..5d0183f 100644 (file)
@@ -62,7 +62,7 @@ class TableDiffFormatter extends DiffFormatter {
        protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
                // '<!--LINE \d+ -->' get replaced by a localised line number
                // in DifferenceEngine::localiseLineNumbers
-               $r = '<tr><td colspan="2" class="diff-lineno"><!--LINE ' . $xbeg . "--></td>\n" .
+               $r = '<tr><td colspan="2" class="diff-lineno" id="L' . $xbeg . '" ><!--LINE ' . $xbeg . "--></td>\n" .
                        '<td colspan="2" class="diff-lineno"><!--LINE ' . $ybeg . "--></td></tr>\n";
 
                return $r;
index 6ab6e03..b81c573 100644 (file)
@@ -18,6 +18,8 @@
  * @file
  */
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * Show an error that looks like an HTTP server error.
  * Replacement for wfHttpError().
@@ -42,6 +44,19 @@ class HttpError extends MWException {
                $this->content = $content;
        }
 
+       /**
+        * We don't want the default exception logging as we got our own logging set
+        * up in self::report.
+        *
+        * @see MWException::isLoggable
+        *
+        * @since 1.24
+        * @return bool
+        */
+       public function isLoggable() {
+               return false;
+       }
+
        /**
         * Returns the HTTP status code supplied to the constructor.
         *
@@ -52,11 +67,13 @@ class HttpError extends MWException {
        }
 
        /**
-        * Report the HTTP error.
+        * Report and log the HTTP error.
         * Sends the appropriate HTTP status code and outputs an
         * HTML page with an error message.
         */
        public function report() {
+               $this->doLog();
+
                $httpMessage = HttpStatus::getMessage( $this->httpCode );
 
                header( "Status: {$this->httpCode} {$httpMessage}", true, $this->httpCode );
@@ -65,6 +82,29 @@ class HttpError extends MWException {
                print $this->getHTML();
        }
 
+       private function doLog() {
+               $logger = LoggerFactory::getInstance( 'HttpError' );
+               $content = $this->content;
+
+               if ( $content instanceof Message ) {
+                       $content = $content->text();
+               }
+
+               $context = array(
+                       'file' => $this->getFile(),
+                       'line' => $this->getLine(),
+                       'http_code' => $this->httpCode,
+               );
+
+               $logMsg = "$content ({http_code}) from {file}:{line}";
+
+               if ( $this->getStatusCode() < 500 ) {
+                       $logger->info( $logMsg, $context );
+               } else {
+                       $logger->error( $logMsg, $context );
+               }
+       }
+
        /**
         * Returns HTML for reporting the HTTP error.
         * This will be a minimal but complete HTML document.
index 6fd6fb5..478fead 100644 (file)
@@ -117,10 +117,12 @@ class MWException extends Exception {
                $args = array_slice( func_get_args(), 2 );
 
                if ( $this->useMessageCache() ) {
-                       return wfMessage( $key, $args )->text();
-               } else {
-                       return wfMsgReplaceArgs( $fallback, $args );
+                       try {
+                               return wfMessage( $key, $args )->text();
+                       } catch ( Exception $e ) {
+                       }
                }
+               return wfMsgReplaceArgs( $fallback, $args );
        }
 
        /**
@@ -139,10 +141,17 @@ class MWException extends Exception {
                        nl2br( htmlspecialchars( MWExceptionHandler::getRedactedTraceAsString( $this ) ) ) .
                        "</p>\n";
                } else {
+                       $logId = MWExceptionHandler::getLogId( $this );
+                       $type = get_class( $this );
                        return "<div class=\"errorbox\">" .
-                       '[' . MWExceptionHandler::getLogId( $this ) . '] ' .
-                       gmdate( 'Y-m-d H:i:s' ) .
-                       ": Fatal exception of type " . get_class( $this ) . "</div>\n" .
+                       '[' . $logId . '] ' .
+                       gmdate( 'Y-m-d H:i:s' ) . ": " .
+                       $this->msg( "internalerror-fatal-exception",
+                               "Fatal exception of type $1",
+                               $type,
+                               $logId,
+                               MWExceptionHandler::getURL( $this )
+                       ) . "</div>\n" .
                        "<!-- Set \$wgShowExceptionDetails = true; " .
                        "at the bottom of LocalSettings.php to show detailed " .
                        "debugging information. -->";
index 77ab6ad..c50b6c8 100644 (file)
@@ -150,22 +150,24 @@ class MWExceptionHandler {
         * @since 1.25
         * @param Exception $e
         */
-       public static function handleException( $e ) {
-               global $wgFullyInitialised;
+       public static function handleException( Exception $e ) {
+               try {
+                       // Rollback DBs to avoid transaction notices. This may fail
+                       // to rollback some DB due to connection issues or exceptions.
+                       // However, any sane DB driver will rollback implicitly anyway.
+                       self::rollbackMasterChangesAndLog( $e );
+               } catch ( DBError $e2 ) {
+                       // If the DB is unreacheable, rollback() will throw an error
+                       // and the error report() method might need messages from the DB,
+                       // which would result in an exception loop. PHP may escalate such
+                       // errors to "Exception thrown without a stack frame" fatals, but
+                       // it's better to be explicit here.
+                       self::logException( $e2 );
+               }
 
-               self::rollbackMasterChangesAndLog( $e );
                self::logException( $e );
                self::report( $e );
 
-               // Final cleanup
-               if ( $wgFullyInitialised ) {
-                       try {
-                               // uses $wgRequest, hence the $wgFullyInitialised condition
-                               wfLogProfilingData();
-                       } catch ( Exception $e ) {
-                       }
-               }
-
                // Exit value should be nonzero for the benefit of shell jobs
                exit( 1 );
        }
@@ -179,6 +181,7 @@ class MWExceptionHandler {
         */
        public static function handleError( $level, $message, $file = null, $line = null ) {
                // Map error constant to error name (reverse-engineer PHP error reporting)
+               $channel = 'error';
                switch ( $level ) {
                        case E_ERROR:
                        case E_CORE_ERROR:
@@ -187,6 +190,7 @@ class MWExceptionHandler {
                        case E_RECOVERABLE_ERROR:
                        case E_PARSE:
                                $levelName = 'Error';
+                               $channel = 'fatal';
                                break;
                        case E_WARNING:
                        case E_CORE_WARNING:
@@ -207,6 +211,7 @@ class MWExceptionHandler {
                                break;
                        case /* HHVM's FATAL_ERROR */ 16777217:
                                $levelName = 'Fatal';
+                               $channel = 'fatal';
                                break;
                        default:
                                $levelName = 'Unknown error';
@@ -214,7 +219,7 @@ class MWExceptionHandler {
                }
 
                $e = new ErrorException( "PHP $levelName: $message", 0, $level, $file, $line );
-               self::logError( $e );
+               self::logError( $e, $channel );
 
                // This handler is for logging only. Return false will instruct PHP
                // to continue regular handling.
@@ -246,6 +251,7 @@ class MWExceptionHandler {
                        if ( preg_match( "/Class (undefined: \w+|'\w+' not found)/",
                                $lastError['message']
                        ) ) {
+                               // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
                                $msg = <<<TXT
 {$msg}
 
@@ -253,9 +259,10 @@ MediaWiki or an installed extension requires this class but it is not embedded d
 
 Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a> for help on installing the required components.
 TXT;
+                               // @codingStandardsIgnoreEnd
                        }
                        $e = new ErrorException( $msg, 0, $lastError['type'] );
-                       self::logError( $e );
+                       self::logError( $e, 'fatal' );
                }
        }
 
@@ -344,7 +351,7 @@ TXT;
         * returns the requested URL. Otherwise, returns false.
         *
         * @since 1.23
-        * @return string|bool
+        * @return string|false
         */
        public static function getURL() {
                global $wgRequest;
@@ -423,7 +430,7 @@ TXT;
         * @param Exception $e
         * @param bool $pretty Add non-significant whitespace to improve readability (default: false).
         * @param int $escaping Bitfield consisting of FormatJson::.*_OK class constants.
-        * @return string|bool JSON string if successful; false upon failure
+        * @return string|false JSON string if successful; false upon failure
         */
        public static function jsonSerializeException( Exception $e, $pretty = false, $escaping = 0 ) {
                global $wgLogExceptionBacktrace;
@@ -487,8 +494,9 @@ TXT;
         *
         * @since 1.25
         * @param ErrorException $e
+        * @param string $channel
        */
-       protected static function logError( ErrorException $e ) {
+       protected static function logError( ErrorException $e, $channel ) {
                global $wgLogExceptionBacktrace;
 
                // The set_error_handler callback is independent from error_reporting.
@@ -496,16 +504,16 @@ TXT;
                if ( ( error_reporting() & $e->getSeverity() ) !== 0 ) {
                        $log = self::getLogMessage( $e );
                        if ( $wgLogExceptionBacktrace ) {
-                               wfDebugLog( 'error', $log . "\n" . $e->getTraceAsString() );
+                               wfDebugLog( $channel, $log . "\n" . $e->getTraceAsString() );
                        } else {
-                               wfDebugLog( 'error', $log );
+                               wfDebugLog( $channel, $log );
                        }
                }
 
                // Include all errors in the json log (surpressed errors will be flagged)
                $json = self::jsonSerializeException( $e, false, FormatJson::ALL_OK );
                if ( $json !== false ) {
-                       wfDebugLog( 'error-json', $json, 'private' );
+                       wfDebugLog( "$channel-json", $json, 'private' );
                }
        }
 }
index 345c17b..00030d8 100644 (file)
@@ -31,7 +31,7 @@ class ExternalStoreHttp extends ExternalStoreMedium {
         * @see ExternalStoreMedium::fetchFromURL()
         */
        public function fetchFromURL( $url ) {
-               return Http::get( $url );
+               return Http::get( $url, array(), __METHOD__ );
        }
 
        /**
index c00fb81..07370ad 100644 (file)
@@ -681,6 +681,11 @@ class FSFileBackend extends FileBackendStore {
                return false;
        }
 
+       /**
+        * @param FileBackendStoreOpHandle[] $fileOpHandles
+        *
+        * @return Status[]
+        */
        protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
                $statuses = array();
 
index de189ec..25e87d4 100644 (file)
@@ -1188,9 +1188,9 @@ abstract class FileBackendStore extends FileBackend {
         * The resulting Status object fields will correspond
         * to the order in which the handles where given.
         *
-        * @param array $fileOpHandles
+        * @param FileBackendStoreOpHandle[] $fileOpHandles
+        *
         * @throws FileBackendError
-        * @internal param array $handles List of FileBackendStoreOpHandle objects
         * @return array Map of Status objects
         */
        final public function executeOpHandlesInternal( array $fileOpHandles ) {
@@ -1213,9 +1213,11 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::executeOpHandlesInternal()
-        * @param array $fileOpHandles
+        *
+        * @param FileBackendStoreOpHandle[] $fileOpHandles
+        *
         * @throws FileBackendError
-        * @return array List of corresponding Status objects
+        * @return Status[] List of corresponding Status objects
         */
        protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
                if ( count( $fileOpHandles ) ) {
index 836fd49..5f406c9 100644 (file)
@@ -1171,6 +1171,11 @@ class SwiftFileBackend extends FileBackendStore {
                return $hdrs;
        }
 
+       /**
+        * @param FileBackendStoreOpHandle[] $fileOpHandles
+        *
+        * @return Status[]
+        */
        protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
                $statuses = array();
 
index d1a16b5..5b42c2c 100644 (file)
@@ -406,6 +406,7 @@ class FileRepo {
         *   private:        If true, return restricted (deleted) files if the current
         *                   user is allowed to view them. Otherwise, such files will not
         *                   be found. If a User object, use that user instead of the current.
+        *   latest:         If true, load from the latest available data into File objects
         * @return File|bool False on failure
         */
        public function findFile( $title, $options = array() ) {
@@ -413,18 +414,24 @@ class FileRepo {
                if ( !$title ) {
                        return false;
                }
+               if ( isset( $options['bypassCache'] ) ) {
+                       $options['latest'] = $options['bypassCache']; // b/c
+               }
                $time = isset( $options['time'] ) ? $options['time'] : false;
+               $flags = !empty( $options['latest'] ) ? File::READ_LATEST : 0;
                # First try the current version of the file to see if it precedes the timestamp
                $img = $this->newFile( $title );
                if ( !$img ) {
                        return false;
                }
+               $img->load( $flags );
                if ( $img->exists() && ( !$time || $img->getTimestamp() == $time ) ) {
                        return $img;
                }
                # Now try an old version of the file
                if ( $time !== false ) {
                        $img = $this->newFile( $title, $time );
+                       $img->load( $flags );
                        if ( $img && $img->exists() ) {
                                if ( !$img->isDeleted( File::DELETED_FILE ) ) {
                                        return $img; // always OK
@@ -445,6 +452,7 @@ class FileRepo {
                $redir = $this->checkRedirect( $title );
                if ( $redir && $title->getNamespace() == NS_FILE ) {
                        $img = $this->newFile( $redir );
+                       $img->load( $flags );
                        if ( !$img ) {
                                return false;
                        }
index daf26ba..67080b6 100644 (file)
@@ -26,4 +26,5 @@
  * @ingroup FileRepo
  * @deprecated 1.25
  */
-class FileRepoStatus extends Status {}
+class FileRepoStatus extends Status {
+}
index 6924f0a..7ead968 100644 (file)
@@ -514,7 +514,7 @@ class ForeignAPIRepo extends FileRepo {
                        $options['timeout'] = 'default';
                }
 
-               $req = MWHttpRequest::factory( $url, $options );
+               $req = MWHttpRequest::factory( $url, $options, __METHOD__ );
                $req->setUserAgent( ForeignAPIRepo::getUserAgent() );
                $status = $req->execute();
 
index fab4216..050c429 100644 (file)
@@ -114,7 +114,7 @@ class RepoGroup {
         *   private:        If true, return restricted (deleted) files if the current
         *                   user is allowed to view them. Otherwise, such files will not
         *                   be found.
-        *   bypassCache:    If true, do not use the process-local cache of File objects
+        *   latest:         If true, load from the latest available data into File objects
         * @return File|bool False if title is not found
         */
        function findFile( $title, $options = array() ) {
@@ -122,6 +122,10 @@ class RepoGroup {
                        // MW 1.15 compat
                        $options = array( 'time' => $options );
                }
+               if ( isset( $options['bypassCache'] ) ) {
+                       $options['latest'] = $options['bypassCache']; // b/c
+               }
+
                if ( !$this->reposInitialised ) {
                        $this->initialiseRepos();
                }
index 5b0d8e2..1d45428 100644 (file)
@@ -100,8 +100,9 @@ class ArchivedFile {
         * @param Title $title
         * @param int $id
         * @param string $key
+        * @param string $sha1
         */
-       function __construct( $title, $id = 0, $key = '' ) {
+       function __construct( $title, $id = 0, $key = '', $sha1 = '' ) {
                $this->id = -1;
                $this->title = false;
                $this->name = false;
@@ -136,7 +137,11 @@ class ArchivedFile {
                        $this->key = $key;
                }
 
-               if ( !$id && !$key && !( $title instanceof Title ) ) {
+               if ( $sha1 ) {
+                       $this->sha1 = $sha1;
+               }
+
+               if ( !$id && !$key && !( $title instanceof Title ) && !$sha1 ) {
                        throw new MWException( "No specifications provided to ArchivedFile constructor." );
                }
        }
@@ -162,6 +167,9 @@ class ArchivedFile {
                if ( $this->title ) {
                        $conds['fa_name'] = $this->title->getDBkey();
                }
+               if ( $this->sha1 ) {
+                       $conds['fa_sha1'] = $this->sha1;
+               }
 
                if ( !count( $conds ) ) {
                        throw new MWException( "No specific information for retrieving archived file" );
index 6ca61b2..6edd6fc 100644 (file)
@@ -47,7 +47,7 @@
  *
  * @ingroup FileAbstraction
  */
-abstract class File {
+abstract class File implements IDBAccessObject {
        // Bitfield values akin to the Revision deletion constants
        const DELETED_FILE = 1;
        const DELETED_COMMENT = 2;
@@ -836,6 +836,18 @@ abstract class File {
                return false;
        }
 
+       /**
+        * Load any lazy-loaded file object fields from source
+        *
+        * This is only useful when setting $flags
+        *
+        * Overridden by LocalFile to actually query the DB
+        *
+        * @param integer $flags Bitfield of File::READ_* constants
+        */
+       public function load( $flags = 0 ) {
+       }
+
        /**
         * Returns true if file exists in the repository.
         *
@@ -1765,14 +1777,15 @@ abstract class File {
        }
 
        /**
+        * @param bool|IContextSource $context Context to use (optional)
         * @return bool
         */
-       function formatMetadata() {
+       function formatMetadata( $context = false ) {
                if ( !$this->getHandler() ) {
                        return false;
                }
 
-               return $this->getHandler()->formatMetadata( $this, $this->getMetadata() );
+               return $this->getHandler()->formatMetadata( $this, $context );
        }
 
        /**
@@ -2008,7 +2021,7 @@ abstract class File {
                                wfDebug( "miss\n" );
                        }
                        wfDebug( "Fetching shared description from $renderUrl\n" );
-                       $res = Http::get( $renderUrl );
+                       $res = Http::get( $renderUrl, array(), __METHOD__ );
                        if ( $res && $this->repo->descriptionCacheExpiry > 0 ) {
                                $wgMemc->set( $key, $res, $this->repo->descriptionCacheExpiry );
                        }
index 699c915..b4cced3 100644 (file)
@@ -124,13 +124,8 @@ class LocalFile extends File {
        /** @var bool True if file is not present in file system. Not to be cached in memcached */
        private $missing;
 
-       /** @var int UNIX timestamp of last markVolatile() call */
-       private $lastMarkedVolatile = 0;
-
-       const LOAD_ALL = 1; // integer; load all the lazy fields too (like metadata)
-       const LOAD_VIA_SLAVE = 2; // integer; use a slave to load the data
-
-       const VOLATILE_TTL = 300; // integer; seconds
+       // @note: higher than IDBAccessObject constants
+       const LOAD_ALL = 16; // integer; load all the lazy fields too (like metadata)
 
        /**
         * Create a LocalFile from a title
@@ -387,9 +382,9 @@ class LocalFile extends File {
                $this->dataLoaded = true;
                $this->extraDataLoaded = true;
 
-               $dbr = ( $flags & self::LOAD_VIA_SLAVE )
-                       ? $this->repo->getSlaveDB()
-                       : $this->repo->getMasterDB();
+               $dbr = ( $flags & self::READ_LATEST )
+                       ? $this->repo->getMasterDB()
+                       : $this->repo->getSlaveDB();
 
                $row = $dbr->selectRow( 'image', $this->getCacheFields( 'img_' ),
                        array( 'img_name' => $this->getName() ), $fname );
@@ -530,13 +525,14 @@ class LocalFile extends File {
         */
        function load( $flags = 0 ) {
                if ( !$this->dataLoaded ) {
-                       if ( !$this->loadFromCache() ) {
-                               $this->loadFromDB( $this->isVolatile() ? 0 : self::LOAD_VIA_SLAVE );
+                       if ( ( $flags & self::READ_LATEST ) || !$this->loadFromCache() ) {
+                               $this->loadFromDB( $flags );
                                $this->saveToCache();
                        }
                        $this->dataLoaded = true;
                }
                if ( ( $flags & self::LOAD_ALL ) && !$this->extraDataLoaded ) {
+                       // @note: loads on name/timestamp to reduce race condition problems
                        $this->loadExtraFromDB();
                }
        }
@@ -846,7 +842,7 @@ class LocalFile extends File {
         * Refresh metadata in memcached, but don't touch thumbnails or squid
         */
        function purgeMetadataCache() {
-               $this->loadFromDB();
+               $this->loadFromDB( File::READ_LATEST );
                $this->saveToCache();
                $this->purgeHistory();
        }
@@ -1788,7 +1784,10 @@ class LocalFile extends File {
                // itself gets it from elsewhere. To avoid repeating the DB lookups in such a case, we
                // need to differentiate between null (uninitialized) and false (failed to load).
                if ( $this->descriptionTouched === null ) {
-                       $cond = array( 'page_namespace' => $this->title->getNamespace(), 'page_title' => $this->title->getDBkey() );
+                       $cond = array(
+                               'page_namespace' => $this->title->getNamespace(),
+                               'page_title' => $this->title->getDBkey()
+                       );
                        $touched = $this->repo->getSlaveDB()->selectField( 'page', 'page_touched', $cond, __METHOD__ );
                        $this->descriptionTouched = $touched ? wfTimestamp( TS_MW, $touched ) : false;
                }
@@ -1861,8 +1860,6 @@ class LocalFile extends File {
                        } );
                }
 
-               $this->markVolatile(); // file may change soon
-
                return $this->lockedOwnTrx;
        }
 
@@ -1881,48 +1878,6 @@ class LocalFile extends File {
                }
        }
 
-       /**
-        * Mark a file as about to be changed
-        *
-        * This sets a cache key that alters master/slave DB loading behavior
-        *
-        * @return bool Success
-        */
-       protected function markVolatile() {
-               global $wgMemc;
-
-               $key = $this->repo->getSharedCacheKey( 'file-volatile', md5( $this->getName() ) );
-               if ( $key ) {
-                       $this->lastMarkedVolatile = time();
-                       return $wgMemc->set( $key, $this->lastMarkedVolatile, self::VOLATILE_TTL );
-               }
-
-               return true;
-       }
-
-       /**
-        * Check if a file is about to be changed or has been changed recently
-        *
-        * @see LocalFile::isVolatile()
-        * @return bool Whether the file is volatile
-        */
-       protected function isVolatile() {
-               global $wgMemc;
-
-               $key = $this->repo->getSharedCacheKey( 'file-volatile', md5( $this->getName() ) );
-               if ( !$key ) {
-                       // repo unavailable; bail.
-                       return false;
-               }
-
-               if ( $this->lastMarkedVolatile === 0 ) {
-                       $this->lastMarkedVolatile = $wgMemc->get( $key ) ?: 0;
-               }
-
-               $volatileDuration = time() - $this->lastMarkedVolatile;
-               return $volatileDuration <= self::VOLATILE_TTL;
-       }
-
        /**
         * Roll back the DB transaction and mark the image unlocked
         */
index 73c614a..fd92e11 100644 (file)
@@ -175,10 +175,12 @@ class OldLocalFile extends LocalFile {
        }
 
        function loadFromDB( $flags = 0 ) {
-
                $this->dataLoaded = true;
 
-               $dbr = $this->repo->getSlaveDB();
+               $dbr = ( $flags & self::READ_LATEST )
+                       ? $this->repo->getMasterDB()
+                       : $this->repo->getSlaveDB();
+
                $conds = array( 'oi_name' => $this->getName() );
                if ( is_null( $this->requestedTime ) ) {
                        $conds['oi_archive_name'] = $this->archive_name;
index ac61067..7a0206c 100644 (file)
@@ -133,6 +133,8 @@ class TraditionalImageGallery extends ImageGalleryBase {
 
                                $this->adjustImageParameters( $thumb, $imageParameters );
 
+                               Linker::processResponsiveImages( $img, $thumb, $transformOptions );
+
                                # Set both fixed width and min-height.
                                $thumbhtml = "\n\t\t\t"
                                        . '<div class="thumb" style="width: '
index e54f748..4942327 100644 (file)
@@ -58,23 +58,16 @@ class HTMLCheckField extends HTMLFormField {
         * @return string
         */
        function loadDataFromRequest( $request ) {
-               $invert = false;
-               if ( isset( $this->mParams['invert'] ) && $this->mParams['invert'] ) {
-                       $invert = true;
-               }
+               $invert = isset( $this->mParams['invert'] ) && $this->mParams['invert'];
 
                // GetCheck won't work like we want for checks.
                // Fetch the value in either one of the two following case:
                // - we have a valid token (form got posted or GET forged by the user)
                // - checkbox name has a value (false or true), ie is not null
                if ( $request->getCheck( 'wpEditToken' ) || $request->getVal( $this->mName ) !== null ) {
-                       // XOR has the following truth table, which is what we want
-                       // INVERT VALUE | OUTPUT
-                       // true   true  | false
-                       // false  true  | true
-                       // false  false | false
-                       // true   false | true
-                       return $request->getBool( $this->mName ) xor $invert;
+                       return $invert
+                               ? !$request->getBool( $this->mName )
+                               : $request->getBool( $this->mName );
                } else {
                        return $this->getDefault();
                }
index 908fdf2..39ed24f 100644 (file)
@@ -207,6 +207,7 @@ class HTMLForm extends ContextSource {
                'table',
                'div',
                'raw',
+               'inline',
        );
 
        /**
@@ -1366,6 +1367,8 @@ class HTMLForm extends ContextSource {
                                $html = Html::rawElement( 'table',
                                                $attribs,
                                                Html::rawElement( 'tbody', array(), "\n$html\n" ) ) . "\n";
+                       } elseif ( $displayFormat === 'inline' ) {
+                               $html = Html::rawElement( 'span', $attribs, "\n$html\n" );
                        } else {
                                $html = Html::rawElement( 'div', $attribs, "\n$html\n" );
                        }
index 645b507..9576c77 100644 (file)
@@ -566,6 +566,27 @@ abstract class HTMLFormField {
                return $this->getDiv( $value );
        }
 
+       /**
+        * Get the complete field as an inline element.
+        * @since 1.25
+        * @param string $value The value to set the input to.
+        * @return string Complete HTML inline element
+        */
+       public function getInline( $value ) {
+               list( $errors, $errorClass ) = $this->getErrorsAndErrorClass( $value );
+               $inputHtml = $this->getInputHTML( $value );
+               $helptext = $this->getHelpTextHtmlDiv( $this->getHelpText() );
+               $cellAttributes = array();
+               $label = $this->getLabelHtml( $cellAttributes );
+
+               $html = "\n" . $errors .
+                       $label . '&#160;' .
+                       $inputHtml .
+                       $helptext;
+
+               return $html;
+       }
+
        /**
         * Generate help text HTML in table format
         * @since 1.20
index 8765407..0f00540 100644 (file)
@@ -56,7 +56,7 @@ class HTMLRadioField extends HTMLFormField {
 
                                $html .= ' ' . Html::rawElement(
                                        'div',
-                                       array( 'class' => 'mw-htmlform-flatlist-item' ),
+                                       array( 'class' => 'mw-htmlform-flatlist-item mw-ui-radio' ),
                                        $radio
                                );
                        }
index eac9423..8075de5 100644 (file)
@@ -1,14 +1,30 @@
 <?php
 /**
- * Wrapper for ChgangeTags::buildTagFilterSelector to use in HTMLForm
+ * Wrapper for ChangeTags::buildTagFilterSelector to use in HTMLForm
  */
 class HTMLTagFilter extends HTMLFormField {
+       protected $tagFilter;
+
+       function getTableRow( $value ) {
+               $this->tagFilter = ChangeTags::buildTagFilterSelector( $value );
+               if ( $this->tagFilter ) {
+                       return parent::getTableRow( $value );
+               }
+               return '';
+       }
+
+       function getDiv( $value ) {
+               $this->tagFilter = ChangeTags::buildTagFilterSelector( $value );
+               if ( $this->tagFilter ) {
+                       return parent::getDiv( $value );
+               }
+               return '';
+       }
+
        function getInputHTML( $value ) {
-               $tagFilter = ChangeTags::buildTagFilterSelector( $value );
-               if ( $tagFilter ) {
-                       list( $tagFilterLabel, $tagFilterSelector ) = $tagFilter;
+               if ( $this->tagFilter ) {
                        // we only need the select field, HTMLForm should handle the label
-                       return $tagFilterSelector;
+                       return $this->tagFilter[1];
                }
                return '';
        }
index 1c15ad0..6ccf2d5 100644 (file)
@@ -369,12 +369,17 @@ abstract class DatabaseInstaller {
        }
 
        /**
-        * Get a name=>value map of MW configuration globals that overrides.
-        * DefaultSettings.php
+        * Get a name=>value map of MW configuration globals for the default values.
         * @return array
         */
        public function getGlobalDefaults() {
-               return array();
+               $defaults = array();
+               foreach ( $this->getGlobalNames() as $var ) {
+                       if ( isset( $GLOBALS[$var] ) ) {
+                               $defaults[$var] = $GLOBALS[$var];
+                       }
+               }
+               return $defaults;
        }
 
        /**
index b676f45..12ef91a 100644 (file)
@@ -932,7 +932,8 @@ abstract class DatabaseUpdater {
                if ( $wgLocalisationCacheConf['manualRecache'] ) {
                        $this->rebuildLocalisationCache();
                }
-               MessageBlobStore::getInstance()->clear();
+               $blobStore = new MessageBlobStore();
+               $blobStore->clear();
                $this->output( "done.\n" );
        }
 
index dc52554..f9c885d 100644 (file)
@@ -186,7 +186,6 @@ abstract class Installer {
                'wgUseInstantCommons',
                'wgUpgradeKey',
                'wgDefaultSkin',
-               'wgResourceLoaderMaxQueryLength',
        );
 
        /**
@@ -285,15 +284,15 @@ abstract class Installer {
         */
        public $licenses = array(
                'cc-by' => array(
-                       'url' => 'http://creativecommons.org/licenses/by/3.0/',
+                       'url' => 'https://creativecommons.org/licenses/by/3.0/',
                        'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by.png',
                ),
                'cc-by-sa' => array(
-                       'url' => 'http://creativecommons.org/licenses/by-sa/3.0/',
+                       'url' => 'https://creativecommons.org/licenses/by-sa/3.0/',
                        'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by-sa.png',
                ),
                'cc-by-nc-sa' => array(
-                       'url' => 'http://creativecommons.org/licenses/by-nc-sa/3.0/',
+                       'url' => 'https://creativecommons.org/licenses/by-nc-sa/3.0/',
                        'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by-nc-sa.png',
                ),
                'cc-0' => array(
@@ -305,7 +304,7 @@ abstract class Installer {
                        'icon' => '{$wgResourceBasePath}/resources/assets/licenses/public-domain.png',
                ),
                'gfdl' => array(
-                       'url' => 'http://www.gnu.org/copyleft/fdl.html',
+                       'url' => 'https://www.gnu.org/copyleft/fdl.html',
                        'icon' => '{$wgResourceBasePath}/resources/assets/licenses/gnu-fdl.png',
                ),
                'none' => array(
@@ -1141,9 +1140,6 @@ abstract class Installer {
         * Check the libicu version
         */
        protected function envCheckLibicu() {
-               $utf8 = function_exists( 'utf8_normalize' );
-               $intl = function_exists( 'normalizer_normalize' );
-
                /**
                 * This needs to be updated something that the latest libicu
                 * will properly normalize.  This normalization was found at
@@ -1157,18 +1153,7 @@ abstract class Installer {
                $useNormalizer = 'php';
                $needsUpdate = false;
 
-               /**
-                * We're going to prefer the pecl extension here unless
-                * utf8_normalize is more up to date.
-                */
-               if ( $utf8 ) {
-                       $useNormalizer = 'utf8';
-                       $utf8 = utf8_normalize( $not_normal_c, UtfNormal::UNORM_NFC );
-                       if ( $utf8 !== $normal_c ) {
-                               $needsUpdate = true;
-                       }
-               }
-               if ( $intl ) {
+               if ( function_exists( 'normalizer_normalize' ) ) {
                        $useNormalizer = 'intl';
                        $intl = normalizer_normalize( $not_normal_c, Normalizer::FORM_C );
                        if ( $intl !== $normal_c ) {
@@ -1176,8 +1161,7 @@ abstract class Installer {
                        }
                }
 
-               // Uses messages 'config-unicode-using-php', 'config-unicode-using-utf8',
-               // 'config-unicode-using-intl'
+               // Uses messages 'config-unicode-using-php' and 'config-unicode-using-intl'
                if ( $useNormalizer === 'php' ) {
                        $this->showMessage( 'config-unicode-pure-php-warning' );
                } else {
@@ -1376,7 +1360,7 @@ abstract class Installer {
                                }
 
                                try {
-                                       $text = Http::get( $url . $file, array( 'timeout' => 3 ) );
+                                       $text = Http::get( $url . $file, array( 'timeout' => 3 ), __METHOD__ );
                                } catch ( Exception $e ) {
                                        // Http::get throws with allow_url_fopen = false and no curl extension.
                                        $text = null;
@@ -1452,13 +1436,16 @@ abstract class Installer {
                        return array();
                }
 
+               // extensions -> extension.json, skins -> skin.json
+               $jsonFile = substr( $directory, 0, strlen( $directory ) -1 ) . '.json';
+
                $dh = opendir( $extDir );
                $exts = array();
                while ( ( $file = readdir( $dh ) ) !== false ) {
                        if ( !is_dir( "$extDir/$file" ) ) {
                                continue;
                        }
-                       if ( file_exists( "$extDir/$file/$file.php" ) ) {
+                       if ( file_exists( "$extDir/$file/$jsonFile" ) || file_exists( "$extDir/$file/$file.php" ) ) {
                                $exts[] = $file;
                        }
                }
@@ -1505,16 +1492,31 @@ abstract class Installer {
                 */
                global $wgAutoloadClasses;
                $wgAutoloadClasses = array();
+               $queue = array();
 
                require "$IP/includes/DefaultSettings.php";
 
                foreach ( $exts as $e ) {
-                       require_once "$IP/extensions/$e/$e.php";
+                       if ( file_exists( "$IP/extensions/$e/extension.json" ) ) {
+                               $queue["$IP/extensions/$e/extension.json"] = 1;
+                       } else {
+                               require_once "$IP/extensions/$e/$e.php";
+                       }
                }
 
+               $registry = new ExtensionRegistry();
+               $data = $registry->readFromQueue( $queue );
+               $wgAutoloadClasses += $data['autoload'];
+
                $hooksWeWant = isset( $wgHooks['LoadExtensionSchemaUpdates'] ) ?
                        $wgHooks['LoadExtensionSchemaUpdates'] : array();
 
+               if ( isset( $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'] ) ) {
+                       $hooksWeWant = array_merge_recursive(
+                               $hooksWeWant,
+                               $data['globals']['wgHooks']['LoadExtensionSchemaUpdates']
+                       );
+               }
                // Unset everyone else's hooks. Lord knows what someone might be doing
                // in ParserFirstCallInit (see bug 27171)
                $GLOBALS['wgHooks'] = array( 'LoadExtensionSchemaUpdates' => $hooksWeWant );
@@ -1724,7 +1726,7 @@ abstract class Installer {
 
                if ( MWHttpRequest::canMakeRequests() ) {
                        $res = MWHttpRequest::factory( $this->mediaWikiAnnounceUrl,
-                               array( 'method' => 'POST', 'postData' => $params ) )->execute();
+                               array( 'method' => 'POST', 'postData' => $params ), __METHOD__ )->execute();
                        if ( !$res->isOK() ) {
                                $s->warning( 'config-install-subscribe-fail', $res->getMessage() );
                        }
index c0ba300..737c996 100644 (file)
@@ -34,6 +34,7 @@ class LocalSettingsGenerator {
        protected $groupPermissions = array();
        protected $dbSettings = '';
        protected $safeMode = false;
+       protected $IP;
 
        /**
         * @var Installer
@@ -50,6 +51,7 @@ class LocalSettingsGenerator {
 
                $this->extensions = $installer->getVar( '_Extensions' );
                $this->skins = $installer->getVar( '_Skins' );
+               $this->IP = $installer->getVar( 'IP' );
 
                $db = $installer->getDBInstaller( $installer->getVar( 'wgDBtype' ) );
 
@@ -63,7 +65,7 @@ class LocalSettingsGenerator {
                                'wgRightsText', 'wgMainCacheType', 'wgEnableUploads',
                                'wgMainCacheType', '_MemCachedServers', 'wgDBserver', 'wgDBuser',
                                'wgDBpassword', 'wgUseInstantCommons', 'wgUpgradeKey', 'wgDefaultSkin',
-                               'wgMetaNamespace', 'wgResourceLoaderMaxQueryLength', 'wgLogo',
+                               'wgMetaNamespace', 'wgLogo',
                        ),
                        $db->getGlobalNames()
                );
@@ -143,8 +145,7 @@ class LocalSettingsGenerator {
 # The following skins were automatically enabled:\n";
 
                        foreach ( $this->skins as $skinName ) {
-                               $encSkinName = self::escapePhpString( $skinName );
-                               $localSettings .= "require_once \"\$IP/skins/$encSkinName/$encSkinName.php\";\n";
+                               $localSettings .= $this->generateExtEnableLine( 'skins', $skinName );
                        }
 
                        $localSettings .= "\n";
@@ -157,8 +158,7 @@ class LocalSettingsGenerator {
 # The following extensions were automatically enabled:\n";
 
                        foreach ( $this->extensions as $extName ) {
-                               $encExtName = self::escapePhpString( $extName );
-                               $localSettings .= "require_once \"\$IP/extensions/$encExtName/$encExtName.php\";\n";
+                               $localSettings .= $this->generateExtEnableLine( 'extensions', $extName );
                        }
 
                        $localSettings .= "\n";
@@ -171,6 +171,34 @@ class LocalSettingsGenerator {
                return $localSettings;
        }
 
+       /**
+        * Generate the appropriate line to enable the given extension or skin
+        *
+        * @param string $dir Either "extensions" or "skins"
+        * @param string $name Name of extension/skin
+        * @throws InvalidArgumentException
+        * @return string
+        */
+       private function generateExtEnableLine( $dir, $name ) {
+               if ( $dir === 'extensions' ) {
+                       $jsonFile = 'extension.json';
+                       $function = 'wfLoadExtension';
+               } elseif ( $dir === 'skins' ) {
+                       $jsonFile = 'skin.json';
+                       $function = 'wfLoadSkin';
+               } else {
+                       throw new InvalidArgumentException( '$dir was not "extensions" or "skins' );
+               }
+
+               $encName = self::escapePhpString( $name );
+
+               if ( file_exists( "{$this->IP}/$dir/$encName/$jsonFile" ) ) {
+                       return "$function( '$encName' );\n";
+               } else {
+                       return "require_once \"\$IP/$dir/$encName/$encName.php\";\n";
+               }
+       }
+
        /**
         * Write the generated LocalSettings to a file
         *
index 46bb86c..5a8403f 100644 (file)
@@ -652,9 +652,9 @@ class MssqlInstaller extends DatabaseInstaller {
        public function getGlobalDefaults() {
                // The default $wgDBmwschema is null, which breaks Postgres and other DBMSes that require
                // the use of a schema, so we need to set it here
-               return array(
+               return array_merge( parent::getGlobalDefaults(), array(
                        'wgDBmwschema' => 'mediawiki',
-               );
+               ) );
        }
 
        /**
index b82e611..3af08d6 100644 (file)
@@ -47,7 +47,7 @@ class MysqlInstaller extends DatabaseInstaller {
 
        public $supportedEngines = array( 'InnoDB', 'MyISAM' );
 
-       public $minimumVersion = '5.0.2';
+       public $minimumVersion = '5.0.3';
 
        public $webUserPrivs = array(
                'DELETE',
@@ -71,13 +71,6 @@ class MysqlInstaller extends DatabaseInstaller {
                return self::checkExtension( 'mysql' ) || self::checkExtension( 'mysqli' );
        }
 
-       /**
-        * @return array
-        */
-       public function getGlobalDefaults() {
-               return array();
-       }
-
        /**
         * @return string
         */
index 81f563a..36d2c1d 100644 (file)
@@ -270,6 +270,9 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'dropTable', 'hitcounter' ),
                        array( 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ),
                        array( 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ),
+                       array( 'doUserNewTalkUseridUnsigned' ),
+                       // note this patch covers other _comment and _description fields too
+                       array( 'modifyField', 'recentchanges', 'rc_comment', 'patch-editsummary-length.sql' ),
                );
        }
 
@@ -1062,4 +1065,26 @@ class MysqlUpdater extends DatabaseUpdater {
                        'Making iwl_prefix_title_from index non-UNIQUE'
                );
        }
+
+       protected function doUserNewTalkUseridUnsigned() {
+               if ( !$this->doTable( 'user_newtalk' ) ) {
+                       return true;
+               }
+
+               $info = $this->db->fieldInfo( 'user_newtalk', 'user_id' );
+               if ( $info === false ) {
+                       return true;
+               }
+               if ( $info->isUnsigned() ) {
+                       $this->output( "...user_id is already unsigned int.\n" );
+
+                       return true;
+               }
+
+               return $this->applyPatch(
+                       'patch-user-newtalk-userid-unsigned.sql',
+                       false,
+                       'Making user_id unsigned int'
+               );
+       }
 }
index c30a989..b18fe94 100644 (file)
@@ -262,11 +262,13 @@ class PostgresInstaller extends DatabaseInstaller {
                $status = Status::newGood();
                foreach ( $dbs as $db ) {
                        try {
-                               $conn = new DatabasePostgres(
-                                       $this->getVar( 'wgDBserver' ),
-                                       $user,
-                                       $password,
-                                       $db );
+                               $p = array(
+                                       'host' => $this->getVar( 'wgDBserver' ),
+                                       'user' => $user,
+                                       'password' => $password,
+                                       'dbname' => $db
+                               );
+                               $conn = DatabaseBase::factory( 'postgres', $p );
                        } catch ( DBConnectionError $error ) {
                                $conn = false;
                                $status->fatal( 'config-pg-test-error', $db,
@@ -627,9 +629,9 @@ class PostgresInstaller extends DatabaseInstaller {
        public function getGlobalDefaults() {
                // The default $wgDBmwschema is null, which breaks Postgres and other DBMSes that require
                // the use of a schema, so we need to set it here
-               return array(
+               return array_merge( parent::getGlobalDefaults(), array(
                        'wgDBmwschema' => 'mediawiki',
-               );
+               ) );
        }
 
        public function setupPLpgSQL() {
index 9e41276..6ac5436 100644 (file)
@@ -384,8 +384,6 @@ class PostgresUpdater extends DatabaseUpdater {
                                'page(page_id) ON DELETE CASCADE' ),
                        array( 'changeFkeyDeferrable', 'protected_titles', 'pt_user',
                                'mwuser(user_id) ON DELETE SET NULL' ),
-                       array( 'changeFkeyDeferrable', 'recentchanges', 'rc_cur_id',
-                               'page(page_id) ON DELETE SET NULL' ),
                        array( 'changeFkeyDeferrable', 'recentchanges', 'rc_user',
                                'mwuser(user_id) ON DELETE SET NULL' ),
                        array( 'changeFkeyDeferrable', 'redirect', 'rd_from', 'page(page_id) ON DELETE CASCADE' ),
@@ -789,7 +787,7 @@ END;
                        $command = "ALTER TABLE $table DROP CONSTRAINT $conname";
                        $this->db->query( $command );
                } else {
-                       $this->output( "Foreign key constraint on '$table.$field' already does not exist\n" );
+                       $this->output( "...foreign key constraint on '$table.$field' already does not exist\n" );
                };
        }
 
index 351b022..f990ddf 100644 (file)
@@ -55,7 +55,7 @@ class SqliteInstaller extends DatabaseInstaller {
        public function checkPrerequisites() {
                $result = Status::newGood();
                // Bail out if SQLite is too old
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                if ( version_compare( $db->getServerVersion(), self::MINIMUM_VERSION, '<' ) ) {
                        $result->fatal( 'config-outdated-sqlite', $db->getServerVersion(), self::MINIMUM_VERSION );
                }
@@ -68,6 +68,7 @@ class SqliteInstaller extends DatabaseInstaller {
        }
 
        public function getGlobalDefaults() {
+               $defaults = parent::getGlobalDefaults();
                if ( isset( $_SERVER['DOCUMENT_ROOT'] ) ) {
                        $path = str_replace(
                                array( '/', '\\' ),
@@ -75,10 +76,9 @@ class SqliteInstaller extends DatabaseInstaller {
                                dirname( $_SERVER['DOCUMENT_ROOT'] ) . '/data'
                        );
 
-                       return array( 'wgSQLiteDataDir' => $path );
-               } else {
-                       return array();
+                       $defaults['wgSQLiteDataDir'] = $path;
                }
+               return $defaults;
        }
 
        public function getConnectForm() {
@@ -188,7 +188,7 @@ class SqliteInstaller extends DatabaseInstaller {
                        # @todo FIXME: Need more sensible constructor parameters, e.g. single associative array
                        # Setting globals kind of sucks
                        $wgSQLiteDataDir = $dir;
-                       $db = new DatabaseSqlite( false, false, false, $dbName );
+                       $db = DatabaseBase::factory( 'sqlite', array( 'dbname' => $dbName ) );
                        $status->value = $db;
                } catch ( DBConnectionError $e ) {
                        $status->fatal( 'config-sqlite-connection-error', $e->getMessage() );
@@ -226,6 +226,49 @@ class SqliteInstaller extends DatabaseInstaller {
                }
 
                $db = $this->getVar( 'wgDBname' );
+
+               # Make the main and cache stub DB files
+               $status = Status::newGood();
+               $status->merge( $this->makeStubDBFile( $dir, $db ) );
+               $status->merge( $this->makeStubDBFile( $dir, "wikicache" ) );
+               if ( !$status->isOK() ) {
+                       return $status;
+               }
+
+               # Nuke the unused settings for clarity
+               $this->setVar( 'wgDBserver', '' );
+               $this->setVar( 'wgDBuser', '' );
+               $this->setVar( 'wgDBpassword', '' );
+               $this->setupSchemaVars();
+
+               # Create the global cache DB
+               try {
+                       global $wgSQLiteDataDir;
+                       # @todo FIXME: setting globals kind of sucks
+                       $wgSQLiteDataDir = $dir;
+                       $conn = DatabaseBase::factory( 'sqlite', array( 'dbname' => "wikicache" ) );
+                       # @todo: don't duplicate objectcache definition, though it's very simple
+                       $sql =
+<<<EOT
+       CREATE TABLE IF NOT EXISTS objectcache (
+         keyname BLOB NOT NULL default '' PRIMARY KEY,
+         value BLOB,
+         exptime TEXT
+       )
+EOT;
+                       $conn->query( $sql );
+                       $conn->query( "CREATE INDEX IF NOT EXISTS exptime ON objectcache (exptime)" );
+                       $conn->query( "PRAGMA journal_mode=WAL" ); // this is permanent
+                       $conn->close();
+               } catch ( DBConnectionError $e ) {
+                       return Status::newFatal( 'config-sqlite-connection-error', $e->getMessage() );
+               }
+
+               # Open the main DB
+               return $this->getConnection();
+       }
+
+       protected function makeStubDBFile( $dir, $db ) {
                $file = DatabaseSqlite::generateFileName( $dir, $db );
                if ( file_exists( $file ) ) {
                        if ( !is_writable( $file ) ) {
@@ -236,13 +279,8 @@ class SqliteInstaller extends DatabaseInstaller {
                                return Status::newFatal( 'config-sqlite-cant-create-db', $file );
                        }
                }
-               // nuke the unused settings for clarity
-               $this->setVar( 'wgDBserver', '' );
-               $this->setVar( 'wgDBuser', '' );
-               $this->setVar( 'wgDBpassword', '' );
-               $this->setupSchemaVars();
 
-               return $this->getConnection();
+               return Status::newGood();
        }
 
        /**
@@ -280,6 +318,16 @@ class SqliteInstaller extends DatabaseInstaller {
                $dir = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgSQLiteDataDir' ) );
 
                return "# SQLite-specific settings
-\$wgSQLiteDataDir = \"{$dir}\";";
+\$wgSQLiteDataDir = \"{$dir}\";
+\$wgObjectCaches[CACHE_DB] = array(
+       'class' => 'SqlBagOStuff',
+       'loggroup' => 'SQLBagOStuff',
+       'server' => array(
+               'type' => 'sqlite',
+               'dbname' => 'wikicache',
+               'tablePrefix' => '',
+               'flags' => 0
+       )
+);";
        }
 }
index 81304c4..2693be0 100644 (file)
@@ -142,6 +142,7 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'dropTable', 'hitcounter' ),
                        array( 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ),
                        array( 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ),
+                       array( 'modifyField', 'filearchive', 'fa_deleted_reason', 'patch-editsummary-length.sql' ),
                );
        }
 
index 038c2be..6e41514 100644 (file)
@@ -1183,7 +1183,7 @@ class WebInstallerOptions extends WebInstallerPage {
                ) );
                $styleUrl = $server . dirname( dirname( $this->parent->getUrl() ) ) .
                        '/mw-config/config-cc.css';
-               $iframeUrl = 'http://creativecommons.org/license/?' .
+               $iframeUrl = 'https://creativecommons.org/license/?' .
                        wfArrayToCgi( array(
                                'partner' => 'MediaWiki',
                                'exit_url' => $exitUrl,
index df7184f..62f0f03 100644 (file)
        "config-env-good": "Comprobóse l'entornu.\nPue instalar MediaWiki.",
        "config-env-bad": "Comprobóse l'entornu.\nNun pue instalar MediaWiki.",
        "config-env-php": "PHP $1 ta instaláu.",
-       "config-env-php-toolow": "PHP $1 ta instaláu.\nSicasí, MediaWiki necesita PHP $2 o superior.",
+       "config-env-hhvm": "HHVM $1 ta instaláu.",
        "config-unicode-using-utf8": "Usando utf8_normalize.so de Brion Vibber pa la normalización Unicode.",
        "config-unicode-using-intl": "Usando la [http://pecl.php.net/intl estensión intl PECL] pa la normalización Unicode.",
        "config-unicode-pure-php-warning": "'''Avisu:''' La [http://pecl.php.net/intl estensión intl PECL] nun ta disponible pa xestionar la normalización Unicode; volviendo a la implementación lenta en PHP puru.\nSi xestiona un sitiu con un tráficu altu, tendría de lleer una migaya sobro la [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
        "config-unicode-update-warning": "'''Avisu:''' La versión instalada del envoltoriu de normalización Unicode usa una versión antigua de la biblioteca [http://site.icu-project.org/ de los proyeutos ICU].\nTendría [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations d'anovala] si ye importante pa vusté usar Unicode.",
-       "config-no-db": "¡Nun pudo alcontrase un controlador de base de datos afayadizu! Necesita instalar un controlador de base de datos pa PHP.\nTienen sofitu los tipos de base de datos siguientes: $1.\n\nSi compiló PHP vusté mesmu, reconfigúrelu con un cliente de base de datos activáu, por exemplu, usando <code>./configure --with-mysqli</code>.\nSi instaló PHP dende un paquete de Debian o Ubuntu, necesita instalar tamién,por exemplu, el paquete <code>php5-mysql</code>.",
+       "config-no-db": "¡Nun pudo alcontrase un controlador de base de datos afayadizu! Necesites instalar un controlador de base de datos pa PHP.\n{{PLURAL:$2|Tien sofitu el tipu de base de datos siguiente|Tienen sofitu los tipos de base de datos siguientes}}: $1.\n\nSi compilasti PHP tu mesmu, reconfigúralu con un cliente de base de datos activáu, por exemplu, usando <code>./configure --with-mysqli</code>.\nSi instalasti PHP dende un paquete de Debian o Ubuntu, necesites instalar tamién,por exemplu, el paquete <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Avisu:''' tien SQLite $1, que ye inferior a la versión mínima necesaria $2. SQLite nun tará disponible.",
        "config-no-fts3": "'''Avisu:''' SQLite ta compiláu ensin el [//sqlite.org/fts3.html módulu FTS3]; les funciones de gueta nun tarán disponibles nesti sistema.",
-       "config-register-globals": "'''Avisu: La opción de PHP <code>[http://php.net/register_globals register_globals]</code> ta activada.'''\n'''Desactívela si ye posible.'''\nMediaWiki funcionará, pero'l so sirvidor queda albentestate ente posibles vulnerabilidaes de seguridá.",
+       "config-register-globals-error": "<strong>Error: la opción de PHP <code>[http://php.net/register_globals register_globals]</code> ta activada.\nTien de desactivase pa siguir cola instalación.</strong>\nVisita [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] p'alcontrar ayuda tocante a cómo facelo.",
+       "config-diff3-bad": "Nun s'alcontró GNU diff3.",
+       "config-git": "Alcontróse'l software de control de versiones Git: <code>$1</code>.",
+       "config-git-bad": "Nun s'alcontró el software de control de versiones Git.",
        "config-site-name": "Nome de la wiki:",
        "config-site-name-help": "Esto apaecerá na barra de títulos del navegador y en dellos sitios más.",
        "config-site-name-blank": "Escriba un nome pal sitiu.",
index a3dde2e..196f1c4 100644 (file)
@@ -1,9 +1,26 @@
 {
        "@metadata": {
                "authors": [
-                       "Baloch Afghanistan"
+                       "Baloch Afghanistan",
+                       "Ibrahim khashrowdi"
                ]
        },
+       "config-your-language": "شمی زبان:",
+       "config-your-language-help": "یک زبانی ئا په ایستیپاده ئی خاتیرا انتخاب بکنیت.",
+       "config-wiki-language": "ویکی ئی زبان:",
+       "config-wiki-language-help": "زبانی ئا انتخاب کنیت که گیشتیر ویکی بئ آیی تا نیویشته ئه به ینت.",
+       "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": "لچینتین",
+       "config-page-complete": "کامل!",
        "config-sidebar": "* [//www.mediawiki.org میڈیاویکی ئی بُنیادین تاکدیم]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents کار زوروکانی کومک و رهنمایی]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents مدیر ئی رهنمایی]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ رواجین سوج و سوالان]\n----\n* <doclink href=Readme>نا بووان</doclink>\n* <doclink href=ReleaseNotes>شینک بوته ئین یاداشتان</doclink>\n* <doclink href=Copying>نسخه برداری</doclink>\n* <doclink href=UpgradeDoc>ارتقا</doclink>",
-       "config-env-good": "محیط بررسی بوته.\nشما ئه توانیت میڈیاویکی ئا نصب کنیت."
+       "config-env-good": "محیط بررسی بوته.\nشما ئه توانیت میڈیاویکی ئا نصب کنیت.",
+       "config-ns-generic": "پروژه",
+       "config-ns-other-default": "نی ویکی"
 }
index 7b3b5a5..6d28a58 100644 (file)
@@ -8,7 +8,8 @@
                        "Fitoschido",
                        "Jmarchn",
                        "Alvaro Vidal-Abarca",
-                       "ESM"
+                       "ESM",
+                       "Xavier Dengra"
                ]
        },
        "config-desc": "L'instal·lador del MediaWiki",
@@ -54,7 +55,7 @@
        "config-env-bad": "S'ha comprovat l'entorn.\nNo podeu instal·lar el MediaWiki.",
        "config-env-php": "El PHP $1 està instal·lat.",
        "config-env-hhvm": "L’HHVM $1 és instal·lat.",
-       "config-unicode-using-utf8": "Utilitzant la utf8_normalise.so d'en Brion Vibber per a la normalització de l'Unicode.",
+       "config-unicode-using-intl": "S'utilitza l'[http://pecl.php.net/intl extensió intl PECL] per a la normalització de l'Unicode.",
        "config-memory-raised": "El <code>memory_limit</code> del PHP és $1 i s'ha aixecat a $2.",
        "config-memory-bad": "<strong>Avís:</strong> El <code>memory_limit</code> del PHP és $1.\nAixò és probablement massa baix.\nLa instal·lació pot fallar!",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] està instal·lat",
        "config-db-sys-user-exists-oracle": "El compte d’usuari «$1» ja existeix. SYSDBA només es pot fer servir per crear comptes nous.",
        "config-postgres-old": "Cal el PostgreSQL $1 o posterior. Teniu el $2.",
        "config-mssql-old": "Cal utilitzar el Microsoft SQL Server $1 o posterior. Teniu la versió $2.",
+       "config-sqlite-mkdir-error": "S'ha produït un error en crear el directori de dades «$1».\nComproveu la ubicació i torneu-ho a provar.",
+       "config-sqlite-dir-unwritable": "No s'ha pogut escriure al directori «$1».\nCanvieu els seus permisos per tal que el servidor web pugui escriure-hi i torneu-ho a provar.",
+       "config-sqlite-connection-error": "$1. \n\nComproveu el directori de dades i el nom de la base de dades a continuació i torneu-ho a provar.",
        "config-sqlite-readonly": "El fitxer <code>$1</code> no es pot escriure.",
        "config-sqlite-cant-create-db": "No s'ha pogut crear el fitxer de base de dades <code>$1</code>.",
        "config-upgrade-done-no-regenerate": "S'ha completat l'actualització.\n\nJa podeu [$1 començar a utilitzar el wiki].",
        "config-regenerate": "Torna a generar el LocalSettings.php →",
        "config-show-table-status": "La consulta <code>SHOW TABLE STATUS</code> ha fallat!",
        "config-db-web-account": "Compte de la base de dades per a l'accés web",
+       "config-db-web-help": "Seleccioneu el nom d'usuari i la contrasenya que el servidor web utilitzarà per a connectar-se al servidor de base de dades durant el funcionament normal del wiki.",
        "config-db-web-account-same": "Utilitza el mateix compte que a la instal·lació",
        "config-db-web-create": "Crea el compte si no existeix encara",
        "config-db-web-no-create-privs": "El compte que heu especificat a la instal·lació no té suficients privilegis per crear un compte. El compte que especifiqueu aquí ja ha d'existir.",
        "config-cache-options": "Configuració per a la memòria cau dels objectes:",
        "config-cache-help": "L'encauament d'objectes s'utilitza per a millorar la rapidesa del MediaWiki afegint a la memòria cau les dades que s'utilitzen de forma freqüent. És recomanable que els llocs web mitjans o grans ho habilitin. També els llocs web petits en veuran els beneficis.",
        "config-cache-none": "Sense encauament (no se suprimeix cap funcionalitat, però la velocitat pot veure's afectada en els llocs wiki més grans)",
+       "config-cache-memcached": "Utilitza Memcached (requereix una instal·lació i configuració addicionals)",
        "config-memcached-servers": "Servidors de Memcache:",
        "config-memcache-badip": "Heu introduït una adreça IP no vàlida per al Memcached: $1.",
        "config-memcache-noport": "No heu especificat un port per utilitzar el servidor Memcached: $1.\nSi no coneixeu el port, per defecte és 11211.",
        "config-install-pg-schema-not-exist": "No existeix un esquema PostgreSQL.",
        "config-install-pg-schema-failed": "La creació de les taules ha fallat.\nAssegureu-vos que l'usuari «$1» pot escriure a l'esquema «$2».",
        "config-install-pg-commit": "S'estan trametent els canvis",
+       "config-pg-no-plpgsql": "Necessiteu instal·lar l'idioma PL/pgSQL a la base de dades $1",
        "config-pg-no-create-privs": "El compte que heu especificat per a la instal·lació no té suficients permisos per crear un compte.",
        "config-install-user": "S'està creant l'usuari de la base de dades",
        "config-install-user-alreadyexists": "L'usuari «$1» ja existeix",
index a783cfe..da2de84 100644 (file)
@@ -57,7 +57,7 @@
        "config-unicode-using-intl": "Pro normalizaci Unicode se používá [http://pecl.php.net/intl PECL rozšíření intl].",
        "config-unicode-pure-php-warning": "'''Upozornění''': Není dostupné [http://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.\nPokud provozujete wiki s velkou návštěvností, měli byste si přečíst něco o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizaci Unicode].",
        "config-unicode-update-warning": "'''Upozornění''': Nainstalovaná verze vrstvy pro normalizaci Unicode používá starší verzi knihovny [http://site.icu-project.org/ projektu ICU].\nPokud vám aspoň trochu záleží na používání Unicode, měli byste [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ji aktualizovat].",
-       "config-no-db": "Nepodařilo se nalézt vhodný databázový ovladač! Musíte do PHP nainstalovat databázový ovladač.\nJsou podporovány následující typy databází: $1.\n\nPokud jste si PHP přeložili sami, překonfigurujte ho se zapnutým databázovým klientem, například pomocí <code>./configure --with-mysql</code>.\nPokud jste PHP nainstalovali z balíčku Debian či Ubuntu, potřebujete nainstalovat také modul php5-mysql.",
+       "config-no-db": "Nepodařilo se nalézt vhodný databázový ovladač! Musíte nainstalovat databázový ovladač pro PHP.\n{{PLURAL:$2|Je podporován následující typ databáze|Jsou podporovány následující typy databází}}: $1.\n\nPokud jste si PHP přeložili sami, překonfigurujte ho se zapnutým databázovým klientem, například pomocí <code>./configure --with-mysql</code>.\nPokud jste PHP nainstalovali z balíčku Debian či Ubuntu, potřebujete nainstalovat také modul <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Upozornění''': Máte SQLite $1, které je starší než minimálně vyžadovaná verze $2. SQLite nebude dostupné.",
        "config-no-fts3": "'''Upozornění''': SQLite bylo přeloženo bez [//sqlite.org/fts3.html modulu FTS3], funkce pro vyhledávání zde nebudou dostupné.",
        "config-register-globals-error": "<strong>Chyba: PHP nastavení <code>[http://php.net/register_globals register_globals]</code> je zapnuto. Pro pokračování v instalaci musí být vypnuto.</strong>\nRady, jak toho dosáhnout, najdete na [https://www.mediawiki.org/wiki/Register_globals https://www.mediawiki.org/wiki/register_globals].",
index adf128e..9959f29 100644 (file)
@@ -1,9 +1,17 @@
 {
        "@metadata": {
                "authors": [
-                       "Seb35"
+                       "Seb35",
+                       "Chuvash2014"
                ]
        },
+       "config-information": "Информаци",
+       "config-your-language": "Сирĕн чĕлхӳ:",
+       "config-wiki-language": "Вики чĕлхе:",
+       "config-back": "← Кутăн",
+       "config-continue": "Малалла →",
+       "config-page-language": "Чĕлхе",
+       "config-page-name": "Ят",
        "mainpagetext": "'''«MediaWiki» вики-движока лартасси ăнăçлă вĕçленчĕ.'''",
        "mainpagedocfooter": "Ку википе ĕçлеме пулăшакан информацине [//meta.wikimedia.org/wiki/Help:Contents/ru усăç руководствинче] тупма пултаратăр.\n\n== Пулăшма пултарĕç ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Ĕнерлевсен списокĕ];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki тăрăх час-часах ыйтакан ыйтусемпе хуравсем];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki çĕнĕ верси тухнине пĕлтерекен рассылка].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index b0b2ebe..b348a1b 100644 (file)
        "config-restart": "Ja, erneut starten",
        "config-welcome": "=== Prüfung der Installationsumgebung ===\nDie Basisprüfungen werden jetzt durchgeführt, um festzustellen, ob die Installationsumgebung für MediaWiki geeignet ist.\nNotiere diese Informationen und gib sie an, sofern du Hilfe beim Installieren benötigst.",
        "config-copyright": "=== Lizenz und Nutzungsbedingungen ===\n\n$1\n\nDieses Programm ist freie Software, d. h. es kann, gemäß den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nDieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine <doclink href=Copying>Kopie der GNU General Public License</doclink> sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.",
-       "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/de Website von MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/de Benutzeranleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/de Administratorenanleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/de Häufig gestellte Fragen]\n----\n* <doclink href=Readme>Lies mich</doclink>\n* <doclink href=ReleaseNotes>Versionsinformationen</doclink>\n* <doclink href=Copying>Lizenzbestimmungen</doclink>\n* <doclink href=UpgradeDoc>Aktualisierung</doclink>",
+       "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/de Website von MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/de Benutzer­anleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/de Administratoren­anleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/de Häufig gestellte Fragen]\n----\n* <doclink href=Readme>Lies mich</doclink>\n* <doclink href=ReleaseNotes>Versions­informationen</doclink>\n* <doclink href=Copying>Lizenz­bestimmungen</doclink>\n* <doclink href=UpgradeDoc>Aktualisierung</doclink>",
        "config-env-good": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann installiert werden.",
        "config-env-bad": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann nicht installiert werden.",
        "config-env-php": "Die Skriptsprache „PHP“ ($1) ist installiert.",
        "config-env-hhvm": "HHVM $1 ist installiert.",
-       "config-unicode-using-utf8": "Zur Unicode-Normalisierung wird Brion Vibbers <code>utf8_normalize.so</code> eingesetzt.",
        "config-unicode-using-intl": "Zur  Unicode-Normalisierung wird die [http://pecl.php.net/intl PECL-Erweiterung intl] eingesetzt.",
        "config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit großer Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.",
        "config-unicode-update-warning": "'''Warnung:''' Die installierte Version des Unicode-Normalisierungswrappers nutzt einer ältere Version der Bibliothek des [http://site.icu-project.org/ ICU-Projekts].\nDiese sollte [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aktualisiert] werden, sofern auf die Verwendung von Unicode Wert gelegt wird.",
        "config-db-install-account": "Benutzerkonto für die Installation",
        "config-db-username": "Name des Datenbankbenutzers:",
        "config-db-password": "Passwort des Datenbankbenutzers:",
-       "config-db-password-empty": "Bitte ein Passwort für den neuen Datenbankbenutzer angeben: $1\nObwohl es möglich ist, Datenbankbenutzer ohne Passwort anzulegen, so ist dies nicht sicher.",
+       "config-db-password-empty": "Bitte ein Passwort für den neuen Datenbankbenutzer angeben: $1.\nObwohl es möglich ist, Datenbankbenutzer ohne Passwort anzulegen, so ist dies nicht sicher.",
        "config-db-username-empty": "Du musst einen Wert für „{{int:config-db-username}}“ eingeben",
        "config-db-install-username": "Den Benutzernamen angeben, der für die Verbindung mit der Datenbank während des Installationsvorgangs genutzt werden soll. Es handelt sich dabei nicht um den Benutzernamen für das MediaWiki-Konto, sondern um den Benutzernamen der vorgesehenen Datenbank.",
        "config-db-install-password": "Das Passwort angeben, das für die Verbindung mit der Datenbank während des Installationsvorgangs genutzt werden soll. Es handelt sich dabei nicht um das Passwort für das MediaWiki-Konto, sondern um das Passwort der vorgesehenen Datenbank.",
index 6b9f590..a79282a 100644 (file)
@@ -1,9 +1,13 @@
 {
        "@metadata": {
                "authors": [
-                       "Shirayuki"
+                       "Shirayuki",
+                       "Caliburn"
                ]
        },
+       "config-desc": "The installer for MediaWiki",
+       "config-title": "MediaWiki $1 installation",
+       "config-information": "Information",
        "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but '''without any warranty'''; without even the implied warranty of '''merchantability''' or '''fitness for a particular purpose'''.\nSee the GNU General Public Licence for more details.\n\nYou should have received <doclink href=Copying>a copy of the GNU General Public Licence</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. or [http://www.gnu.org/copyleft/gpl.html read it online].",
        "config-unicode-using-utf8": "Using Brion Vibber's utf8_normalize.so for Unicode normalisation.",
        "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalisation.",
index d6737a3..0dc8e88 100644 (file)
@@ -45,7 +45,6 @@
        "config-env-bad": "The environment has been checked.\nYou cannot install MediaWiki.",
        "config-env-php": "PHP $1 is installed.",
        "config-env-hhvm": "HHVM $1 is installed.",
-       "config-unicode-using-utf8": "Using Brion Vibber's utf8_normalize.so for Unicode normalization.",
        "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalization.",
        "config-unicode-pure-php-warning": "<strong>Warning:</strong> The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
        "config-unicode-update-warning": "<strong>Warning:</strong> The installed version of the Unicode normalization wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.\nYou should [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.",
index ee1a2f4..a983651 100644 (file)
                        "Miguel2706",
                        "Macofe",
                        "AVIADOR",
-                       "FuzzyDice"
+                       "FuzzyDice",
+                       "Legoktm"
                ]
        },
        "config-desc": "El instalador de MediaWiki",
        "config-title": "Instalación de MediaWiki $1",
        "config-information": "Información",
-       "config-localsettings-upgrade": "Se ha encontrado un archivo <code>LocalSettings.php</code>.\nPara actualizar esta instalación, por favor ingresa el valor de <code>$wgUpgradeKey</code> en el cuadro de abajo.\nLo encontrarás en <code>LocalSettings.php</code>.",
-       "config-localsettings-cli-upgrade": "Se ha detectado un archivo <code>LocalSettings.php</code>.\nPara actualizar la instalación, vuelva a ejecutar <code>update.php</code>",
+       "config-localsettings-upgrade": "Se ha encontrado un archivo <code>LocalSettings.php</code>.\nPara actualizar esta instalación, escribe el valor de <code>$wgUpgradeKey</code> en el cuadro de abajo.\nLo encontrarás en <code>LocalSettings.php</code>.",
+       "config-localsettings-cli-upgrade": "Se ha detectado un archivo <code>LocalSettings.php</code>.\nPara actualizar la instalación, en su lugar ejecuta <code>update.php</code>",
        "config-localsettings-key": "Clave de actualización:",
        "config-localsettings-badkey": "La clave proporcionada es incorrecta.",
-       "config-upgrade-key-missing": "Se ha detectado una instalación existente de MediaWiki.\nPara actualizar la instalación, por favor, ponga la siguiente línea al final de su archivo <code>LocalSettings.php</code>:\n\n$1",
-       "config-localsettings-incomplete": "El archivo <code>LocalSettings.php</code> existente parece estar incompleto.\nLa variable $1 no está definida.\nCambie el archivo <code>LocalSettings.php</code> para que esta variable quede establecida y haga clic en \"{{int:Config-continue}}\".",
-       "config-localsettings-connection-error": "Se ha producido un error al conectar a la base de datos utilizando la configuración especificada en <code>LocalSettings.php</code> . Por favor arreglar estos ajustes e inténtelo de nuevo.\n\n$1",
+       "config-upgrade-key-missing": "Se ha detectado una instalación existente de MediaWiki.\nPara actualizar la instalación, añade la siguiente línea al final de tu  <code>LocalSettings.php</code>:\n\n$1",
+       "config-localsettings-incomplete": "El archivo <code>LocalSettings.php</code> existente parece estar incompleto.\nLa variable $1 no está definida.\nCambia <code>LocalSettings.php</code> para que esta variable quede establecida y haz clic en \"{{int:Config-continue}}\".",
+       "config-localsettings-connection-error": "Se ha producido un error al conectar a la base de datos utilizando la configuración especificada en <code>LocalSettings.php</code>. Corrige estos ajustes e inténtalo de nuevo.\n\n$1",
        "config-session-error": "Error al iniciar la sesión: $1",
        "config-session-expired": "Tus datos de sesión parecen haber expirado.\nLas sesiones están configuradas por una duración de $1.\nPuedes incrementar esto configurando <code>session.gc_maxlifetime</code> en php.ini.\nReiniciar el proceso de instalación.",
        "config-no-session": "Se han perdido los datos de sesión.\nVerifica tu php.ini y comprueba que <code>session.save_path</code> está establecido en un directorio apropiado.",
        "config-page-restart": "Reiniciar instalación",
        "config-page-readme": "Léeme",
        "config-page-releasenotes": "Notas de la versión",
-       "config-page-copying": "Copiando",
-       "config-page-upgradedoc": "Actualizando",
+       "config-page-copying": "Copia",
+       "config-page-upgradedoc": "Actualización",
        "config-page-existingwiki": "Wiki existente",
-       "config-help-restart": "¿Deseas borrar todos los datos que has ingresado hasta ahora y reiniciar el proceso de instalación desde el principio?",
+       "config-help-restart": "¿Deseas borrar todos los datos guardados que has escrito y reiniciar el proceso de instalación?",
        "config-restart": "Sí, reiniciarlo",
        "config-welcome": "=== Comprobación del entorno ===\nAhora se van a realizar comprobaciones básicas para ver si el entorno es adecuado para la instalación de MediaWiki.\nRecuerda suministrar los resultados de tales comprobaciones si necesitas ayuda para completar la instalación.",
        "config-copyright": "=== Derechos de autor y Términos de uso ===\n\n$1\n\nEste programa es software libre; puedes redistribuirlo y/o modificarlo en los términos de la Licencia Pública General de GNU, tal como aparece publicada por la Fundación para el Software Libre, tanto la versión 2 de la Licencia, como cualquier versión posterior (según prefiera).\n\nEste programa es distribuido en la esperanza de que sea útil, pero '''sin cualquier garantía'''; inclusive, sin la garantía implícita de la '''posibilidad de ser comercializado''' o de '''idoneidad para cualquier finalidad específica'''.\nConsulte la licencia *GNU General *Public *License para más detalles.\n\nEn conjunto con este programa debe haber recibido <doclink href=Copying>una copia de la Licencia Pública General de GNU</doclink>; si no la recibió, pídala por escrito a Fundación para el Software Libre, Inc., 51 Franklin Street, Fifth Floor, Boston, ME La 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html léala en internet].",
        "config-env-bad": "El entorno ha sido comprobado.\nNo puedes instalar MediaWiki.",
        "config-env-php": "PHP $1 está instalado.",
        "config-env-hhvm": "HHVM $1 está instalado.",
-       "config-unicode-using-utf8": "Usando utf8_normalize.so de Brion Vibber para la normalización Unicode.",
        "config-unicode-using-intl": "Usando la [http://pecl.php.net/intl extensión intl PECL] para la normalización Unicode.",
-       "config-unicode-pure-php-warning": "'''Advertencia''': La [http://pecl.php.net/intl extensión intl] no está disponible para efectuar la normalización Unicode. Utilizando la implementación más lenta en PHP.\nSi tu web tiene mucho tráfico, te recomendamos leer acerca de la [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
-       "config-unicode-update-warning": "'''Warning''': La versión instalada del contenedor de normalización Unicode usa una versión anterior de la biblioteca del [http://site.icu-project.org/ proyecto ICU].\nDeberás [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualizar] si realmente deseas usar Unicode.",
-       "config-no-db": "¡No fue posible encontrar un controlador adecuado para la base de datos! Necesitas instalar un controlador de base de datos para PHP.\nLos siguientes sistemas gestores de bases de datos están soportados: $1.\n\nSi compilaste PHP tú mismo, debes reconfigurarlo habilitando un cliente de base de datos, por ejemplo, usando <code>./configure --with-mysqli</code>.\nSi instalaste PHP desde un paquete Debian o Ubuntu, entonces también necesitas instalar, por ejemplo, el paquete <code>php5-mysql</code>.",
-       "config-outdated-sqlite": "''' Advertencia ''': tiene la versión SQLite $1, que es inferior a la mínima versión requerida: $2 . SQLite no estará disponible.",
-       "config-no-fts3": "'''Advertencia''': SQLite está compilado sin el [//sqlite.org/fts3.html módulo FTS3]. Las funcionalidades de búsqueda no estarán disponibles en esta instalación.",
-       "config-register-globals-error": "<strong>Error: la opción de PHP <code>[http://php.net/register_globals register_globals]</code> está activada.\nDebe estar desactivada para continuar con la instalación.</strong>\nVea [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obtener ayuda sobre cómo hacerlo.",
+       "config-unicode-pure-php-warning": "<strong>Advertencia:</strong> la [http://pecl.php.net/intl extensión intl] no está disponible para efectuar la normalización Unicode. Se utilizará la implementación más lenta en PHP puro.\nSi tu web tiene mucho tráfico, te recomendamos leer acerca de la [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
+       "config-unicode-update-warning": "<strong>Warning:</strong> la versión instalada del contenedor de normalización Unicode usa una versión antigua de la biblioteca del [http://site.icu-project.org/ proyecto ICU].\nDeberás [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualizar] si realmente deseas usar Unicode.",
+       "config-no-db": "No se encontró un controlador adecuado para la base de datos. Necesitas instalar un controlador de base de datos para PHP.\n{{PLURAL:$2|El siguiente gestor de bases de datos está soportado|Los siguientes gestores de bases de datos están soportados}}: $1.\n\nSi compilaste PHP tú mismo, debes reconfigurarlo habilitando un cliente de base de datos, por ejemplo, usando <code>./configure --with-mysqli</code>.\nSi instalaste PHP desde un paquete Debian o Ubuntu, entonces también necesitas instalar, por ejemplo, el paquete <code>php5-mysql</code>.",
+       "config-outdated-sqlite": "<strong>Advertencia:</strong> tienes SQLite $1, que es inferior a la mínima versión requerida: $2. SQLite no estará disponible.",
+       "config-no-fts3": "<strong>Advertencia:</strong> SQLite está compilado sin el [//sqlite.org/fts3.html módulo FTS3]. Las funcionalidades de búsqueda no estarán disponibles en esta instalación.",
+       "config-register-globals-error": "<strong>Error: la opción de PHP <code>[http://php.net/register_globals register_globals]</code> está activada.\nDebe estar desactivada para continuar con la instalación.</strong>\nVéase [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obtener ayuda sobre cómo hacerlo.",
        "config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] está activa!</strong>\nEsta opción corrompe la entrada de datos de forma impredecible.\nUsted no puede instalar o utilizar MediaWiki a menos que esta opción esté deshabilitada.",
        "config-magic-quotes-runtime": "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está activada!'''\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNo puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.",
        "config-magic-quotes-sybase": "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está activada!'''\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNo puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.",
        "config-mbstring": "'''Fatal: La opción [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está activada!'''\nEsta opción causa errores y puede corromper los datos de una forma imprevisible.\nNo se puede instalar o usar MediaWiki a menos que esta opción sea desactivada.",
-       "config-safe-mode": "'''Advertencia:''' El [http://www.php.net/features.safe-mode modo seguro] de PHP está activado.\nEste modo puede causar problemas, especialmente en la carga de archivosy en compatibilidad con <code>math</code>.",
-       "config-xml-bad": "Falta el módulo XML de PHP.\nMediaWiki necesita funciones en este módulo y no funcionará con esta configuración.\nSi está ejecutando Mandrake, instale el paquete php-xml.",
+       "config-safe-mode": "<strong>Advertencia:</strong> el [http://www.php.net/features.safe-mode modo seguro] de PHP está activado.\nEste modo puede causar problemas, especialmente en la carga de archivos y en compatibilidad con <code>math</code>.",
+       "config-xml-bad": "Falta el módulo XML de PHP.\nMediaWiki necesita funciones en este módulo y no funcionará con esta configuración.\nSi estás usando Mandrake, instala el paquete php-xml.",
        "config-pcre-old": "'''Fatal:''' Se requiere PCRE $1 o posterior.\nSu PHP binario está enlazado con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Más información].",
        "config-pcre-no-utf8": "'''Error fatal ''': Parece que el módulo PCRE de PHP fue compilado sin el soporte PCRE_UTF8.\nMediaWiki requiere compatibilidad con UTF-8 para funcionar correctamente.",
        "config-memory-raised": "el parámetro <code>memory_limit</code> de PHP es $1, aumentada a $2.",
-       "config-memory-bad": "'''Advertencia:''' El parámetro <code>memory_limit</code> de PHP es $1.\nProbablemente este valor es demasiado bajo.\n¡La instalación podrá fallar!",
+       "config-memory-bad": "<strong>Advertencia:</strong> el parámetro <code>memory_limit</code> de PHP es $1.\nProbablemente sea demasiado bajo.\n¡La instalación puede fallar!",
        "config-ctype": "'''Fatal''': Se necesita compilar PHP con compatibilidad para la [http://www.php.net/manual/en/ctype.installation.php extensión Ctype].",
        "config-iconv": "<strong>Fatal:</strong> PHP debe ser compilado con soporte para la [http://www.php.net/manual/en/iconv.installation.php extensión iconv].",
        "config-json": "'''Fatal:''' PHP fue compilado sin soporte para JSON.\nDebes instalar la extensión JSON o la extensión [http://pecl.php.net/package/jsonc PECL jsonc] antes de instalar MediaWiki.\n* La extensión PHP se incluye en Red Hat Enterprise Linux (CentOS) 5 y 6, aunque debe habilitarse en <code>/etc/php.ini</code> o <code>/etc/php.d/json.ini</code>.\n* Algunas distribuciones Linux liberadas después de mayo del 2013 omiten la extensión PHP, y en su lugar disponen de la extensión PECL en el paquete <code>php5-json</code> o <code>php-pecl-jsonc</code>.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado",
        "config-apc": "[http://www.php.net/apc APC] está instalado",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado",
-       "config-no-cache": "'''Advertencia:''' No pudo encontrarse [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nEl caché de objetos no está habilitado.",
-       "config-mod-security": "''' Advertencia ''': Su servidor web tiene [http://modsecurity.org/ mod_security] habilitado. Si la configuración es incorrecta, puede causar problemas a MediaWiki u otro software que permita a los usuarios publicar contenido arbitrarios.\nConsulte la [http://modsecurity.org/documentation/ documentación de mod_security] o contacte con el soporte de su servidor (''host'') si encuentra errores aleatorios.",
+       "config-no-cache": "<strong>Advertencia:</strong> no pudo encontrarse [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nEl caché de objetos no está activado.",
+       "config-mod-security": "<strong>Advertencia:</strong> tu servidor web tiene activado [http://modsecurity.org/ mod_security]/mod_security2. Muchas de sus configuraciones comunes pueden causar problemas a MediaWiki u otro software que permita a los usuarios publicar contenido arbitrario. De ser posible, deberías desactivarlo. Si no, consulta la [http://modsecurity.org/documentation/ documentación de mod_security] o contacta con el administrador de tu servidor si encuentras errores aleatorios.",
        "config-diff3-bad": "GNU diff3 no se encuentra.",
        "config-git": "Se encontró el software de control de versiones Git: <code>$1</code>.",
        "config-git-bad": "No se encontró el software de control de versiones Git.",
        "config-imagemagick": "ImageMagick encontrado: <code>$1</code>.\nLa miniaturización de imágenes se habilitará si habilitas las cargas.",
        "config-gd": "Se ha encontrado una biblioteca de gráficos GD integrada.\nLa miniaturización de imágenes se habilitará si habilitas las subidas.",
-       "config-no-scaling": "No se ha encontrado ninguma biblioteca GD o ImageMagik.\nSe inhabilitará la miniaturización de imágenes.",
+       "config-no-scaling": "No se ha encontrado la biblioteca GD o ImageMagik.\nSe desactivará la miniaturización de imágenes.",
        "config-no-uri": "<strong>Error:</strong> no se pudo determinar el URI actual.\nSe interrumpió la instalación.",
        "config-no-cli-uri": "<strong>Aviso:</strong> No se especificó <code>--scriptpath</code>; se usa el valor predeterminado: <code>$1</code>.",
        "config-using-server": "Utilizando el nombre de servidor \"<nowiki>$1</nowiki>\".",
        "config-using-uri": "Utilizando la URL del servidor \"<nowiki>$1$2</nowiki>\".",
-       "config-uploads-not-safe": "'''Atención:''' Su directorio por defecto para las cargas, <code>$1</code>, es vulnerable a la ejecución de scripts arbitrarios.\nAunque MediaWiki comprueba todos los archivos cargados por si hubiese amenazas de seguridad, es altamente recomendable [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security cerrar esta vulnerabilidad de seguridad] antes de activar las cargas.",
-       "config-no-cli-uploads-check": "'''Atención:''' Su directorio predeterminado para cargas (<code>$1</code>) no está comprobado para la vulnerabilidad\n de ejecución arbitraria de comandos script durante la instalación de CLI.",
+       "config-uploads-not-safe": "<strong>Advertencia:</strong> tu directorio predeterminado para las cargas, <code>$1</code>, es vulnerable a la ejecución de scripts arbitrarios.\nAunque MediaWiki comprueba todos los archivos cargados por si hubiese amenazas de seguridad, es altamente recomendable [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security cerrar esta vulnerabilidad de seguridad] antes de activar las cargas.",
+       "config-no-cli-uploads-check": "<strong>Advertencia:</strong> tu directorio predeterminado para cargas (<code>$1</code>) no está comprobado contra la vulnerabilidad\n de ejecución arbitraria de \"scripts\" durante la instalación por línea de comandos.",
        "config-brokenlibxml": "El sistema tiene una combinación de versiones de PHP y de libxml2 que es poco confiable y puede provocar corrupción oculta en los datos de MediaWiki y otras aplicaciones web.\nActualizar a PHP 5.2.9 o posterior y a libxml2 2.7.3 o posterior ([//bugs.php.net/bug.php?id=45996 bug reportado con PHP]).\nInstalación abortada.",
        "config-suhosin-max-value-length": "Suhosin está instalado y limita el parámetro <code>length</code> GET a $1 bytes.\nEl componente ResourceLoader (gestor de recursos) de MediaWiki trabajará en este límite, pero eso perjudicará el rendimiento.\nSi es posible, deberías establecer <code>suhosin.get.max_value_length</code> en el valor 1024 o superior en <code>php.ini</code> y establecer <code>$wgResourceLoaderMaxQueryLength</code> en el mismo valor en <code>php.ini</code>.",
        "config-db-type": "Tipo de base de datos:",
        "config-db-host": "Servidor de la base de datos:",
-       "config-db-host-help": "Si su servidor de base de datos está en otro servidor, escriba el nombre del host o su dirección IP aquí.\nSi está utilizando alojamiento web compartido, su proveedor de alojamiento debería darle el nombre correcto del servidor de alojamiento (host) en su documentación.\nSi va a instalarlo en un servidor Windows y utiliza MySQL, el uso de \"localhost\" como nombre del servidor puede no funcionar. Si no es así, intente poner \"127.0.0.1\" como dirección IP local.\nSi utiliza PostgreSQL, deje este campo en blanco para conectarse a través de un socket de Unix.",
+       "config-db-host-help": "Si tu servidor de base de datos está en otro servidor, escribe el nombre del equipo o su dirección IP aquí.\n\nSi estás utilizando alojamiento web compartido, tu proveedor debería darte el nombre correcto del servidor en su documentación.\n\nSi vas a instalar en un servidor Windows y a utilizar MySQL, el uso de \"localhost\" como nombre del servidor puede no funcionar. Si es así, intenta poner \"127.0.0.1\" como dirección IP local.\n\nSi utilizas PostgreSQL, deja este campo vacío para conectarse a través de un socket de Unix.",
        "config-db-host-oracle": "TNS de la base de datos:",
        "config-db-host-oracle-help": "Introduzca un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nombre de conexión local] válido; un archivo tnsnames.ora debe ser visible para esta instalación.<br />Si está utilizando bibliotecas de cliente 10g o más recientes también puede utilizar el método de asignación de nombres [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifica este wiki",
        "config-db-name": "Nombre de la base de datos:",
-       "config-db-name-help": "Elija un nombre que identifique su wiki.\nNo debe contener espacios.\n\nSi está utilizando alojamiento web compartido, su proveedor de alojamiento le dará un nombre específico de base de datos para que lo utilice, o bien le permitirá crear bases de datos a través de un panel de control.",
+       "config-db-name-help": "Elige un nombre que identifique tu wiki.\nNo debe contener espacios.\n\nSi estás utilizando alojamiento web compartido, tu proveedor te dará un nombre específico de base de datos para que lo utilices, o bien te permitirá crear bases de datos a través de un panel de control.",
        "config-db-name-oracle": "Esquema de la base de datos:",
        "config-db-account-oracle-warn": "Hay tres escenarios compatibles para la instalación de Oracle como base de datos back-end:\n\nSi desea crear una cuenta de base de datos como parte del proceso de instalación, por favor suministre una cuenta con función SYSDBA como cuenta de base de datos para la instalación y especifique las credenciales deseadas de la cuenta de acceso al web, de lo contrario puede crear manualmente la cuenta de acceso al web y suministrar sólo esa cuenta (si tiene los permisos necesarios para crear los objetos de esquema) o suministrar dos cuentas diferentes, una con privilegios de creación y otra con acceso restringido a la web\n\nLa secuencia de comandos (script) para crear una cuenta con los privilegios necesarios puede encontrarse en el directorio \"maintenance/oracle/\" de esta instalación. Tenga en cuenta que utilizando una cuenta restringida desactivará todas las capacidades de mantenimiento con la cuenta predeterminada.",
        "config-db-install-account": "Cuenta de usuario para instalación",
        "config-db-username": "Nombre de usuario de la base de datos:",
        "config-db-password": "Contraseña de la base de datos:",
-       "config-db-password-empty": "Introduzca una contraseña para el nuevo usuario de base de datos:  $1.\nAunque es posible crear usuarios sin contraseña, esto no es seguro.",
-       "config-db-username-empty": "Debe introducir un valor para \"{{int:config-db-username}}\"",
-       "config-db-install-username": "Introduzca el nombre de usuario que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEste no es el nombre de usuario de la cuenta de MediaWiki; Este es el nombre de usuario para la base de datos.",
-       "config-db-install-password": "Introduzca la contraseña que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEsta no es la contraseña para la cuenta de MediaWiki; esta es la contraseña para la base de datos.",
-       "config-db-install-help": "Ingresar el nombre de usuario y la contraseña que será usada para conectar a la base de datos durante el proceso de instalación.",
+       "config-db-password-empty": "Escribe una contraseña para el nuevo usuario de base de datos: $1.\nAunque es posible crear usuarios sin contraseña, esto no es seguro.",
+       "config-db-username-empty": "Debes introducir un valor para \"{{int:config-db-username}}\"",
+       "config-db-install-username": "Escribe el nombre de usuario que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEste no es el nombre de usuario de la cuenta de MediaWiki, sino el nombre de usuario para la base de datos.",
+       "config-db-install-password": "Escribe la contraseña que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEsta no es la contraseña para la cuenta de MediaWiki, sino la contraseña para la base de datos.",
+       "config-db-install-help": "Escribe el nombre de usuario y la contraseña que se utilizarán para conectarse a la base de datos durante el proceso de instalación.",
        "config-db-account-lock": "Usar el mismo nombre de usuario y contraseña durante operación normal",
        "config-db-wiki-account": "Cuenta de usuario para operación normal",
-       "config-db-wiki-help": "Introduce el nombre de usuario y la contraseña que serán usados para acceder a la base de datos durante la operación normal del wiki.\nSi esta cuenta no existe y la cuenta de instalación tiene suficientes privilegios, se creará esta cuenta de usuario con los privilegios mínimos necesarios para la operación normal del wiki.",
+       "config-db-wiki-help": "Escribe el nombre de usuario y la contraseña que se utilizarán para acceder a la base de datos durante la operación normal del wiki.\nSi esta cuenta no existe y la cuenta de instalación tiene suficientes privilegios, se creará esta cuenta de usuario con los privilegios mínimos necesarios para la operación normal del wiki.",
        "config-db-prefix": "Prefijo de tablas de la base de datos:",
-       "config-db-prefix-help": "Si necesita compartir una base de datos entre múltiples wikis, o entre MediaWiki y otra aplicación web, puede optar por agregar un prefijo a todos los nombres de tabla para evitar conflictos.\nNo utilice espacios.\n\nNormalmente se deja este campo vacío.",
+       "config-db-prefix-help": "Si necesitas compartir una base de datos entre múltiples wikis, o entre MediaWiki y otra aplicación web, puedes optar por agregar un prefijo a todos los nombres de tabla para evitar conflictos.\nNo utilices espacios.\n\nNormalmente se deja este campo vacío.",
        "config-db-charset": "Conjunto de caracteres de la base de datos",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 binario",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
        "config-mysql-old": "Se necesita MySQL $1 o posterior. Tienes $2.",
        "config-db-port": "Puerto de la base de datos:",
        "config-db-schema": "Esquema para MediaWiki",
-       "config-db-schema-help": "Estos esquemas usualmente estarán bien.\nAltéralos sólo si tienes la seguridad de que necesitas hacerlo.",
-       "config-pg-test-error": "No se puede conectar a la base de datos '''$1''': $2",
+       "config-db-schema-help": "Este esquema usualmente estará bien.\nCámbialos solo si lo necesitas.",
+       "config-pg-test-error": "No se puede conectar a la base de datos <strong>$1</strong>: $2",
        "config-sqlite-dir": "Directorio de datos SQLite:",
-       "config-sqlite-dir-help": "SQLite almacena todos los datos en un único archivo.\n\nEl directorio que proporcione debe ser escribible por el servidor Web durante la instalación.\n\n'''No''' debería ser accesible a través de Internet, por eso no vamos a ponerlo en el sitio donde están los archivos PHP.\n\nEl instalador escribirá un archivo <code>.htaccess</code> junto con él, pero si falla alguien podría tener acceso a la base de datos en bloque.\nEso incluye los datos de usuario en bloque (direcciones de correo electrónico, las contraseñas con hash) así como revisiones eliminadas y otros datos restringidos del wiki.\n\nConsidere la posibilidad de poner la base de datos en algún otro sitio, por ejemplo en <code>/var/lib/mediawiki/yourwiki</code> .",
-       "config-oracle-def-ts": "Espacio de tablas por defecto:",
+       "config-sqlite-dir-help": "SQLite almacena todos los datos en un único archivo.\n\nEl directorio que proporciones debe poder escribirse por el servidor web durante la instalación.\n\n'''No''' debería ser accesible a través de Internet. Por eso no vamos a ponerlo en el sitio donde están los archivos PHP.\n\nEl instalador escribirá un archivo <code>.htaccess</code> junto con él, pero si falla alguien podría tener acceso a la base de datos en bloque.\nEso incluye los datos de usuario en bloque (direcciones de correo electrónico, las contraseñas con hash) así como revisiones eliminadas y otros datos restringidos del wiki.\n\nConsidera poner la base de datos en algún otro sitio, por ejemplo en <code>/var/lib/mediawiki/tuwiki</code> .",
+       "config-oracle-def-ts": "Espacio de tablas predeterminado:",
        "config-oracle-temp-ts": "Espacio de tablas temporal:",
        "config-type-mysql": "MySQL (o compatible)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
-       "config-support-info": "MediaWiki es compatible con los siguientes sistemas de bases de datos:\n\n$1\n\nSi no encuentras en el listado el sistema de base de datos que estás intentando utilizar, sigue las instrucciones vinculadas arriba para habilitar la compatibilidad.",
+       "config-support-info": "MediaWiki es compatible con los siguientes sistemas de bases de datos:\n\n$1\n\nSi no encuentras en el listado el sistema de base de datos que estás intentando utilizar, sigue las instrucciones enlazadas arriba para activar la compatibilidad.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] es la base de datos mayoritaria para MediaWiki y la que goza de mayor compatibilidad. MediaWiki también funciona con [{{int:version-db-mariadb-url}} MariaDB] y [{{int:version-db-percona-url}} Percona Server], que son compatibles con MySQL. ([http://www.php.net/manual/es/mysql.installation.php Cómo compilar PHP con compatibilidad MySQL])",
        "config-dbsupport-postgres": "[{{int:version-db-postgres-url}} PostgreSQL] es un sistema de base de datos popular de código abierto, alternativa a MySQL. Pueden haber algunos fallos menores destacables, y no es recomendable para su uso en un entorno de producción. ([http://www.php.net/manual/es/pgsql.installation.php Cómo compilar PHP con compatibilidad PostgreSQL]).",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] es un sistema de base de datos ligero con gran compatibilidad con MediaWiki. ([http://www.php.net/manual/es/pdo.installation.php Cómo compilar PHP con compatibilidad SQLite], usando PDO)",
        "config-header-oracle": "Configuración de Oracle",
        "config-header-mssql": "Configuración de Microsoft SQL Server",
        "config-invalid-db-type": "El tipo de base de datos no es válido",
-       "config-missing-db-name": "Debe introducir un valor para \"{{int:config-db-nombre}}\".",
-       "config-missing-db-host": "Debe introducir un valor para \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Debe introducir un valor para \"{{int:config-db-host-oracle}}\".",
+       "config-missing-db-name": "Debes escribir un valor para \"{{int:config-db-nombre}}\".",
+       "config-missing-db-host": "Debes escribir un valor para \"{{int:config-db-host}}\".",
+       "config-missing-db-server-oracle": "Debes escribir un valor para \"{{int:config-db-host-oracle}}\".",
        "config-invalid-db-server-oracle": "El TNS de la base de datos «$1» es inválido.\nDebes usar un \"TNS Name\" o una cadena \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Nomenclatura de Oracle]).",
-       "config-invalid-db-name": "El nombre de la base de datos \"$1\"  es inválido.\nUsa sólo caracteres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_)y guiones (-).",
-       "config-invalid-db-prefix": "El prefijo de la base de datos \"$1\"  es inválido.\nUse sólo carateres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).",
-       "config-connection-error": "$1.\n\nVerifique el servidor, el nombre de usuario y la contraseña, e intente de nuevo.",
+       "config-invalid-db-name": "El nombre de la base de datos \"$1\" no es válido.\nUsa sólo caracteres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).",
+       "config-invalid-db-prefix": "El prefijo de la base de datos \"$1\" no es válido.\nUsa sólo caracteres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).",
+       "config-connection-error": "$1.\n\nVerifica el servidor, el nombre de usuario y la contraseña, e intenta de nuevo.",
        "config-invalid-schema": "El esquema de la base de datos \"$1\"  es inválido.\nUse sólo carateres ASCII: letras (a-z, A-Z), guarismos (0-9) y guiones bajos (_).",
        "config-db-sys-create-oracle": "El instalador sólo admite el empleo de cuentas SYSDBA como método para crear una cuenta nueva.",
        "config-db-sys-user-exists-oracle": "La cuenta de usuario \"$1\" ya existe. ¡SYSDBA sólo puede utilizarse para crear una nueva cuenta!",
-       "config-postgres-old": "Se necesita PostgreSQL $1 o una versión más reciente; tienes la versión $2.",
-       "config-mssql-old": "Microsoft SQL Server  $1  o posterior es necesario. Tienes  $2 .",
-       "config-sqlite-name-help": "Elige el nombre que identificará tu wiki.\nNo uses espacios o guiones.\nEste nombre será usado como nombre del archivo de datos de SQLite.",
+       "config-postgres-old": "Se requiere PostgreSQL $1 o posterior. Tienes la versión $2.",
+       "config-mssql-old": "Se requiere Microsoft SQL Server $1 o posterior. Tienes la versión $2.",
+       "config-sqlite-name-help": "Elige el nombre que identificará a tu wiki.\nNo uses espacios o guiones.\nEste nombre se usará como nombre del archivo de datos de SQLite.",
        "config-sqlite-parent-unwritable-group": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code> , porque el directorio padre <code><nowiki>$2</nowiki></code> no es accesible en escritura por el servidor Web.\n\nEl instalador ha determinado el usuario cuyo servidor Web se está ejecutando.\nConceda permisos de escritura en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haga:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code> , porque el directorio padre <code><nowiki>$2</nowiki></code> no es accesible en escritura por el servidor Web.\n\nEl programa de instalación no pudo determinar el usuario que se ejecuta en el servidor Web\nConceda permisos de escritura en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haga:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-sqlite-mkdir-error": "Error al crear el directorio de datos \"$1\".\nComprueba la ubicación e inténtalo de nuevo.",
-       "config-sqlite-dir-unwritable": "No se puede escribir en el directorio \"$1\".\nModifica los permisos para que el servidor web pueda escribir en él y vuelve a intentarlo.",
-       "config-sqlite-connection-error": "$1.\n\nVerifique el directório de datos y el nombre de la base de datos mostrada a continuación e inténtalo nuevamente.",
+       "config-sqlite-dir-unwritable": "No se puede escribir en el directorio \"$1\".\nModifica sus permisos para que el servidor web pueda escribir en él, y vuelve a intentarlo.",
+       "config-sqlite-connection-error": "$1.\n\nVerifica el directorio de datos y el nombre de la base de datos mostrada a continuación, e inténtalo nuevamente.",
        "config-sqlite-readonly": "El archivo <code>$1</code> no se puede escribir.",
        "config-sqlite-cant-create-db": "No fue posible crear el archivo de la base de datos <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "El PHP no tiene compatibilidad FTS3. actualizando tablas a una versión anterior",
-       "config-can-upgrade": "Esta base de datos contiene tablas de MediaWiki.\nPara actualizarlas a MediaWiki $1, haz clic en '''Continuar'''.",
-       "config-upgrade-done": "Actualización completa.\n\nUsted puede ahora [ $1  empezar a usar su wiki].\n\nSi desea regenerar su archivo <code>LocalSettings.php</code> de archivo, haga clic en el botón de abajo.\nEsto '''no se recomienda''' a menos que esté teniendo problemas con su wiki.",
-       "config-upgrade-done-no-regenerate": "Actualización completa.\n\nUsted puede ahora [$1  empezar a usar su wiki].",
+       "config-can-upgrade": "Esta base de datos contiene tablas de MediaWiki.\nPara actualizarlas a MediaWiki $1, haz clic en <strong>Continuar</strong>.",
+       "config-upgrade-done": "Actualización completa.\n\nYa puedes [$1 empezar a usar tu wiki].\n\nSi quieres regenerar tu archivo <code>LocalSettings.php</code>, haz clic en el botón de abajo.\nEsto <strong>no se recomienda</strong> a menos que estés teniendo problemas con tu wiki.",
+       "config-upgrade-done-no-regenerate": "Actualización completa.\n\nYa puedes [$1 empezar a usar tu wiki].",
        "config-regenerate": "Regenerar LocalSettings.php →",
        "config-show-table-status": "¡Falló la consulta <code>SHOW TABLE STATUS</code>!",
-       "config-unknown-collation": "'''Advertencia:''' La base de datos está utilizando una intercalación no reconocida.",
+       "config-unknown-collation": "<strong>Advertencia:</strong> la base de datos está utilizando una intercalación no reconocida.",
        "config-db-web-account": "Cuenta de la base de datos para acceso web",
-       "config-db-web-help": "Elige el usuario y contraseña que el servidor Web usará para conectarse al servidor de la base de datos durante el fincionamiento normal del wiki.",
+       "config-db-web-help": "Elige el usuario y contraseña que el servidor web usará para conectarse al servidor de la base de datos durante el funcionamiento normal del wiki.",
        "config-db-web-account-same": "Utilizar la misma cuenta que en la instalación",
        "config-db-web-create": "Crear la cuenta si no existe",
-       "config-db-web-no-create-privs": "La cuenta que has especificado para la instalación no tiene privilegios suficientes para crear una cuenta.\nLa cuenta que especifiques aquí debe existir.",
+       "config-db-web-no-create-privs": "La cuenta que has especificado para la instalación no tiene privilegios suficientes para crear una cuenta.\nLa cuenta que especifiques aquí ya debe existir.",
        "config-mysql-engine": "Motor de almacenamiento:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
-       "config-mysql-myisam-dep": "'''Atención''': Ha seleccionado MyISAM como motor de almacenamiento de MySQL, el cual no está recomendado para su uso con MediaWiki, porque:\n * apenas soporta accesos simultáneos debido al bloqueo de tablas\n * es más propenso a la corrupción que otros motores\n * el código MediaWiki no siempre controla MyISAM como debiera\n\nSi su instalación de MySQL soporta InnoDB, es muy recomendable que lo elija en su lugar.\nSi la instalación de MySQL no admite InnoDB, quizás es el momento de una actualización.",
-       "config-mysql-only-myisam-dep": "'''Advertencia:''' Solo se ha encontrado el motor de almacenamiento MyISAM para MySQL en esta máquina, y no se recomienda su uso con MediaWiki, porque:\n* apenas soporta concurrencia debido a los bloqueos de tablas\n* es más propenso a sufrir corrupción de datos que otros motores\n* el código MediaWiki no siempre maneja MyISAM como debería\n\nTu instalación de MySQL no soporta InnoDB, quizá vaya siendo hora de actualizarla.",
-       "config-mysql-engine-help": "'''InnoDB''' es casi siempre la mejor opción, dado que soporta bien los accesos simultáneos.\n\n'''MyISAM''' es más rápido en instalaciones de usuario único o de sólo lectura.\nLas bases de datos MyISAM tienden a corromperse más a menudo que las bases de datos InnoDB.",
+       "config-mysql-myisam-dep": "<strong>Advertencia:</strong> has seleccionado MyISAM como motor de almacenamiento de MySQL, el cual no está recomendado para usarse con MediaWiki, porque:\n* apenas soporta concurrencia debido al bloqueo de tablas\n* es más propenso a la corrupción que otros motores\n* el código MediaWiki no siempre controla MyISAM como debiera\n\nSi tu instalación de MySQL soporta InnoDB, es muy recomendable que lo elijas en su lugar.\nSi tu instalación de MySQL no soporta InnoDB, quizás es el momento de una actualización.",
+       "config-mysql-only-myisam-dep": "<strong>Advertencia:</strong> solo se ha encontrado el motor de almacenamiento MyISAM para MySQL en esta máquina, y no se recomienda su uso con MediaWiki, porque:\n* apenas soporta concurrencia debido al bloqueo de tablas\n* es más propenso a la corrupción que otros motores\n* el código MediaWiki no siempre controla MyISAM como debiera\n\nTu instalación de MySQL no soporta InnoDB, quizás es el momento de una actualización.",
+       "config-mysql-engine-help": "<strong>InnoDB</strong> es casi siempre la mejor opción, dado que soporta bien los accesos simultáneos.\n\n<strong>MyISAM</strong> puede ser más rápido en instalaciones con usuario único o de sólo lectura.\nLas bases de datos MyISAM tienden a corromperse más a menudo que las bases de datos InnoDB.",
        "config-mysql-charset": "Conjunto de caracteres de la base de datos:",
        "config-mysql-binary": "Binario",
        "config-mysql-utf8": "UTF-8",
        "config-mssql-windowsauth": "Autentificación de Windows",
        "config-site-name": "Nombre del wiki:",
        "config-site-name-help": "Esto aparecerá en la barra de título del navegador y en varios otros lugares.",
-       "config-site-name-blank": "Ingresar un nombre de sitio.",
-       "config-project-namespace": "Espacio de nombre de proyecto:",
+       "config-site-name-blank": "Escribe un nombre de sitio.",
+       "config-project-namespace": "Espacio de nombres del proyecto:",
        "config-ns-generic": "Proyecto",
        "config-ns-site-name": "Igual al nombre del wiki: $1",
        "config-ns-other": "Otro (especificar)",
        "config-ns-other-default": "MiWiki",
        "config-project-namespace-help": "Siguiendo el ejemplo de  Wikipedia, muchos wikis mantienen sus páginas de políticas separadas de sus páginas de contenido, en un \"'''espacio de nombres del proyecto'''\".\n\nTodos los títulos de página en este espacio de nombres comienzan con un determinado prefijo, que usted puede especificar aquí.\nTradicionalmente, este prefijo se deriva del nombre del wiki, pero no puede contener caracteres de puntuación como \"#\" o \":\".",
-       "config-ns-invalid": "El espacio de nombre especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifica un espacio de nombre de proyecto diferente.",
-       "config-ns-conflict": "El espacio de nombres especificado \"<nowiki>$1</nowiki>\" entra en conflicto con un espacio de nombres predeterminado de MediaWiki.\nEspecifique un espacio de nombres de proyecto diferente.",
+       "config-ns-invalid": "El espacio de nombres especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifica uno diferente.",
+       "config-ns-conflict": "El espacio de nombres especificado \"<nowiki>$1</nowiki>\" entra en conflicto con uno predeterminado de MediaWiki.\nEspecifica uno diferente.",
        "config-admin-box": "Cuenta de administrador",
        "config-admin-name": "Tu nombre de usuario:",
        "config-admin-password": "Contraseña:",
        "config-admin-password-confirm": "Repite la contraseña:",
        "config-admin-help": "Escribe aquí el nombre de usuario que desees, como por ejemplo \"Pedro Bloggs\".\nEste es el nombre que usarás para entrar al wiki.",
-       "config-admin-name-blank": "Introduce un nombre de usuario de administrador.",
-       "config-admin-name-invalid": "El nombre de usuario especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifique un nombre de usuario diferente.",
-       "config-admin-password-blank": "Introduzca una contraseña para la cuenta de administrador.",
+       "config-admin-name-blank": "Escribe un nombre de usuario de administrador.",
+       "config-admin-name-invalid": "El nombre de usuario especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifica un nombre de usuario diferente.",
+       "config-admin-password-blank": "Escribe una contraseña para la cuenta de administrador.",
        "config-admin-password-mismatch": "Las dos contraseñas que ingresaste no coinciden.",
        "config-admin-email": "Dirección de correo electrónico:",
-       "config-admin-email-help": "Introduce aquí un correo electrónico que te permita recibir mensajes de otros usuarios del wiki, vuelve a configurar tu contraseña y recibe notificaciones de cambios realizados a tus páginas vigiladas. Puedes dejar este campo vacío.",
+       "config-admin-email-help": "Escribe aquí una dirección de correo electrónico para que te permita recibir mensajes de otros usuarios del wiki, restablecer tu contraseña y recibir notificaciones de cambios a tus páginas vigiladas. Puedes dejar este campo vacío.",
        "config-admin-error-user": "Error interno al crear un administrador con el nombre \"<nowiki>$1</nowiki>\".",
-       "config-admin-error-password": "Error interno al establecer una contraseña para el administrador \" <nowiki>$1</nowiki> \": <pre>$2</pre>",
-       "config-admin-error-bademail": "Ha introducido una dirección de correo electrónico inválida.",
-       "config-subscribe": "Suscribirse para recibir [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce avisos de nuevas versiones].",
+       "config-admin-error-password": "Error interno al establecer una contraseña para el administrador \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+       "config-admin-error-bademail": "Has escrito una dirección de correo electrónico no válida.",
+       "config-subscribe": "Suscribirse a la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de correo de anuncios de versiones].",
        "config-subscribe-help": "Esta es una lista de divulgación de bajo volumen para anuncios de lanzamiento de versiones nuevas, incluyendo anuncios de seguridad importantes.\nTe recomendamos suscribirte y actualizar tu instalación MediaWiki cada vez que se lance una nueva versión.",
        "config-subscribe-noemail": "Ha intentado suscribirse a la lista de correo de anuncios de nuevos lanzamientos sin proporcionar una dirección de correo electrónico.\nProporcione una dirección de correo electrónico si desea suscribirse a la lista de correo.",
-       "config-almost-done": "¡Ya casi has terminado!\nAhora puedes saltarte el resto de pasos e instalar el wiki con valores predeterminados.",
+       "config-almost-done": "¡Ya casi has terminado!\nAhora puedes saltarte el resto de los pasos e instalar el wiki ya.",
        "config-optional-continue": "Hazme más preguntas.",
        "config-optional-skip": "Ya estoy aburrido, sólo instala el wiki.",
        "config-profile": "Perfil de derechos de usuario:",
        "config-help-tooltip": "haz clic para ampliar",
        "config-nofile": "El archivo \"$1\" no se pudo encontrar. ¿Se ha eliminado?",
        "config-extension-link": "¿Sabías que tu wiki admite [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nPuedes navegar por las [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category categorías] o visitar el [//www.mediawiki.org/wiki/Extension_Matrix centro de extensiones] para ver una lista completa.",
-       "mainpagetext": "<strong>MediaWiki se ha instalado con éxito.<strong>",
+       "mainpagetext": "<strong>MediaWiki se ha instalado con éxito.</strong>",
        "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Help:Contents/es guía del usuario] para obtener información sobre el uso del software wiki.\n\n== Primeros pasos ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Manual:FAQ/es Preguntas frecuentes sobre MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de publicación de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traducir MediaWiki en tu idioma]"
 }
index d29a3d4..a3732a8 100644 (file)
@@ -4,10 +4,12 @@
                        "Avjoska",
                        "Pikne",
                        "Boxmein",
-                       "Cumbril"
+                       "Cumbril",
+                       "Roland"
                ]
        },
        "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",
        "config-your-language": "Oma keel:",
        "config-wiki-language": "Viki keel:",
        "config-page-complete": "Valmis!",
        "config-page-restart": "Alusta installimist uuesti",
        "config-page-readme": "Loe mind",
+       "config-page-releasenotes": "Redaktsioonimärkmed",
        "config-page-copying": "Kopeerimine",
        "config-page-upgradedoc": "Uuendamine",
        "config-page-existingwiki": "Olemasolev viki",
        "config-restart": "Jah, tee taaskäivitus",
+       "config-env-php": "PHP $1 on paigaldatud.",
        "config-env-hhvm": "HHVM $1 on installitud.",
+       "config-diff3-bad": "GNU diff3 ei leitud.",
+       "config-db-type": "Andmebaasi tüüp:",
        "config-db-name": "Andmebaasi nimi:",
+       "config-db-name-oracle": "Andmebaasi skeem:",
        "config-db-username": "Andmebaasi kasutajanimi:",
        "config-db-password": "Andmebaasi parool:",
        "config-db-port": "Andmebaasi port:",
index 7e06c60..6452fc6 100644 (file)
@@ -7,7 +7,8 @@
                        "Omidh",
                        "Pouyana",
                        "Reza1615",
-                       "Alirezaaa"
+                       "Alirezaaa",
+                       "Danialbehzadi"
                ]
        },
        "config-desc": "نصب کنندهٔ ویکی‌مدیا",
        "config-help-restart": "آیا می‌خواهید همهٔ اطلاعات ذخیره شده‌ای که وارد کرده‌اید را پاک کنید و دوباره روند نصب را شروع کنید؟",
        "config-restart": "بله، دوباره راه‌اندازی کن",
        "config-welcome": "===بررسی‌های محیطی===\nبرای فهمیدن اینکه این محیط برای نصب مدیاویکی مناسب است، اکنون بررسی‌های اساسی انجام خواهد‌شد.\nاگر به دنبال پشتیبانی در چگونگی تکمیل نصب هستید،به یاد داشته باشید این اطلاعات را بگنجانید.",
-       "config-copyright": "===حق چاپ و شرایط===\n$1\nاین برنامه،نرم‌افزاری آزاد است;شما می‌توانید این برنامه را دوباره توزیع کنید و/یا تحت شرایط مجوز عمومی کلی جی‌ان‌یو که توسط بنیاد نرم‌افزار آزاد منتشر شده،اصلاح کنید;یا نسخهٔ 2 مجوز، یا (به انتخاب خود) هر نسخهٔ پس از این.\nاین برنامه به امید اینکه مفید واقع‌ شود توزیع شده‌است،اما '''بدون هیچ ضمانتی'''; حتی بدون اشارهٔ ضمانتی از '''قابلیت عرضه''' یا ''' صلاحیت برای یک هدف خاص'''.\nبرای جزئیات بیشتر مجوز عمومی کلی جی‌ان‌یو را مشاهده کنید.\nشما باید <doclink href=Copying> یک چاپ ازمجوز عمومی کلی </doclink> همراه این برنامه دریافت کنید; اگر دریافت نکردید،به بنیاد نرم‌افزار آزاد بنویسید،Inc.،خیابان فرانکلین۵۱،طبقه پنجم،بوستون، MA۰۲۱۱۰-۱۳۰،آمریکا،یا [http://www.gnu.org/copyleft/gpl.html read it online].",
+       "config-copyright": "===حق چاپ و شرایط===\n$1\nاین برنامه، یک نرم‌افزاری آزاد است. شما می‌توانید آن را بازتوزیع کرده و/یا با شرایط نگارش ۲ یا (با نظر خودتان) هر نگارش جدیدتری از پروانه جامع همگانی گنو که توسط بنیاد نرم‌افزار آزاد منتشر شده، تغییر دهید.\n\nاین برنامه با امید این که مفید واقع‌ شود توزیع شده‌است،اما '''بدون هیچ ضمانتی'''; حتی بدون اشارهٔ ضمانتی از '''قابلیت عرضه''' یا ''' صلاحیت برای یک هدف خاص'''.\nبرای جزئیات بیش‌تر پروانه جامع همگانی گنو را مشاهده کنید.\n\nشما باید <doclink href=Copying> یک نگارش ازمجوز عمومی کلی </doclink> همراه این برنامه دریافت کرده باشید. در غیر این صورت با بنیاد نرم‌افزار آزاد، ایالات متحده امریکا، بوستون، خیابان فرانکلین، پلاک ۵۱، طبقه پنجم، صندوق پستی MA۰۲۱۱۰-۱۳۰ مکاتبه کنید، یا [http://www.gnu.org/copyleft/gpl.html در این‌جا به صورت برخط بخوانید].",
        "config-sidebar": "* [//www.mediawiki.org صفحهٔ اصلی مدیاویکی]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents راهنمای کاربر]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents راهنمای مدیر]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ پرسش‌های رایج]\n----\n* <doclink href=Readme>مرا بخوان</doclink>\n* <doclink href=ReleaseNotes>یادداشت‌های انتشار</doclink>\n* <doclink href=Copying>نسخه برداری</doclink>\n* <doclink href=UpgradeDoc>ارتقا</doclink>",
        "config-env-good": "محیط بررسی شده‌است.\nشما می‌توانید مدیاویکی را نصب کنید.",
        "config-env-bad": "محیط بررسی شده‌است.\nشما نمی‌توانید مدیاویکی را نصب کنید.",
        "config-env-php": "پی‌اچ‌پی $1 نصب شده‌است.",
        "config-env-hhvm": "HHVM $1 نصب شده‌است.",
-       "config-unicode-using-utf8": "برای یونیکد عادی از Brion Vibber's utf8_normalize.so استفاده کنید.",
        "config-unicode-using-intl": "برای یونیکد عادی از [http://pecl.php.net/intl intl PECL extension] استفاده کنید.",
        "config-unicode-pure-php-warning": "'''هشدار:''' [http://pecl.php.net/intl intl PECL extension] برای کنترل یونیکد عادی در دسترس نیست،اجرای کاملاً آهسته به تعویق می‌افتد.\nاگر شما یک سایت پر‌ ترافیک را اجرا می‌کنید، باید کمی [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization] را بخوانید.",
        "config-unicode-update-warning": "'''هشدار:''' نسخهٔ نصب شدهٔ پوشهٔ یونیکد عادی از ورژن قدیمی‌تر کتابخانه [http://site.icu-project.org/ the ICU project's] استفاده می‌کند.\nاگر کلاً علاقه‌مند به استفاده از یونیکد هستید باید [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade].",
-       "config-no-db": "درایور پایگاه اطلاعاتی مناسب پیدا نشد! شما لازم دارید یک درایور پایگاه اطلاعاتی  برای پی‌اچ‌پی نصب کنید.انواع پایگاه اطلاعاتی زیر پشتیبانی شده‌اند:$1.\nاگر شما در گروه اشتراک‌گذاری هستید، از تهیه کنندهٔ گروه خود برای نصب یک درایور پایگاه اطلاعاتی مناسب سوأل کنید.\nاگر خود، پی‌اچ‌پی را تهیه کرده‌اید، با یک پردازشگر فعال دوباره پیکربندی کنید، برای مثال از <code>./configure --with-mysql</code> استفاده کنید.\nاگر پی‌اچ‌پی را از یک بستهٔ دبیان یا آبونتو نصب کرده‌اید، بنابراین لازم دارید بخش php5-mysql را نصب کنید.",
+       "config-no-db": "درایور پایگاه اطلاعاتی مناسب پیدا نشد! شما لازم دارید یک درایور پایگاه اطلاعاتی  برای پی‌اچ‌پی نصب کنید.انواع پایگاه اطلاعاتی زیر پشتیبانی شده‌اند:$1.\nاگر شما در گروه اشتراک‌گذاری هستید، از تهیه کنندهٔ گروه خود برای نصب یک درایور پایگاه اطلاعاتی مناسب {{PLURAL:$2|سوأل کنید.|سوأل کنید.}}\nاگر خود، پی‌اچ‌پی را تهیه کرده‌اید، با یک پردازشگر فعال دوباره پیکربندی کنید، برای مثال از <code>./configure --with-mysql</code> استفاده کنید.\nاگر پی‌اچ‌پی را از یک بستهٔ دبیان یا آبونتو نصب کرده‌اید، بنابراین لازم دارید بخش php5-mysql را نصب کنید.",
        "config-outdated-sqlite": "''' هشدار:''' شما اس‌کیولایت $1 دارید، که پایین‌تر از حداقل نسخهٔ $2 مورد نیاز است.اس‌کیولایت در دسترس نخواهد بود.",
        "config-no-fts3": "'''هشدار:''' اس‌کیولایت بدون [//sqlite.org/fts3.html FTS3 module] تهیه شده‌است ، جستجوی ویژگی‌ها در این بخش پیشین در دسترس نخواهد‌بود.",
        "config-register-globals-error": "<strong>خطا:  پی‌اچ‌پی<code>[http://php.net/register_globals register_globals]</code> گزینه فعال است.\nبرای ادامه نصب باید غیر فعال باشد.</strong>\n[Https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] را برای کمک در مورد نحوه انجام این کار ببینید.",
        "config-db-name": "نام پایگاه اطلاعاتی:",
        "config-db-name-help": "نامی را انتخاب کنید که ویکی شما را شناسایی کند.\nنباید شامل فاصله باشد.\nاگر از گروه شبکهٔ اشتراک‌گذاری استفاده می‌کنید، تهیه‌کنندهٔ گروهتان یا باید به شما نام یک پایگاه اطلاعاتی مشخص برای استفاده بدهد یا برای ایجاد پایگاه‌های اطلاعاتی از طریق یک کنترل پنل به شما اجازه بدهد.",
        "config-db-name-oracle": "طرح کلی پایگاه اطلاعاتی:",
-       "config-db-account-oracle-warn": "برای نصب برنامهٔ اوراکل بهعنوان پایگاه اطلاعاتی در بخش گذشته،سه سناریو پشتیبانی شده است:\nاگر مایل به ایجاد حساب پایگاه اطلاعاتی به عنوان بخشی از روند نصب هستید، لطفاً یک حساب با نقش اس‌وای‌اس‌دی‌بی‌ای به عنوان حساب پایگاه اطلاعاتی برای نصب تهیه کنید و اعتبارنامه‌های مطلوبی را برای حساب دردسترس شبکه تعیین کنید، به عبارتی دیگر یا می‌توانید حساب دردسترس شبکه را به طور دستی ایجاد کنید و تنها آن حساب را تهیه کنید (اگر مستلزم مجوزهایی برای ایجاد موضوعات طرح کلی باشد) یا دو حساب دیگر تهیه کنید،یکی با ایجاد مزایا و یک حساب محدود برای دسترسی شبکه.\nمتنی برای ایجاد یک حساب با مزایای لازم بنویسید که می‌تواند در فهرست\"نگهداری/برنامهٔ اوراکل\" این نصب یافت شود. به یاد داشته باشید که استفاده از یک حساب محدود،همهٔ قابلیت‌های نگهداری با حساب پیش‌فرض را غیرفعال خواهد کرد.",
+       "config-db-account-oracle-warn": "برای نصب برنامهٔ اوراکل به عنوان پایگاه اطلاعاتی در بخش گذشته،سه سناریو پشتیبانی شده است:\nاگر مایل به ایجاد حساب پایگاه اطلاعاتی به عنوان بخشی از روند نصب هستید، لطفاً یک حساب با نقش اس‌وای‌اس‌دی‌بی‌ای به عنوان حساب پایگاه اطلاعاتی برای نصب تهیه کنید و اعتبارنامه‌های مطلوبی را برای حساب دردسترس شبکه تعیین کنید، به عبارتی دیگر یا می‌توانید حساب دردسترس شبکه را به طور دستی ایجاد کنید و تنها آن حساب را تهیه کنید (اگر مستلزم مجوزهایی برای ایجاد موضوعات طرح کلی باشد) یا دو حساب دیگر تهیه کنید،یکی با ایجاد مزایا و یک حساب محدود برای دسترسی شبکه.\nمتنی برای ایجاد یک حساب با مزایای لازم بنویسید که می‌تواند در فهرست\"نگهداری/برنامهٔ اوراکل\" این نصب یافت شود. به یاد داشته باشید که استفاده از یک حساب محدود،همهٔ قابلیت‌های نگهداری با حساب پیش‌فرض را غیرفعال خواهد کرد.",
        "config-db-install-account": "حساب کاربری برای نصب",
        "config-db-username": "نام کاربری پایگاه اطلاعات:",
        "config-db-password": "گذرواژه پایگاه داده‌ها:",
        "config-db-schema-help": "طرح کلی اغلب بی‌نقص خواهد بود.\nاگر می‌دانید نیاز دارید که تغییرش دهید،آن را تغییر دهید.",
        "config-pg-test-error": "نمی‌توان به پایگاه اطلاعاتی '''$1''' وصل شد: $2",
        "config-sqlite-dir": "فهرست اطلاعات اس‌کیو‌لایت:",
-       "config-sqlite-dir-help": "اس‌کیولایت همهٔ اطلاعات را در یک پوشهٔ جداگانه ذخیره می‌کند.\nفهرستی را که به وجود‌ آوردید باید در طی نصب به‌ وسیلهٔ وب‌سرور قابل نوشتن باشد.\nنباید از طریق وب در دسترس باشد،به همین دلیل ما آن را در جایی که پوشه‌های پی‌اچ‌پی شما هست، قرار نمی‌دهیم.\nنصب کننده یک پوشهٔ <code>.htaccess</code> همراه آن خواهدآورد،اما اگر این کار را انجام ندهد،کسی می‌تواند به پایگاه اطلاعاتی شما دسترسی پیدا کند.\nاطلاعات خام کاربر شامل (آدرس‌های رایانامه،علامت‌‌ها با شماره‌های رمز عبور) به خوبی پاک کردن تغییرات و دیگر اطلاعات محرمانه در ویکی.\nقرار دادن پایگاه اطلاعاتی باهم را در جایی دیگر در نظر بگیرید، برای مثال در <code>/var/lib/mediawiki/yourwiki</code>.",
+       "config-sqlite-dir-help": "اس‌کیولایت همهٔ اطلاعات را در یک پوشهٔ جداگانه ذخیره می‌کند.\nفهرستی را که به وجود‌ آوردید باید در طی نصب به‌ وسیلهٔ وب‌سرور قابل نوشتن باشد.\n<strong>نباید</strong> از طریق وب در دسترس باشد، به همین دلیل ما آن را در جایی که پوشه‌های پی‌اچ‌پی شما هست، قرار نمی‌دهیم.\nنصب کننده یک پوشهٔ <code>.htaccess</code> همراه آن خواهدآورد،اما اگر این کار را انجام ندهد،کسی می‌تواند به پایگاه اطلاعاتی شما دسترسی پیدا کند.\nاطلاعات خام کاربر شامل (آدرس‌های ایمیل، علامت‌‌ها با شماره‌های رمز عبور) به خوبی پاک کردن تغییرات و دیگر اطلاعات محرمانه در ویکی.\nقرار دادن پایگاه اطلاعاتی باهم را در جایی دیگر در نظر بگیرید، برای مثال در <code>/var/lib/mediawiki/yourwiki</code>.",
        "config-oracle-def-ts": "جدول پیش فرض:",
        "config-oracle-temp-ts": "جدول موقت:",
        "config-type-mysql": "مای‌اس‌کیو‌ال (یا سازگار)",
        "config-admin-name-invalid": "نام کاربری تعیین شدهٔ \"<nowiki>$1</nowiki>\" نامعتبر است.\nیک نام کاربری دیگر تعیین کنید.",
        "config-admin-password-blank": "برای حساب سرپرست یک رمز عبور وارد کنید.",
        "config-admin-password-mismatch": "دو رمز عبوری که وارد کرده‌اید با هم مطابقت ندارند.",
-       "config-admin-email": "راÛ\8cاÙ\86اÙ\85Ù\87Ù\94 Ø´Ù\85ا:",
-       "config-admin-email-help": "Û\8cÚ© Ø¢Ø¯Ø±Ø³ Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 Ø¨Ø±Ø§Û\8c Ø§Ø¬Ø§Ø²Ù\87Ù\94 Ø¯Ø±Û\8cاÙ\81ت Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 Ø§Ø² Ø¯Û\8cگر Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86 Ù\88Û\8cÚ©Û\8cØ\8cاÛ\8cÙ\86جا Ù\88ارد Ú©Ù\86Û\8cدØ\8c Ø±Ù\85ز Ø¹Ø¨Ù\88ر Ø®Ù\88د Ø±Ø§ Ø¯Ù\88بارÙ\87 ØªÙ\86ظÛ\8cÙ\85 Ú©Ù\86Û\8cدØ\8c Ù\88 Ø§Ø² ØªØºÛ\8cÛ\8cرات ØµÙ\81Ø­Ù\87 Ø¯Ø± Ù\81Ù\87رست Ù¾Û\8cÚ¯Û\8cرÛ\8cÙ\87ا Ù\85Ø·Ù\84ع Ø¨Ø§Ø´Û\8cد.Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ø§Û\8cÙ\86 Ø²Ù\85Û\8cÙ\86Ù\87 را خالی بگذارید.",
+       "config-admin-email": "آدرس Ø§Û\8cÙ\85Û\8cÙ\84:",
+       "config-admin-email-help": "Û\8cÚ© Ø¢Ø¯Ø±Ø³ Ø§Û\8cÙ\85Û\8cÙ\84 Ø¨Ø±Ø§Û\8c Ø§Ø¬Ø§Ø²Ù\87Ù\94 Ø¯Ø±Û\8cاÙ\81ت Ø§Û\8cÙ\85Û\8cÙ\84 Ø§Ø² Ø¯Û\8cگر Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86 Ù\88Û\8cÚ©Û\8cØ\8c Ø§Û\8cÙ\86جا Ù\88ارد Ú©Ù\86Û\8cدØ\8c Ø±Ù\85ز Ø¹Ø¨Ù\88ر Ø®Ù\88د Ø±Ø§ Ø¯Ù\88بارÙ\87 ØªÙ\86ظÛ\8cÙ\85 Ú©Ù\86Û\8cدØ\8c Ù\88 Ø§Ø² ØªØºÛ\8cÛ\8cرات ØµÙ\81Ø­Ù\87 Ø¯Ø± Ù\81Ù\87رست Ù¾Û\8cÚ¯Û\8cرÛ\8câ\80\8cÙ\87ا Ù\85Ø·Ù\84ع Ø¨Ø§Ø´Û\8cد. Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ø§Û\8cÙ\86 Ø¨Ø®Ø´ را خالی بگذارید.",
        "config-admin-error-user": "خطای داخلی هنگام ایجاد یک مدیر با نام \"<nowiki>$1</nowiki>\".",
        "config-admin-error-password": "خطای داخلی هنگام تنظیم یک رمز عبور برای مدیر \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
-       "config-admin-error-bademail": "Ø´Ù\85ا Ø¢Ø¯Ø±Ø³ Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ù\94 نامعتبر وارد کرده‌اید.",
+       "config-admin-error-bademail": "Ø´Ù\85ا Ø¢Ø¯Ø±Ø³ Ø§Û\8cÙ\85Û\8cÙ\84 نامعتبر وارد کرده‌اید.",
        "config-subscribe": "عضویت در [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce release announcements mailing list].",
        "config-subscribe-help": "این یک میلینگ لیست کم حجم است که برای اطلاع‌رسانی کاربرد دارد و شامل اطلاعیه‌های امنیتی می‌شود.\nشما باید در آن ثبت نام کنید و زمانی که نسخهٔ جدید مدیاویکی ارائه شد آن را به‌روز نمائید.",
-       "config-subscribe-noemail": "Ø´Ù\85ا Ø¨Ø¯Ù\88Ù\86 Ø«Ø¨Øª Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87â\80\8cتاÙ\86 Ù\82صد Ø¯Ø§Ø´ØªÛ\8cد Ø¯Ø± Ù\81Ù\87رست Ù¾Ø³ØªÛ\8c Ø«Ø¨Øªâ\80\8cÙ\86اÙ\85 Ú©Ù\86Û\8cد.\nاگر Ù\82صد Ø«Ø¨Øªâ\80\8cÙ\86اÙ\85 Ø¯Ø§Ø±Û\8cد Ù\84Ø·Ù\81اÙ\8b Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87â\80\8cای مشخص کنید.",
+       "config-subscribe-noemail": "Ø´Ù\85ا Ø¨Ø¯Ù\88Ù\86 Ø«Ø¨Øª Ø¢Ø¯Ø±Ø³ Ø§Û\8cÙ\85Û\8cÙ\84 Ù\82صد Ø¯Ø§Ø´ØªÛ\8cد Ø¯Ø± Ù\81Ù\87رست Ø§Û\8cÙ\85Û\8cÙ\84â\80\8cرساÙ\86Û\8c Ø«Ø¨Øªâ\80\8cÙ\86اÙ\85 Ú©Ù\86Û\8cد.\nاگر Ù\82صد Ø«Ø¨Øªâ\80\8cÙ\86اÙ\85 Ø¯Ø§Ø±Û\8cد Ù\84Ø·Ù\81اÙ\8b Ø§Û\8cÙ\85Û\8cÙ\84ی مشخص کنید.",
        "config-almost-done": "شما تقریباً عملیات را کامل کرده‌اید.\nاکنون می‌توانید پیکربندی باقیمانده را نخوانده رها کنید و درحال‌حاضر ویکی را نصب کنید.",
        "config-optional-continue": "سوال‌های بیشتری از من بپرسید.",
        "config-optional-skip": "درحال‌حاضر خسته‌ام،سریعاً ویکی را نصب کنید.",
        "config-license-pd": "مالکیت عمومی",
        "config-license-cc-choose": "انتخاب یک مجوز سفارشی عوام خلاق",
        "config-license-help": "بسیاری از وبگاه‌ها ویرایش‌های ها را با  [http://freedomdefined.org/Definition اجازه‌نامهٔ آزاد] منتشر می‌کنند.\nاین کار به داشتن حس مالکیت جمعی کمک می‌کند و ویرایش‌های طولانی مدت را اشاعه می‌دهد.\nاین برای ویکی‌های خصوصی یا سازمانی الزامی نیست.\n\nاگر شما می‌خواهید از متون ویکی‌پدیا استفاده کنید، یا اینکه به ویکی‌پدیا اجازه دهید از متون شما استفاده کند باید متون خود را با <strong>{{int:config-license-cc-by-sa}}</strong> منتشر کنید.\n\nویکی‌پدیا در گذشته از اجازه‌نامهٔ داده‌های آزاد گنو استفاده می‌کرد.\nاین اجازه‌نامه مورد قبول است، ولی فهم آن آسان نیست.\nهمچنین استفادهٔ دوباره از متون تحت اجازه‌نامهٔ داده‌های آزاد گنو به سختی انجام می‌گیرد.",
-       "config-email-settings": "تÙ\86ظÛ\8cÙ\85ات Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87",
-       "config-enable-email": "Ù\81عاÙ\84â\80\8cسازÛ\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ù\94 خروجی",
-       "config-enable-email-help": "اگر برای کار کردن رایانامه می‌خواهید [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] نیازمند پیکربندی صحیح است.\nاگر هیچ ویژگی رایانامه را نمی‌خواهید، می‌توانید آنها را اینجا غیر‌فعال کنید.",
-       "config-email-user": "Ù\81عاÙ\84â\80\8cکردÙ\86 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ù\94 کاربر به کاربر",
-       "config-email-user-help": "بÙ\87 Ù\87Ù\85Ù\87Ù\94 Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86Û\8c Ú©Ù\87 Ø§Ø±Ø³Ø§Ù\84 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 Ø±Ø§ Ø¯Ø± Ø§Ù\88Ù\84Ù\88Û\8cتâ\80\8cÙ\87اÛ\8c Ø®Ù\88د Ù\81عاÙ\84 Ú©Ø±Ø¯Ù\87â\80\8cاÙ\86دØ\8cاجازÙ\87 Ø®Ù\88اÙ\87د Ø¯Ø§Ø¯Ù\87â\80\8cشد Ú©Ù\87 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 Ø®Ù\88د Ø±Ø§ Ø¨Ù\87 Û\8cکدÛ\8cگر ارسال کنند.",
+       "config-email-settings": "تÙ\86ظÛ\8cÙ\85ات Ø§Û\8cÙ\85Û\8cÙ\84",
+       "config-enable-email": "Ù\81عاÙ\84â\80\8cسازÛ\8c Ø§Û\8cÙ\85Û\8cÙ\84 خروجی",
+       "config-enable-email-help": "اگر می‌خواهید ارسال ایمیل کار کند، [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] نیازمند پیکربندی صحیح است.\nاگر هیچ قابلیت ایمیلی نمی‌خواهید، می‌توانید آنها را اینجا غیر‌فعال کنید.",
+       "config-email-user": "Ù\81عاÙ\84â\80\8cکردÙ\86 Ø§Û\8cÙ\85Û\8cÙ\84 کاربر به کاربر",
+       "config-email-user-help": "بÙ\87 Ù\87Ù\85Ù\87Ù\94 Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86Û\8c Ú©Ù\87 Ø§Ø±Ø³Ø§Ù\84 Ø§Û\8cÙ\85Û\8cÙ\84 Ø±Ø§ Ø¯Ø± ØªØ±Ø¬Û\8cحات Ø®Ù\88د Ù\81عاÙ\84 Ú©Ø±Ø¯Ù\87â\80\8cاÙ\86دØ\8c Ø§Ø¬Ø§Ø²Ù\87 Ø¯Ø§Ø¯Ù\87 Ø®Ù\88اÙ\87د Ø´Ø¯ Ú©Ù\87 Ø¨Ù\87 Û\8cکدÛ\8cگر Ø§Û\8cÙ\85Û\8cÙ\84 ارسال کنند.",
        "config-email-usertalk": "فعال‌کردن اطلاع‌رسانی صفحهٔ بحث کاربر",
        "config-email-usertalk-help": "به همهٔ کاربرانی که دریافت اطلاعیه را در اولویت‌های خود فعال کرده‌اند،اجازه خواهد داده‌شد که اطلاعیه‌ها را در صفحهٔ تغییر گفت‌وگوی کاربر دریافت کنند.",
        "config-email-watchlist": "فعال‌کردن اطلاع‌رسانی فهرست پیگیری‌ها",
        "config-email-watchlist-help": "به همهٔ کاربرانی که مشاهدهٔ صفحه را در اولویت‌های خود فعال کرده‌اند،اجازه خواهد داده‌شد که اطلاعیه‌های در رابطه با صفحات مشاهده شده را دریافت کنند.",
-       "config-email-auth": "فعال‌کردن تأیید اعتبار رایانامه",
-       "config-email-auth-help": "اگر این مورد را فعال کنید، کاربران باید رایانامه خود را با استفاده از پیوند تأییدهٔ که به رایانامه‌یشان فرستاده می‌شود، تأیید کنند. \nدر این صورت تنها رایانامه‌هایی که تأیید شده‌باشند، می‌توانند از سامانه در هنگام تغییرات رایانامه دریافت کنند.\nبرای ویکی‌هایی که به صورت عمومی استفاده می‌شوند، فعال‌کردن این گزینه پیشنهاد می‌شود.",
-       "config-email-sender": "بازگشت Ø¨Ù\87 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87:",
-       "config-email-sender-help": "آدرس Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87â\80\8cاÛ\8c Ø±Ø§ Ù\88ارد Ú©Ù\86Û\8cد Ú©Ù\87 Ù\87Ù\86گاÙ\85 Ù\85راجعت Ø¢Ø¯Ø±Ø³ Ø¨Ù\87 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ù\94 Ø®Ø§Ø±Ø¬Û\8c Ø§Ø³ØªÙ\81ادÙ\87 Ù\85Û\8câ\80\8cØ´Ù\88د.\nبÙ\87 Ø¬Ø§Û\8cÛ\8c Ú©Ù\87 Ù¾Û\8cاÙ\85â\80\8cÙ\87ا Ø¨Ø±Ú¯Ø´Øª Ø¯Ø§Ø¯Ù\87 Ù\85Û\8câ\80\8cØ´Ù\88Ù\86دØ\8c Ù\81رستادÙ\87 Ø®Ù\88اÙ\87دâ\80\8cشد.\nبسیاری از سرورهای پستی حداقل به بخش نام عمومی معتبر نیاز دارند.",
+       "config-email-auth": "فعال کردن احراز هویت توسط ایمیل",
+       "config-email-auth-help": "اگر این گزینه را فعال کنید، کاربران باید ایمیل خود را با استفاده از پیوند تأیید که به ایمیلشان ارسال می‌شود، تأیید کنند. \nدر این صورت تنها ایمیل‌هایی که تأیید شده باشند، می‌توانند از سیستم در هنگام تغییرات، ایمیل دریافت کنند.\nبرای ویکی‌هایی که به صورت عمومی استفاده می‌شوند، فعال‌کردن این گزینه پیشنهاد می‌شود.",
+       "config-email-sender": "آدرس Ø§Û\8cÙ\85Û\8cÙ\84 Ø¨Ø§Ø²Ú¯Ø´Øª:",
+       "config-email-sender-help": "آدرس Ø§Û\8cÙ\85Û\8cÙ\84Û\8c Ø±Ø§ Ù\88ارد Ú©Ù\86Û\8cد Ú©Ù\87 Ù\87Ù\86گاÙ\85 Ø§Ø±Ø³Ø§Ù\84 Ø§Û\8cÙ\85Û\8cÙ\84 Ø®Ø§Ø±Ø¬ Ø§Ø² Ù\85حدÙ\88دÙ\87 Ø§Ø² Ø¢Ù\86 Ø¨Ù\87 Ø¹Ù\86Ù\88اÙ\86 Ø§Û\8cÙ\85Û\8cÙ\84 Ø¨Ø§Ø²Ú¯Ø´Øª Ø§Ø³ØªÙ\81ادÙ\87 Ø´Ù\88د.\nبÙ\87 Ø¬Ø§Û\8cÛ\8c Ú©Ù\87 Ù¾Û\8cاÙ\85â\80\8cÙ\87ا Ø¨Ø±Ú¯Ø´Øª Ø¯Ø§Ø¯Ù\87 Ù\85Û\8câ\80\8cØ´Ù\88Ù\86دØ\8c Ù\81رستادÙ\87 Ø®Ù\88اÙ\87د شد.\nبسیاری از سرورهای پستی حداقل به بخش نام عمومی معتبر نیاز دارند.",
        "config-upload-settings": "بارگذاری‌های پرونده و تصویر",
        "config-upload-enable": "فعال‌سازی بارگذاری پرونده",
        "config-upload-help": "بارگذاری پرونده بصورت بالقوه می‌تواند کارساز شما در معرض خطرات امنیتی قرار بدهد. برای کسب اطلاعات بیشتر لطفاً [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security قسمت امنیتی] را مطالعه کنید.\n\nبرای اجازه‌دادن به بارگذاری پرونده‌ها٬ حالت زیر مجموعه <code>images</code> در پوشه ریشه مدیاویکی را تغییر دهید که کارسازهای وب قادر به نوشتن بر روی آن باشند. سپس این قابلیت را فعال کنید.",
index b3779e4..629b53b 100644 (file)
@@ -2,10 +2,17 @@
        "@metadata": {
                "authors": [
                        "Smtchahal",
-                       "Vivek Rai"
+                       "Vivek Rai",
+                       "Phoenix303",
+                       "संजीव कुमार"
                ]
        },
+       "config-desc": "साँचा लिए इंस्टॉलर",
+       "config-title": "मीडियाविकी  $1 इंस्टॉलेशन",
        "config-information": "जानकारी",
+       "config-localsettings-upgrade": "<code>LocalSettings.php</code> फ़ाइल पाया गया है ।\nइस स्थापना को अपग्रेड करने के लिए, नीचे दिए गए बॉक्स में <code>$wgUpgradeKey</code>  का मान दर्ज करें।\nआपको <code>LocalSettings.php</code> में मिल जाएगा।",
+       "config-localsettings-cli-upgrade": "<code>LocalSettings.php</code> फ़ाइल पाया गया है ।\nइस स्थापना को अपग्रेड करने के लिए, बदले में कृपया करके ये चलाए <code>update.php</code>",
+       "config-localsettings-key": "नवीनीकरण कुंजी",
        "config-localsettings-badkey": "आपकी दी गई कुंजी ग़लत है।",
        "config-your-language": "आपकी भाषा:",
        "config-wiki-language": "विकी भाषा:",
        "config-page-language": "भाषा",
        "config-page-welcome": "मीडियाविकी पर आपका स्वागत है!",
        "config-page-dbconnect": "डेटाबेस से जुड़ें",
+       "config-page-upgrade": "मौजूदा स्थापना का नवीनीकरण",
+       "config-page-dbsettings": "डेटाबेस वरियतायें",
        "config-page-name": "नाम",
        "config-page-options": "विकल्प",
        "config-page-install": "स्थापित करें",
        "config-page-complete": "पूर्ण!",
        "config-page-restart": "स्थापना को पुनरारंभ करें",
        "config-page-readme": "मुझे पढ़ें",
+       "config-page-releasenotes": "रिलीज नोट्स",
+       "config-page-copying": "अनुकरण",
+       "config-page-upgradedoc": "उन्नयन",
        "config-page-existingwiki": "मौजूदा विकि",
        "config-restart": "हाँ, इसे पुनः आरंभ करें",
        "config-env-php": "PHP $1 स्थापित किया गया है।",
-       "config-env-php-toolow": "PHP $1 स्थापित किया गया है।\nतथापि, मीडियाविकि PHP $2 या उच्चतर की आवश्यकता है।",
+       "config-db-wiki-settings": "इस विकि को पहचानें",
        "config-mssql-auth": "प्रमाणन प्रकार:",
        "config-mssql-sqlauth": "SQL सर्वर प्रमाणन",
        "config-site-name": "विकि का नाम:",
index 2303658..cf5ad45 100644 (file)
        "config-env-bad": "A környezet ellenőrzése befejeződött.\nA MediaWiki nem telepíthető.",
        "config-env-php": "A PHP verziója: $1",
        "config-env-hhvm": "HHVM verziója: $1",
-       "config-unicode-using-utf8": "A rendszer Unicode normalizálására Brion Vibber utf8_normalize.so könyvtárát használja.",
        "config-unicode-using-intl": "A rendszer Unicode normalizálására az [http://pecl.php.net/intl intl PECL kiterjesztést] használja.",
        "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ő 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 a php5-mysql modulra is.",
+       "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-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-license-gfdl": "GNU Szabad Dokumentációs Licenc 1.3 vagy újabb",
        "config-license-pd": "Közkincs",
        "config-license-cc-choose": "Creative Commons-licenc választása",
-       "config-license-help": "A legtöbb wiki valamilyen [http://freedomdefined.org/Definition szabad licenc] alatt teszi közzé a szerkesztéseit.\nEz erősíti a közösségi tulajdon érzését, és elősegíti a hosszú távú közreműködők megjelenését.\nÁltalában nem szükséges magán- vagy vállalati wiki esetén.\n\nHa a Wikipédiáról szeretnél szövegeket másolni, és a Wikipédián felhasználhassák a wikidben található szöveget, akkor a '''Creative Commons Nevezd meg! - Így add tovább!''' lehetőséget válaszd.\n\nA Wikipédia korábban a GNU Szabad Dokumentációs Licencet használta.\nEz a licenc még ma is használható, azonban nem könnyű megérteni,\ntovábbá a GFDL alatt közzétett tartalom újrafelhasználása nehézkes.",
+       "config-license-help": "A legtöbb wiki valamilyen [http://freedomdefined.org/Definition szabad licenc] alatt teszi közzé a szerkesztéseit.\nEz erősíti a közösségi tulajdon érzését, és elősegíti a hosszú távú közreműködők megjelenését.\nÁltalában nem szükséges magán- vagy vállalati wiki esetén.\n\nHa a Wikipédiáról szeretnél szövegeket másolni, és azt szeretnéd, hogy a Wikipédián felhasználhassák a wikidben található szöveget, akkor a <strong>{{int:config-license-cc-by-sa}}</strong> lehetőséget válaszd.\n\nA Wikipédia korábban a GNU Szabad Dokumentációs Licencet használta.\nEz a licenc még ma is használható, azonban nem könnyű megérteni,\ntovábbá a GFDL alatt közzétett tartalom újrafelhasználása nehézkes.",
        "config-email-settings": "E-mail beállítások",
        "config-enable-email": "Kimenő e-mailek engedélyezése",
        "config-enable-email-help": "E-mailek küldéséhez [http://www.php.net/manual/en/mail.configuration.php a PHP mail beállításait] megfelelően meg kell adni.\nHa nem akarsz semmilyen e-mailes funkciót használni, itt tilthatod le őket.",
index 47dea14..e85e735 100644 (file)
@@ -49,7 +49,7 @@
        "config-help-restart": "Apakah Anda ingin menghapus semua data tersimpan yang telah Anda masukkan dan mengulang proses instalasi?",
        "config-restart": "Ya, nyalakan ulang",
        "config-welcome": "=== Pengecekan lingkungan ===\nPengecekan dasar kini akan dilakukan untuk melihat apakah lingkungan ini memadai untuk instalasi MediaWiki.\nIngatlah untuk menyertakan informasi ini jika Anda mencari bantuan tentang cara menyelesaikan instalasi.",
-       "config-copyright": "=== Hak cipta dan persyaratan ===\n\n$1\n\nProgram ini adalah perangkat lunak bebas; Anda dapat mendistribusikan dan/atau memodifikasi di bawah persyaratan GNU General Public License seperti yang diterbitkan oleh Free Software Foundation; baik versi 2 lisensi, atau (sesuai pilihan Anda) versi yang lebih baru.\n\nProgram ini didistribusikan dengan harapan bahwa itu akan berguna, tetapi '''tanpa jaminan apa pun'''; bahkan tanpa jaminan tersirat untuk '''dapat diperjualbelikan ''' atau '''sesuai untuk tujuan tertentu'''.\nLihat GNU General Public License untuk lebih jelasnya.\n\nAnda seharusnya telah menerima <doclink href=\"Copying\">salinan dari GNU General Public License</doclink> bersama dengan program ini; jika tidak, kirimkan surat untuk Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. atau [http://www.gnu.org/copyleft/gpl.html baca versi daring].",
+       "config-copyright": "=== Hak cipta dan persyaratan ===\n\n$1\n\nProgram ini adalah perangkat lunak bebas; Anda dapat mendistribusikan dan/atau memodifikasi di bawah persyaratan GNU General Public License seperti yang diterbitkan oleh Free Software Foundation; baik versi 2 lisensi, atau (sesuai pilihan Anda) versi yang lebih baru.\n\nProgram ini didistribusikan dengan harapan bahwa itu akan berguna, tetapi <strong>tanpa jaminan apa pun</strong>; bahkan tanpa jaminan tersirat untuk <strong>dapat diperjualbelikan</strong> atau <strong>sesuai untuk tujuan tertentu</strong>.\nLihat GNU General Public License untuk lebih jelasnya.\n\nAnda seharusnya telah menerima <doclink href=\"Copying\">salinan dari GNU General Public License</doclink> bersama dengan program ini; jika tidak, kirimkan surat untuk Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, atau [http://www.gnu.org/copyleft/gpl.html baca versi daring].",
        "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/id Situs MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/id Pedoman Pengguna]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/id Pedoman Administrator]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/id FAQ]\n----\n* <doclink href=Readme>Read me</doclink>\n* <doclink href=ReleaseNotes>Release notes</doclink>\n* <doclink href=Copying>Copying</doclink>\n* <doclink href=UpgradeDoc>Upgrading</doclink>",
        "config-env-good": "Kondisi telah diperiksa.\nAnda dapat menginstal MediaWiki.",
        "config-env-bad": "Kondisi telah diperiksa.\nAnda tidak dapat menginstal MediaWiki.",
index 5fe2e81..10ca898 100644 (file)
@@ -56,7 +56,7 @@
        "config-unicode-using-intl": "유니코드 정규화에 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용합니다.",
        "config-unicode-pure-php-warning": "<strong>경고</strong>: 유니코드 정규화를 처리할 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 pure-PHP 구현을 대신 사용합니다.\n트래픽이 높은 사이트에서 실행하시려면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 유니코드 정규화]를 읽어보셔야 합니다.",
        "config-unicode-update-warning": "<strong>경고</strong>: 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.\n만약 유니코드를 사용하는 것에 대해 우려가 된다면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 업그레이드]해야합니다.",
-       "config-no-db": "적절한 데이터베이스 드라이버를 찾을 수 없습니다! PHP용 데이터베이스 드라이버를 설치해야 합니다.\n다음 데이터베이스 유형을 지원합니다: $1.\n\nPHP를 직접 컴파일했다면, 예를 들어 <code>./configure --with-mysql</code>을 사용하여, 데이터베이스 클라이언트를 활성화하도록 다시 설정하세요.\n데비안이나 우분투 패키지에서 PHP를 설치했다면 <code>php5-mysql</code> 모듈도 설치해야 합니다.",
+       "config-no-db": "적절한 데이터베이스 드라이버를 찾을 수 없습니다! PHP용 데이터베이스 드라이버를 설치해야 합니다.\n다음 데이터베이스 {{PLURAL:$2|유형을 지원합니다}}: $1.\n\nPHP를 직접 컴파일했다면, 예를 들어 <code>./configure --with-mysql</code>을 사용하여, 데이터베이스 클라이언트를 활성화하도록 다시 설정하세요.\n데비안이나 우분투 패키지에서 PHP를 설치했다면 <code>php5-mysql</code> 모듈도 설치해야 합니다.",
        "config-outdated-sqlite": "<strong>경고</strong>: 최소인 $2 버전보다 낮은 SQLite $1(이)가 있습니다. SQLite를 사용할 수 없습니다.",
        "config-no-fts3": "<strong>경고</strong>: SQLite를 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일하며, 검색 기능은 백엔드에 사용할 수 없습니다.",
        "config-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]를 보세요.",
index 52d049b..8649484 100644 (file)
        "config-env-bad": "Околината е проверена.\nНе можете да го воспоставите МедијаВики.",
        "config-env-php": "PHP $1 е воспоставен.",
        "config-env-hhvm": "HHVM $1 е воспоставен.",
-       "config-unicode-using-utf8": "Со utf8_normalize.so за уникодна нормализација од Брајон Вибер (Brion Vibber).",
        "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\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 надградба].",
-       "config-no-db": "Не можев да најдам соодветен двигател за базата на податоци! Ќе треба да воспоставите двигател за PHP-база.\nПоддржани се следниве видови бази: $1.\n\nДоколку самите го срочивте овој PHP, овозможете го базниот клиент во поставките — на пр. со <code>./configure --with-mysqli</code>.\nАко овој PHP го воспоставите од пакет на Debian или Ubuntu, тогаш ќе треба исто така да го воспоставите, на пр., пакетот <code>php5-mysql</code>.",
+       "config-no-db": "Не можев да најдам соодветен двигател за базата на податоци! Ќе треба да воспоставите двигател за PHP-база.\n{{PLURAL:$2|Поддржан се следниов вид|Поддржани се следниве видови}} бази: $1.\n\nДоколку самите го срочивте овој PHP, овозможете го базниот клиент во поставките — на пр. со <code>./configure --with-mysqli</code>.\nАко овој PHP го воспоставите од пакет на Debian или Ubuntu, тогаш ќе треба исто така да го воспоставите, на пр., пакетот <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Предупредување''': имате SQLite $1. Најстарата допуштена верзија е $2. Затоа, SQLite ќе биде недостапен.",
        "config-no-fts3": "'''Предупредување''': SQLite iе составен без модулот [//sqlite.org/fts3.html FTS3] - за оваа база нема да има можност за пребарување.",
        "config-register-globals-error": "<strong>Грешка: Вклучена е можноста <code>[http://php.net/register_globals register_globals]</code> за PHP.\nМора да се исклучи за да продолжите со воспоставката.</strong>\nКако да го направите тоа можете да прочитате на [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals].",
index 55771c8..26772e9 100644 (file)
@@ -55,7 +55,7 @@
        "config-unicode-using-intl": "Bruker [http://pecl.php.net/intl intl PECL-utvidelsen] for Unicode-normalisering.",
        "config-unicode-pure-php-warning": "'''Advarsel''': [http://pecl.php.net/intl intl PECL-utvidelsen] er ikke tilgjengelig for å håndtere Unicode-normaliseringen, faller tilbake til en langsommere ren-PHP-implementasjon.\nOm du kjører et nettsted med høy trafikk bør du lese litt om [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
        "config-unicode-update-warning": "'''Advarsel''': Den installerte versjonen av Unicode-normalisereren bruker en eldre versjon av [http://site.icu-project.org/ ICU-prosjektets] bibliotek.\nDu bør [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations oppgradere] om du er bekymret for å bruke Unicode.",
-       "config-no-db": "Fant ingen passende databasedriver! Du må installere en databasedriver for PHP.\nFølgende databasetyper støttes: $1\n\nOm du kompilerte PHP selv, rekonfigurer den med en aktivert databaseklient, for eksempel ved å bruke <code>./configure --with-mysql</code>.\nOm du installerte PHP fra en Debian- eller Ubuntu-pakke, må du også installere for eksempel <code>php5-mysql</code>-pakken.",
+       "config-no-db": "Fant ingen passende databasedriver! Du må installere en databasedriver for PHP.\nFølgende {{PLURAL:$2|databasetype|databasetyper}} støttes: $1\n\nOm du kompilerte PHP selv, rekonfigurer den med en aktivert databaseklient, for eksempel ved å bruke <code>./configure --with-mysql</code>.\nOm du installerte PHP fra en Debian- eller Ubuntu-pakke, må du også installere for eksempel <code>php5-mysql</code>-pakken.",
        "config-outdated-sqlite": "'''Advarsel''': Du har SQLite $1, som er en eldre versjon enn minimumskravet SQLite $2. SQLite vil ikke være tilgjengelig.",
        "config-no-fts3": "'''Advarsel''': SQLite er kompilert uten [//sqlite.org/fts3.html FTS3-modulen], søkefunksjoner vil ikke være tilgjengelig på dette bakstykket.",
        "config-register-globals-error": "<strong>Feil: PHPs <code>[http://php.net/register_globals register_globals]</code>-valg er aktivt.\nDet må deaktiveres for å kunne fortsette med installeringen.</strong>\nSe [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] for å få hjelp til å gjøre dette.",
        "config-license-gfdl": "GNU Free Documentation License 1.3 eller senere",
        "config-license-pd": "Offentlig eiendom",
        "config-license-cc-choose": "Velg en egendefinert Creative Commons-lisens",
-       "config-license-help": "Mange åpne wikier legger alle bidrag under en [http://freedomdefined.org/Definition gratislisens].\nDette gir en følelse av felleseie og stimulerer til langvarige bidrag.\nDette er normalt unødvendig for en privat eller virksomhetsbegrenset wiki.\n\nHvis du ønsker å kunne bruke tekst fra Wikipedia, og at Wikipedia skal kunne ta i mot tekst kopiert fra din wiki, bør du velge '''Creative Commons Attribution Share Alike'''.\n\nWikipedia brukte tidligere GNU Free Documentation License.\nGFDL er en grei lisens, med vanskelig å forstå.\nDet er også vanskelig å gjenbruke innhold lisensiert under GFDL.",
+       "config-license-help": "Mange åpne wikier legger alle bidrag under en [http://freedomdefined.org/Definition gratislisens].\nDette gir en følelse av felleseie og stimulerer til langvarige bidrag.\nDette er normalt unødvendig for en privat eller virksomhetsbegrenset wiki.\n\nHvis du ønsker å kunne bruke tekst fra Wikipedia, og at Wikipedia skal kunne ta i mot tekst kopiert fra din wiki, bør du velge <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia brukte tidligere GNU Free Documentation License.\nGFDL er en grei lisens, med vanskelig å forstå.\nDet er også vanskelig å gjenbruke innhold lisensiert under GFDL.",
        "config-email-settings": "E-postinnstillinger",
        "config-enable-email": "Aktiver utgående e-post",
        "config-enable-email-help": "Hvis du vil at e-post skal virke må [http://www.php.net/manual/en/mail.configuration.php PHPs e-postinnstillinger] bli konfigurert riktig.\nHvis du ikke ønsker noen e-postfunksjoner kan du deaktivere dem her.",
        "config-extensions": "Utvidelser",
        "config-extensions-help": "Utvidelsene listet over ble oppdaget i din <code>./extensions</code>-folder.\n\nDisse kan trenge ekstra konfigurering, men du kan aktivisere dem nå.",
        "config-skins": "Drakt",
+       "config-skins-help": "Draktene som listes opp nedenfor ble funnet i <code>./skins</code>-mappen din. Du må slå på minst én, og velge en standarddrakt.",
        "config-skins-use-as-default": "Bruk denne drakta som standard",
+       "config-skins-missing": "Ingen drakter ble funnet; MediaWiki vil bruke en reservedrakt til du har installert noen ordentlige drakter.",
+       "config-skins-must-enable-some": "Du må velge minst én drakt å slå på.",
+       "config-skins-must-enable-default": "Standarddrakten må være slått på.",
        "config-install-alreadydone": "'''Advarsel:''' Det ser ut til at allerede har installert MediaWiki og prøver å installere denne må nytt.\nVær vennlig å fortsette til neste side.",
        "config-install-begin": "Ved å trykke \"{{int:config-continue}}\", starter du installeringen av MediaWiki.\nHvis du først ønsker å endre på noe, trykk\"{{int:config-back}}\".",
        "config-install-step-done": "ferdig",
        "config-install-stats": "Initialiserer statisikk",
        "config-install-keys": "Genererer hemmelige nøkler",
        "config-insecure-keys": "<strong>Advarsel:</strong> {{PLURAL:$2|En sikker nøkkel|Sikre nøkler}} ($1) generert under installeringen er ikke helt {{PLURAL:$2|trygg|trygge}}. Vurder å endre {{PLURAL:$2|den|dem}} manuelt.",
+       "config-install-updates": "Forhindre unødvendige oppdateringer",
+       "config-install-updates-failed": "<strong>Feil:</strong> Innsetting av oppdateringsnøkler i tabellene mislyktes med følgende feilmelding: $1",
        "config-install-sysop": "Oppretter brukerkonto for administrator",
        "config-install-subscribe-fail": "Ikke mulig å abonnere på mediawiki-announce: $1",
        "config-install-subscribe-notpossible": "cURL er ikke installert og <code>allow_url_fopen</code> er ikke tilgjengelig.",
index 836e0fc..b3d40d2 100644 (file)
        "config-your-language": "तपाईंको भाषा:",
        "config-your-language-help": "इन्स्टल गर्दा उपयोग गर्ने भाषा छान्नुहोस् ।",
        "config-wiki-language": "विकि भाषाहरू",
+       "config-back": "← पछाडी",
+       "config-continue": "जारी राख्ने →",
+       "config-page-language": "भाषा",
+       "config-page-welcome": "मिडीयाविकिमा तपाईंलाई स्वागत छ!",
+       "config-page-dbconnect": "डेटाबेससँग सम्बन्ध बनाउने",
        "config-page-name": "नाम",
        "config-page-options": "विकल्पहरु",
        "config-page-install": "स्थापना गर्ने",
@@ -20,6 +25,7 @@
        "config-page-restart": "स्थापना फेरि सुरु गर्ने",
        "config-page-readme": "पढ्नुहोस्",
        "config-page-releasenotes": "प्रकाशन टिप्पणी",
+       "config-help": "सहायता",
        "config-help-tooltip": "विस्तार गर्न क्लीक गर्नुहोस्",
        "mainpagetext": "'''मीडिया सफलतापूर्वक कम्प्यूटरमा स्थापित भयो ।'''",
        "mainpagedocfooter": " विकी अनुप्रयोग कसरी प्रयोग गर्ने भन्ने जानकारीको लागि  [//meta.wikimedia.org/wiki/Help:Contents प्रयोगकर्ता सहायता] हेर्नुहोस्\n\n== सुरू गर्नको लागि  ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings विन्यास सेटिङ्ग सूची]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ मेडियाविकि सामान्य प्रश्नका उत्तरहरु]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मेडियाविकि सुचना मेलिङ्ग सूची]"
index bf6cf04..d7bd9a6 100644 (file)
@@ -63,7 +63,7 @@
        "config-unicode-using-intl": "Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.",
        "config-unicode-pure-php-warning": "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.\nAls u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodenormalisatie].",
        "config-unicode-update-warning": "'''Waarschuwing''': de geïnstalleerde versie van de Unicodenormalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project].\nU moet [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations bijwerken] als Unicode voor u van belang is.",
-       "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP. U moet een databasedriver installeren voor PHP.\nDe volgende databases worden ondersteund: $1.\n\nAls u een gedeelde omgeving gebruikt, vraag dan aan uw hostingprovider een geschikte databasedriver te installeren.\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysql</code>.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.",
+       "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP! U moet een databasedriver installeren voor PHP.\n{{PLURAL:$2|Het volgende databasetype wordt|De volgende databasetypes worden}} ondersteund: $1.\n\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysqli</code>.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook bijvoorbeeld de module <code>php5-mysql</code>.",
        "config-outdated-sqlite": "''' Waarschuwing:''' u gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
        "config-no-fts3": "'''Waarschuwing''': SQLite is gecompileerd zonder de module [//sqlite.org/fts3.html FTS3]; zoekfuncties zijn niet beschikbaar.",
        "config-register-globals-error": "<strong>Fout: de optie <code>[http://php.net/register_globals register_globals]</code> van PHP is ingeschakeld.\nDeze optie moet uitgeschakeld zijn om door te kunnen gaan met de installatie.</strong>\nOp de pagina [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] staat beschreven hoe u dit kunt doen.",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki ondersteunt de volgende databasesystemen:\n\n$1\n\nAls u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.",
-       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mariadb-url}} MariaDB] en [{{int:version-db-percona-url}} Percona Server], die MySQL compatibel zijn. ([http://www.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL ondersteuning])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL. Het is mogelijk dat er een aantal bekende kleinere problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving.([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]).",
-       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd zijn met ondersteuning voor SQLite]; gebruikt PDO)",
+       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mariadb-url}} MariaDB] en [{{int:version-db-percona-url}} Percona Server], die MySQL compatibel zijn ([http://www.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL ondersteuning]).",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL. Het is mogelijk dat er een aantal bekende kleinere problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving ([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]).",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor SQLite]; gebruikt PDO).",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is een commerciële database voor grote bedrijven ([http://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is een commerciële enterprisedatabase voor Windows. Zie ook [http://www.php.net/manual/en/sqlsrv.installation.php PHP compileren met ondersteuning voor SQLSRV].",
+       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is een commerciële enterprisedatabase voor Windows ([http://www.php.net/manual/en/sqlsrv.installation.php PHP compileren met ondersteuning voor SQLSRV]).",
        "config-header-mysql": "MySQL-instellingen",
        "config-header-postgres": "PostgreSQL-instellingen",
        "config-header-sqlite": "SQLite-instellingen",
        "config-mysql-charset": "Tekenset voor de database:",
        "config-mysql-binary": "Binair",
        "config-mysql-utf8": "UTF-8",
-       "config-mysql-charset-help": "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.\nDit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicodetekens te gebruiken.\n\nIn '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.\nHet is dat niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
+       "config-mysql-charset-help": "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.\nDit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicodetekens te gebruiken.\n\nIn '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.\nHet is dan niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
        "config-mssql-auth": "Authenticatietype:",
        "config-mssql-install-auth": "Selecteer de authenticatiemethode die wordt gebruikt om met de database te verbinden tijdens het installatieproces.\nAls u \"{{int:config-mssql-windowsauth}}\" selecteert, dan worden de aanmeldgegevens van de gebruiker waaronder de webserver draait voor authenticatie gebruikt.",
        "config-mssql-web-auth": "Selecteer de authenticatiemethode die de webserver gebruikt om met de database te verbinden tijdens het installatieproces.\nAls u \"{{int:config-mssql-windowsauth}}\" selecteert, dan worden de aanmeldgegevens van de gebruiker waaronder de webserver draait voor authenticatie gebruikt.",
index 671671b..36b48c8 100644 (file)
@@ -17,7 +17,7 @@
        "config-localsettings-badkey": "La ciav ch'it l'has dàit a l'é pa giusta.",
        "config-upgrade-key-missing": "A l'é stàita trovà n'istalassion esistenta ëd MediaWiki.\nPër agiorné soa istalassion, për piasì ch'a buta la linia sì-sota al fond ëd sò <code>LocalSettings.php</code>:\n\n$1",
        "config-localsettings-incomplete": "L'esistent <code>LocalSettings.php</code> a smija esse ancomplet.\nLa variàbil $1 a l'é nen ampostà.\nPër piasì, ch'a modìfica <code>LocalSettings.php</code> ëd fasson che costa variàbil a sia ampostà, e ch'a sgnaca «{{int:Config-continue}}».",
-       "config-localsettings-connection-error": "A l'é ancapitaje n'eror an colegand-se a la base ëd dàit an dovrand j'ampostassion specificà an <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Për piasì, ch'a coregia cost'ampostassion e ch'a preuva torna.\n\n$1",
+       "config-localsettings-connection-error": "A l'é ancapitaje n'eror an colegand-se a la base ëd dàit an dovrand j'ampostassion specificà an <code>LocalSettings.php</code>. Për piasì, ch'a coregia cost'ampostassion e ch'a preuva torna.\n\n$1",
        "config-session-error": "Eror an fasend parte la session: $1",
        "config-session-expired": "Ij sò dat ëd session a smijo scadù.\nLe session a son configurà për na durà ëd $1.\nA peul aumenté sòn an ampostand <code>session.gc_maxlifetime</code> an php.ini.\nCh'a anandia torna ël process d'instalassion.",
        "config-no-session": "Ij sò dat ëd session a son përdù!\nCh'a contròla sò php.ini e ch'as sigura che <code>session.save_path</code> a sia ampostà ant ël dossié giust.",
        "config-page-existingwiki": "Wiki esistenta",
        "config-help-restart": "Veul-lo scancelé tùit ij dat salvà ch'a l'ha anserì e anandié torna ël process d'instalassion?",
        "config-restart": "É!, felo torna parte",
-       "config-welcome": "=== Contròj d'ambient ===\nDle verìfiche ëd base a son fàite për vëdde se st'ambient a va bin për l'instalassion ëd MediaWiki.\nS'a l'ha da manca d'agiut durant l'anstalassion, a dovrìa fornì j'arzultà dë sti contròj.",
+       "config-welcome": "=== Contròj d'ambient ===\nDle verìfiche ëd base a saran adess fàite për vëdde se st'ambient a va bin për l'instalassion ëd MediaWiki.\nCh'as visa d'anserì coste anformassion s'a sërca d'agiut su com completé l'instalassion.",
        "config-copyright": "=== Drit d'Autor e Condission ===\n\n$1\n\nCost-sì a l'é un programa lìber e a gràtis: a peul ridistribuilo e/o modifichelo sota le condission dla licensa pùblica general GNU com publicà da la Free Software Foundation; la version 2 dla Licensa, o (a toa sèrnìa) qualsëssìa version pi recenta.\n\nCost programa a l'é distribuì ant la speransa ch'a sia ùtil, ma '''sensa gnun-e garansìe'''; sensa gnanca la garansia implìssita ëd '''comersiabilità''' o '''d'esse adat a un but particolar'''.\n\nA dovrìa avèj arseivù <doclink href=Copying>na còpia ëd la licensa pùblica general GNU</doclink> ansema a sto programa; dësnò, ch'a scriva a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA opura [http://www.gnu.org/copyleft/gpl.html ch'a la lesa an linia].",
        "config-sidebar": "* [//www.mediawiki.org Intrada MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guida dl'Utent]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guida dl'Aministrator]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Soens an ciamo]\n----\n* <doclink href=Readme>Ch'am lesa</doclink>\n* <doclink href=ReleaseNotes>Nòte ëd publicassion</doclink>\n* <doclink href=Copying>Còpia</doclink>\n* <doclink href=UpgradeDoc>Agiornament</doclink>",
        "config-env-good": "L'ambient a l'é stàit controlà.\nIt peule instalé MediaWiki.",
        "config-env-bad": "L'ambient a l'é stàit controlà.\nIt peule pa instalé MediaWiki.",
        "config-env-php": "PHP $1 a l'é instalà.",
-       "config-env-php-toolow": "PHP $1 a l'é instalà.\nAnt tùit ij cas, MediaWiki a ciama PHP $2 o pi neuv.",
-       "config-unicode-using-utf8": "As deuvra utf8_normalize.so ëd Brion Vibber për la normalisassion Unicode.",
+       "config-env-hhvm": "HHVM $1 a l'é instalà.",
        "config-unicode-using-intl": "As deuvra l'[http://pecl.php.net/intl estension intl PECL] për la normalisassion Unicode.",
        "config-unicode-pure-php-warning": "'''Avis:''' L'[http://pecl.php.net/intl estension intl PECL] a l'é pa disponìbil për gestì la normalisassion Unicode, da già che l'implementassion an PHP pur a faliss për lentëssa.\nS'a gestiss un sit a àut tràfich, a dovrìa lese cheicòs an sla [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisassion Unicode].",
        "config-unicode-update-warning": "'''Avis:''' La version instalà dlë spassiador ëd normalisassion Unicode a deuvra na version veja ëd la librarìa dël [http://site.icu-project.org/ proget ICU].\nA dovrìa fé n'[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations agiornament] s'a l'é anteressà a dovré Unicode.",
-       "config-no-db": "Impossìbil trové un pilòta ëd base ëd dàit bon! A dev instalé un pilòta ëd base ëd dàit për PHP.\nLe sòrt ëd database ch'a ven-o a son apogià: $1.\n\nS'a l'é ansima a 'n servissi partagià, ch'a ciama a sò fornidor ëd servissi d'instalé un pilòta ëd base ëd dàit compatìbil.\nS'a l'é compilasse PHP chiel-midem, ch'a lo configura torna con un client ëd base ëd dàit abilità, për esempi an dovrand <code>./configure --with-mysql</code>.\nS'a l'ha instalà PHP dai pachèt Debian o Ubuntu, antlora a dev ëdcò istalé ël mòdul php5-mysql.",
+       "config-no-db": "Impossìbil trové un pilòta ëd base ëd dàit bon! A dev instalé un pilòta ëd base ëd dàit për PHP.\n{{PLURAL:$2|La sòrt ëd base ëd dàit mantnùa a l'é costa|Le sòrt ëd base ëd dàit mantùe a son coste}} sì-dapress: $1.\n\nS'a l'é compilasse PHP chiel-midem, ch'a lo configura torna con un client ëd base ëd dàit abilità, për esempi an dovrand <code>./configure --with-mysql</code>.\nS'a l'ha instalà PHP dai pachèt Debian o Ubuntu, antlora a dev ëdcò anstalé, për esempi, ël mòdul <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Avis''': chiel a l'ha SQLite $1, che a l'é pi vej che la version mìnima dont a-i é damanca $2. SQLite a sarà pa disponìbil.",
        "config-no-fts3": "'''Avis''': SQLite a l'é compilà sensa ël mòdul [//sqlite.org/fts3.html FTS3], le funsion d'arserca a saran pa disponìbij su cost motor.",
-       "config-register-globals": "'''Avis: L'opsion <code>[http://php.net/register_globals register_globals]</code> ëd PHP a l'é abilità.'''\n'''Ch'a la disabìlita s'a peul.'''\nMediaWiki a marcërà, ma sò servent a l'é espòst a 'd possìbij vunerabilità ëd sicurëssa.",
        "config-magic-quotes-runtime": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] a l'é ativ!'''\nCosta opsion a danegia ij dat d'intrada an manera pa prevedìbil.\nA peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
        "config-magic-quotes-sybase": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] a l'é ativ!'''\nCosta opsion a danegia ij dat d'intrada an manera pa prevedìbil.\nA peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
        "config-mbstring": "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] a l'é ativ!'''\nCosta opsion a càusa d'eror e a peul danegié ij dat d'intrada an manera pa prevedìbil.\nA peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
index 3a9f267..fba5165 100644 (file)
@@ -63,7 +63,6 @@
        "config-env-bad": "See also:\n* {{msg-mw|Config-env-good}}",
        "config-env-php": "Parameters:\n* $1 - the version of PHP that has been installed\nSee also:\n* {{msg-mw|config-env-php-toolow}}",
        "config-env-hhvm": "Parameters:\n* $1 - the version of HHVM that has been installed",
-       "config-unicode-using-utf8": "Status message in the MediaWiki installer environment checks.",
        "config-unicode-using-intl": "Status message in the MediaWiki installer environment checks.",
        "config-unicode-pure-php-warning": "PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.",
        "config-unicode-update-warning": "ICU is a body producing standard software tools for support of Unicode and other internationalization aspects. This message warns the system administrator installing MediaWiki that the server's software is not up-to-date and MediaWiki will have problems handling some characters.",
index 964b3cc..c63ac00 100644 (file)
@@ -78,6 +78,7 @@
        "config-license-pd": "Јавно власништво",
        "config-email-settings": "Подешавања е-поште",
        "config-cc-not-chosen": "Одаберите која Кријејтив комонс лиценца вам одговара и потврдите.",
+       "config-skins": "Теме",
        "config-install-step-done": "готово",
        "config-install-step-failed": "није успело",
        "config-help": "помоћ",
index a0cd5f5..b1a97e9 100644 (file)
@@ -34,6 +34,7 @@
        "config-type-oracle": "Oracle",
        "config-site-name": "Ime vikija:",
        "config-license-cc-0": "Creative Commons Zero (javno vlasništvo)",
+       "config-skins": "Teme",
        "mainpagetext": "'''MedijaViki je uspešno instaliran.'''",
        "mainpagedocfooter": "Molimo vidite [//meta.wikimedia.org/wiki/Help:Contents korisnički vodič] za informacije o upotrebi viki softvera.\n\n== Za početak ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Pomoć u vezi sa podešavanjima]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Najčešće postavljena pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mejling lista o izdanjima MedijaVikija]"
 }
index 13309b5..30342aa 100644 (file)
        "config-outdated-sqlite": "<strong>Chú ý:</strong> Bạn có SQLite $1, phiên bản này thấp hơn phiên bản yêu câu tối thiểu $2. SQLite sẽ không có tác dụng.",
        "config-no-fts3": "<strong>Chú ý:</strong> SQLite được biên dịch mà không có [//sqlite.org/fts3.html mô đun FTS3], nên các chức năng tìm kiếm sẽ bị vô hiệu trên hệ thống phía sau này.",
        "config-register-globals-error": "<strong>Lỗi: Tùy chọn <code>[http://php.net/register_globals register_globals]</code> của PHP đã được kích hoạt.\nNó phải bị vô hiệu để tiếp tục quá trình cài đặt.</strong>\nXem [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] để biết cách thực hiện.",
-       "config-magic-quotes-gpc": "<strong>Sai lầm: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
-       "config-magic-quotes-runtime": "<strong>Sai lầm: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
-       "config-magic-quotes-sybase": "<strong>Sai lầm: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
-       "config-mbstring": "<strong>Sai lầm: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] được kích hoạt!</strong>\nTùy chọn này gây lỗi và có thể làm hỏng dữ liệu một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+       "config-magic-quotes-gpc": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+       "config-magic-quotes-runtime": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+       "config-magic-quotes-sybase": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+       "config-mbstring": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] được kích hoạt!</strong>\nTùy chọn này gây lỗi và có thể làm hỏng dữ liệu một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
        "config-safe-mode": "<strong>Cảnh báo:</strong> [http://www.php.net/features.safe-mode Chế độ an toàn] của PHP đang được kích hoạt.\nNó có thể gây vấn đề, nhất là nếu dùng các chức năng tải lên tập tin và <code>math</code>.",
        "config-xml-bad": "Mô đun XML của PHP đang bị thiếu.\nMediaWiki yêu cầu các hàm trong mô đun này và sẽ không hoạt động trong cấu hình này.\nNếu bạn đang chạy Mandrake, hãy cài đặt gói php-xml.",
-       "config-pcre-old": "<strong>Sai lầm:</strong> PCRE $1 trở lên được yêu cầu phải có.\nBản nhị phân PHP của bạn dang được liên kết với PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Thông tin bổ sung].",
-       "config-pcre-no-utf8": "<strong>Sai lầm:</strong> Mô đun PCRE của PHP dường như được biên dịch mà không có hỗ trợ PCRE_UTF8.\nMediaWiki yêu cầu phải có hỗ trợ UTF-8 để hoạt động chính xác.",
+       "config-pcre-old": "<strong>Lỗi chí tử:</strong> PCRE $1 trở lên được yêu cầu phải có.\nBản nhị phân PHP của bạn dang được liên kết với PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Thông tin bổ sung].",
+       "config-pcre-no-utf8": "<strong>Lỗi chí tử:</strong> Mô đun PCRE của PHP dường như được biên dịch mà không có hỗ trợ PCRE_UTF8.\nMediaWiki yêu cầu phải có hỗ trợ UTF-8 để hoạt động chính xác.",
        "config-memory-raised": "<code>memory_limit</code> của PHP là $1, tăng lên $2.",
        "config-memory-bad": "<strong>Cảnh báo:</strong> <code>memory_limit</code> của PHP là $1.\nGiá trị này có lẽ quá thấp.\nCài đặt có thể bị thất bại!",
-       "config-ctype": "<strong>Sai lầm:</strong> PHP phải được biên dịch với hỗ trợ cho [http://www.php.net/manual/en/ctype.installation.php phần mở rộng Ctype].",
-       "config-iconv": "<strong>Sai lầm:</strong> PHP phải được biên dịch với hỗ trợ cho [http://www.php.net/manual/en/iconv.installation.php phần mở rộng iconv].",
-       "config-json": "<strong>Sai lầm:</strong> PHP được biên dịch mà không có hỗ trợ cho JSON.\nBạn phải cài đặt hoặc phần mở rộng JSON PHP hoặc phần mở rộng [http://pecl.php.net/package/jsonc PECL jsonc] trước khi cài đặt MediaWiki.\n* Phần mở rộng PHP có sẵn trong Red Hat Enterprise Linux (CentOS) 5 và 6 nhưng phải được kích hoạt trong <code>/etc/php.ini</code> hoặc <code>/etc/php.d/json.ini</code>.\n* Một số phiên bản Linux được phát hành sau tháng 5 năm 2013 bỏ qua phần mở rộng PHP và gói lại phần mở rộng PECL là <code>php5-json</code> hoặc <code>php-pecl-jsonc</code> thay thế.",
+       "config-ctype": "<strong>Lỗi chí tử:</strong> PHP phải được biên dịch với hỗ trợ cho [http://www.php.net/manual/en/ctype.installation.php phần mở rộng Ctype].",
+       "config-iconv": "<strong>Lỗi chí tử:</strong> PHP phải được biên dịch với hỗ trợ cho [http://www.php.net/manual/en/iconv.installation.php phần mở rộng iconv].",
+       "config-json": "<strong>Lỗi chí tử:</strong> PHP được biên dịch mà không có hỗ trợ cho JSON.\nBạn phải cài đặt hoặc phần mở rộng JSON PHP hoặc phần mở rộng [http://pecl.php.net/package/jsonc PECL jsonc] trước khi cài đặt MediaWiki.\n* Phần mở rộng PHP có sẵn trong Red Hat Enterprise Linux (CentOS) 5 và 6 nhưng phải được kích hoạt trong <code>/etc/php.ini</code> hoặc <code>/etc/php.d/json.ini</code>.\n* Một số phiên bản Linux được phát hành sau tháng 5 năm 2013 bỏ qua phần mở rộng PHP và gói lại phần mở rộng PECL là <code>php5-json</code> hoặc <code>php-pecl-jsonc</code> thay thế.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] đã được cài đặt",
        "config-apc": "[http://www.php.net/apc APC] đã được cài đặt",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] đã được cài đặt",
        "config-license-gfdl": "Giấy pháp Tài liệu Tự do GNU 1.3 trở lên",
        "config-license-pd": "Phạm vi công cộng",
        "config-license-cc-choose": "Chọn một giấy phép Creative Commons tùy biến",
+       "config-license-help": "Nhiều wiki công khai phát hành tất cả các đóng góp theo một [http://freedomdefined.org/Definition/Vi?uselang=vi giấy phép tự do].\nĐiều này giúp tạo nên thái độ cộng đồng sở hữu và ủng hộ sự đóng góp lâu dài.\nNói chung, một wiki riêng tư hoặc của công ty không nhất thiết phải sử dụng một giấy phép tự do.\n\nNếu bạn muốn được phép sử dụng văn bản từ Wikipedia và muốn Wikipedia nhận được những văn bản được sao chép từ wiki của bạn, bạn nên chọn <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia từng sử dụng Giấy phép Tài liệu Tự do GNU.\nGFDL là một giấy phép hợp lệ nhưng khó hiểu trên thực tế.\nNội dung được phát hành theo GFDL cũng khó tái sử dụng.",
        "config-email-settings": "Thiết lập thư điện tử",
        "config-enable-email": "Cho phép gửi thư điện tử đi",
        "config-enable-email-help": "Nếu bạn muốn email để làm việc, [http://www.php.net/manual/en/mail.configuration.php thiết lập mail của PHP] cần phải được cấu hình đúng.\nNếu bạn không muốn sử dụng bất kỳ tính năng email nào, bạn có thể vô hiệu chúng ở đây.",
index 934b4b4..4c7b0c5 100644 (file)
        "config-env-bad": "環境檢查已完成。\n您無法安裝 MediaWiki。",
        "config-env-php": "PHP $1 已安裝。",
        "config-env-hhvm": "HHVM $1 已安裝。",
-       "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 升級]。",
-       "config-no-db": "找不到合適的資料庫驅動程式!您需要安裝 PHP 資料庫驅動程式。\n目前支援以下{{PLURAL:$2|type is|類型}}的資料庫: $1 。\n\n如果您是自行編譯 PHP,您必須重新設定並開啟資料庫用戶端,例:使用 <code>./configure --with-mysqli</code> 指令參數。\n如果您是使用 Debian 或 Ubuntu 的套件安裝 PHP ,您則需要額外安裝,例:<code>php5-mysql</code> 套件。",
+       "config-no-db": "找不到合適的資料庫驅動程式!您需要安裝 PHP 資料庫驅動程式。\n目前支援以下{{PLURAL:$2|類型|類型}}的資料庫: $1 。\n\n如果您是自行編譯 PHP,您必須重新設定並開啟資料庫客戶端,例:使用 <code>./configure --with-mysqli</code> 指令參數。\n如果您是使用 Debian 或 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] 以取得操作說明。",
        "config-admin-name-invalid": "指定的使用者名稱 \"<nowiki>$1</nowiki>\" 無效,請改用其他使用者名稱。",
        "config-admin-password-blank": "輸入管理員帳號密碼。",
        "config-admin-password-mismatch": "兩次輸入的密碼並不相同。",
-       "config-admin-email": "電子郵件址:",
+       "config-admin-email": "電子郵件址:",
        "config-admin-email-help": "在此輸入的電子郵件信箱可用來接收 Wiki 上其他使用者所傳送的訊息、重設您的密碼與通知監視清單中頁面更動。您可將此欄位留空。",
        "config-admin-error-user": "建立管理員帳號 \"<nowiki>$1</nowiki>\" 時發送內部錯誤。",
        "config-admin-error-password": "設定管理員 \"<nowiki>$1</nowiki>\" 的密碼時發送內部錯誤:<pre>$2</pre>",
-       "config-admin-error-bademail": "您輸入了不正確的電子郵件址。",
+       "config-admin-error-bademail": "您輸入了不正確的電子郵件址。",
        "config-subscribe": "訂閱 [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 發佈公告郵寄清單]。",
        "config-subscribe-help": "這是一個用於發佈公告的低郵件量郵寄清單,內容包括重要的安全公告。\n您應該訂閱它並在 MediaWiki 發佈新版的時候更新系統。",
-       "config-subscribe-noemail": "您正嘗試不填寫電子郵件位址訂閱發佈公告郵寄清單。 \n請如果您希望訂閱郵寄清單,請提供一個有效的電子郵件位址。",
+       "config-subscribe-noemail": "您正嘗試不填寫電子郵件地址訂閱發佈公告郵寄清單。 \n請如果您希望訂閱郵寄清單,請提供一個有效的電子郵件地址。",
        "config-almost-done": "您快要完成了!\n您現在可以跳過其餘的設定項目並且立即安裝 Wiki。",
        "config-optional-continue": "多問我一些問題吧。",
        "config-optional-skip": "我已經不耐煩了,請趕緊安裝 Wiki。",
        "config-extensions-help": "已在您的 <code>./extensions</code> 目錄中發現下列擴充套件。\n\n這些擴充套件可能需要做額外的設定,但您可以現在先開啟功能。",
        "config-skins": "外觀",
        "config-skins-help": "系統偵測到您於 <code>./skins</code> 資料夾中含有外觀如上清單。 您必須開啟其中一項並設為預設值。",
-       "config-skins-use-as-default": "使用這種外觀作為預設",
+       "config-skins-use-as-default": "使用外觀作為預設",
        "config-skins-missing": "沒有發現任何外觀;MediaWiki 在您安裝一些恰當的外觀前將會使用備用外觀。",
-       "config-skins-must-enable-some": "您必須至少選擇一個外觀以啟用。",
-       "config-skins-must-enable-default": "必須啟用選為預設的外觀。",
+       "config-skins-must-enable-some": "您至少須選擇一個外觀啟用。",
+       "config-skins-must-enable-default": "必須啟用己選擇為預設值的外觀。",
        "config-install-alreadydone": "<strong>警告:</strong>您已經安裝 MediaWiki,並且試圖重新安裝。\n請點繼續前往下一個頁面。",
        "config-install-begin": "請點選 \"{{int:config-continue}}\" 開始安裝 MediaWiki。\n若您還想要修改設定,請點選 \"{{int:config-back}}\"。",
        "config-install-step-done": "完成",
        "config-install-done": "<strong>恭喜!</strong>\n您已經成功地安裝了 MediaWiki。\n\n安裝程式已自動產生 <code>LocalSettings.php</code> 檔案,\n該檔案中包含了您所有的設定項目。\n\n您需要下載該檔案,並將其放置在您的 Wiki 的根目錄 (index.php 所在的目錄) 中,下載稍後會自動開始。\n\n若瀏覽器沒有提示您下載,或者您取消了下載,您可以點選下方連結重新下載:\n\n$3\n\n<strong>注意:</strong>若您現在未下載檔案,稍後結束安裝程式之後將無法下載設定檔。\n\n當您完成本步驟後,您可以 <strong>[$2 進入您的 Wiki]</strong>。",
        "config-download-localsettings": "下載 <code>LocalSettings.php</code>",
        "config-help": "說明",
-       "config-help-tooltip": "按一下以展開",
+       "config-help-tooltip": "點選以展開",
        "config-nofile": "查無檔案 \"$1\",是否已被刪除?",
        "config-extension-link": "您是否了解您的 Wiki 支援 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 擴充套件]?\n\n\n您可以瀏覽 [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category 擴充套件分類] 或 [//www.mediawiki.org/wiki/Extension_Matrix 擴充套件資料表] 以取得相關的資訊。",
        "mainpagetext": "<strong>已成功安裝 MediaWiki。</strong>",
index 334d374..f8de0b5 100644 (file)
@@ -188,6 +188,8 @@ abstract class Job implements IJobSpecification {
                        unset( $info['params']['rootJobTimestamp'] );
                        // Likewise for jobs with different delay times
                        unset( $info['params']['jobReleaseTimestamp'] );
+                       // Queues pack and hash this array, so normalize the order
+                       ksort( $info['params'] );
                }
 
                return $info;
index 53fcaee..91fe86c 100644 (file)
@@ -44,11 +44,10 @@ abstract class JobQueue {
        /** @var int Maximum number of times to try a job */
        protected $maxTries;
 
-       /** @var bool Allow delayed jobs */
-       protected $checkDelay;
-
        /** @var BagOStuff */
        protected $dupCache;
+       /** @var JobQueueAggregator */
+       protected $aggr;
 
        const QOS_ATOMIC = 1; // integer; "all-or-nothing" job insertions
 
@@ -71,11 +70,10 @@ abstract class JobQueue {
                if ( !in_array( $this->order, $this->supportedOrders() ) ) {
                        throw new MWException( __CLASS__ . " does not support '{$this->order}' order." );
                }
-               $this->checkDelay = !empty( $params['checkDelay'] );
-               if ( $this->checkDelay && !$this->supportsDelayedJobs() ) {
-                       throw new MWException( __CLASS__ . " does not support delayed jobs." );
-               }
                $this->dupCache = wfGetCache( CACHE_ANYTHING );
+               $this->aggr = isset( $params['aggregator'] )
+                       ? $params['aggregator']
+                       : new JobQueueAggregatorNull( array() );
        }
 
        /**
@@ -98,10 +96,6 @@ abstract class JobQueue {
         *                  but not acknowledged as completed after this many seconds. Recycling
         *                  of jobs simple means re-inserting them into the queue. Jobs can be
         *                  attempted up to three times before being discarded.
-        *   - checkDelay : If supported, respect Job::getReleaseTimestamp() in the push functions.
-        *                  This lets delayed jobs wait in a staging area until a given timestamp is
-        *                  reached, at which point they will enter the queue. If this is not enabled
-        *                  or not supported, an exception will be thrown on delayed job insertion.
         *
         * Queue classes should throw an exception if they do not support the options given.
         *
@@ -143,14 +137,6 @@ abstract class JobQueue {
                return $this->order;
        }
 
-       /**
-        * @return bool Whether delayed jobs are enabled
-        * @since 1.22
-        */
-       final public function delayedJobsEnabled() {
-               return $this->checkDelay;
-       }
-
        /**
         * Get the allowed queue orders for configuration validation
         *
@@ -174,6 +160,14 @@ abstract class JobQueue {
                return false; // not implemented
        }
 
+       /**
+        * @return bool Whether delayed jobs are enabled
+        * @since 1.22
+        */
+       final public function delayedJobsEnabled() {
+               return $this->supportsDelayedJobs();
+       }
+
        /**
         * Quickly check if the queue has no available (unacquired, non-delayed) jobs.
         * Queue classes should use caching if they are any slower without memcached.
@@ -298,7 +292,8 @@ abstract class JobQueue {
         * @throws JobQueueError
         */
        final public function push( $jobs, $flags = 0 ) {
-               $this->batchPush( is_array( $jobs ) ? $jobs : array( $jobs ), $flags );
+               $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
+               $this->batchPush( $jobs, $flags );
        }
 
        /**
@@ -320,13 +315,14 @@ abstract class JobQueue {
                        if ( $job->getType() !== $this->type ) {
                                throw new MWException(
                                        "Got '{$job->getType()}' job; expected a '{$this->type}' job." );
-                       } elseif ( $job->getReleaseTimestamp() && !$this->checkDelay ) {
+                       } elseif ( $job->getReleaseTimestamp() && !$this->supportsDelayedJobs() ) {
                                throw new MWException(
                                        "Got delayed '{$job->getType()}' job; delays are not supported." );
                        }
                }
 
                $this->doBatchPush( $jobs, $flags );
+               $this->aggr->notifyQueueNonEmpty( $this->wiki, $this->type );
        }
 
        /**
@@ -356,6 +352,10 @@ abstract class JobQueue {
 
                $job = $this->doPop();
 
+               if ( !$job ) {
+                       $this->aggr->notifyQueueEmpty( $this->wiki, $this->type );
+               }
+
                // Flag this job as an old duplicate based on its "root" job...
                try {
                        if ( $job && $this->isRootJobOldDuplicate( $job ) ) {
@@ -615,6 +615,17 @@ abstract class JobQueue {
                return new ArrayIterator( array() ); // not implemented
        }
 
+       /**
+        * Get an iterator to traverse over all abandoned jobs in this queue
+        *
+        * @return Iterator
+        * @throws JobQueueError
+        * @since 1.25
+        */
+       public function getAllAbandonedJobs() {
+               return new ArrayIterator( array() ); // not implemented
+       }
+
        /**
         * Do not use this function outside of JobQueue/JobQueueGroup
         *
index 5e8399c..d5f47ff 100644 (file)
@@ -686,7 +686,9 @@ class JobQueueDB extends JobQueue {
                                        $affected = $dbw->affectedRows();
                                        $count += $affected;
                                        JobQueue::incrStats( 'job-recycle', $this->type, $affected, $this->wiki );
+                                       // The tasks recycled jobs or release delayed jobs into the queue
                                        $this->cache->set( $this->getCacheKey( 'empty' ), 'false', self::CACHE_TTL_LONG );
+                                       $this->aggr->notifyQueueNonEmpty( $this->wiki, $this->type );
                                }
                        }
 
index 4186204..d985d44 100644 (file)
 class JobQueueFederated extends JobQueue {
        /** @var HashRing */
        protected $partitionRing;
-       /** @var HashRing */
-       protected $partitionPushRing;
        /** @var array (partition name => JobQueue) reverse sorted by weight */
        protected $partitionQueues = array();
 
-       /** @var BagOStuff */
-       protected $cache;
-
        /** @var int Maximum number of partitions to try */
        protected $maxPartitionsTry;
 
-       const CACHE_TTL_SHORT = 30; // integer; seconds to cache info without re-validating
-       const CACHE_TTL_LONG = 300; // integer; seconds to cache info that is kept up to date
-
        /**
         * @param array $params Possible keys:
         *  - sectionsByWiki      : A map of wiki IDs to section names.
@@ -74,8 +66,6 @@ class JobQueueFederated extends JobQueue {
         *                          These configuration arrays are passed to JobQueue::factory().
         *                          The options set here are overridden by those passed to this
         *                          the federated queue itself (e.g. 'order' and 'claimTTL').
-        *  - partitionsNoPush    : List of partition names that can handle pop() but not push().
-        *                          This can be used to migrate away from a certain partition.
         *  - maxPartitionsTry    : Maximum number of times to attempt job insertion using
         *                          different partition queues. This improves availability
         *                          during failure, at the cost of added latency and somewhat
@@ -96,17 +86,10 @@ class JobQueueFederated extends JobQueue {
                // Get the full partition map
                $partitionMap = $params['partitionsBySection'][$section];
                arsort( $partitionMap, SORT_NUMERIC );
-               // Get the partitions jobs can actually be pushed to
-               $partitionPushMap = $partitionMap;
-               if ( isset( $params['partitionsNoPush'] ) ) {
-                       foreach ( $params['partitionsNoPush'] as $partition ) {
-                               unset( $partitionPushMap[$partition] );
-                       }
-               }
                // Get the config to pass to merge into each partition queue config
                $baseConfig = $params;
                foreach ( array( 'class', 'sectionsByWiki', 'maxPartitionsTry',
-                       'partitionsBySection', 'configByPartition', 'partitionsNoPush' ) as $o
+                       'partitionsBySection', 'configByPartition', ) as $o
                ) {
                        unset( $baseConfig[$o] ); // partition queue doesn't care about this
                }
@@ -120,14 +103,6 @@ class JobQueueFederated extends JobQueue {
                }
                // Ring of all partitions
                $this->partitionRing = new HashRing( $partitionMap );
-               // Get the ring of partitions to push jobs into
-               if ( count( $partitionPushMap ) === count( $partitionMap ) ) {
-                       $this->partitionPushRing = clone $this->partitionRing; // faster
-               } else {
-                       $this->partitionPushRing = new HashRing( $partitionPushMap );
-               }
-               // Aggregate cache some per-queue values if there are multiple partition queues
-               $this->cache = count( $partitionMap ) > 1 ? wfGetMainCache() : new EmptyBagOStuff();
        }
 
        protected function supportedOrders() {
@@ -140,19 +115,16 @@ class JobQueueFederated extends JobQueue {
        }
 
        protected function supportsDelayedJobs() {
-               return true; // defer checks to the partitions
+               foreach ( $this->partitionQueues as $queue ) {
+                       if ( !$queue->supportsDelayedJobs() ) {
+                               return false;
+                       }
+               }
+
+               return true;
        }
 
        protected function doIsEmpty() {
-               $key = $this->getCacheKey( 'empty' );
-
-               $isEmpty = $this->cache->get( $key );
-               if ( $isEmpty === 'true' ) {
-                       return true;
-               } elseif ( $isEmpty === 'false' ) {
-                       return false;
-               }
-
                $empty = true;
                $failed = 0;
                foreach ( $this->partitionQueues as $queue ) {
@@ -160,12 +132,11 @@ class JobQueueFederated extends JobQueue {
                                $empty = $empty && $queue->doIsEmpty();
                        } catch ( JobQueueError $e ) {
                                ++$failed;
-                               MWExceptionHandler::logException( $e );
+                               $this->logException( $e );
                        }
                }
                $this->throwErrorIfAllPartitionsDown( $failed );
 
-               $this->cache->add( $key, $empty ? 'true' : 'false', self::CACHE_TTL_LONG );
                return $empty;
        }
 
@@ -191,32 +162,24 @@ class JobQueueFederated extends JobQueue {
         * @return int
         */
        protected function getCrossPartitionSum( $type, $method ) {
-               $key = $this->getCacheKey( $type );
-
-               $count = $this->cache->get( $key );
-               if ( $count !== false ) {
-                       return $count;
-               }
-
+               $count = 0;
                $failed = 0;
                foreach ( $this->partitionQueues as $queue ) {
                        try {
                                $count += $queue->$method();
                        } catch ( JobQueueError $e ) {
                                ++$failed;
-                               MWExceptionHandler::logException( $e );
+                               $this->logException( $e );
                        }
                }
                $this->throwErrorIfAllPartitionsDown( $failed );
 
-               $this->cache->set( $key, $count, self::CACHE_TTL_SHORT );
-
                return $count;
        }
 
        protected function doBatchPush( array $jobs, $flags ) {
                // Local ring variable that may be changed to point to a new ring on failure
-               $partitionRing = $this->partitionPushRing;
+               $partitionRing = $this->partitionRing;
                // Try to insert the jobs and update $partitionsTry on any failures.
                // Retry to insert any remaning jobs again, ignoring the bad partitions.
                $jobsLeft = $jobs;
@@ -277,12 +240,9 @@ class JobQueueFederated extends JobQueue {
                                $queue->doBatchPush( $jobBatch, $flags | self::QOS_ATOMIC );
                        } catch ( JobQueueError $e ) {
                                $ok = false;
-                               MWExceptionHandler::logException( $e );
+                               $this->logException( $e );
                        }
-                       if ( $ok ) {
-                               $key = $this->getCacheKey( 'empty' );
-                               $this->cache->set( $key, 'false', self::CACHE_TTL_LONG );
-                       } else {
+                       if ( !$ok ) {
                                if ( !$partitionRing->ejectFromLiveRing( $partition, 5 ) ) { // blacklist
                                        throw new JobQueueError( "Could not insert job(s), no partitions available." );
                                }
@@ -299,12 +259,9 @@ class JobQueueFederated extends JobQueue {
                                $queue->doBatchPush( $jobBatch, $flags | self::QOS_ATOMIC );
                        } catch ( JobQueueError $e ) {
                                $ok = false;
-                               MWExceptionHandler::logException( $e );
+                               $this->logException( $e );
                        }
-                       if ( $ok ) {
-                               $key = $this->getCacheKey( 'empty' );
-                               $this->cache->set( $key, 'false', self::CACHE_TTL_LONG );
-                       } else {
+                       if ( !$ok ) {
                                if ( !$partitionRing->ejectFromLiveRing( $partition, 5 ) ) { // blacklist
                                        throw new JobQueueError( "Could not insert job(s), no partitions available." );
                                }
@@ -331,7 +288,7 @@ class JobQueueFederated extends JobQueue {
                                $job = $queue->pop();
                        } catch ( JobQueueError $e ) {
                                ++$failed;
-                               MWExceptionHandler::logException( $e );
+                               $this->logException( $e );
                                $job = false;
                        }
                        if ( $job ) {
@@ -344,9 +301,6 @@ class JobQueueFederated extends JobQueue {
                }
                $this->throwErrorIfAllPartitionsDown( $failed );
 
-               $key = $this->getCacheKey( 'empty' );
-               $this->cache->set( $key, 'true', self::CACHE_TTL_LONG );
-
                return false;
        }
 
@@ -361,12 +315,12 @@ class JobQueueFederated extends JobQueue {
        protected function doIsRootJobOldDuplicate( Job $job ) {
                $params = $job->getRootJobParams();
                $sigature = $params['rootJobSignature'];
-               $partition = $this->partitionPushRing->getLiveLocation( $sigature );
+               $partition = $this->partitionRing->getLiveLocation( $sigature );
                try {
                        return $this->partitionQueues[$partition]->doIsRootJobOldDuplicate( $job );
                } catch ( JobQueueError $e ) {
-                       if ( $this->partitionPushRing->ejectFromLiveRing( $partition, 5 ) ) {
-                               $partition = $this->partitionPushRing->getLiveLocation( $sigature );
+                       if ( $this->partitionRing->ejectFromLiveRing( $partition, 5 ) ) {
+                               $partition = $this->partitionRing->getLiveLocation( $sigature );
                                return $this->partitionQueues[$partition]->doIsRootJobOldDuplicate( $job );
                        }
                }
@@ -377,12 +331,12 @@ class JobQueueFederated extends JobQueue {
        protected function doDeduplicateRootJob( Job $job ) {
                $params = $job->getRootJobParams();
                $sigature = $params['rootJobSignature'];
-               $partition = $this->partitionPushRing->getLiveLocation( $sigature );
+               $partition = $this->partitionRing->getLiveLocation( $sigature );
                try {
                        return $this->partitionQueues[$partition]->doDeduplicateRootJob( $job );
                } catch ( JobQueueError $e ) {
-                       if ( $this->partitionPushRing->ejectFromLiveRing( $partition, 5 ) ) {
-                               $partition = $this->partitionPushRing->getLiveLocation( $sigature );
+                       if ( $this->partitionRing->ejectFromLiveRing( $partition, 5 ) ) {
+                               $partition = $this->partitionRing->getLiveLocation( $sigature );
                                return $this->partitionQueues[$partition]->doDeduplicateRootJob( $job );
                        }
                }
@@ -398,7 +352,7 @@ class JobQueueFederated extends JobQueue {
                                $queue->doDelete();
                        } catch ( JobQueueError $e ) {
                                ++$failed;
-                               MWExceptionHandler::logException( $e );
+                               $this->logException( $e );
                        }
                }
                $this->throwErrorIfAllPartitionsDown( $failed );
@@ -413,7 +367,7 @@ class JobQueueFederated extends JobQueue {
                                $queue->waitForBackups();
                        } catch ( JobQueueError $e ) {
                                ++$failed;
-                               MWExceptionHandler::logException( $e );
+                               $this->logException( $e );
                        }
                }
                $this->throwErrorIfAllPartitionsDown( $failed );
@@ -440,10 +394,6 @@ class JobQueueFederated extends JobQueue {
                        'abandonedcount'
                );
 
-               foreach ( $types as $type ) {
-                       $this->cache->delete( $this->getCacheKey( $type ) );
-               }
-
                /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $queue ) {
                        $queue->doFlushCaches();
@@ -472,6 +422,17 @@ class JobQueueFederated extends JobQueue {
                return $iterator;
        }
 
+       public function getAllAbandonedJobs() {
+               $iterator = new AppendIterator();
+
+               /** @var JobQueue $queue */
+               foreach ( $this->partitionQueues as $queue ) {
+                       $iterator->append( $queue->getAllAbandonedJobs() );
+               }
+
+               return $iterator;
+       }
+
        public function getCoalesceLocationInternal() {
                return "JobQueueFederated:wiki:{$this->wiki}" .
                        sha1( serialize( array_keys( $this->partitionQueues ) ) );
@@ -495,7 +456,7 @@ class JobQueueFederated extends JobQueue {
                                }
                        } catch ( JobQueueError $e ) {
                                ++$failed;
-                               MWExceptionHandler::logException( $e );
+                               $this->logException( $e );
                        }
                }
                $this->throwErrorIfAllPartitionsDown( $failed );
@@ -519,7 +480,7 @@ class JobQueueFederated extends JobQueue {
                                }
                        } catch ( JobQueueError $e ) {
                                ++$failed;
-                               MWExceptionHandler::logException( $e );
+                               $this->logException( $e );
                        }
                }
                $this->throwErrorIfAllPartitionsDown( $failed );
@@ -527,6 +488,10 @@ class JobQueueFederated extends JobQueue {
                return $result;
        }
 
+       protected function logException( Exception $e ) {
+               wfDebugLog( 'JobQueueFederated', $e->getMessage() . "\n" . $e->getTraceAsString() );
+       }
+
        /**
         * Throw an error if no partitions available
         *
@@ -546,14 +511,4 @@ class JobQueueFederated extends JobQueue {
                        $queue->setTestingPrefix( $key );
                }
        }
-
-       /**
-        * @param string $property
-        * @return string
-        */
-       private function getCacheKey( $property ) {
-               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-
-               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, $property );
-       }
 }
index dbb85d7..ebd547a 100644 (file)
@@ -94,6 +94,7 @@ class JobQueueGroup {
                } else {
                        $conf = $conf + $wgJobTypeConf['default'];
                }
+               $conf['aggregator'] = JobQueueAggregator::singleton();
 
                return JobQueue::factory( $conf );
        }
@@ -125,7 +126,6 @@ class JobQueueGroup {
 
                foreach ( $jobsByType as $type => $jobs ) {
                        $this->get( $type )->push( $jobs );
-                       JobQueueAggregator::singleton()->notifyQueueNonEmpty( $this->wiki, $type );
                }
 
                if ( $this->cache->has( 'queues-ready', 'list' ) ) {
@@ -153,9 +153,6 @@ class JobQueueGroup {
                if ( is_string( $qtype ) ) { // specific job type
                        if ( !in_array( $qtype, $blacklist ) ) {
                                $job = $this->get( $qtype )->pop();
-                               if ( !$job ) {
-                                       JobQueueAggregator::singleton()->notifyQueueEmpty( $this->wiki, $qtype );
-                               }
                        }
                } else { // any job in the "default" jobs types
                        if ( $flags & self::USE_CACHE ) {
@@ -179,7 +176,6 @@ class JobQueueGroup {
                                if ( $job ) { // found
                                        break;
                                } else { // not found
-                                       JobQueueAggregator::singleton()->notifyQueueEmpty( $this->wiki, $type );
                                        $this->cache->clear( 'queues-ready' );
                                }
                        }
@@ -381,10 +377,6 @@ class JobQueueGroup {
                                        }
                                }
                        }
-                       // The tasks may have recycled jobs or release delayed jobs into the queue
-                       if ( isset( $tasksRun[$type] ) && !$queue->isEmpty() ) {
-                               JobQueueAggregator::singleton()->notifyQueueNonEmpty( $this->wiki, $type );
-                       }
                }
 
                if ( $count === 0 ) {
index 243fec9..6c823fb 100644 (file)
@@ -93,7 +93,6 @@ class JobQueueRedis extends JobQueue {
                                "Non-daemonized mode is no longer supported. Please install the " .
                                "mediawiki/services/jobrunner service and update \$wgJobTypeConf as needed." );
                }
-               $this->checkDelay = true; // always enabled
        }
 
        protected function supportedOrders() {
@@ -517,6 +516,29 @@ LUA;
                }
        }
 
+       /**
+        * @see JobQueue::getAllAbandonedJobs()
+        * @return Iterator
+        */
+       public function getAllAbandonedJobs() {
+               $conn = $this->getConnection();
+               try {
+                       $that = $this;
+
+                       return new MappedIterator( // delayed jobs
+                               $conn->zRange( $this->getQueueKey( 'z-abandoned' ), 0, -1 ),
+                               function ( $uid ) use ( $that, $conn ) {
+                                       return $that->getJobFromUidInternal( $uid, $conn );
+                               },
+                               array( 'accept' => function ( $job ) {
+                                       return is_object( $job );
+                               } )
+                       );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
+               }
+       }
+
        public function getCoalesceLocationInternal() {
                return "RedisServer:" . $this->server;
        }
index 091e648..1725b74 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup JobQueue
  */
 
+use MediaWiki\Logger\LoggerFactory;
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 
@@ -58,7 +59,7 @@ class JobRunner implements LoggerAwareInterface {
         */
        public function __construct( LoggerInterface $logger = null ) {
                if ( $logger === null ) {
-                       $logger = MWLoggerFactory::getInstance( 'runJobs' );
+                       $logger = LoggerFactory::getInstance( 'runJobs' );
                }
                $this->setLogger( $logger );
        }
@@ -87,6 +88,8 @@ class JobRunner implements LoggerAwareInterface {
         * @return array Summary response that can easily be JSON serialized
         */
        public function run( array $options ) {
+               global $wgJobClasses;
+
                $response = array( 'jobs' => array(), 'reached' => 'none-ready' );
 
                $type = isset( $options['type'] ) ? $options['type'] : false;
@@ -94,6 +97,11 @@ class JobRunner implements LoggerAwareInterface {
                $maxTime = isset( $options['maxTime'] ) ? $options['maxTime'] : false;
                $noThrottle = isset( $options['throttle'] ) && !$options['throttle'];
 
+               if ( $type !== false && !isset( $wgJobClasses[$type] ) ) {
+                       $response['reached'] = 'none-possible';
+                       return $response;
+               }
+
                $group = JobQueueGroup::singleton();
                // Handle any required periodic queue maintenance
                $count = $group->executeReadyPeriodicTasks();
@@ -109,6 +117,11 @@ class JobRunner implements LoggerAwareInterface {
                        return $response;
                }
 
+               // Catch huge single updates that lead to slave lag
+               $trxProfiler = Profiler::instance()->getTransactionProfiler();
+               $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
+               $trxProfiler->setExpectation( 'maxAffected', 500, __METHOD__ );
+
                // Bail out if there is too much DB lag
                list( , $maxLag ) = wfGetLBFactory()->getMainLB( wfWikiID() )->getMaxLag();
                if ( $maxLag >= 5 ) {
@@ -222,7 +235,7 @@ class JobRunner implements LoggerAwareInterface {
                                // This only waits for so long before exiting and letting
                                // other wikis in the farm (on different masters) get a chance.
                                $timePassed = microtime( true ) - $lastTime;
-                               if ( $timePassed >= 5 || $timePassed < 0 ) {
+                               if ( $timePassed >= 3 || $timePassed < 0 ) {
                                        if ( !wfWaitForSlaves( $lastTime, false, '*', 5 ) ) {
                                                $response['reached'] = 'slave-lag-limit';
                                                break;
index 9fa7747..42d2a39 100644 (file)
@@ -91,8 +91,8 @@ class JobSpecification implements IJobSpecification {
        /** @var Title */
        protected $title;
 
-       /** @var bool Expensive jobs may set this to true */
-       protected $ignoreDuplicates;
+       /** @var array */
+       protected $opts;
 
        /**
         * @param string $type
@@ -104,11 +104,12 @@ class JobSpecification implements IJobSpecification {
                $type, array $params, array $opts = array(), Title $title = null
        ) {
                $this->validateParams( $params );
+               $this->validateParams( $opts );
 
                $this->type = $type;
                $this->params = $params;
                $this->title = $title ?: Title::newMainPage();
-               $this->ignoreDuplicates = !empty( $opts['removeDuplicates'] );
+               $this->opts = $opts;
        }
 
        /**
@@ -158,7 +159,7 @@ class JobSpecification implements IJobSpecification {
         * @return bool Whether only one of each identical set of jobs should be run
         */
        public function ignoreDuplicates() {
-               return $this->ignoreDuplicates;
+               return !empty( $this->opts['removeDuplicates'] );
        }
 
        /**
@@ -186,4 +187,31 @@ class JobSpecification implements IJobSpecification {
 
                return $info;
        }
+
+       /**
+        * @return array Field/value map that can immediately be serialized
+        * @since 1.25
+        */
+       public function toSerializableArray() {
+               return array(
+                       'type'   => $this->type,
+                       'params' => $this->params,
+                       'opts'   => $this->opts,
+                       'title'  => array(
+                               'ns'  => $this->title->getNamespace(),
+                               'key' => $this->title->getDbKey()
+                       )
+               );
+       }
+
+       /**
+        * @param array $map Field/value map
+        * @return JobSpecification
+        * @since 1.25
+        */
+       public static function newFromArray( array $map ) {
+               $title = Title::makeTitle( $map['title']['ns'], $map['title']['key'] );
+
+               return new self( $map['type'], $map['params'], $map['opts'], $title );
+       }
 }
index bd5c40d..febc277 100644 (file)
@@ -34,7 +34,7 @@ abstract class JobQueueAggregator {
        /**
         * @param array $params
         */
-       protected function __construct( array $params ) {
+       public function __construct( array $params ) {
        }
 
        /**
@@ -152,3 +152,21 @@ abstract class JobQueueAggregator {
                return $pendingDBs;
        }
 }
+
+class JobQueueAggregatorNull extends JobQueueAggregator {
+       protected function doNotifyQueueEmpty( $wiki, $type ) {
+               return true;
+       }
+
+       protected function doNotifyQueueNonEmpty( $wiki, $type ) {
+               return true;
+       }
+
+       protected function doGetAllReadyWikiQueues() {
+               return array();
+       }
+
+       protected function doPurge() {
+               return true;
+       }
+}
\ No newline at end of file
diff --git a/includes/jobqueue/aggregator/JobQueueAggregatorMemc.php b/includes/jobqueue/aggregator/JobQueueAggregatorMemc.php
deleted file mode 100644 (file)
index ae266ef..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-/**
- * Job queue aggregator code that uses BagOStuff.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Class to handle tracking information about all queues using BagOStuff
- *
- * @ingroup JobQueue
- * @since 1.21
- */
-class JobQueueAggregatorMemc extends JobQueueAggregator {
-       /** @var BagOStuff */
-       protected $cache;
-
-       protected $cacheTTL; // integer; seconds
-
-       /**
-        * @param array $params Possible keys:
-        *   - objectCache : Name of an object cache registered in $wgObjectCaches.
-        *                   This defaults to the one specified by $wgMainCacheType.
-        *   - cacheTTL    : Seconds to cache the aggregate data before regenerating.
-        */
-       protected function __construct( array $params ) {
-               parent::__construct( $params );
-               $this->cache = isset( $params['objectCache'] )
-                       ? wfGetCache( $params['objectCache'] )
-                       : wfGetMainCache();
-               $this->cacheTTL = isset( $params['cacheTTL'] ) ? $params['cacheTTL'] : 180; // 3 min
-       }
-
-       /**
-        * @see JobQueueAggregator::doNotifyQueueEmpty()
-        */
-       protected function doNotifyQueueEmpty( $wiki, $type ) {
-               $key = $this->getReadyQueueCacheKey();
-               // Delist the queue from the "ready queue" list
-               if ( $this->cache->add( "$key:lock", 1, 60 ) ) { // lock
-                       $curInfo = $this->cache->get( $key );
-                       if ( is_array( $curInfo ) && isset( $curInfo['pendingDBs'][$type] ) ) {
-                               if ( in_array( $wiki, $curInfo['pendingDBs'][$type] ) ) {
-                                       $curInfo['pendingDBs'][$type] = array_diff(
-                                               $curInfo['pendingDBs'][$type], array( $wiki ) );
-                                       $this->cache->set( $key, $curInfo );
-                               }
-                       }
-                       $this->cache->delete( "$key:lock" ); // unlock
-               }
-
-               return true;
-       }
-
-       /**
-        * @see JobQueueAggregator::doNotifyQueueNonEmpty()
-        */
-       protected function doNotifyQueueNonEmpty( $wiki, $type ) {
-               return true; // updated periodically
-       }
-
-       /**
-        * @see JobQueueAggregator::doAllGetReadyWikiQueues()
-        */
-       protected function doGetAllReadyWikiQueues() {
-               $key = $this->getReadyQueueCacheKey();
-               // If the cache entry wasn't present, is stale, or in .1% of cases otherwise,
-               // regenerate the cache. Use any available stale cache if another process is
-               // currently regenerating the pending DB information.
-               $pendingDbInfo = $this->cache->get( $key );
-               if ( !is_array( $pendingDbInfo )
-                       || ( time() - $pendingDbInfo['timestamp'] ) > $this->cacheTTL
-                       || mt_rand( 0, 999 ) == 0
-               ) {
-                       if ( $this->cache->add( "$key:rebuild", 1, 1800 ) ) { // lock
-                               $pendingDbInfo = array(
-                                       'pendingDBs' => $this->findPendingWikiQueues(),
-                                       'timestamp' => time()
-                               );
-                               for ( $attempts = 1; $attempts <= 25; ++$attempts ) {
-                                       if ( $this->cache->add( "$key:lock", 1, 60 ) ) { // lock
-                                               $this->cache->set( $key, $pendingDbInfo );
-                                               $this->cache->delete( "$key:lock" ); // unlock
-                                               break;
-                                       }
-                               }
-                               $this->cache->delete( "$key:rebuild" ); // unlock
-                       }
-               }
-
-               return is_array( $pendingDbInfo )
-                       ? $pendingDbInfo['pendingDBs']
-                       : array(); // cache is both empty and locked
-       }
-
-       /**
-        * @see JobQueueAggregator::doPurge()
-        */
-       protected function doPurge() {
-               return $this->cache->delete( $this->getReadyQueueCacheKey() );
-       }
-
-       /**
-        * @return string
-        */
-       private function getReadyQueueCacheKey() {
-               return "jobqueue:aggregator:ready-queues:v1"; // global
-       }
-}
index db9e764..847dd6f 100644 (file)
@@ -44,7 +44,7 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
         *                    If a hostname is specified but no port, the standard port number
         *                    6379 will be used. Required.
         */
-       protected function __construct( array $params ) {
+       public function __construct( array $params ) {
                parent::__construct( $params );
                $this->servers = isset( $params['redisServers'] )
                        ? $params['redisServers']
index 1fa6cef..c5e3a23 100644 (file)
@@ -18,7 +18,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @ingroup Cache
+ * @ingroup JobQueue
  */
 
 /**
diff --git a/includes/jobqueue/jobs/EnqueueJob.php b/includes/jobqueue/jobs/EnqueueJob.php
new file mode 100755 (executable)
index 0000000..46fb2aa
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Router job that takes jobs and enqueues them.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Router job that takes jobs and enqueues them to their proper queues
+ *
+ * This can be used for several things:
+ *   - a) Making multi-job enqueues more robust by atomically enqueueing
+ *        a single job that pushes the actual jobs (with retry logic)
+ *   - b) Masking the latency of pushing jobs to different queues/wikis
+ *   - c) Low-latency enqueues to push jobs from warm to hot datacenters
+ *
+ * @ingroup JobQueue
+ * @since 1.25
+ */
+final class EnqueueJob extends Job {
+       /**
+        * Callers should use the factory methods instead
+        *
+        * @param Title $title
+        * @param array $params Job parameters
+        */
+       function __construct( $title, $params ) {
+               parent::__construct( 'enqueue', $title, $params );
+       }
+
+       /**
+        * @param Job|JobSpecification|array $jobs
+        * @return JobRouteJob
+        */
+       public static function newFromLocalJobs( $jobs ) {
+               $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
+
+               return self::newFromJobsByWiki( array( wfWikiID() => $jobs ) );
+       }
+
+       /**
+        * @param array $jobsByWiki Map of (wiki => JobSpecification list)
+        * @return JobRouteJob
+        */
+       public static function newFromJobsByWiki( array $jobsByWiki ) {
+               $jobMapsByWiki = array();
+               foreach ( $jobsByWiki as $wiki => $jobs ) {
+                       $jobMapsByWiki[$wiki] = array();
+                       foreach ( $jobs as $job ) {
+                               if ( $job instanceof JobSpecification ) {
+                                       $jobMapsByWiki[$wiki][] = $job->toSerializableArray();
+                               } else {
+                                       throw new InvalidArgumentException( "Jobs must be of type JobSpecification." );
+                               }
+                       }
+               }
+
+               return new self( Title::newMainPage(), array( 'jobsByWiki' => $jobMapsByWiki ) );
+       }
+
+       public function run() {
+               foreach ( $this->params['jobsByWiki'] as $wiki => $jobMaps ) {
+                       $jobSpecs = array();
+                       foreach ( $jobMaps as $jobMap ) {
+                               $jobSpecs[] = JobSpecification::newFromArray( $jobMap );
+                       }
+                       JobQueueGroup::singleton( $wiki )->push( $jobSpecs );
+               }
+
+               return true;
+       }
+}
index b4ddd11..e5e521c 100644 (file)
@@ -18,6 +18,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
+ * @ingroup JobQueue
  * @ingroup Cache
  */
 
@@ -42,17 +43,8 @@ class HTMLCacheUpdateJob extends Job {
        function run() {
                global $wgUpdateRowsPerJob, $wgUpdateRowsPerQuery;
 
-               static $expected = array( 'recursive', 'pages' ); // new jobs have one of these
-
-               $oldRangeJob = false;
-               if ( !array_intersect( array_keys( $this->params ), $expected ) ) {
-                       // B/C for older job params formats that lack these fields:
-                       // a) base jobs with just ("table") and b) range jobs with ("table","start","end")
-                       if ( isset( $this->params['start'] ) && isset( $this->params['end'] ) ) {
-                               $oldRangeJob = true;
-                       } else {
-                               $this->params['recursive'] = true; // base job
-                       }
+               if ( isset( $this->params['table'] ) && !isset( $this->params['pages'] ) ) {
+                       $this->params['recursive'] = true; // b/c; base job
                }
 
                // Job to purge all (or a range of) backlink pages for a page
@@ -70,26 +62,12 @@ class HTMLCacheUpdateJob extends Job {
                // Job to purge pages for a set of titles
                } elseif ( isset( $this->params['pages'] ) ) {
                        $this->invalidateTitles( $this->params['pages'] );
-               // B/C for job to purge a range of backlink pages for a given page
-               } elseif ( $oldRangeJob ) {
-                       $titleArray = $this->title->getBacklinkCache()->getLinks(
-                               $this->params['table'], $this->params['start'], $this->params['end'] );
-
-                       $pages = array(); // same format BacklinkJobUtils uses
-                       foreach ( $titleArray as $tl ) {
-                               $pages[$tl->getArticleId()] = array( $tl->getNamespace(), $tl->getDbKey() );
-                       }
-
-                       $jobs = array();
-                       foreach ( array_chunk( $pages, $wgUpdateRowsPerJob ) as $pageChunk ) {
-                               $jobs[] = new HTMLCacheUpdateJob( $this->title,
-                                       array(
-                                               'table' => $this->params['table'],
-                                               'pages' => $pageChunk
-                                       ) + $this->getRootJobParams() // carry over information for de-duplication
-                               );
-                       }
-                       JobQueueGroup::singleton()->push( $jobs );
+               // Job to update a single title
+               } else {
+                       $t = $this->title;
+                       $this->invalidateTitles( array(
+                               $t->getArticleID() => array( $t->getNamespace(), $t->getDBkey() )
+                       ) );
                }
 
                return true;
index 66291e9..f94d6eb 100644 (file)
@@ -18,7 +18,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @ingroup Cache
+ * @ingroup JobQueue
  */
 
 /**
index 3d4cfae..a922dd3 100644 (file)
  *
  * @file
  * @ingroup Upload
+ * @ingroup JobQueue
  */
 
 /**
  * Upload a file from the upload stash into the local file repo.
  *
  * @ingroup Upload
+ * @ingroup JobQueue
  */
 class PublishStashedFileJob extends Job {
        public function __construct( $title, $params ) {
index 236b4d4..b550f50 100644 (file)
@@ -17,6 +17,7 @@
  *
  * @file
  * @author Aaron Schulz
+ * @ingroup JobQueue
  */
 
 /**
@@ -64,6 +65,7 @@ class RecentChangesUpdateJob extends Job {
                if ( !$dbw->lock( $lockKey, __METHOD__, 1 ) ) {
                        return; // already in progress
                }
+               $batchSize = 100; // Avoid slave lag
 
                $cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
                do {
@@ -71,11 +73,21 @@ class RecentChangesUpdateJob extends Job {
                                'rc_id',
                                array( 'rc_timestamp < ' . $dbw->addQuotes( $cutoff ) ),
                                __METHOD__,
-                               array( 'LIMIT' => 100 ) // avoid slave lag
+                               array( 'LIMIT' => $batchSize )
                        );
                        if ( $rcIds ) {
                                $dbw->delete( 'recentchanges', array( 'rc_id' => $rcIds ), __METHOD__ );
                        }
+                       // No need for this to be in a transaction.
+                       $dbw->commit( __METHOD__, 'flush' );
+
+                       if ( count( $rcIds ) === $batchSize ) {
+                               // There might be more, so try waiting for slaves
+                               if ( !wfWaitForSlaves( null, false, false, /* $timeout = */ 3 ) ) {
+                                       // Another job will continue anyway
+                                       break;
+                               }
+                       }
                } while ( $rcIds );
 
                $dbw->unlock( $lockKey, __METHOD__ );
index 5d95792..1252b0b 100644 (file)
@@ -39,6 +39,10 @@ class RefreshLinksJob extends Job {
 
        function __construct( $title, $params = '' ) {
                parent::__construct( 'refreshLinks', $title, $params );
+               // A separate type is used just for cascade-protected backlinks
+               if ( !empty( $this->params['prioritize'] ) ) {
+                       $this->command .= 'Prioritized';
+               }
                // Base backlink update jobs and per-title update jobs can be de-duplicated.
                // If template A changes twice before any jobs run, a clean queue will have:
                //              (A base, A base)
@@ -100,6 +104,10 @@ class RefreshLinksJob extends Job {
                return true;
        }
 
+       /**
+        * @param Title $title
+        * @return bool
+        */
        protected function runForTitle( Title $title = null ) {
                $linkCache = LinkCache::singleton();
                $linkCache->clear();
index dbc4f23..ab38138 100644 (file)
@@ -37,6 +37,7 @@ class ThumbnailRenderJob extends Job {
                $transformParams = $this->params['transformParams'];
 
                $file = wfLocalFile( $this->title );
+               $file->load( File::READ_LATEST );
 
                if ( $file && $file->exists() ) {
                        if ( $wgUploadThumbnailRenderMethod === 'jobqueue' ) {
@@ -92,9 +93,10 @@ class ThumbnailRenderJob extends Job {
 
                wfDebug( __METHOD__ . ": hitting url {$thumbUrl}\n" );
 
-               $request = MWHttpRequest::factory( $thumbUrl, array(
-                       'method' => 'HEAD',
-                       'followRedirects' => true ) );
+               $request = MWHttpRequest::factory( $thumbUrl,
+                       array( 'method' => 'HEAD', 'followRedirects' => true ),
+                       __METHOD__
+               );
 
                if ( $wgUploadThumbnailRenderHttpCustomHost ) {
                        $request->setHeader( 'Host', $wgUploadThumbnailRenderHttpCustomHost );
index 74775b5..095811f 100644 (file)
@@ -122,7 +122,7 @@ class FormatJson {
         *   readability, using that string for indentation. If true, use the default indent
         *   string (four spaces).
         * @param int $escaping Bitfield consisting of _OK class constants
-        * @return string|bool: String if successful; false upon failure
+        * @return string|false String if successful; false upon failure
         */
        public static function encode( $value, $pretty = false, $escaping = 0 ) {
                if ( !is_string( $pretty ) ) {
@@ -137,8 +137,9 @@ class FormatJson {
        }
 
        /**
-        * Decodes a JSON string. It is recommended to use FormatJson::parse(), which returns more comprehensive
-        * result in case of an error, and has more parsing options.
+        * Decodes a JSON string. It is recommended to use FormatJson::parse(),
+        * which returns more comprehensive result in case of an error, and has
+        * more parsing options.
         *
         * @param string $value The JSON string being decoded
         * @param bool $assoc When true, returned objects will be converted into associative arrays.
@@ -154,7 +155,8 @@ class FormatJson {
 
        /**
         * Decodes a JSON string.
-        * Unlike FormatJson::decode(), if $value represents null value, it will be properly decoded as valid.
+        * Unlike FormatJson::decode(), if $value represents null value, it will be
+        * properly decoded as valid.
         *
         * @param string $value The JSON string being decoded
         * @param int $options A bit field that allows FORCE_ASSOC, TRY_FIXING,
@@ -230,7 +232,7 @@ class FormatJson {
         * @param mixed $value
         * @param string|bool $pretty
         * @param int $escaping
-        * @return string|bool
+        * @return string|false
         */
        private static function encode54( $value, $pretty, $escaping ) {
                static $bug66021;
@@ -282,7 +284,7 @@ class FormatJson {
         * @param mixed $value
         * @param string|bool $pretty
         * @param int $escaping
-        * @return string|bool
+        * @return string|false
         */
        private static function encode53( $value, $pretty, $escaping ) {
                $options = ( $escaping & self::XMLMETA_OK ) ? 0 : ( JSON_HEX_TAG | JSON_HEX_AMP );
diff --git a/includes/libs/BufferingStatsdDataFactory.php b/includes/libs/BufferingStatsdDataFactory.php
new file mode 100644 (file)
index 0000000..ea5b09d
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Copyright 2015
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
+
+/**
+ * A factory for application metric data.
+ *
+ * This class prepends a context-specific prefix to each metric key and keeps
+ * a reference to each constructed metric in an internal array buffer.
+ *
+ * @since 1.25
+ */
+class BufferingStatsdDataFactory extends StatsdDataFactory {
+       protected $buffer = array();
+
+       public function __construct( $prefix ) {
+               parent::__construct();
+               $this->prefix = $prefix;
+       }
+
+       public function produceStatsdData( $key, $value = 1, $metric = self::STATSD_METRIC_COUNT ) {
+               $this->buffer[] = $entity = $this->produceStatsdDataEntity();
+               if ( $key !== null ) {
+                       $prefixedKey = ltrim( $this->prefix . '.' . $key, '.' );
+                       $entity->setKey( $prefixedKey );
+               }
+               if ( $value !== null ) {
+                       $entity->setValue( $value );
+               }
+               if ( $metric !== null ) {
+                       $entity->setMetric( $metric );
+               }
+               return $entity;
+       }
+
+       public function getBuffer() {
+               return $this->buffer;
+       }
+}
index 0d6c3a6..6d01986 100644 (file)
@@ -2,6 +2,11 @@
 /**
  * XML syntax and type checker.
  *
+ * Since 1.24.2, it uses XMLReader instead of xml_parse, which gives us
+ * more control over the expansion of XML entities. When passed to the
+ * callback, entities will be fully expanded, but may report the XML is
+ * invalid if expanding the entities are likely to cause a DoS.
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -25,7 +30,7 @@ class XmlTypeCheck {
         * Will be set to true or false to indicate whether the file is
         * well-formed XML. Note that this doesn't check schema validity.
         */
-       public $wellFormed = false;
+       public $wellFormed = null;
 
        /**
         * Will be set to true if the optional element filter returned
@@ -78,12 +83,7 @@ class XmlTypeCheck {
        function __construct( $input, $filterCallback = null, $isFile = true, $options = array() ) {
                $this->filterCallback = $filterCallback;
                $this->parserOptions = array_merge( $this->parserOptions, $options );
-
-               if ( $isFile ) {
-                       $this->validateFromFile( $input );
-               } else {
-                       $this->validateFromString( $input );
-               }
+               $this->validateFromInput( $input, $isFile );
        }
 
        /**
@@ -125,140 +125,211 @@ class XmlTypeCheck {
                return $this->rootElement;
        }
 
+
        /**
-        * Get an XML parser with the root element handler.
-        * @see XmlTypeCheck::rootElementOpen()
-        * @return resource a resource handle for the XML parser
+        * @param string $fname the filename
         */
-       private function getParser() {
-               $parser = xml_parser_create_ns( 'UTF-8' );
-               // case folding violates XML standard, turn it off
-               xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false );
-               xml_set_element_handler( $parser, array( $this, 'rootElementOpen' ), false );
-               if ( $this->parserOptions['processing_instruction_handler'] ) {
-                       xml_set_processing_instruction_handler(
-                               $parser,
-                               array( $this, 'processingInstructionHandler' )
-                       );
+       private function validateFromInput( $xml, $isFile ) {
+               $reader = new XMLReader();
+               if ( $isFile ) {
+                       $s = $reader->open( $xml, null, LIBXML_NOERROR | LIBXML_NOWARNING );
+               } else {
+                       $s = $reader->XML( $xml, null, LIBXML_NOERROR | LIBXML_NOWARNING );
+               }
+               if ( $s !== true ) {
+                       // Couldn't open the XML
+                       $this->wellFormed = false;
+               } else {
+                       $oldDisable = libxml_disable_entity_loader( true );
+                       $reader->setParserProperty( XMLReader::SUBST_ENTITIES, true );
+                       try {
+                               $this->validate( $reader );
+                       } catch ( Exception $e ) {
+                               // Calling this malformed, because we didn't parse the whole
+                               // thing. Maybe just an external entity refernce.
+                               $this->wellFormed = false;
+                               $reader->close();
+                               libxml_disable_entity_loader( $oldDisable );
+                               throw $e;
+                       }
+                       $reader->close();
+                       libxml_disable_entity_loader( $oldDisable );
                }
-               return $parser;
        }
 
-       /**
-        * @param string $fname the filename
-        */
-       private function validateFromFile( $fname ) {
-               $parser = $this->getParser();
-
-               if ( file_exists( $fname ) ) {
-                       $file = fopen( $fname, "rb" );
-                       if ( $file ) {
-                               do {
-                                       $chunk = fread( $file, 32768 );
-                                       $ret = xml_parse( $parser, $chunk, feof( $file ) );
-                                       if ( $ret == 0 ) {
-                                               $this->wellFormed = false;
-                                               fclose( $file );
-                                               xml_parser_free( $parser );
-                                               return;
+       private function readNext( XMLReader $reader ) {
+               set_error_handler( array( $this, 'XmlErrorHandler' ) );
+               $ret = $reader->read();
+               restore_error_handler();
+               return $ret;
+       }
+
+       public function XmlErrorHandler( $errno, $errstr ) {
+               $this->wellFormed = false;
+       }
+
+       private function validate( $reader ) {
+
+               // First, move through anything that isn't an element, and
+               // handle any processing instructions with the callback
+               do {
+                       if( !$this->readNext( $reader ) ) {
+                               // Hit the end of the document before any elements
+                               $this->wellFormed = false;
+                               return;
+                       }
+                       if ( $reader->nodeType === XMLReader::PI ) {
+                               $this->processingInstructionHandler( $reader->name, $reader->value );
+                       }
+               } while ( $reader->nodeType != XMLReader::ELEMENT );
+
+               // Process the rest of the document
+               do {
+                       switch ( $reader->nodeType ) {
+                               case XMLReader::ELEMENT:
+                                       $name = $this->expandNS(
+                                               $reader->name,
+                                               $reader->namespaceURI
+                                       );
+                                       if ( $this->rootElement === '' ) {
+                                               $this->rootElement = $name;
                                        }
-                               } while ( !feof( $file ) );
+                                       $empty = $reader->isEmptyElement;
+                                       $attrs = $this->getAttributesArray( $reader );
+                                       $this->elementOpen( $name, $attrs );
+                                       if ( $empty ) {
+                                               $this->elementClose();
+                                       }
+                                       break;
+
+                               case XMLReader::END_ELEMENT:
+                                       $this->elementClose();
+                                       break;
+
+                               case XMLReader::WHITESPACE:
+                               case XMLReader::SIGNIFICANT_WHITESPACE:
+                               case XMLReader::CDATA:
+                               case XMLReader::TEXT:
+                                       $this->elementData( $reader->value );
+                                       break;
 
-                               fclose( $file );
+                               case XMLReader::ENTITY_REF:
+                                       // Unexpanded entity (maybe external?),
+                                       // don't send to the filter (xml_parse didn't)
+                                       break;
+
+                               case XMLReader::COMMENT:
+                                       // Don't send to the filter (xml_parse didn't)
+                                       break;
+
+                               case XMLReader::PI:
+                                       // Processing instructions can happen after the header too
+                                       $this->processingInstructionHandler(
+                                               $reader->name,
+                                               $reader->value
+                                       );
+                                       break;
+                               default:
+                                       // One of DOC, DOC_TYPE, ENTITY, END_ENTITY,
+                                       // NOTATION, or XML_DECLARATION
+                                       // xml_parse didn't send these to the filter, so we won't.
                        }
+
+               } while ( $this->readNext( $reader ) );
+
+               if ( $this->stackDepth !== 0 ) {
+                       $this->wellFormed = false;
+               } elseif ( $this->wellFormed === null ) {
+                       $this->wellFormed = true;
                }
-               $this->wellFormed = true;
 
-               xml_parser_free( $parser );
        }
 
        /**
-        *
-        * @param string $string the XML-input-string to be checked.
+        * Get all of the attributes for an XMLReader's current node
+        * @param $r XMLReader
+        * @return array of attributes
         */
-       private function validateFromString( $string ) {
-               $parser = $this->getParser();
-               $ret = xml_parse( $parser, $string, true );
-               xml_parser_free( $parser );
-               if ( $ret == 0 ) {
-                       $this->wellFormed = false;
-                       return;
+       private function getAttributesArray( XMLReader $r ) {
+               $attrs = array();
+               while ( $r->moveToNextAttribute() ) {
+                       if ( $r->namespaceURI === 'http://www.w3.org/2000/xmlns/' ) {
+                               // XMLReader treats xmlns attributes as normal
+                               // attributes, while xml_parse doesn't
+                               continue;
+                       }
+                       $name = $this->expandNS( $r->name, $r->namespaceURI );
+                       $attrs[$name] = $r->value;
                }
-               $this->wellFormed = true;
+               return $attrs;
        }
 
        /**
-        * @param $parser
-        * @param $name
-        * @param $attribs
+        * @param $name element or attribute name, maybe with a full or short prefix
+        * @param $namespaceURI the namespaceURI
+        * @return string the name prefixed with namespaceURI
         */
-       private function rootElementOpen( $parser, $name, $attribs ) {
-               $this->rootElement = $name;
-
-               if ( is_callable( $this->filterCallback ) ) {
-                       xml_set_element_handler(
-                               $parser,
-                               array( $this, 'elementOpen' ),
-                               array( $this, 'elementClose' )
-                       );
-                       xml_set_character_data_handler( $parser, array( $this, 'elementData' ) );
-                       $this->elementOpen( $parser, $name, $attribs );
-               } else {
-                       // We only need the first open element
-                       xml_set_element_handler( $parser, false, false );
+       private function expandNS( $name, $namespaceURI ) {
+               if ( $namespaceURI ) {
+                       $parts = explode( ':', $name );
+                       $localname = array_pop( $parts );
+                       return "$namespaceURI:$localname";
                }
+               return $name;
        }
 
        /**
-        * @param $parser
         * @param $name
         * @param $attribs
         */
-       private function elementOpen( $parser, $name, $attribs ) {
+       private function elementOpen( $name, $attribs ) {
                $this->elementDataContext[] = array( $name, $attribs );
                $this->elementData[] = '';
                $this->stackDepth++;
        }
 
        /**
-        * @param $parser
-        * @param $name
         */
-       private function elementClose( $parser, $name ) {
+       private function elementClose() {
                list( $name, $attribs ) = array_pop( $this->elementDataContext );
                $data = array_pop( $this->elementData );
                $this->stackDepth--;
 
-               if ( call_user_func(
-                       $this->filterCallback,
-                       $name,
-                       $attribs,
-                       $data
-               ) ) {
-                       // Filter hit!
+               if ( is_callable( $this->filterCallback )
+                       && call_user_func(
+                               $this->filterCallback,
+                               $name,
+                               $attribs,
+                               $data
+                       )
+               ) {
+                       // Filter hit
                        $this->filterMatch = true;
                }
        }
 
        /**
-        * @param $parser
         * @param $data
         */
-       private function elementData( $parser, $data ) {
-               // xml_set_character_data_handler breaks the data on & characters, so
-               // we collect any data here, and we'll run the callback in elementClose
+       private function elementData( $data ) {
+               // Collect any data here, and we'll run the callback in elementClose
                $this->elementData[ $this->stackDepth - 1 ] .= trim( $data );
        }
 
        /**
-        * @param $parser
         * @param $target
         * @param $data
         */
-       private function processingInstructionHandler( $parser, $target, $data ) {
-               if ( call_user_func( $this->parserOptions['processing_instruction_handler'], $target, $data ) ) {
-                       // Filter hit!
-                       $this->filterMatch = true;
+       private function processingInstructionHandler( $target, $data ) {
+               if ( $this->parserOptions['processing_instruction_handler'] ) {
+                       if ( call_user_func(
+                               $this->parserOptions['processing_instruction_handler'],
+                               $target,
+                               $data
+                       ) ) {
+                               // Filter hit!
+                               $this->filterMatch = true;
+                       }
                }
        }
 }
index 49c9f23..796acb5 100644 (file)
@@ -28,7 +28,7 @@ class ComposerJson {
        public function getRequiredDependencies() {
                $deps = array();
                foreach ( $this->contents['require'] as $package => $version ) {
-                       if ( $package !== "php" ) {
+                       if ( $package !== "php" && strpos( $package, 'ext-' ) !== 0 ) {
                                $deps[$package] = self::normalizeVersion( $version );
                        }
                }
diff --git a/includes/libs/normal/Makefile b/includes/libs/normal/Makefile
deleted file mode 100644 (file)
index b00154d..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-.PHONY : all test testutf8 testclean icutest bench icubench clean distclean
-
-## Latest greatest version of Unicode
-## May cause confusion if running test suite from these files
-## when the data was generated from a previous version.
-#BASE=http://www.unicode.org/Public/UNIDATA
-
-# Explicitly using Unicode 6.0
-BASE=http://www.unicode.org/Public/6.0.0/ucd
-
-# Can override to php-cli or php5 or whatever
-PHP=php
-#PHP=php-cli
-
-# Some nice tool to grab URLs with
-FETCH=wget
-#FETCH=fetch
-
-all : UtfNormalData.inc
-
-UtfNormalData.inc : UtfNormalGenerate.php UtfNormalUtil.php UnicodeData.txt CompositionExclusions.txt NormalizationCorrections.txt DerivedNormalizationProps.txt
-       $(PHP) UtfNormalGenerate.php
-
-test : UtfNormalTest.php UtfNormalData.inc NormalizationTest.txt
-       $(PHP) UtfNormalTest.php
-
-bench : UtfNormalData.inc testdata/washington.txt testdata/berlin.txt testdata/tokyo.txt testdata/young.txt testdata/bulgakov.txt
-       $(PHP) UtfNormalBench.php
-
-icutest : UtfNormalData.inc NormalizationTest.txt
-       $(PHP) Utf8Test.php --icu
-       $(PHP) UtfNormalTest.php --icu
-
-icubench : UtfNormalData.inc testdata/washington.txt testdata/berlin.txt testdata/tokyo.txt testdata/young.txt testdata/bulgakov.txt
-       $(PHP) UtfNormalBench.php --icu
-
-clean :
-       rm -f UtfNormalData.inc UtfNormalDataK.inc
-
-distclean : clean
-       rm -f CompositionExclusions.txt NormalizationTest.txt NormalizationCorrections.txt UnicodeData.txt DerivedNormalizationProps.txt UTF-8-test.txt
-
-# The Unicode data files...
-CompositionExclusions.txt :
-       $(FETCH) $(BASE)/CompositionExclusions.txt
-
-NormalizationTest.txt :
-       $(FETCH) $(BASE)/NormalizationTest.txt
-
-NormalizationCorrections.txt :
-       $(FETCH) $(BASE)/NormalizationCorrections.txt
-
-DerivedNormalizationProps.txt :
-       $(FETCH) $(BASE)/DerivedNormalizationProps.txt
-
-UnicodeData.txt :
-       $(FETCH) $(BASE)/UnicodeData.txt
-
-testdata/berlin.txt :
-       mkdir -p testdata && wget -U MediaWiki/test -O testdata/berlin.txt "http://de.wikipedia.org/w/index.php?title=Berlin&oldid=2775712&action=raw"
-
-testdata/washington.txt :
-       mkdir -p testdata && wget -U MediaWiki/test -O testdata/washington.txt "http://en.wikipedia.org/w/index.php?title=Washington%2C_D.C.&oldid=6370218&action=raw"
-
-testdata/tokyo.txt :
-       mkdir -p testdata && wget -U MediaWiki/test -O testdata/tokyo.txt "http://ja.wikipedia.org/w/index.php?title=%E6%9D%B1%E4%BA%AC%E9%83%BD&oldid=940880&action=raw"
-
-testdata/young.txt :
-       mkdir -p testdata && wget -U MediaWiki/test -O testdata/young.txt "http://ko.wikipedia.org/w/index.php?title=%EC%9D%B4%EC%88%98%EC%98%81&oldid=627688&action=raw"
-
-testdata/bulgakov.txt :
-       mkdir -p testdata && wget -U MediaWiki/test -O testdata/bulgakov.txt "http://ru.wikipedia.org/w/index.php?title=%D0%91%D1%83%D0%BB%D0%B3%D0%B0%D0%BA%D0%BE%D0%B2%2C_%D0%A1%D0%B5%D1%80%D0%B3%D0%B5%D0%B9_%D0%9D%D0%B8%D0%BA%D0%BE%D0%BB%D0%B0%D0%B5%D0%B2%D0%B8%D1%87&oldid=17704&action=raw"
diff --git a/includes/libs/normal/README b/includes/libs/normal/README
deleted file mode 100644 (file)
index fa70c63..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-This directory contains some Unicode normalization routines. These routines
-are meant to be reusable in other projects, so I'm not tying them to the
-MediaWiki utility functions.
-
-The main function to care about is UtfNormal::toNFC(); this will convert
-a given UTF-8 string to Normalization Form C if it's not already such.
-The function assumes that the input string is already valid UTF-8; if there
-are corrupt characters this may produce erroneous results.
-
-To also check for illegal characters, use UtfNormal::cleanUp(). This will
-strip illegal UTF-8 sequences and characters that are illegal in XML, and
-if necessary convert to normalization form C.
-
-Performance is kind of stinky in absolute terms, though it should be speedy
-on pure ASCII text. ;) On text that can be determined quickly to already be
-in NFC it's not too awful but it can quickly get uncomfortably slow,
-particularly for Korean text (the hangul decomposition/composition code is
-extra slow).
-
-
-== Regenerating data tables ==
-
-UtfNormalData.inc and UtfNormalDataK.inc are generated from the Unicode
-Character Database by the script UtfNormalGenerate.php. On a *nix system
-'make' should fetch the necessary files and regenerate it if the scripts
-have been changed or you remove it.
-
-
-== Testing ==
-
-'make test' will run the conformance test (UtfNormalTest.php), fetching the
-data from the net if necessary. If it reports failure, something is
-going wrong!
-
-You may have to set up PHPUnit first.
-
-$ pear channel-discover pear.phpunit.de
-$ pear install phpunit/PHPUnit
-
-== Benchmarks ==
-
-Run 'make bench' to download some sample texts from Wikipedia and run some
-cheap benchmarks of some of the functions. Take all numbers with large
-grains of salt.
-
-
-== PHP module extension ==
-
-There's an experimental PHP extension module which wraps the ICU library's
-normalization functions. This is *MUCH* faster than doing this work in pure
-PHP code. This is at https://git.wikimedia.org/summary/mediawiki%2Fextensions%2Fnormal.git.
-It is used by the WMF, which currently runs PHP 5.3.10 on Linux.  It hasn't been
-thoroughly tested on other configurations, but may work.
-
-If the php_normal.so module is loaded in php.ini, the normalization functions
-will automatically use it. If you can't (or don't want to) load it in php.ini,
-you may be able to load it using the dl() function before the inclusion of
-UtfNormal.php, and it will be picked up.
-
diff --git a/includes/libs/normal/RandomTest.php b/includes/libs/normal/RandomTest.php
deleted file mode 100644 (file)
index 0604d7b..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-/**
- * Test feeds random 16-byte strings to both the pure PHP and ICU-based
- * UtfNormal::cleanUp() code paths, and checks to see if there's a
- * difference. Will run forever until it finds one or you kill it.
- *
- * Copyright (C) 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
- */
-
-if ( PHP_SAPI != 'cli' ) {
-       die( "Run me from the command line please.\n" );
-}
-
-/** */
-require_once 'UtfNormal.php';
-require_once '../diff/DifferenceEngine.php';
-
-dl( 'php_utfnormal.so' );
-
-# mt_srand( 99999 );
-
-function randomString( $length, $nullOk, $ascii = false ) {
-       $out = '';
-       for ( $i = 0; $i < $length; $i++ )
-               $out .= chr( mt_rand( $nullOk ? 0 : 1, $ascii ? 127 : 255 ) );
-
-       return $out;
-}
-
-/* Duplicate of the cleanUp() path for ICU usage */
-function donorm( $str ) {
-       # We exclude a few chars that ICU would not.
-       $str = preg_replace( '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', UTF8_REPLACEMENT, $str );
-       $str = str_replace( UTF8_FFFE, UTF8_REPLACEMENT, $str );
-       $str = str_replace( UTF8_FFFF, UTF8_REPLACEMENT, $str );
-
-       # UnicodeString constructor fails if the string ends with a head byte.
-       # Add a junk char at the end, we'll strip it off
-       return rtrim( utf8_normalize( $str . "\x01", UtfNormal::UNORM_NFC ), "\x01" );
-}
-
-function showDiffs( $a, $b ) {
-       $ota = explode( "\n", str_replace( "\r\n", "\n", $a ) );
-       $nta = explode( "\n", str_replace( "\r\n", "\n", $b ) );
-
-       $diffs = new Diff( $ota, $nta );
-       $formatter = new TableDiffFormatter();
-       $funky = $formatter->format( $diffs );
-       $matches = array();
-       preg_match_all( '/<(?:ins|del) class="diffchange">(.*?)<\/(?:ins|del)>/', $funky, $matches );
-       foreach ( $matches[1] as $bit ) {
-               $hex = bin2hex( $bit );
-               echo "\t$hex\n";
-       }
-}
-
-$size = 16;
-$n = 0;
-while ( true ) {
-       $n++;
-       echo "$n\n";
-
-       $str = randomString( $size, true );
-       $clean = UtfNormal::cleanUp( $str );
-       $norm = donorm( $str );
-
-       echo strlen( $clean ) . ", " . strlen( $norm );
-       if ( $clean == $norm ) {
-               echo " (match)\n";
-       } else {
-               echo " (FAIL)\n";
-               echo "\traw: " . bin2hex( $str ) . "\n" .
-                       "\tphp: " . bin2hex( $clean ) . "\n" .
-                       "\ticu: " . bin2hex( $norm ) . "\n";
-               echo "\n\tdiffs:\n";
-               showDiffs( $clean, $norm );
-               die();
-       }
-
-       $str = '';
-       $clean = '';
-       $norm = '';
-}
index 8204f97..c9c05a0 100644 (file)
@@ -28,8 +28,7 @@
  * @defgroup UtfNormal UtfNormal
  */
 
-define( 'NORMALIZE_ICU', function_exists( 'utf8_normalize' ) );
-define( 'NORMALIZE_INTL', function_exists( 'normalizer_normalize' ) );
+use UtfNormal\Validator;
 
 /**
  * Unicode normalization routines for working with UTF-8 strings.
@@ -43,28 +42,10 @@ define( 'NORMALIZE_INTL', function_exists( 'normalizer_normalize' ) );
  *
  * See description of forms at http://www.unicode.org/reports/tr15/
  *
+ * @deprecated since 1.25, use UtfNormal\Validator directly
  * @ingroup UtfNormal
  */
 class UtfNormal {
-       /**
-        * For using the ICU wrapper
-        */
-       const UNORM_NONE = 1;
-       const UNORM_NFD = 2;
-       const UNORM_NFKD = 3;
-       const UNORM_NFC = 4;
-       const UNORM_NFKC = 5;
-       const UNORM_FCD = 6;
-       const UNORM_DEFAULT = self::UNORM_NFC;
-
-       public static $utfCombiningClass = null;
-       public static $utfCanonicalComp = null;
-       public static $utfCanonicalDecomp = null;
-
-       # Load compatibility decompositions on demand if they are needed.
-       public static $utfCompatibilityDecomp = null;
-       public static $utfCheckNFC;
-
        /**
         * The ultimate convenience function! Clean up invalid UTF-8 sequences,
         * and convert to normal form C, canonical composition.
@@ -76,36 +57,7 @@ class UtfNormal {
         * @return string a clean, shiny, normalized UTF-8 string
         */
        static function cleanUp( $string ) {
-               if ( NORMALIZE_ICU ) {
-                       $string = self::replaceForNativeNormalize( $string );
-
-                       # UnicodeString constructor fails if the string ends with a
-                       # head byte. Add a junk char at the end, we'll strip it off.
-                       return rtrim( utf8_normalize( $string . "\x01", self::UNORM_NFC ), "\x01" );
-               } elseif ( NORMALIZE_INTL ) {
-                       $string = self::replaceForNativeNormalize( $string );
-                       $norm = normalizer_normalize( $string, Normalizer::FORM_C );
-                       if ( $norm === null || $norm === false ) {
-                               # normalizer_normalize will either return false or null
-                               # (depending on which doc you read) if invalid utf8 string.
-                               # quickIsNFCVerify cleans up invalid sequences.
-
-                               if ( UtfNormal::quickIsNFCVerify( $string ) ) {
-                                       # if that's true, the string is actually already normal.
-                                       return $string;
-                               } else {
-                                       # Now we are valid but non-normal
-                                       return normalizer_normalize( $string, Normalizer::FORM_C );
-                               }
-                       } else {
-                               return $norm;
-                       }
-               } elseif ( UtfNormal::quickIsNFCVerify( $string ) ) {
-                       # Side effect -- $string has had UTF-8 errors cleaned up.
-                       return $string;
-               } else {
-                       return UtfNormal::NFC( $string );
-               }
+               return Validator::cleanUp( $string );
        }
 
        /**
@@ -117,14 +69,7 @@ class UtfNormal {
         * @return string a UTF-8 string in normal form C
         */
        static function toNFC( $string ) {
-               if ( NORMALIZE_INTL )
-                       return normalizer_normalize( $string, Normalizer::FORM_C );
-               elseif ( NORMALIZE_ICU )
-                       return utf8_normalize( $string, self::UNORM_NFC );
-               elseif ( UtfNormal::quickIsNFC( $string ) )
-                       return $string;
-               else
-                       return UtfNormal::NFC( $string );
+               return Validator::toNFC( $string );
        }
 
        /**
@@ -135,14 +80,7 @@ class UtfNormal {
         * @return string a UTF-8 string in normal form D
         */
        static function toNFD( $string ) {
-               if ( NORMALIZE_INTL )
-                       return normalizer_normalize( $string, Normalizer::FORM_D );
-               elseif ( NORMALIZE_ICU )
-                       return utf8_normalize( $string, self::UNORM_NFD );
-               elseif ( preg_match( '/[\x80-\xff]/', $string ) )
-                       return UtfNormal::NFD( $string );
-               else
-                       return $string;
+               return Validator::toNFD( $string );
        }
 
        /**
@@ -154,14 +92,7 @@ class UtfNormal {
         * @return string a UTF-8 string in normal form KC
         */
        static function toNFKC( $string ) {
-               if ( NORMALIZE_INTL )
-                       return normalizer_normalize( $string, Normalizer::FORM_KC );
-               elseif ( NORMALIZE_ICU )
-                       return utf8_normalize( $string, self::UNORM_NFKC );
-               elseif ( preg_match( '/[\x80-\xff]/', $string ) )
-                       return UtfNormal::NFKC( $string );
-               else
-                       return $string;
+               return Validator::toNFKC( $string );
        }
 
        /**
@@ -173,24 +104,7 @@ class UtfNormal {
         * @return string a UTF-8 string in normal form KD
         */
        static function toNFKD( $string ) {
-               if ( NORMALIZE_INTL )
-                       return normalizer_normalize( $string, Normalizer::FORM_KD );
-               elseif ( NORMALIZE_ICU )
-                       return utf8_normalize( $string, self::UNORM_NFKD );
-               elseif ( preg_match( '/[\x80-\xff]/', $string ) )
-                       return UtfNormal::NFKD( $string );
-               else
-                       return $string;
-       }
-
-       /**
-        * Load the basic composition data if necessary
-        * @private
-        */
-       static function loadData() {
-               if ( !isset( self::$utfCombiningClass ) ) {
-                       require_once __DIR__ . '/UtfNormalData.inc';
-               }
+               return Validator::toNFKD( $string );
        }
 
        /**
@@ -200,38 +114,7 @@ class UtfNormal {
         * @return bool
         */
        static function quickIsNFC( $string ) {
-               # ASCII is always valid NFC!
-               # If it's pure ASCII, let it through.
-               if ( !preg_match( '/[\x80-\xff]/', $string ) ) return true;
-
-               UtfNormal::loadData();
-               $len = strlen( $string );
-               for ( $i = 0; $i < $len; $i++ ) {
-                       $c = $string[$i];
-                       $n = ord( $c );
-                       if ( $n < 0x80 ) {
-                               continue;
-                       } elseif ( $n >= 0xf0 ) {
-                               $c = substr( $string, $i, 4 );
-                               $i += 3;
-                       } elseif ( $n >= 0xe0 ) {
-                               $c = substr( $string, $i, 3 );
-                               $i += 2;
-                       } elseif ( $n >= 0xc0 ) {
-                               $c = substr( $string, $i, 2 );
-                               $i++;
-                       }
-                       if ( isset( self::$utfCheckNFC[$c] ) ) {
-                               # If it's NO or MAYBE, bail and do the slow check.
-                               return false;
-                       }
-                       if ( isset( self::$utfCombiningClass[$c] ) ) {
-                               # Combining character? We might have to do sorting, at least.
-                               return false;
-                       }
-               }
-
-               return true;
+               return Validator::quickIsNFC( $string );
        }
 
        /**
@@ -241,550 +124,6 @@ class UtfNormal {
         * @return bool
         */
        static function quickIsNFCVerify( &$string ) {
-               # Screen out some characters that eg won't be allowed in XML
-               $string = preg_replace( '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', UTF8_REPLACEMENT, $string );
-
-               # ASCII is always valid NFC!
-               # If we're only ever given plain ASCII, we can avoid the overhead
-               # of initializing the decomposition tables by skipping out early.
-               if ( !preg_match( '/[\x80-\xff]/', $string ) ) return true;
-
-               static $checkit = null, $tailBytes = null, $utfCheckOrCombining = null;
-               if ( !isset( $checkit ) ) {
-                       # Load/build some scary lookup tables...
-                       UtfNormal::loadData();
-
-                       $utfCheckOrCombining = array_merge( self::$utfCheckNFC, self::$utfCombiningClass );
-
-                       # Head bytes for sequences which we should do further validity checks
-                       $checkit = array_flip( array_map( 'chr',
-                               array( 0xc0, 0xc1, 0xe0, 0xed, 0xef,
-                                       0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
-                                       0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff ) ) );
-
-                       # Each UTF-8 head byte is followed by a certain
-                       # number of tail bytes.
-                       $tailBytes = array();
-                       for ( $n = 0; $n < 256; $n++ ) {
-                               if ( $n < 0xc0 ) {
-                                       $remaining = 0;
-                               } elseif ( $n < 0xe0 ) {
-                                       $remaining = 1;
-                               } elseif ( $n < 0xf0 ) {
-                                       $remaining = 2;
-                               } elseif ( $n < 0xf8 ) {
-                                       $remaining = 3;
-                               } elseif ( $n < 0xfc ) {
-                                       $remaining = 4;
-                               } elseif ( $n < 0xfe ) {
-                                       $remaining = 5;
-                               } else {
-                                       $remaining = 0;
-                               }
-                               $tailBytes[chr( $n )] = $remaining;
-                       }
-               }
-
-               # Chop the text into pure-ASCII and non-ASCII areas;
-               # large ASCII parts can be handled much more quickly.
-               # Don't chop up Unicode areas for punctuation, though,
-               # that wastes energy.
-               $matches = array();
-               preg_match_all(
-                       '/([\x00-\x7f]+|[\x80-\xff][\x00-\x40\x5b-\x5f\x7b-\xff]*)/',
-                       $string, $matches );
-
-               $looksNormal = true;
-               $base = 0;
-               $replace = array();
-               foreach ( $matches[1] as $str ) {
-                       $chunk = strlen( $str );
-
-                       if ( $str[0] < "\x80" ) {
-                               # ASCII chunk: guaranteed to be valid UTF-8
-                               # and in normal form C, so skip over it.
-                               $base += $chunk;
-                               continue;
-                       }
-
-                       # We'll have to examine the chunk byte by byte to ensure
-                       # that it consists of valid UTF-8 sequences, and to see
-                       # if any of them might not be normalized.
-                       #
-                       # Since PHP is not the fastest language on earth, some of
-                       # this code is a little ugly with inner loop optimizations.
-
-                       $head = '';
-                       $len = $chunk + 1; # Counting down is faster. I'm *so* sorry.
-
-                       for ( $i = -1; --$len; ) {
-                               $remaining = $tailBytes[$c = $str[++$i]];
-                               if ( $remaining ) {
-                                       # UTF-8 head byte!
-                                       $sequence = $head = $c;
-                                       do {
-                                               # Look for the defined number of tail bytes...
-                                               if ( --$len && ( $c = $str[++$i] ) >= "\x80" && $c < "\xc0" ) {
-                                                       # Legal tail bytes are nice.
-                                                       $sequence .= $c;
-                                               } else {
-                                                       if ( 0 == $len ) {
-                                                               # Premature end of string!
-                                                               # Drop a replacement character into output to
-                                                               # represent the invalid UTF-8 sequence.
-                                                               $replace[] = array( UTF8_REPLACEMENT,
-                                                                       $base + $i + 1 - strlen( $sequence ),
-                                                                       strlen( $sequence ) );
-                                                               break 2;
-                                                       } else {
-                                                               # Illegal tail byte; abandon the sequence.
-                                                               $replace[] = array( UTF8_REPLACEMENT,
-                                                                       $base + $i - strlen( $sequence ),
-                                                                       strlen( $sequence ) );
-                                                               # Back up and reprocess this byte; it may itself
-                                                               # be a legal ASCII or UTF-8 sequence head.
-                                                               --$i;
-                                                               ++$len;
-                                                               continue 2;
-                                                       }
-                                               }
-                                       } while ( --$remaining );
-
-                                       if ( isset( $checkit[$head] ) ) {
-                                               # Do some more detailed validity checks, for
-                                               # invalid characters and illegal sequences.
-                                               if ( $head == "\xed" ) {
-                                                       # 0xed is relatively frequent in Korean, which
-                                                       # abuts the surrogate area, so we're doing
-                                                       # this check separately to speed things up.
-
-                                                       if ( $sequence >= UTF8_SURROGATE_FIRST ) {
-                                                               # Surrogates are legal only in UTF-16 code.
-                                                               # They are totally forbidden here in UTF-8
-                                                               # utopia.
-                                                               $replace[] = array( UTF8_REPLACEMENT,
-                                                                       $base + $i + 1 - strlen( $sequence ),
-                                                                       strlen( $sequence ) );
-                                                               $head = '';
-                                                               continue;
-                                                       }
-                                               } else {
-                                                       # Slower, but rarer checks...
-                                                       $n = ord( $head );
-                                                       if (
-                                                               # "Overlong sequences" are those that are syntactically
-                                                               # correct but use more UTF-8 bytes than are necessary to
-                                                               # encode a character. Naïve string comparisons can be
-                                                               # tricked into failing to see a match for an ASCII
-                                                               # character, for instance, which can be a security hole
-                                                               # if blacklist checks are being used.
-                                                               ( $n < 0xc2 && $sequence <= UTF8_OVERLONG_A )
-                                                               || ( $n == 0xe0 && $sequence <= UTF8_OVERLONG_B )
-                                                               || ( $n == 0xf0 && $sequence <= UTF8_OVERLONG_C )
-
-                                                               # U+FFFE and U+FFFF are explicitly forbidden in Unicode.
-                                                               || ( $n == 0xef &&
-                                                                       ( $sequence == UTF8_FFFE )
-                                                                       || ( $sequence == UTF8_FFFF ) )
-
-                                                               # Unicode has been limited to 21 bits; longer
-                                                               # sequences are not allowed.
-                                                               || ( $n >= 0xf0 && $sequence > UTF8_MAX )
-                                                       ) {
-
-                                                               $replace[] = array( UTF8_REPLACEMENT,
-                                                                       $base + $i + 1 - strlen( $sequence ),
-                                                                       strlen( $sequence ) );
-                                                               $head = '';
-                                                               continue;
-                                                       }
-                                               }
-                                       }
-
-                                       if ( isset( $utfCheckOrCombining[$sequence] ) ) {
-                                               # If it's NO or MAYBE, we'll have to rip
-                                               # the string apart and put it back together.
-                                               # That's going to be mighty slow.
-                                               $looksNormal = false;
-                                       }
-
-                                       # The sequence is legal!
-                                       $head = '';
-                               } elseif ( $c < "\x80" ) {
-                                       # ASCII byte.
-                                       $head = '';
-                               } elseif ( $c < "\xc0" ) {
-                                       # Illegal tail bytes
-                                       if ( $head == '' ) {
-                                               # Out of the blue!
-                                               $replace[] = array( UTF8_REPLACEMENT, $base + $i, 1 );
-                                       } else {
-                                               # Don't add if we're continuing a broken sequence;
-                                               # we already put a replacement character when we looked
-                                               # at the broken sequence.
-                                               $replace[] = array( '', $base + $i, 1 );
-                                       }
-                               } else {
-                                       # Miscellaneous freaks.
-                                       $replace[] = array( UTF8_REPLACEMENT, $base + $i, 1 );
-                                       $head = '';
-                               }
-                       }
-                       $base += $chunk;
-               }
-               if ( count( $replace ) ) {
-                       # There were illegal UTF-8 sequences we need to fix up.
-                       $out = '';
-                       $last = 0;
-                       foreach ( $replace as $rep ) {
-                               list( $replacement, $start, $length ) = $rep;
-                               if ( $last < $start ) {
-                                       $out .= substr( $string, $last, $start - $last );
-                               }
-                               $out .= $replacement;
-                               $last = $start + $length;
-                       }
-                       if ( $last < strlen( $string ) ) {
-                               $out .= substr( $string, $last );
-                       }
-                       $string = $out;
-               }
-
-               return $looksNormal;
-       }
-
-       # These take a string and run the normalization on them, without
-       # checking for validity or any optimization etc. Input must be
-       # VALID UTF-8!
-       /**
-        * @param $string string
-        * @return string
-        * @private
-        */
-       static function NFC( $string ) {
-               return UtfNormal::fastCompose( UtfNormal::NFD( $string ) );
-       }
-
-       /**
-        * @param $string string
-        * @return string
-        * @private
-        */
-       static function NFD( $string ) {
-               UtfNormal::loadData();
-
-               return UtfNormal::fastCombiningSort(
-                       UtfNormal::fastDecompose( $string, self::$utfCanonicalDecomp ) );
-       }
-
-       /**
-        * @param $string string
-        * @return string
-        * @private
-        */
-       static function NFKC( $string ) {
-               return UtfNormal::fastCompose( UtfNormal::NFKD( $string ) );
-       }
-
-       /**
-        * @param $string string
-        * @return string
-        * @private
-        */
-       static function NFKD( $string ) {
-               if ( !isset( self::$utfCompatibilityDecomp ) ) {
-                       require_once 'UtfNormalDataK.inc';
-               }
-
-               return self::fastCombiningSort(
-                       self::fastDecompose( $string, self::$utfCompatibilityDecomp ) );
-       }
-
-       /**
-        * Perform decomposition of a UTF-8 string into either D or KD form
-        * (depending on which decomposition map is passed to us).
-        * Input is assumed to be *valid* UTF-8. Invalid code will break.
-        * @private
-        * @param string $string valid UTF-8 string
-        * @param array $map hash of expanded decomposition map
-        * @return string a UTF-8 string decomposed, not yet normalized (needs sorting)
-        */
-       static function fastDecompose( $string, $map ) {
-               UtfNormal::loadData();
-               $len = strlen( $string );
-               $out = '';
-               for ( $i = 0; $i < $len; $i++ ) {
-                       $c = $string[$i];
-                       $n = ord( $c );
-                       if ( $n < 0x80 ) {
-                               # ASCII chars never decompose
-                               # THEY ARE IMMORTAL
-                               $out .= $c;
-                               continue;
-                       } elseif ( $n >= 0xf0 ) {
-                               $c = substr( $string, $i, 4 );
-                               $i += 3;
-                       } elseif ( $n >= 0xe0 ) {
-                               $c = substr( $string, $i, 3 );
-                               $i += 2;
-                       } elseif ( $n >= 0xc0 ) {
-                               $c = substr( $string, $i, 2 );
-                               $i++;
-                       }
-                       if ( isset( $map[$c] ) ) {
-                               $out .= $map[$c];
-                               continue;
-                       } else {
-                               if ( $c >= UTF8_HANGUL_FIRST && $c <= UTF8_HANGUL_LAST ) {
-                                       # Decompose a hangul syllable into jamo;
-                                       # hardcoded for three-byte UTF-8 sequence.
-                                       # A lookup table would be slightly faster,
-                                       # but adds a lot of memory & disk needs.
-                                       #
-                                       $index = ( ( ord( $c[0] ) & 0x0f ) << 12
-                                                       | ( ord( $c[1] ) & 0x3f ) << 6
-                                                       | ( ord( $c[2] ) & 0x3f ) )
-                                               - UNICODE_HANGUL_FIRST;
-                                       $l = intval( $index / UNICODE_HANGUL_NCOUNT );
-                                       $v = intval( ( $index % UNICODE_HANGUL_NCOUNT ) / UNICODE_HANGUL_TCOUNT );
-                                       $t = $index % UNICODE_HANGUL_TCOUNT;
-                                       $out .= "\xe1\x84" . chr( 0x80 + $l ) . "\xe1\x85" . chr( 0xa1 + $v );
-                                       if ( $t >= 25 ) {
-                                               $out .= "\xe1\x87" . chr( 0x80 + $t - 25 );
-                                       } elseif ( $t ) {
-                                               $out .= "\xe1\x86" . chr( 0xa7 + $t );
-                                       }
-                                       continue;
-                               }
-                       }
-                       $out .= $c;
-               }
-
-               return $out;
-       }
-
-       /**
-        * Sorts combining characters into canonical order. This is the
-        * final step in creating decomposed normal forms D and KD.
-        * @private
-        * @param string $string a valid, decomposed UTF-8 string. Input is not validated.
-        * @return string a UTF-8 string with combining characters sorted in canonical order
-        */
-       static function fastCombiningSort( $string ) {
-               UtfNormal::loadData();
-               $len = strlen( $string );
-               $out = '';
-               $combiners = array();
-               $lastClass = -1;
-               for ( $i = 0; $i < $len; $i++ ) {
-                       $c = $string[$i];
-                       $n = ord( $c );
-                       if ( $n >= 0x80 ) {
-                               if ( $n >= 0xf0 ) {
-                                       $c = substr( $string, $i, 4 );
-                                       $i += 3;
-                               } elseif ( $n >= 0xe0 ) {
-                                       $c = substr( $string, $i, 3 );
-                                       $i += 2;
-                               } elseif ( $n >= 0xc0 ) {
-                                       $c = substr( $string, $i, 2 );
-                                       $i++;
-                               }
-                               if ( isset( self::$utfCombiningClass[$c] ) ) {
-                                       $lastClass = self::$utfCombiningClass[$c];
-                                       if ( isset( $combiners[$lastClass] ) ) {
-                                               $combiners[$lastClass] .= $c;
-                                       } else {
-                                               $combiners[$lastClass] = $c;
-                                       }
-                                       continue;
-                               }
-                       }
-                       if ( $lastClass ) {
-                               ksort( $combiners );
-                               $out .= implode( '', $combiners );
-                               $combiners = array();
-                       }
-                       $out .= $c;
-                       $lastClass = 0;
-               }
-               if ( $lastClass ) {
-                       ksort( $combiners );
-                       $out .= implode( '', $combiners );
-               }
-
-               return $out;
-       }
-
-       /**
-        * Produces canonically composed sequences, i.e. normal form C or KC.
-        *
-        * @private
-        * @param string $string a valid UTF-8 string in sorted normal form D or KD.
-        *   Input is not validated.
-        * @return string a UTF-8 string with canonical precomposed characters used
-        *   where possible.
-        */
-       static function fastCompose( $string ) {
-               UtfNormal::loadData();
-               $len = strlen( $string );
-               $out = '';
-               $lastClass = -1;
-               $lastHangul = 0;
-               $startChar = '';
-               $combining = '';
-               $x1 = ord( substr( UTF8_HANGUL_VBASE, 0, 1 ) );
-               $x2 = ord( substr( UTF8_HANGUL_TEND, 0, 1 ) );
-               for ( $i = 0; $i < $len; $i++ ) {
-                       $c = $string[$i];
-                       $n = ord( $c );
-                       if ( $n < 0x80 ) {
-                               # No combining characters here...
-                               $out .= $startChar;
-                               $out .= $combining;
-                               $startChar = $c;
-                               $combining = '';
-                               $lastClass = 0;
-                               continue;
-                       } elseif ( $n >= 0xf0 ) {
-                               $c = substr( $string, $i, 4 );
-                               $i += 3;
-                       } elseif ( $n >= 0xe0 ) {
-                               $c = substr( $string, $i, 3 );
-                               $i += 2;
-                       } elseif ( $n >= 0xc0 ) {
-                               $c = substr( $string, $i, 2 );
-                               $i++;
-                       }
-                       $pair = $startChar . $c;
-                       if ( $n > 0x80 ) {
-                               if ( isset( self::$utfCombiningClass[$c] ) ) {
-                                       # A combining char; see what we can do with it
-                                       $class = self::$utfCombiningClass[$c];
-                                       if ( !empty( $startChar ) &&
-                                               $lastClass < $class &&
-                                               $class > 0 &&
-                                               isset( self::$utfCanonicalComp[$pair] )
-                                       ) {
-                                               $startChar = self::$utfCanonicalComp[$pair];
-                                               $class = 0;
-                                       } else {
-                                               $combining .= $c;
-                                       }
-                                       $lastClass = $class;
-                                       $lastHangul = 0;
-                                       continue;
-                               }
-                       }
-                       # New start char
-                       if ( $lastClass == 0 ) {
-                               if ( isset( self::$utfCanonicalComp[$pair] ) ) {
-                                       $startChar = self::$utfCanonicalComp[$pair];
-                                       $lastHangul = 0;
-                                       continue;
-                               }
-                               if ( $n >= $x1 && $n <= $x2 ) {
-                                       # WARNING: Hangul code is painfully slow.
-                                       # I apologize for this ugly, ugly code; however
-                                       # performance is even more teh suck if we call
-                                       # out to nice clean functions. Lookup tables are
-                                       # marginally faster, but require a lot of space.
-                                       #
-                                       if ( $c >= UTF8_HANGUL_VBASE &&
-                                               $c <= UTF8_HANGUL_VEND &&
-                                               $startChar >= UTF8_HANGUL_LBASE &&
-                                               $startChar <= UTF8_HANGUL_LEND
-                                       ) {
-                                               #
-                                               #$lIndex = utf8ToCodepoint( $startChar ) - UNICODE_HANGUL_LBASE;
-                                               #$vIndex = utf8ToCodepoint( $c ) - UNICODE_HANGUL_VBASE;
-                                               $lIndex = ord( $startChar[2] ) - 0x80;
-                                               $vIndex = ord( $c[2] ) - 0xa1;
-
-                                               $hangulPoint = UNICODE_HANGUL_FIRST +
-                                                       UNICODE_HANGUL_TCOUNT *
-                                                       ( UNICODE_HANGUL_VCOUNT * $lIndex + $vIndex );
-
-                                               # Hardcode the limited-range UTF-8 conversion:
-                                               $startChar = chr( $hangulPoint >> 12 & 0x0f | 0xe0 ) .
-                                                       chr( $hangulPoint >> 6 & 0x3f | 0x80 ) .
-                                                       chr( $hangulPoint & 0x3f | 0x80 );
-                                               $lastHangul = 0;
-                                               continue;
-                                       } elseif ( $c >= UTF8_HANGUL_TBASE &&
-                                               $c <= UTF8_HANGUL_TEND &&
-                                               $startChar >= UTF8_HANGUL_FIRST &&
-                                               $startChar <= UTF8_HANGUL_LAST &&
-                                               !$lastHangul
-                                       ) {
-                                               # $tIndex = utf8ToCodepoint( $c ) - UNICODE_HANGUL_TBASE;
-                                               $tIndex = ord( $c[2] ) - 0xa7;
-                                               if ( $tIndex < 0 ) $tIndex = ord( $c[2] ) - 0x80 + ( 0x11c0 - 0x11a7 );
-
-                                               # Increment the code point by $tIndex, without
-                                               # the function overhead of decoding and recoding UTF-8
-                                               #
-                                               $tail = ord( $startChar[2] ) + $tIndex;
-                                               if ( $tail > 0xbf ) {
-                                                       $tail -= 0x40;
-                                                       $mid = ord( $startChar[1] ) + 1;
-                                                       if ( $mid > 0xbf ) {
-                                                               $startChar[0] = chr( ord( $startChar[0] ) + 1 );
-                                                               $mid -= 0x40;
-                                                       }
-                                                       $startChar[1] = chr( $mid );
-                                               }
-                                               $startChar[2] = chr( $tail );
-
-                                               # If there's another jamo char after this, *don't* try to merge it.
-                                               $lastHangul = 1;
-                                               continue;
-                                       }
-                               }
-                       }
-                       $out .= $startChar;
-                       $out .= $combining;
-                       $startChar = $c;
-                       $combining = '';
-                       $lastClass = 0;
-                       $lastHangul = 0;
-               }
-               $out .= $startChar . $combining;
-
-               return $out;
-       }
-
-       /**
-        * This is just used for the benchmark, comparing how long it takes to
-        * interate through a string without really doing anything of substance.
-        * @param $string string
-        * @return string
-        */
-       static function placebo( $string ) {
-               $len = strlen( $string );
-               $out = '';
-               for ( $i = 0; $i < $len; $i++ ) {
-                       $out .= $string[$i];
-               }
-
-               return $out;
-       }
-
-       /**
-        * Function to replace some characters that we don't want
-        * but most of the native normalize functions keep.
-        *
-        * @param string $string The string
-        * @return String String with the character codes replaced.
-        */
-       private static function replaceForNativeNormalize( $string ) {
-               $string = preg_replace(
-                       '/[\x00-\x08\x0b\x0c\x0e-\x1f]/',
-                       UTF8_REPLACEMENT,
-                       $string );
-               $string = str_replace( UTF8_FFFE, UTF8_REPLACEMENT, $string );
-               $string = str_replace( UTF8_FFFF, UTF8_REPLACEMENT, $string );
-
-               return $string;
+               return Validator::quickIsNFCVerify( $string );
        }
 }
diff --git a/includes/libs/normal/UtfNormalBench.php b/includes/libs/normal/UtfNormalBench.php
deleted file mode 100644 (file)
index bd2bc4e..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-/**
- * Approximate benchmark for some basic operations.
- *
- * 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
- */
-
-if ( PHP_SAPI != 'cli' ) {
-       die( "Run me from the command line please.\n" );
-}
-
-if ( isset( $_SERVER['argv'] ) && in_array( '--icu', $_SERVER['argv'] ) ) {
-       dl( 'php_utfnormal.so' );
-}
-
-require_once 'UtfNormalDefines.php';
-require_once 'UtfNormalUtil.php';
-require_once 'UtfNormal.php';
-
-define( 'BENCH_CYCLES', 5 );
-
-$testfiles = array(
-       'testdata/washington.txt' => 'English text',
-       'testdata/berlin.txt' => 'German text',
-       'testdata/bulgakov.txt' => 'Russian text',
-       'testdata/tokyo.txt' => 'Japanese text',
-       'testdata/young.txt' => 'Korean text'
-);
-$normalizer = new UtfNormal;
-UtfNormal::loadData();
-foreach ( $testfiles as $file => $desc ) {
-       benchmarkTest( $normalizer, $file, $desc );
-}
-
-# -------
-
-function benchmarkTest( &$u, $filename, $desc ) {
-       print "Testing $filename ($desc)...\n";
-       $data = file_get_contents( $filename );
-       $forms = array(
-#              'placebo',
-               'cleanUp',
-               'toNFC',
-#              'toNFKC',
-#              'toNFD', 'toNFKD',
-               'NFC',
-#              'NFKC',
-#              'NFD', 'NFKD',
-               array( 'fastDecompose', 'fastCombiningSort', 'fastCompose' ),
-#              'quickIsNFC', 'quickIsNFCVerify',
-       );
-
-       foreach ( $forms as $form ) {
-               if ( is_array( $form ) ) {
-                       $str = $data;
-                       foreach ( $form as $step ) {
-                               $str = benchmarkForm( $u, $str, $step );
-                       }
-               } else {
-                       benchmarkForm( $u, $data, $form );
-               }
-       }
-}
-
-function benchmarkForm( &$u, &$data, $form ) {
-       #$start = microtime( true );
-       for ( $i = 0; $i < BENCH_CYCLES; $i++ ) {
-               $start = microtime( true );
-               $out = $u->$form( $data, UtfNormal::$utfCanonicalDecomp );
-               $deltas[] = ( microtime( true ) - $start );
-       }
-       #$delta = (microtime( true ) - $start) / BENCH_CYCLES;
-       sort( $deltas );
-       $delta = $deltas[0]; # Take shortest time
-
-       $rate = intval( strlen( $data ) / $delta );
-       $same = ( 0 == strcmp( $data, $out ) );
-
-       printf( " %20s %6.1fms %12s bytes/s (%s)\n",
-               $form,
-               $delta * 1000.0,
-               number_format( $rate ),
-               ( $same ? 'no change' : 'changed' ) );
-
-       return $out;
-}
diff --git a/includes/libs/normal/UtfNormalData.inc b/includes/libs/normal/UtfNormalData.inc
deleted file mode 100644 (file)
index 5755f6b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * This file was automatically generated -- do not edit!
- * Run UtfNormalGenerate.php to create this file again (make clean && make)
- *
- * @file
- */
-// @codingStandardsIgnoreFile
-
-UtfNormal::$utfCombiningClass = unserialize( 'a:606:{s:2:"̀";i:230;s:2:"́";i:230;s:2:"̂";i:230;s:2:"̃";i:230;s:2:"̄";i:230;s:2:"̅";i:230;s:2:"̆";i:230;s:2:"̇";i:230;s:2:"̈";i:230;s:2:"̉";i:230;s:2:"̊";i:230;s:2:"̋";i:230;s:2:"̌";i:230;s:2:"̍";i:230;s:2:"̎";i:230;s:2:"̏";i:230;s:2:"̐";i:230;s:2:"̑";i:230;s:2:"̒";i:230;s:2:"̓";i:230;s:2:"̔";i:230;s:2:"̕";i:232;s:2:"̖";i:220;s:2:"̗";i:220;s:2:"̘";i:220;s:2:"̙";i:220;s:2:"̚";i:232;s:2:"̛";i:216;s:2:"̜";i:220;s:2:"̝";i:220;s:2:"̞";i:220;s:2:"̟";i:220;s:2:"̠";i:220;s:2:"̡";i:202;s:2:"̢";i:202;s:2:"̣";i:220;s:2:"̤";i:220;s:2:"̥";i:220;s:2:"̦";i:220;s:2:"̧";i:202;s:2:"̨";i:202;s:2:"̩";i:220;s:2:"̪";i:220;s:2:"̫";i:220;s:2:"̬";i:220;s:2:"̭";i:220;s:2:"̮";i:220;s:2:"̯";i:220;s:2:"̰";i:220;s:2:"̱";i:220;s:2:"̲";i:220;s:2:"̳";i:220;s:2:"̴";i:1;s:2:"̵";i:1;s:2:"̶";i:1;s:2:"̷";i:1;s:2:"̸";i:1;s:2:"̹";i:220;s:2:"̺";i:220;s:2:"̻";i:220;s:2:"̼";i:220;s:2:"̽";i:230;s:2:"̾";i:230;s:2:"̿";i:230;s:2:"̀";i:230;s:2:"́";i:230;s:2:"͂";i:230;s:2:"̓";i:230;s:2:"̈́";i:230;s:2:"ͅ";i:240;s:2:"͆";i:230;s:2:"͇";i:220;s:2:"͈";i:220;s:2:"͉";i:220;s:2:"͊";i:230;s:2:"͋";i:230;s:2:"͌";i:230;s:2:"͍";i:220;s:2:"͎";i:220;s:2:"͐";i:230;s:2:"͑";i:230;s:2:"͒";i:230;s:2:"͓";i:220;s:2:"͔";i:220;s:2:"͕";i:220;s:2:"͖";i:220;s:2:"͗";i:230;s:2:"͘";i:232;s:2:"͙";i:220;s:2:"͚";i:220;s:2:"͛";i:230;s:2:"͜";i:233;s:2:"͝";i:234;s:2:"͞";i:234;s:2:"͟";i:233;s:2:"͠";i:234;s:2:"͡";i:234;s:2:"͢";i:233;s:2:"ͣ";i:230;s:2:"ͤ";i:230;s:2:"ͥ";i:230;s:2:"ͦ";i:230;s:2:"ͧ";i:230;s:2:"ͨ";i:230;s:2:"ͩ";i:230;s:2:"ͪ";i:230;s:2:"ͫ";i:230;s:2:"ͬ";i:230;s:2:"ͭ";i:230;s:2:"ͮ";i:230;s:2:"ͯ";i:230;s:2:"҃";i:230;s:2:"҄";i:230;s:2:"҅";i:230;s:2:"҆";i:230;s:2:"҇";i:230;s:2:"֑";i:220;s:2:"֒";i:230;s:2:"֓";i:230;s:2:"֔";i:230;s:2:"֕";i:230;s:2:"֖";i:220;s:2:"֗";i:230;s:2:"֘";i:230;s:2:"֙";i:230;s:2:"֚";i:222;s:2:"֛";i:220;s:2:"֜";i:230;s:2:"֝";i:230;s:2:"֞";i:230;s:2:"֟";i:230;s:2:"֠";i:230;s:2:"֡";i:230;s:2:"֢";i:220;s:2:"֣";i:220;s:2:"֤";i:220;s:2:"֥";i:220;s:2:"֦";i:220;s:2:"֧";i:220;s:2:"֨";i:230;s:2:"֩";i:230;s:2:"֪";i:220;s:2:"֫";i:230;s:2:"֬";i:230;s:2:"֭";i:222;s:2:"֮";i:228;s:2:"֯";i:230;s:2:"ְ";i:10;s:2:"ֱ";i:11;s:2:"ֲ";i:12;s:2:"ֳ";i:13;s:2:"ִ";i:14;s:2:"ֵ";i:15;s:2:"ֶ";i:16;s:2:"ַ";i:17;s:2:"ָ";i:18;s:2:"ֹ";i:19;s:2:"ֺ";i:19;s:2:"ֻ";i:20;s:2:"ּ";i:21;s:2:"ֽ";i:22;s:2:"ֿ";i:23;s:2:"ׁ";i:24;s:2:"ׂ";i:25;s:2:"ׄ";i:230;s:2:"ׅ";i:220;s:2:"ׇ";i:18;s:2:"ؐ";i:230;s:2:"ؑ";i:230;s:2:"ؒ";i:230;s:2:"ؓ";i:230;s:2:"ؔ";i:230;s:2:"ؕ";i:230;s:2:"ؖ";i:230;s:2:"ؗ";i:230;s:2:"ؘ";i:30;s:2:"ؙ";i:31;s:2:"ؚ";i:32;s:2:"ً";i:27;s:2:"ٌ";i:28;s:2:"ٍ";i:29;s:2:"َ";i:30;s:2:"ُ";i:31;s:2:"ِ";i:32;s:2:"ّ";i:33;s:2:"ْ";i:34;s:2:"ٓ";i:230;s:2:"ٔ";i:230;s:2:"ٕ";i:220;s:2:"ٖ";i:220;s:2:"ٗ";i:230;s:2:"٘";i:230;s:2:"ٙ";i:230;s:2:"ٚ";i:230;s:2:"ٛ";i:230;s:2:"ٜ";i:220;s:2:"ٝ";i:230;s:2:"ٞ";i:230;s:2:"ٟ";i:220;s:2:"ٰ";i:35;s:2:"ۖ";i:230;s:2:"ۗ";i:230;s:2:"ۘ";i:230;s:2:"ۙ";i:230;s:2:"ۚ";i:230;s:2:"ۛ";i:230;s:2:"ۜ";i:230;s:2:"۟";i:230;s:2:"۠";i:230;s:2:"ۡ";i:230;s:2:"ۢ";i:230;s:2:"ۣ";i:220;s:2:"ۤ";i:230;s:2:"ۧ";i:230;s:2:"ۨ";i:230;s:2:"۪";i:220;s:2:"۫";i:230;s:2:"۬";i:230;s:2:"ۭ";i:220;s:2:"ܑ";i:36;s:2:"ܰ";i:230;s:2:"ܱ";i:220;s:2:"ܲ";i:230;s:2:"ܳ";i:230;s:2:"ܴ";i:220;s:2:"ܵ";i:230;s:2:"ܶ";i:230;s:2:"ܷ";i:220;s:2:"ܸ";i:220;s:2:"ܹ";i:220;s:2:"ܺ";i:230;s:2:"ܻ";i:220;s:2:"ܼ";i:220;s:2:"ܽ";i:230;s:2:"ܾ";i:220;s:2:"ܿ";i:230;s:2:"݀";i:230;s:2:"݁";i:230;s:2:"݂";i:220;s:2:"݃";i:230;s:2:"݄";i:220;s:2:"݅";i:230;s:2:"݆";i:220;s:2:"݇";i:230;s:2:"݈";i:220;s:2:"݉";i:230;s:2:"݊";i:230;s:2:"߫";i:230;s:2:"߬";i:230;s:2:"߭";i:230;s:2:"߮";i:230;s:2:"߯";i:230;s:2:"߰";i:230;s:2:"߱";i:230;s:2:"߲";i:220;s:2:"߳";i:230;s:3:"ࠖ";i:230;s:3:"ࠗ";i:230;s:3:"࠘";i:230;s:3:"࠙";i:230;s:3:"ࠛ";i:230;s:3:"ࠜ";i:230;s:3:"ࠝ";i:230;s:3:"ࠞ";i:230;s:3:"ࠟ";i:230;s:3:"ࠠ";i:230;s:3:"ࠡ";i:230;s:3:"ࠢ";i:230;s:3:"ࠣ";i:230;s:3:"ࠥ";i:230;s:3:"ࠦ";i:230;s:3:"ࠧ";i:230;s:3:"ࠩ";i:230;s:3:"ࠪ";i:230;s:3:"ࠫ";i:230;s:3:"ࠬ";i:230;s:3:"࠭";i:230;s:3:"࡙";i:220;s:3:"࡚";i:220;s:3:"࡛";i:220;s:3:"़";i:7;s:3:"्";i:9;s:3:"॑";i:230;s:3:"॒";i:220;s:3:"॓";i:230;s:3:"॔";i:230;s:3:"়";i:7;s:3:"্";i:9;s:3:"਼";i:7;s:3:"੍";i:9;s:3:"઼";i:7;s:3:"્";i:9;s:3:"଼";i:7;s:3:"୍";i:9;s:3:"்";i:9;s:3:"్";i:9;s:3:"ౕ";i:84;s:3:"ౖ";i:91;s:3:"಼";i:7;s:3:"್";i:9;s:3:"്";i:9;s:3:"්";i:9;s:3:"ุ";i:103;s:3:"ู";i:103;s:3:"ฺ";i:9;s:3:"่";i:107;s:3:"้";i:107;s:3:"๊";i:107;s:3:"๋";i:107;s:3:"ຸ";i:118;s:3:"ູ";i:118;s:3:"່";i:122;s:3:"້";i:122;s:3:"໊";i:122;s:3:"໋";i:122;s:3:"༘";i:220;s:3:"༙";i:220;s:3:"༵";i:220;s:3:"༷";i:220;s:3:"༹";i:216;s:3:"ཱ";i:129;s:3:"ི";i:130;s:3:"ུ";i:132;s:3:"ེ";i:130;s:3:"ཻ";i:130;s:3:"ོ";i:130;s:3:"ཽ";i:130;s:3:"ྀ";i:130;s:3:"ྂ";i:230;s:3:"ྃ";i:230;s:3:"྄";i:9;s:3:"྆";i:230;s:3:"྇";i:230;s:3:"࿆";i:220;s:3:"့";i:7;s:3:"္";i:9;s:3:"်";i:9;s:3:"ႍ";i:220;s:3:"፝";i:230;s:3:"፞";i:230;s:3:"፟";i:230;s:3:"᜔";i:9;s:3:"᜴";i:9;s:3:"្";i:9;s:3:"៝";i:230;s:3:"ᢩ";i:228;s:3:"᤹";i:222;s:3:"᤺";i:230;s:3:"᤻";i:220;s:3:"ᨗ";i:230;s:3:"ᨘ";i:220;s:3:"᩠";i:9;s:3:"᩵";i:230;s:3:"᩶";i:230;s:3:"᩷";i:230;s:3:"᩸";i:230;s:3:"᩹";i:230;s:3:"᩺";i:230;s:3:"᩻";i:230;s:3:"᩼";i:230;s:3:"᩿";i:220;s:3:"᬴";i:7;s:3:"᭄";i:9;s:3:"᭫";i:230;s:3:"᭬";i:220;s:3:"᭭";i:230;s:3:"᭮";i:230;s:3:"᭯";i:230;s:3:"᭰";i:230;s:3:"᭱";i:230;s:3:"᭲";i:230;s:3:"᭳";i:230;s:3:"᮪";i:9;s:3:"᯦";i:7;s:3:"᯲";i:9;s:3:"᯳";i:9;s:3:"᰷";i:7;s:3:"᳐";i:230;s:3:"᳑";i:230;s:3:"᳒";i:230;s:3:"᳔";i:1;s:3:"᳕";i:220;s:3:"᳖";i:220;s:3:"᳗";i:220;s:3:"᳘";i:220;s:3:"᳙";i:220;s:3:"᳚";i:230;s:3:"᳛";i:230;s:3:"᳜";i:220;s:3:"᳝";i:220;s:3:"᳞";i:220;s:3:"᳟";i:220;s:3:"᳠";i:230;s:3:"᳢";i:1;s:3:"᳣";i:1;s:3:"᳤";i:1;s:3:"᳥";i:1;s:3:"᳦";i:1;s:3:"᳧";i:1;s:3:"᳨";i:1;s:3:"᳭";i:220;s:3:"᷀";i:230;s:3:"᷁";i:230;s:3:"᷂";i:220;s:3:"᷃";i:230;s:3:"᷄";i:230;s:3:"᷅";i:230;s:3:"᷆";i:230;s:3:"᷇";i:230;s:3:"᷈";i:230;s:3:"᷉";i:230;s:3:"᷊";i:220;s:3:"᷋";i:230;s:3:"᷌";i:230;s:3:"᷍";i:234;s:3:"᷎";i:214;s:3:"᷏";i:220;s:3:"᷐";i:202;s:3:"᷑";i:230;s:3:"᷒";i:230;s:3:"ᷓ";i:230;s:3:"ᷔ";i:230;s:3:"ᷕ";i:230;s:3:"ᷖ";i:230;s:3:"ᷗ";i:230;s:3:"ᷘ";i:230;s:3:"ᷙ";i:230;s:3:"ᷚ";i:230;s:3:"ᷛ";i:230;s:3:"ᷜ";i:230;s:3:"ᷝ";i:230;s:3:"ᷞ";i:230;s:3:"ᷟ";i:230;s:3:"ᷠ";i:230;s:3:"ᷡ";i:230;s:3:"ᷢ";i:230;s:3:"ᷣ";i:230;s:3:"ᷤ";i:230;s:3:"ᷥ";i:230;s:3:"ᷦ";i:230;s:3:"᷼";i:233;s:3:"᷽";i:220;s:3:"᷾";i:230;s:3:"᷿";i:220;s:3:"⃐";i:230;s:3:"⃑";i:230;s:3:"⃒";i:1;s:3:"⃓";i:1;s:3:"⃔";i:230;s:3:"⃕";i:230;s:3:"⃖";i:230;s:3:"⃗";i:230;s:3:"⃘";i:1;s:3:"⃙";i:1;s:3:"⃚";i:1;s:3:"⃛";i:230;s:3:"⃜";i:230;s:3:"⃡";i:230;s:3:"⃥";i:1;s:3:"⃦";i:1;s:3:"⃧";i:230;s:3:"⃨";i:220;s:3:"⃩";i:230;s:3:"⃪";i:1;s:3:"⃫";i:1;s:3:"⃬";i:220;s:3:"⃭";i:220;s:3:"⃮";i:220;s:3:"⃯";i:220;s:3:"⃰";i:230;s:3:"⳯";i:230;s:3:"⳰";i:230;s:3:"⳱";i:230;s:3:"⵿";i:9;s:3:"ⷠ";i:230;s:3:"ⷡ";i:230;s:3:"ⷢ";i:230;s:3:"ⷣ";i:230;s:3:"ⷤ";i:230;s:3:"ⷥ";i:230;s:3:"ⷦ";i:230;s:3:"ⷧ";i:230;s:3:"ⷨ";i:230;s:3:"ⷩ";i:230;s:3:"ⷪ";i:230;s:3:"ⷫ";i:230;s:3:"ⷬ";i:230;s:3:"ⷭ";i:230;s:3:"ⷮ";i:230;s:3:"ⷯ";i:230;s:3:"ⷰ";i:230;s:3:"ⷱ";i:230;s:3:"ⷲ";i:230;s:3:"ⷳ";i:230;s:3:"ⷴ";i:230;s:3:"ⷵ";i:230;s:3:"ⷶ";i:230;s:3:"ⷷ";i:230;s:3:"ⷸ";i:230;s:3:"ⷹ";i:230;s:3:"ⷺ";i:230;s:3:"ⷻ";i:230;s:3:"ⷼ";i:230;s:3:"ⷽ";i:230;s:3:"ⷾ";i:230;s:3:"ⷿ";i:230;s:3:"〪";i:218;s:3:"〫";i:228;s:3:"〬";i:232;s:3:"〭";i:222;s:3:"〮";i:224;s:3:"〯";i:224;s:3:"゙";i:8;s:3:"゚";i:8;s:3:"꙯";i:230;s:3:"꙼";i:230;s:3:"꙽";i:230;s:3:"꛰";i:230;s:3:"꛱";i:230;s:3:"꠆";i:9;s:3:"꣄";i:9;s:3:"꣠";i:230;s:3:"꣡";i:230;s:3:"꣢";i:230;s:3:"꣣";i:230;s:3:"꣤";i:230;s:3:"꣥";i:230;s:3:"꣦";i:230;s:3:"꣧";i:230;s:3:"꣨";i:230;s:3:"꣩";i:230;s:3:"꣪";i:230;s:3:"꣫";i:230;s:3:"꣬";i:230;s:3:"꣭";i:230;s:3:"꣮";i:230;s:3:"꣯";i:230;s:3:"꣰";i:230;s:3:"꣱";i:230;s:3:"꤫";i:220;s:3:"꤬";i:220;s:3:"꤭";i:220;s:3:"꥓";i:9;s:3:"꦳";i:7;s:3:"꧀";i:9;s:3:"ꪰ";i:230;s:3:"ꪲ";i:230;s:3:"ꪳ";i:230;s:3:"ꪴ";i:220;s:3:"ꪷ";i:230;s:3:"ꪸ";i:230;s:3:"ꪾ";i:230;s:3:"꪿";i:230;s:3:"꫁";i:230;s:3:"꯭";i:9;s:3:"ﬞ";i:26;s:3:"︠";i:230;s:3:"︡";i:230;s:3:"︢";i:230;s:3:"︣";i:230;s:3:"︤";i:230;s:3:"︥";i:230;s:3:"︦";i:230;s:4:"𐇽";i:220;s:4:"𐨍";i:220;s:4:"𐨏";i:230;s:4:"𐨸";i:230;s:4:"𐨹";i:1;s:4:"𐨺";i:220;s:4:"𐨿";i:9;s:4:"𑁆";i:9;s:4:"𑂹";i:9;s:4:"𑂺";i:7;s:4:"𝅥";i:216;s:4:"𝅦";i:216;s:4:"𝅧";i:1;s:4:"𝅨";i:1;s:4:"𝅩";i:1;s:4:"𝅭";i:226;s:4:"𝅮";i:216;s:4:"𝅯";i:216;s:4:"𝅰";i:216;s:4:"𝅱";i:216;s:4:"𝅲";i:216;s:4:"𝅻";i:220;s:4:"𝅼";i:220;s:4:"𝅽";i:220;s:4:"𝅾";i:220;s:4:"𝅿";i:220;s:4:"𝆀";i:220;s:4:"𝆁";i:220;s:4:"𝆂";i:220;s:4:"𝆅";i:230;s:4:"𝆆";i:230;s:4:"𝆇";i:230;s:4:"𝆈";i:230;s:4:"𝆉";i:230;s:4:"𝆊";i:220;s:4:"𝆋";i:220;s:4:"𝆪";i:230;s:4:"𝆫";i:230;s:4:"𝆬";i:230;s:4:"𝆭";i:230;s:4:"𝉂";i:230;s:4:"𝉃";i:230;s:4:"𝉄";i:230;}' );
-UtfNormal::$utfCanonicalComp = unserialize( 'a:1868:{s:3:"À";s:2:"À";s:3:"Á";s:2:"Á";s:3:"Â";s:2:"Â";s:3:"Ã";s:2:"Ã";s:3:"Ä";s:2:"Ä";s:3:"Å";s:2:"Å";s:3:"Ç";s:2:"Ç";s:3:"È";s:2:"È";s:3:"É";s:2:"É";s:3:"Ê";s:2:"Ê";s:3:"Ë";s:2:"Ë";s:3:"Ì";s:2:"Ì";s:3:"Í";s:2:"Í";s:3:"Î";s:2:"Î";s:3:"Ï";s:2:"Ï";s:3:"Ñ";s:2:"Ñ";s:3:"Ò";s:2:"Ò";s:3:"Ó";s:2:"Ó";s:3:"Ô";s:2:"Ô";s:3:"Õ";s:2:"Õ";s:3:"Ö";s:2:"Ö";s:3:"Ù";s:2:"Ù";s:3:"Ú";s:2:"Ú";s:3:"Û";s:2:"Û";s:3:"Ü";s:2:"Ü";s:3:"Ý";s:2:"Ý";s:3:"à";s:2:"à";s:3:"á";s:2:"á";s:3:"â";s:2:"â";s:3:"ã";s:2:"ã";s:3:"ä";s:2:"ä";s:3:"å";s:2:"å";s:3:"ç";s:2:"ç";s:3:"è";s:2:"è";s:3:"é";s:2:"é";s:3:"ê";s:2:"ê";s:3:"ë";s:2:"ë";s:3:"ì";s:2:"ì";s:3:"í";s:2:"í";s:3:"î";s:2:"î";s:3:"ï";s:2:"ï";s:3:"ñ";s:2:"ñ";s:3:"ò";s:2:"ò";s:3:"ó";s:2:"ó";s:3:"ô";s:2:"ô";s:3:"õ";s:2:"õ";s:3:"ö";s:2:"ö";s:3:"ù";s:2:"ù";s:3:"ú";s:2:"ú";s:3:"û";s:2:"û";s:3:"ü";s:2:"ü";s:3:"ý";s:2:"ý";s:3:"ÿ";s:2:"ÿ";s:3:"Ā";s:2:"Ā";s:3:"ā";s:2:"ā";s:3:"Ă";s:2:"Ă";s:3:"ă";s:2:"ă";s:3:"Ą";s:2:"Ą";s:3:"ą";s:2:"ą";s:3:"Ć";s:2:"Ć";s:3:"ć";s:2:"ć";s:3:"Ĉ";s:2:"Ĉ";s:3:"ĉ";s:2:"ĉ";s:3:"Ċ";s:2:"Ċ";s:3:"ċ";s:2:"ċ";s:3:"Č";s:2:"Č";s:3:"č";s:2:"č";s:3:"Ď";s:2:"Ď";s:3:"ď";s:2:"ď";s:3:"Ē";s:2:"Ē";s:3:"ē";s:2:"ē";s:3:"Ĕ";s:2:"Ĕ";s:3:"ĕ";s:2:"ĕ";s:3:"Ė";s:2:"Ė";s:3:"ė";s:2:"ė";s:3:"Ę";s:2:"Ę";s:3:"ę";s:2:"ę";s:3:"Ě";s:2:"Ě";s:3:"ě";s:2:"ě";s:3:"Ĝ";s:2:"Ĝ";s:3:"ĝ";s:2:"ĝ";s:3:"Ğ";s:2:"Ğ";s:3:"ğ";s:2:"ğ";s:3:"Ġ";s:2:"Ġ";s:3:"ġ";s:2:"ġ";s:3:"Ģ";s:2:"Ģ";s:3:"ģ";s:2:"ģ";s:3:"Ĥ";s:2:"Ĥ";s:3:"ĥ";s:2:"ĥ";s:3:"Ĩ";s:2:"Ĩ";s:3:"ĩ";s:2:"ĩ";s:3:"Ī";s:2:"Ī";s:3:"ī";s:2:"ī";s:3:"Ĭ";s:2:"Ĭ";s:3:"ĭ";s:2:"ĭ";s:3:"Į";s:2:"Į";s:3:"į";s:2:"į";s:3:"İ";s:2:"İ";s:3:"Ĵ";s:2:"Ĵ";s:3:"ĵ";s:2:"ĵ";s:3:"Ķ";s:2:"Ķ";s:3:"ķ";s:2:"ķ";s:3:"Ĺ";s:2:"Ĺ";s:3:"ĺ";s:2:"ĺ";s:3:"Ļ";s:2:"Ļ";s:3:"ļ";s:2:"ļ";s:3:"Ľ";s:2:"Ľ";s:3:"ľ";s:2:"ľ";s:3:"Ń";s:2:"Ń";s:3:"ń";s:2:"ń";s:3:"Ņ";s:2:"Ņ";s:3:"ņ";s:2:"ņ";s:3:"Ň";s:2:"Ň";s:3:"ň";s:2:"ň";s:3:"Ō";s:2:"Ō";s:3:"ō";s:2:"ō";s:3:"Ŏ";s:2:"Ŏ";s:3:"ŏ";s:2:"ŏ";s:3:"Ő";s:2:"Ő";s:3:"ő";s:2:"ő";s:3:"Ŕ";s:2:"Ŕ";s:3:"ŕ";s:2:"ŕ";s:3:"Ŗ";s:2:"Ŗ";s:3:"ŗ";s:2:"ŗ";s:3:"Ř";s:2:"Ř";s:3:"ř";s:2:"ř";s:3:"Ś";s:2:"Ś";s:3:"ś";s:2:"ś";s:3:"Ŝ";s:2:"Ŝ";s:3:"ŝ";s:2:"ŝ";s:3:"Ş";s:2:"Ş";s:3:"ş";s:2:"ş";s:3:"Š";s:2:"Š";s:3:"š";s:2:"š";s:3:"Ţ";s:2:"Ţ";s:3:"ţ";s:2:"ţ";s:3:"Ť";s:2:"Ť";s:3:"ť";s:2:"ť";s:3:"Ũ";s:2:"Ũ";s:3:"ũ";s:2:"ũ";s:3:"Ū";s:2:"Ū";s:3:"ū";s:2:"ū";s:3:"Ŭ";s:2:"Ŭ";s:3:"ŭ";s:2:"ŭ";s:3:"Ů";s:2:"Ů";s:3:"ů";s:2:"ů";s:3:"Ű";s:2:"Ű";s:3:"ű";s:2:"ű";s:3:"Ų";s:2:"Ų";s:3:"ų";s:2:"ų";s:3:"Ŵ";s:2:"Ŵ";s:3:"ŵ";s:2:"ŵ";s:3:"Ŷ";s:2:"Ŷ";s:3:"ŷ";s:2:"ŷ";s:3:"Ÿ";s:2:"Ÿ";s:3:"Ź";s:2:"Ź";s:3:"ź";s:2:"ź";s:3:"Ż";s:2:"Ż";s:3:"ż";s:2:"ż";s:3:"Ž";s:2:"Ž";s:3:"ž";s:2:"ž";s:3:"Ơ";s:2:"Ơ";s:3:"ơ";s:2:"ơ";s:3:"Ư";s:2:"Ư";s:3:"ư";s:2:"ư";s:3:"Ǎ";s:2:"Ǎ";s:3:"ǎ";s:2:"ǎ";s:3:"Ǐ";s:2:"Ǐ";s:3:"ǐ";s:2:"ǐ";s:3:"Ǒ";s:2:"Ǒ";s:3:"ǒ";s:2:"ǒ";s:3:"Ǔ";s:2:"Ǔ";s:3:"ǔ";s:2:"ǔ";s:4:"Ǖ";s:2:"Ǖ";s:4:"ǖ";s:2:"ǖ";s:4:"Ǘ";s:2:"Ǘ";s:4:"ǘ";s:2:"ǘ";s:4:"Ǚ";s:2:"Ǚ";s:4:"ǚ";s:2:"ǚ";s:4:"Ǜ";s:2:"Ǜ";s:4:"ǜ";s:2:"ǜ";s:4:"Ǟ";s:2:"Ǟ";s:4:"ǟ";s:2:"ǟ";s:4:"Ǡ";s:2:"Ǡ";s:4:"ǡ";s:2:"ǡ";s:4:"Ǣ";s:2:"Ǣ";s:4:"ǣ";s:2:"ǣ";s:3:"Ǧ";s:2:"Ǧ";s:3:"ǧ";s:2:"ǧ";s:3:"Ǩ";s:2:"Ǩ";s:3:"ǩ";s:2:"ǩ";s:3:"Ǫ";s:2:"Ǫ";s:3:"ǫ";s:2:"ǫ";s:4:"Ǭ";s:2:"Ǭ";s:4:"ǭ";s:2:"ǭ";s:4:"Ǯ";s:2:"Ǯ";s:4:"ǯ";s:2:"ǯ";s:3:"ǰ";s:2:"ǰ";s:3:"Ǵ";s:2:"Ǵ";s:3:"ǵ";s:2:"ǵ";s:3:"Ǹ";s:2:"Ǹ";s:3:"ǹ";s:2:"ǹ";s:4:"Ǻ";s:2:"Ǻ";s:4:"ǻ";s:2:"ǻ";s:4:"Ǽ";s:2:"Ǽ";s:4:"ǽ";s:2:"ǽ";s:4:"Ǿ";s:2:"Ǿ";s:4:"ǿ";s:2:"ǿ";s:3:"Ȁ";s:2:"Ȁ";s:3:"ȁ";s:2:"ȁ";s:3:"Ȃ";s:2:"Ȃ";s:3:"ȃ";s:2:"ȃ";s:3:"Ȅ";s:2:"Ȅ";s:3:"ȅ";s:2:"ȅ";s:3:"Ȇ";s:2:"Ȇ";s:3:"ȇ";s:2:"ȇ";s:3:"Ȉ";s:2:"Ȉ";s:3:"ȉ";s:2:"ȉ";s:3:"Ȋ";s:2:"Ȋ";s:3:"ȋ";s:2:"ȋ";s:3:"Ȍ";s:2:"Ȍ";s:3:"ȍ";s:2:"ȍ";s:3:"Ȏ";s:2:"Ȏ";s:3:"ȏ";s:2:"ȏ";s:3:"Ȑ";s:2:"Ȑ";s:3:"ȑ";s:2:"ȑ";s:3:"Ȓ";s:2:"Ȓ";s:3:"ȓ";s:2:"ȓ";s:3:"Ȕ";s:2:"Ȕ";s:3:"ȕ";s:2:"ȕ";s:3:"Ȗ";s:2:"Ȗ";s:3:"ȗ";s:2:"ȗ";s:3:"Ș";s:2:"Ș";s:3:"ș";s:2:"ș";s:3:"Ț";s:2:"Ț";s:3:"ț";s:2:"ț";s:3:"Ȟ";s:2:"Ȟ";s:3:"ȟ";s:2:"ȟ";s:3:"Ȧ";s:2:"Ȧ";s:3:"ȧ";s:2:"ȧ";s:3:"Ȩ";s:2:"Ȩ";s:3:"ȩ";s:2:"ȩ";s:4:"Ȫ";s:2:"Ȫ";s:4:"ȫ";s:2:"ȫ";s:4:"Ȭ";s:2:"Ȭ";s:4:"ȭ";s:2:"ȭ";s:3:"Ȯ";s:2:"Ȯ";s:3:"ȯ";s:2:"ȯ";s:4:"Ȱ";s:2:"Ȱ";s:4:"ȱ";s:2:"ȱ";s:3:"Ȳ";s:2:"Ȳ";s:3:"ȳ";s:2:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:4:"̈́";s:2:"̈́";s:2:"ʹ";s:2:"ʹ";s:1:";";s:2:";";s:4:"΅";s:2:"΅";s:4:"Ά";s:2:"Ά";s:2:"·";s:2:"·";s:4:"Έ";s:2:"Έ";s:4:"Ή";s:2:"Ή";s:4:"Ί";s:2:"Ί";s:4:"Ό";s:2:"Ό";s:4:"Ύ";s:2:"Ύ";s:4:"Ώ";s:2:"Ώ";s:4:"ΐ";s:2:"ΐ";s:4:"Ϊ";s:2:"Ϊ";s:4:"Ϋ";s:2:"Ϋ";s:4:"ά";s:2:"ά";s:4:"έ";s:2:"έ";s:4:"ή";s:2:"ή";s:4:"ί";s:2:"ί";s:4:"ΰ";s:2:"ΰ";s:4:"ϊ";s:2:"ϊ";s:4:"ϋ";s:2:"ϋ";s:4:"ό";s:2:"ό";s:4:"ύ";s:2:"ύ";s:4:"ώ";s:2:"ώ";s:4:"ϓ";s:2:"ϓ";s:4:"ϔ";s:2:"ϔ";s:4:"Ѐ";s:2:"Ѐ";s:4:"Ё";s:2:"Ё";s:4:"Ѓ";s:2:"Ѓ";s:4:"Ї";s:2:"Ї";s:4:"Ќ";s:2:"Ќ";s:4:"Ѝ";s:2:"Ѝ";s:4:"Ў";s:2:"Ў";s:4:"Й";s:2:"Й";s:4:"й";s:2:"й";s:4:"ѐ";s:2:"ѐ";s:4:"ё";s:2:"ё";s:4:"ѓ";s:2:"ѓ";s:4:"ї";s:2:"ї";s:4:"ќ";s:2:"ќ";s:4:"ѝ";s:2:"ѝ";s:4:"ў";s:2:"ў";s:4:"Ѷ";s:2:"Ѷ";s:4:"ѷ";s:2:"ѷ";s:4:"Ӂ";s:2:"Ӂ";s:4:"ӂ";s:2:"ӂ";s:4:"Ӑ";s:2:"Ӑ";s:4:"ӑ";s:2:"ӑ";s:4:"Ӓ";s:2:"Ӓ";s:4:"ӓ";s:2:"ӓ";s:4:"Ӗ";s:2:"Ӗ";s:4:"ӗ";s:2:"ӗ";s:4:"Ӛ";s:2:"Ӛ";s:4:"ӛ";s:2:"ӛ";s:4:"Ӝ";s:2:"Ӝ";s:4:"ӝ";s:2:"ӝ";s:4:"Ӟ";s:2:"Ӟ";s:4:"ӟ";s:2:"ӟ";s:4:"Ӣ";s:2:"Ӣ";s:4:"ӣ";s:2:"ӣ";s:4:"Ӥ";s:2:"Ӥ";s:4:"ӥ";s:2:"ӥ";s:4:"Ӧ";s:2:"Ӧ";s:4:"ӧ";s:2:"ӧ";s:4:"Ӫ";s:2:"Ӫ";s:4:"ӫ";s:2:"ӫ";s:4:"Ӭ";s:2:"Ӭ";s:4:"ӭ";s:2:"ӭ";s:4:"Ӯ";s:2:"Ӯ";s:4:"ӯ";s:2:"ӯ";s:4:"Ӱ";s:2:"Ӱ";s:4:"ӱ";s:2:"ӱ";s:4:"Ӳ";s:2:"Ӳ";s:4:"ӳ";s:2:"ӳ";s:4:"Ӵ";s:2:"Ӵ";s:4:"ӵ";s:2:"ӵ";s:4:"Ӹ";s:2:"Ӹ";s:4:"ӹ";s:2:"ӹ";s:4:"آ";s:2:"آ";s:4:"أ";s:2:"أ";s:4:"ؤ";s:2:"ؤ";s:4:"إ";s:2:"إ";s:4:"ئ";s:2:"ئ";s:4:"ۀ";s:2:"ۀ";s:4:"ۂ";s:2:"ۂ";s:4:"ۓ";s:2:"ۓ";s:6:"ऩ";s:3:"ऩ";s:6:"ऱ";s:3:"ऱ";s:6:"ऴ";s:3:"ऴ";s:6:"ো";s:3:"ো";s:6:"ৌ";s:3:"ৌ";s:6:"ୈ";s:3:"ୈ";s:6:"ୋ";s:3:"ୋ";s:6:"ୌ";s:3:"ୌ";s:6:"ஔ";s:3:"ஔ";s:6:"ொ";s:3:"ொ";s:6:"ோ";s:3:"ோ";s:6:"ௌ";s:3:"ௌ";s:6:"ై";s:3:"ై";s:6:"ೀ";s:3:"ೀ";s:6:"ೇ";s:3:"ೇ";s:6:"ೈ";s:3:"ೈ";s:6:"ೊ";s:3:"ೊ";s:6:"ೋ";s:3:"ೋ";s:6:"ൊ";s:3:"ൊ";s:6:"ോ";s:3:"ോ";s:6:"ൌ";s:3:"ൌ";s:6:"ේ";s:3:"ේ";s:6:"ො";s:3:"ො";s:6:"ෝ";s:3:"ෝ";s:6:"ෞ";s:3:"ෞ";s:6:"ཱི";s:3:"ཱི";s:6:"ཱུ";s:3:"ཱུ";s:6:"ཱྀ";s:3:"ཱྀ";s:6:"ဦ";s:3:"ဦ";s:6:"ᬆ";s:3:"ᬆ";s:6:"ᬈ";s:3:"ᬈ";s:6:"ᬊ";s:3:"ᬊ";s:6:"ᬌ";s:3:"ᬌ";s:6:"ᬎ";s:3:"ᬎ";s:6:"ᬒ";s:3:"ᬒ";s:6:"ᬻ";s:3:"ᬻ";s:6:"ᬽ";s:3:"ᬽ";s:6:"ᭀ";s:3:"ᭀ";s:6:"ᭁ";s:3:"ᭁ";s:6:"ᭃ";s:3:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:4:"Ḉ";s:3:"Ḉ";s:4:"ḉ";s:3:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:4:"Ḕ";s:3:"Ḕ";s:4:"ḕ";s:3:"ḕ";s:4:"Ḗ";s:3:"Ḗ";s:4:"ḗ";s:3:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:4:"Ḝ";s:3:"Ḝ";s:4:"ḝ";s:3:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:4:"Ḯ";s:3:"Ḯ";s:4:"ḯ";s:3:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:5:"Ḹ";s:3:"Ḹ";s:5:"ḹ";s:3:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:4:"Ṍ";s:3:"Ṍ";s:4:"ṍ";s:3:"ṍ";s:4:"Ṏ";s:3:"Ṏ";s:4:"ṏ";s:3:"ṏ";s:4:"Ṑ";s:3:"Ṑ";s:4:"ṑ";s:3:"ṑ";s:4:"Ṓ";s:3:"Ṓ";s:4:"ṓ";s:3:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:5:"Ṝ";s:3:"Ṝ";s:5:"ṝ";s:3:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:4:"Ṥ";s:3:"Ṥ";s:4:"ṥ";s:3:"ṥ";s:4:"Ṧ";s:3:"Ṧ";s:4:"ṧ";s:3:"ṧ";s:5:"Ṩ";s:3:"Ṩ";s:5:"ṩ";s:3:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:4:"Ṹ";s:3:"Ṹ";s:4:"ṹ";s:3:"ṹ";s:4:"Ṻ";s:3:"Ṻ";s:4:"ṻ";s:3:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:4:"ẛ";s:3:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:4:"Ấ";s:3:"Ấ";s:4:"ấ";s:3:"ấ";s:4:"Ầ";s:3:"Ầ";s:4:"ầ";s:3:"ầ";s:4:"Ẩ";s:3:"Ẩ";s:4:"ẩ";s:3:"ẩ";s:4:"Ẫ";s:3:"Ẫ";s:4:"ẫ";s:3:"ẫ";s:5:"Ậ";s:3:"Ậ";s:5:"ậ";s:3:"ậ";s:4:"Ắ";s:3:"Ắ";s:4:"ắ";s:3:"ắ";s:4:"Ằ";s:3:"Ằ";s:4:"ằ";s:3:"ằ";s:4:"Ẳ";s:3:"Ẳ";s:4:"ẳ";s:3:"ẳ";s:4:"Ẵ";s:3:"Ẵ";s:4:"ẵ";s:3:"ẵ";s:5:"Ặ";s:3:"Ặ";s:5:"ặ";s:3:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:4:"Ế";s:3:"Ế";s:4:"ế";s:3:"ế";s:4:"Ề";s:3:"Ề";s:4:"ề";s:3:"ề";s:4:"Ể";s:3:"Ể";s:4:"ể";s:3:"ể";s:4:"Ễ";s:3:"Ễ";s:4:"ễ";s:3:"ễ";s:5:"Ệ";s:3:"Ệ";s:5:"ệ";s:3:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:4:"Ố";s:3:"Ố";s:4:"ố";s:3:"ố";s:4:"Ồ";s:3:"Ồ";s:4:"ồ";s:3:"ồ";s:4:"Ổ";s:3:"Ổ";s:4:"ổ";s:3:"ổ";s:4:"Ỗ";s:3:"Ỗ";s:4:"ỗ";s:3:"ỗ";s:5:"Ộ";s:3:"Ộ";s:5:"ộ";s:3:"ộ";s:4:"Ớ";s:3:"Ớ";s:4:"ớ";s:3:"ớ";s:4:"Ờ";s:3:"Ờ";s:4:"ờ";s:3:"ờ";s:4:"Ở";s:3:"Ở";s:4:"ở";s:3:"ở";s:4:"Ỡ";s:3:"Ỡ";s:4:"ỡ";s:3:"ỡ";s:4:"Ợ";s:3:"Ợ";s:4:"ợ";s:3:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:4:"Ứ";s:3:"Ứ";s:4:"ứ";s:3:"ứ";s:4:"Ừ";s:3:"Ừ";s:4:"ừ";s:3:"ừ";s:4:"Ử";s:3:"Ử";s:4:"ử";s:3:"ử";s:4:"Ữ";s:3:"Ữ";s:4:"ữ";s:3:"ữ";s:4:"Ự";s:3:"Ự";s:4:"ự";s:3:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:4:"ἀ";s:3:"ἀ";s:4:"ἁ";s:3:"ἁ";s:5:"ἂ";s:3:"ἂ";s:5:"ἃ";s:3:"ἃ";s:5:"ἄ";s:3:"ἄ";s:5:"ἅ";s:3:"ἅ";s:5:"ἆ";s:3:"ἆ";s:5:"ἇ";s:3:"ἇ";s:4:"Ἀ";s:3:"Ἀ";s:4:"Ἁ";s:3:"Ἁ";s:5:"Ἂ";s:3:"Ἂ";s:5:"Ἃ";s:3:"Ἃ";s:5:"Ἄ";s:3:"Ἄ";s:5:"Ἅ";s:3:"Ἅ";s:5:"Ἆ";s:3:"Ἆ";s:5:"Ἇ";s:3:"Ἇ";s:4:"ἐ";s:3:"ἐ";s:4:"ἑ";s:3:"ἑ";s:5:"ἒ";s:3:"ἒ";s:5:"ἓ";s:3:"ἓ";s:5:"ἔ";s:3:"ἔ";s:5:"ἕ";s:3:"ἕ";s:4:"Ἐ";s:3:"Ἐ";s:4:"Ἑ";s:3:"Ἑ";s:5:"Ἒ";s:3:"Ἒ";s:5:"Ἓ";s:3:"Ἓ";s:5:"Ἔ";s:3:"Ἔ";s:5:"Ἕ";s:3:"Ἕ";s:4:"ἠ";s:3:"ἠ";s:4:"ἡ";s:3:"ἡ";s:5:"ἢ";s:3:"ἢ";s:5:"ἣ";s:3:"ἣ";s:5:"ἤ";s:3:"ἤ";s:5:"ἥ";s:3:"ἥ";s:5:"ἦ";s:3:"ἦ";s:5:"ἧ";s:3:"ἧ";s:4:"Ἠ";s:3:"Ἠ";s:4:"Ἡ";s:3:"Ἡ";s:5:"Ἢ";s:3:"Ἢ";s:5:"Ἣ";s:3:"Ἣ";s:5:"Ἤ";s:3:"Ἤ";s:5:"Ἥ";s:3:"Ἥ";s:5:"Ἦ";s:3:"Ἦ";s:5:"Ἧ";s:3:"Ἧ";s:4:"ἰ";s:3:"ἰ";s:4:"ἱ";s:3:"ἱ";s:5:"ἲ";s:3:"ἲ";s:5:"ἳ";s:3:"ἳ";s:5:"ἴ";s:3:"ἴ";s:5:"ἵ";s:3:"ἵ";s:5:"ἶ";s:3:"ἶ";s:5:"ἷ";s:3:"ἷ";s:4:"Ἰ";s:3:"Ἰ";s:4:"Ἱ";s:3:"Ἱ";s:5:"Ἲ";s:3:"Ἲ";s:5:"Ἳ";s:3:"Ἳ";s:5:"Ἴ";s:3:"Ἴ";s:5:"Ἵ";s:3:"Ἵ";s:5:"Ἶ";s:3:"Ἶ";s:5:"Ἷ";s:3:"Ἷ";s:4:"ὀ";s:3:"ὀ";s:4:"ὁ";s:3:"ὁ";s:5:"ὂ";s:3:"ὂ";s:5:"ὃ";s:3:"ὃ";s:5:"ὄ";s:3:"ὄ";s:5:"ὅ";s:3:"ὅ";s:4:"Ὀ";s:3:"Ὀ";s:4:"Ὁ";s:3:"Ὁ";s:5:"Ὂ";s:3:"Ὂ";s:5:"Ὃ";s:3:"Ὃ";s:5:"Ὄ";s:3:"Ὄ";s:5:"Ὅ";s:3:"Ὅ";s:4:"ὐ";s:3:"ὐ";s:4:"ὑ";s:3:"ὑ";s:5:"ὒ";s:3:"ὒ";s:5:"ὓ";s:3:"ὓ";s:5:"ὔ";s:3:"ὔ";s:5:"ὕ";s:3:"ὕ";s:5:"ὖ";s:3:"ὖ";s:5:"ὗ";s:3:"ὗ";s:4:"Ὑ";s:3:"Ὑ";s:5:"Ὓ";s:3:"Ὓ";s:5:"Ὕ";s:3:"Ὕ";s:5:"Ὗ";s:3:"Ὗ";s:4:"ὠ";s:3:"ὠ";s:4:"ὡ";s:3:"ὡ";s:5:"ὢ";s:3:"ὢ";s:5:"ὣ";s:3:"ὣ";s:5:"ὤ";s:3:"ὤ";s:5:"ὥ";s:3:"ὥ";s:5:"ὦ";s:3:"ὦ";s:5:"ὧ";s:3:"ὧ";s:4:"Ὠ";s:3:"Ὠ";s:4:"Ὡ";s:3:"Ὡ";s:5:"Ὢ";s:3:"Ὢ";s:5:"Ὣ";s:3:"Ὣ";s:5:"Ὤ";s:3:"Ὤ";s:5:"Ὥ";s:3:"Ὥ";s:5:"Ὦ";s:3:"Ὦ";s:5:"Ὧ";s:3:"Ὧ";s:4:"ὰ";s:3:"ὰ";s:2:"ά";s:3:"ά";s:4:"ὲ";s:3:"ὲ";s:2:"έ";s:3:"έ";s:4:"ὴ";s:3:"ὴ";s:2:"ή";s:3:"ή";s:4:"ὶ";s:3:"ὶ";s:2:"ί";s:3:"ί";s:4:"ὸ";s:3:"ὸ";s:2:"ό";s:3:"ό";s:4:"ὺ";s:3:"ὺ";s:2:"ύ";s:3:"ύ";s:4:"ὼ";s:3:"ὼ";s:2:"ώ";s:3:"ώ";s:5:"ᾀ";s:3:"ᾀ";s:5:"ᾁ";s:3:"ᾁ";s:5:"ᾂ";s:3:"ᾂ";s:5:"ᾃ";s:3:"ᾃ";s:5:"ᾄ";s:3:"ᾄ";s:5:"ᾅ";s:3:"ᾅ";s:5:"ᾆ";s:3:"ᾆ";s:5:"ᾇ";s:3:"ᾇ";s:5:"ᾈ";s:3:"ᾈ";s:5:"ᾉ";s:3:"ᾉ";s:5:"ᾊ";s:3:"ᾊ";s:5:"ᾋ";s:3:"ᾋ";s:5:"ᾌ";s:3:"ᾌ";s:5:"ᾍ";s:3:"ᾍ";s:5:"ᾎ";s:3:"ᾎ";s:5:"ᾏ";s:3:"ᾏ";s:5:"ᾐ";s:3:"ᾐ";s:5:"ᾑ";s:3:"ᾑ";s:5:"ᾒ";s:3:"ᾒ";s:5:"ᾓ";s:3:"ᾓ";s:5:"ᾔ";s:3:"ᾔ";s:5:"ᾕ";s:3:"ᾕ";s:5:"ᾖ";s:3:"ᾖ";s:5:"ᾗ";s:3:"ᾗ";s:5:"ᾘ";s:3:"ᾘ";s:5:"ᾙ";s:3:"ᾙ";s:5:"ᾚ";s:3:"ᾚ";s:5:"ᾛ";s:3:"ᾛ";s:5:"ᾜ";s:3:"ᾜ";s:5:"ᾝ";s:3:"ᾝ";s:5:"ᾞ";s:3:"ᾞ";s:5:"ᾟ";s:3:"ᾟ";s:5:"ᾠ";s:3:"ᾠ";s:5:"ᾡ";s:3:"ᾡ";s:5:"ᾢ";s:3:"ᾢ";s:5:"ᾣ";s:3:"ᾣ";s:5:"ᾤ";s:3:"ᾤ";s:5:"ᾥ";s:3:"ᾥ";s:5:"ᾦ";s:3:"ᾦ";s:5:"ᾧ";s:3:"ᾧ";s:5:"ᾨ";s:3:"ᾨ";s:5:"ᾩ";s:3:"ᾩ";s:5:"ᾪ";s:3:"ᾪ";s:5:"ᾫ";s:3:"ᾫ";s:5:"ᾬ";s:3:"ᾬ";s:5:"ᾭ";s:3:"ᾭ";s:5:"ᾮ";s:3:"ᾮ";s:5:"ᾯ";s:3:"ᾯ";s:4:"ᾰ";s:3:"ᾰ";s:4:"ᾱ";s:3:"ᾱ";s:5:"ᾲ";s:3:"ᾲ";s:4:"ᾳ";s:3:"ᾳ";s:4:"ᾴ";s:3:"ᾴ";s:4:"ᾶ";s:3:"ᾶ";s:5:"ᾷ";s:3:"ᾷ";s:4:"Ᾰ";s:3:"Ᾰ";s:4:"Ᾱ";s:3:"Ᾱ";s:4:"Ὰ";s:3:"Ὰ";s:2:"Ά";s:3:"Ά";s:4:"ᾼ";s:3:"ᾼ";s:2:"ι";s:3:"ι";s:4:"῁";s:3:"῁";s:5:"ῂ";s:3:"ῂ";s:4:"ῃ";s:3:"ῃ";s:4:"ῄ";s:3:"ῄ";s:4:"ῆ";s:3:"ῆ";s:5:"ῇ";s:3:"ῇ";s:4:"Ὲ";s:3:"Ὲ";s:2:"Έ";s:3:"Έ";s:4:"Ὴ";s:3:"Ὴ";s:2:"Ή";s:3:"Ή";s:4:"ῌ";s:3:"ῌ";s:5:"῍";s:3:"῍";s:5:"῎";s:3:"῎";s:5:"῏";s:3:"῏";s:4:"ῐ";s:3:"ῐ";s:4:"ῑ";s:3:"ῑ";s:4:"ῒ";s:3:"ῒ";s:2:"ΐ";s:3:"ΐ";s:4:"ῖ";s:3:"ῖ";s:4:"ῗ";s:3:"ῗ";s:4:"Ῐ";s:3:"Ῐ";s:4:"Ῑ";s:3:"Ῑ";s:4:"Ὶ";s:3:"Ὶ";s:2:"Ί";s:3:"Ί";s:5:"῝";s:3:"῝";s:5:"῞";s:3:"῞";s:5:"῟";s:3:"῟";s:4:"ῠ";s:3:"ῠ";s:4:"ῡ";s:3:"ῡ";s:4:"ῢ";s:3:"ῢ";s:2:"ΰ";s:3:"ΰ";s:4:"ῤ";s:3:"ῤ";s:4:"ῥ";s:3:"ῥ";s:4:"ῦ";s:3:"ῦ";s:4:"ῧ";s:3:"ῧ";s:4:"Ῠ";s:3:"Ῠ";s:4:"Ῡ";s:3:"Ῡ";s:4:"Ὺ";s:3:"Ὺ";s:2:"Ύ";s:3:"Ύ";s:4:"Ῥ";s:3:"Ῥ";s:4:"῭";s:3:"῭";s:2:"΅";s:3:"΅";s:1:"`";s:3:"`";s:5:"ῲ";s:3:"ῲ";s:4:"ῳ";s:3:"ῳ";s:4:"ῴ";s:3:"ῴ";s:4:"ῶ";s:3:"ῶ";s:5:"ῷ";s:3:"ῷ";s:4:"Ὸ";s:3:"Ὸ";s:2:"Ό";s:3:"Ό";s:4:"Ὼ";s:3:"Ὼ";s:2:"Ώ";s:3:"Ώ";s:4:"ῼ";s:3:"ῼ";s:2:"´";s:3:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:2:"Ω";s:3:"Ω";s:1:"K";s:3:"K";s:2:"Å";s:3:"Å";s:5:"↚";s:3:"↚";s:5:"↛";s:3:"↛";s:5:"↮";s:3:"↮";s:5:"⇍";s:3:"⇍";s:5:"⇎";s:3:"⇎";s:5:"⇏";s:3:"⇏";s:5:"∄";s:3:"∄";s:5:"∉";s:3:"∉";s:5:"∌";s:3:"∌";s:5:"∤";s:3:"∤";s:5:"∦";s:3:"∦";s:5:"≁";s:3:"≁";s:5:"≄";s:3:"≄";s:5:"≇";s:3:"≇";s:5:"≉";s:3:"≉";s:3:"≠";s:3:"≠";s:5:"≢";s:3:"≢";s:5:"≭";s:3:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:5:"≰";s:3:"≰";s:5:"≱";s:3:"≱";s:5:"≴";s:3:"≴";s:5:"≵";s:3:"≵";s:5:"≸";s:3:"≸";s:5:"≹";s:3:"≹";s:5:"⊀";s:3:"⊀";s:5:"⊁";s:3:"⊁";s:5:"⊄";s:3:"⊄";s:5:"⊅";s:3:"⊅";s:5:"⊈";s:3:"⊈";s:5:"⊉";s:3:"⊉";s:5:"⊬";s:3:"⊬";s:5:"⊭";s:3:"⊭";s:5:"⊮";s:3:"⊮";s:5:"⊯";s:3:"⊯";s:5:"⋠";s:3:"⋠";s:5:"⋡";s:3:"⋡";s:5:"⋢";s:3:"⋢";s:5:"⋣";s:3:"⋣";s:5:"⋪";s:3:"⋪";s:5:"⋫";s:3:"⋫";s:5:"⋬";s:3:"⋬";s:5:"⋭";s:3:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:6:"が";s:3:"が";s:6:"ぎ";s:3:"ぎ";s:6:"ぐ";s:3:"ぐ";s:6:"げ";s:3:"げ";s:6:"ご";s:3:"ご";s:6:"ざ";s:3:"ざ";s:6:"じ";s:3:"じ";s:6:"ず";s:3:"ず";s:6:"ぜ";s:3:"ぜ";s:6:"ぞ";s:3:"ぞ";s:6:"だ";s:3:"だ";s:6:"ぢ";s:3:"ぢ";s:6:"づ";s:3:"づ";s:6:"で";s:3:"で";s:6:"ど";s:3:"ど";s:6:"ば";s:3:"ば";s:6:"ぱ";s:3:"ぱ";s:6:"び";s:3:"び";s:6:"ぴ";s:3:"ぴ";s:6:"ぶ";s:3:"ぶ";s:6:"ぷ";s:3:"ぷ";s:6:"べ";s:3:"べ";s:6:"ぺ";s:3:"ぺ";s:6:"ぼ";s:3:"ぼ";s:6:"ぽ";s:3:"ぽ";s:6:"ゔ";s:3:"ゔ";s:6:"ゞ";s:3:"ゞ";s:6:"ガ";s:3:"ガ";s:6:"ギ";s:3:"ギ";s:6:"グ";s:3:"グ";s:6:"ゲ";s:3:"ゲ";s:6:"ゴ";s:3:"ゴ";s:6:"ザ";s:3:"ザ";s:6:"ジ";s:3:"ジ";s:6:"ズ";s:3:"ズ";s:6:"ゼ";s:3:"ゼ";s:6:"ゾ";s:3:"ゾ";s:6:"ダ";s:3:"ダ";s:6:"ヂ";s:3:"ヂ";s:6:"ヅ";s:3:"ヅ";s:6:"デ";s:3:"デ";s:6:"ド";s:3:"ド";s:6:"バ";s:3:"バ";s:6:"パ";s:3:"パ";s:6:"ビ";s:3:"ビ";s:6:"ピ";s:3:"ピ";s:6:"ブ";s:3:"ブ";s:6:"プ";s:3:"プ";s:6:"ベ";s:3:"ベ";s:6:"ペ";s:3:"ペ";s:6:"ボ";s:3:"ボ";s:6:"ポ";s:3:"ポ";s:6:"ヴ";s:3:"ヴ";s:6:"ヷ";s:3:"ヷ";s:6:"ヸ";s:3:"ヸ";s:6:"ヹ";s:3:"ヹ";s:6:"ヺ";s:3:"ヺ";s:6:"ヾ";s:3:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:4:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:4:"廊";s:3:"朗";s:4:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:4:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:4:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:4:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:4:"異";s:3:"北";s:4:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:4:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:4:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:4:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:4:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:4:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:4:"侮";s:3:"僧";s:4:"僧";s:3:"免";s:4:"免";s:3:"勉";s:4:"勉";s:3:"勤";s:4:"勤";s:3:"卑";s:4:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:4:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:4:"屮";s:3:"悔";s:4:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:4:"憎";s:3:"懲";s:4:"懲";s:3:"敏";s:4:"敏";s:3:"既";s:3:"既";s:3:"暑";s:4:"暑";s:3:"梅";s:4:"梅";s:3:"海";s:4:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:4:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:4:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:4:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"著";s:4:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:4:"𤋮";s:3:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:4:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:4:"勇";s:3:"勺";s:4:"勺";s:3:"啕";s:3:"啕";s:3:"喙";s:4:"喙";s:3:"嗢";s:3:"嗢";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:4:"慎";s:3:"愈";s:3:"愈";s:3:"慠";s:3:"慠";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"望";s:4:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"滛";s:3:"滛";s:3:"滋";s:4:"滋";s:3:"瀞";s:4:"瀞";s:3:"瞧";s:3:"瞧";s:3:"爵";s:4:"爵";s:3:"犯";s:3:"犯";s:3:"瑱";s:4:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"盛";s:3:"盛";s:3:"直";s:4:"直";s:3:"睊";s:4:"睊";s:3:"着";s:3:"着";s:3:"磌";s:4:"磌";s:3:"窱";s:3:"窱";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"缾";s:3:"缾";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:4:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"調";s:3:"調";s:3:"請";s:3:"請";s:3:"諭";s:4:"諭";s:3:"變";s:4:"變";s:3:"輸";s:4:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"韛";s:3:"韛";s:3:"頋";s:4:"頋";s:3:"鬒";s:4:"鬒";s:4:"𢡊";s:3:"𢡊";s:4:"𢡄";s:3:"𢡄";s:4:"𣏕";s:3:"𣏕";s:3:"㮝";s:4:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:4:"䀹";s:4:"𥉉";s:3:"𥉉";s:4:"𥳐";s:3:"𥳐";s:4:"𧻓";s:3:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:8:"𑂚";s:4:"𑂚";s:8:"𑂜";s:4:"𑂜";s:8:"𑂫";s:4:"𑂫";s:3:"丽";s:4:"丽";s:3:"丸";s:4:"丸";s:3:"乁";s:4:"乁";s:4:"𠄢";s:4:"𠄢";s:3:"你";s:4:"你";s:3:"侻";s:4:"侻";s:3:"倂";s:4:"倂";s:3:"偺";s:4:"偺";s:3:"備";s:4:"備";s:3:"像";s:4:"像";s:3:"㒞";s:4:"㒞";s:4:"𠘺";s:4:"𠘺";s:3:"兔";s:4:"兔";s:3:"兤";s:4:"兤";s:3:"具";s:4:"具";s:4:"𠔜";s:4:"𠔜";s:3:"㒹";s:4:"㒹";s:3:"內";s:4:"內";s:3:"再";s:4:"再";s:4:"𠕋";s:4:"𠕋";s:3:"冗";s:4:"冗";s:3:"冤";s:4:"冤";s:3:"仌";s:4:"仌";s:3:"冬";s:4:"冬";s:4:"𩇟";s:4:"𩇟";s:3:"凵";s:4:"凵";s:3:"刃";s:4:"刃";s:3:"㓟";s:4:"㓟";s:3:"刻";s:4:"刻";s:3:"剆";s:4:"剆";s:3:"割";s:4:"割";s:3:"剷";s:4:"剷";s:3:"㔕";s:4:"㔕";s:3:"包";s:4:"包";s:3:"匆";s:4:"匆";s:3:"卉";s:4:"卉";s:3:"博";s:4:"博";s:3:"即";s:4:"即";s:3:"卽";s:4:"卽";s:3:"卿";s:4:"卿";s:4:"𠨬";s:4:"𠨬";s:3:"灰";s:4:"灰";s:3:"及";s:4:"及";s:3:"叟";s:4:"叟";s:4:"𠭣";s:4:"𠭣";s:3:"叫";s:4:"叫";s:3:"叱";s:4:"叱";s:3:"吆";s:4:"吆";s:3:"咞";s:4:"咞";s:3:"吸";s:4:"吸";s:3:"呈";s:4:"呈";s:3:"周";s:4:"周";s:3:"咢";s:4:"咢";s:3:"哶";s:4:"哶";s:3:"唐";s:4:"唐";s:3:"啓";s:4:"啓";s:3:"啣";s:4:"啣";s:3:"善";s:4:"善";s:3:"喫";s:4:"喫";s:3:"喳";s:4:"喳";s:3:"嗂";s:4:"嗂";s:3:"圖";s:4:"圖";s:3:"圗";s:4:"圗";s:3:"噑";s:4:"噑";s:3:"噴";s:4:"噴";s:3:"壮";s:4:"壮";s:3:"城";s:4:"城";s:3:"埴";s:4:"埴";s:3:"堍";s:4:"堍";s:3:"型";s:4:"型";s:3:"堲";s:4:"堲";s:3:"報";s:4:"報";s:3:"墬";s:4:"墬";s:4:"𡓤";s:4:"𡓤";s:3:"売";s:4:"売";s:3:"壷";s:4:"壷";s:3:"夆";s:4:"夆";s:3:"多";s:4:"多";s:3:"夢";s:4:"夢";s:3:"奢";s:4:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:3:"姬";s:4:"姬";s:3:"娛";s:4:"娛";s:3:"娧";s:4:"娧";s:3:"姘";s:4:"姘";s:3:"婦";s:4:"婦";s:3:"㛮";s:4:"㛮";s:3:"㛼";s:4:"㛼";s:3:"嬈";s:4:"嬈";s:3:"嬾";s:4:"嬾";s:4:"𡧈";s:4:"𡧈";s:3:"寃";s:4:"寃";s:3:"寘";s:4:"寘";s:3:"寳";s:4:"寳";s:4:"𡬘";s:4:"𡬘";s:3:"寿";s:4:"寿";s:3:"将";s:4:"将";s:3:"当";s:4:"当";s:3:"尢";s:4:"尢";s:3:"㞁";s:4:"㞁";s:3:"屠";s:4:"屠";s:3:"峀";s:4:"峀";s:3:"岍";s:4:"岍";s:4:"𡷤";s:4:"𡷤";s:3:"嵃";s:4:"嵃";s:4:"𡷦";s:4:"𡷦";s:3:"嵮";s:4:"嵮";s:3:"嵫";s:4:"嵫";s:3:"嵼";s:4:"嵼";s:3:"巡";s:4:"巡";s:3:"巢";s:4:"巢";s:3:"㠯";s:4:"㠯";s:3:"巽";s:4:"巽";s:3:"帨";s:4:"帨";s:3:"帽";s:4:"帽";s:3:"幩";s:4:"幩";s:3:"㡢";s:4:"㡢";s:4:"𢆃";s:4:"𢆃";s:3:"㡼";s:4:"㡼";s:3:"庰";s:4:"庰";s:3:"庳";s:4:"庳";s:3:"庶";s:4:"庶";s:4:"𪎒";s:4:"𪎒";s:3:"廾";s:4:"廾";s:4:"𢌱";s:4:"𢌱";s:3:"舁";s:4:"舁";s:3:"弢";s:4:"弢";s:3:"㣇";s:4:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:3:"形";s:4:"形";s:3:"彫";s:4:"彫";s:3:"㣣";s:4:"㣣";s:3:"徚";s:4:"徚";s:3:"忍";s:4:"忍";s:3:"志";s:4:"志";s:3:"忹";s:4:"忹";s:3:"悁";s:4:"悁";s:3:"㤺";s:4:"㤺";s:3:"㤜";s:4:"㤜";s:4:"𢛔";s:4:"𢛔";s:3:"惇";s:4:"惇";s:3:"慈";s:4:"慈";s:3:"慌";s:4:"慌";s:3:"慺";s:4:"慺";s:3:"憲";s:4:"憲";s:3:"憤";s:4:"憤";s:3:"憯";s:4:"憯";s:3:"懞";s:4:"懞";s:3:"成";s:4:"成";s:3:"戛";s:4:"戛";s:3:"扝";s:4:"扝";s:3:"抱";s:4:"抱";s:3:"拔";s:4:"拔";s:3:"捐";s:4:"捐";s:4:"𢬌";s:4:"𢬌";s:3:"挽";s:4:"挽";s:3:"拼";s:4:"拼";s:3:"捨";s:4:"捨";s:3:"掃";s:4:"掃";s:3:"揤";s:4:"揤";s:4:"𢯱";s:4:"𢯱";s:3:"搢";s:4:"搢";s:3:"揅";s:4:"揅";s:3:"掩";s:4:"掩";s:3:"㨮";s:4:"㨮";s:3:"摩";s:4:"摩";s:3:"摾";s:4:"摾";s:3:"撝";s:4:"撝";s:3:"摷";s:4:"摷";s:3:"㩬";s:4:"㩬";s:3:"敬";s:4:"敬";s:4:"𣀊";s:4:"𣀊";s:3:"旣";s:4:"旣";s:3:"書";s:4:"書";s:3:"晉";s:4:"晉";s:3:"㬙";s:4:"㬙";s:3:"㬈";s:4:"㬈";s:3:"㫤";s:4:"㫤";s:3:"冒";s:4:"冒";s:3:"冕";s:4:"冕";s:3:"最";s:4:"最";s:3:"暜";s:4:"暜";s:3:"肭";s:4:"肭";s:3:"䏙";s:4:"䏙";s:3:"朡";s:4:"朡";s:3:"杞";s:4:"杞";s:3:"杓";s:4:"杓";s:4:"𣏃";s:4:"𣏃";s:3:"㭉";s:4:"㭉";s:3:"柺";s:4:"柺";s:3:"枅";s:4:"枅";s:3:"桒";s:4:"桒";s:4:"𣑭";s:4:"𣑭";s:3:"梎";s:4:"梎";s:3:"栟";s:4:"栟";s:3:"椔";s:4:"椔";s:3:"楂";s:4:"楂";s:3:"榣";s:4:"榣";s:3:"槪";s:4:"槪";s:3:"檨";s:4:"檨";s:4:"𣚣";s:4:"𣚣";s:3:"櫛";s:4:"櫛";s:3:"㰘";s:4:"㰘";s:3:"次";s:4:"次";s:4:"𣢧";s:4:"𣢧";s:3:"歔";s:4:"歔";s:3:"㱎";s:4:"㱎";s:3:"歲";s:4:"歲";s:3:"殟";s:4:"殟";s:3:"殻";s:4:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:3:"汎";s:4:"汎";s:4:"𣲼";s:4:"𣲼";s:3:"沿";s:4:"沿";s:3:"泍";s:4:"泍";s:3:"汧";s:4:"汧";s:3:"洖";s:4:"洖";s:3:"派";s:4:"派";s:3:"浩";s:4:"浩";s:3:"浸";s:4:"浸";s:3:"涅";s:4:"涅";s:4:"𣴞";s:4:"𣴞";s:3:"洴";s:4:"洴";s:3:"港";s:4:"港";s:3:"湮";s:4:"湮";s:3:"㴳";s:4:"㴳";s:3:"滇";s:4:"滇";s:4:"𣻑";s:4:"𣻑";s:3:"淹";s:4:"淹";s:3:"潮";s:4:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:3:"濆";s:4:"濆";s:3:"瀹";s:4:"瀹";s:3:"瀛";s:4:"瀛";s:3:"㶖";s:4:"㶖";s:3:"灊";s:4:"灊";s:3:"災";s:4:"災";s:3:"灷";s:4:"灷";s:3:"炭";s:4:"炭";s:4:"𠔥";s:4:"𠔥";s:3:"煅";s:4:"煅";s:4:"𤉣";s:4:"𤉣";s:3:"熜";s:4:"熜";s:4:"𤎫";s:4:"𤎫";s:3:"爨";s:4:"爨";s:3:"牐";s:4:"牐";s:4:"𤘈";s:4:"𤘈";s:3:"犀";s:4:"犀";s:3:"犕";s:4:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:3:"獺";s:4:"獺";s:3:"王";s:4:"王";s:3:"㺬";s:4:"㺬";s:3:"玥";s:4:"玥";s:3:"㺸";s:4:"㺸";s:3:"瑇";s:4:"瑇";s:3:"瑜";s:4:"瑜";s:3:"璅";s:4:"璅";s:3:"瓊";s:4:"瓊";s:3:"㼛";s:4:"㼛";s:3:"甤";s:4:"甤";s:4:"𤰶";s:4:"𤰶";s:3:"甾";s:4:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"𢆟";s:4:"𢆟";s:3:"瘐";s:4:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:3:"㿼";s:4:"㿼";s:3:"䀈";s:4:"䀈";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:3:"眞";s:4:"眞";s:3:"真";s:4:"真";s:3:"瞋";s:4:"瞋";s:3:"䁆";s:4:"䁆";s:3:"䂖";s:4:"䂖";s:4:"𥐝";s:4:"𥐝";s:3:"硎";s:4:"硎";s:3:"䃣";s:4:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:3:"秫";s:4:"秫";s:3:"䄯";s:4:"䄯";s:3:"穊";s:4:"穊";s:3:"穏";s:4:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:3:"竮";s:4:"竮";s:3:"䈂";s:4:"䈂";s:4:"𥮫";s:4:"𥮫";s:3:"篆";s:4:"篆";s:3:"築";s:4:"築";s:3:"䈧";s:4:"䈧";s:4:"𥲀";s:4:"𥲀";s:3:"糒";s:4:"糒";s:3:"䊠";s:4:"䊠";s:3:"糨";s:4:"糨";s:3:"糣";s:4:"糣";s:3:"紀";s:4:"紀";s:4:"𥾆";s:4:"𥾆";s:3:"絣";s:4:"絣";s:3:"䌁";s:4:"䌁";s:3:"緇";s:4:"緇";s:3:"縂";s:4:"縂";s:3:"繅";s:4:"繅";s:3:"䌴";s:4:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:3:"䍙";s:4:"䍙";s:4:"𦋙";s:4:"𦋙";s:3:"罺";s:4:"罺";s:4:"𦌾";s:4:"𦌾";s:3:"羕";s:4:"羕";s:3:"翺";s:4:"翺";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:3:"聠";s:4:"聠";s:4:"𦖨";s:4:"𦖨";s:3:"聰";s:4:"聰";s:4:"𣍟";s:4:"𣍟";s:3:"䏕";s:4:"䏕";s:3:"育";s:4:"育";s:3:"脃";s:4:"脃";s:3:"䐋";s:4:"䐋";s:3:"脾";s:4:"脾";s:3:"媵";s:4:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:3:"舄";s:4:"舄";s:3:"辞";s:4:"辞";s:3:"䑫";s:4:"䑫";s:3:"芑";s:4:"芑";s:3:"芋";s:4:"芋";s:3:"芝";s:4:"芝";s:3:"劳";s:4:"劳";s:3:"花";s:4:"花";s:3:"芳";s:4:"芳";s:3:"芽";s:4:"芽";s:3:"苦";s:4:"苦";s:4:"𦬼";s:4:"𦬼";s:3:"茝";s:4:"茝";s:3:"荣";s:4:"荣";s:3:"莭";s:4:"莭";s:3:"茣";s:4:"茣";s:3:"莽";s:4:"莽";s:3:"菧";s:4:"菧";s:3:"荓";s:4:"荓";s:3:"菊";s:4:"菊";s:3:"菌";s:4:"菌";s:3:"菜";s:4:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:3:"䔫";s:4:"䔫";s:3:"蓱";s:4:"蓱";s:3:"蓳";s:4:"蓳";s:3:"蔖";s:4:"蔖";s:4:"𧏊";s:4:"𧏊";s:3:"蕤";s:4:"蕤";s:4:"𦼬";s:4:"𦼬";s:3:"䕝";s:4:"䕝";s:3:"䕡";s:4:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:3:"䕫";s:4:"䕫";s:3:"虐";s:4:"虐";s:3:"虧";s:4:"虧";s:3:"虩";s:4:"虩";s:3:"蚩";s:4:"蚩";s:3:"蚈";s:4:"蚈";s:3:"蜎";s:4:"蜎";s:3:"蛢";s:4:"蛢";s:3:"蜨";s:4:"蜨";s:3:"蝫";s:4:"蝫";s:3:"螆";s:4:"螆";s:3:"䗗";s:4:"䗗";s:3:"蟡";s:4:"蟡";s:3:"蠁";s:4:"蠁";s:3:"䗹";s:4:"䗹";s:3:"衠";s:4:"衠";s:3:"衣";s:4:"衣";s:4:"𧙧";s:4:"𧙧";s:3:"裗";s:4:"裗";s:3:"裞";s:4:"裞";s:3:"䘵";s:4:"䘵";s:3:"裺";s:4:"裺";s:3:"㒻";s:4:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:3:"䚾";s:4:"䚾";s:3:"䛇";s:4:"䛇";s:3:"誠";s:4:"誠";s:3:"豕";s:4:"豕";s:4:"𧲨";s:4:"𧲨";s:3:"貫";s:4:"貫";s:3:"賁";s:4:"賁";s:3:"贛";s:4:"贛";s:3:"起";s:4:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:3:"跋";s:4:"跋";s:3:"趼";s:4:"趼";s:3:"跰";s:4:"跰";s:4:"𠣞";s:4:"𠣞";s:3:"軔";s:4:"軔";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:3:"邔";s:4:"邔";s:3:"郱";s:4:"郱";s:3:"鄑";s:4:"鄑";s:4:"𨜮";s:4:"𨜮";s:3:"鄛";s:4:"鄛";s:3:"鈸";s:4:"鈸";s:3:"鋗";s:4:"鋗";s:3:"鋘";s:4:"鋘";s:3:"鉼";s:4:"鉼";s:3:"鏹";s:4:"鏹";s:3:"鐕";s:4:"鐕";s:4:"𨯺";s:4:"𨯺";s:3:"開";s:4:"開";s:3:"䦕";s:4:"䦕";s:3:"閷";s:4:"閷";s:4:"𨵷";s:4:"𨵷";s:3:"䧦";s:4:"䧦";s:3:"雃";s:4:"雃";s:3:"嶲";s:4:"嶲";s:3:"霣";s:4:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:3:"䩮";s:4:"䩮";s:3:"䩶";s:4:"䩶";s:3:"韠";s:4:"韠";s:4:"𩐊";s:4:"𩐊";s:3:"䪲";s:4:"䪲";s:4:"𩒖";s:4:"𩒖";s:3:"頩";s:4:"頩";s:4:"𩖶";s:4:"𩖶";s:3:"飢";s:4:"飢";s:3:"䬳";s:4:"䬳";s:3:"餩";s:4:"餩";s:3:"馧";s:4:"馧";s:3:"駂";s:4:"駂";s:3:"駾";s:4:"駾";s:3:"䯎";s:4:"䯎";s:4:"𩬰";s:4:"𩬰";s:3:"鱀";s:4:"鱀";s:3:"鳽";s:4:"鳽";s:3:"䳎";s:4:"䳎";s:3:"䳭";s:4:"䳭";s:3:"鵧";s:4:"鵧";s:4:"𪃎";s:4:"𪃎";s:3:"䳸";s:4:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:3:"麻";s:4:"麻";s:3:"䵖";s:4:"䵖";s:3:"黹";s:4:"黹";s:3:"黾";s:4:"黾";s:3:"鼅";s:4:"鼅";s:3:"鼏";s:4:"鼏";s:3:"鼖";s:4:"鼖";s:3:"鼻";s:4:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
-UtfNormal::$utfCanonicalDecomp = unserialize( 'a:2049:{s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:";";s:1:";";s:2:"΅";s:4:"΅";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϓ";s:4:"ϓ";s:2:"ϔ";s:4:"ϔ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẛ";s:4:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"ι";s:2:"ι";s:3:"῁";s:4:"῁";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:"῍";s:3:"῎";s:5:"῎";s:3:"῏";s:5:"῏";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:"῝";s:3:"῞";s:5:"῞";s:3:"῟";s:5:"῟";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:4:"῭";s:3:"΅";s:4:"΅";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:2:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:3:"Ω";s:2:"Ω";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"⫝̸";s:5:"⫝̸";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"ゞ";s:6:"ゞ";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:3:"𤋮";s:4:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:4:"𑂚";s:8:"𑂚";s:4:"𑂜";s:8:"𑂜";s:4:"𑂫";s:8:"𑂫";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
-UtfNormal::$utfCheckNFC = unserialize( 'a:1221:{s:2:"̀";s:1:"N";s:2:"́";s:1:"N";s:2:"̓";s:1:"N";s:2:"̈́";s:1:"N";s:2:"ʹ";s:1:"N";s:2:";";s:1:"N";s:2:"·";s:1:"N";s:3:"क़";s:1:"N";s:3:"ख़";s:1:"N";s:3:"ग़";s:1:"N";s:3:"ज़";s:1:"N";s:3:"ड़";s:1:"N";s:3:"ढ़";s:1:"N";s:3:"फ़";s:1:"N";s:3:"य़";s:1:"N";s:3:"ড়";s:1:"N";s:3:"ঢ়";s:1:"N";s:3:"য়";s:1:"N";s:3:"ਲ਼";s:1:"N";s:3:"ਸ਼";s:1:"N";s:3:"ਖ਼";s:1:"N";s:3:"ਗ਼";s:1:"N";s:3:"ਜ਼";s:1:"N";s:3:"ਫ਼";s:1:"N";s:3:"ଡ଼";s:1:"N";s:3:"ଢ଼";s:1:"N";s:3:"གྷ";s:1:"N";s:3:"ཌྷ";s:1:"N";s:3:"དྷ";s:1:"N";s:3:"བྷ";s:1:"N";s:3:"ཛྷ";s:1:"N";s:3:"ཀྵ";s:1:"N";s:3:"ཱི";s:1:"N";s:3:"ཱུ";s:1:"N";s:3:"ྲྀ";s:1:"N";s:3:"ླྀ";s:1:"N";s:3:"ཱྀ";s:1:"N";s:3:"ྒྷ";s:1:"N";s:3:"ྜྷ";s:1:"N";s:3:"ྡྷ";s:1:"N";s:3:"ྦྷ";s:1:"N";s:3:"ྫྷ";s:1:"N";s:3:"ྐྵ";s:1:"N";s:3:"ά";s:1:"N";s:3:"έ";s:1:"N";s:3:"ή";s:1:"N";s:3:"ί";s:1:"N";s:3:"ό";s:1:"N";s:3:"ύ";s:1:"N";s:3:"ώ";s:1:"N";s:3:"Ά";s:1:"N";s:3:"ι";s:1:"N";s:3:"Έ";s:1:"N";s:3:"Ή";s:1:"N";s:3:"ΐ";s:1:"N";s:3:"Ί";s:1:"N";s:3:"ΰ";s:1:"N";s:3:"Ύ";s:1:"N";s:3:"΅";s:1:"N";s:3:"`";s:1:"N";s:3:"Ό";s:1:"N";s:3:"Ώ";s:1:"N";s:3:"´";s:1:"N";s:3:" ";s:1:"N";s:3:" ";s:1:"N";s:3:"Ω";s:1:"N";s:3:"K";s:1:"N";s:3:"Å";s:1:"N";s:3:"〈";s:1:"N";s:3:"〉";s:1:"N";s:3:"⫝̸";s:1:"N";s:3:"豈";s:1:"N";s:3:"更";s:1:"N";s:3:"車";s:1:"N";s:3:"賈";s:1:"N";s:3:"滑";s:1:"N";s:3:"串";s:1:"N";s:3:"句";s:1:"N";s:3:"龜";s:1:"N";s:3:"龜";s:1:"N";s:3:"契";s:1:"N";s:3:"金";s:1:"N";s:3:"喇";s:1:"N";s:3:"奈";s:1:"N";s:3:"懶";s:1:"N";s:3:"癩";s:1:"N";s:3:"羅";s:1:"N";s:3:"蘿";s:1:"N";s:3:"螺";s:1:"N";s:3:"裸";s:1:"N";s:3:"邏";s:1:"N";s:3:"樂";s:1:"N";s:3:"洛";s:1:"N";s:3:"烙";s:1:"N";s:3:"珞";s:1:"N";s:3:"落";s:1:"N";s:3:"酪";s:1:"N";s:3:"駱";s:1:"N";s:3:"亂";s:1:"N";s:3:"卵";s:1:"N";s:3:"欄";s:1:"N";s:3:"爛";s:1:"N";s:3:"蘭";s:1:"N";s:3:"鸞";s:1:"N";s:3:"嵐";s:1:"N";s:3:"濫";s:1:"N";s:3:"藍";s:1:"N";s:3:"襤";s:1:"N";s:3:"拉";s:1:"N";s:3:"臘";s:1:"N";s:3:"蠟";s:1:"N";s:3:"廊";s:1:"N";s:3:"朗";s:1:"N";s:3:"浪";s:1:"N";s:3:"狼";s:1:"N";s:3:"郎";s:1:"N";s:3:"來";s:1:"N";s:3:"冷";s:1:"N";s:3:"勞";s:1:"N";s:3:"擄";s:1:"N";s:3:"櫓";s:1:"N";s:3:"爐";s:1:"N";s:3:"盧";s:1:"N";s:3:"老";s:1:"N";s:3:"蘆";s:1:"N";s:3:"虜";s:1:"N";s:3:"路";s:1:"N";s:3:"露";s:1:"N";s:3:"魯";s:1:"N";s:3:"鷺";s:1:"N";s:3:"碌";s:1:"N";s:3:"祿";s:1:"N";s:3:"綠";s:1:"N";s:3:"菉";s:1:"N";s:3:"錄";s:1:"N";s:3:"鹿";s:1:"N";s:3:"論";s:1:"N";s:3:"壟";s:1:"N";s:3:"弄";s:1:"N";s:3:"籠";s:1:"N";s:3:"聾";s:1:"N";s:3:"牢";s:1:"N";s:3:"磊";s:1:"N";s:3:"賂";s:1:"N";s:3:"雷";s:1:"N";s:3:"壘";s:1:"N";s:3:"屢";s:1:"N";s:3:"樓";s:1:"N";s:3:"淚";s:1:"N";s:3:"漏";s:1:"N";s:3:"累";s:1:"N";s:3:"縷";s:1:"N";s:3:"陋";s:1:"N";s:3:"勒";s:1:"N";s:3:"肋";s:1:"N";s:3:"凜";s:1:"N";s:3:"凌";s:1:"N";s:3:"稜";s:1:"N";s:3:"綾";s:1:"N";s:3:"菱";s:1:"N";s:3:"陵";s:1:"N";s:3:"讀";s:1:"N";s:3:"拏";s:1:"N";s:3:"樂";s:1:"N";s:3:"諾";s:1:"N";s:3:"丹";s:1:"N";s:3:"寧";s:1:"N";s:3:"怒";s:1:"N";s:3:"率";s:1:"N";s:3:"異";s:1:"N";s:3:"北";s:1:"N";s:3:"磻";s:1:"N";s:3:"便";s:1:"N";s:3:"復";s:1:"N";s:3:"不";s:1:"N";s:3:"泌";s:1:"N";s:3:"數";s:1:"N";s:3:"索";s:1:"N";s:3:"參";s:1:"N";s:3:"塞";s:1:"N";s:3:"省";s:1:"N";s:3:"葉";s:1:"N";s:3:"說";s:1:"N";s:3:"殺";s:1:"N";s:3:"辰";s:1:"N";s:3:"沈";s:1:"N";s:3:"拾";s:1:"N";s:3:"若";s:1:"N";s:3:"掠";s:1:"N";s:3:"略";s:1:"N";s:3:"亮";s:1:"N";s:3:"兩";s:1:"N";s:3:"凉";s:1:"N";s:3:"梁";s:1:"N";s:3:"糧";s:1:"N";s:3:"良";s:1:"N";s:3:"諒";s:1:"N";s:3:"量";s:1:"N";s:3:"勵";s:1:"N";s:3:"呂";s:1:"N";s:3:"女";s:1:"N";s:3:"廬";s:1:"N";s:3:"旅";s:1:"N";s:3:"濾";s:1:"N";s:3:"礪";s:1:"N";s:3:"閭";s:1:"N";s:3:"驪";s:1:"N";s:3:"麗";s:1:"N";s:3:"黎";s:1:"N";s:3:"力";s:1:"N";s:3:"曆";s:1:"N";s:3:"歷";s:1:"N";s:3:"轢";s:1:"N";s:3:"年";s:1:"N";s:3:"憐";s:1:"N";s:3:"戀";s:1:"N";s:3:"撚";s:1:"N";s:3:"漣";s:1:"N";s:3:"煉";s:1:"N";s:3:"璉";s:1:"N";s:3:"秊";s:1:"N";s:3:"練";s:1:"N";s:3:"聯";s:1:"N";s:3:"輦";s:1:"N";s:3:"蓮";s:1:"N";s:3:"連";s:1:"N";s:3:"鍊";s:1:"N";s:3:"列";s:1:"N";s:3:"劣";s:1:"N";s:3:"咽";s:1:"N";s:3:"烈";s:1:"N";s:3:"裂";s:1:"N";s:3:"說";s:1:"N";s:3:"廉";s:1:"N";s:3:"念";s:1:"N";s:3:"捻";s:1:"N";s:3:"殮";s:1:"N";s:3:"簾";s:1:"N";s:3:"獵";s:1:"N";s:3:"令";s:1:"N";s:3:"囹";s:1:"N";s:3:"寧";s:1:"N";s:3:"嶺";s:1:"N";s:3:"怜";s:1:"N";s:3:"玲";s:1:"N";s:3:"瑩";s:1:"N";s:3:"羚";s:1:"N";s:3:"聆";s:1:"N";s:3:"鈴";s:1:"N";s:3:"零";s:1:"N";s:3:"靈";s:1:"N";s:3:"領";s:1:"N";s:3:"例";s:1:"N";s:3:"禮";s:1:"N";s:3:"醴";s:1:"N";s:3:"隸";s:1:"N";s:3:"惡";s:1:"N";s:3:"了";s:1:"N";s:3:"僚";s:1:"N";s:3:"寮";s:1:"N";s:3:"尿";s:1:"N";s:3:"料";s:1:"N";s:3:"樂";s:1:"N";s:3:"燎";s:1:"N";s:3:"療";s:1:"N";s:3:"蓼";s:1:"N";s:3:"遼";s:1:"N";s:3:"龍";s:1:"N";s:3:"暈";s:1:"N";s:3:"阮";s:1:"N";s:3:"劉";s:1:"N";s:3:"杻";s:1:"N";s:3:"柳";s:1:"N";s:3:"流";s:1:"N";s:3:"溜";s:1:"N";s:3:"琉";s:1:"N";s:3:"留";s:1:"N";s:3:"硫";s:1:"N";s:3:"紐";s:1:"N";s:3:"類";s:1:"N";s:3:"六";s:1:"N";s:3:"戮";s:1:"N";s:3:"陸";s:1:"N";s:3:"倫";s:1:"N";s:3:"崙";s:1:"N";s:3:"淪";s:1:"N";s:3:"輪";s:1:"N";s:3:"律";s:1:"N";s:3:"慄";s:1:"N";s:3:"栗";s:1:"N";s:3:"率";s:1:"N";s:3:"隆";s:1:"N";s:3:"利";s:1:"N";s:3:"吏";s:1:"N";s:3:"履";s:1:"N";s:3:"易";s:1:"N";s:3:"李";s:1:"N";s:3:"梨";s:1:"N";s:3:"泥";s:1:"N";s:3:"理";s:1:"N";s:3:"痢";s:1:"N";s:3:"罹";s:1:"N";s:3:"裏";s:1:"N";s:3:"裡";s:1:"N";s:3:"里";s:1:"N";s:3:"離";s:1:"N";s:3:"匿";s:1:"N";s:3:"溺";s:1:"N";s:3:"吝";s:1:"N";s:3:"燐";s:1:"N";s:3:"璘";s:1:"N";s:3:"藺";s:1:"N";s:3:"隣";s:1:"N";s:3:"鱗";s:1:"N";s:3:"麟";s:1:"N";s:3:"林";s:1:"N";s:3:"淋";s:1:"N";s:3:"臨";s:1:"N";s:3:"立";s:1:"N";s:3:"笠";s:1:"N";s:3:"粒";s:1:"N";s:3:"狀";s:1:"N";s:3:"炙";s:1:"N";s:3:"識";s:1:"N";s:3:"什";s:1:"N";s:3:"茶";s:1:"N";s:3:"刺";s:1:"N";s:3:"切";s:1:"N";s:3:"度";s:1:"N";s:3:"拓";s:1:"N";s:3:"糖";s:1:"N";s:3:"宅";s:1:"N";s:3:"洞";s:1:"N";s:3:"暴";s:1:"N";s:3:"輻";s:1:"N";s:3:"行";s:1:"N";s:3:"降";s:1:"N";s:3:"見";s:1:"N";s:3:"廓";s:1:"N";s:3:"兀";s:1:"N";s:3:"嗀";s:1:"N";s:3:"塚";s:1:"N";s:3:"晴";s:1:"N";s:3:"凞";s:1:"N";s:3:"猪";s:1:"N";s:3:"益";s:1:"N";s:3:"礼";s:1:"N";s:3:"神";s:1:"N";s:3:"祥";s:1:"N";s:3:"福";s:1:"N";s:3:"靖";s:1:"N";s:3:"精";s:1:"N";s:3:"羽";s:1:"N";s:3:"蘒";s:1:"N";s:3:"諸";s:1:"N";s:3:"逸";s:1:"N";s:3:"都";s:1:"N";s:3:"飯";s:1:"N";s:3:"飼";s:1:"N";s:3:"館";s:1:"N";s:3:"鶴";s:1:"N";s:3:"侮";s:1:"N";s:3:"僧";s:1:"N";s:3:"免";s:1:"N";s:3:"勉";s:1:"N";s:3:"勤";s:1:"N";s:3:"卑";s:1:"N";s:3:"喝";s:1:"N";s:3:"嘆";s:1:"N";s:3:"器";s:1:"N";s:3:"塀";s:1:"N";s:3:"墨";s:1:"N";s:3:"層";s:1:"N";s:3:"屮";s:1:"N";s:3:"悔";s:1:"N";s:3:"慨";s:1:"N";s:3:"憎";s:1:"N";s:3:"懲";s:1:"N";s:3:"敏";s:1:"N";s:3:"既";s:1:"N";s:3:"暑";s:1:"N";s:3:"梅";s:1:"N";s:3:"海";s:1:"N";s:3:"渚";s:1:"N";s:3:"漢";s:1:"N";s:3:"煮";s:1:"N";s:3:"爫";s:1:"N";s:3:"琢";s:1:"N";s:3:"碑";s:1:"N";s:3:"社";s:1:"N";s:3:"祉";s:1:"N";s:3:"祈";s:1:"N";s:3:"祐";s:1:"N";s:3:"祖";s:1:"N";s:3:"祝";s:1:"N";s:3:"禍";s:1:"N";s:3:"禎";s:1:"N";s:3:"穀";s:1:"N";s:3:"突";s:1:"N";s:3:"節";s:1:"N";s:3:"練";s:1:"N";s:3:"縉";s:1:"N";s:3:"繁";s:1:"N";s:3:"署";s:1:"N";s:3:"者";s:1:"N";s:3:"臭";s:1:"N";s:3:"艹";s:1:"N";s:3:"艹";s:1:"N";s:3:"著";s:1:"N";s:3:"褐";s:1:"N";s:3:"視";s:1:"N";s:3:"謁";s:1:"N";s:3:"謹";s:1:"N";s:3:"賓";s:1:"N";s:3:"贈";s:1:"N";s:3:"辶";s:1:"N";s:3:"逸";s:1:"N";s:3:"難";s:1:"N";s:3:"響";s:1:"N";s:3:"頻";s:1:"N";s:3:"恵";s:1:"N";s:3:"𤋮";s:1:"N";s:3:"舘";s:1:"N";s:3:"並";s:1:"N";s:3:"况";s:1:"N";s:3:"全";s:1:"N";s:3:"侀";s:1:"N";s:3:"充";s:1:"N";s:3:"冀";s:1:"N";s:3:"勇";s:1:"N";s:3:"勺";s:1:"N";s:3:"喝";s:1:"N";s:3:"啕";s:1:"N";s:3:"喙";s:1:"N";s:3:"嗢";s:1:"N";s:3:"塚";s:1:"N";s:3:"墳";s:1:"N";s:3:"奄";s:1:"N";s:3:"奔";s:1:"N";s:3:"婢";s:1:"N";s:3:"嬨";s:1:"N";s:3:"廒";s:1:"N";s:3:"廙";s:1:"N";s:3:"彩";s:1:"N";s:3:"徭";s:1:"N";s:3:"惘";s:1:"N";s:3:"慎";s:1:"N";s:3:"愈";s:1:"N";s:3:"憎";s:1:"N";s:3:"慠";s:1:"N";s:3:"懲";s:1:"N";s:3:"戴";s:1:"N";s:3:"揄";s:1:"N";s:3:"搜";s:1:"N";s:3:"摒";s:1:"N";s:3:"敖";s:1:"N";s:3:"晴";s:1:"N";s:3:"朗";s:1:"N";s:3:"望";s:1:"N";s:3:"杖";s:1:"N";s:3:"歹";s:1:"N";s:3:"殺";s:1:"N";s:3:"流";s:1:"N";s:3:"滛";s:1:"N";s:3:"滋";s:1:"N";s:3:"漢";s:1:"N";s:3:"瀞";s:1:"N";s:3:"煮";s:1:"N";s:3:"瞧";s:1:"N";s:3:"爵";s:1:"N";s:3:"犯";s:1:"N";s:3:"猪";s:1:"N";s:3:"瑱";s:1:"N";s:3:"甆";s:1:"N";s:3:"画";s:1:"N";s:3:"瘝";s:1:"N";s:3:"瘟";s:1:"N";s:3:"益";s:1:"N";s:3:"盛";s:1:"N";s:3:"直";s:1:"N";s:3:"睊";s:1:"N";s:3:"着";s:1:"N";s:3:"磌";s:1:"N";s:3:"窱";s:1:"N";s:3:"節";s:1:"N";s:3:"类";s:1:"N";s:3:"絛";s:1:"N";s:3:"練";s:1:"N";s:3:"缾";s:1:"N";s:3:"者";s:1:"N";s:3:"荒";s:1:"N";s:3:"華";s:1:"N";s:3:"蝹";s:1:"N";s:3:"襁";s:1:"N";s:3:"覆";s:1:"N";s:3:"視";s:1:"N";s:3:"調";s:1:"N";s:3:"諸";s:1:"N";s:3:"請";s:1:"N";s:3:"謁";s:1:"N";s:3:"諾";s:1:"N";s:3:"諭";s:1:"N";s:3:"謹";s:1:"N";s:3:"變";s:1:"N";s:3:"贈";s:1:"N";s:3:"輸";s:1:"N";s:3:"遲";s:1:"N";s:3:"醙";s:1:"N";s:3:"鉶";s:1:"N";s:3:"陼";s:1:"N";s:3:"難";s:1:"N";s:3:"靖";s:1:"N";s:3:"韛";s:1:"N";s:3:"響";s:1:"N";s:3:"頋";s:1:"N";s:3:"頻";s:1:"N";s:3:"鬒";s:1:"N";s:3:"龜";s:1:"N";s:3:"𢡊";s:1:"N";s:3:"𢡄";s:1:"N";s:3:"𣏕";s:1:"N";s:3:"㮝";s:1:"N";s:3:"䀘";s:1:"N";s:3:"䀹";s:1:"N";s:3:"𥉉";s:1:"N";s:3:"𥳐";s:1:"N";s:3:"𧻓";s:1:"N";s:3:"齃";s:1:"N";s:3:"龎";s:1:"N";s:3:"יִ";s:1:"N";s:3:"ײַ";s:1:"N";s:3:"שׁ";s:1:"N";s:3:"שׂ";s:1:"N";s:3:"שּׁ";s:1:"N";s:3:"שּׂ";s:1:"N";s:3:"אַ";s:1:"N";s:3:"אָ";s:1:"N";s:3:"אּ";s:1:"N";s:3:"בּ";s:1:"N";s:3:"גּ";s:1:"N";s:3:"דּ";s:1:"N";s:3:"הּ";s:1:"N";s:3:"וּ";s:1:"N";s:3:"זּ";s:1:"N";s:3:"טּ";s:1:"N";s:3:"יּ";s:1:"N";s:3:"ךּ";s:1:"N";s:3:"כּ";s:1:"N";s:3:"לּ";s:1:"N";s:3:"מּ";s:1:"N";s:3:"נּ";s:1:"N";s:3:"סּ";s:1:"N";s:3:"ףּ";s:1:"N";s:3:"פּ";s:1:"N";s:3:"צּ";s:1:"N";s:3:"קּ";s:1:"N";s:3:"רּ";s:1:"N";s:3:"שּ";s:1:"N";s:3:"תּ";s:1:"N";s:3:"וֹ";s:1:"N";s:3:"בֿ";s:1:"N";s:3:"כֿ";s:1:"N";s:3:"פֿ";s:1:"N";s:4:"𝅗𝅥";s:1:"N";s:4:"𝅘𝅥";s:1:"N";s:4:"𝅘𝅥𝅮";s:1:"N";s:4:"𝅘𝅥𝅯";s:1:"N";s:4:"𝅘𝅥𝅰";s:1:"N";s:4:"𝅘𝅥𝅱";s:1:"N";s:4:"𝅘𝅥𝅲";s:1:"N";s:4:"𝆹𝅥";s:1:"N";s:4:"𝆺𝅥";s:1:"N";s:4:"𝆹𝅥𝅮";s:1:"N";s:4:"𝆺𝅥𝅮";s:1:"N";s:4:"𝆹𝅥𝅯";s:1:"N";s:4:"𝆺𝅥𝅯";s:1:"N";s:4:"丽";s:1:"N";s:4:"丸";s:1:"N";s:4:"乁";s:1:"N";s:4:"𠄢";s:1:"N";s:4:"你";s:1:"N";s:4:"侮";s:1:"N";s:4:"侻";s:1:"N";s:4:"倂";s:1:"N";s:4:"偺";s:1:"N";s:4:"備";s:1:"N";s:4:"僧";s:1:"N";s:4:"像";s:1:"N";s:4:"㒞";s:1:"N";s:4:"𠘺";s:1:"N";s:4:"免";s:1:"N";s:4:"兔";s:1:"N";s:4:"兤";s:1:"N";s:4:"具";s:1:"N";s:4:"𠔜";s:1:"N";s:4:"㒹";s:1:"N";s:4:"內";s:1:"N";s:4:"再";s:1:"N";s:4:"𠕋";s:1:"N";s:4:"冗";s:1:"N";s:4:"冤";s:1:"N";s:4:"仌";s:1:"N";s:4:"冬";s:1:"N";s:4:"况";s:1:"N";s:4:"𩇟";s:1:"N";s:4:"凵";s:1:"N";s:4:"刃";s:1:"N";s:4:"㓟";s:1:"N";s:4:"刻";s:1:"N";s:4:"剆";s:1:"N";s:4:"割";s:1:"N";s:4:"剷";s:1:"N";s:4:"㔕";s:1:"N";s:4:"勇";s:1:"N";s:4:"勉";s:1:"N";s:4:"勤";s:1:"N";s:4:"勺";s:1:"N";s:4:"包";s:1:"N";s:4:"匆";s:1:"N";s:4:"北";s:1:"N";s:4:"卉";s:1:"N";s:4:"卑";s:1:"N";s:4:"博";s:1:"N";s:4:"即";s:1:"N";s:4:"卽";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"𠨬";s:1:"N";s:4:"灰";s:1:"N";s:4:"及";s:1:"N";s:4:"叟";s:1:"N";s:4:"𠭣";s:1:"N";s:4:"叫";s:1:"N";s:4:"叱";s:1:"N";s:4:"吆";s:1:"N";s:4:"咞";s:1:"N";s:4:"吸";s:1:"N";s:4:"呈";s:1:"N";s:4:"周";s:1:"N";s:4:"咢";s:1:"N";s:4:"哶";s:1:"N";s:4:"唐";s:1:"N";s:4:"啓";s:1:"N";s:4:"啣";s:1:"N";s:4:"善";s:1:"N";s:4:"善";s:1:"N";s:4:"喙";s:1:"N";s:4:"喫";s:1:"N";s:4:"喳";s:1:"N";s:4:"嗂";s:1:"N";s:4:"圖";s:1:"N";s:4:"嘆";s:1:"N";s:4:"圗";s:1:"N";s:4:"噑";s:1:"N";s:4:"噴";s:1:"N";s:4:"切";s:1:"N";s:4:"壮";s:1:"N";s:4:"城";s:1:"N";s:4:"埴";s:1:"N";s:4:"堍";s:1:"N";s:4:"型";s:1:"N";s:4:"堲";s:1:"N";s:4:"報";s:1:"N";s:4:"墬";s:1:"N";s:4:"𡓤";s:1:"N";s:4:"売";s:1:"N";s:4:"壷";s:1:"N";s:4:"夆";s:1:"N";s:4:"多";s:1:"N";s:4:"夢";s:1:"N";s:4:"奢";s:1:"N";s:4:"𡚨";s:1:"N";s:4:"𡛪";s:1:"N";s:4:"姬";s:1:"N";s:4:"娛";s:1:"N";s:4:"娧";s:1:"N";s:4:"姘";s:1:"N";s:4:"婦";s:1:"N";s:4:"㛮";s:1:"N";s:4:"㛼";s:1:"N";s:4:"嬈";s:1:"N";s:4:"嬾";s:1:"N";s:4:"嬾";s:1:"N";s:4:"𡧈";s:1:"N";s:4:"寃";s:1:"N";s:4:"寘";s:1:"N";s:4:"寧";s:1:"N";s:4:"寳";s:1:"N";s:4:"𡬘";s:1:"N";s:4:"寿";s:1:"N";s:4:"将";s:1:"N";s:4:"当";s:1:"N";s:4:"尢";s:1:"N";s:4:"㞁";s:1:"N";s:4:"屠";s:1:"N";s:4:"屮";s:1:"N";s:4:"峀";s:1:"N";s:4:"岍";s:1:"N";s:4:"𡷤";s:1:"N";s:4:"嵃";s:1:"N";s:4:"𡷦";s:1:"N";s:4:"嵮";s:1:"N";s:4:"嵫";s:1:"N";s:4:"嵼";s:1:"N";s:4:"巡";s:1:"N";s:4:"巢";s:1:"N";s:4:"㠯";s:1:"N";s:4:"巽";s:1:"N";s:4:"帨";s:1:"N";s:4:"帽";s:1:"N";s:4:"幩";s:1:"N";s:4:"㡢";s:1:"N";s:4:"𢆃";s:1:"N";s:4:"㡼";s:1:"N";s:4:"庰";s:1:"N";s:4:"庳";s:1:"N";s:4:"庶";s:1:"N";s:4:"廊";s:1:"N";s:4:"𪎒";s:1:"N";s:4:"廾";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"舁";s:1:"N";s:4:"弢";s:1:"N";s:4:"弢";s:1:"N";s:4:"㣇";s:1:"N";s:4:"𣊸";s:1:"N";s:4:"𦇚";s:1:"N";s:4:"形";s:1:"N";s:4:"彫";s:1:"N";s:4:"㣣";s:1:"N";s:4:"徚";s:1:"N";s:4:"忍";s:1:"N";s:4:"志";s:1:"N";s:4:"忹";s:1:"N";s:4:"悁";s:1:"N";s:4:"㤺";s:1:"N";s:4:"㤜";s:1:"N";s:4:"悔";s:1:"N";s:4:"𢛔";s:1:"N";s:4:"惇";s:1:"N";s:4:"慈";s:1:"N";s:4:"慌";s:1:"N";s:4:"慎";s:1:"N";s:4:"慌";s:1:"N";s:4:"慺";s:1:"N";s:4:"憎";s:1:"N";s:4:"憲";s:1:"N";s:4:"憤";s:1:"N";s:4:"憯";s:1:"N";s:4:"懞";s:1:"N";s:4:"懲";s:1:"N";s:4:"懶";s:1:"N";s:4:"成";s:1:"N";s:4:"戛";s:1:"N";s:4:"扝";s:1:"N";s:4:"抱";s:1:"N";s:4:"拔";s:1:"N";s:4:"捐";s:1:"N";s:4:"𢬌";s:1:"N";s:4:"挽";s:1:"N";s:4:"拼";s:1:"N";s:4:"捨";s:1:"N";s:4:"掃";s:1:"N";s:4:"揤";s:1:"N";s:4:"𢯱";s:1:"N";s:4:"搢";s:1:"N";s:4:"揅";s:1:"N";s:4:"掩";s:1:"N";s:4:"㨮";s:1:"N";s:4:"摩";s:1:"N";s:4:"摾";s:1:"N";s:4:"撝";s:1:"N";s:4:"摷";s:1:"N";s:4:"㩬";s:1:"N";s:4:"敏";s:1:"N";s:4:"敬";s:1:"N";s:4:"𣀊";s:1:"N";s:4:"旣";s:1:"N";s:4:"書";s:1:"N";s:4:"晉";s:1:"N";s:4:"㬙";s:1:"N";s:4:"暑";s:1:"N";s:4:"㬈";s:1:"N";s:4:"㫤";s:1:"N";s:4:"冒";s:1:"N";s:4:"冕";s:1:"N";s:4:"最";s:1:"N";s:4:"暜";s:1:"N";s:4:"肭";s:1:"N";s:4:"䏙";s:1:"N";s:4:"朗";s:1:"N";s:4:"望";s:1:"N";s:4:"朡";s:1:"N";s:4:"杞";s:1:"N";s:4:"杓";s:1:"N";s:4:"𣏃";s:1:"N";s:4:"㭉";s:1:"N";s:4:"柺";s:1:"N";s:4:"枅";s:1:"N";s:4:"桒";s:1:"N";s:4:"梅";s:1:"N";s:4:"𣑭";s:1:"N";s:4:"梎";s:1:"N";s:4:"栟";s:1:"N";s:4:"椔";s:1:"N";s:4:"㮝";s:1:"N";s:4:"楂";s:1:"N";s:4:"榣";s:1:"N";s:4:"槪";s:1:"N";s:4:"檨";s:1:"N";s:4:"𣚣";s:1:"N";s:4:"櫛";s:1:"N";s:4:"㰘";s:1:"N";s:4:"次";s:1:"N";s:4:"𣢧";s:1:"N";s:4:"歔";s:1:"N";s:4:"㱎";s:1:"N";s:4:"歲";s:1:"N";s:4:"殟";s:1:"N";s:4:"殺";s:1:"N";s:4:"殻";s:1:"N";s:4:"𣪍";s:1:"N";s:4:"𡴋";s:1:"N";s:4:"𣫺";s:1:"N";s:4:"汎";s:1:"N";s:4:"𣲼";s:1:"N";s:4:"沿";s:1:"N";s:4:"泍";s:1:"N";s:4:"汧";s:1:"N";s:4:"洖";s:1:"N";s:4:"派";s:1:"N";s:4:"海";s:1:"N";s:4:"流";s:1:"N";s:4:"浩";s:1:"N";s:4:"浸";s:1:"N";s:4:"涅";s:1:"N";s:4:"𣴞";s:1:"N";s:4:"洴";s:1:"N";s:4:"港";s:1:"N";s:4:"湮";s:1:"N";s:4:"㴳";s:1:"N";s:4:"滋";s:1:"N";s:4:"滇";s:1:"N";s:4:"𣻑";s:1:"N";s:4:"淹";s:1:"N";s:4:"潮";s:1:"N";s:4:"𣽞";s:1:"N";s:4:"𣾎";s:1:"N";s:4:"濆";s:1:"N";s:4:"瀹";s:1:"N";s:4:"瀞";s:1:"N";s:4:"瀛";s:1:"N";s:4:"㶖";s:1:"N";s:4:"灊";s:1:"N";s:4:"災";s:1:"N";s:4:"灷";s:1:"N";s:4:"炭";s:1:"N";s:4:"𠔥";s:1:"N";s:4:"煅";s:1:"N";s:4:"𤉣";s:1:"N";s:4:"熜";s:1:"N";s:4:"𤎫";s:1:"N";s:4:"爨";s:1:"N";s:4:"爵";s:1:"N";s:4:"牐";s:1:"N";s:4:"𤘈";s:1:"N";s:4:"犀";s:1:"N";s:4:"犕";s:1:"N";s:4:"𤜵";s:1:"N";s:4:"𤠔";s:1:"N";s:4:"獺";s:1:"N";s:4:"王";s:1:"N";s:4:"㺬";s:1:"N";s:4:"玥";s:1:"N";s:4:"㺸";s:1:"N";s:4:"㺸";s:1:"N";s:4:"瑇";s:1:"N";s:4:"瑜";s:1:"N";s:4:"瑱";s:1:"N";s:4:"璅";s:1:"N";s:4:"瓊";s:1:"N";s:4:"㼛";s:1:"N";s:4:"甤";s:1:"N";s:4:"𤰶";s:1:"N";s:4:"甾";s:1:"N";s:4:"𤲒";s:1:"N";s:4:"異";s:1:"N";s:4:"𢆟";s:1:"N";s:4:"瘐";s:1:"N";s:4:"𤾡";s:1:"N";s:4:"𤾸";s:1:"N";s:4:"𥁄";s:1:"N";s:4:"㿼";s:1:"N";s:4:"䀈";s:1:"N";s:4:"直";s:1:"N";s:4:"𥃳";s:1:"N";s:4:"𥃲";s:1:"N";s:4:"𥄙";s:1:"N";s:4:"𥄳";s:1:"N";s:4:"眞";s:1:"N";s:4:"真";s:1:"N";s:4:"真";s:1:"N";s:4:"睊";s:1:"N";s:4:"䀹";s:1:"N";s:4:"瞋";s:1:"N";s:4:"䁆";s:1:"N";s:4:"䂖";s:1:"N";s:4:"𥐝";s:1:"N";s:4:"硎";s:1:"N";s:4:"碌";s:1:"N";s:4:"磌";s:1:"N";s:4:"䃣";s:1:"N";s:4:"𥘦";s:1:"N";s:4:"祖";s:1:"N";s:4:"𥚚";s:1:"N";s:4:"𥛅";s:1:"N";s:4:"福";s:1:"N";s:4:"秫";s:1:"N";s:4:"䄯";s:1:"N";s:4:"穀";s:1:"N";s:4:"穊";s:1:"N";s:4:"穏";s:1:"N";s:4:"𥥼";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"竮";s:1:"N";s:4:"䈂";s:1:"N";s:4:"𥮫";s:1:"N";s:4:"篆";s:1:"N";s:4:"築";s:1:"N";s:4:"䈧";s:1:"N";s:4:"𥲀";s:1:"N";s:4:"糒";s:1:"N";s:4:"䊠";s:1:"N";s:4:"糨";s:1:"N";s:4:"糣";s:1:"N";s:4:"紀";s:1:"N";s:4:"𥾆";s:1:"N";s:4:"絣";s:1:"N";s:4:"䌁";s:1:"N";s:4:"緇";s:1:"N";s:4:"縂";s:1:"N";s:4:"繅";s:1:"N";s:4:"䌴";s:1:"N";s:4:"𦈨";s:1:"N";s:4:"𦉇";s:1:"N";s:4:"䍙";s:1:"N";s:4:"𦋙";s:1:"N";s:4:"罺";s:1:"N";s:4:"𦌾";s:1:"N";s:4:"羕";s:1:"N";s:4:"翺";s:1:"N";s:4:"者";s:1:"N";s:4:"𦓚";s:1:"N";s:4:"𦔣";s:1:"N";s:4:"聠";s:1:"N";s:4:"𦖨";s:1:"N";s:4:"聰";s:1:"N";s:4:"𣍟";s:1:"N";s:4:"䏕";s:1:"N";s:4:"育";s:1:"N";s:4:"脃";s:1:"N";s:4:"䐋";s:1:"N";s:4:"脾";s:1:"N";s:4:"媵";s:1:"N";s:4:"𦞧";s:1:"N";s:4:"𦞵";s:1:"N";s:4:"𣎓";s:1:"N";s:4:"𣎜";s:1:"N";s:4:"舁";s:1:"N";s:4:"舄";s:1:"N";s:4:"辞";s:1:"N";s:4:"䑫";s:1:"N";s:4:"芑";s:1:"N";s:4:"芋";s:1:"N";s:4:"芝";s:1:"N";s:4:"劳";s:1:"N";s:4:"花";s:1:"N";s:4:"芳";s:1:"N";s:4:"芽";s:1:"N";s:4:"苦";s:1:"N";s:4:"𦬼";s:1:"N";s:4:"若";s:1:"N";s:4:"茝";s:1:"N";s:4:"荣";s:1:"N";s:4:"莭";s:1:"N";s:4:"茣";s:1:"N";s:4:"莽";s:1:"N";s:4:"菧";s:1:"N";s:4:"著";s:1:"N";s:4:"荓";s:1:"N";s:4:"菊";s:1:"N";s:4:"菌";s:1:"N";s:4:"菜";s:1:"N";s:4:"𦰶";s:1:"N";s:4:"𦵫";s:1:"N";s:4:"𦳕";s:1:"N";s:4:"䔫";s:1:"N";s:4:"蓱";s:1:"N";s:4:"蓳";s:1:"N";s:4:"蔖";s:1:"N";s:4:"𧏊";s:1:"N";s:4:"蕤";s:1:"N";s:4:"𦼬";s:1:"N";s:4:"䕝";s:1:"N";s:4:"䕡";s:1:"N";s:4:"𦾱";s:1:"N";s:4:"𧃒";s:1:"N";s:4:"䕫";s:1:"N";s:4:"虐";s:1:"N";s:4:"虜";s:1:"N";s:4:"虧";s:1:"N";s:4:"虩";s:1:"N";s:4:"蚩";s:1:"N";s:4:"蚈";s:1:"N";s:4:"蜎";s:1:"N";s:4:"蛢";s:1:"N";s:4:"蝹";s:1:"N";s:4:"蜨";s:1:"N";s:4:"蝫";s:1:"N";s:4:"螆";s:1:"N";s:4:"䗗";s:1:"N";s:4:"蟡";s:1:"N";s:4:"蠁";s:1:"N";s:4:"䗹";s:1:"N";s:4:"衠";s:1:"N";s:4:"衣";s:1:"N";s:4:"𧙧";s:1:"N";s:4:"裗";s:1:"N";s:4:"裞";s:1:"N";s:4:"䘵";s:1:"N";s:4:"裺";s:1:"N";s:4:"㒻";s:1:"N";s:4:"𧢮";s:1:"N";s:4:"𧥦";s:1:"N";s:4:"䚾";s:1:"N";s:4:"䛇";s:1:"N";s:4:"誠";s:1:"N";s:4:"諭";s:1:"N";s:4:"變";s:1:"N";s:4:"豕";s:1:"N";s:4:"𧲨";s:1:"N";s:4:"貫";s:1:"N";s:4:"賁";s:1:"N";s:4:"贛";s:1:"N";s:4:"起";s:1:"N";s:4:"𧼯";s:1:"N";s:4:"𠠄";s:1:"N";s:4:"跋";s:1:"N";s:4:"趼";s:1:"N";s:4:"跰";s:1:"N";s:4:"𠣞";s:1:"N";s:4:"軔";s:1:"N";s:4:"輸";s:1:"N";s:4:"𨗒";s:1:"N";s:4:"𨗭";s:1:"N";s:4:"邔";s:1:"N";s:4:"郱";s:1:"N";s:4:"鄑";s:1:"N";s:4:"𨜮";s:1:"N";s:4:"鄛";s:1:"N";s:4:"鈸";s:1:"N";s:4:"鋗";s:1:"N";s:4:"鋘";s:1:"N";s:4:"鉼";s:1:"N";s:4:"鏹";s:1:"N";s:4:"鐕";s:1:"N";s:4:"𨯺";s:1:"N";s:4:"開";s:1:"N";s:4:"䦕";s:1:"N";s:4:"閷";s:1:"N";s:4:"𨵷";s:1:"N";s:4:"䧦";s:1:"N";s:4:"雃";s:1:"N";s:4:"嶲";s:1:"N";s:4:"霣";s:1:"N";s:4:"𩅅";s:1:"N";s:4:"𩈚";s:1:"N";s:4:"䩮";s:1:"N";s:4:"䩶";s:1:"N";s:4:"韠";s:1:"N";s:4:"𩐊";s:1:"N";s:4:"䪲";s:1:"N";s:4:"𩒖";s:1:"N";s:4:"頋";s:1:"N";s:4:"頋";s:1:"N";s:4:"頩";s:1:"N";s:4:"𩖶";s:1:"N";s:4:"飢";s:1:"N";s:4:"䬳";s:1:"N";s:4:"餩";s:1:"N";s:4:"馧";s:1:"N";s:4:"駂";s:1:"N";s:4:"駾";s:1:"N";s:4:"䯎";s:1:"N";s:4:"𩬰";s:1:"N";s:4:"鬒";s:1:"N";s:4:"鱀";s:1:"N";s:4:"鳽";s:1:"N";s:4:"䳎";s:1:"N";s:4:"䳭";s:1:"N";s:4:"鵧";s:1:"N";s:4:"𪃎";s:1:"N";s:4:"䳸";s:1:"N";s:4:"𪄅";s:1:"N";s:4:"𪈎";s:1:"N";s:4:"𪊑";s:1:"N";s:4:"麻";s:1:"N";s:4:"䵖";s:1:"N";s:4:"黹";s:1:"N";s:4:"黾";s:1:"N";s:4:"鼅";s:1:"N";s:4:"鼏";s:1:"N";s:4:"鼖";s:1:"N";s:4:"鼻";s:1:"N";s:4:"𪘀";s:1:"N";s:2:"̀";s:1:"M";s:2:"́";s:1:"M";s:2:"̂";s:1:"M";s:2:"̃";s:1:"M";s:2:"̄";s:1:"M";s:2:"̆";s:1:"M";s:2:"̇";s:1:"M";s:2:"̈";s:1:"M";s:2:"̉";s:1:"M";s:2:"̊";s:1:"M";s:2:"̋";s:1:"M";s:2:"̌";s:1:"M";s:2:"̏";s:1:"M";s:2:"̑";s:1:"M";s:2:"̓";s:1:"M";s:2:"̔";s:1:"M";s:2:"̛";s:1:"M";s:2:"̣";s:1:"M";s:2:"̤";s:1:"M";s:2:"̥";s:1:"M";s:2:"̦";s:1:"M";s:2:"̧";s:1:"M";s:2:"̨";s:1:"M";s:2:"̭";s:1:"M";s:2:"̮";s:1:"M";s:2:"̰";s:1:"M";s:2:"̱";s:1:"M";s:2:"̸";s:1:"M";s:2:"͂";s:1:"M";s:2:"ͅ";s:1:"M";s:2:"ٓ";s:1:"M";s:2:"ٔ";s:1:"M";s:2:"ٕ";s:1:"M";s:3:"़";s:1:"M";s:3:"া";s:1:"M";s:3:"ৗ";s:1:"M";s:3:"ା";s:1:"M";s:3:"ୖ";s:1:"M";s:3:"ୗ";s:1:"M";s:3:"ா";s:1:"M";s:3:"ௗ";s:1:"M";s:3:"ౖ";s:1:"M";s:3:"ೂ";s:1:"M";s:3:"ೕ";s:1:"M";s:3:"ೖ";s:1:"M";s:3:"ാ";s:1:"M";s:3:"ൗ";s:1:"M";s:3:"්";s:1:"M";s:3:"ා";s:1:"M";s:3:"ෟ";s:1:"M";s:3:"ီ";s:1:"M";s:3:"ᅡ";s:1:"M";s:3:"ᅢ";s:1:"M";s:3:"ᅣ";s:1:"M";s:3:"ᅤ";s:1:"M";s:3:"ᅥ";s:1:"M";s:3:"ᅦ";s:1:"M";s:3:"ᅧ";s:1:"M";s:3:"ᅨ";s:1:"M";s:3:"ᅩ";s:1:"M";s:3:"ᅪ";s:1:"M";s:3:"ᅫ";s:1:"M";s:3:"ᅬ";s:1:"M";s:3:"ᅭ";s:1:"M";s:3:"ᅮ";s:1:"M";s:3:"ᅯ";s:1:"M";s:3:"ᅰ";s:1:"M";s:3:"ᅱ";s:1:"M";s:3:"ᅲ";s:1:"M";s:3:"ᅳ";s:1:"M";s:3:"ᅴ";s:1:"M";s:3:"ᅵ";s:1:"M";s:3:"ᆨ";s:1:"M";s:3:"ᆩ";s:1:"M";s:3:"ᆪ";s:1:"M";s:3:"ᆫ";s:1:"M";s:3:"ᆬ";s:1:"M";s:3:"ᆭ";s:1:"M";s:3:"ᆮ";s:1:"M";s:3:"ᆯ";s:1:"M";s:3:"ᆰ";s:1:"M";s:3:"ᆱ";s:1:"M";s:3:"ᆲ";s:1:"M";s:3:"ᆳ";s:1:"M";s:3:"ᆴ";s:1:"M";s:3:"ᆵ";s:1:"M";s:3:"ᆶ";s:1:"M";s:3:"ᆷ";s:1:"M";s:3:"ᆸ";s:1:"M";s:3:"ᆹ";s:1:"M";s:3:"ᆺ";s:1:"M";s:3:"ᆻ";s:1:"M";s:3:"ᆼ";s:1:"M";s:3:"ᆽ";s:1:"M";s:3:"ᆾ";s:1:"M";s:3:"ᆿ";s:1:"M";s:3:"ᇀ";s:1:"M";s:3:"ᇁ";s:1:"M";s:3:"ᇂ";s:1:"M";s:3:"ᬵ";s:1:"M";s:3:"゙";s:1:"M";s:3:"゚";s:1:"M";s:4:"𑂺";s:1:"M";}' );
-
diff --git a/includes/libs/normal/UtfNormalDataK.inc b/includes/libs/normal/UtfNormalDataK.inc
deleted file mode 100644 (file)
index dde3eff..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-/**
- * This file was automatically generated -- do not edit!
- * Run UtfNormalGenerate.php to create this file again (make clean && make)
- *
- * @file
- */
-// @codingStandardsIgnoreFile
-
-UtfNormal::$utfCompatibilityDecomp = unserialize( 'a:5559:{s:2:" ";s:1:" ";s:2:"¨";s:3:" ̈";s:2:"ª";s:1:"a";s:2:"¯";s:3:" ̄";s:2:"²";s:1:"2";s:2:"³";s:1:"3";s:2:"´";s:3:" ́";s:2:"µ";s:2:"μ";s:2:"¸";s:3:" ̧";s:2:"¹";s:1:"1";s:2:"º";s:1:"o";s:2:"¼";s:5:"1⁄4";s:2:"½";s:5:"1⁄2";s:2:"¾";s:5:"3⁄4";s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"IJ";s:2:"IJ";s:2:"ij";s:2:"ij";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ŀ";s:3:"L·";s:2:"ŀ";s:3:"l·";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"ʼn";s:3:"ʼn";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"ſ";s:1:"s";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"DŽ";s:4:"DŽ";s:2:"Dž";s:4:"Dž";s:2:"dž";s:4:"dž";s:2:"LJ";s:2:"LJ";s:2:"Lj";s:2:"Lj";s:2:"lj";s:2:"lj";s:2:"NJ";s:2:"NJ";s:2:"Nj";s:2:"Nj";s:2:"nj";s:2:"nj";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"DZ";s:2:"DZ";s:2:"Dz";s:2:"Dz";s:2:"dz";s:2:"dz";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"ʰ";s:1:"h";s:2:"ʱ";s:2:"ɦ";s:2:"ʲ";s:1:"j";s:2:"ʳ";s:1:"r";s:2:"ʴ";s:2:"ɹ";s:2:"ʵ";s:2:"ɻ";s:2:"ʶ";s:2:"ʁ";s:2:"ʷ";s:1:"w";s:2:"ʸ";s:1:"y";s:2:"˘";s:3:" ̆";s:2:"˙";s:3:" ̇";s:2:"˚";s:3:" ̊";s:2:"˛";s:3:" ̨";s:2:"˜";s:3:" ̃";s:2:"˝";s:3:" ̋";s:2:"ˠ";s:2:"ɣ";s:2:"ˡ";s:1:"l";s:2:"ˢ";s:1:"s";s:2:"ˣ";s:1:"x";s:2:"ˤ";s:2:"ʕ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:"ͺ";s:3:" ͅ";s:2:";";s:1:";";s:2:"΄";s:3:" ́";s:2:"΅";s:5:" ̈́";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϐ";s:2:"β";s:2:"ϑ";s:2:"θ";s:2:"ϒ";s:2:"Υ";s:2:"ϓ";s:4:"Ύ";s:2:"ϔ";s:4:"Ϋ";s:2:"ϕ";s:2:"φ";s:2:"ϖ";s:2:"π";s:2:"ϰ";s:2:"κ";s:2:"ϱ";s:2:"ρ";s:2:"ϲ";s:2:"ς";s:2:"ϴ";s:2:"Θ";s:2:"ϵ";s:2:"ε";s:2:"Ϲ";s:2:"Σ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"և";s:4:"եւ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ٵ";s:4:"اٴ";s:2:"ٶ";s:4:"وٴ";s:2:"ٷ";s:4:"ۇٴ";s:2:"ٸ";s:4:"يٴ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"ำ";s:6:"ํา";s:3:"ຳ";s:6:"ໍາ";s:3:"ໜ";s:6:"ຫນ";s:3:"ໝ";s:6:"ຫມ";s:3:"༌";s:3:"་";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ཷ";s:9:"ྲཱྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཹ";s:9:"ླཱྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ჼ";s:3:"ნ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"ᴬ";s:1:"A";s:3:"ᴭ";s:2:"Æ";s:3:"ᴮ";s:1:"B";s:3:"ᴰ";s:1:"D";s:3:"ᴱ";s:1:"E";s:3:"ᴲ";s:2:"Ǝ";s:3:"ᴳ";s:1:"G";s:3:"ᴴ";s:1:"H";s:3:"ᴵ";s:1:"I";s:3:"ᴶ";s:1:"J";s:3:"ᴷ";s:1:"K";s:3:"ᴸ";s:1:"L";s:3:"ᴹ";s:1:"M";s:3:"ᴺ";s:1:"N";s:3:"ᴼ";s:1:"O";s:3:"ᴽ";s:2:"Ȣ";s:3:"ᴾ";s:1:"P";s:3:"ᴿ";s:1:"R";s:3:"ᵀ";s:1:"T";s:3:"ᵁ";s:1:"U";s:3:"ᵂ";s:1:"W";s:3:"ᵃ";s:1:"a";s:3:"ᵄ";s:2:"ɐ";s:3:"ᵅ";s:2:"ɑ";s:3:"ᵆ";s:3:"ᴂ";s:3:"ᵇ";s:1:"b";s:3:"ᵈ";s:1:"d";s:3:"ᵉ";s:1:"e";s:3:"ᵊ";s:2:"ə";s:3:"ᵋ";s:2:"ɛ";s:3:"ᵌ";s:2:"ɜ";s:3:"ᵍ";s:1:"g";s:3:"ᵏ";s:1:"k";s:3:"ᵐ";s:1:"m";s:3:"ᵑ";s:2:"ŋ";s:3:"ᵒ";s:1:"o";s:3:"ᵓ";s:2:"ɔ";s:3:"ᵔ";s:3:"ᴖ";s:3:"ᵕ";s:3:"ᴗ";s:3:"ᵖ";s:1:"p";s:3:"ᵗ";s:1:"t";s:3:"ᵘ";s:1:"u";s:3:"ᵙ";s:3:"ᴝ";s:3:"ᵚ";s:2:"ɯ";s:3:"ᵛ";s:1:"v";s:3:"ᵜ";s:3:"ᴥ";s:3:"ᵝ";s:2:"β";s:3:"ᵞ";s:2:"γ";s:3:"ᵟ";s:2:"δ";s:3:"ᵠ";s:2:"φ";s:3:"ᵡ";s:2:"χ";s:3:"ᵢ";s:1:"i";s:3:"ᵣ";s:1:"r";s:3:"ᵤ";s:1:"u";s:3:"ᵥ";s:1:"v";s:3:"ᵦ";s:2:"β";s:3:"ᵧ";s:2:"γ";s:3:"ᵨ";s:2:"ρ";s:3:"ᵩ";s:2:"φ";s:3:"ᵪ";s:2:"χ";s:3:"ᵸ";s:2:"н";s:3:"ᶛ";s:2:"ɒ";s:3:"ᶜ";s:1:"c";s:3:"ᶝ";s:2:"ɕ";s:3:"ᶞ";s:2:"ð";s:3:"ᶟ";s:2:"ɜ";s:3:"ᶠ";s:1:"f";s:3:"ᶡ";s:2:"ɟ";s:3:"ᶢ";s:2:"ɡ";s:3:"ᶣ";s:2:"ɥ";s:3:"ᶤ";s:2:"ɨ";s:3:"ᶥ";s:2:"ɩ";s:3:"ᶦ";s:2:"ɪ";s:3:"ᶧ";s:3:"ᵻ";s:3:"ᶨ";s:2:"ʝ";s:3:"ᶩ";s:2:"ɭ";s:3:"ᶪ";s:3:"ᶅ";s:3:"ᶫ";s:2:"ʟ";s:3:"ᶬ";s:2:"ɱ";s:3:"ᶭ";s:2:"ɰ";s:3:"ᶮ";s:2:"ɲ";s:3:"ᶯ";s:2:"ɳ";s:3:"ᶰ";s:2:"ɴ";s:3:"ᶱ";s:2:"ɵ";s:3:"ᶲ";s:2:"ɸ";s:3:"ᶳ";s:2:"ʂ";s:3:"ᶴ";s:2:"ʃ";s:3:"ᶵ";s:2:"ƫ";s:3:"ᶶ";s:2:"ʉ";s:3:"ᶷ";s:2:"ʊ";s:3:"ᶸ";s:3:"ᴜ";s:3:"ᶹ";s:2:"ʋ";s:3:"ᶺ";s:2:"ʌ";s:3:"ᶻ";s:1:"z";s:3:"ᶼ";s:2:"ʐ";s:3:"ᶽ";s:2:"ʑ";s:3:"ᶾ";s:2:"ʒ";s:3:"ᶿ";s:2:"θ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẚ";s:3:"aʾ";s:3:"ẛ";s:3:"ṡ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"᾽";s:3:" ̓";s:3:"ι";s:2:"ι";s:3:"᾿";s:3:" ̓";s:3:"῀";s:3:" ͂";s:3:"῁";s:5:" ̈͂";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:" ̓̀";s:3:"῎";s:5:" ̓́";s:3:"῏";s:5:" ̓͂";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:" ̔̀";s:3:"῞";s:5:" ̔́";s:3:"῟";s:5:" ̔͂";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:5:" ̈̀";s:3:"΅";s:5:" ̈́";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:3:" ́";s:3:"῾";s:3:" ̔";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:"‑";s:3:"‐";s:3:"‗";s:3:" ̳";s:3:"․";s:1:".";s:3:"‥";s:2:"..";s:3:"…";s:3:"...";s:3:" ";s:1:" ";s:3:"″";s:6:"′′";s:3:"‴";s:9:"′′′";s:3:"‶";s:6:"‵‵";s:3:"‷";s:9:"‵‵‵";s:3:"‼";s:2:"!!";s:3:"‾";s:3:" ̅";s:3:"⁇";s:2:"??";s:3:"⁈";s:2:"?!";s:3:"⁉";s:2:"!?";s:3:"⁗";s:12:"′′′′";s:3:" ";s:1:" ";s:3:"⁰";s:1:"0";s:3:"ⁱ";s:1:"i";s:3:"⁴";s:1:"4";s:3:"⁵";s:1:"5";s:3:"⁶";s:1:"6";s:3:"⁷";s:1:"7";s:3:"⁸";s:1:"8";s:3:"⁹";s:1:"9";s:3:"⁺";s:1:"+";s:3:"⁻";s:3:"−";s:3:"⁼";s:1:"=";s:3:"⁽";s:1:"(";s:3:"⁾";s:1:")";s:3:"ⁿ";s:1:"n";s:3:"₀";s:1:"0";s:3:"₁";s:1:"1";s:3:"₂";s:1:"2";s:3:"₃";s:1:"3";s:3:"₄";s:1:"4";s:3:"₅";s:1:"5";s:3:"₆";s:1:"6";s:3:"₇";s:1:"7";s:3:"₈";s:1:"8";s:3:"₉";s:1:"9";s:3:"₊";s:1:"+";s:3:"₋";s:3:"−";s:3:"₌";s:1:"=";s:3:"₍";s:1:"(";s:3:"₎";s:1:")";s:3:"ₐ";s:1:"a";s:3:"ₑ";s:1:"e";s:3:"ₒ";s:1:"o";s:3:"ₓ";s:1:"x";s:3:"ₔ";s:2:"ə";s:3:"ₕ";s:1:"h";s:3:"ₖ";s:1:"k";s:3:"ₗ";s:1:"l";s:3:"ₘ";s:1:"m";s:3:"ₙ";s:1:"n";s:3:"ₚ";s:1:"p";s:3:"ₛ";s:1:"s";s:3:"ₜ";s:1:"t";s:3:"₨";s:2:"Rs";s:3:"℀";s:3:"a/c";s:3:"℁";s:3:"a/s";s:3:"ℂ";s:1:"C";s:3:"℃";s:3:"°C";s:3:"℅";s:3:"c/o";s:3:"℆";s:3:"c/u";s:3:"ℇ";s:2:"Ɛ";s:3:"℉";s:3:"°F";s:3:"ℊ";s:1:"g";s:3:"ℋ";s:1:"H";s:3:"ℌ";s:1:"H";s:3:"ℍ";s:1:"H";s:3:"ℎ";s:1:"h";s:3:"ℏ";s:2:"ħ";s:3:"ℐ";s:1:"I";s:3:"ℑ";s:1:"I";s:3:"ℒ";s:1:"L";s:3:"ℓ";s:1:"l";s:3:"ℕ";s:1:"N";s:3:"№";s:2:"No";s:3:"ℙ";s:1:"P";s:3:"ℚ";s:1:"Q";s:3:"ℛ";s:1:"R";s:3:"ℜ";s:1:"R";s:3:"ℝ";s:1:"R";s:3:"℠";s:2:"SM";s:3:"℡";s:3:"TEL";s:3:"™";s:2:"TM";s:3:"ℤ";s:1:"Z";s:3:"Ω";s:2:"Ω";s:3:"ℨ";s:1:"Z";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"ℬ";s:1:"B";s:3:"ℭ";s:1:"C";s:3:"ℯ";s:1:"e";s:3:"ℰ";s:1:"E";s:3:"ℱ";s:1:"F";s:3:"ℳ";s:1:"M";s:3:"ℴ";s:1:"o";s:3:"ℵ";s:2:"א";s:3:"ℶ";s:2:"ב";s:3:"ℷ";s:2:"ג";s:3:"ℸ";s:2:"ד";s:3:"ℹ";s:1:"i";s:3:"℻";s:3:"FAX";s:3:"ℼ";s:2:"π";s:3:"ℽ";s:2:"γ";s:3:"ℾ";s:2:"Γ";s:3:"ℿ";s:2:"Π";s:3:"⅀";s:3:"∑";s:3:"ⅅ";s:1:"D";s:3:"ⅆ";s:1:"d";s:3:"ⅇ";s:1:"e";s:3:"ⅈ";s:1:"i";s:3:"ⅉ";s:1:"j";s:3:"⅐";s:5:"1⁄7";s:3:"⅑";s:5:"1⁄9";s:3:"⅒";s:6:"1⁄10";s:3:"⅓";s:5:"1⁄3";s:3:"⅔";s:5:"2⁄3";s:3:"⅕";s:5:"1⁄5";s:3:"⅖";s:5:"2⁄5";s:3:"⅗";s:5:"3⁄5";s:3:"⅘";s:5:"4⁄5";s:3:"⅙";s:5:"1⁄6";s:3:"⅚";s:5:"5⁄6";s:3:"⅛";s:5:"1⁄8";s:3:"⅜";s:5:"3⁄8";s:3:"⅝";s:5:"5⁄8";s:3:"⅞";s:5:"7⁄8";s:3:"⅟";s:4:"1⁄";s:3:"Ⅰ";s:1:"I";s:3:"Ⅱ";s:2:"II";s:3:"Ⅲ";s:3:"III";s:3:"Ⅳ";s:2:"IV";s:3:"Ⅴ";s:1:"V";s:3:"Ⅵ";s:2:"VI";s:3:"Ⅶ";s:3:"VII";s:3:"Ⅷ";s:4:"VIII";s:3:"Ⅸ";s:2:"IX";s:3:"Ⅹ";s:1:"X";s:3:"Ⅺ";s:2:"XI";s:3:"Ⅻ";s:3:"XII";s:3:"Ⅼ";s:1:"L";s:3:"Ⅽ";s:1:"C";s:3:"Ⅾ";s:1:"D";s:3:"Ⅿ";s:1:"M";s:3:"ⅰ";s:1:"i";s:3:"ⅱ";s:2:"ii";s:3:"ⅲ";s:3:"iii";s:3:"ⅳ";s:2:"iv";s:3:"ⅴ";s:1:"v";s:3:"ⅵ";s:2:"vi";s:3:"ⅶ";s:3:"vii";s:3:"ⅷ";s:4:"viii";s:3:"ⅸ";s:2:"ix";s:3:"ⅹ";s:1:"x";s:3:"ⅺ";s:2:"xi";s:3:"ⅻ";s:3:"xii";s:3:"ⅼ";s:1:"l";s:3:"ⅽ";s:1:"c";s:3:"ⅾ";s:1:"d";s:3:"ⅿ";s:1:"m";s:3:"↉";s:5:"0⁄3";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"∬";s:6:"∫∫";s:3:"∭";s:9:"∫∫∫";s:3:"∯";s:6:"∮∮";s:3:"∰";s:9:"∮∮∮";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"①";s:1:"1";s:3:"②";s:1:"2";s:3:"③";s:1:"3";s:3:"④";s:1:"4";s:3:"⑤";s:1:"5";s:3:"⑥";s:1:"6";s:3:"⑦";s:1:"7";s:3:"⑧";s:1:"8";s:3:"⑨";s:1:"9";s:3:"⑩";s:2:"10";s:3:"⑪";s:2:"11";s:3:"⑫";s:2:"12";s:3:"⑬";s:2:"13";s:3:"⑭";s:2:"14";s:3:"⑮";s:2:"15";s:3:"⑯";s:2:"16";s:3:"⑰";s:2:"17";s:3:"⑱";s:2:"18";s:3:"⑲";s:2:"19";s:3:"⑳";s:2:"20";s:3:"⑴";s:3:"(1)";s:3:"⑵";s:3:"(2)";s:3:"⑶";s:3:"(3)";s:3:"⑷";s:3:"(4)";s:3:"⑸";s:3:"(5)";s:3:"⑹";s:3:"(6)";s:3:"⑺";s:3:"(7)";s:3:"⑻";s:3:"(8)";s:3:"⑼";s:3:"(9)";s:3:"⑽";s:4:"(10)";s:3:"⑾";s:4:"(11)";s:3:"⑿";s:4:"(12)";s:3:"⒀";s:4:"(13)";s:3:"⒁";s:4:"(14)";s:3:"⒂";s:4:"(15)";s:3:"⒃";s:4:"(16)";s:3:"⒄";s:4:"(17)";s:3:"⒅";s:4:"(18)";s:3:"⒆";s:4:"(19)";s:3:"⒇";s:4:"(20)";s:3:"⒈";s:2:"1.";s:3:"⒉";s:2:"2.";s:3:"⒊";s:2:"3.";s:3:"⒋";s:2:"4.";s:3:"⒌";s:2:"5.";s:3:"⒍";s:2:"6.";s:3:"⒎";s:2:"7.";s:3:"⒏";s:2:"8.";s:3:"⒐";s:2:"9.";s:3:"⒑";s:3:"10.";s:3:"⒒";s:3:"11.";s:3:"⒓";s:3:"12.";s:3:"⒔";s:3:"13.";s:3:"⒕";s:3:"14.";s:3:"⒖";s:3:"15.";s:3:"⒗";s:3:"16.";s:3:"⒘";s:3:"17.";s:3:"⒙";s:3:"18.";s:3:"⒚";s:3:"19.";s:3:"⒛";s:3:"20.";s:3:"⒜";s:3:"(a)";s:3:"⒝";s:3:"(b)";s:3:"⒞";s:3:"(c)";s:3:"⒟";s:3:"(d)";s:3:"⒠";s:3:"(e)";s:3:"⒡";s:3:"(f)";s:3:"⒢";s:3:"(g)";s:3:"⒣";s:3:"(h)";s:3:"⒤";s:3:"(i)";s:3:"⒥";s:3:"(j)";s:3:"⒦";s:3:"(k)";s:3:"⒧";s:3:"(l)";s:3:"⒨";s:3:"(m)";s:3:"⒩";s:3:"(n)";s:3:"⒪";s:3:"(o)";s:3:"⒫";s:3:"(p)";s:3:"⒬";s:3:"(q)";s:3:"⒭";s:3:"(r)";s:3:"⒮";s:3:"(s)";s:3:"⒯";s:3:"(t)";s:3:"⒰";s:3:"(u)";s:3:"⒱";s:3:"(v)";s:3:"⒲";s:3:"(w)";s:3:"⒳";s:3:"(x)";s:3:"⒴";s:3:"(y)";s:3:"⒵";s:3:"(z)";s:3:"Ⓐ";s:1:"A";s:3:"Ⓑ";s:1:"B";s:3:"Ⓒ";s:1:"C";s:3:"Ⓓ";s:1:"D";s:3:"Ⓔ";s:1:"E";s:3:"Ⓕ";s:1:"F";s:3:"Ⓖ";s:1:"G";s:3:"Ⓗ";s:1:"H";s:3:"Ⓘ";s:1:"I";s:3:"Ⓙ";s:1:"J";s:3:"Ⓚ";s:1:"K";s:3:"Ⓛ";s:1:"L";s:3:"Ⓜ";s:1:"M";s:3:"Ⓝ";s:1:"N";s:3:"Ⓞ";s:1:"O";s:3:"Ⓟ";s:1:"P";s:3:"Ⓠ";s:1:"Q";s:3:"Ⓡ";s:1:"R";s:3:"Ⓢ";s:1:"S";s:3:"Ⓣ";s:1:"T";s:3:"Ⓤ";s:1:"U";s:3:"Ⓥ";s:1:"V";s:3:"Ⓦ";s:1:"W";s:3:"Ⓧ";s:1:"X";s:3:"Ⓨ";s:1:"Y";s:3:"Ⓩ";s:1:"Z";s:3:"ⓐ";s:1:"a";s:3:"ⓑ";s:1:"b";s:3:"ⓒ";s:1:"c";s:3:"ⓓ";s:1:"d";s:3:"ⓔ";s:1:"e";s:3:"ⓕ";s:1:"f";s:3:"ⓖ";s:1:"g";s:3:"ⓗ";s:1:"h";s:3:"ⓘ";s:1:"i";s:3:"ⓙ";s:1:"j";s:3:"ⓚ";s:1:"k";s:3:"ⓛ";s:1:"l";s:3:"ⓜ";s:1:"m";s:3:"ⓝ";s:1:"n";s:3:"ⓞ";s:1:"o";s:3:"ⓟ";s:1:"p";s:3:"ⓠ";s:1:"q";s:3:"ⓡ";s:1:"r";s:3:"ⓢ";s:1:"s";s:3:"ⓣ";s:1:"t";s:3:"ⓤ";s:1:"u";s:3:"ⓥ";s:1:"v";s:3:"ⓦ";s:1:"w";s:3:"ⓧ";s:1:"x";s:3:"ⓨ";s:1:"y";s:3:"ⓩ";s:1:"z";s:3:"⓪";s:1:"0";s:3:"⨌";s:12:"∫∫∫∫";s:3:"⩴";s:3:"::=";s:3:"⩵";s:2:"==";s:3:"⩶";s:3:"===";s:3:"⫝̸";s:5:"⫝̸";s:3:"ⱼ";s:1:"j";s:3:"ⱽ";s:1:"V";s:3:"ⵯ";s:3:"ⵡ";s:3:"⺟";s:3:"母";s:3:"⻳";s:3:"龟";s:3:"⼀";s:3:"一";s:3:"⼁";s:3:"丨";s:3:"⼂";s:3:"丶";s:3:"⼃";s:3:"丿";s:3:"⼄";s:3:"乙";s:3:"⼅";s:3:"亅";s:3:"⼆";s:3:"二";s:3:"⼇";s:3:"亠";s:3:"⼈";s:3:"人";s:3:"⼉";s:3:"儿";s:3:"⼊";s:3:"入";s:3:"⼋";s:3:"八";s:3:"⼌";s:3:"冂";s:3:"⼍";s:3:"冖";s:3:"⼎";s:3:"冫";s:3:"⼏";s:3:"几";s:3:"⼐";s:3:"凵";s:3:"⼑";s:3:"刀";s:3:"⼒";s:3:"力";s:3:"⼓";s:3:"勹";s:3:"⼔";s:3:"匕";s:3:"⼕";s:3:"匚";s:3:"⼖";s:3:"匸";s:3:"⼗";s:3:"十";s:3:"⼘";s:3:"卜";s:3:"⼙";s:3:"卩";s:3:"⼚";s:3:"厂";s:3:"⼛";s:3:"厶";s:3:"⼜";s:3:"又";s:3:"⼝";s:3:"口";s:3:"⼞";s:3:"囗";s:3:"⼟";s:3:"土";s:3:"⼠";s:3:"士";s:3:"⼡";s:3:"夂";s:3:"⼢";s:3:"夊";s:3:"⼣";s:3:"夕";s:3:"⼤";s:3:"大";s:3:"⼥";s:3:"女";s:3:"⼦";s:3:"子";s:3:"⼧";s:3:"宀";s:3:"⼨";s:3:"寸";s:3:"⼩";s:3:"小";s:3:"⼪";s:3:"尢";s:3:"⼫";s:3:"尸";s:3:"⼬";s:3:"屮";s:3:"⼭";s:3:"山";s:3:"⼮";s:3:"巛";s:3:"⼯";s:3:"工";s:3:"⼰";s:3:"己";s:3:"⼱";s:3:"巾";s:3:"⼲";s:3:"干";s:3:"⼳";s:3:"幺";s:3:"⼴";s:3:"广";s:3:"⼵";s:3:"廴";s:3:"⼶";s:3:"廾";s:3:"⼷";s:3:"弋";s:3:"⼸";s:3:"弓";s:3:"⼹";s:3:"彐";s:3:"⼺";s:3:"彡";s:3:"⼻";s:3:"彳";s:3:"⼼";s:3:"心";s:3:"⼽";s:3:"戈";s:3:"⼾";s:3:"戶";s:3:"⼿";s:3:"手";s:3:"⽀";s:3:"支";s:3:"⽁";s:3:"攴";s:3:"⽂";s:3:"文";s:3:"⽃";s:3:"斗";s:3:"⽄";s:3:"斤";s:3:"⽅";s:3:"方";s:3:"⽆";s:3:"无";s:3:"⽇";s:3:"日";s:3:"⽈";s:3:"曰";s:3:"⽉";s:3:"月";s:3:"⽊";s:3:"木";s:3:"⽋";s:3:"欠";s:3:"⽌";s:3:"止";s:3:"⽍";s:3:"歹";s:3:"⽎";s:3:"殳";s:3:"⽏";s:3:"毋";s:3:"⽐";s:3:"比";s:3:"⽑";s:3:"毛";s:3:"⽒";s:3:"氏";s:3:"⽓";s:3:"气";s:3:"⽔";s:3:"水";s:3:"⽕";s:3:"火";s:3:"⽖";s:3:"爪";s:3:"⽗";s:3:"父";s:3:"⽘";s:3:"爻";s:3:"⽙";s:3:"爿";s:3:"⽚";s:3:"片";s:3:"⽛";s:3:"牙";s:3:"⽜";s:3:"牛";s:3:"⽝";s:3:"犬";s:3:"⽞";s:3:"玄";s:3:"⽟";s:3:"玉";s:3:"⽠";s:3:"瓜";s:3:"⽡";s:3:"瓦";s:3:"⽢";s:3:"甘";s:3:"⽣";s:3:"生";s:3:"⽤";s:3:"用";s:3:"⽥";s:3:"田";s:3:"⽦";s:3:"疋";s:3:"⽧";s:3:"疒";s:3:"⽨";s:3:"癶";s:3:"⽩";s:3:"白";s:3:"⽪";s:3:"皮";s:3:"⽫";s:3:"皿";s:3:"⽬";s:3:"目";s:3:"⽭";s:3:"矛";s:3:"⽮";s:3:"矢";s:3:"⽯";s:3:"石";s:3:"⽰";s:3:"示";s:3:"⽱";s:3:"禸";s:3:"⽲";s:3:"禾";s:3:"⽳";s:3:"穴";s:3:"⽴";s:3:"立";s:3:"⽵";s:3:"竹";s:3:"⽶";s:3:"米";s:3:"⽷";s:3:"糸";s:3:"⽸";s:3:"缶";s:3:"⽹";s:3:"网";s:3:"⽺";s:3:"羊";s:3:"⽻";s:3:"羽";s:3:"⽼";s:3:"老";s:3:"⽽";s:3:"而";s:3:"⽾";s:3:"耒";s:3:"⽿";s:3:"耳";s:3:"⾀";s:3:"聿";s:3:"⾁";s:3:"肉";s:3:"⾂";s:3:"臣";s:3:"⾃";s:3:"自";s:3:"⾄";s:3:"至";s:3:"⾅";s:3:"臼";s:3:"⾆";s:3:"舌";s:3:"⾇";s:3:"舛";s:3:"⾈";s:3:"舟";s:3:"⾉";s:3:"艮";s:3:"⾊";s:3:"色";s:3:"⾋";s:3:"艸";s:3:"⾌";s:3:"虍";s:3:"⾍";s:3:"虫";s:3:"⾎";s:3:"血";s:3:"⾏";s:3:"行";s:3:"⾐";s:3:"衣";s:3:"⾑";s:3:"襾";s:3:"⾒";s:3:"見";s:3:"⾓";s:3:"角";s:3:"⾔";s:3:"言";s:3:"⾕";s:3:"谷";s:3:"⾖";s:3:"豆";s:3:"⾗";s:3:"豕";s:3:"⾘";s:3:"豸";s:3:"⾙";s:3:"貝";s:3:"⾚";s:3:"赤";s:3:"⾛";s:3:"走";s:3:"⾜";s:3:"足";s:3:"⾝";s:3:"身";s:3:"⾞";s:3:"車";s:3:"⾟";s:3:"辛";s:3:"⾠";s:3:"辰";s:3:"⾡";s:3:"辵";s:3:"⾢";s:3:"邑";s:3:"⾣";s:3:"酉";s:3:"⾤";s:3:"釆";s:3:"⾥";s:3:"里";s:3:"⾦";s:3:"金";s:3:"⾧";s:3:"長";s:3:"⾨";s:3:"門";s:3:"⾩";s:3:"阜";s:3:"⾪";s:3:"隶";s:3:"⾫";s:3:"隹";s:3:"⾬";s:3:"雨";s:3:"⾭";s:3:"靑";s:3:"⾮";s:3:"非";s:3:"⾯";s:3:"面";s:3:"⾰";s:3:"革";s:3:"⾱";s:3:"韋";s:3:"⾲";s:3:"韭";s:3:"⾳";s:3:"音";s:3:"⾴";s:3:"頁";s:3:"⾵";s:3:"風";s:3:"⾶";s:3:"飛";s:3:"⾷";s:3:"食";s:3:"⾸";s:3:"首";s:3:"⾹";s:3:"香";s:3:"⾺";s:3:"馬";s:3:"⾻";s:3:"骨";s:3:"⾼";s:3:"高";s:3:"⾽";s:3:"髟";s:3:"⾾";s:3:"鬥";s:3:"⾿";s:3:"鬯";s:3:"⿀";s:3:"鬲";s:3:"⿁";s:3:"鬼";s:3:"⿂";s:3:"魚";s:3:"⿃";s:3:"鳥";s:3:"⿄";s:3:"鹵";s:3:"⿅";s:3:"鹿";s:3:"⿆";s:3:"麥";s:3:"⿇";s:3:"麻";s:3:"⿈";s:3:"黃";s:3:"⿉";s:3:"黍";s:3:"⿊";s:3:"黑";s:3:"⿋";s:3:"黹";s:3:"⿌";s:3:"黽";s:3:"⿍";s:3:"鼎";s:3:"⿎";s:3:"鼓";s:3:"⿏";s:3:"鼠";s:3:"⿐";s:3:"鼻";s:3:"⿑";s:3:"齊";s:3:"⿒";s:3:"齒";s:3:"⿓";s:3:"龍";s:3:"⿔";s:3:"龜";s:3:"⿕";s:3:"龠";s:3:" ";s:1:" ";s:3:"〶";s:3:"〒";s:3:"〸";s:3:"十";s:3:"〹";s:3:"卄";s:3:"〺";s:3:"卅";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"゛";s:4:" ゙";s:3:"゜";s:4:" ゚";s:3:"ゞ";s:6:"ゞ";s:3:"ゟ";s:6:"より";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"ヿ";s:6:"コト";s:3:"ㄱ";s:3:"ᄀ";s:3:"ㄲ";s:3:"ᄁ";s:3:"ㄳ";s:3:"ᆪ";s:3:"ㄴ";s:3:"ᄂ";s:3:"ㄵ";s:3:"ᆬ";s:3:"ㄶ";s:3:"ᆭ";s:3:"ㄷ";s:3:"ᄃ";s:3:"ㄸ";s:3:"ᄄ";s:3:"ㄹ";s:3:"ᄅ";s:3:"ㄺ";s:3:"ᆰ";s:3:"ㄻ";s:3:"ᆱ";s:3:"ㄼ";s:3:"ᆲ";s:3:"ㄽ";s:3:"ᆳ";s:3:"ㄾ";s:3:"ᆴ";s:3:"ㄿ";s:3:"ᆵ";s:3:"ㅀ";s:3:"ᄚ";s:3:"ㅁ";s:3:"ᄆ";s:3:"ㅂ";s:3:"ᄇ";s:3:"ㅃ";s:3:"ᄈ";s:3:"ㅄ";s:3:"ᄡ";s:3:"ㅅ";s:3:"ᄉ";s:3:"ㅆ";s:3:"ᄊ";s:3:"ㅇ";s:3:"ᄋ";s:3:"ㅈ";s:3:"ᄌ";s:3:"ㅉ";s:3:"ᄍ";s:3:"ㅊ";s:3:"ᄎ";s:3:"ㅋ";s:3:"ᄏ";s:3:"ㅌ";s:3:"ᄐ";s:3:"ㅍ";s:3:"ᄑ";s:3:"ㅎ";s:3:"ᄒ";s:3:"ㅏ";s:3:"ᅡ";s:3:"ㅐ";s:3:"ᅢ";s:3:"ㅑ";s:3:"ᅣ";s:3:"ㅒ";s:3:"ᅤ";s:3:"ㅓ";s:3:"ᅥ";s:3:"ㅔ";s:3:"ᅦ";s:3:"ㅕ";s:3:"ᅧ";s:3:"ㅖ";s:3:"ᅨ";s:3:"ㅗ";s:3:"ᅩ";s:3:"ㅘ";s:3:"ᅪ";s:3:"ㅙ";s:3:"ᅫ";s:3:"ㅚ";s:3:"ᅬ";s:3:"ㅛ";s:3:"ᅭ";s:3:"ㅜ";s:3:"ᅮ";s:3:"ㅝ";s:3:"ᅯ";s:3:"ㅞ";s:3:"ᅰ";s:3:"ㅟ";s:3:"ᅱ";s:3:"ㅠ";s:3:"ᅲ";s:3:"ㅡ";s:3:"ᅳ";s:3:"ㅢ";s:3:"ᅴ";s:3:"ㅣ";s:3:"ᅵ";s:3:"ㅤ";s:3:"ᅠ";s:3:"ㅥ";s:3:"ᄔ";s:3:"ㅦ";s:3:"ᄕ";s:3:"ㅧ";s:3:"ᇇ";s:3:"ㅨ";s:3:"ᇈ";s:3:"ㅩ";s:3:"ᇌ";s:3:"ㅪ";s:3:"ᇎ";s:3:"ㅫ";s:3:"ᇓ";s:3:"ㅬ";s:3:"ᇗ";s:3:"ㅭ";s:3:"ᇙ";s:3:"ㅮ";s:3:"ᄜ";s:3:"ㅯ";s:3:"ᇝ";s:3:"ㅰ";s:3:"ᇟ";s:3:"ㅱ";s:3:"ᄝ";s:3:"ㅲ";s:3:"ᄞ";s:3:"ㅳ";s:3:"ᄠ";s:3:"ㅴ";s:3:"ᄢ";s:3:"ㅵ";s:3:"ᄣ";s:3:"ㅶ";s:3:"ᄧ";s:3:"ㅷ";s:3:"ᄩ";s:3:"ㅸ";s:3:"ᄫ";s:3:"ㅹ";s:3:"ᄬ";s:3:"ㅺ";s:3:"ᄭ";s:3:"ㅻ";s:3:"ᄮ";s:3:"ㅼ";s:3:"ᄯ";s:3:"ㅽ";s:3:"ᄲ";s:3:"ㅾ";s:3:"ᄶ";s:3:"ㅿ";s:3:"ᅀ";s:3:"ㆀ";s:3:"ᅇ";s:3:"ㆁ";s:3:"ᅌ";s:3:"ㆂ";s:3:"ᇱ";s:3:"ㆃ";s:3:"ᇲ";s:3:"ㆄ";s:3:"ᅗ";s:3:"ㆅ";s:3:"ᅘ";s:3:"ㆆ";s:3:"ᅙ";s:3:"ㆇ";s:3:"ᆄ";s:3:"ㆈ";s:3:"ᆅ";s:3:"ㆉ";s:3:"ᆈ";s:3:"ㆊ";s:3:"ᆑ";s:3:"ㆋ";s:3:"ᆒ";s:3:"ㆌ";s:3:"ᆔ";s:3:"ㆍ";s:3:"ᆞ";s:3:"ㆎ";s:3:"ᆡ";s:3:"㆒";s:3:"一";s:3:"㆓";s:3:"二";s:3:"㆔";s:3:"三";s:3:"㆕";s:3:"四";s:3:"㆖";s:3:"上";s:3:"㆗";s:3:"中";s:3:"㆘";s:3:"下";s:3:"㆙";s:3:"甲";s:3:"㆚";s:3:"乙";s:3:"㆛";s:3:"丙";s:3:"㆜";s:3:"丁";s:3:"㆝";s:3:"天";s:3:"㆞";s:3:"地";s:3:"㆟";s:3:"人";s:3:"㈀";s:5:"(ᄀ)";s:3:"㈁";s:5:"(ᄂ)";s:3:"㈂";s:5:"(ᄃ)";s:3:"㈃";s:5:"(ᄅ)";s:3:"㈄";s:5:"(ᄆ)";s:3:"㈅";s:5:"(ᄇ)";s:3:"㈆";s:5:"(ᄉ)";s:3:"㈇";s:5:"(ᄋ)";s:3:"㈈";s:5:"(ᄌ)";s:3:"㈉";s:5:"(ᄎ)";s:3:"㈊";s:5:"(ᄏ)";s:3:"㈋";s:5:"(ᄐ)";s:3:"㈌";s:5:"(ᄑ)";s:3:"㈍";s:5:"(ᄒ)";s:3:"㈎";s:8:"(가)";s:3:"㈏";s:8:"(나)";s:3:"㈐";s:8:"(다)";s:3:"㈑";s:8:"(라)";s:3:"㈒";s:8:"(마)";s:3:"㈓";s:8:"(바)";s:3:"㈔";s:8:"(사)";s:3:"㈕";s:8:"(아)";s:3:"㈖";s:8:"(자)";s:3:"㈗";s:8:"(차)";s:3:"㈘";s:8:"(카)";s:3:"㈙";s:8:"(타)";s:3:"㈚";s:8:"(파)";s:3:"㈛";s:8:"(하)";s:3:"㈜";s:8:"(주)";s:3:"㈝";s:17:"(오전)";s:3:"㈞";s:14:"(오후)";s:3:"㈠";s:5:"(一)";s:3:"㈡";s:5:"(二)";s:3:"㈢";s:5:"(三)";s:3:"㈣";s:5:"(四)";s:3:"㈤";s:5:"(五)";s:3:"㈥";s:5:"(六)";s:3:"㈦";s:5:"(七)";s:3:"㈧";s:5:"(八)";s:3:"㈨";s:5:"(九)";s:3:"㈩";s:5:"(十)";s:3:"㈪";s:5:"(月)";s:3:"㈫";s:5:"(火)";s:3:"㈬";s:5:"(水)";s:3:"㈭";s:5:"(木)";s:3:"㈮";s:5:"(金)";s:3:"㈯";s:5:"(土)";s:3:"㈰";s:5:"(日)";s:3:"㈱";s:5:"(株)";s:3:"㈲";s:5:"(有)";s:3:"㈳";s:5:"(社)";s:3:"㈴";s:5:"(名)";s:3:"㈵";s:5:"(特)";s:3:"㈶";s:5:"(財)";s:3:"㈷";s:5:"(祝)";s:3:"㈸";s:5:"(労)";s:3:"㈹";s:5:"(代)";s:3:"㈺";s:5:"(呼)";s:3:"㈻";s:5:"(学)";s:3:"㈼";s:5:"(監)";s:3:"㈽";s:5:"(企)";s:3:"㈾";s:5:"(資)";s:3:"㈿";s:5:"(協)";s:3:"㉀";s:5:"(祭)";s:3:"㉁";s:5:"(休)";s:3:"㉂";s:5:"(自)";s:3:"㉃";s:5:"(至)";s:3:"㉄";s:3:"問";s:3:"㉅";s:3:"幼";s:3:"㉆";s:3:"文";s:3:"㉇";s:3:"箏";s:3:"㉐";s:3:"PTE";s:3:"㉑";s:2:"21";s:3:"㉒";s:2:"22";s:3:"㉓";s:2:"23";s:3:"㉔";s:2:"24";s:3:"㉕";s:2:"25";s:3:"㉖";s:2:"26";s:3:"㉗";s:2:"27";s:3:"㉘";s:2:"28";s:3:"㉙";s:2:"29";s:3:"㉚";s:2:"30";s:3:"㉛";s:2:"31";s:3:"㉜";s:2:"32";s:3:"㉝";s:2:"33";s:3:"㉞";s:2:"34";s:3:"㉟";s:2:"35";s:3:"㉠";s:3:"ᄀ";s:3:"㉡";s:3:"ᄂ";s:3:"㉢";s:3:"ᄃ";s:3:"㉣";s:3:"ᄅ";s:3:"㉤";s:3:"ᄆ";s:3:"㉥";s:3:"ᄇ";s:3:"㉦";s:3:"ᄉ";s:3:"㉧";s:3:"ᄋ";s:3:"㉨";s:3:"ᄌ";s:3:"㉩";s:3:"ᄎ";s:3:"㉪";s:3:"ᄏ";s:3:"㉫";s:3:"ᄐ";s:3:"㉬";s:3:"ᄑ";s:3:"㉭";s:3:"ᄒ";s:3:"㉮";s:6:"가";s:3:"㉯";s:6:"나";s:3:"㉰";s:6:"다";s:3:"㉱";s:6:"라";s:3:"㉲";s:6:"마";s:3:"㉳";s:6:"바";s:3:"㉴";s:6:"사";s:3:"㉵";s:6:"아";s:3:"㉶";s:6:"자";s:3:"㉷";s:6:"차";s:3:"㉸";s:6:"카";s:3:"㉹";s:6:"타";s:3:"㉺";s:6:"파";s:3:"㉻";s:6:"하";s:3:"㉼";s:15:"참고";s:3:"㉽";s:12:"주의";s:3:"㉾";s:6:"우";s:3:"㊀";s:3:"一";s:3:"㊁";s:3:"二";s:3:"㊂";s:3:"三";s:3:"㊃";s:3:"四";s:3:"㊄";s:3:"五";s:3:"㊅";s:3:"六";s:3:"㊆";s:3:"七";s:3:"㊇";s:3:"八";s:3:"㊈";s:3:"九";s:3:"㊉";s:3:"十";s:3:"㊊";s:3:"月";s:3:"㊋";s:3:"火";s:3:"㊌";s:3:"水";s:3:"㊍";s:3:"木";s:3:"㊎";s:3:"金";s:3:"㊏";s:3:"土";s:3:"㊐";s:3:"日";s:3:"㊑";s:3:"株";s:3:"㊒";s:3:"有";s:3:"㊓";s:3:"社";s:3:"㊔";s:3:"名";s:3:"㊕";s:3:"特";s:3:"㊖";s:3:"財";s:3:"㊗";s:3:"祝";s:3:"㊘";s:3:"労";s:3:"㊙";s:3:"秘";s:3:"㊚";s:3:"男";s:3:"㊛";s:3:"女";s:3:"㊜";s:3:"適";s:3:"㊝";s:3:"優";s:3:"㊞";s:3:"印";s:3:"㊟";s:3:"注";s:3:"㊠";s:3:"項";s:3:"㊡";s:3:"休";s:3:"㊢";s:3:"写";s:3:"㊣";s:3:"正";s:3:"㊤";s:3:"上";s:3:"㊥";s:3:"中";s:3:"㊦";s:3:"下";s:3:"㊧";s:3:"左";s:3:"㊨";s:3:"右";s:3:"㊩";s:3:"医";s:3:"㊪";s:3:"宗";s:3:"㊫";s:3:"学";s:3:"㊬";s:3:"監";s:3:"㊭";s:3:"企";s:3:"㊮";s:3:"資";s:3:"㊯";s:3:"協";s:3:"㊰";s:3:"夜";s:3:"㊱";s:2:"36";s:3:"㊲";s:2:"37";s:3:"㊳";s:2:"38";s:3:"㊴";s:2:"39";s:3:"㊵";s:2:"40";s:3:"㊶";s:2:"41";s:3:"㊷";s:2:"42";s:3:"㊸";s:2:"43";s:3:"㊹";s:2:"44";s:3:"㊺";s:2:"45";s:3:"㊻";s:2:"46";s:3:"㊼";s:2:"47";s:3:"㊽";s:2:"48";s:3:"㊾";s:2:"49";s:3:"㊿";s:2:"50";s:3:"㋀";s:4:"1月";s:3:"㋁";s:4:"2月";s:3:"㋂";s:4:"3月";s:3:"㋃";s:4:"4月";s:3:"㋄";s:4:"5月";s:3:"㋅";s:4:"6月";s:3:"㋆";s:4:"7月";s:3:"㋇";s:4:"8月";s:3:"㋈";s:4:"9月";s:3:"㋉";s:5:"10月";s:3:"㋊";s:5:"11月";s:3:"㋋";s:5:"12月";s:3:"㋌";s:2:"Hg";s:3:"㋍";s:3:"erg";s:3:"㋎";s:2:"eV";s:3:"㋏";s:3:"LTD";s:3:"㋐";s:3:"ア";s:3:"㋑";s:3:"イ";s:3:"㋒";s:3:"ウ";s:3:"㋓";s:3:"エ";s:3:"㋔";s:3:"オ";s:3:"㋕";s:3:"カ";s:3:"㋖";s:3:"キ";s:3:"㋗";s:3:"ク";s:3:"㋘";s:3:"ケ";s:3:"㋙";s:3:"コ";s:3:"㋚";s:3:"サ";s:3:"㋛";s:3:"シ";s:3:"㋜";s:3:"ス";s:3:"㋝";s:3:"セ";s:3:"㋞";s:3:"ソ";s:3:"㋟";s:3:"タ";s:3:"㋠";s:3:"チ";s:3:"㋡";s:3:"ツ";s:3:"㋢";s:3:"テ";s:3:"㋣";s:3:"ト";s:3:"㋤";s:3:"ナ";s:3:"㋥";s:3:"ニ";s:3:"㋦";s:3:"ヌ";s:3:"㋧";s:3:"ネ";s:3:"㋨";s:3:"ノ";s:3:"㋩";s:3:"ハ";s:3:"㋪";s:3:"ヒ";s:3:"㋫";s:3:"フ";s:3:"㋬";s:3:"ヘ";s:3:"㋭";s:3:"ホ";s:3:"㋮";s:3:"マ";s:3:"㋯";s:3:"ミ";s:3:"㋰";s:3:"ム";s:3:"㋱";s:3:"メ";s:3:"㋲";s:3:"モ";s:3:"㋳";s:3:"ヤ";s:3:"㋴";s:3:"ユ";s:3:"㋵";s:3:"ヨ";s:3:"㋶";s:3:"ラ";s:3:"㋷";s:3:"リ";s:3:"㋸";s:3:"ル";s:3:"㋹";s:3:"レ";s:3:"㋺";s:3:"ロ";s:3:"㋻";s:3:"ワ";s:3:"㋼";s:3:"ヰ";s:3:"㋽";s:3:"ヱ";s:3:"㋾";s:3:"ヲ";s:3:"㌀";s:15:"アパート";s:3:"㌁";s:12:"アルファ";s:3:"㌂";s:15:"アンペア";s:3:"㌃";s:9:"アール";s:3:"㌄";s:15:"イニング";s:3:"㌅";s:9:"インチ";s:3:"㌆";s:9:"ウォン";s:3:"㌇";s:18:"エスクード";s:3:"㌈";s:12:"エーカー";s:3:"㌉";s:9:"オンス";s:3:"㌊";s:9:"オーム";s:3:"㌋";s:9:"カイリ";s:3:"㌌";s:12:"カラット";s:3:"㌍";s:12:"カロリー";s:3:"㌎";s:12:"ガロン";s:3:"㌏";s:12:"ガンマ";s:3:"㌐";s:12:"ギガ";s:3:"㌑";s:12:"ギニー";s:3:"㌒";s:12:"キュリー";s:3:"㌓";s:18:"ギルダー";s:3:"㌔";s:6:"キロ";s:3:"㌕";s:18:"キログラム";s:3:"㌖";s:18:"キロメートル";s:3:"㌗";s:15:"キロワット";s:3:"㌘";s:12:"グラム";s:3:"㌙";s:18:"グラムトン";s:3:"㌚";s:18:"クルゼイロ";s:3:"㌛";s:12:"クローネ";s:3:"㌜";s:9:"ケース";s:3:"㌝";s:9:"コルナ";s:3:"㌞";s:12:"コーポ";s:3:"㌟";s:12:"サイクル";s:3:"㌠";s:15:"サンチーム";s:3:"㌡";s:15:"シリング";s:3:"㌢";s:9:"センチ";s:3:"㌣";s:9:"セント";s:3:"㌤";s:12:"ダース";s:3:"㌥";s:9:"デシ";s:3:"㌦";s:9:"ドル";s:3:"㌧";s:6:"トン";s:3:"㌨";s:6:"ナノ";s:3:"㌩";s:9:"ノット";s:3:"㌪";s:9:"ハイツ";s:3:"㌫";s:18:"パーセント";s:3:"㌬";s:12:"パーツ";s:3:"㌭";s:15:"バーレル";s:3:"㌮";s:18:"ピアストル";s:3:"㌯";s:12:"ピクル";s:3:"㌰";s:9:"ピコ";s:3:"㌱";s:9:"ビル";s:3:"㌲";s:18:"ファラッド";s:3:"㌳";s:12:"フィート";s:3:"㌴";s:18:"ブッシェル";s:3:"㌵";s:9:"フラン";s:3:"㌶";s:15:"ヘクタール";s:3:"㌷";s:9:"ペソ";s:3:"㌸";s:12:"ペニヒ";s:3:"㌹";s:9:"ヘルツ";s:3:"㌺";s:12:"ペンス";s:3:"㌻";s:15:"ページ";s:3:"㌼";s:12:"ベータ";s:3:"㌽";s:15:"ポイント";s:3:"㌾";s:12:"ボルト";s:3:"㌿";s:6:"ホン";s:3:"㍀";s:15:"ポンド";s:3:"㍁";s:9:"ホール";s:3:"㍂";s:9:"ホーン";s:3:"㍃";s:12:"マイクロ";s:3:"㍄";s:9:"マイル";s:3:"㍅";s:9:"マッハ";s:3:"㍆";s:9:"マルク";s:3:"㍇";s:15:"マンション";s:3:"㍈";s:12:"ミクロン";s:3:"㍉";s:6:"ミリ";s:3:"㍊";s:18:"ミリバール";s:3:"㍋";s:9:"メガ";s:3:"㍌";s:15:"メガトン";s:3:"㍍";s:12:"メートル";s:3:"㍎";s:12:"ヤード";s:3:"㍏";s:9:"ヤール";s:3:"㍐";s:9:"ユアン";s:3:"㍑";s:12:"リットル";s:3:"㍒";s:6:"リラ";s:3:"㍓";s:12:"ルピー";s:3:"㍔";s:15:"ルーブル";s:3:"㍕";s:6:"レム";s:3:"㍖";s:18:"レントゲン";s:3:"㍗";s:9:"ワット";s:3:"㍘";s:4:"0点";s:3:"㍙";s:4:"1点";s:3:"㍚";s:4:"2点";s:3:"㍛";s:4:"3点";s:3:"㍜";s:4:"4点";s:3:"㍝";s:4:"5点";s:3:"㍞";s:4:"6点";s:3:"㍟";s:4:"7点";s:3:"㍠";s:4:"8点";s:3:"㍡";s:4:"9点";s:3:"㍢";s:5:"10点";s:3:"㍣";s:5:"11点";s:3:"㍤";s:5:"12点";s:3:"㍥";s:5:"13点";s:3:"㍦";s:5:"14点";s:3:"㍧";s:5:"15点";s:3:"㍨";s:5:"16点";s:3:"㍩";s:5:"17点";s:3:"㍪";s:5:"18点";s:3:"㍫";s:5:"19点";s:3:"㍬";s:5:"20点";s:3:"㍭";s:5:"21点";s:3:"㍮";s:5:"22点";s:3:"㍯";s:5:"23点";s:3:"㍰";s:5:"24点";s:3:"㍱";s:3:"hPa";s:3:"㍲";s:2:"da";s:3:"㍳";s:2:"AU";s:3:"㍴";s:3:"bar";s:3:"㍵";s:2:"oV";s:3:"㍶";s:2:"pc";s:3:"㍷";s:2:"dm";s:3:"㍸";s:3:"dm2";s:3:"㍹";s:3:"dm3";s:3:"㍺";s:2:"IU";s:3:"㍻";s:6:"平成";s:3:"㍼";s:6:"昭和";s:3:"㍽";s:6:"大正";s:3:"㍾";s:6:"明治";s:3:"㍿";s:12:"株式会社";s:3:"㎀";s:2:"pA";s:3:"㎁";s:2:"nA";s:3:"㎂";s:3:"μA";s:3:"㎃";s:2:"mA";s:3:"㎄";s:2:"kA";s:3:"㎅";s:2:"KB";s:3:"㎆";s:2:"MB";s:3:"㎇";s:2:"GB";s:3:"㎈";s:3:"cal";s:3:"㎉";s:4:"kcal";s:3:"㎊";s:2:"pF";s:3:"㎋";s:2:"nF";s:3:"㎌";s:3:"μF";s:3:"㎍";s:3:"μg";s:3:"㎎";s:2:"mg";s:3:"㎏";s:2:"kg";s:3:"㎐";s:2:"Hz";s:3:"㎑";s:3:"kHz";s:3:"㎒";s:3:"MHz";s:3:"㎓";s:3:"GHz";s:3:"㎔";s:3:"THz";s:3:"㎕";s:3:"μl";s:3:"㎖";s:2:"ml";s:3:"㎗";s:2:"dl";s:3:"㎘";s:2:"kl";s:3:"㎙";s:2:"fm";s:3:"㎚";s:2:"nm";s:3:"㎛";s:3:"μm";s:3:"㎜";s:2:"mm";s:3:"㎝";s:2:"cm";s:3:"㎞";s:2:"km";s:3:"㎟";s:3:"mm2";s:3:"㎠";s:3:"cm2";s:3:"㎡";s:2:"m2";s:3:"㎢";s:3:"km2";s:3:"㎣";s:3:"mm3";s:3:"㎤";s:3:"cm3";s:3:"㎥";s:2:"m3";s:3:"㎦";s:3:"km3";s:3:"㎧";s:5:"m∕s";s:3:"㎨";s:6:"m∕s2";s:3:"㎩";s:2:"Pa";s:3:"㎪";s:3:"kPa";s:3:"㎫";s:3:"MPa";s:3:"㎬";s:3:"GPa";s:3:"㎭";s:3:"rad";s:3:"㎮";s:7:"rad∕s";s:3:"㎯";s:8:"rad∕s2";s:3:"㎰";s:2:"ps";s:3:"㎱";s:2:"ns";s:3:"㎲";s:3:"μs";s:3:"㎳";s:2:"ms";s:3:"㎴";s:2:"pV";s:3:"㎵";s:2:"nV";s:3:"㎶";s:3:"μV";s:3:"㎷";s:2:"mV";s:3:"㎸";s:2:"kV";s:3:"㎹";s:2:"MV";s:3:"㎺";s:2:"pW";s:3:"㎻";s:2:"nW";s:3:"㎼";s:3:"μW";s:3:"㎽";s:2:"mW";s:3:"㎾";s:2:"kW";s:3:"㎿";s:2:"MW";s:3:"㏀";s:3:"kΩ";s:3:"㏁";s:3:"MΩ";s:3:"㏂";s:4:"a.m.";s:3:"㏃";s:2:"Bq";s:3:"㏄";s:2:"cc";s:3:"㏅";s:2:"cd";s:3:"㏆";s:6:"C∕kg";s:3:"㏇";s:3:"Co.";s:3:"㏈";s:2:"dB";s:3:"㏉";s:2:"Gy";s:3:"㏊";s:2:"ha";s:3:"㏋";s:2:"HP";s:3:"㏌";s:2:"in";s:3:"㏍";s:2:"KK";s:3:"㏎";s:2:"KM";s:3:"㏏";s:2:"kt";s:3:"㏐";s:2:"lm";s:3:"㏑";s:2:"ln";s:3:"㏒";s:3:"log";s:3:"㏓";s:2:"lx";s:3:"㏔";s:2:"mb";s:3:"㏕";s:3:"mil";s:3:"㏖";s:3:"mol";s:3:"㏗";s:2:"PH";s:3:"㏘";s:4:"p.m.";s:3:"㏙";s:3:"PPM";s:3:"㏚";s:2:"PR";s:3:"㏛";s:2:"sr";s:3:"㏜";s:2:"Sv";s:3:"㏝";s:2:"Wb";s:3:"㏞";s:5:"V∕m";s:3:"㏟";s:5:"A∕m";s:3:"㏠";s:4:"1日";s:3:"㏡";s:4:"2日";s:3:"㏢";s:4:"3日";s:3:"㏣";s:4:"4日";s:3:"㏤";s:4:"5日";s:3:"㏥";s:4:"6日";s:3:"㏦";s:4:"7日";s:3:"㏧";s:4:"8日";s:3:"㏨";s:4:"9日";s:3:"㏩";s:5:"10日";s:3:"㏪";s:5:"11日";s:3:"㏫";s:5:"12日";s:3:"㏬";s:5:"13日";s:3:"㏭";s:5:"14日";s:3:"㏮";s:5:"15日";s:3:"㏯";s:5:"16日";s:3:"㏰";s:5:"17日";s:3:"㏱";s:5:"18日";s:3:"㏲";s:5:"19日";s:3:"㏳";s:5:"20日";s:3:"㏴";s:5:"21日";s:3:"㏵";s:5:"22日";s:3:"㏶";s:5:"23日";s:3:"㏷";s:5:"24日";s:3:"㏸";s:5:"25日";s:3:"㏹";s:5:"26日";s:3:"㏺";s:5:"27日";s:3:"㏻";s:5:"28日";s:3:"㏼";s:5:"29日";s:3:"㏽";s:5:"30日";s:3:"㏾";s:5:"31日";s:3:"㏿";s:3:"gal";s:3:"ꝰ";s:3:"ꝯ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:3:"𤋮";s:4:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"ff";s:2:"ff";s:3:"fi";s:2:"fi";s:3:"fl";s:2:"fl";s:3:"ffi";s:3:"ffi";s:3:"ffl";s:3:"ffl";s:3:"ſt";s:2:"st";s:3:"st";s:2:"st";s:3:"ﬓ";s:4:"մն";s:3:"ﬔ";s:4:"մե";s:3:"ﬕ";s:4:"մի";s:3:"ﬖ";s:4:"վն";s:3:"ﬗ";s:4:"մխ";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"ﬠ";s:2:"ע";s:3:"ﬡ";s:2:"א";s:3:"ﬢ";s:2:"ד";s:3:"ﬣ";s:2:"ה";s:3:"ﬤ";s:2:"כ";s:3:"ﬥ";s:2:"ל";s:3:"ﬦ";s:2:"ם";s:3:"ﬧ";s:2:"ר";s:3:"ﬨ";s:2:"ת";s:3:"﬩";s:1:"+";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:3:"ﭏ";s:4:"אל";s:3:"ﭐ";s:2:"ٱ";s:3:"ﭑ";s:2:"ٱ";s:3:"ﭒ";s:2:"ٻ";s:3:"ﭓ";s:2:"ٻ";s:3:"ﭔ";s:2:"ٻ";s:3:"ﭕ";s:2:"ٻ";s:3:"ﭖ";s:2:"پ";s:3:"ﭗ";s:2:"پ";s:3:"ﭘ";s:2:"پ";s:3:"ﭙ";s:2:"پ";s:3:"ﭚ";s:2:"ڀ";s:3:"ﭛ";s:2:"ڀ";s:3:"ﭜ";s:2:"ڀ";s:3:"ﭝ";s:2:"ڀ";s:3:"ﭞ";s:2:"ٺ";s:3:"ﭟ";s:2:"ٺ";s:3:"ﭠ";s:2:"ٺ";s:3:"ﭡ";s:2:"ٺ";s:3:"ﭢ";s:2:"ٿ";s:3:"ﭣ";s:2:"ٿ";s:3:"ﭤ";s:2:"ٿ";s:3:"ﭥ";s:2:"ٿ";s:3:"ﭦ";s:2:"ٹ";s:3:"ﭧ";s:2:"ٹ";s:3:"ﭨ";s:2:"ٹ";s:3:"ﭩ";s:2:"ٹ";s:3:"ﭪ";s:2:"ڤ";s:3:"ﭫ";s:2:"ڤ";s:3:"ﭬ";s:2:"ڤ";s:3:"ﭭ";s:2:"ڤ";s:3:"ﭮ";s:2:"ڦ";s:3:"ﭯ";s:2:"ڦ";s:3:"ﭰ";s:2:"ڦ";s:3:"ﭱ";s:2:"ڦ";s:3:"ﭲ";s:2:"ڄ";s:3:"ﭳ";s:2:"ڄ";s:3:"ﭴ";s:2:"ڄ";s:3:"ﭵ";s:2:"ڄ";s:3:"ﭶ";s:2:"ڃ";s:3:"ﭷ";s:2:"ڃ";s:3:"ﭸ";s:2:"ڃ";s:3:"ﭹ";s:2:"ڃ";s:3:"ﭺ";s:2:"چ";s:3:"ﭻ";s:2:"چ";s:3:"ﭼ";s:2:"چ";s:3:"ﭽ";s:2:"چ";s:3:"ﭾ";s:2:"ڇ";s:3:"ﭿ";s:2:"ڇ";s:3:"ﮀ";s:2:"ڇ";s:3:"ﮁ";s:2:"ڇ";s:3:"ﮂ";s:2:"ڍ";s:3:"ﮃ";s:2:"ڍ";s:3:"ﮄ";s:2:"ڌ";s:3:"ﮅ";s:2:"ڌ";s:3:"ﮆ";s:2:"ڎ";s:3:"ﮇ";s:2:"ڎ";s:3:"ﮈ";s:2:"ڈ";s:3:"ﮉ";s:2:"ڈ";s:3:"ﮊ";s:2:"ژ";s:3:"ﮋ";s:2:"ژ";s:3:"ﮌ";s:2:"ڑ";s:3:"ﮍ";s:2:"ڑ";s:3:"ﮎ";s:2:"ک";s:3:"ﮏ";s:2:"ک";s:3:"ﮐ";s:2:"ک";s:3:"ﮑ";s:2:"ک";s:3:"ﮒ";s:2:"گ";s:3:"ﮓ";s:2:"گ";s:3:"ﮔ";s:2:"گ";s:3:"ﮕ";s:2:"گ";s:3:"ﮖ";s:2:"ڳ";s:3:"ﮗ";s:2:"ڳ";s:3:"ﮘ";s:2:"ڳ";s:3:"ﮙ";s:2:"ڳ";s:3:"ﮚ";s:2:"ڱ";s:3:"ﮛ";s:2:"ڱ";s:3:"ﮜ";s:2:"ڱ";s:3:"ﮝ";s:2:"ڱ";s:3:"ﮞ";s:2:"ں";s:3:"ﮟ";s:2:"ں";s:3:"ﮠ";s:2:"ڻ";s:3:"ﮡ";s:2:"ڻ";s:3:"ﮢ";s:2:"ڻ";s:3:"ﮣ";s:2:"ڻ";s:3:"ﮤ";s:4:"ۀ";s:3:"ﮥ";s:4:"ۀ";s:3:"ﮦ";s:2:"ہ";s:3:"ﮧ";s:2:"ہ";s:3:"ﮨ";s:2:"ہ";s:3:"ﮩ";s:2:"ہ";s:3:"ﮪ";s:2:"ھ";s:3:"ﮫ";s:2:"ھ";s:3:"ﮬ";s:2:"ھ";s:3:"ﮭ";s:2:"ھ";s:3:"ﮮ";s:2:"ے";s:3:"ﮯ";s:2:"ے";s:3:"ﮰ";s:4:"ۓ";s:3:"ﮱ";s:4:"ۓ";s:3:"ﯓ";s:2:"ڭ";s:3:"ﯔ";s:2:"ڭ";s:3:"ﯕ";s:2:"ڭ";s:3:"ﯖ";s:2:"ڭ";s:3:"ﯗ";s:2:"ۇ";s:3:"ﯘ";s:2:"ۇ";s:3:"ﯙ";s:2:"ۆ";s:3:"ﯚ";s:2:"ۆ";s:3:"ﯛ";s:2:"ۈ";s:3:"ﯜ";s:2:"ۈ";s:3:"ﯝ";s:4:"ۇٴ";s:3:"ﯞ";s:2:"ۋ";s:3:"ﯟ";s:2:"ۋ";s:3:"ﯠ";s:2:"ۅ";s:3:"ﯡ";s:2:"ۅ";s:3:"ﯢ";s:2:"ۉ";s:3:"ﯣ";s:2:"ۉ";s:3:"ﯤ";s:2:"ې";s:3:"ﯥ";s:2:"ې";s:3:"ﯦ";s:2:"ې";s:3:"ﯧ";s:2:"ې";s:3:"ﯨ";s:2:"ى";s:3:"ﯩ";s:2:"ى";s:3:"ﯪ";s:6:"ئا";s:3:"ﯫ";s:6:"ئا";s:3:"ﯬ";s:6:"ئە";s:3:"ﯭ";s:6:"ئە";s:3:"ﯮ";s:6:"ئو";s:3:"ﯯ";s:6:"ئو";s:3:"ﯰ";s:6:"ئۇ";s:3:"ﯱ";s:6:"ئۇ";s:3:"ﯲ";s:6:"ئۆ";s:3:"ﯳ";s:6:"ئۆ";s:3:"ﯴ";s:6:"ئۈ";s:3:"ﯵ";s:6:"ئۈ";s:3:"ﯶ";s:6:"ئې";s:3:"ﯷ";s:6:"ئې";s:3:"ﯸ";s:6:"ئې";s:3:"ﯹ";s:6:"ئى";s:3:"ﯺ";s:6:"ئى";s:3:"ﯻ";s:6:"ئى";s:3:"ﯼ";s:2:"ی";s:3:"ﯽ";s:2:"ی";s:3:"ﯾ";s:2:"ی";s:3:"ﯿ";s:2:"ی";s:3:"ﰀ";s:6:"ئج";s:3:"ﰁ";s:6:"ئح";s:3:"ﰂ";s:6:"ئم";s:3:"ﰃ";s:6:"ئى";s:3:"ﰄ";s:6:"ئي";s:3:"ﰅ";s:4:"بج";s:3:"ﰆ";s:4:"بح";s:3:"ﰇ";s:4:"بخ";s:3:"ﰈ";s:4:"بم";s:3:"ﰉ";s:4:"بى";s:3:"ﰊ";s:4:"بي";s:3:"ﰋ";s:4:"تج";s:3:"ﰌ";s:4:"تح";s:3:"ﰍ";s:4:"تخ";s:3:"ﰎ";s:4:"تم";s:3:"ﰏ";s:4:"تى";s:3:"ﰐ";s:4:"تي";s:3:"ﰑ";s:4:"ثج";s:3:"ﰒ";s:4:"ثم";s:3:"ﰓ";s:4:"ثى";s:3:"ﰔ";s:4:"ثي";s:3:"ﰕ";s:4:"جح";s:3:"ﰖ";s:4:"جم";s:3:"ﰗ";s:4:"حج";s:3:"ﰘ";s:4:"حم";s:3:"ﰙ";s:4:"خج";s:3:"ﰚ";s:4:"خح";s:3:"ﰛ";s:4:"خم";s:3:"ﰜ";s:4:"سج";s:3:"ﰝ";s:4:"سح";s:3:"ﰞ";s:4:"سخ";s:3:"ﰟ";s:4:"سم";s:3:"ﰠ";s:4:"صح";s:3:"ﰡ";s:4:"صم";s:3:"ﰢ";s:4:"ضج";s:3:"ﰣ";s:4:"ضح";s:3:"ﰤ";s:4:"ضخ";s:3:"ﰥ";s:4:"ضم";s:3:"ﰦ";s:4:"طح";s:3:"ﰧ";s:4:"طم";s:3:"ﰨ";s:4:"ظم";s:3:"ﰩ";s:4:"عج";s:3:"ﰪ";s:4:"عم";s:3:"ﰫ";s:4:"غج";s:3:"ﰬ";s:4:"غم";s:3:"ﰭ";s:4:"فج";s:3:"ﰮ";s:4:"فح";s:3:"ﰯ";s:4:"فخ";s:3:"ﰰ";s:4:"فم";s:3:"ﰱ";s:4:"فى";s:3:"ﰲ";s:4:"في";s:3:"ﰳ";s:4:"قح";s:3:"ﰴ";s:4:"قم";s:3:"ﰵ";s:4:"قى";s:3:"ﰶ";s:4:"قي";s:3:"ﰷ";s:4:"كا";s:3:"ﰸ";s:4:"كج";s:3:"ﰹ";s:4:"كح";s:3:"ﰺ";s:4:"كخ";s:3:"ﰻ";s:4:"كل";s:3:"ﰼ";s:4:"كم";s:3:"ﰽ";s:4:"كى";s:3:"ﰾ";s:4:"كي";s:3:"ﰿ";s:4:"لج";s:3:"ﱀ";s:4:"لح";s:3:"ﱁ";s:4:"لخ";s:3:"ﱂ";s:4:"لم";s:3:"ﱃ";s:4:"لى";s:3:"ﱄ";s:4:"لي";s:3:"ﱅ";s:4:"مج";s:3:"ﱆ";s:4:"مح";s:3:"ﱇ";s:4:"مخ";s:3:"ﱈ";s:4:"مم";s:3:"ﱉ";s:4:"مى";s:3:"ﱊ";s:4:"مي";s:3:"ﱋ";s:4:"نج";s:3:"ﱌ";s:4:"نح";s:3:"ﱍ";s:4:"نخ";s:3:"ﱎ";s:4:"نم";s:3:"ﱏ";s:4:"نى";s:3:"ﱐ";s:4:"ني";s:3:"ﱑ";s:4:"هج";s:3:"ﱒ";s:4:"هم";s:3:"ﱓ";s:4:"هى";s:3:"ﱔ";s:4:"هي";s:3:"ﱕ";s:4:"يج";s:3:"ﱖ";s:4:"يح";s:3:"ﱗ";s:4:"يخ";s:3:"ﱘ";s:4:"يم";s:3:"ﱙ";s:4:"يى";s:3:"ﱚ";s:4:"يي";s:3:"ﱛ";s:4:"ذٰ";s:3:"ﱜ";s:4:"رٰ";s:3:"ﱝ";s:4:"ىٰ";s:3:"ﱞ";s:5:" ٌّ";s:3:"ﱟ";s:5:" ٍّ";s:3:"ﱠ";s:5:" َّ";s:3:"ﱡ";s:5:" ُّ";s:3:"ﱢ";s:5:" ِّ";s:3:"ﱣ";s:5:" ّٰ";s:3:"ﱤ";s:6:"ئر";s:3:"ﱥ";s:6:"ئز";s:3:"ﱦ";s:6:"ئم";s:3:"ﱧ";s:6:"ئن";s:3:"ﱨ";s:6:"ئى";s:3:"ﱩ";s:6:"ئي";s:3:"ﱪ";s:4:"بر";s:3:"ﱫ";s:4:"بز";s:3:"ﱬ";s:4:"بم";s:3:"ﱭ";s:4:"بن";s:3:"ﱮ";s:4:"بى";s:3:"ﱯ";s:4:"بي";s:3:"ﱰ";s:4:"تر";s:3:"ﱱ";s:4:"تز";s:3:"ﱲ";s:4:"تم";s:3:"ﱳ";s:4:"تن";s:3:"ﱴ";s:4:"تى";s:3:"ﱵ";s:4:"تي";s:3:"ﱶ";s:4:"ثر";s:3:"ﱷ";s:4:"ثز";s:3:"ﱸ";s:4:"ثم";s:3:"ﱹ";s:4:"ثن";s:3:"ﱺ";s:4:"ثى";s:3:"ﱻ";s:4:"ثي";s:3:"ﱼ";s:4:"فى";s:3:"ﱽ";s:4:"في";s:3:"ﱾ";s:4:"قى";s:3:"ﱿ";s:4:"قي";s:3:"ﲀ";s:4:"كا";s:3:"ﲁ";s:4:"كل";s:3:"ﲂ";s:4:"كم";s:3:"ﲃ";s:4:"كى";s:3:"ﲄ";s:4:"كي";s:3:"ﲅ";s:4:"لم";s:3:"ﲆ";s:4:"لى";s:3:"ﲇ";s:4:"لي";s:3:"ﲈ";s:4:"ما";s:3:"ﲉ";s:4:"مم";s:3:"ﲊ";s:4:"نر";s:3:"ﲋ";s:4:"نز";s:3:"ﲌ";s:4:"نم";s:3:"ﲍ";s:4:"نن";s:3:"ﲎ";s:4:"نى";s:3:"ﲏ";s:4:"ني";s:3:"ﲐ";s:4:"ىٰ";s:3:"ﲑ";s:4:"ير";s:3:"ﲒ";s:4:"يز";s:3:"ﲓ";s:4:"يم";s:3:"ﲔ";s:4:"ين";s:3:"ﲕ";s:4:"يى";s:3:"ﲖ";s:4:"يي";s:3:"ﲗ";s:6:"ئج";s:3:"ﲘ";s:6:"ئح";s:3:"ﲙ";s:6:"ئخ";s:3:"ﲚ";s:6:"ئم";s:3:"ﲛ";s:6:"ئه";s:3:"ﲜ";s:4:"بج";s:3:"ﲝ";s:4:"بح";s:3:"ﲞ";s:4:"بخ";s:3:"ﲟ";s:4:"بم";s:3:"ﲠ";s:4:"به";s:3:"ﲡ";s:4:"تج";s:3:"ﲢ";s:4:"تح";s:3:"ﲣ";s:4:"تخ";s:3:"ﲤ";s:4:"تم";s:3:"ﲥ";s:4:"ته";s:3:"ﲦ";s:4:"ثم";s:3:"ﲧ";s:4:"جح";s:3:"ﲨ";s:4:"جم";s:3:"ﲩ";s:4:"حج";s:3:"ﲪ";s:4:"حم";s:3:"ﲫ";s:4:"خج";s:3:"ﲬ";s:4:"خم";s:3:"ﲭ";s:4:"سج";s:3:"ﲮ";s:4:"سح";s:3:"ﲯ";s:4:"سخ";s:3:"ﲰ";s:4:"سم";s:3:"ﲱ";s:4:"صح";s:3:"ﲲ";s:4:"صخ";s:3:"ﲳ";s:4:"صم";s:3:"ﲴ";s:4:"ضج";s:3:"ﲵ";s:4:"ضح";s:3:"ﲶ";s:4:"ضخ";s:3:"ﲷ";s:4:"ضم";s:3:"ﲸ";s:4:"طح";s:3:"ﲹ";s:4:"ظم";s:3:"ﲺ";s:4:"عج";s:3:"ﲻ";s:4:"عم";s:3:"ﲼ";s:4:"غج";s:3:"ﲽ";s:4:"غم";s:3:"ﲾ";s:4:"فج";s:3:"ﲿ";s:4:"فح";s:3:"ﳀ";s:4:"فخ";s:3:"ﳁ";s:4:"فم";s:3:"ﳂ";s:4:"قح";s:3:"ﳃ";s:4:"قم";s:3:"ﳄ";s:4:"كج";s:3:"ﳅ";s:4:"كح";s:3:"ﳆ";s:4:"كخ";s:3:"ﳇ";s:4:"كل";s:3:"ﳈ";s:4:"كم";s:3:"ﳉ";s:4:"لج";s:3:"ﳊ";s:4:"لح";s:3:"ﳋ";s:4:"لخ";s:3:"ﳌ";s:4:"لم";s:3:"ﳍ";s:4:"له";s:3:"ﳎ";s:4:"مج";s:3:"ﳏ";s:4:"مح";s:3:"ﳐ";s:4:"مخ";s:3:"ﳑ";s:4:"مم";s:3:"ﳒ";s:4:"نج";s:3:"ﳓ";s:4:"نح";s:3:"ﳔ";s:4:"نخ";s:3:"ﳕ";s:4:"نم";s:3:"ﳖ";s:4:"نه";s:3:"ﳗ";s:4:"هج";s:3:"ﳘ";s:4:"هم";s:3:"ﳙ";s:4:"هٰ";s:3:"ﳚ";s:4:"يج";s:3:"ﳛ";s:4:"يح";s:3:"ﳜ";s:4:"يخ";s:3:"ﳝ";s:4:"يم";s:3:"ﳞ";s:4:"يه";s:3:"ﳟ";s:6:"ئم";s:3:"ﳠ";s:6:"ئه";s:3:"ﳡ";s:4:"بم";s:3:"ﳢ";s:4:"به";s:3:"ﳣ";s:4:"تم";s:3:"ﳤ";s:4:"ته";s:3:"ﳥ";s:4:"ثم";s:3:"ﳦ";s:4:"ثه";s:3:"ﳧ";s:4:"سم";s:3:"ﳨ";s:4:"سه";s:3:"ﳩ";s:4:"شم";s:3:"ﳪ";s:4:"شه";s:3:"ﳫ";s:4:"كل";s:3:"ﳬ";s:4:"كم";s:3:"ﳭ";s:4:"لم";s:3:"ﳮ";s:4:"نم";s:3:"ﳯ";s:4:"نه";s:3:"ﳰ";s:4:"يم";s:3:"ﳱ";s:4:"يه";s:3:"ﳲ";s:6:"ـَّ";s:3:"ﳳ";s:6:"ـُّ";s:3:"ﳴ";s:6:"ـِّ";s:3:"ﳵ";s:4:"طى";s:3:"ﳶ";s:4:"طي";s:3:"ﳷ";s:4:"عى";s:3:"ﳸ";s:4:"عي";s:3:"ﳹ";s:4:"غى";s:3:"ﳺ";s:4:"غي";s:3:"ﳻ";s:4:"سى";s:3:"ﳼ";s:4:"سي";s:3:"ﳽ";s:4:"شى";s:3:"ﳾ";s:4:"شي";s:3:"ﳿ";s:4:"حى";s:3:"ﴀ";s:4:"حي";s:3:"ﴁ";s:4:"جى";s:3:"ﴂ";s:4:"جي";s:3:"ﴃ";s:4:"خى";s:3:"ﴄ";s:4:"خي";s:3:"ﴅ";s:4:"صى";s:3:"ﴆ";s:4:"صي";s:3:"ﴇ";s:4:"ضى";s:3:"ﴈ";s:4:"ضي";s:3:"ﴉ";s:4:"شج";s:3:"ﴊ";s:4:"شح";s:3:"ﴋ";s:4:"شخ";s:3:"ﴌ";s:4:"شم";s:3:"ﴍ";s:4:"شر";s:3:"ﴎ";s:4:"سر";s:3:"ﴏ";s:4:"صر";s:3:"ﴐ";s:4:"ضر";s:3:"ﴑ";s:4:"طى";s:3:"ﴒ";s:4:"طي";s:3:"ﴓ";s:4:"عى";s:3:"ﴔ";s:4:"عي";s:3:"ﴕ";s:4:"غى";s:3:"ﴖ";s:4:"غي";s:3:"ﴗ";s:4:"سى";s:3:"ﴘ";s:4:"سي";s:3:"ﴙ";s:4:"شى";s:3:"ﴚ";s:4:"شي";s:3:"ﴛ";s:4:"حى";s:3:"ﴜ";s:4:"حي";s:3:"ﴝ";s:4:"جى";s:3:"ﴞ";s:4:"جي";s:3:"ﴟ";s:4:"خى";s:3:"ﴠ";s:4:"خي";s:3:"ﴡ";s:4:"صى";s:3:"ﴢ";s:4:"صي";s:3:"ﴣ";s:4:"ضى";s:3:"ﴤ";s:4:"ضي";s:3:"ﴥ";s:4:"شج";s:3:"ﴦ";s:4:"شح";s:3:"ﴧ";s:4:"شخ";s:3:"ﴨ";s:4:"شم";s:3:"ﴩ";s:4:"شر";s:3:"ﴪ";s:4:"سر";s:3:"ﴫ";s:4:"صر";s:3:"ﴬ";s:4:"ضر";s:3:"ﴭ";s:4:"شج";s:3:"ﴮ";s:4:"شح";s:3:"ﴯ";s:4:"شخ";s:3:"ﴰ";s:4:"شم";s:3:"ﴱ";s:4:"سه";s:3:"ﴲ";s:4:"شه";s:3:"ﴳ";s:4:"طم";s:3:"ﴴ";s:4:"سج";s:3:"ﴵ";s:4:"سح";s:3:"ﴶ";s:4:"سخ";s:3:"ﴷ";s:4:"شج";s:3:"ﴸ";s:4:"شح";s:3:"ﴹ";s:4:"شخ";s:3:"ﴺ";s:4:"طم";s:3:"ﴻ";s:4:"ظم";s:3:"ﴼ";s:4:"اً";s:3:"ﴽ";s:4:"اً";s:3:"ﵐ";s:6:"تجم";s:3:"ﵑ";s:6:"تحج";s:3:"ﵒ";s:6:"تحج";s:3:"ﵓ";s:6:"تحم";s:3:"ﵔ";s:6:"تخم";s:3:"ﵕ";s:6:"تمج";s:3:"ﵖ";s:6:"تمح";s:3:"ﵗ";s:6:"تمخ";s:3:"ﵘ";s:6:"جمح";s:3:"ﵙ";s:6:"جمح";s:3:"ﵚ";s:6:"حمي";s:3:"ﵛ";s:6:"حمى";s:3:"ﵜ";s:6:"سحج";s:3:"ﵝ";s:6:"سجح";s:3:"ﵞ";s:6:"سجى";s:3:"ﵟ";s:6:"سمح";s:3:"ﵠ";s:6:"سمح";s:3:"ﵡ";s:6:"سمج";s:3:"ﵢ";s:6:"سمم";s:3:"ﵣ";s:6:"سمم";s:3:"ﵤ";s:6:"صحح";s:3:"ﵥ";s:6:"صحح";s:3:"ﵦ";s:6:"صمم";s:3:"ﵧ";s:6:"شحم";s:3:"ﵨ";s:6:"شحم";s:3:"ﵩ";s:6:"شجي";s:3:"ﵪ";s:6:"شمخ";s:3:"ﵫ";s:6:"شمخ";s:3:"ﵬ";s:6:"شمم";s:3:"ﵭ";s:6:"شمم";s:3:"ﵮ";s:6:"ضحى";s:3:"ﵯ";s:6:"ضخم";s:3:"ﵰ";s:6:"ضخم";s:3:"ﵱ";s:6:"طمح";s:3:"ﵲ";s:6:"طمح";s:3:"ﵳ";s:6:"طمم";s:3:"ﵴ";s:6:"طمي";s:3:"ﵵ";s:6:"عجم";s:3:"ﵶ";s:6:"عمم";s:3:"ﵷ";s:6:"عمم";s:3:"ﵸ";s:6:"عمى";s:3:"ﵹ";s:6:"غمم";s:3:"ﵺ";s:6:"غمي";s:3:"ﵻ";s:6:"غمى";s:3:"ﵼ";s:6:"فخم";s:3:"ﵽ";s:6:"فخم";s:3:"ﵾ";s:6:"قمح";s:3:"ﵿ";s:6:"قمم";s:3:"ﶀ";s:6:"لحم";s:3:"ﶁ";s:6:"لحي";s:3:"ﶂ";s:6:"لحى";s:3:"ﶃ";s:6:"لجج";s:3:"ﶄ";s:6:"لجج";s:3:"ﶅ";s:6:"لخم";s:3:"ﶆ";s:6:"لخم";s:3:"ﶇ";s:6:"لمح";s:3:"ﶈ";s:6:"لمح";s:3:"ﶉ";s:6:"محج";s:3:"ﶊ";s:6:"محم";s:3:"ﶋ";s:6:"محي";s:3:"ﶌ";s:6:"مجح";s:3:"ﶍ";s:6:"مجم";s:3:"ﶎ";s:6:"مخج";s:3:"ﶏ";s:6:"مخم";s:3:"ﶒ";s:6:"مجخ";s:3:"ﶓ";s:6:"همج";s:3:"ﶔ";s:6:"همم";s:3:"ﶕ";s:6:"نحم";s:3:"ﶖ";s:6:"نحى";s:3:"ﶗ";s:6:"نجم";s:3:"ﶘ";s:6:"نجم";s:3:"ﶙ";s:6:"نجى";s:3:"ﶚ";s:6:"نمي";s:3:"ﶛ";s:6:"نمى";s:3:"ﶜ";s:6:"يمم";s:3:"ﶝ";s:6:"يمم";s:3:"ﶞ";s:6:"بخي";s:3:"ﶟ";s:6:"تجي";s:3:"ﶠ";s:6:"تجى";s:3:"ﶡ";s:6:"تخي";s:3:"ﶢ";s:6:"تخى";s:3:"ﶣ";s:6:"تمي";s:3:"ﶤ";s:6:"تمى";s:3:"ﶥ";s:6:"جمي";s:3:"ﶦ";s:6:"جحى";s:3:"ﶧ";s:6:"جمى";s:3:"ﶨ";s:6:"سخى";s:3:"ﶩ";s:6:"صحي";s:3:"ﶪ";s:6:"شحي";s:3:"ﶫ";s:6:"ضحي";s:3:"ﶬ";s:6:"لجي";s:3:"ﶭ";s:6:"لمي";s:3:"ﶮ";s:6:"يحي";s:3:"ﶯ";s:6:"يجي";s:3:"ﶰ";s:6:"يمي";s:3:"ﶱ";s:6:"ممي";s:3:"ﶲ";s:6:"قمي";s:3:"ﶳ";s:6:"نحي";s:3:"ﶴ";s:6:"قمح";s:3:"ﶵ";s:6:"لحم";s:3:"ﶶ";s:6:"عمي";s:3:"ﶷ";s:6:"كمي";s:3:"ﶸ";s:6:"نجح";s:3:"ﶹ";s:6:"مخي";s:3:"ﶺ";s:6:"لجم";s:3:"ﶻ";s:6:"كمم";s:3:"ﶼ";s:6:"لجم";s:3:"ﶽ";s:6:"نجح";s:3:"ﶾ";s:6:"جحي";s:3:"ﶿ";s:6:"حجي";s:3:"ﷀ";s:6:"مجي";s:3:"ﷁ";s:6:"فمي";s:3:"ﷂ";s:6:"بحي";s:3:"ﷃ";s:6:"كمم";s:3:"ﷄ";s:6:"عجم";s:3:"ﷅ";s:6:"صمم";s:3:"ﷆ";s:6:"سخي";s:3:"ﷇ";s:6:"نجي";s:3:"ﷰ";s:6:"صلے";s:3:"ﷱ";s:6:"قلے";s:3:"ﷲ";s:8:"الله";s:3:"ﷳ";s:8:"اكبر";s:3:"ﷴ";s:8:"محمد";s:3:"ﷵ";s:8:"صلعم";s:3:"ﷶ";s:8:"رسول";s:3:"ﷷ";s:8:"عليه";s:3:"ﷸ";s:8:"وسلم";s:3:"ﷹ";s:6:"صلى";s:3:"ﷺ";s:33:"صلى الله عليه وسلم";s:3:"ﷻ";s:15:"جل جلاله";s:3:"﷼";s:8:"ریال";s:3:"︐";s:1:",";s:3:"︑";s:3:"、";s:3:"︒";s:3:"。";s:3:"︓";s:1:":";s:3:"︔";s:1:";";s:3:"︕";s:1:"!";s:3:"︖";s:1:"?";s:3:"︗";s:3:"〖";s:3:"︘";s:3:"〗";s:3:"︙";s:3:"...";s:3:"︰";s:2:"..";s:3:"︱";s:3:"—";s:3:"︲";s:3:"–";s:3:"︳";s:1:"_";s:3:"︴";s:1:"_";s:3:"︵";s:1:"(";s:3:"︶";s:1:")";s:3:"︷";s:1:"{";s:3:"︸";s:1:"}";s:3:"︹";s:3:"〔";s:3:"︺";s:3:"〕";s:3:"︻";s:3:"【";s:3:"︼";s:3:"】";s:3:"︽";s:3:"《";s:3:"︾";s:3:"》";s:3:"︿";s:3:"〈";s:3:"﹀";s:3:"〉";s:3:"﹁";s:3:"「";s:3:"﹂";s:3:"」";s:3:"﹃";s:3:"『";s:3:"﹄";s:3:"』";s:3:"﹇";s:1:"[";s:3:"﹈";s:1:"]";s:3:"﹉";s:3:" ̅";s:3:"﹊";s:3:" ̅";s:3:"﹋";s:3:" ̅";s:3:"﹌";s:3:" ̅";s:3:"﹍";s:1:"_";s:3:"﹎";s:1:"_";s:3:"﹏";s:1:"_";s:3:"﹐";s:1:",";s:3:"﹑";s:3:"、";s:3:"﹒";s:1:".";s:3:"﹔";s:1:";";s:3:"﹕";s:1:":";s:3:"﹖";s:1:"?";s:3:"﹗";s:1:"!";s:3:"﹘";s:3:"—";s:3:"﹙";s:1:"(";s:3:"﹚";s:1:")";s:3:"﹛";s:1:"{";s:3:"﹜";s:1:"}";s:3:"﹝";s:3:"〔";s:3:"﹞";s:3:"〕";s:3:"﹟";s:1:"#";s:3:"﹠";s:1:"&";s:3:"﹡";s:1:"*";s:3:"﹢";s:1:"+";s:3:"﹣";s:1:"-";s:3:"﹤";s:1:"<";s:3:"﹥";s:1:">";s:3:"﹦";s:1:"=";s:3:"﹨";s:1:"\\";s:3:"﹩";s:1:"$";s:3:"﹪";s:1:"%";s:3:"﹫";s:1:"@";s:3:"ﹰ";s:3:" ً";s:3:"ﹱ";s:4:"ـً";s:3:"ﹲ";s:3:" ٌ";s:3:"ﹴ";s:3:" ٍ";s:3:"ﹶ";s:3:" َ";s:3:"ﹷ";s:4:"ـَ";s:3:"ﹸ";s:3:" ُ";s:3:"ﹹ";s:4:"ـُ";s:3:"ﹺ";s:3:" ِ";s:3:"ﹻ";s:4:"ـِ";s:3:"ﹼ";s:3:" ّ";s:3:"ﹽ";s:4:"ـّ";s:3:"ﹾ";s:3:" ْ";s:3:"ﹿ";s:4:"ـْ";s:3:"ﺀ";s:2:"ء";s:3:"ﺁ";s:4:"آ";s:3:"ﺂ";s:4:"آ";s:3:"ﺃ";s:4:"أ";s:3:"ﺄ";s:4:"أ";s:3:"ﺅ";s:4:"ؤ";s:3:"ﺆ";s:4:"ؤ";s:3:"ﺇ";s:4:"إ";s:3:"ﺈ";s:4:"إ";s:3:"ﺉ";s:4:"ئ";s:3:"ﺊ";s:4:"ئ";s:3:"ﺋ";s:4:"ئ";s:3:"ﺌ";s:4:"ئ";s:3:"ﺍ";s:2:"ا";s:3:"ﺎ";s:2:"ا";s:3:"ﺏ";s:2:"ب";s:3:"ﺐ";s:2:"ب";s:3:"ﺑ";s:2:"ب";s:3:"ﺒ";s:2:"ب";s:3:"ﺓ";s:2:"ة";s:3:"ﺔ";s:2:"ة";s:3:"ﺕ";s:2:"ت";s:3:"ﺖ";s:2:"ت";s:3:"ﺗ";s:2:"ت";s:3:"ﺘ";s:2:"ت";s:3:"ﺙ";s:2:"ث";s:3:"ﺚ";s:2:"ث";s:3:"ﺛ";s:2:"ث";s:3:"ﺜ";s:2:"ث";s:3:"ﺝ";s:2:"ج";s:3:"ﺞ";s:2:"ج";s:3:"ﺟ";s:2:"ج";s:3:"ﺠ";s:2:"ج";s:3:"ﺡ";s:2:"ح";s:3:"ﺢ";s:2:"ح";s:3:"ﺣ";s:2:"ح";s:3:"ﺤ";s:2:"ح";s:3:"ﺥ";s:2:"خ";s:3:"ﺦ";s:2:"خ";s:3:"ﺧ";s:2:"خ";s:3:"ﺨ";s:2:"خ";s:3:"ﺩ";s:2:"د";s:3:"ﺪ";s:2:"د";s:3:"ﺫ";s:2:"ذ";s:3:"ﺬ";s:2:"ذ";s:3:"ﺭ";s:2:"ر";s:3:"ﺮ";s:2:"ر";s:3:"ﺯ";s:2:"ز";s:3:"ﺰ";s:2:"ز";s:3:"ﺱ";s:2:"س";s:3:"ﺲ";s:2:"س";s:3:"ﺳ";s:2:"س";s:3:"ﺴ";s:2:"س";s:3:"ﺵ";s:2:"ش";s:3:"ﺶ";s:2:"ش";s:3:"ﺷ";s:2:"ش";s:3:"ﺸ";s:2:"ش";s:3:"ﺹ";s:2:"ص";s:3:"ﺺ";s:2:"ص";s:3:"ﺻ";s:2:"ص";s:3:"ﺼ";s:2:"ص";s:3:"ﺽ";s:2:"ض";s:3:"ﺾ";s:2:"ض";s:3:"ﺿ";s:2:"ض";s:3:"ﻀ";s:2:"ض";s:3:"ﻁ";s:2:"ط";s:3:"ﻂ";s:2:"ط";s:3:"ﻃ";s:2:"ط";s:3:"ﻄ";s:2:"ط";s:3:"ﻅ";s:2:"ظ";s:3:"ﻆ";s:2:"ظ";s:3:"ﻇ";s:2:"ظ";s:3:"ﻈ";s:2:"ظ";s:3:"ﻉ";s:2:"ع";s:3:"ﻊ";s:2:"ع";s:3:"ﻋ";s:2:"ع";s:3:"ﻌ";s:2:"ع";s:3:"ﻍ";s:2:"غ";s:3:"ﻎ";s:2:"غ";s:3:"ﻏ";s:2:"غ";s:3:"ﻐ";s:2:"غ";s:3:"ﻑ";s:2:"ف";s:3:"ﻒ";s:2:"ف";s:3:"ﻓ";s:2:"ف";s:3:"ﻔ";s:2:"ف";s:3:"ﻕ";s:2:"ق";s:3:"ﻖ";s:2:"ق";s:3:"ﻗ";s:2:"ق";s:3:"ﻘ";s:2:"ق";s:3:"ﻙ";s:2:"ك";s:3:"ﻚ";s:2:"ك";s:3:"ﻛ";s:2:"ك";s:3:"ﻜ";s:2:"ك";s:3:"ﻝ";s:2:"ل";s:3:"ﻞ";s:2:"ل";s:3:"ﻟ";s:2:"ل";s:3:"ﻠ";s:2:"ل";s:3:"ﻡ";s:2:"م";s:3:"ﻢ";s:2:"م";s:3:"ﻣ";s:2:"م";s:3:"ﻤ";s:2:"م";s:3:"ﻥ";s:2:"ن";s:3:"ﻦ";s:2:"ن";s:3:"ﻧ";s:2:"ن";s:3:"ﻨ";s:2:"ن";s:3:"ﻩ";s:2:"ه";s:3:"ﻪ";s:2:"ه";s:3:"ﻫ";s:2:"ه";s:3:"ﻬ";s:2:"ه";s:3:"ﻭ";s:2:"و";s:3:"ﻮ";s:2:"و";s:3:"ﻯ";s:2:"ى";s:3:"ﻰ";s:2:"ى";s:3:"ﻱ";s:2:"ي";s:3:"ﻲ";s:2:"ي";s:3:"ﻳ";s:2:"ي";s:3:"ﻴ";s:2:"ي";s:3:"ﻵ";s:6:"لآ";s:3:"ﻶ";s:6:"لآ";s:3:"ﻷ";s:6:"لأ";s:3:"ﻸ";s:6:"لأ";s:3:"ﻹ";s:6:"لإ";s:3:"ﻺ";s:6:"لإ";s:3:"ﻻ";s:4:"لا";s:3:"ﻼ";s:4:"لا";s:3:"!";s:1:"!";s:3:""";s:1:""";s:3:"#";s:1:"#";s:3:"$";s:1:"$";s:3:"%";s:1:"%";s:3:"&";s:1:"&";s:3:"'";s:1:"\'";s:3:"(";s:1:"(";s:3:")";s:1:")";s:3:"*";s:1:"*";s:3:"+";s:1:"+";s:3:",";s:1:",";s:3:"-";s:1:"-";s:3:".";s:1:".";s:3:"/";s:1:"/";s:3:"0";s:1:"0";s:3:"1";s:1:"1";s:3:"2";s:1:"2";s:3:"3";s:1:"3";s:3:"4";s:1:"4";s:3:"5";s:1:"5";s:3:"6";s:1:"6";s:3:"7";s:1:"7";s:3:"8";s:1:"8";s:3:"9";s:1:"9";s:3:":";s:1:":";s:3:";";s:1:";";s:3:"<";s:1:"<";s:3:"=";s:1:"=";s:3:">";s:1:">";s:3:"?";s:1:"?";s:3:"@";s:1:"@";s:3:"A";s:1:"A";s:3:"B";s:1:"B";s:3:"C";s:1:"C";s:3:"D";s:1:"D";s:3:"E";s:1:"E";s:3:"F";s:1:"F";s:3:"G";s:1:"G";s:3:"H";s:1:"H";s:3:"I";s:1:"I";s:3:"J";s:1:"J";s:3:"K";s:1:"K";s:3:"L";s:1:"L";s:3:"M";s:1:"M";s:3:"N";s:1:"N";s:3:"O";s:1:"O";s:3:"P";s:1:"P";s:3:"Q";s:1:"Q";s:3:"R";s:1:"R";s:3:"S";s:1:"S";s:3:"T";s:1:"T";s:3:"U";s:1:"U";s:3:"V";s:1:"V";s:3:"W";s:1:"W";s:3:"X";s:1:"X";s:3:"Y";s:1:"Y";s:3:"Z";s:1:"Z";s:3:"[";s:1:"[";s:3:"\";s:1:"\\";s:3:"]";s:1:"]";s:3:"^";s:1:"^";s:3:"_";s:1:"_";s:3:"`";s:1:"`";s:3:"a";s:1:"a";s:3:"b";s:1:"b";s:3:"c";s:1:"c";s:3:"d";s:1:"d";s:3:"e";s:1:"e";s:3:"f";s:1:"f";s:3:"g";s:1:"g";s:3:"h";s:1:"h";s:3:"i";s:1:"i";s:3:"j";s:1:"j";s:3:"k";s:1:"k";s:3:"l";s:1:"l";s:3:"m";s:1:"m";s:3:"n";s:1:"n";s:3:"o";s:1:"o";s:3:"p";s:1:"p";s:3:"q";s:1:"q";s:3:"r";s:1:"r";s:3:"s";s:1:"s";s:3:"t";s:1:"t";s:3:"u";s:1:"u";s:3:"v";s:1:"v";s:3:"w";s:1:"w";s:3:"x";s:1:"x";s:3:"y";s:1:"y";s:3:"z";s:1:"z";s:3:"{";s:1:"{";s:3:"|";s:1:"|";s:3:"}";s:1:"}";s:3:"~";s:1:"~";s:3:"⦅";s:3:"⦅";s:3:"⦆";s:3:"⦆";s:3:"。";s:3:"。";s:3:"「";s:3:"「";s:3:"」";s:3:"」";s:3:"、";s:3:"、";s:3:"・";s:3:"・";s:3:"ヲ";s:3:"ヲ";s:3:"ァ";s:3:"ァ";s:3:"ィ";s:3:"ィ";s:3:"ゥ";s:3:"ゥ";s:3:"ェ";s:3:"ェ";s:3:"ォ";s:3:"ォ";s:3:"ャ";s:3:"ャ";s:3:"ュ";s:3:"ュ";s:3:"ョ";s:3:"ョ";s:3:"ッ";s:3:"ッ";s:3:"ー";s:3:"ー";s:3:"ア";s:3:"ア";s:3:"イ";s:3:"イ";s:3:"ウ";s:3:"ウ";s:3:"エ";s:3:"エ";s:3:"オ";s:3:"オ";s:3:"カ";s:3:"カ";s:3:"キ";s:3:"キ";s:3:"ク";s:3:"ク";s:3:"ケ";s:3:"ケ";s:3:"コ";s:3:"コ";s:3:"サ";s:3:"サ";s:3:"シ";s:3:"シ";s:3:"ス";s:3:"ス";s:3:"セ";s:3:"セ";s:3:"ソ";s:3:"ソ";s:3:"タ";s:3:"タ";s:3:"チ";s:3:"チ";s:3:"ツ";s:3:"ツ";s:3:"テ";s:3:"テ";s:3:"ト";s:3:"ト";s:3:"ナ";s:3:"ナ";s:3:"ニ";s:3:"ニ";s:3:"ヌ";s:3:"ヌ";s:3:"ネ";s:3:"ネ";s:3:"ノ";s:3:"ノ";s:3:"ハ";s:3:"ハ";s:3:"ヒ";s:3:"ヒ";s:3:"フ";s:3:"フ";s:3:"ヘ";s:3:"ヘ";s:3:"ホ";s:3:"ホ";s:3:"マ";s:3:"マ";s:3:"ミ";s:3:"ミ";s:3:"ム";s:3:"ム";s:3:"メ";s:3:"メ";s:3:"モ";s:3:"モ";s:3:"ヤ";s:3:"ヤ";s:3:"ユ";s:3:"ユ";s:3:"ヨ";s:3:"ヨ";s:3:"ラ";s:3:"ラ";s:3:"リ";s:3:"リ";s:3:"ル";s:3:"ル";s:3:"レ";s:3:"レ";s:3:"ロ";s:3:"ロ";s:3:"ワ";s:3:"ワ";s:3:"ン";s:3:"ン";s:3:"゙";s:3:"゙";s:3:"゚";s:3:"゚";s:3:"ᅠ";s:3:"ᅠ";s:3:"ᄀ";s:3:"ᄀ";s:3:"ᄁ";s:3:"ᄁ";s:3:"ᆪ";s:3:"ᆪ";s:3:"ᄂ";s:3:"ᄂ";s:3:"ᆬ";s:3:"ᆬ";s:3:"ᆭ";s:3:"ᆭ";s:3:"ᄃ";s:3:"ᄃ";s:3:"ᄄ";s:3:"ᄄ";s:3:"ᄅ";s:3:"ᄅ";s:3:"ᆰ";s:3:"ᆰ";s:3:"ᆱ";s:3:"ᆱ";s:3:"ᆲ";s:3:"ᆲ";s:3:"ᆳ";s:3:"ᆳ";s:3:"ᆴ";s:3:"ᆴ";s:3:"ᆵ";s:3:"ᆵ";s:3:"ᄚ";s:3:"ᄚ";s:3:"ᄆ";s:3:"ᄆ";s:3:"ᄇ";s:3:"ᄇ";s:3:"ᄈ";s:3:"ᄈ";s:3:"ᄡ";s:3:"ᄡ";s:3:"ᄉ";s:3:"ᄉ";s:3:"ᄊ";s:3:"ᄊ";s:3:"ᄋ";s:3:"ᄋ";s:3:"ᄌ";s:3:"ᄌ";s:3:"ᄍ";s:3:"ᄍ";s:3:"ᄎ";s:3:"ᄎ";s:3:"ᄏ";s:3:"ᄏ";s:3:"ᄐ";s:3:"ᄐ";s:3:"ᄑ";s:3:"ᄑ";s:3:"ᄒ";s:3:"ᄒ";s:3:"ᅡ";s:3:"ᅡ";s:3:"ᅢ";s:3:"ᅢ";s:3:"ᅣ";s:3:"ᅣ";s:3:"ᅤ";s:3:"ᅤ";s:3:"ᅥ";s:3:"ᅥ";s:3:"ᅦ";s:3:"ᅦ";s:3:"ᅧ";s:3:"ᅧ";s:3:"ᅨ";s:3:"ᅨ";s:3:"ᅩ";s:3:"ᅩ";s:3:"ᅪ";s:3:"ᅪ";s:3:"ᅫ";s:3:"ᅫ";s:3:"ᅬ";s:3:"ᅬ";s:3:"ᅭ";s:3:"ᅭ";s:3:"ᅮ";s:3:"ᅮ";s:3:"ᅯ";s:3:"ᅯ";s:3:"ᅰ";s:3:"ᅰ";s:3:"ᅱ";s:3:"ᅱ";s:3:"ᅲ";s:3:"ᅲ";s:3:"ᅳ";s:3:"ᅳ";s:3:"ᅴ";s:3:"ᅴ";s:3:"ᅵ";s:3:"ᅵ";s:3:"¢";s:2:"¢";s:3:"£";s:2:"£";s:3:"¬";s:2:"¬";s:3:" ̄";s:3:" ̄";s:3:"¦";s:2:"¦";s:3:"¥";s:2:"¥";s:3:"₩";s:3:"₩";s:3:"│";s:3:"│";s:3:"←";s:3:"←";s:3:"↑";s:3:"↑";s:3:"→";s:3:"→";s:3:"↓";s:3:"↓";s:3:"■";s:3:"■";s:3:"○";s:3:"○";s:4:"𑂚";s:8:"𑂚";s:4:"𑂜";s:8:"𑂜";s:4:"𑂫";s:8:"𑂫";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"𝐀";s:1:"A";s:4:"𝐁";s:1:"B";s:4:"𝐂";s:1:"C";s:4:"𝐃";s:1:"D";s:4:"𝐄";s:1:"E";s:4:"𝐅";s:1:"F";s:4:"𝐆";s:1:"G";s:4:"𝐇";s:1:"H";s:4:"𝐈";s:1:"I";s:4:"𝐉";s:1:"J";s:4:"𝐊";s:1:"K";s:4:"𝐋";s:1:"L";s:4:"𝐌";s:1:"M";s:4:"𝐍";s:1:"N";s:4:"𝐎";s:1:"O";s:4:"𝐏";s:1:"P";s:4:"𝐐";s:1:"Q";s:4:"𝐑";s:1:"R";s:4:"𝐒";s:1:"S";s:4:"𝐓";s:1:"T";s:4:"𝐔";s:1:"U";s:4:"𝐕";s:1:"V";s:4:"𝐖";s:1:"W";s:4:"𝐗";s:1:"X";s:4:"𝐘";s:1:"Y";s:4:"𝐙";s:1:"Z";s:4:"𝐚";s:1:"a";s:4:"𝐛";s:1:"b";s:4:"𝐜";s:1:"c";s:4:"𝐝";s:1:"d";s:4:"𝐞";s:1:"e";s:4:"𝐟";s:1:"f";s:4:"𝐠";s:1:"g";s:4:"𝐡";s:1:"h";s:4:"𝐢";s:1:"i";s:4:"𝐣";s:1:"j";s:4:"𝐤";s:1:"k";s:4:"𝐥";s:1:"l";s:4:"𝐦";s:1:"m";s:4:"𝐧";s:1:"n";s:4:"𝐨";s:1:"o";s:4:"𝐩";s:1:"p";s:4:"𝐪";s:1:"q";s:4:"𝐫";s:1:"r";s:4:"𝐬";s:1:"s";s:4:"𝐭";s:1:"t";s:4:"𝐮";s:1:"u";s:4:"𝐯";s:1:"v";s:4:"𝐰";s:1:"w";s:4:"𝐱";s:1:"x";s:4:"𝐲";s:1:"y";s:4:"𝐳";s:1:"z";s:4:"𝐴";s:1:"A";s:4:"𝐵";s:1:"B";s:4:"𝐶";s:1:"C";s:4:"𝐷";s:1:"D";s:4:"𝐸";s:1:"E";s:4:"𝐹";s:1:"F";s:4:"𝐺";s:1:"G";s:4:"𝐻";s:1:"H";s:4:"𝐼";s:1:"I";s:4:"𝐽";s:1:"J";s:4:"𝐾";s:1:"K";s:4:"𝐿";s:1:"L";s:4:"𝑀";s:1:"M";s:4:"𝑁";s:1:"N";s:4:"𝑂";s:1:"O";s:4:"𝑃";s:1:"P";s:4:"𝑄";s:1:"Q";s:4:"𝑅";s:1:"R";s:4:"𝑆";s:1:"S";s:4:"𝑇";s:1:"T";s:4:"𝑈";s:1:"U";s:4:"𝑉";s:1:"V";s:4:"𝑊";s:1:"W";s:4:"𝑋";s:1:"X";s:4:"𝑌";s:1:"Y";s:4:"𝑍";s:1:"Z";s:4:"𝑎";s:1:"a";s:4:"𝑏";s:1:"b";s:4:"𝑐";s:1:"c";s:4:"𝑑";s:1:"d";s:4:"𝑒";s:1:"e";s:4:"𝑓";s:1:"f";s:4:"𝑔";s:1:"g";s:4:"𝑖";s:1:"i";s:4:"𝑗";s:1:"j";s:4:"𝑘";s:1:"k";s:4:"𝑙";s:1:"l";s:4:"𝑚";s:1:"m";s:4:"𝑛";s:1:"n";s:4:"𝑜";s:1:"o";s:4:"𝑝";s:1:"p";s:4:"𝑞";s:1:"q";s:4:"𝑟";s:1:"r";s:4:"𝑠";s:1:"s";s:4:"𝑡";s:1:"t";s:4:"𝑢";s:1:"u";s:4:"𝑣";s:1:"v";s:4:"𝑤";s:1:"w";s:4:"𝑥";s:1:"x";s:4:"𝑦";s:1:"y";s:4:"𝑧";s:1:"z";s:4:"𝑨";s:1:"A";s:4:"𝑩";s:1:"B";s:4:"𝑪";s:1:"C";s:4:"𝑫";s:1:"D";s:4:"𝑬";s:1:"E";s:4:"𝑭";s:1:"F";s:4:"𝑮";s:1:"G";s:4:"𝑯";s:1:"H";s:4:"𝑰";s:1:"I";s:4:"𝑱";s:1:"J";s:4:"𝑲";s:1:"K";s:4:"𝑳";s:1:"L";s:4:"𝑴";s:1:"M";s:4:"𝑵";s:1:"N";s:4:"𝑶";s:1:"O";s:4:"𝑷";s:1:"P";s:4:"𝑸";s:1:"Q";s:4:"𝑹";s:1:"R";s:4:"𝑺";s:1:"S";s:4:"𝑻";s:1:"T";s:4:"𝑼";s:1:"U";s:4:"𝑽";s:1:"V";s:4:"𝑾";s:1:"W";s:4:"𝑿";s:1:"X";s:4:"𝒀";s:1:"Y";s:4:"𝒁";s:1:"Z";s:4:"𝒂";s:1:"a";s:4:"𝒃";s:1:"b";s:4:"𝒄";s:1:"c";s:4:"𝒅";s:1:"d";s:4:"𝒆";s:1:"e";s:4:"𝒇";s:1:"f";s:4:"𝒈";s:1:"g";s:4:"𝒉";s:1:"h";s:4:"𝒊";s:1:"i";s:4:"𝒋";s:1:"j";s:4:"𝒌";s:1:"k";s:4:"𝒍";s:1:"l";s:4:"𝒎";s:1:"m";s:4:"𝒏";s:1:"n";s:4:"𝒐";s:1:"o";s:4:"𝒑";s:1:"p";s:4:"𝒒";s:1:"q";s:4:"𝒓";s:1:"r";s:4:"𝒔";s:1:"s";s:4:"𝒕";s:1:"t";s:4:"𝒖";s:1:"u";s:4:"𝒗";s:1:"v";s:4:"𝒘";s:1:"w";s:4:"𝒙";s:1:"x";s:4:"𝒚";s:1:"y";s:4:"𝒛";s:1:"z";s:4:"𝒜";s:1:"A";s:4:"𝒞";s:1:"C";s:4:"𝒟";s:1:"D";s:4:"𝒢";s:1:"G";s:4:"𝒥";s:1:"J";s:4:"𝒦";s:1:"K";s:4:"𝒩";s:1:"N";s:4:"𝒪";s:1:"O";s:4:"𝒫";s:1:"P";s:4:"𝒬";s:1:"Q";s:4:"𝒮";s:1:"S";s:4:"𝒯";s:1:"T";s:4:"𝒰";s:1:"U";s:4:"𝒱";s:1:"V";s:4:"𝒲";s:1:"W";s:4:"𝒳";s:1:"X";s:4:"𝒴";s:1:"Y";s:4:"𝒵";s:1:"Z";s:4:"𝒶";s:1:"a";s:4:"𝒷";s:1:"b";s:4:"𝒸";s:1:"c";s:4:"𝒹";s:1:"d";s:4:"𝒻";s:1:"f";s:4:"𝒽";s:1:"h";s:4:"𝒾";s:1:"i";s:4:"𝒿";s:1:"j";s:4:"𝓀";s:1:"k";s:4:"𝓁";s:1:"l";s:4:"𝓂";s:1:"m";s:4:"𝓃";s:1:"n";s:4:"𝓅";s:1:"p";s:4:"𝓆";s:1:"q";s:4:"𝓇";s:1:"r";s:4:"𝓈";s:1:"s";s:4:"𝓉";s:1:"t";s:4:"𝓊";s:1:"u";s:4:"𝓋";s:1:"v";s:4:"𝓌";s:1:"w";s:4:"𝓍";s:1:"x";s:4:"𝓎";s:1:"y";s:4:"𝓏";s:1:"z";s:4:"𝓐";s:1:"A";s:4:"𝓑";s:1:"B";s:4:"𝓒";s:1:"C";s:4:"𝓓";s:1:"D";s:4:"𝓔";s:1:"E";s:4:"𝓕";s:1:"F";s:4:"𝓖";s:1:"G";s:4:"𝓗";s:1:"H";s:4:"𝓘";s:1:"I";s:4:"𝓙";s:1:"J";s:4:"𝓚";s:1:"K";s:4:"𝓛";s:1:"L";s:4:"𝓜";s:1:"M";s:4:"𝓝";s:1:"N";s:4:"𝓞";s:1:"O";s:4:"𝓟";s:1:"P";s:4:"𝓠";s:1:"Q";s:4:"𝓡";s:1:"R";s:4:"𝓢";s:1:"S";s:4:"𝓣";s:1:"T";s:4:"𝓤";s:1:"U";s:4:"𝓥";s:1:"V";s:4:"𝓦";s:1:"W";s:4:"𝓧";s:1:"X";s:4:"𝓨";s:1:"Y";s:4:"𝓩";s:1:"Z";s:4:"𝓪";s:1:"a";s:4:"𝓫";s:1:"b";s:4:"𝓬";s:1:"c";s:4:"𝓭";s:1:"d";s:4:"𝓮";s:1:"e";s:4:"𝓯";s:1:"f";s:4:"𝓰";s:1:"g";s:4:"𝓱";s:1:"h";s:4:"𝓲";s:1:"i";s:4:"𝓳";s:1:"j";s:4:"𝓴";s:1:"k";s:4:"𝓵";s:1:"l";s:4:"𝓶";s:1:"m";s:4:"𝓷";s:1:"n";s:4:"𝓸";s:1:"o";s:4:"𝓹";s:1:"p";s:4:"𝓺";s:1:"q";s:4:"𝓻";s:1:"r";s:4:"𝓼";s:1:"s";s:4:"𝓽";s:1:"t";s:4:"𝓾";s:1:"u";s:4:"𝓿";s:1:"v";s:4:"𝔀";s:1:"w";s:4:"𝔁";s:1:"x";s:4:"𝔂";s:1:"y";s:4:"𝔃";s:1:"z";s:4:"𝔄";s:1:"A";s:4:"𝔅";s:1:"B";s:4:"𝔇";s:1:"D";s:4:"𝔈";s:1:"E";s:4:"𝔉";s:1:"F";s:4:"𝔊";s:1:"G";s:4:"𝔍";s:1:"J";s:4:"𝔎";s:1:"K";s:4:"𝔏";s:1:"L";s:4:"𝔐";s:1:"M";s:4:"𝔑";s:1:"N";s:4:"𝔒";s:1:"O";s:4:"𝔓";s:1:"P";s:4:"𝔔";s:1:"Q";s:4:"𝔖";s:1:"S";s:4:"𝔗";s:1:"T";s:4:"𝔘";s:1:"U";s:4:"𝔙";s:1:"V";s:4:"𝔚";s:1:"W";s:4:"𝔛";s:1:"X";s:4:"𝔜";s:1:"Y";s:4:"𝔞";s:1:"a";s:4:"𝔟";s:1:"b";s:4:"𝔠";s:1:"c";s:4:"𝔡";s:1:"d";s:4:"𝔢";s:1:"e";s:4:"𝔣";s:1:"f";s:4:"𝔤";s:1:"g";s:4:"𝔥";s:1:"h";s:4:"𝔦";s:1:"i";s:4:"𝔧";s:1:"j";s:4:"𝔨";s:1:"k";s:4:"𝔩";s:1:"l";s:4:"𝔪";s:1:"m";s:4:"𝔫";s:1:"n";s:4:"𝔬";s:1:"o";s:4:"𝔭";s:1:"p";s:4:"𝔮";s:1:"q";s:4:"𝔯";s:1:"r";s:4:"𝔰";s:1:"s";s:4:"𝔱";s:1:"t";s:4:"𝔲";s:1:"u";s:4:"𝔳";s:1:"v";s:4:"𝔴";s:1:"w";s:4:"𝔵";s:1:"x";s:4:"𝔶";s:1:"y";s:4:"𝔷";s:1:"z";s:4:"𝔸";s:1:"A";s:4:"𝔹";s:1:"B";s:4:"𝔻";s:1:"D";s:4:"𝔼";s:1:"E";s:4:"𝔽";s:1:"F";s:4:"𝔾";s:1:"G";s:4:"𝕀";s:1:"I";s:4:"𝕁";s:1:"J";s:4:"𝕂";s:1:"K";s:4:"𝕃";s:1:"L";s:4:"𝕄";s:1:"M";s:4:"𝕆";s:1:"O";s:4:"𝕊";s:1:"S";s:4:"𝕋";s:1:"T";s:4:"𝕌";s:1:"U";s:4:"𝕍";s:1:"V";s:4:"𝕎";s:1:"W";s:4:"𝕏";s:1:"X";s:4:"𝕐";s:1:"Y";s:4:"𝕒";s:1:"a";s:4:"𝕓";s:1:"b";s:4:"𝕔";s:1:"c";s:4:"𝕕";s:1:"d";s:4:"𝕖";s:1:"e";s:4:"𝕗";s:1:"f";s:4:"𝕘";s:1:"g";s:4:"𝕙";s:1:"h";s:4:"𝕚";s:1:"i";s:4:"𝕛";s:1:"j";s:4:"𝕜";s:1:"k";s:4:"𝕝";s:1:"l";s:4:"𝕞";s:1:"m";s:4:"𝕟";s:1:"n";s:4:"𝕠";s:1:"o";s:4:"𝕡";s:1:"p";s:4:"𝕢";s:1:"q";s:4:"𝕣";s:1:"r";s:4:"𝕤";s:1:"s";s:4:"𝕥";s:1:"t";s:4:"𝕦";s:1:"u";s:4:"𝕧";s:1:"v";s:4:"𝕨";s:1:"w";s:4:"𝕩";s:1:"x";s:4:"𝕪";s:1:"y";s:4:"𝕫";s:1:"z";s:4:"𝕬";s:1:"A";s:4:"𝕭";s:1:"B";s:4:"𝕮";s:1:"C";s:4:"𝕯";s:1:"D";s:4:"𝕰";s:1:"E";s:4:"𝕱";s:1:"F";s:4:"𝕲";s:1:"G";s:4:"𝕳";s:1:"H";s:4:"𝕴";s:1:"I";s:4:"𝕵";s:1:"J";s:4:"𝕶";s:1:"K";s:4:"𝕷";s:1:"L";s:4:"𝕸";s:1:"M";s:4:"𝕹";s:1:"N";s:4:"𝕺";s:1:"O";s:4:"𝕻";s:1:"P";s:4:"𝕼";s:1:"Q";s:4:"𝕽";s:1:"R";s:4:"𝕾";s:1:"S";s:4:"𝕿";s:1:"T";s:4:"𝖀";s:1:"U";s:4:"𝖁";s:1:"V";s:4:"𝖂";s:1:"W";s:4:"𝖃";s:1:"X";s:4:"𝖄";s:1:"Y";s:4:"𝖅";s:1:"Z";s:4:"𝖆";s:1:"a";s:4:"𝖇";s:1:"b";s:4:"𝖈";s:1:"c";s:4:"𝖉";s:1:"d";s:4:"𝖊";s:1:"e";s:4:"𝖋";s:1:"f";s:4:"𝖌";s:1:"g";s:4:"𝖍";s:1:"h";s:4:"𝖎";s:1:"i";s:4:"𝖏";s:1:"j";s:4:"𝖐";s:1:"k";s:4:"𝖑";s:1:"l";s:4:"𝖒";s:1:"m";s:4:"𝖓";s:1:"n";s:4:"𝖔";s:1:"o";s:4:"𝖕";s:1:"p";s:4:"𝖖";s:1:"q";s:4:"𝖗";s:1:"r";s:4:"𝖘";s:1:"s";s:4:"𝖙";s:1:"t";s:4:"𝖚";s:1:"u";s:4:"𝖛";s:1:"v";s:4:"𝖜";s:1:"w";s:4:"𝖝";s:1:"x";s:4:"𝖞";s:1:"y";s:4:"𝖟";s:1:"z";s:4:"𝖠";s:1:"A";s:4:"𝖡";s:1:"B";s:4:"𝖢";s:1:"C";s:4:"𝖣";s:1:"D";s:4:"𝖤";s:1:"E";s:4:"𝖥";s:1:"F";s:4:"𝖦";s:1:"G";s:4:"𝖧";s:1:"H";s:4:"𝖨";s:1:"I";s:4:"𝖩";s:1:"J";s:4:"𝖪";s:1:"K";s:4:"𝖫";s:1:"L";s:4:"𝖬";s:1:"M";s:4:"𝖭";s:1:"N";s:4:"𝖮";s:1:"O";s:4:"𝖯";s:1:"P";s:4:"𝖰";s:1:"Q";s:4:"𝖱";s:1:"R";s:4:"𝖲";s:1:"S";s:4:"𝖳";s:1:"T";s:4:"𝖴";s:1:"U";s:4:"𝖵";s:1:"V";s:4:"𝖶";s:1:"W";s:4:"𝖷";s:1:"X";s:4:"𝖸";s:1:"Y";s:4:"𝖹";s:1:"Z";s:4:"𝖺";s:1:"a";s:4:"𝖻";s:1:"b";s:4:"𝖼";s:1:"c";s:4:"𝖽";s:1:"d";s:4:"𝖾";s:1:"e";s:4:"𝖿";s:1:"f";s:4:"𝗀";s:1:"g";s:4:"𝗁";s:1:"h";s:4:"𝗂";s:1:"i";s:4:"𝗃";s:1:"j";s:4:"𝗄";s:1:"k";s:4:"𝗅";s:1:"l";s:4:"𝗆";s:1:"m";s:4:"𝗇";s:1:"n";s:4:"𝗈";s:1:"o";s:4:"𝗉";s:1:"p";s:4:"𝗊";s:1:"q";s:4:"𝗋";s:1:"r";s:4:"𝗌";s:1:"s";s:4:"𝗍";s:1:"t";s:4:"𝗎";s:1:"u";s:4:"𝗏";s:1:"v";s:4:"𝗐";s:1:"w";s:4:"𝗑";s:1:"x";s:4:"𝗒";s:1:"y";s:4:"𝗓";s:1:"z";s:4:"𝗔";s:1:"A";s:4:"𝗕";s:1:"B";s:4:"𝗖";s:1:"C";s:4:"𝗗";s:1:"D";s:4:"𝗘";s:1:"E";s:4:"𝗙";s:1:"F";s:4:"𝗚";s:1:"G";s:4:"𝗛";s:1:"H";s:4:"𝗜";s:1:"I";s:4:"𝗝";s:1:"J";s:4:"𝗞";s:1:"K";s:4:"𝗟";s:1:"L";s:4:"𝗠";s:1:"M";s:4:"𝗡";s:1:"N";s:4:"𝗢";s:1:"O";s:4:"𝗣";s:1:"P";s:4:"𝗤";s:1:"Q";s:4:"𝗥";s:1:"R";s:4:"𝗦";s:1:"S";s:4:"𝗧";s:1:"T";s:4:"𝗨";s:1:"U";s:4:"𝗩";s:1:"V";s:4:"𝗪";s:1:"W";s:4:"𝗫";s:1:"X";s:4:"𝗬";s:1:"Y";s:4:"𝗭";s:1:"Z";s:4:"𝗮";s:1:"a";s:4:"𝗯";s:1:"b";s:4:"𝗰";s:1:"c";s:4:"𝗱";s:1:"d";s:4:"𝗲";s:1:"e";s:4:"𝗳";s:1:"f";s:4:"𝗴";s:1:"g";s:4:"𝗵";s:1:"h";s:4:"𝗶";s:1:"i";s:4:"𝗷";s:1:"j";s:4:"𝗸";s:1:"k";s:4:"𝗹";s:1:"l";s:4:"𝗺";s:1:"m";s:4:"𝗻";s:1:"n";s:4:"𝗼";s:1:"o";s:4:"𝗽";s:1:"p";s:4:"𝗾";s:1:"q";s:4:"𝗿";s:1:"r";s:4:"𝘀";s:1:"s";s:4:"𝘁";s:1:"t";s:4:"𝘂";s:1:"u";s:4:"𝘃";s:1:"v";s:4:"𝘄";s:1:"w";s:4:"𝘅";s:1:"x";s:4:"𝘆";s:1:"y";s:4:"𝘇";s:1:"z";s:4:"𝘈";s:1:"A";s:4:"𝘉";s:1:"B";s:4:"𝘊";s:1:"C";s:4:"𝘋";s:1:"D";s:4:"𝘌";s:1:"E";s:4:"𝘍";s:1:"F";s:4:"𝘎";s:1:"G";s:4:"𝘏";s:1:"H";s:4:"𝘐";s:1:"I";s:4:"𝘑";s:1:"J";s:4:"𝘒";s:1:"K";s:4:"𝘓";s:1:"L";s:4:"𝘔";s:1:"M";s:4:"𝘕";s:1:"N";s:4:"𝘖";s:1:"O";s:4:"𝘗";s:1:"P";s:4:"𝘘";s:1:"Q";s:4:"𝘙";s:1:"R";s:4:"𝘚";s:1:"S";s:4:"𝘛";s:1:"T";s:4:"𝘜";s:1:"U";s:4:"𝘝";s:1:"V";s:4:"𝘞";s:1:"W";s:4:"𝘟";s:1:"X";s:4:"𝘠";s:1:"Y";s:4:"𝘡";s:1:"Z";s:4:"𝘢";s:1:"a";s:4:"𝘣";s:1:"b";s:4:"𝘤";s:1:"c";s:4:"𝘥";s:1:"d";s:4:"𝘦";s:1:"e";s:4:"𝘧";s:1:"f";s:4:"𝘨";s:1:"g";s:4:"𝘩";s:1:"h";s:4:"𝘪";s:1:"i";s:4:"𝘫";s:1:"j";s:4:"𝘬";s:1:"k";s:4:"𝘭";s:1:"l";s:4:"𝘮";s:1:"m";s:4:"𝘯";s:1:"n";s:4:"𝘰";s:1:"o";s:4:"𝘱";s:1:"p";s:4:"𝘲";s:1:"q";s:4:"𝘳";s:1:"r";s:4:"𝘴";s:1:"s";s:4:"𝘵";s:1:"t";s:4:"𝘶";s:1:"u";s:4:"𝘷";s:1:"v";s:4:"𝘸";s:1:"w";s:4:"𝘹";s:1:"x";s:4:"𝘺";s:1:"y";s:4:"𝘻";s:1:"z";s:4:"𝘼";s:1:"A";s:4:"𝘽";s:1:"B";s:4:"𝘾";s:1:"C";s:4:"𝘿";s:1:"D";s:4:"𝙀";s:1:"E";s:4:"𝙁";s:1:"F";s:4:"𝙂";s:1:"G";s:4:"𝙃";s:1:"H";s:4:"𝙄";s:1:"I";s:4:"𝙅";s:1:"J";s:4:"𝙆";s:1:"K";s:4:"𝙇";s:1:"L";s:4:"𝙈";s:1:"M";s:4:"𝙉";s:1:"N";s:4:"𝙊";s:1:"O";s:4:"𝙋";s:1:"P";s:4:"𝙌";s:1:"Q";s:4:"𝙍";s:1:"R";s:4:"𝙎";s:1:"S";s:4:"𝙏";s:1:"T";s:4:"𝙐";s:1:"U";s:4:"𝙑";s:1:"V";s:4:"𝙒";s:1:"W";s:4:"𝙓";s:1:"X";s:4:"𝙔";s:1:"Y";s:4:"𝙕";s:1:"Z";s:4:"𝙖";s:1:"a";s:4:"𝙗";s:1:"b";s:4:"𝙘";s:1:"c";s:4:"𝙙";s:1:"d";s:4:"𝙚";s:1:"e";s:4:"𝙛";s:1:"f";s:4:"𝙜";s:1:"g";s:4:"𝙝";s:1:"h";s:4:"𝙞";s:1:"i";s:4:"𝙟";s:1:"j";s:4:"𝙠";s:1:"k";s:4:"𝙡";s:1:"l";s:4:"𝙢";s:1:"m";s:4:"𝙣";s:1:"n";s:4:"𝙤";s:1:"o";s:4:"𝙥";s:1:"p";s:4:"𝙦";s:1:"q";s:4:"𝙧";s:1:"r";s:4:"𝙨";s:1:"s";s:4:"𝙩";s:1:"t";s:4:"𝙪";s:1:"u";s:4:"𝙫";s:1:"v";s:4:"𝙬";s:1:"w";s:4:"𝙭";s:1:"x";s:4:"𝙮";s:1:"y";s:4:"𝙯";s:1:"z";s:4:"𝙰";s:1:"A";s:4:"𝙱";s:1:"B";s:4:"𝙲";s:1:"C";s:4:"𝙳";s:1:"D";s:4:"𝙴";s:1:"E";s:4:"𝙵";s:1:"F";s:4:"𝙶";s:1:"G";s:4:"𝙷";s:1:"H";s:4:"𝙸";s:1:"I";s:4:"𝙹";s:1:"J";s:4:"𝙺";s:1:"K";s:4:"𝙻";s:1:"L";s:4:"𝙼";s:1:"M";s:4:"𝙽";s:1:"N";s:4:"𝙾";s:1:"O";s:4:"𝙿";s:1:"P";s:4:"𝚀";s:1:"Q";s:4:"𝚁";s:1:"R";s:4:"𝚂";s:1:"S";s:4:"𝚃";s:1:"T";s:4:"𝚄";s:1:"U";s:4:"𝚅";s:1:"V";s:4:"𝚆";s:1:"W";s:4:"𝚇";s:1:"X";s:4:"𝚈";s:1:"Y";s:4:"𝚉";s:1:"Z";s:4:"𝚊";s:1:"a";s:4:"𝚋";s:1:"b";s:4:"𝚌";s:1:"c";s:4:"𝚍";s:1:"d";s:4:"𝚎";s:1:"e";s:4:"𝚏";s:1:"f";s:4:"𝚐";s:1:"g";s:4:"𝚑";s:1:"h";s:4:"𝚒";s:1:"i";s:4:"𝚓";s:1:"j";s:4:"𝚔";s:1:"k";s:4:"𝚕";s:1:"l";s:4:"𝚖";s:1:"m";s:4:"𝚗";s:1:"n";s:4:"𝚘";s:1:"o";s:4:"𝚙";s:1:"p";s:4:"𝚚";s:1:"q";s:4:"𝚛";s:1:"r";s:4:"𝚜";s:1:"s";s:4:"𝚝";s:1:"t";s:4:"𝚞";s:1:"u";s:4:"𝚟";s:1:"v";s:4:"𝚠";s:1:"w";s:4:"𝚡";s:1:"x";s:4:"𝚢";s:1:"y";s:4:"𝚣";s:1:"z";s:4:"𝚤";s:2:"ı";s:4:"𝚥";s:2:"ȷ";s:4:"𝚨";s:2:"Α";s:4:"𝚩";s:2:"Β";s:4:"𝚪";s:2:"Γ";s:4:"𝚫";s:2:"Δ";s:4:"𝚬";s:2:"Ε";s:4:"𝚭";s:2:"Ζ";s:4:"𝚮";s:2:"Η";s:4:"𝚯";s:2:"Θ";s:4:"𝚰";s:2:"Ι";s:4:"𝚱";s:2:"Κ";s:4:"𝚲";s:2:"Λ";s:4:"𝚳";s:2:"Μ";s:4:"𝚴";s:2:"Ν";s:4:"𝚵";s:2:"Ξ";s:4:"𝚶";s:2:"Ο";s:4:"𝚷";s:2:"Π";s:4:"𝚸";s:2:"Ρ";s:4:"𝚹";s:2:"Θ";s:4:"𝚺";s:2:"Σ";s:4:"𝚻";s:2:"Τ";s:4:"𝚼";s:2:"Υ";s:4:"𝚽";s:2:"Φ";s:4:"𝚾";s:2:"Χ";s:4:"𝚿";s:2:"Ψ";s:4:"𝛀";s:2:"Ω";s:4:"𝛁";s:3:"∇";s:4:"𝛂";s:2:"α";s:4:"𝛃";s:2:"β";s:4:"𝛄";s:2:"γ";s:4:"𝛅";s:2:"δ";s:4:"𝛆";s:2:"ε";s:4:"𝛇";s:2:"ζ";s:4:"𝛈";s:2:"η";s:4:"𝛉";s:2:"θ";s:4:"𝛊";s:2:"ι";s:4:"𝛋";s:2:"κ";s:4:"𝛌";s:2:"λ";s:4:"𝛍";s:2:"μ";s:4:"𝛎";s:2:"ν";s:4:"𝛏";s:2:"ξ";s:4:"𝛐";s:2:"ο";s:4:"𝛑";s:2:"π";s:4:"𝛒";s:2:"ρ";s:4:"𝛓";s:2:"ς";s:4:"𝛔";s:2:"σ";s:4:"𝛕";s:2:"τ";s:4:"𝛖";s:2:"υ";s:4:"𝛗";s:2:"φ";s:4:"𝛘";s:2:"χ";s:4:"𝛙";s:2:"ψ";s:4:"𝛚";s:2:"ω";s:4:"𝛛";s:3:"∂";s:4:"𝛜";s:2:"ε";s:4:"𝛝";s:2:"θ";s:4:"𝛞";s:2:"κ";s:4:"𝛟";s:2:"φ";s:4:"𝛠";s:2:"ρ";s:4:"𝛡";s:2:"π";s:4:"𝛢";s:2:"Α";s:4:"𝛣";s:2:"Β";s:4:"𝛤";s:2:"Γ";s:4:"𝛥";s:2:"Δ";s:4:"𝛦";s:2:"Ε";s:4:"𝛧";s:2:"Ζ";s:4:"𝛨";s:2:"Η";s:4:"𝛩";s:2:"Θ";s:4:"𝛪";s:2:"Ι";s:4:"𝛫";s:2:"Κ";s:4:"𝛬";s:2:"Λ";s:4:"𝛭";s:2:"Μ";s:4:"𝛮";s:2:"Ν";s:4:"𝛯";s:2:"Ξ";s:4:"𝛰";s:2:"Ο";s:4:"𝛱";s:2:"Π";s:4:"𝛲";s:2:"Ρ";s:4:"𝛳";s:2:"Θ";s:4:"𝛴";s:2:"Σ";s:4:"𝛵";s:2:"Τ";s:4:"𝛶";s:2:"Υ";s:4:"𝛷";s:2:"Φ";s:4:"𝛸";s:2:"Χ";s:4:"𝛹";s:2:"Ψ";s:4:"𝛺";s:2:"Ω";s:4:"𝛻";s:3:"∇";s:4:"𝛼";s:2:"α";s:4:"𝛽";s:2:"β";s:4:"𝛾";s:2:"γ";s:4:"𝛿";s:2:"δ";s:4:"𝜀";s:2:"ε";s:4:"𝜁";s:2:"ζ";s:4:"𝜂";s:2:"η";s:4:"𝜃";s:2:"θ";s:4:"𝜄";s:2:"ι";s:4:"𝜅";s:2:"κ";s:4:"𝜆";s:2:"λ";s:4:"𝜇";s:2:"μ";s:4:"𝜈";s:2:"ν";s:4:"𝜉";s:2:"ξ";s:4:"𝜊";s:2:"ο";s:4:"𝜋";s:2:"π";s:4:"𝜌";s:2:"ρ";s:4:"𝜍";s:2:"ς";s:4:"𝜎";s:2:"σ";s:4:"𝜏";s:2:"τ";s:4:"𝜐";s:2:"υ";s:4:"𝜑";s:2:"φ";s:4:"𝜒";s:2:"χ";s:4:"𝜓";s:2:"ψ";s:4:"𝜔";s:2:"ω";s:4:"𝜕";s:3:"∂";s:4:"𝜖";s:2:"ε";s:4:"𝜗";s:2:"θ";s:4:"𝜘";s:2:"κ";s:4:"𝜙";s:2:"φ";s:4:"𝜚";s:2:"ρ";s:4:"𝜛";s:2:"π";s:4:"𝜜";s:2:"Α";s:4:"𝜝";s:2:"Β";s:4:"𝜞";s:2:"Γ";s:4:"𝜟";s:2:"Δ";s:4:"𝜠";s:2:"Ε";s:4:"𝜡";s:2:"Ζ";s:4:"𝜢";s:2:"Η";s:4:"𝜣";s:2:"Θ";s:4:"𝜤";s:2:"Ι";s:4:"𝜥";s:2:"Κ";s:4:"𝜦";s:2:"Λ";s:4:"𝜧";s:2:"Μ";s:4:"𝜨";s:2:"Ν";s:4:"𝜩";s:2:"Ξ";s:4:"𝜪";s:2:"Ο";s:4:"𝜫";s:2:"Π";s:4:"𝜬";s:2:"Ρ";s:4:"𝜭";s:2:"Θ";s:4:"𝜮";s:2:"Σ";s:4:"𝜯";s:2:"Τ";s:4:"𝜰";s:2:"Υ";s:4:"𝜱";s:2:"Φ";s:4:"𝜲";s:2:"Χ";s:4:"𝜳";s:2:"Ψ";s:4:"𝜴";s:2:"Ω";s:4:"𝜵";s:3:"∇";s:4:"𝜶";s:2:"α";s:4:"𝜷";s:2:"β";s:4:"𝜸";s:2:"γ";s:4:"𝜹";s:2:"δ";s:4:"𝜺";s:2:"ε";s:4:"𝜻";s:2:"ζ";s:4:"𝜼";s:2:"η";s:4:"𝜽";s:2:"θ";s:4:"𝜾";s:2:"ι";s:4:"𝜿";s:2:"κ";s:4:"𝝀";s:2:"λ";s:4:"𝝁";s:2:"μ";s:4:"𝝂";s:2:"ν";s:4:"𝝃";s:2:"ξ";s:4:"𝝄";s:2:"ο";s:4:"𝝅";s:2:"π";s:4:"𝝆";s:2:"ρ";s:4:"𝝇";s:2:"ς";s:4:"𝝈";s:2:"σ";s:4:"𝝉";s:2:"τ";s:4:"𝝊";s:2:"υ";s:4:"𝝋";s:2:"φ";s:4:"𝝌";s:2:"χ";s:4:"𝝍";s:2:"ψ";s:4:"𝝎";s:2:"ω";s:4:"𝝏";s:3:"∂";s:4:"𝝐";s:2:"ε";s:4:"𝝑";s:2:"θ";s:4:"𝝒";s:2:"κ";s:4:"𝝓";s:2:"φ";s:4:"𝝔";s:2:"ρ";s:4:"𝝕";s:2:"π";s:4:"𝝖";s:2:"Α";s:4:"𝝗";s:2:"Β";s:4:"𝝘";s:2:"Γ";s:4:"𝝙";s:2:"Δ";s:4:"𝝚";s:2:"Ε";s:4:"𝝛";s:2:"Ζ";s:4:"𝝜";s:2:"Η";s:4:"𝝝";s:2:"Θ";s:4:"𝝞";s:2:"Ι";s:4:"𝝟";s:2:"Κ";s:4:"𝝠";s:2:"Λ";s:4:"𝝡";s:2:"Μ";s:4:"𝝢";s:2:"Ν";s:4:"𝝣";s:2:"Ξ";s:4:"𝝤";s:2:"Ο";s:4:"𝝥";s:2:"Π";s:4:"𝝦";s:2:"Ρ";s:4:"𝝧";s:2:"Θ";s:4:"𝝨";s:2:"Σ";s:4:"𝝩";s:2:"Τ";s:4:"𝝪";s:2:"Υ";s:4:"𝝫";s:2:"Φ";s:4:"𝝬";s:2:"Χ";s:4:"𝝭";s:2:"Ψ";s:4:"𝝮";s:2:"Ω";s:4:"𝝯";s:3:"∇";s:4:"𝝰";s:2:"α";s:4:"𝝱";s:2:"β";s:4:"𝝲";s:2:"γ";s:4:"𝝳";s:2:"δ";s:4:"𝝴";s:2:"ε";s:4:"𝝵";s:2:"ζ";s:4:"𝝶";s:2:"η";s:4:"𝝷";s:2:"θ";s:4:"𝝸";s:2:"ι";s:4:"𝝹";s:2:"κ";s:4:"𝝺";s:2:"λ";s:4:"𝝻";s:2:"μ";s:4:"𝝼";s:2:"ν";s:4:"𝝽";s:2:"ξ";s:4:"𝝾";s:2:"ο";s:4:"𝝿";s:2:"π";s:4:"𝞀";s:2:"ρ";s:4:"𝞁";s:2:"ς";s:4:"𝞂";s:2:"σ";s:4:"𝞃";s:2:"τ";s:4:"𝞄";s:2:"υ";s:4:"𝞅";s:2:"φ";s:4:"𝞆";s:2:"χ";s:4:"𝞇";s:2:"ψ";s:4:"𝞈";s:2:"ω";s:4:"𝞉";s:3:"∂";s:4:"𝞊";s:2:"ε";s:4:"𝞋";s:2:"θ";s:4:"𝞌";s:2:"κ";s:4:"𝞍";s:2:"φ";s:4:"𝞎";s:2:"ρ";s:4:"𝞏";s:2:"π";s:4:"𝞐";s:2:"Α";s:4:"𝞑";s:2:"Β";s:4:"𝞒";s:2:"Γ";s:4:"𝞓";s:2:"Δ";s:4:"𝞔";s:2:"Ε";s:4:"𝞕";s:2:"Ζ";s:4:"𝞖";s:2:"Η";s:4:"𝞗";s:2:"Θ";s:4:"𝞘";s:2:"Ι";s:4:"𝞙";s:2:"Κ";s:4:"𝞚";s:2:"Λ";s:4:"𝞛";s:2:"Μ";s:4:"𝞜";s:2:"Ν";s:4:"𝞝";s:2:"Ξ";s:4:"𝞞";s:2:"Ο";s:4:"𝞟";s:2:"Π";s:4:"𝞠";s:2:"Ρ";s:4:"𝞡";s:2:"Θ";s:4:"𝞢";s:2:"Σ";s:4:"𝞣";s:2:"Τ";s:4:"𝞤";s:2:"Υ";s:4:"𝞥";s:2:"Φ";s:4:"𝞦";s:2:"Χ";s:4:"𝞧";s:2:"Ψ";s:4:"𝞨";s:2:"Ω";s:4:"𝞩";s:3:"∇";s:4:"𝞪";s:2:"α";s:4:"𝞫";s:2:"β";s:4:"𝞬";s:2:"γ";s:4:"𝞭";s:2:"δ";s:4:"𝞮";s:2:"ε";s:4:"𝞯";s:2:"ζ";s:4:"𝞰";s:2:"η";s:4:"𝞱";s:2:"θ";s:4:"𝞲";s:2:"ι";s:4:"𝞳";s:2:"κ";s:4:"𝞴";s:2:"λ";s:4:"𝞵";s:2:"μ";s:4:"𝞶";s:2:"ν";s:4:"𝞷";s:2:"ξ";s:4:"𝞸";s:2:"ο";s:4:"𝞹";s:2:"π";s:4:"𝞺";s:2:"ρ";s:4:"𝞻";s:2:"ς";s:4:"𝞼";s:2:"σ";s:4:"𝞽";s:2:"τ";s:4:"𝞾";s:2:"υ";s:4:"𝞿";s:2:"φ";s:4:"𝟀";s:2:"χ";s:4:"𝟁";s:2:"ψ";s:4:"𝟂";s:2:"ω";s:4:"𝟃";s:3:"∂";s:4:"𝟄";s:2:"ε";s:4:"𝟅";s:2:"θ";s:4:"𝟆";s:2:"κ";s:4:"𝟇";s:2:"φ";s:4:"𝟈";s:2:"ρ";s:4:"𝟉";s:2:"π";s:4:"𝟊";s:2:"Ϝ";s:4:"𝟋";s:2:"ϝ";s:4:"𝟎";s:1:"0";s:4:"𝟏";s:1:"1";s:4:"𝟐";s:1:"2";s:4:"𝟑";s:1:"3";s:4:"𝟒";s:1:"4";s:4:"𝟓";s:1:"5";s:4:"𝟔";s:1:"6";s:4:"𝟕";s:1:"7";s:4:"𝟖";s:1:"8";s:4:"𝟗";s:1:"9";s:4:"𝟘";s:1:"0";s:4:"𝟙";s:1:"1";s:4:"𝟚";s:1:"2";s:4:"𝟛";s:1:"3";s:4:"𝟜";s:1:"4";s:4:"𝟝";s:1:"5";s:4:"𝟞";s:1:"6";s:4:"𝟟";s:1:"7";s:4:"𝟠";s:1:"8";s:4:"𝟡";s:1:"9";s:4:"𝟢";s:1:"0";s:4:"𝟣";s:1:"1";s:4:"𝟤";s:1:"2";s:4:"𝟥";s:1:"3";s:4:"𝟦";s:1:"4";s:4:"𝟧";s:1:"5";s:4:"𝟨";s:1:"6";s:4:"𝟩";s:1:"7";s:4:"𝟪";s:1:"8";s:4:"𝟫";s:1:"9";s:4:"𝟬";s:1:"0";s:4:"𝟭";s:1:"1";s:4:"𝟮";s:1:"2";s:4:"𝟯";s:1:"3";s:4:"𝟰";s:1:"4";s:4:"𝟱";s:1:"5";s:4:"𝟲";s:1:"6";s:4:"𝟳";s:1:"7";s:4:"𝟴";s:1:"8";s:4:"𝟵";s:1:"9";s:4:"𝟶";s:1:"0";s:4:"𝟷";s:1:"1";s:4:"𝟸";s:1:"2";s:4:"𝟹";s:1:"3";s:4:"𝟺";s:1:"4";s:4:"𝟻";s:1:"5";s:4:"𝟼";s:1:"6";s:4:"𝟽";s:1:"7";s:4:"𝟾";s:1:"8";s:4:"𝟿";s:1:"9";s:4:"🄀";s:2:"0.";s:4:"🄁";s:2:"0,";s:4:"🄂";s:2:"1,";s:4:"🄃";s:2:"2,";s:4:"🄄";s:2:"3,";s:4:"🄅";s:2:"4,";s:4:"🄆";s:2:"5,";s:4:"🄇";s:2:"6,";s:4:"🄈";s:2:"7,";s:4:"🄉";s:2:"8,";s:4:"🄊";s:2:"9,";s:4:"🄐";s:3:"(A)";s:4:"🄑";s:3:"(B)";s:4:"🄒";s:3:"(C)";s:4:"🄓";s:3:"(D)";s:4:"🄔";s:3:"(E)";s:4:"🄕";s:3:"(F)";s:4:"🄖";s:3:"(G)";s:4:"🄗";s:3:"(H)";s:4:"🄘";s:3:"(I)";s:4:"🄙";s:3:"(J)";s:4:"🄚";s:3:"(K)";s:4:"🄛";s:3:"(L)";s:4:"🄜";s:3:"(M)";s:4:"🄝";s:3:"(N)";s:4:"🄞";s:3:"(O)";s:4:"🄟";s:3:"(P)";s:4:"🄠";s:3:"(Q)";s:4:"🄡";s:3:"(R)";s:4:"🄢";s:3:"(S)";s:4:"🄣";s:3:"(T)";s:4:"🄤";s:3:"(U)";s:4:"🄥";s:3:"(V)";s:4:"🄦";s:3:"(W)";s:4:"🄧";s:3:"(X)";s:4:"🄨";s:3:"(Y)";s:4:"🄩";s:3:"(Z)";s:4:"🄪";s:7:"〔S〕";s:4:"🄫";s:1:"C";s:4:"🄬";s:1:"R";s:4:"🄭";s:2:"CD";s:4:"🄮";s:2:"WZ";s:4:"🄰";s:1:"A";s:4:"🄱";s:1:"B";s:4:"🄲";s:1:"C";s:4:"🄳";s:1:"D";s:4:"🄴";s:1:"E";s:4:"🄵";s:1:"F";s:4:"🄶";s:1:"G";s:4:"🄷";s:1:"H";s:4:"🄸";s:1:"I";s:4:"🄹";s:1:"J";s:4:"🄺";s:1:"K";s:4:"🄻";s:1:"L";s:4:"🄼";s:1:"M";s:4:"🄽";s:1:"N";s:4:"🄾";s:1:"O";s:4:"🄿";s:1:"P";s:4:"🅀";s:1:"Q";s:4:"🅁";s:1:"R";s:4:"🅂";s:1:"S";s:4:"🅃";s:1:"T";s:4:"🅄";s:1:"U";s:4:"🅅";s:1:"V";s:4:"🅆";s:1:"W";s:4:"🅇";s:1:"X";s:4:"🅈";s:1:"Y";s:4:"🅉";s:1:"Z";s:4:"🅊";s:2:"HV";s:4:"🅋";s:2:"MV";s:4:"🅌";s:2:"SD";s:4:"🅍";s:2:"SS";s:4:"🅎";s:3:"PPV";s:4:"🅏";s:2:"WC";s:4:"🆐";s:2:"DJ";s:4:"🈀";s:6:"ほか";s:4:"🈁";s:6:"ココ";s:4:"🈂";s:3:"サ";s:4:"🈐";s:3:"手";s:4:"🈑";s:3:"字";s:4:"🈒";s:3:"双";s:4:"🈓";s:6:"デ";s:4:"🈔";s:3:"二";s:4:"🈕";s:3:"多";s:4:"🈖";s:3:"解";s:4:"🈗";s:3:"天";s:4:"🈘";s:3:"交";s:4:"🈙";s:3:"映";s:4:"🈚";s:3:"無";s:4:"🈛";s:3:"料";s:4:"🈜";s:3:"前";s:4:"🈝";s:3:"後";s:4:"🈞";s:3:"再";s:4:"🈟";s:3:"新";s:4:"🈠";s:3:"初";s:4:"🈡";s:3:"終";s:4:"🈢";s:3:"生";s:4:"🈣";s:3:"販";s:4:"🈤";s:3:"声";s:4:"🈥";s:3:"吹";s:4:"🈦";s:3:"演";s:4:"🈧";s:3:"投";s:4:"🈨";s:3:"捕";s:4:"🈩";s:3:"一";s:4:"🈪";s:3:"三";s:4:"🈫";s:3:"遊";s:4:"🈬";s:3:"左";s:4:"🈭";s:3:"中";s:4:"🈮";s:3:"右";s:4:"🈯";s:3:"指";s:4:"🈰";s:3:"走";s:4:"🈱";s:3:"打";s:4:"🈲";s:3:"禁";s:4:"🈳";s:3:"空";s:4:"🈴";s:3:"合";s:4:"🈵";s:3:"満";s:4:"🈶";s:3:"有";s:4:"🈷";s:3:"月";s:4:"🈸";s:3:"申";s:4:"🈹";s:3:"割";s:4:"🈺";s:3:"営";s:4:"🉀";s:9:"〔本〕";s:4:"🉁";s:9:"〔三〕";s:4:"🉂";s:9:"〔二〕";s:4:"🉃";s:9:"〔安〕";s:4:"🉄";s:9:"〔点〕";s:4:"🉅";s:9:"〔打〕";s:4:"🉆";s:9:"〔盗〕";s:4:"🉇";s:9:"〔勝〕";s:4:"🉈";s:9:"〔敗〕";s:4:"🉐";s:3:"得";s:4:"🉑";s:3:"可";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
-
index 18d89f6..b8e44c7 100644 (file)
@@ -1,10 +1,8 @@
 <?php
 /**
- * Some constant definitions for the unicode normalization module.
- *
- * Note: these constants must all be resolvable at compile time by HipHop,
- * since this file will not be executed during request startup for a compiled
- * MediaWiki.
+ * 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
  * @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/UtfNormalGenerate.php b/includes/libs/normal/UtfNormalGenerate.php
deleted file mode 100644 (file)
index f57aa6c..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-<?php
-/**
- * This script generates UniNormalData.inc from the Unicode Character Database
- * and supplementary files.
- *
- * Copyright (C) 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
- */
-
-if ( PHP_SAPI != 'cli' ) {
-       die( "Run me from the command line please.\n" );
-}
-
-require_once 'UtfNormalDefines.php';
-require_once 'UtfNormalUtil.php';
-
-$in = fopen( "DerivedNormalizationProps.txt", "rt" );
-if ( !$in ) {
-       print "Can't open DerivedNormalizationProps.txt for reading.\n";
-       print "If necessary, fetch this file from the internet:\n";
-       print "http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt\n";
-       exit( -1 );
-}
-print "Initializing normalization quick check tables...\n";
-$checkNFC = array();
-while ( false !== ( $line = fgets( $in ) ) ) {
-       $matches = array();
-       if ( preg_match(
-               '/^([0-9A-F]+)(?:..([0-9A-F]+))?\s*;\s*(NFC_QC)\s*;\s*([MN])/',
-               $line,
-               $matches )
-       ) {
-               list( $junk, $first, $last, $prop, $value ) = $matches;
-               #print "$first $last $prop $value\n";
-               if ( !$last ) {
-                       $last = $first;
-               }
-
-               $lastInDecimal = hexdec( $last );
-               for ( $i = hexdec( $first ); $i <= $lastInDecimal; $i++ ) {
-                       $char = codepointToUtf8( $i );
-                       $checkNFC[$char] = $value;
-               }
-       }
-}
-fclose( $in );
-
-$in = fopen( "CompositionExclusions.txt", "rt" );
-if ( !$in ) {
-       print "Can't open CompositionExclusions.txt for reading.\n";
-       print "If necessary, fetch this file from the internet:\n";
-       print "http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt\n";
-       exit( -1 );
-}
-$exclude = array();
-while ( false !== ( $line = fgets( $in ) ) ) {
-       if ( preg_match( '/^([0-9A-F]+)/i', $line, $matches ) ) {
-               $codepoint = $matches[1];
-               $source = codepointToUtf8( hexdec( $codepoint ) );
-               $exclude[$source] = true;
-       }
-}
-fclose( $in );
-
-$in = fopen( "UnicodeData.txt", "rt" );
-if ( !$in ) {
-       print "Can't open UnicodeData.txt for reading.\n";
-       print "If necessary, fetch this file from the internet:\n";
-       print "http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\n";
-       exit( -1 );
-}
-
-$compatibilityDecomp = array();
-$canonicalDecomp = array();
-$canonicalComp = array();
-$combiningClass = array();
-$total = 0;
-$compat = 0;
-$canon = 0;
-
-print "Reading character definitions...\n";
-while ( false !== ( $line = fgets( $in ) ) ) {
-       $columns = explode( ';', $line );
-       $codepoint = $columns[0];
-       $name = $columns[1];
-       $canonicalCombiningClass = $columns[3];
-       $decompositionMapping = $columns[5];
-
-       $source = codepointToUtf8( hexdec( $codepoint ) );
-
-       if ( $canonicalCombiningClass != 0 ) {
-               $combiningClass[$source] = intval( $canonicalCombiningClass );
-       }
-
-       if ( $decompositionMapping === '' ) continue;
-       if ( preg_match( '/^<(.+)> (.*)$/', $decompositionMapping, $matches ) ) {
-               # Compatibility decomposition
-               $canonical = false;
-               $decompositionMapping = $matches[2];
-               $compat++;
-       } else {
-               $canonical = true;
-               $canon++;
-       }
-       $total++;
-       $dest = hexSequenceToUtf8( $decompositionMapping );
-
-       $compatibilityDecomp[$source] = $dest;
-       if ( $canonical ) {
-               $canonicalDecomp[$source] = $dest;
-               if ( empty( $exclude[$source] ) ) {
-                       $canonicalComp[$dest] = $source;
-               }
-       }
-       #print "$codepoint | $canonicalCombiningClasses | $decompositionMapping\n";
-}
-fclose( $in );
-
-print "Recursively expanding canonical mappings...\n";
-$changed = 42;
-$pass = 1;
-while ( $changed > 0 ) {
-       print "pass $pass\n";
-       $changed = 0;
-       foreach ( $canonicalDecomp as $source => $dest ) {
-               $newDest = preg_replace_callback(
-                       '/([\xc0-\xff][\x80-\xbf]+)/',
-                       'callbackCanonical',
-                       $dest );
-               if ( $newDest === $dest ) continue;
-               $changed++;
-               $canonicalDecomp[$source] = $newDest;
-       }
-       $pass++;
-}
-
-print "Recursively expanding compatibility mappings...\n";
-$changed = 42;
-$pass = 1;
-while ( $changed > 0 ) {
-       print "pass $pass\n";
-       $changed = 0;
-       foreach ( $compatibilityDecomp as $source => $dest ) {
-               $newDest = preg_replace_callback(
-                       '/([\xc0-\xff][\x80-\xbf]+)/',
-                       'callbackCompat',
-                       $dest );
-               if ( $newDest === $dest ) continue;
-               $changed++;
-               $compatibilityDecomp[$source] = $newDest;
-       }
-       $pass++;
-}
-
-print "$total decomposition mappings ($canon canonical, $compat compatibility)\n";
-
-$out = fopen( "UtfNormalData.inc", "wt" );
-if ( $out ) {
-       $serCombining = escapeSingleString( serialize( $combiningClass ) );
-       $serComp = escapeSingleString( serialize( $canonicalComp ) );
-       $serCanon = escapeSingleString( serialize( $canonicalDecomp ) );
-       $serCheckNFC = escapeSingleString( serialize( $checkNFC ) );
-       $outdata = "<" . "?php
-/**
- * This file was automatically generated -- do not edit!
- * Run UtfNormalGenerate.php to create this file again (make clean && make)
- *
- * @file
- */
-// @codingStandardsIgnoreFile
-
-UtfNormal::\$utfCombiningClass = unserialize( '$serCombining' );
-UtfNormal::\$utfCanonicalComp = unserialize( '$serComp' );
-UtfNormal::\$utfCanonicalDecomp = unserialize( '$serCanon' );
-UtfNormal::\$utfCheckNFC = unserialize( '$serCheckNFC' );
-\n";
-       fputs( $out, $outdata );
-       fclose( $out );
-       print "Wrote out UtfNormalData.inc\n";
-} else {
-       print "Can't create file UtfNormalData.inc\n";
-       exit( -1 );
-}
-
-$out = fopen( "UtfNormalDataK.inc", "wt" );
-if ( $out ) {
-       $serCompat = escapeSingleString( serialize( $compatibilityDecomp ) );
-       $outdata = "<" . "?php
-/**
- * This file was automatically generated -- do not edit!
- * Run UtfNormalGenerate.php to create this file again (make clean && make)
- *
- * @file
- */
-// @codingStandardsIgnoreFile
-
-UtfNormal::\$utfCompatibilityDecomp = unserialize( '$serCompat' );
-\n";
-       fputs( $out, $outdata );
-       fclose( $out );
-       print "Wrote out UtfNormalDataK.inc\n";
-       exit( 0 );
-} else {
-       print "Can't create file UtfNormalDataK.inc\n";
-       exit( -1 );
-}
-
-# ---------------
-
-function callbackCanonical( $matches ) {
-       // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
-       global $canonicalDecomp;
-       // @codingStandardsIgnoreEnd
-
-       if ( isset( $canonicalDecomp[$matches[1]] ) ) {
-               return $canonicalDecomp[$matches[1]];
-       }
-
-       return $matches[1];
-}
-
-function callbackCompat( $matches ) {
-       // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
-       global $compatibilityDecomp;
-       // @codingStandardsIgnoreEnd
-
-       if ( isset( $compatibilityDecomp[$matches[1]] ) ) {
-               return $compatibilityDecomp[$matches[1]];
-       }
-
-       return $matches[1];
-}
diff --git a/includes/libs/normal/UtfNormalMemStress.php b/includes/libs/normal/UtfNormalMemStress.php
deleted file mode 100644 (file)
index f133e4d..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-/**
- * Approximate benchmark for some basic operations.
- * Runs large chunks of text through cleanup with a lowish memory limit,
- * to test regression on mem usage (bug 28146)
- *
- * Copyright © 2004-2011 Brion Vibber <brion@wikimedia.org>
- * 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
- */
-
-if ( PHP_SAPI != 'cli' ) {
-       die( "Run me from the command line please.\n" );
-}
-
-if ( isset( $_SERVER['argv'] ) && in_array( '--icu', $_SERVER['argv'] ) ) {
-       dl( 'php_utfnormal.so' );
-}
-
-require_once 'UtfNormalDefines.php';
-require_once 'UtfNormalUtil.php';
-require_once 'UtfNormal.php';
-
-define( 'BENCH_CYCLES', 1 );
-define( 'BIGSIZE', 1024 * 1024 * 10 ); // 10m
-ini_set( 'memory_limit', BIGSIZE + 120 * 1024 * 1024 );
-
-$testfiles = array(
-       'testdata/washington.txt' => 'English text',
-       'testdata/berlin.txt' => 'German text',
-       'testdata/bulgakov.txt' => 'Russian text',
-       'testdata/tokyo.txt' => 'Japanese text',
-       'testdata/young.txt' => 'Korean text'
-);
-$normalizer = new UtfNormal;
-UtfNormal::loadData();
-foreach ( $testfiles as $file => $desc ) {
-       benchmarkTest( $normalizer, $file, $desc );
-}
-
-# -------
-
-function benchmarkTest( &$u, $filename, $desc ) {
-       print "Testing $filename ($desc)...\n";
-       $data = file_get_contents( $filename );
-       $all = $data;
-       while ( strlen( $all ) < BIGSIZE ) {
-               $all .= $all;
-       }
-       $data = $all;
-       echo "Data is " . strlen( $data ) . " bytes.\n";
-       $forms = array(
-               'quickIsNFCVerify',
-               'cleanUp',
-       );
-
-       foreach ( $forms as $form ) {
-               if ( is_array( $form ) ) {
-                       $str = $data;
-                       foreach ( $form as $step ) {
-                               $str = benchmarkForm( $u, $str, $step );
-                       }
-               } else {
-                       benchmarkForm( $u, $data, $form );
-               }
-       }
-}
-
-function benchmarkForm( &$u, &$data, $form ) {
-       #$start = microtime( true );
-       for ( $i = 0; $i < BENCH_CYCLES; $i++ ) {
-               $start = microtime( true );
-               $out = $u->$form( $data, UtfNormal::$utfCanonicalDecomp );
-               $deltas[] = ( microtime( true ) - $start );
-       }
-       #$delta = (microtime( true ) - $start) / BENCH_CYCLES;
-       sort( $deltas );
-       $delta = $deltas[0]; # Take shortest time
-
-       $rate = intval( strlen( $data ) / $delta );
-       $same = ( 0 == strcmp( $data, $out ) );
-
-       printf( " %20s %6.1fms %12s bytes/s (%s)\n",
-               $form,
-               $delta * 1000.0,
-               number_format( $rate ),
-               ( $same ? 'no change' : 'changed' ) );
-
-       return $out;
-}
diff --git a/includes/libs/normal/UtfNormalTest.php b/includes/libs/normal/UtfNormalTest.php
deleted file mode 100644 (file)
index 10cd0f0..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-<?php
-/**
- * Implements the conformance test at:
- * http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
- *
- * 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
- */
-
-if ( PHP_SAPI != 'cli' ) {
-       die( "Run me from the command line please.\n" );
-}
-
-$verbose = true;
-#define( 'PRETTY_UTF8', true );
-
-if ( defined( 'PRETTY_UTF8' ) ) {
-       function pretty( $string ) {
-               return strtoupper( bin2hex( $string ) );
-       }
-} else {
-       /**
-        * @ignore
-        * @param string $string
-        * @return string
-        */
-       function pretty( $string ) {
-               return strtoupper( utf8ToHexSequence( $string ) );
-       }
-}
-
-if ( isset( $_SERVER['argv'] ) && in_array( '--icu', $_SERVER['argv'] ) ) {
-       dl( 'php_utfnormal.so' );
-}
-
-require_once 'UtfNormalDefines.php';
-require_once 'UtfNormalUtil.php';
-require_once 'UtfNormal.php';
-
-$in = fopen( "NormalizationTest.txt", "rt" );
-if ( !$in ) {
-       print "Couldn't open NormalizationTest.txt -- can't run tests.\n";
-       print "If necessary, manually download this file. It can be obtained at\n";
-       print "http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt";
-       exit( -1 );
-}
-
-$normalizer = new UtfNormal;
-
-$total = 0;
-$success = 0;
-$failure = 0;
-$ok = true;
-$testedChars = array();
-
-while ( false !== ( $line = fgets( $in ) ) ) {
-       list( $data, $comment ) = explode( '#', $line );
-       if ( $data === '' ) continue;
-       $matches = array();
-       if ( preg_match( '/@Part([\d])/', $data, $matches ) ) {
-               if ( $matches[1] > 0 ) {
-                       $ok = reportResults( $total, $success, $failure ) && $ok;
-               }
-               print "Part {$matches[1]}: $comment";
-               continue;
-       }
-
-       $columns = array_map( "hexSequenceToUtf8", explode( ";", $data ) );
-       array_unshift( $columns, '' );
-
-       $testedChars[$columns[1]] = true;
-       $total++;
-       if ( testNormals( $normalizer, $columns, $comment, $verbose ) ) {
-               $success++;
-       } else {
-               $failure++;
-               # print "FAILED: $comment";
-       }
-       if ( $total % 100 == 0 ) print "$total ";
-}
-fclose( $in );
-
-$ok = reportResults( $total, $success, $failure ) && $ok;
-
-$in = fopen( "UnicodeData.txt", "rt" );
-if ( !$in ) {
-       print "Can't open UnicodeData.txt for reading.\n";
-       print "If necessary, fetch this file from the internet:\n";
-       print "http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\n";
-       exit( -1 );
-}
-print "Now testing invariants...\n";
-
-while ( false !== ( $line = fgets( $in ) ) ) {
-       $cols = explode( ';', $line );
-       $char = codepointToUtf8( hexdec( $cols[0] ) );
-       $desc = $cols[0] . ": " . $cols[1];
-       if ( $char < "\x20" || $char >= UTF8_SURROGATE_FIRST && $char <= UTF8_SURROGATE_LAST ) {
-               # Can't check NULL with the ICU plugin, as null bytes fail in C land.
-               # Skip other control characters, as we strip them for XML safety.
-               # Surrogates are illegal on their own or in UTF-8, ignore.
-               continue;
-       }
-       if ( empty( $testedChars[$char] ) ) {
-               $total++;
-               if ( testInvariant( $normalizer, $char, $desc, $verbose ) ) {
-                       $success++;
-               } else {
-                       $failure++;
-               }
-               if ( $total % 100 == 0 ) print "$total ";
-       }
-}
-fclose( $in );
-
-$ok = reportResults( $total, $success, $failure ) && $ok;
-
-if ( $ok ) {
-       print "TEST SUCCEEDED!\n";
-       exit( 0 );
-} else {
-       print "TEST FAILED!\n";
-       exit( -1 );
-}
-
-## ------
-
-function reportResults( &$total, &$success, &$failure ) {
-       $percSucc = intval( $success * 100 / $total );
-       $percFail = intval( $failure * 100 / $total );
-       print "\n";
-       print "$success tests successful ($percSucc%)\n";
-       print "$failure tests failed ($percFail%)\n\n";
-       $ok = ( $success > 0 && $failure == 0 );
-       $total = 0;
-       $success = 0;
-       $failure = 0;
-
-       return $ok;
-}
-
-function testNormals( &$u, $c, $comment, $verbose, $reportFailure = false ) {
-       $result = testNFC( $u, $c, $comment, $reportFailure );
-       $result = testNFD( $u, $c, $comment, $reportFailure ) && $result;
-       $result = testNFKC( $u, $c, $comment, $reportFailure ) && $result;
-       $result = testNFKD( $u, $c, $comment, $reportFailure ) && $result;
-       $result = testCleanUp( $u, $c, $comment, $reportFailure ) && $result;
-
-       if ( $verbose && !$result && !$reportFailure ) {
-               print $comment;
-               testNormals( $u, $c, $comment, $verbose, true );
-       }
-
-       return $result;
-}
-
-function verbosify( $a, $b, $col, $form, $verbose ) {
-       #$result = ($a === $b);
-       $result = ( strcmp( $a, $b ) == 0 );
-       if ( $verbose ) {
-               $aa = pretty( $a );
-               $bb = pretty( $b );
-               $ok = $result ? "succeed" : " failed";
-               $eq = $result ? "==" : "!=";
-               print "  $ok $form c$col '$aa' $eq '$bb'\n";
-       }
-
-       return $result;
-}
-
-function testNFC( &$u, $c, $comment, $verbose ) {
-       $result = verbosify( $c[2], $u->toNFC( $c[1] ), 1, 'NFC', $verbose );
-       $result = verbosify( $c[2], $u->toNFC( $c[2] ), 2, 'NFC', $verbose ) && $result;
-       $result = verbosify( $c[2], $u->toNFC( $c[3] ), 3, 'NFC', $verbose ) && $result;
-       $result = verbosify( $c[4], $u->toNFC( $c[4] ), 4, 'NFC', $verbose ) && $result;
-       $result = verbosify( $c[4], $u->toNFC( $c[5] ), 5, 'NFC', $verbose ) && $result;
-
-       return $result;
-}
-
-function testCleanUp( &$u, $c, $comment, $verbose ) {
-       $x = $c[1];
-       $result = verbosify( $c[2], $u->cleanUp( $x ), 1, 'cleanUp', $verbose );
-       $x = $c[2];
-       $result = verbosify( $c[2], $u->cleanUp( $x ), 2, 'cleanUp', $verbose ) && $result;
-       $x = $c[3];
-       $result = verbosify( $c[2], $u->cleanUp( $x ), 3, 'cleanUp', $verbose ) && $result;
-       $x = $c[4];
-       $result = verbosify( $c[4], $u->cleanUp( $x ), 4, 'cleanUp', $verbose ) && $result;
-       $x = $c[5];
-       $result = verbosify( $c[4], $u->cleanUp( $x ), 5, 'cleanUp', $verbose ) && $result;
-
-       return $result;
-}
-
-function testNFD( &$u, $c, $comment, $verbose ) {
-       $result = verbosify( $c[3], $u->toNFD( $c[1] ), 1, 'NFD', $verbose );
-       $result = verbosify( $c[3], $u->toNFD( $c[2] ), 2, 'NFD', $verbose ) && $result;
-       $result = verbosify( $c[3], $u->toNFD( $c[3] ), 3, 'NFD', $verbose ) && $result;
-       $result = verbosify( $c[5], $u->toNFD( $c[4] ), 4, 'NFD', $verbose ) && $result;
-       $result = verbosify( $c[5], $u->toNFD( $c[5] ), 5, 'NFD', $verbose ) && $result;
-
-       return $result;
-}
-
-function testNFKC( &$u, $c, $comment, $verbose ) {
-       $result = verbosify( $c[4], $u->toNFKC( $c[1] ), 1, 'NFKC', $verbose );
-       $result = verbosify( $c[4], $u->toNFKC( $c[2] ), 2, 'NFKC', $verbose ) && $result;
-       $result = verbosify( $c[4], $u->toNFKC( $c[3] ), 3, 'NFKC', $verbose ) && $result;
-       $result = verbosify( $c[4], $u->toNFKC( $c[4] ), 4, 'NFKC', $verbose ) && $result;
-       $result = verbosify( $c[4], $u->toNFKC( $c[5] ), 5, 'NFKC', $verbose ) && $result;
-
-       return $result;
-}
-
-function testNFKD( &$u, $c, $comment, $verbose ) {
-       $result = verbosify( $c[5], $u->toNFKD( $c[1] ), 1, 'NFKD', $verbose );
-       $result = verbosify( $c[5], $u->toNFKD( $c[2] ), 2, 'NFKD', $verbose ) && $result;
-       $result = verbosify( $c[5], $u->toNFKD( $c[3] ), 3, 'NFKD', $verbose ) && $result;
-       $result = verbosify( $c[5], $u->toNFKD( $c[4] ), 4, 'NFKD', $verbose ) && $result;
-       $result = verbosify( $c[5], $u->toNFKD( $c[5] ), 5, 'NFKD', $verbose ) && $result;
-
-       return $result;
-}
-
-function testInvariant( &$u, $char, $desc, $verbose, $reportFailure = false ) {
-       $result = verbosify( $char, $u->toNFC( $char ), 1, 'NFC', $reportFailure );
-       $result = verbosify( $char, $u->toNFD( $char ), 1, 'NFD', $reportFailure ) && $result;
-       $result = verbosify( $char, $u->toNFKC( $char ), 1, 'NFKC', $reportFailure ) && $result;
-       $result = verbosify( $char, $u->toNFKD( $char ), 1, 'NFKD', $reportFailure ) && $result;
-       $result = verbosify( $char, $u->cleanUp( $char ), 1, 'cleanUp', $reportFailure ) && $result;
-
-       if ( $verbose && !$result && !$reportFailure ) {
-               print $desc;
-               testInvariant( $u, $char, $desc, $verbose, true );
-       }
-
-       return $result;
-}
diff --git a/includes/libs/normal/UtfNormalTest2.php b/includes/libs/normal/UtfNormalTest2.php
deleted file mode 100644 (file)
index 53e68c2..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-#!/usr/bin/env php
-<?php
-/**
- * Other tests for the unicode normalization module.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write 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
- */
-
-if ( PHP_SAPI != 'cli' ) {
-       die( "Run me from the command line please.\n" );
-}
-
-// From http://unicode.org/Public/UNIDATA/NormalizationTest.txt
-$file = "NormalizationTest.txt";
-
-// Anything after this character is a comment
-define ( 'COMMENT', '#' );
-
-// Semicolons are used to separate the columns
-define ( 'SEPARATOR', ';' );
-
-$f = fopen( $file, "r" );
-
-/**
- * The following section will be used for testing different normalization methods.
- * - Pure PHP
- * ~ no assertion errors
- * ~ 6.25 minutes
- * - php_utfnormal.so or intl extension: both are wrappers around
- * libicu so we list the version of libicu when making the
- * comparison
- * - libicu Ubuntu 3.8.1-3ubuntu1.1 php 5.2.6-3ubuntu4.5
- * ~ 2200 assertion errors
- * ~ 5 seconds
- * ~ output: http://paste2.org/p/921566
- * - libicu Ubuntu 4.2.1-3 php 5.3.2-1ubuntu4.2
- * ~ 1384 assertion errors
- * ~ 15 seconds
- * ~ output: http://paste2.org/p/921435
- * - libicu Debian 4.4.1-5 php 5.3.2-1ubuntu4.2
- * ~ no assertion errors
- * ~ 13 seconds
- * - Tests comparing pure PHP output with libicu output were added
- * later and slow down the runtime.
- */
-
-require_once './UtfNormal.php';
-function normalize_form_c( $c ) {
-       return UtfNormal::toNFC( $c );
-}
-
-function normalize_form_d( $c ) {
-       return UtfNormal::toNFD( $c );
-}
-
-function normalize_form_kc( $c ) {
-       return UtfNormal::toNFKC( $c );
-}
-
-function normalize_form_kd( $c ) {
-       return UtfNormal::toNFKD( $c );
-}
-
-/**
- * This set of functions is only useful if youve added a param to the
- * following functions to force pure PHP usage.  I decided not to
- * commit that code since might produce a slowdown in the UTF
- * normalization code just for the sake of these tests. -- hexmode
- * @return string
- */
-function normalize_form_c_php( $c ) {
-       return UtfNormal::toNFC( $c, "php" );
-}
-
-function normalize_form_d_php( $c ) {
-       return UtfNormal::toNFD( $c, "php" );
-}
-
-function normalize_form_kc_php( $c ) {
-       return UtfNormal::toNFKC( $c, "php" );
-}
-
-function normalize_form_kd_php( $c ) {
-       return UtfNormal::toNFKD( $c, "php" );
-}
-
-assert_options( ASSERT_ACTIVE, 1 );
-assert_options( ASSERT_WARNING, 0 );
-assert_options( ASSERT_QUIET_EVAL, 1 );
-assert_options( ASSERT_CALLBACK, 'my_assert' );
-
-function my_assert( $file, $line, $code ) {
-       // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
-       global $col, $lineNo;
-       // @codingStandardsIgnoreEnd
-
-       echo "Assertion that '$code' failed on line $lineNo ($col[5])\n";
-}
-
-$count = 0;
-$lineNo = 0;
-if ( $f !== false ) {
-       while ( ( $col = getRow( $f ) ) !== false ) {
-               $lineNo++;
-
-               if ( count( $col ) == 6 ) {
-                       $count++;
-                       if ( $count % 100 === 0 ) echo "Count: $count\n";
-               } else {
-                       continue;
-               }
-
-               # verify that the pure PHP version is correct
-               $NFCc1 = normalize_form_c( $col[0] );
-               $NFCc1p = normalize_form_c_php( $col[0] );
-               assert( '$NFCc1 === $NFCc1p' );
-               $NFCc2 = normalize_form_c( $col[1] );
-               $NFCc2p = normalize_form_c_php( $col[1] );
-               assert( '$NFCc2 === $NFCc2p' );
-               $NFCc3 = normalize_form_c( $col[2] );
-               $NFCc3p = normalize_form_c_php( $col[2] );
-               assert( '$NFCc3 === $NFCc3p' );
-               $NFCc4 = normalize_form_c( $col[3] );
-               $NFCc4p = normalize_form_c_php( $col[3] );
-               assert( '$NFCc4 === $NFCc4p' );
-               $NFCc5 = normalize_form_c( $col[4] );
-               $NFCc5p = normalize_form_c_php( $col[4] );
-               assert( '$NFCc5 === $NFCc5p' );
-
-               $NFDc1 = normalize_form_d( $col[0] );
-               $NFDc1p = normalize_form_d_php( $col[0] );
-               assert( '$NFDc1 === $NFDc1p' );
-               $NFDc2 = normalize_form_d( $col[1] );
-               $NFDc2p = normalize_form_d_php( $col[1] );
-               assert( '$NFDc2 === $NFDc2p' );
-               $NFDc3 = normalize_form_d( $col[2] );
-               $NFDc3p = normalize_form_d_php( $col[2] );
-               assert( '$NFDc3 === $NFDc3p' );
-               $NFDc4 = normalize_form_d( $col[3] );
-               $NFDc4p = normalize_form_d_php( $col[3] );
-               assert( '$NFDc4 === $NFDc4p' );
-               $NFDc5 = normalize_form_d( $col[4] );
-               $NFDc5p = normalize_form_d_php( $col[4] );
-               assert( '$NFDc5 === $NFDc5p' );
-
-               $NFKDc1 = normalize_form_kd( $col[0] );
-               $NFKDc1p = normalize_form_kd_php( $col[0] );
-               assert( '$NFKDc1 === $NFKDc1p' );
-               $NFKDc2 = normalize_form_kd( $col[1] );
-               $NFKDc2p = normalize_form_kd_php( $col[1] );
-               assert( '$NFKDc2 === $NFKDc2p' );
-               $NFKDc3 = normalize_form_kd( $col[2] );
-               $NFKDc3p = normalize_form_kd_php( $col[2] );
-               assert( '$NFKDc3 === $NFKDc3p' );
-               $NFKDc4 = normalize_form_kd( $col[3] );
-               $NFKDc4p = normalize_form_kd_php( $col[3] );
-               assert( '$NFKDc4 === $NFKDc4p' );
-               $NFKDc5 = normalize_form_kd( $col[4] );
-               $NFKDc5p = normalize_form_kd_php( $col[4] );
-               assert( '$NFKDc5 === $NFKDc5p' );
-
-               $NFKCc1 = normalize_form_kc( $col[0] );
-               $NFKCc1p = normalize_form_kc_php( $col[0] );
-               assert( '$NFKCc1 === $NFKCc1p' );
-               $NFKCc2 = normalize_form_kc( $col[1] );
-               $NFKCc2p = normalize_form_kc_php( $col[1] );
-               assert( '$NFKCc2 === $NFKCc2p' );
-               $NFKCc3 = normalize_form_kc( $col[2] );
-               $NFKCc3p = normalize_form_kc_php( $col[2] );
-               assert( '$NFKCc3 === $NFKCc3p' );
-               $NFKCc4 = normalize_form_kc( $col[3] );
-               $NFKCc4p = normalize_form_kc_php( $col[3] );
-               assert( '$NFKCc4 === $NFKCc4p' );
-               $NFKCc5 = normalize_form_kc( $col[4] );
-               $NFKCc5p = normalize_form_kc_php( $col[4] );
-               assert( '$NFKCc5 === $NFKCc5p' );
-
-               # c2 ==  NFC(c1) ==      NFC(c2) ==      NFC(c3)
-               assert( '$col[1] === $NFCc1' );
-               assert( '$col[1] === $NFCc2' );
-               assert( '$col[1] === $NFCc3' );
-
-               # c4 ==  NFC(c4) ==      NFC(c5)
-               assert( '$col[3] === $NFCc4' );
-               assert( '$col[3] === $NFCc5' );
-
-               # c3 ==  NFD(c1) ==      NFD(c2) ==      NFD(c3)
-               assert( '$col[2] === $NFDc1' );
-               assert( '$col[2] === $NFDc2' );
-               assert( '$col[2] === $NFDc3' );
-
-               # c5 ==  NFD(c4) ==      NFD(c5)
-               assert( '$col[4] === $NFDc4' );
-               assert( '$col[4] === $NFDc5' );
-
-               # c4 == NFKC(c1) == NFKC(c2) == NFKC(c3) == NFKC(c4) == NFKC(c5)
-               assert( '$col[3] === $NFKCc1' );
-               assert( '$col[3] === $NFKCc2' );
-               assert( '$col[3] === $NFKCc3' );
-               assert( '$col[3] === $NFKCc4' );
-               assert( '$col[3] === $NFKCc5' );
-
-               # c5 == NFKD(c1) == NFKD(c2) == NFKD(c3) == NFKD(c4) == NFKD(c5)
-               assert( '$col[4] === $NFKDc1' );
-               assert( '$col[4] === $NFKDc2' );
-               assert( '$col[4] === $NFKDc3' );
-               assert( '$col[4] === $NFKDc4' );
-               assert( '$col[4] === $NFKDc5' );
-       }
-}
-echo "done.\n";
-
-// Compare against http://en.wikipedia.org/wiki/UTF-8#Description
-function unichr( $c ) {
-       if ( $c <= 0x7F ) {
-               return chr( $c );
-       } 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 );
-       } elseif ( $c <= 0x10FFFF ) {
-               return chr( 0xF0 | $c >> 18 ) . chr( 0x80 | $c >> 12 & 0x3F )
-               . chr( 0x80 | $c >> 6 & 0x3F )
-               . chr( 0x80 | $c & 0x3F );
-       } else {
-               return false;
-       }
-}
-
-function unistr( $c ) {
-       return implode( "", array_map( "unichr", array_map( "hexdec", explode( " ", $c ) ) ) );
-}
-
-function getRow( $f ) {
-       $row = fgets( $f );
-       if ( $row === false ) return false;
-       $row = rtrim( $row );
-       $pos = strpos( $row, COMMENT );
-       $pos2 = strpos( $row, ")" );
-       if ( $pos === 0 ) return array( $row );
-       $c = "";
-
-       if ( $pos ) {
-               if ( $pos2 ) $c = substr( $row, $pos2 + 2 );
-               else      $c = substr( $row, $pos );
-               $row = substr( $row, 0, $pos );
-       }
-
-       $ret = array();
-       foreach ( explode( SEPARATOR, $row ) as $ent ) {
-               if ( trim( $ent ) !== "" ) {
-                       $ret[] = unistr( $ent );
-               }
-       }
-       $ret[] = $c;
-
-       return $ret;
-}
index ae88e73..ad9a2b9 100644 (file)
@@ -25,6 +25,8 @@
  * @ingroup UtfNormal
  */
 
+
+use UtfNormal\Utils;
 /**
  * Return UTF-8 sequence for a given Unicode code point.
  *
  * @return String
  * @throws InvalidArgumentException if fed out of range data.
  * @public
+ * @deprecated since 1.25, use UtfNormal\Utils directly
  */
 function codepointToUtf8( $codepoint ) {
-       if ( $codepoint < 0x80 ) {
-               return chr( $codepoint );
-       }
-
-       if ( $codepoint < 0x800 ) {
-               return chr( $codepoint >> 6 & 0x3f | 0xc0 ) .
-                       chr( $codepoint & 0x3f | 0x80 );
-       }
-
-       if ( $codepoint < 0x10000 ) {
-               return chr( $codepoint >> 12 & 0x0f | 0xe0 ) .
-                       chr( $codepoint >> 6 & 0x3f | 0x80 ) .
-                       chr( $codepoint & 0x3f | 0x80 );
-       }
-
-       if ( $codepoint < 0x110000 ) {
-               return chr( $codepoint >> 18 & 0x07 | 0xf0 ) .
-                       chr( $codepoint >> 12 & 0x3f | 0x80 ) .
-                       chr( $codepoint >> 6 & 0x3f | 0x80 ) .
-                       chr( $codepoint & 0x3f | 0x80 );
-       }
-
-       throw new InvalidArgumentException( "Asked for code outside of range ($codepoint)" );
+       return Utils::codepointToUtf8( $codepoint );
 }
 
 /**
@@ -68,21 +49,17 @@ function codepointToUtf8( $codepoint ) {
  * @return String
  * @throws InvalidArgumentException if fed out of range data.
  * @private
+ * @deprecated since 1.25, use UtfNormal\Utils directly
  */
 function hexSequenceToUtf8( $sequence ) {
-       $utf = '';
-       foreach ( explode( ' ', $sequence ) as $hex ) {
-               $n = hexdec( $hex );
-               $utf .= codepointToUtf8( $n );
-       }
-
-       return $utf;
+       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
@@ -90,7 +67,7 @@ function hexSequenceToUtf8( $sequence ) {
 function utf8ToHexSequence( $str ) {
        $buf = '';
        foreach ( preg_split( '//u', $str, -1, PREG_SPLIT_NO_EMPTY ) as $cp ) {
-               $buf .= sprintf( '%04x ', utf8ToCodepoint( $cp ) );
+               $buf .= sprintf( '%04x ', UtfNormal\Utils::utf8ToCodepoint( $cp ) );
        }
 
        return rtrim( $buf );
@@ -103,39 +80,10 @@ function utf8ToHexSequence( $str ) {
  * @param $char String
  * @return Integer
  * @public
+ * @deprecated since 1.25, use UtfNormal\Utils directly
  */
 function utf8ToCodepoint( $char ) {
-       # Find the length
-       $z = ord( $char[0] );
-       if ( $z & 0x80 ) {
-               $length = 0;
-               while ( $z & 0x80 ) {
-                       $length++;
-                       $z <<= 1;
-               }
-       } else {
-               $length = 1;
-       }
-
-       if ( $length != strlen( $char ) ) {
-               return false;
-       }
-
-       if ( $length == 1 ) {
-               return ord( $char );
-       }
-
-       # Mask off the length-determining bits and shift back to the original location
-       $z &= 0xff;
-       $z >>= $length;
-
-       # Add in the free bits from subsequent bytes
-       for ( $i = 1; $i < $length; $i++ ) {
-               $z <<= 6;
-               $z |= ord( $char[$i] ) & 0x3f;
-       }
-
-       return $z;
+       return Utils::utf8ToCodepoint( $char );
 }
 
 /**
@@ -144,11 +92,8 @@ function utf8ToCodepoint( $char ) {
  * @param string $string string to be escaped.
  * @return String: escaped string.
  * @public
+ * @deprecated since 1.25, use UtfNormal\Utils directly
  */
 function escapeSingleString( $string ) {
-       return strtr( $string,
-               array(
-                       '\\' => '\\\\',
-                       '\'' => '\\\''
-               ) );
+       return Utils::escapeSingleString( $string );
 }
diff --git a/includes/libs/objectcache/APCBagOStuff.php b/includes/libs/objectcache/APCBagOStuff.php
new file mode 100644 (file)
index 0000000..eaf1155
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Object caching using PHP's APC accelerator.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * This is a wrapper for APC's shared memory functions
+ *
+ * @ingroup Cache
+ */
+class APCBagOStuff extends BagOStuff {
+       public function get( $key, &$casToken = null ) {
+               $val = apc_fetch( $key );
+
+               $casToken = $val;
+
+               if ( is_string( $val ) ) {
+                       if ( $this->isInteger( $val ) ) {
+                               $val = intval( $val );
+                       } else {
+                               $val = unserialize( $val );
+                       }
+               }
+
+               return $val;
+       }
+
+       public function set( $key, $value, $exptime = 0 ) {
+               if ( !$this->isInteger( $value ) ) {
+                       $value = serialize( $value );
+               }
+
+               apc_store( $key, $value, $exptime );
+
+               return true;
+       }
+
+       public function delete( $key ) {
+               apc_delete( $key );
+
+               return true;
+       }
+
+       public function incr( $key, $value = 1 ) {
+               return apc_inc( $key, $value );
+       }
+
+       public function decr( $key, $value = 1 ) {
+               return apc_dec( $key, $value );
+       }
+}
diff --git a/includes/libs/objectcache/BagOStuff.php b/includes/libs/objectcache/BagOStuff.php
new file mode 100644 (file)
index 0000000..0b791e5
--- /dev/null
@@ -0,0 +1,438 @@
+<?php
+/**
+ * Classes to cache objects in PHP accelerators, SQL database or DBA files
+ *
+ * Copyright © 2003-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 Cache
+ */
+
+/**
+ * @defgroup Cache Cache
+ */
+
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
+
+/**
+ * interface is intended to be more or less compatible with
+ * the PHP memcached client.
+ *
+ * backends for local hash array and SQL table included:
+ * <code>
+ *   $bag = new HashBagOStuff();
+ *   $bag = new SqlBagOStuff(); # connect to db first
+ * </code>
+ *
+ * @ingroup Cache
+ */
+abstract class BagOStuff implements LoggerAwareInterface {
+       private $debugMode = false;
+
+       protected $lastError = self::ERR_NONE;
+
+       /**
+        * @var LoggerInterface
+        */
+       protected $logger;
+
+       /** Possible values for getLastError() */
+       const ERR_NONE = 0; // no error
+       const ERR_NO_RESPONSE = 1; // no response
+       const ERR_UNREACHABLE = 2; // can't connect
+       const ERR_UNEXPECTED = 3; // response gave some error
+
+       public function __construct( array $params = array() ) {
+               if ( isset( $params['logger'] ) ) {
+                       $this->setLogger( $params['logger'] );
+               } else {
+                       $this->setLogger( new NullLogger() );
+               }
+       }
+
+       /**
+        * @param LoggerInterface $logger
+        * @return null
+        */
+       public function setLogger( LoggerInterface $logger ) {
+               $this->logger = $logger;
+       }
+
+       /**
+        * @param bool $bool
+        */
+       public function setDebug( $bool ) {
+               $this->debugMode = $bool;
+       }
+
+       /**
+        * Get an item with the given key. Returns false if it does not exist.
+        * @param string $key
+        * @param mixed $casToken [optional]
+        * @return mixed Returns false on failure
+        */
+       abstract public function get( $key, &$casToken = null );
+
+       /**
+        * Set an item.
+        * @param string $key
+        * @param mixed $value
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @return bool Success
+        */
+       abstract public function set( $key, $value, $exptime = 0 );
+
+       /**
+        * Delete an item.
+        * @param string $key
+        * @return bool True if the item was deleted or not found, false on failure
+        */
+       abstract public function delete( $key );
+
+       /**
+        * Merge changes into the existing cache value (possibly creating a new one).
+        * The callback function returns the new value given the current value (possibly false),
+        * and takes the arguments: (this BagOStuff object, cache key, current value).
+        *
+        * @param string $key
+        * @param callable $callback Callback method to be executed
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @param int $attempts The amount of times to attempt a merge in case of failure
+        * @return bool Success
+        */
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new Exception( "Got invalid callback." );
+               }
+
+               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
+       }
+
+       /**
+        * @see BagOStuff::merge()
+        *
+        * @param string $key
+        * @param callable $callback Callback method to be executed
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @param int $attempts The amount of times to attempt a merge in case of failure
+        * @return bool Success
+        */
+       protected function mergeViaCas( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               do {
+                       $casToken = null; // passed by reference
+                       $currentValue = $this->get( $key, $casToken );
+                       // Derive the new value from the old value
+                       $value = call_user_func( $callback, $this, $key, $currentValue );
+
+                       if ( $value === false ) {
+                               $success = true; // do nothing
+                       } elseif ( $currentValue === false ) {
+                               // Try to create the key, failing if it gets created in the meantime
+                               $success = $this->add( $key, $value, $exptime );
+                       } else {
+                               // Try to update the key, failing if it gets changed in the meantime
+                               $success = $this->cas( $casToken, $key, $value, $exptime );
+                       }
+               } while ( !$success && --$attempts );
+
+               return $success;
+       }
+
+       /**
+        * Check and set an item
+        *
+        * @param mixed $casToken
+        * @param string $key
+        * @param mixed $value
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @return bool Success
+        */
+       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
+               throw new Exception( "CAS is not implemented in " . __CLASS__ );
+       }
+
+       /**
+        * @see BagOStuff::merge()
+        *
+        * @param string $key
+        * @param callable $callback Callback method to be executed
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @param int $attempts The amount of times to attempt a merge in case of failure
+        * @return bool Success
+        */
+       protected function mergeViaLock( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !$this->lock( $key, 6 ) ) {
+                       return false;
+               }
+
+               $currentValue = $this->get( $key );
+               // Derive the new value from the old value
+               $value = call_user_func( $callback, $this, $key, $currentValue );
+
+               if ( $value === false ) {
+                       $success = true; // do nothing
+               } else {
+                       $success = $this->set( $key, $value, $exptime ); // set the new value
+               }
+
+               if ( !$this->unlock( $key ) ) {
+                       // this should never happen
+                       trigger_error( "Could not release lock for key '$key'." );
+               }
+
+               return $success;
+       }
+
+       /**
+        * @param string $key
+        * @param int $timeout Lock wait timeout [optional]
+        * @param int $expiry Lock expiry [optional]
+        * @return bool Success
+        */
+       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+               $this->clearLastError();
+               $timestamp = microtime( true ); // starting UNIX timestamp
+               if ( $this->add( "{$key}:lock", 1, $expiry ) ) {
+                       return true;
+               } elseif ( $this->getLastError() ) {
+                       return false;
+               }
+
+               $uRTT = ceil( 1e6 * ( microtime( true ) - $timestamp ) ); // estimate RTT (us)
+               $sleep = 2 * $uRTT; // rough time to do get()+set()
+
+               $locked = false; // lock acquired
+               $attempts = 0; // failed attempts
+               do {
+                       if ( ++$attempts >= 3 && $sleep <= 5e5 ) {
+                               // Exponentially back off after failed attempts to avoid network spam.
+                               // About 2*$uRTT*(2^n-1) us of "sleep" happen for the next n attempts.
+                               $sleep *= 2;
+                       }
+                       usleep( $sleep ); // back off
+                       $this->clearLastError();
+                       $locked = $this->add( "{$key}:lock", 1, $expiry );
+                       if ( $this->getLastError() ) {
+                               return false;
+                       }
+               } while ( !$locked && ( microtime( true ) - $timestamp ) < $timeout );
+
+               return $locked;
+       }
+
+       /**
+        * @param string $key
+        * @return bool Success
+        */
+       public function unlock( $key ) {
+               return $this->delete( "{$key}:lock" );
+       }
+
+       /**
+        * Delete all objects expiring before a certain date.
+        * @param string $date The reference date in MW format
+        * @param callable|bool $progressCallback Optional, a function which will be called
+        *     regularly during long-running operations with the percentage progress
+        *     as the first parameter.
+        *
+        * @return bool Success, false if unimplemented
+        */
+       public function deleteObjectsExpiringBefore( $date, $progressCallback = false ) {
+               // stub
+               return false;
+       }
+
+       /* *** Emulated functions *** */
+
+       /**
+        * Get an associative array containing the item for each of the keys that have items.
+        * @param array $keys List of strings
+        * @return array
+        */
+       public function getMulti( array $keys ) {
+               $res = array();
+               foreach ( $keys as $key ) {
+                       $val = $this->get( $key );
+                       if ( $val !== false ) {
+                               $res[$key] = $val;
+                       }
+               }
+               return $res;
+       }
+
+       /**
+        * Batch insertion
+        * @param array $data $key => $value assoc array
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @return bool Success
+        * @since 1.24
+        */
+       public function setMulti( array $data, $exptime = 0 ) {
+               $res = true;
+               foreach ( $data as $key => $value ) {
+                       if ( !$this->set( $key, $value, $exptime ) ) {
+                               $res = false;
+                       }
+               }
+               return $res;
+       }
+
+       /**
+        * @param string $key
+        * @param mixed $value
+        * @param int $exptime
+        * @return bool Success
+        */
+       public function add( $key, $value, $exptime = 0 ) {
+               if ( $this->get( $key ) === false ) {
+                       return $this->set( $key, $value, $exptime );
+               }
+               return false; // key already set
+       }
+
+       /**
+        * Increase stored value of $key by $value while preserving its TTL
+        * @param string $key Key to increase
+        * @param int $value Value to add to $key (Default 1)
+        * @return int|bool New value or false on failure
+        */
+       public function incr( $key, $value = 1 ) {
+               if ( !$this->lock( $key ) ) {
+                       return false;
+               }
+               $n = $this->get( $key );
+               if ( $this->isInteger( $n ) ) { // key exists?
+                       $n += intval( $value );
+                       $this->set( $key, max( 0, $n ) ); // exptime?
+               } else {
+                       $n = false;
+               }
+               $this->unlock( $key );
+
+               return $n;
+       }
+
+       /**
+        * Decrease stored value of $key by $value while preserving its TTL
+        * @param string $key
+        * @param int $value
+        * @return int
+        */
+       public function decr( $key, $value = 1 ) {
+               return $this->incr( $key, - $value );
+       }
+
+       /**
+        * Increase stored value of $key by $value while preserving its TTL
+        *
+        * This will create the key with value $init and TTL $ttl if not present
+        *
+        * @param string $key
+        * @param int $ttl
+        * @param int $value
+        * @param int $init
+        * @return bool
+        * @since 1.24
+        */
+       public function incrWithInit( $key, $ttl, $value = 1, $init = 1 ) {
+               return $this->incr( $key, $value ) ||
+                       $this->add( $key, (int)$init, $ttl ) || $this->incr( $key, $value );
+       }
+
+       /**
+        * Get the "last error" registered; clearLastError() should be called manually
+        * @return int ERR_* constant for the "last error" registry
+        * @since 1.23
+        */
+       public function getLastError() {
+               return $this->lastError;
+       }
+
+       /**
+        * Clear the "last error" registry
+        * @since 1.23
+        */
+       public function clearLastError() {
+               $this->lastError = self::ERR_NONE;
+       }
+
+       /**
+        * Set the "last error" registry
+        * @param int $err ERR_* constant
+        * @since 1.23
+        */
+       protected function setLastError( $err ) {
+               $this->lastError = $err;
+       }
+
+       /**
+        * @param string $text
+        */
+       protected function debug( $text ) {
+               if ( $this->debugMode ) {
+                       $this->logger->debug( "{class} debug: $text", array(
+                               'class' => get_class( $this ),
+                       ) );
+               }
+       }
+
+       /**
+        * Convert an optionally relative time to an absolute time
+        * @param int $exptime
+        * @return int
+        */
+       protected function convertExpiry( $exptime ) {
+               if ( ( $exptime != 0 ) && ( $exptime < 86400 * 3650 /* 10 years */ ) ) {
+                       return time() + $exptime;
+               } else {
+                       return $exptime;
+               }
+       }
+
+       /**
+        * Convert an optionally absolute expiry time to a relative time. If an
+        * absolute time is specified which is in the past, use a short expiry time.
+        *
+        * @param int $exptime
+        * @return int
+        */
+       protected function convertToRelative( $exptime ) {
+               if ( $exptime >= 86400 * 3650 /* 10 years */ ) {
+                       $exptime -= time();
+                       if ( $exptime <= 0 ) {
+                               $exptime = 1;
+                       }
+                       return $exptime;
+               } else {
+                       return $exptime;
+               }
+       }
+
+       /**
+        * Check if a value is an integer
+        *
+        * @param mixed $value
+        * @return bool
+        */
+       protected function isInteger( $value ) {
+               return ( is_int( $value ) || ctype_digit( $value ) );
+       }
+}
diff --git a/includes/libs/objectcache/EmptyBagOStuff.php b/includes/libs/objectcache/EmptyBagOStuff.php
new file mode 100644 (file)
index 0000000..4ccf270
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Dummy object caching.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * A BagOStuff object with no objects in it. Used to provide a no-op object to calling code.
+ *
+ * @ingroup Cache
+ */
+class EmptyBagOStuff extends BagOStuff {
+       public function get( $key, &$casToken = null ) {
+               return false;
+       }
+
+       public function set( $key, $value, $exp = 0 ) {
+               return true;
+       }
+
+       public function delete( $key ) {
+               return true;
+       }
+
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               return true; // faster
+       }
+}
diff --git a/includes/libs/objectcache/HashBagOStuff.php b/includes/libs/objectcache/HashBagOStuff.php
new file mode 100644 (file)
index 0000000..2c8b05a
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Object caching using PHP arrays.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * This is a test of the interface, mainly. It stores things in an associative
+ * array, which is not going to persist between program runs.
+ *
+ * @ingroup Cache
+ */
+class HashBagOStuff extends BagOStuff {
+       /** @var array */
+       protected $bag;
+
+       function __construct( $params = array() ) {
+               parent::__construct( $params );
+               $this->bag = array();
+       }
+
+       protected function expire( $key ) {
+               $et = $this->bag[$key][1];
+
+               if ( ( $et == 0 ) || ( $et > time() ) ) {
+                       return false;
+               }
+
+               $this->delete( $key );
+
+               return true;
+       }
+
+       public function get( $key, &$casToken = null ) {
+               if ( !isset( $this->bag[$key] ) ) {
+                       return false;
+               }
+
+               if ( $this->expire( $key ) ) {
+                       return false;
+               }
+
+               $casToken = $this->bag[$key][0];
+
+               return $this->bag[$key][0];
+       }
+
+       public function set( $key, $value, $exptime = 0 ) {
+               $this->bag[$key] = array( $value, $this->convertExpiry( $exptime ) );
+               return true;
+       }
+
+       function delete( $key ) {
+               if ( !isset( $this->bag[$key] ) ) {
+                       return false;
+               }
+
+               unset( $this->bag[$key] );
+
+               return true;
+       }
+
+       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+               return true;
+       }
+
+       function unlock( $key ) {
+               return true;
+       }
+}
diff --git a/includes/libs/objectcache/WinCacheBagOStuff.php b/includes/libs/objectcache/WinCacheBagOStuff.php
new file mode 100644 (file)
index 0000000..5362574
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+/**
+ * Object caching using WinCache.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * Wrapper for WinCache object caching functions; identical interface
+ * to the APC wrapper
+ *
+ * @ingroup Cache
+ */
+class WinCacheBagOStuff extends BagOStuff {
+
+       /**
+        * Get a value from the WinCache object cache
+        *
+        * @param string $key Cache key
+        * @param int $casToken [optional] Cas token
+        * @return mixed
+        */
+       public function get( $key, &$casToken = null ) {
+               $val = wincache_ucache_get( $key );
+
+               $casToken = $val;
+
+               if ( is_string( $val ) ) {
+                       $val = unserialize( $val );
+               }
+
+               return $val;
+       }
+
+       /**
+        * Store a value in the WinCache object cache
+        *
+        * @param string $key Cache key
+        * @param mixed $value Value to store
+        * @param int $expire Expiration time
+        * @return bool
+        */
+       public function set( $key, $value, $expire = 0 ) {
+               $result = wincache_ucache_set( $key, serialize( $value ), $expire );
+
+               /* wincache_ucache_set returns an empty array on success if $value
+                  was an array, bool otherwise */
+               return ( is_array( $result ) && $result === array() ) || $result;
+       }
+
+       /**
+        * Store a value in the WinCache object cache, race condition-safe
+        *
+        * @param int $casToken Cas token
+        * @param string $key Cache key
+        * @param int $value Object to store
+        * @param int $exptime Expiration time
+        * @return bool
+        */
+       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
+               return wincache_ucache_cas( $key, $casToken, serialize( $value ) );
+       }
+
+       /**
+        * Remove a value from the WinCache object cache
+        *
+        * @param string $key Cache key
+        * @return bool
+        */
+       public function delete( $key ) {
+               wincache_ucache_delete( $key );
+
+               return true;
+       }
+
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new Exception( "Got invalid callback." );
+               }
+
+               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+       }
+}
diff --git a/includes/libs/objectcache/XCacheBagOStuff.php b/includes/libs/objectcache/XCacheBagOStuff.php
new file mode 100644 (file)
index 0000000..cfee923
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Object caching using XCache.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * Wrapper for XCache object caching functions; identical interface
+ * to the APC wrapper
+ *
+ * @ingroup Cache
+ */
+class XCacheBagOStuff extends BagOStuff {
+       /**
+        * Get a value from the XCache object cache
+        *
+        * @param string $key Cache key
+        * @param mixed $casToken Cas token
+        * @return mixed
+        */
+       public function get( $key, &$casToken = null ) {
+               $val = xcache_get( $key );
+
+               if ( is_string( $val ) ) {
+                       if ( $this->isInteger( $val ) ) {
+                               $val = intval( $val );
+                       } else {
+                               $val = unserialize( $val );
+                       }
+               } elseif ( is_null( $val ) ) {
+                       return false;
+               }
+
+               return $val;
+       }
+
+       /**
+        * Store a value in the XCache object cache
+        *
+        * @param string $key Cache key
+        * @param mixed $value Object to store
+        * @param int $expire Expiration time
+        * @return bool
+        */
+       public function set( $key, $value, $expire = 0 ) {
+               if ( !$this->isInteger( $value ) ) {
+                       $value = serialize( $value );
+               }
+
+               xcache_set( $key, $value, $expire );
+               return true;
+       }
+
+       /**
+        * Remove a value from the XCache object cache
+        *
+        * @param string $key Cache key
+        * @return bool
+        */
+       public function delete( $key ) {
+               xcache_unset( $key );
+               return true;
+       }
+
+       public function incr( $key, $value = 1 ) {
+               return xcache_inc( $key, $value );
+       }
+
+       public function decr( $key, $value = 1 ) {
+               return xcache_dec( $key, $value );
+       }
+}
index 03bdf0d..32a27f7 100644 (file)
@@ -34,13 +34,18 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
         *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body' => true/false )
         *   * $title is optional
         * @param array $params Key/value map
-        *   - URL            : Parsoid server URL
+        *   - url            : Parsoid server URL
         *   - prefix         : Parsoid prefix for this wiki
         *   - timeout        : Parsoid timeout (optional)
         *   - forwardCookies : Cookies to forward to Parsoid, or false. (optional)
         *   - HTTPProxy      : Parsoid HTTP proxy (optional)
         */
        public function __construct( array $params ) {
+               // for backwards compatibility:
+               if ( isset( $params['URL'] ) ) {
+                       $params['url'] = $params['URL'];
+                       unset( $params['URL'] );
+               }
                parent::__construct( $params );
        }
 
@@ -59,11 +64,11 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
                                throw new Exception( "Only 'local' target wiki is currently supported" );
                        } elseif ( $version !== 'v1' ) {
                                throw new Exception( "Only version 1 exists" );
-                       } else if ( $reqType !== 'page' && $reqType !== 'transform' ) {
+                       } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
                                throw new Exception( "Request type must be either 'page' or 'transform'" );
                        }
 
-                       $req['url'] = $this->params['URL'] . '/' . urlencode( $this->params['prefix'] ) . '/';
+                       $req['url'] = $this->params['url'] . '/' . urlencode( $this->params['prefix'] ) . '/';
 
                        if ( $reqType === 'page' ) {
                                $title = $parts[3];
diff --git a/includes/libs/virtualrest/RestbaseVirtualRESTService.php b/includes/libs/virtualrest/RestbaseVirtualRESTService.php
new file mode 100644 (file)
index 0000000..8fe5b92
--- /dev/null
@@ -0,0 +1,177 @@
+<?php
+/**
+ * Virtual HTTP service client for Restbase
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/**
+ * Virtual REST service for Restbase
+ * @since 1.25
+ */
+class RestbaseVirtualRESTService extends VirtualRESTService {
+       /**
+        * Example requests:
+        *  GET /local/v1/page/{title}/html{/revision}
+        *  POST /local/v1/transform/html/to/wikitext{/title}{/revision}
+        *   * body: array( 'html' => ... )
+        *  POST /local/v1/transform/wikitext/to/html{/title}{/revision}
+        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'bodyOnly' => true/false )
+        *
+        * @param array $params Key/value map
+        *   - url            : Restbase server URL
+        *   - domain         : Wiki domain to use
+        *   - timeout        : request timeout in seconds (optional)
+        *   - forwardCookies : cookies to forward to Restbase/Parsoid (as a Cookie
+        *                       header string) or false (optional)
+        *                       Note: forwardCookies will in the future be a boolean
+        *                       only, signifing request cookies should be forwarded
+        *                       to the service; the current state is due to the way
+        *                       VE handles this particular parameter
+        *   - HTTPProxy      : HTTP proxy to use (optional)
+        *   - parsoidCompat  : whether to parse URL as if they were meant for Parsoid
+        *                       boolean (optional)
+        */
+       public function __construct( array $params ) {
+               // set up defaults and merge them with the given params
+               $mparams = array_merge( array(
+                       'url' => 'http://localhost:7231',
+                       'domain' => 'localhost',
+                       'timeout' => 100,
+                       'forwardCookies' => false,
+                       'HTTPProxy' => null,
+                       'parsoidCompat' => false
+               ), $params );
+               // ensure the correct domain format
+               $mparams['domain'] = preg_replace(
+                               '/^(https?:\/\/)?([^\/:]+?)(\/|:\d+\/?)?$/',
+                               '$2',
+                               $mparams['domain']
+               );
+               parent::__construct( $mparams );
+       }
+
+       public function onRequests( array $reqs, Closure $idGenFunc ) {
+
+               if ( $this->params['parsoidCompat'] ) {
+                       return $this->onParsoidRequests( $reqs, $idGenFunc );
+               }
+
+               $result = array();
+               foreach ( $reqs as $key => $req ) {
+                       // replace /local/ with the current domain
+                       $req['url'] = preg_replace( '/^\/local\//', '/' . $this->params['domain'] . '/', $req['url'] );
+                       // and prefix it with the service URL
+                       $req['url'] = $this->params['url'] . $req['url'];
+                       // set the appropriate proxy, timeout and headers
+                       if ( $this->params['HTTPProxy'] ) {
+                               $req['proxy'] = $this->params['HTTPProxy'];
+                       }
+                       if ( $this->params['timeout'] != null ) {
+                               $req['reqTimeout'] = $this->params['timeout'];
+                       }
+                       if ( $this->params['forwardCookies'] ) {
+                               $req['headers']['Cookie'] = $this->params['forwardCookies'];
+                       }
+                       $result[$key] = $req;
+               }
+
+               return $result;
+
+       }
+
+       /**
+        * Remaps Parsoid requests to Restbase paths
+        */
+       public function onParsoidRequests( array $reqs, Closure $idGeneratorFunc ) {
+
+               $result = array();
+               foreach ( $reqs as $key => $req ) {
+                       $parts = explode( '/', $req['url'] );
+                       list(
+                               $targetWiki, // 'local'
+                               $version, // 'v1'
+                               $reqType // 'page' or 'transform'
+                       ) = $parts;
+                       if ( $targetWiki !== 'local' ) {
+                               throw new Exception( "Only 'local' target wiki is currently supported" );
+                       } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
+                               throw new Exception( "Request type must be either 'page' or 'transform'" );
+                       }
+                       $req['url'] = $this->params['url'] . '/' . $this->params['domain'] . '/v1/' . $reqType . '/';
+                       if ( $reqType === 'page' ) {
+                               $title = $parts[3];
+                               if ( $parts[4] !== 'html' ) {
+                                       throw new Exception( "Only 'html' output format is currently supported" );
+                               }
+                               $req['url'] .= 'html/' . $title;
+                               if ( isset( $parts[5] ) ) {
+                                       $req['url'] .= '/' . $parts[5];
+                               } elseif ( isset( $req['query']['oldid'] ) && $req['query']['oldid'] ) {
+                                       $req['url'] .= '/' . $req['query']['oldid'];
+                                       unset( $req['query']['oldid'] );
+                               }
+                       } elseif ( $reqType === 'transform' ) {
+                               // from / to transform
+                               $req['url'] .= $parts[3] . '/to/' . $parts[5];
+                               // the title
+                               if ( isset( $parts[6] ) ) {
+                                       $req['url'] .= '/' . $parts[6];
+                               }
+                               // revision id
+                               if ( isset( $parts[7] ) ) {
+                                       $req['url'] .= '/' . $parts[7];
+                               } elseif ( isset( $req['body']['oldid'] ) && $req['body']['oldid'] ) {
+                                       $req['url'] .= '/' . $req['body']['oldid'];
+                                       unset( $req['body']['oldid'] );
+                               }
+                               if ( $parts[4] !== 'to' ) {
+                                       throw new Exception( "Part index 4 is not 'to'" );
+                               }
+                               if ( $parts[3] === 'html' & $parts[5] === 'wikitext' ) {
+                                       if ( !isset( $req['body']['html'] ) ) {
+                                               throw new Exception( "You must set an 'html' body key for this request" );
+                                       }
+                               } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
+                                       if ( !isset( $req['body']['wikitext'] ) ) {
+                                               throw new Exception( "You must set a 'wikitext' body key for this request" );
+                                       }
+                                       if ( isset( $req['body']['body'] ) ) {
+                                               $req['body']['bodyOnly'] = $req['body']['body'];
+                                               unset( $req['body']['body'] );
+                                       }
+                               } else {
+                                       throw new Exception( "Transformation unsupported" );
+                               }
+                       }
+                       // set the appropriate proxy, timeout and headers
+                       if ( $this->params['HTTPProxy'] ) {
+                               $req['proxy'] = $this->params['HTTPProxy'];
+                       }
+                       if ( $this->params['timeout'] != null ) {
+                               $req['reqTimeout'] = $this->params['timeout'];
+                       }
+                       if ( $this->params['forwardCookies'] ) {
+                               $req['headers']['Cookie'] = $this->params['forwardCookies'];
+                       }
+                       $result[$key] = $req;
+               }
+
+               return $result;
+
+       }
+
+}
diff --git a/includes/logging/BlockLogFormatter.php b/includes/logging/BlockLogFormatter.php
new file mode 100644 (file)
index 0000000..436fed8
--- /dev/null
@@ -0,0 +1,171 @@
+<?php
+/**
+ * Formatter for block log entries.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.25
+ */
+
+/**
+ * This class formats block log entries.
+ *
+ * @since 1.25
+ */
+class BlockLogFormatter extends LogFormatter {
+       protected function getMessageParameters() {
+               $params = parent::getMessageParameters();
+
+               $title = $this->entry->getTarget();
+               if ( substr( $title->getText(), 0, 1 ) === '#' ) {
+                       // autoblock - no user link possible
+                       $params[2] = $title->getText();
+                       $params[3] = ''; // no user name for gender use
+               } else {
+                       // Create a user link for the blocked
+                       $username = $title->getText();
+                       // @todo Store the user identifier in the parameters
+                       // to make this faster for future log entries
+                       $targetUser = User::newFromName( $username, false );
+                       $params[2] = Message::rawParam( $this->makeUserLink( $targetUser, Linker::TOOL_LINKS_NOBLOCK ) );
+                       $params[3] = $username; // plain user name for gender use
+               }
+
+               $subtype = $this->entry->getSubtype();
+               if ( $subtype === 'block' || $subtype === 'reblock' ) {
+                       if ( !isset( $params[4] ) ) {
+                               // Very old log entry without duration: means infinite
+                               $params[4] = 'infinite';
+                       }
+                       // Localize the duration, and add a tooltip
+                       // in English to help visitors from other wikis.
+                       // The lrm is needed to make sure that the number
+                       // is shown on the correct side of the tooltip text.
+                       $durationTooltip = '&lrm;' . htmlspecialchars( $params[4] );
+                       $params[4] = Message::rawParam( "<span class='blockExpiry' title='$durationTooltip'>" .
+                               $this->context->getLanguage()->translateBlockExpiry( $params[4] ) . '</span>' );
+                       $params[5] = isset( $params[5] ) ?
+                               self::formatBlockFlags( $params[5], $this->context->getLanguage() ) : '';
+               }
+
+               return $params;
+       }
+
+       protected function extractParameters() {
+               $params = parent::extractParameters();
+               // Legacy log params returning the params in index 3 and 4, moved to 4 and 5
+               if ( $this->entry->isLegacy() && isset( $params[3] ) ) {
+                       if ( isset( $params[4] ) ) {
+                               $params[5] = $params[4];
+                       }
+                       $params[4] = $params[3];
+                       $params[3] = '';
+               }
+               return $params;
+       }
+
+       public function getPreloadTitles() {
+               $title = $this->entry->getTarget();
+               // Preload user page for non-autoblocks
+               if ( substr( $title->getText(), 0, 1 ) !== '#' ) {
+                       return array( $title->getTalkPage() );
+               }
+               return array();
+       }
+
+       public function getActionLinks() {
+               $subtype = $this->entry->getSubtype();
+               if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
+                       || !( $subtype === 'block' || $subtype === 'reblock' )
+                       || !$this->context->getUser()->isAllowed( 'block' )
+               ) {
+                       return '';
+               }
+
+               // Show unblock/change block link
+               $title = $this->entry->getTarget();
+               $links = array(
+                       Linker::linkKnown(
+                               SpecialPage::getTitleFor( 'Unblock', $title->getDBkey() ),
+                               $this->msg( 'unblocklink' )->escaped()
+                       ),
+                       Linker::linkKnown(
+                               SpecialPage::getTitleFor( 'Block', $title->getDBkey() ),
+                               $this->msg( 'change-blocklink' )->escaped()
+                       )
+               );
+
+               return $this->msg( 'parentheses' )->rawParams(
+                       $this->context->getLanguage()->pipeList( $links ) )->escaped();
+       }
+
+       /**
+        * Convert a comma-delimited list of block log flags
+        * into a more readable (and translated) form
+        *
+        * @param string $flags Flags to format
+        * @param Language $lang
+        * @return string
+        */
+       public static function formatBlockFlags( $flags, $lang ) {
+               $flags = trim( $flags );
+               if ( $flags === '' ) {
+                       return ''; //nothing to do
+               }
+               $flags = explode( ',', $flags );
+               $flagsCount = count( $flags );
+
+               for ( $i = 0; $i < $flagsCount; $i++ ) {
+                       $flags[$i] = self::formatBlockFlag( $flags[$i], $lang );
+               }
+
+               return wfMessage( 'parentheses' )->inLanguage( $lang )
+                       ->rawParams( $lang->commaList( $flags ) )->escaped();
+       }
+
+       /**
+        * Translate a block log flag if possible
+        *
+        * @param int $flag Flag to translate
+        * @param Language $lang Language object to use
+        * @return string
+        */
+       public static function formatBlockFlag( $flag, $lang ) {
+               static $messages = array();
+
+               if ( !isset( $messages[$flag] ) ) {
+                       $messages[$flag] = htmlspecialchars( $flag ); // Fallback
+
+                       // For grepping. The following core messages can be used here:
+                       // * block-log-flags-angry-autoblock
+                       // * block-log-flags-anononly
+                       // * block-log-flags-hiddenname
+                       // * block-log-flags-noautoblock
+                       // * block-log-flags-nocreate
+                       // * block-log-flags-noemail
+                       // * block-log-flags-nousertalk
+                       $msg = wfMessage( 'block-log-flags-' . $flag )->inLanguage( $lang );
+
+                       if ( $msg->exists() ) {
+                               $messages[$flag] = $msg->escaped();
+                       }
+               }
+
+               return $messages[$flag];
+       }
+}
index 8b30e9b..4f13d37 100644 (file)
@@ -79,8 +79,10 @@ class DeleteLogFormatter extends LogFormatter {
 
                                $newParams = array_slice( $params, 0, 3 );
                                $newParams[3] = $changeText;
-                               $count = count( explode( ',', $params[$paramStart] ) );
-                               $newParams[4] = $this->context->getLanguage()->formatNum( $count );
+                               $ids = is_array( $params[$paramStart] )
+                                       ? $params[$paramStart]
+                                       : explode( ',', $params[$paramStart] );
+                               $newParams[4] = $this->context->getLanguage()->formatNum( count( $ids ) );
 
                                $this->parsedParametersDeleteLog = $newParams;
                                return $this->parsedParametersDeleteLog;
@@ -137,8 +139,10 @@ class DeleteLogFormatter extends LogFormatter {
 
                                // Different revision types use different URL params...
                                $key = $params[3];
-                               // This is a CSV of the IDs
-                               $ids = explode( ',', $params[4] );
+                               // This is a array or CSV of the IDs
+                               $ids = is_array( $params[4] )
+                                       ? $params[4]
+                                       : explode( ',', $params[4] );
 
                                $links = array();
 
index 85a3052..b391be3 100644 (file)
@@ -115,6 +115,28 @@ abstract class LogEntryBase implements LogEntry {
        public function isLegacy() {
                return false;
        }
+
+       /**
+        * Create a blob from a parameter array
+        *
+        * @param array $params
+        * @return string
+        * @since 1.26
+        */
+       public static function makeParamBlob( $params ) {
+               return serialize( (array)$params );
+       }
+
+       /**
+        * Extract a parameter array from a blob
+        *
+        * @param string $blob
+        * @return array
+        * @since 1.26
+        */
+       public static function extractParams( $blob ) {
+               return unserialize( $blob );
+       }
 }
 
 /**
@@ -225,13 +247,13 @@ class DatabaseLogEntry extends LogEntryBase {
                if ( !isset( $this->params ) ) {
                        $blob = $this->getRawParameters();
                        wfSuppressWarnings();
-                       $params = unserialize( $blob );
+                       $params = LogEntryBase::extractParams( $blob );
                        wfRestoreWarnings();
                        if ( $params !== false ) {
                                $this->params = $params;
                                $this->legacy = false;
                        } else {
-                               $this->params = $blob === '' ? array() : explode( "\n", $blob );
+                               $this->params = LogPage::extractParams( $blob );
                                $this->legacy = true;
                        }
                }
@@ -370,6 +392,9 @@ class ManualLogEntry extends LogEntryBase {
        /** @var int ID of the log entry */
        protected $id;
 
+       /** @var bool Whether this is a legacy log entry */
+       protected $legacy = false;
+
        /**
         * Constructor.
         *
@@ -459,6 +484,16 @@ class ManualLogEntry extends LogEntryBase {
                $this->comment = $comment;
        }
 
+       /**
+        * Set the 'legacy' flag
+        *
+        * @since 1.25
+        * @param bool $legacy
+        */
+       public function setLegacy( $legacy ) {
+               $this->legacy = $legacy;
+       }
+
        /**
         * TODO: document
         *
@@ -503,7 +538,7 @@ class ManualLogEntry extends LogEntryBase {
                        'log_title' => $this->getTarget()->getDBkey(),
                        'log_page' => $this->getTarget()->getArticleID(),
                        'log_comment' => $comment,
-                       'log_params' => serialize( (array)$this->getParameters() ),
+                       'log_params' => LogEntryBase::makeParamBlob( $this->getParameters() ),
                );
                if ( isset( $this->deleted ) ) {
                        $data['log_deleted'] = $this->deleted;
@@ -534,10 +569,6 @@ class ManualLogEntry extends LogEntryBase {
                        $dbw->insert( 'log_search', $rows, __METHOD__, 'IGNORE' );
                }
 
-               // Update any bloom filter cache
-               $member = $this->getTarget()->getNamespace() . ':' . $this->getTarget()->getDBkey();
-               BloomCache::get( 'main' )->insert( wfWikiId(), 'TitleHasLogs', $member );
-
                return $this->id;
        }
 
@@ -575,7 +606,7 @@ class ManualLogEntry extends LogEntryBase {
                        $this->getSubtype(),
                        $this->getTarget(),
                        $this->getComment(),
-                       serialize( (array)$this->getParameters() ),
+                       LogEntryBase::makeParamBlob( $this->getParameters() ),
                        $newId,
                        $formatter->getIRCActionComment() // Used for IRC feeds
                );
@@ -641,6 +672,14 @@ class ManualLogEntry extends LogEntryBase {
                return $this->comment;
        }
 
+       /**
+        * @since 1.25
+        * @return bool
+        */
+       public function isLegacy() {
+               return $this->legacy;
+       }
+
        public function getDeleted() {
                return (int)$this->deleted;
        }
index f7eaec3..8b28821 100644 (file)
@@ -541,29 +541,9 @@ class LogEventsList extends ContextSource {
                if ( $lim > 0 ) {
                        $pager->mLimit = $lim;
                }
-
-               $knownEmptyResult = false;
-               // Check if we can avoid the DB query all together
-               if ( $page !== '' && !$param['useMaster'] ) {
-                       $title = ( $page instanceof Title ) ? $page : Title::newFromText( $page );
-                       if ( $title ) {
-                               $member = $title->getNamespace() . ':' . $title->getDBkey();
-                               if ( !BloomCache::get( 'main' )->check( wfWikiId(), 'TitleHasLogs', $member ) ) {
-                                       $knownEmptyResult = true;
-                               }
-                       } else {
-                               $knownEmptyResult = true;
-                       }
-               }
-
                // Fetch the log rows and build the HTML if needed
-               if ( $knownEmptyResult ) {
-                       $logBody = '';
-                       $numRows = 0;
-               } else {
-                       $logBody = $pager->getBody();
-                       $numRows = $pager->getNumRows();
-               }
+               $logBody = $pager->getBody();
+               $numRows = $pager->getNumRows();
 
                $s = '';
 
index 4487fec..cf9fb53 100644 (file)
 
 /**
  * Implements the default log formatting.
- * Can be overridden by subclassing and setting
- * $wgLogActionsHandlers['type/subtype'] = 'class'; or
- * $wgLogActionsHandlers['type/*'] = 'class';
+ *
+ * Can be overridden by subclassing and setting:
+ *
+ *     $wgLogActionsHandlers['type/subtype'] = 'class'; or
+ *     $wgLogActionsHandlers['type/*'] = 'class';
+ *
  * @since 1.19
  */
 class LogFormatter {
@@ -331,6 +334,51 @@ class LogFormatter {
                                        ->rawParams( $target, $parameters['4::dest'], $parameters['5::mergepoint'] )
                                        ->inContentLanguage()->escaped();
                                break;
+
+                       case 'block':
+                               switch ( $entry->getSubtype() ) {
+                                       case 'block':
+                                               global $wgContLang;
+                                               // Keep compatibility with extensions by checking for
+                                               // new key (5::duration/6::flags) or old key (0/optional 1)
+                                               if ( $entry->isLegacy() ) {
+                                                       $rawDuration = $parameters[0];
+                                                       $rawFlags = isset( $parameters[1] ) ? $parameters[1] : '';
+                                               } else {
+                                                       $rawDuration = $parameters['5::duration'];
+                                                       $rawFlags = $parameters['6::flags'];
+                                               }
+                                               $duration = $wgContLang->translateBlockExpiry( $rawDuration );
+                                               $flags = BlockLogFormatter::formatBlockFlags( $rawFlags, $wgContLang );
+                                               $text = wfMessage( 'blocklogentry' )
+                                                       ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
+                                               break;
+                                       case 'unblock':
+                                               $text = wfMessage( 'unblocklogentry' )
+                                                       ->rawParams( $target )->inContentLanguage()->escaped();
+                                               break;
+                                       case 'reblock':
+                                               global $wgContLang;
+                                               $duration = $wgContLang->translateBlockExpiry( $parameters['5::duration'] );
+                                               $flags = BlockLogFormatter::formatBlockFlags( $parameters['6::flags'], $wgContLang );
+                                               $text = wfMessage( 'reblock-logentry' )
+                                                       ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
+                                               break;
+                               }
+                               break;
+
+                       case 'import':
+                               switch ( $entry->getSubtype() ) {
+                                       case 'upload':
+                                               $text = wfMessage( 'import-logentry-upload' )
+                                                       ->rawParams( $target )->inContentLanguage()->escaped();
+                                               break;
+                                       case 'interwiki':
+                                               $text = wfMessage( 'import-logentry-interwiki' )
+                                                       ->rawParams( $target )->inContentLanguage()->escaped();
+                                               break;
+                               }
+                               break;
                        // case 'suppress' --private log -- aaron  (so we know who to blame in a few years :-D)
                        // default:
                }
@@ -433,7 +481,8 @@ class LogFormatter {
                 */
                if ( count( $params ) ) {
                        $max = max( array_keys( $params ) );
-                       for ( $i = 4; $i < $max; $i++ ) {
+                       // index 0 to 2 are added in getMessageParameters
+                       for ( $i = 3; $i < $max; $i++ ) {
                                if ( !isset( $params[$i] ) ) {
                                        $params[$i] = '';
                                }
@@ -640,7 +689,7 @@ class LogFormatter {
                return $this->context->msg( $key );
        }
 
-       protected function makeUserLink( User $user ) {
+       protected function makeUserLink( User $user, $toolFlags = 0 ) {
                if ( $this->plaintext ) {
                        $element = $user->getName();
                } else {
@@ -650,9 +699,11 @@ class LogFormatter {
                        );
 
                        if ( $this->linkFlood ) {
-                               $element .= Linker::userToolLinksRedContribs(
+                               $element .= Linker::userToolLinks(
                                        $user->getId(),
                                        $user->getName(),
+                                       true, // redContribsWhenNoEdits
+                                       $toolFlags,
                                        $user->getEditCount()
                                );
                        }
@@ -758,29 +809,7 @@ class LegacyLogFormatter extends LogFormatter {
                $type = $this->entry->getType();
                $subtype = $this->entry->getSubtype();
 
-               // Show unblock/change block link
-               if ( ( $type == 'block' || $type == 'suppress' )
-                       && ( $subtype == 'block' || $subtype == 'reblock' )
-               ) {
-                       if ( !$this->context->getUser()->isAllowed( 'block' ) ) {
-                               return '';
-                       }
-
-                       $links = array(
-                               Linker::linkKnown(
-                                       SpecialPage::getTitleFor( 'Unblock', $title->getDBkey() ),
-                                       $this->msg( 'unblocklink' )->escaped()
-                               ),
-                               Linker::linkKnown(
-                                       SpecialPage::getTitleFor( 'Block', $title->getDBkey() ),
-                                       $this->msg( 'change-blocklink' )->escaped()
-                               )
-                       );
-
-                       return $this->msg( 'parentheses' )->rawParams(
-                               $this->context->getLanguage()->pipeList( $links ) )->escaped();
-               // Show change protection link
-               } elseif ( $type == 'protect'
+               if ( $type == 'protect'
                        && ( $subtype == 'protect' || $subtype == 'modify' || $subtype == 'unprotect' )
                ) {
                        $links = array(
index d576d74..82e5808 100644 (file)
@@ -288,24 +288,8 @@ class LogPage {
                                        $details = '';
                                        array_unshift( $params, $titleLink );
 
-                                       // User suppression
-                                       if ( preg_match( '/^(block|suppress)\/(block|reblock)$/', $key ) ) {
-                                               if ( $skin ) {
-                                                       // Localize the duration, and add a tooltip
-                                                       // in English to help visitors from other wikis.
-                                                       // The lrm is needed to make sure that the number
-                                                       // is shown on the correct side of the tooltip text.
-                                                       $durationTooltip = '&lrm;' . htmlspecialchars( $params[1] );
-                                                       $params[1] = "<span class='blockExpiry' title='$durationTooltip'>" .
-                                                               $wgLang->translateBlockExpiry( $params[1] ) . '</span>';
-                                               } else {
-                                                       $params[1] = $wgContLang->translateBlockExpiry( $params[1] );
-                                               }
-
-                                               $params[2] = isset( $params[2] ) ?
-                                                       self::formatBlockFlags( $params[2], $langObj ) : '';
                                        // Page protections
-                                       } elseif ( $type == 'protect' && count( $params ) == 3 ) {
+                                       if ( $type == 'protect' && count( $params ) == 3 ) {
                                                // Restrictions and expiries
                                                if ( $skin ) {
                                                        $details .= $wgLang->getDirMark() . htmlspecialchars( " {$params[1]}" );
@@ -370,36 +354,22 @@ class LogPage {
                        return $title->getPrefixedText();
                }
 
-               switch ( $type ) {
-                       case 'block':
-                               if ( substr( $title->getText(), 0, 1 ) == '#' ) {
-                                       $titleLink = $title->getText();
-                               } else {
-                                       // @todo Store the user identifier in the parameters
-                                       // to make this faster for future log entries
-                                       $id = User::idFromName( $title->getText() );
-                                       $titleLink = Linker::userLink( $id, $title->getText() )
-                                               . Linker::userToolLinks( $id, $title->getText(), false, Linker::TOOL_LINKS_NOBLOCK );
-                               }
-                               break;
-                       default:
-                               if ( $title->isSpecialPage() ) {
-                                       list( $name, $par ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
-
-                                       # Use the language name for log titles, rather than Log/X
-                                       if ( $name == 'Log' ) {
-                                               $logPage = new LogPage( $par );
-                                               $titleLink = Linker::link( $title, $logPage->getName()->escaped() );
-                                               $titleLink = wfMessage( 'parentheses' )
-                                                       ->inLanguage( $lang )
-                                                       ->rawParams( $titleLink )
-                                                       ->escaped();
-                                       } else {
-                                               $titleLink = Linker::link( $title );
-                                       }
-                               } else {
-                                       $titleLink = Linker::link( $title );
-                               }
+               if ( $title->isSpecialPage() ) {
+                       list( $name, $par ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
+
+                       # Use the language name for log titles, rather than Log/X
+                       if ( $name == 'Log' ) {
+                               $logPage = new LogPage( $par );
+                               $titleLink = Linker::link( $title, $logPage->getName()->escaped() );
+                               $titleLink = wfMessage( 'parentheses' )
+                                       ->inLanguage( $lang )
+                                       ->rawParams( $titleLink )
+                                       ->escaped();
+                       } else {
+                               $titleLink = Linker::link( $title );
+                       }
+               } else {
+                       $titleLink = Linker::link( $title );
                }
 
                return $titleLink;
@@ -452,6 +422,10 @@ class LogPage {
                $logEntry->setTarget( $target );
                $logEntry->setPerformer( $doer );
                $logEntry->setParameters( $params );
+               // All log entries using the LogPage to insert into the logging table
+               // are using the old logging system and therefore the legacy flag is
+               // needed to say the LogFormatter the parameters have numeric keys
+               $logEntry->setLegacy( true );
 
                $formatter = LogFormatter::newFromEntry( $logEntry );
                $context = RequestContext::newExtraneousContext( $target );
@@ -516,61 +490,6 @@ class LogPage {
                }
        }
 
-       /**
-        * Convert a comma-delimited list of block log flags
-        * into a more readable (and translated) form
-        *
-        * @param string $flags Flags to format
-        * @param Language $lang
-        * @return string
-        */
-       public static function formatBlockFlags( $flags, $lang ) {
-               $flags = trim( $flags );
-               if ( $flags === '' ) {
-                       return ''; //nothing to do
-               }
-               $flags = explode( ',', $flags );
-               $flagsCount = count( $flags );
-
-               for ( $i = 0; $i < $flagsCount; $i++ ) {
-                       $flags[$i] = self::formatBlockFlag( $flags[$i], $lang );
-               }
-
-               return wfMessage( 'parentheses' )->inLanguage( $lang )
-                       ->rawParams( $lang->commaList( $flags ) )->escaped();
-       }
-
-       /**
-        * Translate a block log flag if possible
-        *
-        * @param int $flag Flag to translate
-        * @param Language $lang Language object to use
-        * @return string
-        */
-       public static function formatBlockFlag( $flag, $lang ) {
-               static $messages = array();
-
-               if ( !isset( $messages[$flag] ) ) {
-                       $messages[$flag] = htmlspecialchars( $flag ); // Fallback
-
-                       // For grepping. The following core messages can be used here:
-                       // * block-log-flags-angry-autoblock
-                       // * block-log-flags-anononly
-                       // * block-log-flags-hiddenname
-                       // * block-log-flags-noautoblock
-                       // * block-log-flags-nocreate
-                       // * block-log-flags-noemail
-                       // * block-log-flags-nousertalk
-                       $msg = wfMessage( 'block-log-flags-' . $flag )->inLanguage( $lang );
-
-                       if ( $msg->exists() ) {
-                               $messages[$flag] = $msg->escaped();
-                       }
-               }
-
-               return $messages[$flag];
-       }
-
        /**
         * Name of the log.
         * @return Message
index bb7a1e8..c8d37bb 100644 (file)
@@ -154,7 +154,7 @@ class BitmapMetadataHandler {
         * @throws MWException On invalid file.
         */
        static function Jpeg( $filename ) {
-               $showXMP = function_exists( 'xml_parser_create_ns' );
+               $showXMP = XMPReader::isSupported();
                $meta = new self();
 
                $seg = JpegMetadataExtractor::segmentSplitter( $filename );
@@ -196,7 +196,7 @@ class BitmapMetadataHandler {
         * @return array Array for storage in img_metadata.
         */
        public static function PNG( $filename ) {
-               $showXMP = function_exists( 'xml_parser_create_ns' );
+               $showXMP = XMPReader::isSupported();
 
                $meta = new self();
                $array = PNGMetadataExtractor::getMetadata( $filename );
@@ -236,7 +236,7 @@ class BitmapMetadataHandler {
                        $meta->addMetadata( array( 'GIFFileComment' => $baseArray['comment'] ), 'native' );
                }
 
-               if ( $baseArray['xmp'] !== '' && function_exists( 'xml_parser_create_ns' ) ) {
+               if ( $baseArray['xmp'] !== '' && XMPReader::isSupported() ) {
                        $xmp = new XMPReader();
                        $xmp->parse( $baseArray['xmp'] );
                        $xmpRes = $xmp->getResults();
index 016728d..e8faa70 100644 (file)
@@ -319,7 +319,7 @@ EOR;
 
        function pageTextCallback( $matches ) {
                # Get rid of invalid UTF-8, strip control characters
-               $val = htmlspecialchars( UtfNormal::cleanUp( stripcslashes( $matches[1] ) ) );
+               $val = htmlspecialchars( UtfNormal\Validator::cleanUp( stripcslashes( $matches[1] ) ) );
                $val = str_replace( array( "\n", '�' ), array( '&#10;', '' ), $val );
                return '<PAGE value="' . $val . '" />';
        }
index 018b58c..3386868 100644 (file)
@@ -477,7 +477,7 @@ class Exif {
                        } else {
                                // if valid utf-8, assume that, otherwise assume windows-1252
                                $valCopy = $val;
-                               UtfNormal::quickIsNFCVerify( $valCopy ); //validates $valCopy.
+                               UtfNormal\Validator::quickIsNFCVerify( $valCopy ); //validates $valCopy.
                                if ( $valCopy !== $val ) {
                                        wfSuppressWarnings();
                                        $val = iconv( 'Windows-1252', 'UTF-8//IGNORE', $val );
index b7657cb..f56a947 100644 (file)
@@ -125,15 +125,16 @@ class ExifBitmapHandler extends BitmapHandler {
 
        /**
         * @param File $image
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array|bool
         */
-       function formatMetadata( $image ) {
+       function formatMetadata( $image, $context = false ) {
                $meta = $this->getCommonMetaArray( $image );
                if ( count( $meta ) === 0 ) {
                        return false;
                }
 
-               return $this->formatMetadataHelper( $meta );
+               return $this->formatMetadataHelper( $meta, $context );
        }
 
        public function getCommonMetaArray( File $file ) {
index 5992be1..e3621fb 100644 (file)
@@ -44,15 +44,16 @@ class GIFHandler extends BitmapHandler {
 
        /**
         * @param File $image
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array|bool
         */
-       function formatMetadata( $image ) {
+       function formatMetadata( $image, $context = false ) {
                $meta = $this->getCommonMetaArray( $image );
                if ( count( $meta ) === 0 ) {
                        return false;
                }
 
-               return $this->formatMetadataHelper( $meta );
+               return $this->formatMetadataHelper( $meta, $context );
        }
 
        /**
index 178b0bf..5c37046 100644 (file)
@@ -158,7 +158,7 @@ class GIFMetadataExtractor {
                                        // assume its that, otherwise assume its windows-1252 (iso-8859-1)
                                        $dataCopy = $data;
                                        // quickIsNFCVerify has the side effect of replacing any invalid characters
-                                       UtfNormal::quickIsNFCVerify( $dataCopy );
+                                       UtfNormal\Validator::quickIsNFCVerify( $dataCopy );
 
                                        if ( $dataCopy !== $data ) {
                                                wfSuppressWarnings();
index 478249f..0eb27cc 100644 (file)
@@ -456,7 +456,7 @@ class IPTC {
                        //treat as utf-8 if is valid utf-8. otherwise pretend its windows-1252
                        // most of the time if there is no 1:90 tag, it is either ascii, latin1, or utf-8
                        $oldData = $data;
-                       UtfNormal::quickIsNFCVerify( $data ); //make $data valid utf-8
+                       UtfNormal\Validator::quickIsNFCVerify( $data ); //make $data valid utf-8
                        if ( $data === $oldData ) {
                                return $data; //if validation didn't change $data
                        } else {
index 787f21e..968e424 100644 (file)
@@ -245,11 +245,11 @@ abstract class ImageHandler extends MediaHandler {
                if ( $pages === false || $pages <= 1 ) {
                        $msg = wfMessage( 'file-info-size' )->numParams( $file->getWidth(),
                                $file->getHeight() )->params( $size,
-                                       $file->getMimeType() )->parse();
+                                       '<span class="mime-type">' . $file->getMimeType() . '</span>' )->parse();
                } else {
                        $msg = wfMessage( 'file-info-size-pages' )->numParams( $file->getWidth(),
                                $file->getHeight() )->params( $size,
-                                       $file->getMimeType() )->numParams( $pages )->parse();
+                                       '<span class="mime-type">' . $file->getMimeType() . '</span>' )->numParams( $pages )->parse();
                }
 
                return $msg;
index 8c5b46b..ae4af8d 100644 (file)
@@ -48,7 +48,7 @@ class JpegMetadataExtractor {
         * @throws MWException If given invalid file.
         */
        static function segmentSplitter( $filename ) {
-               $showXMP = function_exists( 'xml_parser_create_ns' );
+               $showXMP = XMPReader::isSupported();
 
                $segmentCount = 0;
 
@@ -98,7 +98,7 @@ class JpegMetadataExtractor {
                                // First see if valid utf-8,
                                // if not try to convert it to windows-1252.
                                $com = $oldCom = trim( self::jpegExtractMarker( $fh ) );
-                               UtfNormal::quickIsNFCVerify( $com );
+                               UtfNormal\Validator::quickIsNFCVerify( $com );
                                // turns $com to valid utf-8.
                                // thus if no change, its utf-8, otherwise its something else.
                                if ( $com !== $oldCom ) {
@@ -108,7 +108,7 @@ class JpegMetadataExtractor {
                                }
                                // Try it again, if its still not a valid string, then probably
                                // binary junk or some really weird encoding, so don't extract.
-                               UtfNormal::quickIsNFCVerify( $com );
+                               UtfNormal\Validator::quickIsNFCVerify( $com );
                                if ( $com === $oldCom ) {
                                        $segments["COM"][] = $oldCom;
                                } else {
index b88a1b1..33aed34 100644 (file)
@@ -507,9 +507,10 @@ abstract class MediaHandler {
         * to some standard. That makes it possible to do things like visual
         * indication of grouped and chained streams in ogg container files.
         * @param File $image
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array|bool
         */
-       function formatMetadata( $image ) {
+       function formatMetadata( $image, $context = false ) {
                return false;
        }
 
@@ -520,15 +521,16 @@ abstract class MediaHandler {
         * This is used by the media handlers that use the FormatMetadata class
         *
         * @param array $metadataArray Metadata array
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array Array for use displaying metadata.
         */
-       function formatMetadataHelper( $metadataArray ) {
+       function formatMetadataHelper( $metadataArray, $context = false ) {
                $result = array(
                        'visible' => array(),
                        'collapsed' => array()
                );
 
-               $formatted = FormatMetadata::getFormattedData( $metadataArray );
+               $formatted = FormatMetadata::getFormattedData( $metadataArray, $context );
                // Sort fields into visible and collapsed
                $visibleFields = $this->visibleMetadataFields();
                foreach ( $formatted as $name => $value ) {
@@ -637,7 +639,7 @@ abstract class MediaHandler {
         */
        static function getGeneralLongDesc( $file ) {
                return wfMessage( 'file-info' )->sizeParams( $file->getSize() )
-                       ->params( $file->getMimeType() )->parse();
+                       ->params( '<span class="mime-type">' . $file->getMimeType() . '</span>' )->parse();
        }
 
        /**
@@ -859,4 +861,26 @@ abstract class MediaHandler {
        public function sanitizeParamsForBucketing( $params ) {
                return $params;
        }
+
+       /**
+        * Gets configuration for the file warning message. Return value of
+        * the following structure:
+        *   array(
+        *     'module' => 'example.filewarning.messages', // Required, module with messages loaded for the client
+        *     'messages' => array( // Required, array of names of messages
+        *       'main' => 'example-filewarning-main', // Required, main warning message
+        *       'header' => 'example-filewarning-header', // Optional, header for warning dialog
+        *       'footer' => 'example-filewarning-footer', // Optional, footer for warning dialog
+        *       'info' => 'example-filewarning-info', // Optional, text for more-information link (see below)
+        *     ),
+        *     'link' => 'http://example.com', // Optional, link for more information
+        *   )
+        *
+        * Returns null if no warning is necessary.
+        * @param File $file
+        * @return array|null
+        */
+       public function getWarningConfig( $file ) {
+               return null;
+       }
 }
index 3cf8488..5f1aca5 100644 (file)
@@ -49,15 +49,16 @@ class PNGHandler extends BitmapHandler {
 
        /**
         * @param File $image
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array|bool
         */
-       function formatMetadata( $image ) {
+       function formatMetadata( $image, $context = false ) {
                $meta = $this->getCommonMetaArray( $image );
                if ( count( $meta ) === 0 ) {
                        return false;
                }
 
-               return $this->formatMetadataHelper( $meta );
+               return $this->formatMetadataHelper( $meta, $context );
        }
 
        /**
index 53abfef..8fdfa47 100644 (file)
@@ -410,9 +410,10 @@ class SvgHandler extends ImageHandler {
 
        /**
         * @param File $file
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array|bool
         */
-       function formatMetadata( $file ) {
+       function formatMetadata( $file, $context = false ) {
                $result = array(
                        'visible' => array(),
                        'collapsed' => array()
@@ -486,7 +487,7 @@ class SvgHandler extends ImageHandler {
        function makeParamString( $params ) {
                $lang = '';
                if ( isset( $params['lang'] ) && $params['lang'] !== 'en' ) {
-                       $params['lang'] = mb_strtolower( $params['lang'] );
+                       $params['lang'] = strtolower( $params['lang'] );
                        $lang = "lang{$params['lang']}-";
                }
                if ( !isset( $params['width'] ) ) {
index 0d341aa..50f04ae 100644 (file)
@@ -80,6 +80,12 @@ class XMPReader {
        /** @var int */
        private $extendedXMPOffset = 0;
 
+       /** @var int Flag determining if the XMP is safe to parse **/
+       private $parsable = 0;
+
+       /** @var string Buffer of XML to parse **/
+       private $xmlParsableBuffer = '';
+
        /**
         * These are various mode constants.
         * they are used to figure out what to do
@@ -108,6 +114,12 @@ class XMPReader {
        const NS_RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
        const NS_XML = 'http://www.w3.org/XML/1998/namespace';
 
+       // States used while determining if XML is safe to parse
+       const PARSABLE_UNKNOWN = 0;
+       const PARSABLE_OK = 1;
+       const PARSABLE_BUFFERING = 2;
+       const PARSABLE_NO = 3;
+
        /**
         * Constructor.
         *
@@ -145,6 +157,9 @@ class XMPReader {
                        array( $this, 'endElement' ) );
 
                xml_set_character_data_handler( $this->xmlParser, array( $this, 'char' ) );
+
+               $this->parsable = self::PARSABLE_UNKNOWN;
+               $this->xmlParsableBuffer = '';
        }
 
        /** Destroy the xml parser
@@ -156,6 +171,13 @@ class XMPReader {
                xml_parser_free( $this->xmlParser );
        }
 
+       /**
+        * Check if this instance supports using this class
+        */
+       public static function isSupported() {
+               return function_exists( 'xml_parser_create_ns' ) && class_exists( 'XMLReader' );
+       }
+
        /** Get the result array. Do some post-processing before returning
         * the array, and transform any metadata that is special-cased.
         *
@@ -305,6 +327,27 @@ class XMPReader {
                                wfRestoreWarnings();
                        }
 
+                       // Ensure the XMP block does not have an xml doctype declaration, which
+                       // could declare entities unsafe to parse with xml_parse (T85848/T71210).
+                       if ( $this->parsable !== self::PARSABLE_OK ) {
+                               if ( $this->parsable === self::PARSABLE_NO ) {
+                                       throw new Exception( 'Unsafe doctype declaration in XML.' );
+                               }
+
+                               $content = $this->xmlParsableBuffer . $content;
+                               if ( !$this->checkParseSafety( $content ) ) {
+                                       if ( !$allOfIt && $this->parsable !== self::PARSABLE_NO ) {
+                                               // parse wasn't Unsuccessful yet, so return true
+                                               // in this case.
+                                               return true;
+                                       }
+                                       $msg = ( $this->parsable === self::PARSABLE_NO ) ?
+                                               'Unsafe doctype declaration in XML.' :
+                                               'No root element found in XML.';
+                                       throw new Exception( $msg );
+                               }
+                       }
+
                        $ok = xml_parse( $this->xmlParser, $content, $allOfIt );
                        if ( !$ok ) {
                                $error = xml_error_string( xml_get_error_code( $this->xmlParser ) );
@@ -437,6 +480,62 @@ class XMPReader {
                }
        }
 
+       /**
+        * Check if a block of XML is safe to pass to xml_parse, i.e. doesn't
+        * contain a doctype declaration which could contain a dos attack if we
+        * parse it and expand internal entities (T85848).
+        *
+        * @param string $content xml string to check for parse safety
+        * @return bool true if the xml is safe to parse, false otherwise
+        */
+       private function checkParseSafety( $content ) {
+               $reader = new XMLReader();
+               $result = null;
+
+               // For XMLReader to parse incomplete/invalid XML, it has to be open()'ed
+               // instead of using XML().
+               $reader->open(
+                       'data://text/plain,' . urlencode( $content ),
+                       null,
+                       LIBXML_NOERROR | LIBXML_NOWARNING | LIBXML_NONET
+               );
+
+               $oldDisable = libxml_disable_entity_loader( true );
+               $reset = new ScopedCallback(
+                       'libxml_disable_entity_loader',
+                       array( $oldDisable )
+               );
+               $reader->setParserProperty( XMLReader::SUBST_ENTITIES, false );
+
+               // Even with LIBXML_NOWARNING set, XMLReader::read gives a warning
+               // when parsing truncated XML, which causes unit tests to fail.
+               wfSuppressWarnings();
+               while ( $reader->read() ) {
+                       if ( $reader->nodeType === XMLReader::ELEMENT ) {
+                               // Reached the first element without hitting a doctype declaration
+                               $this->parsable = self::PARSABLE_OK;
+                               $result = true;
+                               break;
+                       }
+                       if ( $reader->nodeType === XMLReader::DOC_TYPE ) {
+                               $this->parsable = self::PARSABLE_NO;
+                               $result = false;
+                               break;
+                       }
+               }
+               wfRestoreWarnings();
+
+               if ( !is_null( $result ) ) {
+                       return $result;
+               }
+
+               // Reached the end of the parsable xml without finding an element
+               // or doctype. Buffer and try again.
+               $this->parsable = self::PARSABLE_BUFFERING;
+               $this->xmlParsableBuffer = $content;
+               return false;
+       }
+
        /** When we hit a closing element in MODE_IGNORE
         * Check to see if this is the element we started to ignore,
         * in which case we get out of MODE_IGNORE
index 07b2495..243e280 100644 (file)
@@ -72,6 +72,7 @@ text/tab-separated-values     [TEXT]
 application/zip application/x-zip      [ARCHIVE]
 application/x-gzip     [ARCHIVE]
 application/x-bzip     [ARCHIVE]
+application/x-bzip2    [ARCHIVE]
 application/x-tar      [ARCHIVE]
 application/x-stuffit  [ARCHIVE]
 application/x-opc+zip  [ARCHIVE]
index 75017db..210610a 100644 (file)
@@ -21,7 +21,8 @@ application/vnd.wap.wmlc wmlc
 application/vnd.wap.wmlscriptc wmlsc
 application/voicexml+xml vxml
 application/x-bcpio bcpio
-application/x-bzip gz bz2
+application/x-bzip bz
+application/x-bzip2 bz2
 application/x-cdlink vcd
 application/x-chess-pgn pgn
 application/x-cpio cpio
diff --git a/includes/objectcache/APCBagOStuff.php b/includes/objectcache/APCBagOStuff.php
deleted file mode 100644 (file)
index afc0f0a..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-/**
- * Object caching using PHP's APC accelerator.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Cache
- */
-
-/**
- * This is a wrapper for APC's shared memory functions
- *
- * @ingroup Cache
- */
-class APCBagOStuff extends BagOStuff {
-       /**
-        * @param string $key
-        * @param int $casToken [optional]
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
-               $val = apc_fetch( $key );
-
-               $casToken = $val;
-
-               if ( is_string( $val ) ) {
-                       if ( $this->isInteger( $val ) ) {
-                               $val = intval( $val );
-                       } else {
-                               $val = unserialize( $val );
-                       }
-               }
-
-               return $val;
-       }
-
-       /**
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool
-        */
-       public function set( $key, $value, $exptime = 0 ) {
-               if ( !$this->isInteger( $value ) ) {
-                       $value = serialize( $value );
-               }
-
-               apc_store( $key, $value, $exptime );
-
-               return true;
-       }
-
-       /**
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool
-        * @throws MWException
-        */
-       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
-               // APC's CAS functions only work on integers
-               throw new MWException( "CAS is not implemented in " . __CLASS__ );
-       }
-
-       /**
-        * @param string $key
-        * @return bool
-        */
-       public function delete( $key ) {
-               apc_delete( $key );
-
-               return true;
-       }
-
-       /**
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
-       }
-
-       public function incr( $key, $value = 1 ) {
-               return apc_inc( $key, $value );
-       }
-
-       public function decr( $key, $value = 1 ) {
-               return apc_dec( $key, $value );
-       }
-}
diff --git a/includes/objectcache/BagOStuff.php b/includes/objectcache/BagOStuff.php
deleted file mode 100644 (file)
index 2c10742..0000000
+++ /dev/null
@@ -1,435 +0,0 @@
-<?php
-/**
- * Classes to cache objects in PHP accelerators, SQL database or DBA files
- *
- * Copyright © 2003-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 Cache
- */
-
-/**
- * @defgroup Cache Cache
- */
-
-use Psr\Log\LoggerAwareInterface;
-use Psr\Log\LoggerInterface;
-use Psr\Log\NullLogger;
-
-/**
- * interface is intended to be more or less compatible with
- * the PHP memcached client.
- *
- * backends for local hash array and SQL table included:
- * <code>
- *   $bag = new HashBagOStuff();
- *   $bag = new SqlBagOStuff(); # connect to db first
- * </code>
- *
- * @ingroup Cache
- */
-abstract class BagOStuff implements LoggerAwareInterface {
-       private $debugMode = false;
-
-       protected $lastError = self::ERR_NONE;
-
-       /**
-        * @var LoggerInterface
-        */
-       protected $logger;
-
-       /** Possible values for getLastError() */
-       const ERR_NONE = 0; // no error
-       const ERR_NO_RESPONSE = 1; // no response
-       const ERR_UNREACHABLE = 2; // can't connect
-       const ERR_UNEXPECTED = 3; // response gave some error
-
-       public function __construct( array $params = array() ) {
-               if ( isset( $params['logger'] ) ) {
-                       $this->setLogger( $params['logger'] );
-               } else {
-                       $this->setLogger( new NullLogger() );
-               }
-       }
-
-       /**
-        * @param LoggerInterface $logger
-        * @return null
-        */
-       public function setLogger( LoggerInterface $logger ) {
-               $this->logger = $logger;
-       }
-
-       /**
-        * @param bool $bool
-        */
-       public function setDebug( $bool ) {
-               $this->debugMode = $bool;
-       }
-
-       /**
-        * Get an item with the given key. Returns false if it does not exist.
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return mixed Returns false on failure
-        */
-       abstract public function get( $key, &$casToken = null );
-
-       /**
-        * Set an item.
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @return bool Success
-        */
-       abstract public function set( $key, $value, $exptime = 0 );
-
-       /**
-        * Delete an item.
-        * @param string $key
-        * @return bool True if the item was deleted or not found, false on failure
-        */
-       abstract public function delete( $key );
-
-       /**
-        * Merge changes into the existing cache value (possibly creating a new one).
-        * The callback function returns the new value given the current value (possibly false),
-        * and takes the arguments: (this BagOStuff object, cache key, current value).
-        *
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               if ( !is_callable( $callback ) ) {
-                       throw new Exception( "Got invalid callback." );
-               }
-
-               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
-       }
-
-       /**
-        * @see BagOStuff::merge()
-        *
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       protected function mergeViaCas( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               do {
-                       $casToken = null; // passed by reference
-                       $currentValue = $this->get( $key, $casToken );
-                       // Derive the new value from the old value
-                       $value = call_user_func( $callback, $this, $key, $currentValue );
-
-                       if ( $value === false ) {
-                               $success = true; // do nothing
-                       } elseif ( $currentValue === false ) {
-                               // Try to create the key, failing if it gets created in the meantime
-                               $success = $this->add( $key, $value, $exptime );
-                       } else {
-                               // Try to update the key, failing if it gets changed in the meantime
-                               $success = $this->cas( $casToken, $key, $value, $exptime );
-                       }
-               } while ( !$success && --$attempts );
-
-               return $success;
-       }
-
-       /**
-        * Check and set an item.
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @return bool Success
-        */
-       abstract protected function cas( $casToken, $key, $value, $exptime = 0 );
-
-       /**
-        * @see BagOStuff::merge()
-        *
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       protected function mergeViaLock( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               if ( !$this->lock( $key, 6 ) ) {
-                       return false;
-               }
-
-               $currentValue = $this->get( $key );
-               // Derive the new value from the old value
-               $value = call_user_func( $callback, $this, $key, $currentValue );
-
-               if ( $value === false ) {
-                       $success = true; // do nothing
-               } else {
-                       $success = $this->set( $key, $value, $exptime ); // set the new value
-               }
-
-               if ( !$this->unlock( $key ) ) {
-                       // this should never happen
-                       trigger_error( "Could not release lock for key '$key'." );
-               }
-
-               return $success;
-       }
-
-       /**
-        * @param string $key
-        * @param int $timeout Lock wait timeout [optional]
-        * @param int $expiry Lock expiry [optional]
-        * @return bool Success
-        */
-       public function lock( $key, $timeout = 6, $expiry = 6 ) {
-               $this->clearLastError();
-               $timestamp = microtime( true ); // starting UNIX timestamp
-               if ( $this->add( "{$key}:lock", 1, $expiry ) ) {
-                       return true;
-               } elseif ( $this->getLastError() ) {
-                       return false;
-               }
-
-               $uRTT = ceil( 1e6 * ( microtime( true ) - $timestamp ) ); // estimate RTT (us)
-               $sleep = 2 * $uRTT; // rough time to do get()+set()
-
-               $locked = false; // lock acquired
-               $attempts = 0; // failed attempts
-               do {
-                       if ( ++$attempts >= 3 && $sleep <= 5e5 ) {
-                               // Exponentially back off after failed attempts to avoid network spam.
-                               // About 2*$uRTT*(2^n-1) us of "sleep" happen for the next n attempts.
-                               $sleep *= 2;
-                       }
-                       usleep( $sleep ); // back off
-                       $this->clearLastError();
-                       $locked = $this->add( "{$key}:lock", 1, $expiry );
-                       if ( $this->getLastError() ) {
-                               return false;
-                       }
-               } while ( !$locked && ( microtime( true ) - $timestamp ) < $timeout );
-
-               return $locked;
-       }
-
-       /**
-        * @param string $key
-        * @return bool Success
-        */
-       public function unlock( $key ) {
-               return $this->delete( "{$key}:lock" );
-       }
-
-       /**
-        * Delete all objects expiring before a certain date.
-        * @param string $date The reference date in MW format
-        * @param callable|bool $progressCallback Optional, a function which will be called
-        *     regularly during long-running operations with the percentage progress
-        *     as the first parameter.
-        *
-        * @return bool Success, false if unimplemented
-        */
-       public function deleteObjectsExpiringBefore( $date, $progressCallback = false ) {
-               // stub
-               return false;
-       }
-
-       /* *** Emulated functions *** */
-
-       /**
-        * Get an associative array containing the item for each of the keys that have items.
-        * @param array $keys List of strings
-        * @return array
-        */
-       public function getMulti( array $keys ) {
-               $res = array();
-               foreach ( $keys as $key ) {
-                       $val = $this->get( $key );
-                       if ( $val !== false ) {
-                               $res[$key] = $val;
-                       }
-               }
-               return $res;
-       }
-
-       /**
-        * Batch insertion
-        * @param array $data $key => $value assoc array
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @return bool Success
-        * @since 1.24
-        */
-       public function setMulti( array $data, $exptime = 0 ) {
-               $res = true;
-               foreach ( $data as $key => $value ) {
-                       if ( !$this->set( $key, $value, $exptime ) ) {
-                               $res = false;
-                       }
-               }
-               return $res;
-       }
-
-       /**
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool Success
-        */
-       public function add( $key, $value, $exptime = 0 ) {
-               if ( $this->get( $key ) === false ) {
-                       return $this->set( $key, $value, $exptime );
-               }
-               return false; // key already set
-       }
-
-       /**
-        * Increase stored value of $key by $value while preserving its TTL
-        * @param string $key Key to increase
-        * @param int $value Value to add to $key (Default 1)
-        * @return int|bool New value or false on failure
-        */
-       public function incr( $key, $value = 1 ) {
-               if ( !$this->lock( $key ) ) {
-                       return false;
-               }
-               $n = $this->get( $key );
-               if ( $this->isInteger( $n ) ) { // key exists?
-                       $n += intval( $value );
-                       $this->set( $key, max( 0, $n ) ); // exptime?
-               } else {
-                       $n = false;
-               }
-               $this->unlock( $key );
-
-               return $n;
-       }
-
-       /**
-        * Decrease stored value of $key by $value while preserving its TTL
-        * @param string $key
-        * @param int $value
-        * @return int
-        */
-       public function decr( $key, $value = 1 ) {
-               return $this->incr( $key, - $value );
-       }
-
-       /**
-        * Increase stored value of $key by $value while preserving its TTL
-        *
-        * This will create the key with value $init and TTL $ttl if not present
-        *
-        * @param string $key
-        * @param int $ttl
-        * @param int $value
-        * @param int $init
-        * @return bool
-        * @since 1.24
-        */
-       public function incrWithInit( $key, $ttl, $value = 1, $init = 1 ) {
-               return $this->incr( $key, $value ) ||
-                       $this->add( $key, (int)$init, $ttl ) || $this->incr( $key, $value );
-       }
-
-       /**
-        * Get the "last error" registered; clearLastError() should be called manually
-        * @return int ERR_* constant for the "last error" registry
-        * @since 1.23
-        */
-       public function getLastError() {
-               return $this->lastError;
-       }
-
-       /**
-        * Clear the "last error" registry
-        * @since 1.23
-        */
-       public function clearLastError() {
-               $this->lastError = self::ERR_NONE;
-       }
-
-       /**
-        * Set the "last error" registry
-        * @param int $err ERR_* constant
-        * @since 1.23
-        */
-       protected function setLastError( $err ) {
-               $this->lastError = $err;
-       }
-
-       /**
-        * @param string $text
-        */
-       protected function debug( $text ) {
-               if ( $this->debugMode ) {
-                       $this->logger->debug( "{class} debug: $text", array(
-                               'class' => get_class( $this ),
-                       ) );
-               }
-       }
-
-       /**
-        * Convert an optionally relative time to an absolute time
-        * @param int $exptime
-        * @return int
-        */
-       protected function convertExpiry( $exptime ) {
-               if ( ( $exptime != 0 ) && ( $exptime < 86400 * 3650 /* 10 years */ ) ) {
-                       return time() + $exptime;
-               } else {
-                       return $exptime;
-               }
-       }
-
-       /**
-        * Convert an optionally absolute expiry time to a relative time. If an
-        * absolute time is specified which is in the past, use a short expiry time.
-        *
-        * @param int $exptime
-        * @return int
-        */
-       protected function convertToRelative( $exptime ) {
-               if ( $exptime >= 86400 * 3650 /* 10 years */ ) {
-                       $exptime -= time();
-                       if ( $exptime <= 0 ) {
-                               $exptime = 1;
-                       }
-                       return $exptime;
-               } else {
-                       return $exptime;
-               }
-       }
-
-       /**
-        * Check if a value is an integer
-        *
-        * @param mixed $value
-        * @return bool
-        */
-       protected function isInteger( $value ) {
-               return ( is_int( $value ) || ctype_digit( $value ) );
-       }
-}
diff --git a/includes/objectcache/EmptyBagOStuff.php b/includes/objectcache/EmptyBagOStuff.php
deleted file mode 100644 (file)
index 0fc65d9..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-/**
- * Dummy object caching.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Cache
- */
-
-/**
- * A BagOStuff object with no objects in it. Used to provide a no-op object to calling code.
- *
- * @ingroup Cache
- */
-class EmptyBagOStuff extends BagOStuff {
-
-       /**
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return bool
-        */
-       public function get( $key, &$casToken = null ) {
-               return false;
-       }
-
-       /**
-        * @param string $key
-        * @param mixed $value
-        * @param int $exp
-        * @return bool
-        */
-       public function set( $key, $value, $exp = 0 ) {
-               return true;
-       }
-
-       /**
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param int $exp
-        * @return bool
-        */
-       protected function cas( $casToken, $key, $value, $exp = 0 ) {
-               return true;
-       }
-
-       /**
-        * @param string $key
-        * @return bool
-        */
-       public function delete( $key ) {
-               return true;
-       }
-
-       /**
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               return true;
-       }
-}
diff --git a/includes/objectcache/HashBagOStuff.php b/includes/objectcache/HashBagOStuff.php
deleted file mode 100644 (file)
index 278a74e..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-/**
- * Object caching using PHP arrays.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Cache
- */
-
-/**
- * This is a test of the interface, mainly. It stores things in an associative
- * array, which is not going to persist between program runs.
- *
- * @ingroup Cache
- */
-class HashBagOStuff extends BagOStuff {
-       /** @var array */
-       protected $bag;
-
-       function __construct( $params = array() ) {
-               parent::__construct( $params );
-               $this->bag = array();
-       }
-
-       /**
-        * @param string $key
-        * @return bool
-        */
-       protected function expire( $key ) {
-               $et = $this->bag[$key][1];
-
-               if ( ( $et == 0 ) || ( $et > time() ) ) {
-                       return false;
-               }
-
-               $this->delete( $key );
-
-               return true;
-       }
-
-       /**
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return bool|mixed
-        */
-       public function get( $key, &$casToken = null ) {
-               if ( !isset( $this->bag[$key] ) ) {
-                       return false;
-               }
-
-               if ( $this->expire( $key ) ) {
-                       return false;
-               }
-
-               $casToken = $this->bag[$key][0];
-
-               return $this->bag[$key][0];
-       }
-
-       /**
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool
-        */
-       public function set( $key, $value, $exptime = 0 ) {
-               $this->bag[$key] = array( $value, $this->convertExpiry( $exptime ) );
-               return true;
-       }
-
-       /**
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool
-        */
-       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
-               if ( $this->get( $key ) === $casToken ) {
-                       return $this->set( $key, $value, $exptime );
-               }
-
-               return false;
-       }
-
-       /**
-        * @param string $key
-        * @return bool
-        */
-       function delete( $key ) {
-               if ( !isset( $this->bag[$key] ) ) {
-                       return false;
-               }
-
-               unset( $this->bag[$key] );
-
-               return true;
-       }
-}
index ac34570..83bee70 100644 (file)
@@ -108,6 +108,14 @@ class MemcachedBagOStuff extends BagOStuff {
                        $this->fixExpiry( $exptime ) );
        }
 
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new Exception( "Got invalid callback." );
+               }
+
+               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+       }
+
        /**
         * Get the underlying client object. This is provided for debugging
         * purposes.
index f9a8cfe..be54e4d 100644 (file)
@@ -40,12 +40,12 @@ class MultiWriteBagOStuff extends BagOStuff {
         *               the documentation of $wgObjectCaches for more detail.
         *
         * @param array $params
-        * @throws MWException
+        * @throws InvalidArgumentException
         */
        public function __construct( $params ) {
                parent::__construct( $params );
                if ( !isset( $params['caches'] ) ) {
-                       throw new MWException( __METHOD__ . ': the caches parameter is required' );
+                       throw new InvalidArgumentException( __METHOD__ . ': the caches parameter is required' );
                }
 
                $this->caches = array();
@@ -76,18 +76,6 @@ class MultiWriteBagOStuff extends BagOStuff {
                return false;
        }
 
-       /**
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param mixed $exptime
-        * @return bool
-        * @throws MWException
-        */
-       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
-               throw new MWException( "CAS is not implemented in " . __CLASS__ );
-       }
-
        /**
         * @param string $key
         * @param mixed $value
index 1f2c9c0..2e47e24 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Cache
  */
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * Functions to get cache objects
  *
@@ -82,11 +84,11 @@ class ObjectCache {
         */
        static function newFromParams( $params ) {
                if ( isset( $params['loggroup'] ) ) {
-                       $params['logger'] = MWLoggerFactory::getInstance( $params['loggroup'] );
+                       $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] );
                } else {
                        // For backwards-compatability with custom parameters, lets not
                        // have all logging suddenly disappear
-                       $params['logger'] = MWLoggerFactory::getInstance( 'objectcache' );
+                       $params['logger'] = LoggerFactory::getInstance( 'objectcache' );
                }
                if ( isset( $params['factory'] ) ) {
                        return call_user_func( $params['factory'], $params );
index 24d2a22..789f1e3 100644 (file)
@@ -117,7 +117,7 @@ class ObjectCacheSessionHandler {
         * Callback when writing session data.
         *
         * @param string $id Session id
-        * @param mixed $data Session data
+        * @param string $data Session data
         * @return bool Success
         */
        static function write( $id, $data ) {
index b1be9d8..23c8b6d 100644 (file)
@@ -25,6 +25,8 @@ class RedisBagOStuff extends BagOStuff {
        protected $redisPool;
        /** @var array List of server names */
        protected $servers;
+       /** @var array Map of (tag => server name) */
+       protected $serverTagMap;
        /** @var bool */
        protected $automaticFailover;
 
@@ -34,7 +36,8 @@ class RedisBagOStuff extends BagOStuff {
         *   - servers: An array of server names. A server name may be a hostname,
         *     a hostname/port combination or the absolute path of a UNIX socket.
         *     If a hostname is specified but no port, the standard port number
-        *     6379 will be used. Required.
+        *     6379 will be used. Arrays keys can be used to specify the tag to
+        *     hash on in place of the host/port. Required.
         *
         *   - connectTimeout: The timeout for new connections, in seconds. Optional,
         *     default is 1 second.
@@ -66,6 +69,10 @@ class RedisBagOStuff extends BagOStuff {
                $this->redisPool = RedisConnectionPool::singleton( $redisConf );
 
                $this->servers = $params['servers'];
+               foreach ( $this->servers as $key => $server ) {
+                       $this->serverTagMap[is_int( $key ) ? $server : $key] = $server;
+               }
+
                if ( isset( $params['automaticFailover'] ) ) {
                        $this->automaticFailover = $params['automaticFailover'];
                } else {
@@ -315,6 +322,15 @@ class RedisBagOStuff extends BagOStuff {
                $this->logRequest( 'incr', $key, $server, $result );
                return $result;
        }
+
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new Exception( "Got invalid callback." );
+               }
+
+               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+       }
+
        /**
         * @param mixed $data
         * @return string
@@ -339,23 +355,25 @@ class RedisBagOStuff extends BagOStuff {
         * @return array (server, RedisConnRef) or (false, false)
         */
        protected function getConnection( $key ) {
-               if ( count( $this->servers ) === 1 ) {
-                       $candidates = $this->servers;
-               } else {
-                       $candidates = $this->servers;
+               $candidates = array_keys( $this->serverTagMap );
+
+               if ( count( $this->servers ) > 1 ) {
                        ArrayUtils::consistentHashSort( $candidates, $key, '/' );
                        if ( !$this->automaticFailover ) {
                                $candidates = array_slice( $candidates, 0, 1 );
                        }
                }
 
-               foreach ( $candidates as $server ) {
+               foreach ( $candidates as $tag ) {
+                       $server = $this->serverTagMap[$tag];
                        $conn = $this->redisPool->getConnection( $server );
                        if ( $conn ) {
                                return array( $server, $conn );
                        }
                }
+
                $this->setLastError( BagOStuff::ERR_UNREACHABLE );
+
                return array( false, false );
        }
 
diff --git a/includes/objectcache/ReplicatedBagOStuff.php b/includes/objectcache/ReplicatedBagOStuff.php
new file mode 100644 (file)
index 0000000..34affc7
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ * @author Aaron Schulz
+ */
+
+/**
+ * A cache class that directs writes to one set of servers and reads to
+ * another. This assumes that the servers used for reads are setup to slave
+ * those that writes go to. This can easily be used with redis for example.
+ *
+ * In the WAN scenario (e.g. multi-datacenter case), this is useful when
+ * writes are rare or they usually take place in the primary datacenter.
+ *
+ * @ingroup Cache
+ * @since 1.25
+ */
+class ReplicatedBagOStuff extends BagOStuff {
+       /** @var BagOStuff */
+       protected $mCache;
+       /** @var BagOStuff */
+       protected $sCache;
+
+       /**
+        * Constructor. Parameters are:
+        *   - masterCache : Cache parameter structures, in the style required by $wgObjectCaches.
+        *                   See the documentation of $wgObjectCaches for more detail.
+        *   - slaveCache  : Cache parameter structures, in the style required by $wgObjectCaches.
+        *                   See the documentation of $wgObjectCaches for more detail.
+        *
+        * @param array $params
+        * @throws MWException
+        */
+       public function __construct( $params ) {
+               parent::__construct( $params );
+
+               if ( !isset( $params['masterCache'] ) ) {
+                       throw new MWException( __METHOD__ . ': the "masterCache" parameter is required' );
+               } elseif ( !isset( $params['slaveCache'] ) ) {
+                       throw new MWException( __METHOD__ . ': the "slaveCache" parameter is required' );
+               }
+
+               $this->mCache = ( $params['masterCache'] instanceof BagOStuff )
+                       ? $params['masterCache']
+                       : ObjectCache::newFromParams( $params['masterCache'] );
+               $this->sCache = ( $params['slaveCache'] instanceof BagOStuff )
+                       ? $params['slaveCache']
+                       : ObjectCache::newFromParams( $params['slaveCache'] );
+       }
+
+       public function setDebug( $debug ) {
+               $this->mCache->setDebug( $debug );
+               $this->sCache->setDebug( $debug );
+       }
+
+       public function get( $key, &$casToken = null ) {
+               return $this->sCache->get( $key, $casToken );
+       }
+
+       public function getMulti( $keys ) {
+               return $this->sCache->getMulti( $keys );
+       }
+
+       public function set( $key, $value, $exptime = 0 ) {
+               return $this->mCache->set( $key, $value, $exptime );
+       }
+
+       public function delete( $key ) {
+               return $this->mCache->delete( $key );
+       }
+
+       public function add( $key, $value, $exptime = 0 ) {
+               return $this->mCache->add( $key, $value, $exptime );
+       }
+
+       public function incr( $key, $value = 1 ) {
+               return $this->mCache->incr( $key, $value );
+       }
+
+       public function decr( $key ) {
+               return $this->mCache->decr( $key );
+       }
+
+       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+               return $this->mCache->lock( $key, $timeout, $expiry );
+       }
+
+       public function unlock( $key ) {
+               return $this->mCache->unlock( $key );
+       }
+
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->mCache->merge( $key, $callback, $exptime, $attempts );
+       }
+
+       public function getLastError() {
+               return ( $this->mCache->getLastError() != self::ERR_NONE )
+                       ? $this->mCache->getLastError()
+                       : $this->sCache->getLastError();
+       }
+
+       public function clearLastError() {
+               $this->mCache->clearLastError();
+               $this->sCache->clearLastError();
+       }
+}
index b9a9985..82eeb84 100644 (file)
@@ -145,6 +145,8 @@ class SqlBagOStuff extends BagOStuff {
                                $type = isset( $info['type'] ) ? $info['type'] : 'mysql';
                                $host = isset( $info['host'] ) ? $info['host'] : '[unknown]';
                                $this->logger->debug( __CLASS__ . ": connecting to $host" );
+                               // Use a blank trx profiler to ignore expections as this is a cache
+                               $info['trxProfiler'] = new TransactionProfiler();
                                $db = DatabaseBase::factory( $type, $info );
                                $db->clearFlag( DBO_TRX );
                        } else {
@@ -514,6 +516,14 @@ class SqlBagOStuff extends BagOStuff {
                return $newValue;
        }
 
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new Exception( "Got invalid callback." );
+               }
+
+               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+       }
+
        /**
         * @param DatabaseBase $db
         * @param string $exptime
@@ -723,9 +733,11 @@ class SqlBagOStuff extends BagOStuff {
                        $this->markServerDown( $exception, $serverIndex );
                }
                if ( $exception->db && $exception->db->wasReadOnlyError() ) {
-                       try {
-                               $exception->db->rollback( __METHOD__ );
-                       } catch ( DBError $e ) {
+                       if ( $exception->db->trxLevel() ) {
+                               try {
+                                       $exception->db->rollback( __METHOD__ );
+                               } catch ( DBError $e ) {
+                               }
                        }
                }
 
diff --git a/includes/objectcache/WinCacheBagOStuff.php b/includes/objectcache/WinCacheBagOStuff.php
deleted file mode 100644 (file)
index f59ed4e..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-/**
- * Object caching using WinCache.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Cache
- */
-
-/**
- * Wrapper for WinCache object caching functions; identical interface
- * to the APC wrapper
- *
- * @ingroup Cache
- */
-class WinCacheBagOStuff extends BagOStuff {
-
-       /**
-        * Get a value from the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @param int $casToken [optional] Cas token
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
-               $val = wincache_ucache_get( $key );
-
-               $casToken = $val;
-
-               if ( is_string( $val ) ) {
-                       $val = unserialize( $val );
-               }
-
-               return $val;
-       }
-
-       /**
-        * Store a value in the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $value Value to store
-        * @param int $expire Expiration time
-        * @return bool
-        */
-       public function set( $key, $value, $expire = 0 ) {
-               $result = wincache_ucache_set( $key, serialize( $value ), $expire );
-
-               /* wincache_ucache_set returns an empty array on success if $value
-                  was an array, bool otherwise */
-               return ( is_array( $result ) && $result === array() ) || $result;
-       }
-
-       /**
-        * Store a value in the WinCache object cache, race condition-safe
-        *
-        * @param int $casToken Cas token
-        * @param string $key Cache key
-        * @param int $value Object to store
-        * @param int $exptime Expiration time
-        * @return bool
-        */
-       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
-               return wincache_ucache_cas( $key, $casToken, serialize( $value ) );
-       }
-
-       /**
-        * Remove a value from the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @return bool
-        */
-       public function delete( $key ) {
-               wincache_ucache_delete( $key );
-
-               return true;
-       }
-}
diff --git a/includes/objectcache/XCacheBagOStuff.php b/includes/objectcache/XCacheBagOStuff.php
deleted file mode 100644 (file)
index 9be6624..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-/**
- * Object caching using XCache.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Cache
- */
-
-/**
- * Wrapper for XCache object caching functions; identical interface
- * to the APC wrapper
- *
- * @ingroup Cache
- */
-class XCacheBagOStuff extends BagOStuff {
-       /**
-        * Get a value from the XCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $casToken Cas token
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
-               $val = xcache_get( $key );
-
-               if ( is_string( $val ) ) {
-                       if ( $this->isInteger( $val ) ) {
-                               $val = intval( $val );
-                       } else {
-                               $val = unserialize( $val );
-                       }
-               } elseif ( is_null( $val ) ) {
-                       return false;
-               }
-
-               return $val;
-       }
-
-       /**
-        * Store a value in the XCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $value Object to store
-        * @param int $expire Expiration time
-        * @return bool
-        */
-       public function set( $key, $value, $expire = 0 ) {
-               if ( !$this->isInteger( $value ) ) {
-                       $value = serialize( $value );
-               }
-
-               xcache_set( $key, $value, $expire );
-               return true;
-       }
-
-       /**
-        * @param mixed $casToken
-        * @param string $key
-        * @param mixed $value
-        * @param int $exptime
-        * @return bool
-        * @throws MWException
-        */
-       protected function cas( $casToken, $key, $value, $exptime = 0 ) {
-               // Can't find any documentation on xcache cas
-               throw new MWException( "CAS is not implemented in " . __CLASS__ );
-       }
-
-       /**
-        * Remove a value from the XCache object cache
-        *
-        * @param string $key Cache key
-        * @return bool
-        */
-       public function delete( $key ) {
-               xcache_unset( $key );
-               return true;
-       }
-
-       /**
-        * Merge an item.
-        * XCache does not seem to support any way of performing CAS - this however will
-        * provide a way to perform CAS-like functionality.
-        *
-        * @param string $key
-        * @param callable $callback Callback method to be executed
-        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int $attempts The amount of times to attempt a merge in case of failure
-        * @return bool Success
-        */
-       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
-       }
-
-       public function incr( $key, $value = 1 ) {
-               return xcache_inc( $key, $value );
-       }
-
-       public function decr( $key, $value = 1 ) {
-               return xcache_dec( $key, $value );
-       }
-}
index f04201c..91e9971 100644 (file)
@@ -30,8 +30,6 @@
  * See design.txt for an overview.
  * Note: edit user interface and cache support functions have been
  * moved to separate EditPage and HTMLFileCache classes.
- *
- * @internal documentation reviewed 15 Mar 2010
  */
 class Article implements Page {
        /** @var IContextSource The context this Article is executed in */
@@ -380,7 +378,7 @@ class Article implements Page {
                # Pre-fill content with error message so that if something
                # fails we'll have something telling us what we intended.
                //XXX: this isn't page content but a UI message. horrible.
-               $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ), array() );
+               $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ) );
 
                if ( $oldid ) {
                        # $this->mRevision might already be fetched by getOldIDFromRequest()
@@ -392,17 +390,20 @@ class Article implements Page {
                                }
                        }
                } else {
-                       if ( !$this->mPage->getLatest() ) {
+                       $oldid = $this->mPage->getLatest();
+                       if ( !$oldid ) {
                                wfDebug( __METHOD__ . " failed to find page data for title " .
                                        $this->getTitle()->getPrefixedText() . "\n" );
                                return false;
                        }
 
+                       # Update error message with correct oldid
+                       $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ) );
+
                        $this->mRevision = $this->mPage->getRevision();
 
                        if ( !$this->mRevision ) {
-                               wfDebug( __METHOD__ . " failed to retrieve current page, rev_id " .
-                                       $this->mPage->getLatest() . "\n" );
+                               wfDebug( __METHOD__ . " failed to retrieve current page, rev_id $oldid\n" );
                                return false;
                        }
                }
@@ -574,7 +575,7 @@ class Article implements Page {
                $useParserCache = $this->mPage->isParserCacheUsed( $parserOptions, $oldid );
                wfDebug( 'Article::view using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" );
                if ( $user->getStubThreshold() ) {
-                       wfIncrStats( 'pcache_miss_stub' );
+                       $this->getContext()->getStats()->increment( 'pcache_miss_stub' );
                }
 
                $this->showRedirectedFromHeader();
@@ -707,7 +708,7 @@ class Article implements Page {
                }
 
                # Get the ParserOutput actually *displayed* here.
-               # Note that $this->mParserOutput is the *current* version output.
+               # Note that $this->mParserOutput is the *current*/oldid version output.
                $pOutput = ( $outputDone instanceof ParserOutput )
                        ? $outputDone // object fetched by hook
                        : $this->mParserOutput;
@@ -756,9 +757,8 @@ class Article implements Page {
         * Show a diff page according to current request variables. For use within
         * Article::view() only, other callers should use the DifferenceEngine class.
         *
-        * @todo Make protected
         */
-       public function showDiffPage() {
+       protected function showDiffPage() {
                $request = $this->getContext()->getRequest();
                $user = $this->getContext()->getUser();
                $diff = $request->getVal( 'diff' );
@@ -959,9 +959,10 @@ class Article implements Page {
         */
        public function showRedirectedFromHeader() {
                global $wgRedirectSources;
-               $outputPage = $this->getContext()->getOutput();
 
-               $request = $this->getContext()->getRequest();
+               $context = $this->getContext();
+               $outputPage = $context->getOutput();
+               $request = $context->getRequest();
                $rdfrom = $request->getVal( 'rdfrom' );
 
                // Construct a URL for the current page view, but with the target title
@@ -986,7 +987,7 @@ class Article implements Page {
                                );
 
                                $outputPage->addSubtitle( "<span class=\"mw-redirectedfrom\">" .
-                                       wfMessage( 'redirectedfrom' )->rawParams( $redir )->parse()
+                                       $context->msg( 'redirectedfrom' )->rawParams( $redir )->parse()
                                . "</span>" );
 
                                // Add the script to update the displayed URL and
@@ -1010,7 +1011,7 @@ class Article implements Page {
                        if ( $wgRedirectSources && preg_match( $wgRedirectSources, $rdfrom ) ) {
                                $redir = Linker::makeExternalLink( $rdfrom, $rdfrom );
                                $outputPage->addSubtitle( "<span class=\"mw-redirectedfrom\">" .
-                                       wfMessage( 'redirectedfrom' )->rawParams( $redir )->parse()
+                                       $context->msg( 'redirectedfrom' )->rawParams( $redir )->parse()
                                . "</span>" );
 
                                // Add the script to update the displayed URL
@@ -1496,7 +1497,7 @@ class Article implements Page {
                }
                $html .= '</ul>';
 
-               $redirectToText = wfMessage( 'redirectto' )->inLanguage( $lang )->text();
+               $redirectToText = wfMessage( 'redirectto' )->inLanguage( $lang )->escaped();
 
                return '<div class="redirectMsg">' .
                        '<p>' . $redirectToText . '</p>' .
@@ -1634,7 +1635,7 @@ class Article implements Page {
                                $context->msg( 'historywarning' )->numParams( $revisions )->parse() .
                                $context->msg( 'word-separator' )->escaped() . Linker::linkKnown( $title,
                                        $context->msg( 'history' )->escaped(),
-                                       array( 'rel' => 'archives' ),
+                                       array(),
                                        array( 'action' => 'history' ) ) .
                                '</strong>'
                        );
index 03a5b89..2edf1af 100644 (file)
@@ -113,6 +113,8 @@ class CategoryPage extends Article {
                        $until,
                        $reqArray
                );
-               $this->getContext()->getOutput()->addHTML( $viewer->getHTML() );
+               $out = $this->getContext()->getOutput();
+               $out->addHTML( $viewer->getHTML() );
+               $out->addHelpLink( 'Help:Categories' );
        }
 }
index b8f67c2..8f635cf 100644 (file)
@@ -140,7 +140,7 @@ class ImagePage extends Article {
 
                if ( $wgShowEXIF && $this->displayImg->exists() ) {
                        // @todo FIXME: Bad interface, see note on MediaHandler::formatMetadata().
-                       $formattedMetadata = $this->displayImg->formatMetadata();
+                       $formattedMetadata = $this->displayImg->formatMetadata( $this->getContext() );
                        $showmeta = $formattedMetadata !== false;
                } else {
                        $showmeta = false;
@@ -505,6 +505,22 @@ class ImagePage extends Article {
 
                        $longDesc = $this->getContext()->msg( 'parentheses', $this->displayImg->getLongDesc() )->text();
 
+                       $handler = $this->displayImg->getHandler();
+
+                       // If this is a filetype with potential issues, warn the user.
+                       if ( $handler ) {
+                               $warningConfig = $handler->getWarningConfig( $this->displayImg );
+
+                               if ( $warningConfig !== null ) {
+                                       // The warning will be displayed via CSS and JavaScript.
+                                       // We just need to tell the client side what message to use.
+                                       $output = $this->getContext()->getOutput();
+                                       $output->addJsConfigVars( 'wgFileWarning', $warningConfig );
+                                       $output->addModules( $warningConfig['module'] );
+                                       $output->addModules( 'mediawiki.filewarning' );
+                               }
+                       }
+
                        $medialink = "[[Media:$filename|$linktext]]";
 
                        if ( !$this->displayImg->isSafeFile() ) {
@@ -1365,7 +1381,6 @@ class ImageHistoryList extends ContextSource {
                } else {
                        if ( $local ) {
                                $row .= Linker::userLink( $userId, $userText );
-                               $row .= $this->msg( 'word-separator' )->escaped();
                                $row .= '<span style="white-space: nowrap;">';
                                $row .= Linker::userToolLinks( $userId, $userText );
                                $row .= '</span>';
index d30f589..6242a54 100644 (file)
@@ -31,8 +31,6 @@ interface Page {
  *
  * Some fields are public only for backwards-compatibility. Use accessors.
  * In the past, this class was part of Article.php and everything was public.
- *
- * @internal documentation reviewed 15 Mar 2010
  */
 class WikiPage implements Page, IDBAccessObject {
        // Constants for $mDataLoadedFrom and related
@@ -369,14 +367,12 @@ class WikiPage implements Page, IDBAccessObject {
                        $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
                } elseif ( $from === self::READ_NORMAL ) {
                        $data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle );
-                       // Use a "last rev inserted" timestamp key to diminish the issue of slave lag.
-                       // Note that DB also stores the master position in the session and checks it.
-                       $touched = $this->getCachedLastEditTime();
-                       if ( $touched ) { // key set
-                               if ( !$data || $touched > wfTimestamp( TS_MW, $data->page_touched ) ) {
-                                       $from = self::READ_LATEST;
-                                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
-                               }
+                       if ( !$data
+                               && wfGetLB()->getServerCount() > 1
+                               && wfGetLB()->hasOrMadeRecentMasterChanges()
+                       ) {
+                               $from = self::READ_LATEST;
+                               $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
                        }
                } else {
                        // No idea from where the caller got this data, assume slave database.
@@ -604,13 +600,23 @@ class WikiPage implements Page, IDBAccessObject {
                        return; // page doesn't exist or is missing page_latest info
                }
 
-               // Bug 37225: if session S1 loads the page row FOR UPDATE, the result always includes the
-               // latest changes committed. This is true even within REPEATABLE-READ transactions, where
-               // S1 normally only sees changes committed before the first S1 SELECT. Thus we need S1 to
-               // also gets the revision row FOR UPDATE; otherwise, it may not find it since a page row
-               // UPDATE and revision row INSERT by S2 may have happened after the first S1 SELECT.
-               // http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html#isolevel_repeatable-read.
-               $flags = ( $this->mDataLoadedFrom == self::READ_LOCKING ) ? Revision::READ_LOCKING : 0;
+               if ( $this->mDataLoadedFrom == self::READ_LOCKING ) {
+                       // Bug 37225: if session S1 loads the page row FOR UPDATE, the result always
+                       // includes the latest changes committed. This is true even within REPEATABLE-READ
+                       // transactions, where S1 normally only sees changes committed before the first S1
+                       // SELECT. Thus we need S1 to also gets the revision row FOR UPDATE; otherwise, it
+                       // may not find it since a page row UPDATE and revision row INSERT by S2 may have
+                       // happened after the first S1 SELECT.
+                       // http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html#isolevel_repeatable-read.
+                       $flags = Revision::READ_LOCKING;
+               } elseif ( $this->mDataLoadedFrom == self::READ_LATEST ) {
+                       // Bug T93976: if page_latest was loaded from the master, fetch the
+                       // revision from there as well, as it may not exist yet on a slave DB.
+                       // Also, this keeps the queries in the same REPEATABLE-READ snapshot.
+                       $flags = Revision::READ_LATEST;
+               } else {
+                       $flags = 0;
+               }
                $revision = Revision::newFromPageId( $this->getId(), $latest, $flags );
                if ( $revision ) { // sanity
                        $this->setLastEdit( $revision );
@@ -802,29 +808,6 @@ class WikiPage implements Page, IDBAccessObject {
                }
        }
 
-       /**
-        * Get the cached timestamp for the last time the page changed.
-        * This is only used to help handle slave lag by comparing to page_touched.
-        * @return string MW timestamp
-        */
-       protected function getCachedLastEditTime() {
-               global $wgMemc;
-               $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) );
-               return $wgMemc->get( $key );
-       }
-
-       /**
-        * Set the cached timestamp for the last time the page changed.
-        * This is only used to help handle slave lag by comparing to page_touched.
-        * @param string $timestamp
-        * @return void
-        */
-       public function setCachedLastEditTime( $timestamp ) {
-               global $wgMemc;
-               $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) );
-               $wgMemc->set( $key, wfTimestamp( TS_MW, $timestamp ), 60 * 15 );
-       }
-
        /**
         * Determine whether a page would be suitable for being counted as an
         * article in the site_stats table based on the title & its content
@@ -1167,28 +1150,24 @@ class WikiPage implements Page, IDBAccessObject {
         * @return bool
         */
        public function doPurge() {
-               global $wgUseSquid;
-
                if ( !Hooks::run( 'ArticlePurge', array( &$this ) ) ) {
                        return false;
                }
 
-               // Invalidate the cache
-               $this->mTitle->invalidateCache();
-
-               if ( $wgUseSquid ) {
-                       // Commit the transaction before the purge is sent
-                       $dbw = wfGetDB( DB_MASTER );
-                       $dbw->commit( __METHOD__ );
-
-                       // Send purge
-                       $update = SquidUpdate::newSimplePurge( $this->mTitle );
-                       $update->doUpdate();
-               }
+               $title = $this->mTitle;
+               wfGetDB( DB_MASTER )->onTransactionIdle( function() use ( $title ) {
+                       global $wgUseSquid;
+                       // Invalidate the cache in auto-commit mode
+                       $title->invalidateCache();
+                       if ( $wgUseSquid ) {
+                               // Send purge now that page_touched update was committed above
+                               $update = SquidUpdate::newSimplePurge( $title );
+                               $update->doUpdate();
+                       }
+               } );
 
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
                        // @todo move this logic to MessageCache
-
                        if ( $this->exists() ) {
                                // NOTE: use transclusion text for messages.
                                //       This is consistent with  MessageCache::getMsgFromNamespace()
@@ -1205,6 +1184,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                        MessageCache::singleton()->replace( $this->mTitle->getDBkey(), $text );
                }
+
                return true;
        }
 
@@ -1263,6 +1243,13 @@ class WikiPage implements Page, IDBAccessObject {
        ) {
                global $wgContentHandlerUseDB;
 
+               // Assertion to try to catch T92046
+               if ( (int)$revision->getId() === 0 ) {
+                       throw new InvalidArgumentException(
+                               __METHOD__ . ': Revision has ID ' . var_export( $revision->getId(), 1 )
+                       );
+               }
+
                $content = $revision->getContent();
                $len = $content ? $content->getSize() : 0;
                $rt = $content ? $content->getUltimateRedirectTarget() : null;
@@ -1296,7 +1283,6 @@ class WikiPage implements Page, IDBAccessObject {
                if ( $result ) {
                        $this->updateRedirectOn( $dbw, $rt, $lastRevIsRedirect );
                        $this->setLastEdit( $revision );
-                       $this->setCachedLastEditTime( $now );
                        $this->mLatest = $revision->getId();
                        $this->mIsRedirect = (bool)$rt;
                        // Update the LinkCache.
@@ -1498,8 +1484,18 @@ class WikiPage implements Page, IDBAccessObject {
 
                $baseRevId = null;
                if ( $edittime && $sectionId !== 'new' ) {
-                       $dbw = wfGetDB( DB_MASTER );
-                       $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
+                       $dbr = wfGetDB( DB_SLAVE );
+                       $rev = Revision::loadFromTimestamp( $dbr, $this->mTitle, $edittime );
+                       // Try the master if this thread may have just added it.
+                       // This could be abstracted into a Revision method, but we don't want
+                       // to encourage loading of revisions by timestamp.
+                       if ( !$rev
+                               && wfGetLB()->getServerCount() > 1
+                               && wfGetLB()->hasOrMadeRecentMasterChanges()
+                       ) {
+                               $dbw = wfGetDB( DB_MASTER );
+                               $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
+                       }
                        if ( $rev ) {
                                $baseRevId = $rev->getId();
                        }
@@ -1538,10 +1534,7 @@ class WikiPage implements Page, IDBAccessObject {
                        if ( is_null( $baseRevId ) || $sectionId === 'new' ) {
                                $oldContent = $this->getContent();
                        } else {
-                               // TODO: try DB_SLAVE first
-                               $dbw = wfGetDB( DB_MASTER );
-                               $rev = Revision::loadFromId( $dbw, $baseRevId );
-
+                               $rev = Revision::newFromId( $baseRevId );
                                if ( !$rev ) {
                                        wfDebug( __METHOD__ . " asked for bogus section (page: " .
                                                $this->getId() . "; section: $sectionId)\n" );
@@ -1608,7 +1601,9 @@ class WikiPage implements Page, IDBAccessObject {
         * error will be returned. These two conditions are also possible with
         * auto-detection due to MediaWiki's performance-optimised locking strategy.
         *
-        * @param bool|int $baseRevId The revision ID this edit was based off, if any
+        * @param bool|int $baseRevId The revision ID this edit was based off, if any.
+        *   This is not the parent revision ID, rather the revision ID for older
+        *   content used as the source for a rollback, for example.
         * @param User $user The user doing the edit
         *
         * @throws MWException
@@ -1668,7 +1663,9 @@ class WikiPage implements Page, IDBAccessObject {
         * error will be returned. These two conditions are also possible with
         * auto-detection due to MediaWiki's performance-optimised locking strategy.
         *
-        * @param bool|int $baseRevId The revision ID this edit was based off, if any
+        * @param bool|int $baseRevId The revision ID this edit was based off, if any.
+        *   This is not the parent revision ID, rather the revision ID for older
+        *   content used as the source for a rollback, for example.
         * @param User $user The user doing the edit
         * @param string $serialFormat Format for storing the content in the
         *   database.
@@ -1802,7 +1799,7 @@ class WikiPage implements Page, IDBAccessObject {
                                $dbw->begin( __METHOD__ );
                                try {
 
-                                       $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
+                                       $prepStatus = $content->prepareSave( $this, $flags, $oldid, $user );
                                        $status->merge( $prepStatus );
 
                                        if ( !$status->isOK() ) {
@@ -1881,7 +1878,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $dbw->begin( __METHOD__ );
                        try {
 
-                               $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
+                               $prepStatus = $content->prepareSave( $this, $flags, $oldid, $user );
                                $status->merge( $prepStatus );
 
                                if ( !$status->isOK() ) {
@@ -1980,6 +1977,7 @@ class WikiPage implements Page, IDBAccessObject {
                // Promote user to any groups they meet the criteria for
                $dbw->onTransactionIdle( function () use ( $user ) {
                        $user->addAutopromoteOnceGroups( 'onEdit' );
+                       $user->addAutopromoteOnceGroups( 'onView' ); // b/c
                } );
 
                return $status;
@@ -3061,7 +3059,7 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                // Generate the edit summary if necessary
-               $target = Revision::newFromId( $s->rev_id );
+               $target = Revision::newFromId( $s->rev_id, Revision::READ_LATEST );
                if ( empty( $summary ) ) {
                        if ( $from == '' ) { // no public user name
                                $summary = wfMessage( 'revertpage-nouser' );
@@ -3378,70 +3376,40 @@ class WikiPage implements Page, IDBAccessObject {
        }
 
        /**
-        * Updates cascading protections
+        * Opportunistically enqueue link update jobs given fresh parser output if useful
         *
-        * @param ParserOutput $parserOutput ParserOutput object for the current version
+        * @param ParserOutput $parserOutput Current version page output
+        * @since 1.25
         */
-       public function doCascadeProtectionUpdates( ParserOutput $parserOutput ) {
-               if ( wfReadOnly() || !$this->mTitle->areRestrictionsCascading() ) {
+       public function triggerOpportunisticLinksUpdate( ParserOutput $parserOutput ) {
+               if ( wfReadOnly() ) {
                        return;
                }
 
-               // templatelinks or imagelinks tables may have become out of sync,
-               // especially if using variable-based transclusions.
-               // For paranoia, check if things have changed and if
-               // so apply updates to the database. This will ensure
-               // that cascaded protections apply as soon as the changes
-               // are visible.
-
-               // Get templates from templatelinks and images from imagelinks
-               $id = $this->getId();
-
-               $dbLinks = array();
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( array( 'templatelinks' ),
-                       array( 'tl_namespace', 'tl_title' ),
-                       array( 'tl_from' => $id ),
-                       __METHOD__
-               );
-
-               foreach ( $res as $row ) {
-                       $dbLinks["{$row->tl_namespace}:{$row->tl_title}"] = true;
+               if ( !Hooks::run( 'OpportunisticLinksUpdate', array( $this, $this->mTitle, $parserOutput ) ) ) {
+                       return;
                }
 
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( array( 'imagelinks' ),
-                       array( 'il_to' ),
-                       array( 'il_from' => $id ),
-                       __METHOD__
-               );
-
-               foreach ( $res as $row ) {
-                       $dbLinks[NS_FILE . ":{$row->il_to}"] = true;
+               if ( $this->mTitle->areRestrictionsCascading() ) {
+                       // If the page is cascade protecting, the links should really be up-to-date
+                       $params = array( 'prioritize' => true );
+               } elseif ( $parserOutput->hasDynamicContent() ) {
+                       // Assume the output contains time/random based magic words
+                       $params = array();
+               } else {
+                       // If the inclusions are deterministic, the edit-triggered link jobs are enough
+                       return;
                }
 
-               // Get templates and images from parser output.
-               $poLinks = array();
-               foreach ( $parserOutput->getTemplates() as $ns => $templates ) {
-                       foreach ( $templates as $dbk => $id ) {
-                               $poLinks["$ns:$dbk"] = true;
-                       }
-               }
-               foreach ( $parserOutput->getImages() as $dbk => $id ) {
-                       $poLinks[NS_FILE . ":$dbk"] = true;
+               // Check if the last link refresh was before page_touched
+               if ( $this->getLinksTimestamp() < $this->getTouched() ) {
+                       JobQueueGroup::singleton()->push( EnqueueJob::newFromLocalJobs(
+                               new JobSpecification( 'refreshLinks', $params, array(), $this->mTitle )
+                       ) );
+                       return;
                }
 
-               // Get the diff
-               $links_diff = array_diff_key( $poLinks, $dbLinks );
-
-               if ( count( $links_diff ) > 0 ) {
-                       // Whee, link updates time.
-                       // Note: we are only interested in links here. We don't need to get
-                       // other DataUpdate items from the parser output.
-                       $u = new LinksUpdate( $this->mTitle, $parserOutput, false );
-                       $u->doUpdate();
-               }
+               return;
        }
 
        /**
index e382cf3..950c0d4 100644 (file)
@@ -35,7 +35,6 @@ class CacheTime {
        public $mVersion = Parser::VERSION,  # Compatibility check
                $mCacheTime = '',             # Time when this object was generated, or -1 for uncacheable. Used in ParserCache.
                $mCacheExpiry = null,         # Seconds after which the object should expire, use 0 for uncacheable. Used in ParserCache.
-               $mContainsOldMagic,           # Boolean variable indicating if the input contained variables like {{CURRENTDAY}}
                $mCacheRevisionId = null;     # Revision ID that was parsed
 
        /**
@@ -45,21 +44,6 @@ class CacheTime {
                return wfTimestamp( TS_MW, $this->mCacheTime );
        }
 
-       /**
-        * @return bool
-        */
-       public function containsOldMagic() {
-               return $this->mContainsOldMagic;
-       }
-
-       /**
-        * @param bool $com
-        * @return bool
-        */
-       public function setContainsOldMagic( $com ) {
-               return wfSetVar( $this->mContainsOldMagic, $com );
-       }
-
        /**
         * setCacheTime() sets the timestamp expressing when the page has been rendered.
         * This does not control expiry, see updateCacheExpiry() for that!
@@ -133,10 +117,6 @@ class CacheTime {
                        $expire = min( $expire, $wgParserCacheExpireTime );
                }
 
-               if ( $this->containsOldMagic() ) { //compatibility hack
-                       $expire = min( $expire, 3600 ); # 1 hour
-               }
-
                if ( $expire <= 0 ) {
                        return 0; // not cacheable
                } else {
index 2b495b1..830a68f 100644 (file)
@@ -893,9 +893,17 @@ class CoreParserFunctions {
                }
        }
 
-       // Usage {{filepath|300}}, {{filepath|nowiki}}, {{filepath|nowiki|300}}
-       // or {{filepath|300|nowiki}} or {{filepath|300px}}, {{filepath|200x300px}},
-       // {{filepath|nowiki|200x300px}}, {{filepath|200x300px|nowiki}}.
+       /**
+        * Usage {{filepath|300}}, {{filepath|nowiki}}, {{filepath|nowiki|300}}
+        * or {{filepath|300|nowiki}} or {{filepath|300px}}, {{filepath|200x300px}},
+        * {{filepath|nowiki|200x300px}}, {{filepath|200x300px|nowiki}}.
+        *
+        * @param Parser $parser
+        * @param string $name
+        * @param string $argA
+        * @param string $argB
+        * @return array|string
+        */
        public static function filepath( $parser, $name = '', $argA = '', $argB = '' ) {
                $file = wfFindFile( $name );
 
@@ -934,7 +942,7 @@ class CoreParserFunctions {
         * Parser function to extension tag adaptor
         * @param Parser $parser
         * @param PPFrame $frame
-        * @param array $args
+        * @param PPNode[] $args
         * @return string
         */
        public static function tagObj( $parser, $frame, $args ) {
index 3db8d1e..ef295ab 100644 (file)
@@ -33,7 +33,7 @@ class DateFormatter {
        public $regexes, $pDays, $pMonths, $pYears;
        public $rules, $xMonths, $preferences;
 
-       protected $lang;
+       protected $lang, $mLinked;
 
        const ALL = -1;
        const NONE = 0;
index 7884ca5..ace63a0 100644 (file)
@@ -147,7 +147,11 @@ class Parser {
         */
        public $mSubstWords;
        # Initialised in constructor
-       public $mConf, $mPreprocessor, $mExtLinkBracketedRegex, $mUrlProtocols;
+       public $mConf, $mExtLinkBracketedRegex, $mUrlProtocols;
+
+       # Initialized in getPreprocessor()
+       /** @var Preprocessor */
+       public $mPreprocessor;
 
        # Cleared with clearState():
        /**
@@ -393,7 +397,6 @@ class Parser {
                 */
 
                global $wgShowHostnames;
-               $fname = __METHOD__ . '-' . wfGetCaller();
 
                if ( $clearState ) {
                        $magicScopeVariable = $this->lock();
@@ -1199,7 +1202,7 @@ class Parser {
         *
         * @param string $text
         * @param bool $isMain
-        * @param bool $frame
+        * @param PPFrame|bool $frame
         *
         * @return string
         */
@@ -4096,7 +4099,7 @@ class Parser {
                        return $obj->tc_contents;
                }
 
-               $req = MWHttpRequest::factory( $url );
+               $req = MWHttpRequest::factory( $url, array(), __METHOD__ );
                $status = $req->execute(); // Status object
                if ( $status->isOK() ) {
                        $text = $req->getContent();
@@ -4589,16 +4592,22 @@ class Parser {
                                $legacyArrayKey = strtolower( $legacyHeadline );
                        }
 
-                       # count how many in assoc. array so we can track dupes in anchors
+                       # Create the anchor for linking from the TOC to the section
+                       $anchor = $safeHeadline;
+                       $legacyAnchor = $legacyHeadline;
                        if ( isset( $refers[$arrayKey] ) ) {
-                               $refers[$arrayKey]++;
+                               for ( $i = 2; isset( $refers["${arrayKey}_$i"] ); ++$i );
+                               $anchor .= "_$i";
+                               $refers["${arrayKey}_$i"] = true;
                        } else {
-                               $refers[$arrayKey] = 1;
+                               $refers[$arrayKey] = true;
                        }
-                       if ( isset( $refers[$legacyArrayKey] ) ) {
-                               $refers[$legacyArrayKey]++;
+                       if ( $legacyHeadline !== false && isset( $refers[$legacyArrayKey] ) ) {
+                               for ( $i = 2; isset( $refers["${legacyArrayKey}_$i"] ); ++$i );
+                               $legacyAnchor .= "_$i";
+                               $refers["${legacyArrayKey}_$i"] = true;
                        } else {
-                               $refers[$legacyArrayKey] = 1;
+                               $refers[$legacyArrayKey] = true;
                        }
 
                        # Don't number the heading if it is the only one (looks silly)
@@ -4611,15 +4620,6 @@ class Parser {
                                ) . ' ' . $headline;
                        }
 
-                       # Create the anchor for linking from the TOC to the section
-                       $anchor = $safeHeadline;
-                       $legacyAnchor = $legacyHeadline;
-                       if ( $refers[$arrayKey] > 1 ) {
-                               $anchor .= '_' . $refers[$arrayKey];
-                       }
-                       if ( $legacyHeadline !== false && $refers[$legacyArrayKey] > 1 ) {
-                               $legacyAnchor .= '_' . $refers[$legacyArrayKey];
-                       }
                        if ( $enoughToc && ( !isset( $wgMaxTocLevel ) || $toclevel < $wgMaxTocLevel ) ) {
                                $toc .= Linker::tocLine( $anchor, $tocline,
                                        $numbering, $toclevel, ( $isTemplate ? false : $sectionIndex ) );
@@ -4945,7 +4945,7 @@ class Parser {
        /**
         * Clean up signature text
         *
-        * 1) Strip ~~~, ~~~~ and ~~~~~ out of signatures @see cleanSigInSig
+        * 1) Strip 3, 4 or 5 tildes out of signatures @see cleanSigInSig
         * 2) Substitute all transclusions
         *
         * @param string $text
@@ -4984,7 +4984,7 @@ class Parser {
        }
 
        /**
-        * Strip ~~~, ~~~~ and ~~~~~ out of signatures
+        * Strip 3, 4 or 5 tildes out of signatures.
         *
         * @param string $text
         * @return string Signature text with /~{3,5}/ removed
@@ -5430,7 +5430,7 @@ class Parser {
        }
 
        /**
-        * @param string $handler
+        * @param MediaHandler $handler
         * @return array
         */
        public function getImageParams( $handler ) {
@@ -5986,7 +5986,19 @@ class Parser {
                        return null;
                }
 
-               $this->mRevisionObject = Revision::newFromId( $this->mRevisionId );
+               $rev = call_user_func(
+                       $this->mOptions->getCurrentRevisionCallback(), $this->getTitle(), $this
+               );
+
+               # If the parse is for a new revision, then the callback should have
+               # already been set to force the object and should match mRevisionId.
+               # If not, try to fetch by mRevisionId for sanity.
+               if ( $rev && $rev->getId() != $this->mRevisionId ) {
+                       $rev = Revision::newFromId( $this->mRevisionId );
+               }
+
+               $this->mRevisionObject = $rev;
+
                return $this->mRevisionObject;
        }
 
@@ -5997,7 +6009,6 @@ class Parser {
         */
        public function getRevisionTimestamp() {
                if ( is_null( $this->mRevisionTimestamp ) ) {
-
                        global $wgContLang;
 
                        $revObject = $this->getRevisionObject();
index ad131f4..bc8e4a6 100644 (file)
@@ -257,8 +257,6 @@ class ParserCache {
                        $optionsKey->setCacheRevisionId( $revId );
                        $parserOutput->setCacheRevisionId( $revId );
 
-                       $optionsKey->setContainsOldMagic( $parserOutput->containsOldMagic() );
-
                        $parserOutputKey = $this->getParserOutputKey( $page,
                                $popts->optionsHash( $optionsKey->mUsedOptions, $page->getTitle() ) );
 
index b09fe76..100656d 100644 (file)
@@ -25,7 +25,7 @@
  * @brief Set options of the Parser
  *
  * All member variables are supposed to be private in theory, although in
- * practise this is not the case.
+ * practice this is not the case.
  *
  * @ingroup Parser
  */
@@ -145,9 +145,7 @@ class ParserOptions {
 
        /**
         * Clean up signature texts?
-        *
-        * 1) Strip ~~~, ~~~~ and ~~~~~ out of signatures
-        * 2) Substitute all transclusions
+        * @see Parser::cleanSig
         */
        public $mCleanSignatures;
 
@@ -669,6 +667,7 @@ class ParserOptions {
         *
         * This ignores report limit settings that only affect HTML comments
         *
+        * @param ParserOptions $other
         * @return bool
         * @since 1.25
         */
index e9e72be..65b527c 100644 (file)
@@ -53,23 +53,21 @@ class ParserOutput extends CacheTime {
                $mTOCEnabled = true;          # Whether TOC should be shown, can't override __NOTOC__
        private $mIndexPolicy = '';       # 'index' or 'noindex'?  Any other value will result in no change.
        private $mAccessedOptions = array(); # List of ParserOptions (stored in the keys)
-       private $mSecondaryDataUpdates = array(); # List of DataUpdate, used to save info from the page somewhere else.
-       private $mCustomDataUpdateCount = 0; # Number of custom updaters in $mSecondaryDataUpdates.
        private $mExtensionData = array(); # extra data used by extensions
        private $mLimitReportData = array(); # Parser limit report data
        private $mParseStartTime = array(); # Timestamps for getTimeSinceStart()
        private $mPreventClickjacking = false; # Whether to emit X-Frame-Options: DENY
+       private $mFlags = array();        # Generic flags
 
        const EDITSECTION_REGEX =
                '#<(?:mw:)?editsection page="(.*?)" section="(.*?)"(?:/>|>(.*?)(</(?:mw:)?editsection>))#';
 
        public function __construct( $text = '', $languageLinks = array(), $categoryLinks = array(),
-               $containsOldMagic = false, $titletext = ''
+               $unused = false, $titletext = ''
        ) {
                $this->mText = $text;
                $this->mLanguageLinks = $languageLinks;
                $this->mCategories = $categoryLinks;
-               $this->mContainsOldMagic = $containsOldMagic;
                $this->mTitleText = $titletext;
        }
 
@@ -677,73 +675,57 @@ class ParserOutput extends CacheTime {
        }
 
        /**
-        * Adds an update job to the output. Any update jobs added to the output will
-        * eventually be executed in order to store any secondary information extracted
-        * from the page's content. This is triggered by calling getSecondaryDataUpdates()
-        * and is used for forward links updates on edit and backlink updates by jobs.
+        * @deprecated since 1.25. Instead, store any relevant data using setExtensionData,
+        *    and implement Content::getSecondaryDataUpdates() if possible, or use the
+        *    'SecondaryDataUpdates' hook to construct the necessary update objects.
         *
-        * @note: custom DataUpdates do not survive serialization of the ParserOutput!
-        * This is especially relevant when using a cached ParserOutput for updating
-        * the database, as WikiPage does if $wgAjaxStashEdit is enabled. For this
-        * reason, ApiStashEdit will skip any ParserOutput that has custom DataUpdates.
+        * @note Hard deprecation and removal without long deprecation period, since there are no
+        *       known users, but known conceptual issues.
         *
-        * @since 1.20
+        * @todo remove in 1.26
         *
         * @param DataUpdate $update
+        *
+        * @throws MWException
         */
        public function addSecondaryDataUpdate( DataUpdate $update ) {
-               $this->mSecondaryDataUpdates[] = $update;
-               $this->mCustomDataUpdateCount = count( $this->mSecondaryDataUpdates );
+               wfDeprecated( __METHOD__, '1.25' );
+               throw new MWException( 'ParserOutput::addSecondaryDataUpdate() is no longer supported. Override Content::getSecondaryDataUpdates() or use the SecondaryDataUpdates hook instead.' );
        }
 
        /**
-        * Whether this ParserOutput contains custom DataUpdate objects that may not survive
-        * serialization of the ParserOutput.
+        * @deprecated since 1.25.
         *
-        * @see __sleep()
+        * @note Hard deprecation and removal without long deprecation period, since there are no
+        *       known users, but known conceptual issues.
         *
-        * @return bool
+        * @todo remove in 1.26
+        *
+        * @return bool false (since 1.25)
         */
        public function hasCustomDataUpdates() {
-               return ( $this->mCustomDataUpdateCount > 0 );
+               wfDeprecated( __METHOD__, '1.25' );
+               return false;
        }
 
        /**
-        * Returns any DataUpdate jobs to be executed in order to store secondary information
-        * extracted from the page's content, including a LinksUpdate object for all links stored in
-        * this ParserOutput object.
+        * @deprecated since 1.25. Instead, store any relevant data using setExtensionData,
+        *    and implement Content::getSecondaryDataUpdates() if possible, or use the
+        *    'SecondaryDataUpdates' hook to construct the necessary update objects.
         *
-        * @note Avoid using this method directly, use ContentHandler::getSecondaryDataUpdates()
-        *   instead! The content handler may provide additional update objects.
+        * @note Hard deprecation and removal without long deprecation period, since there are no
+        *       known users, but known conceptual issues.
         *
-        * @since 1.20
+        * @todo remove in 1.26
         *
-        * @param Title $title The title of the page we're updating. If not given, a title object will
-        *    be created based on $this->getTitleText()
-        * @param bool $recursive Queue jobs for recursive updates?
-        *
-        * @throws MWException if called on a ParserOutput instance that was restored from serialization.
-        *         DataUpdates are generally not serializable, so after serialization, they are undefined.
+        * @param Title $title
+        * @param bool $recursive
         *
         * @return array An array of instances of DataUpdate
         */
        public function getSecondaryDataUpdates( Title $title = null, $recursive = true ) {
-               if ( is_null( $title ) ) {
-                       $title = Title::newFromText( $this->getTitleText() );
-               }
-
-               if ( count( $this->mSecondaryDataUpdates ) !== $this->mCustomDataUpdateCount ) {
-                       // NOTE: This happens when mSecondaryDataUpdates are lost during serialization
-                       // (see __sleep below). After (un)serialization, getSecondaryDataUpdates()
-                       // has no defined behavior in that case, and should throw an exception.
-                       throw new MWException( 'getSecondaryDataUpdates() must not be called on ParserOutput restored from serialization.' );
-               }
-
-               // NOTE: ApiStashEdit knows about this "magic" update object. If this goes away,
-               // ApiStashEdit::buildStashValue needs to be adjusted.
-               $linksUpdate = new LinksUpdate( $title, $this, $recursive );
-
-               return array_merge( $this->mSecondaryDataUpdates, array( $linksUpdate ) );
+               wfDeprecated( __METHOD__, '1.25' );
+               return array();
        }
 
        /**
@@ -879,6 +861,22 @@ class ParserOutput extends CacheTime {
                $this->mLimitReportData[$key] = $value;
        }
 
+       /**
+        * Check whether the cache TTL was lowered due to dynamic content
+        *
+        * When content is determined by more than hard state (e.g. page edits),
+        * such as template/file transclusions based on the current timestamp or
+        * extension tags that generate lists based on queries, this return true.
+        *
+        * @return bool
+        * @since 1.25
+        */
+       public function hasDynamicContent() {
+               global $wgParserCacheExpireTime;
+
+               return $this->getCacheExpiry() < $wgParserCacheExpireTime;
+       }
+
        /**
         * Get or set the prevent-clickjacking flag
         *
@@ -897,7 +895,7 @@ class ParserOutput extends CacheTime {
        public function __sleep() {
                return array_diff(
                        array_keys( get_object_vars( $this ) ),
-                       array( 'mSecondaryDataUpdates', 'mParseStartTime' )
+                       array( 'mParseStartTime' )
                );
        }
 }
index 3435881..0351f2a 100644 (file)
@@ -92,7 +92,7 @@ class Preprocessor_DOM implements Preprocessor {
                wfRestoreWarnings();
                if ( !$result ) {
                        // Try running the XML through UtfNormal to get rid of invalid characters
-                       $xml = UtfNormal::cleanUp( $xml );
+                       $xml = UtfNormal\Validator::cleanUp( $xml );
                        // 1 << 19 == XML_PARSE_HUGE, needed so newer versions of libxml2
                        // don't barf when the XML is >256 levels deep
                        $result = $dom->loadXML( $xml, 1 << 19 );
@@ -191,7 +191,7 @@ class Preprocessor_DOM implements Preprocessor {
                wfRestoreWarnings();
                if ( !$result ) {
                        // Try running the XML through UtfNormal to get rid of invalid characters
-                       $xml = UtfNormal::cleanUp( $xml );
+                       $xml = UtfNormal\Validator::cleanUp( $xml );
                        // 1 << 19 == XML_PARSE_HUGE, needed so newer versions of libxml2
                        // don't barf when the XML is >256 levels deep.
                        $result = $dom->loadXML( $xml, 1 << 19 );
index da20f94..a702d2e 100644 (file)
@@ -154,12 +154,12 @@ class PoolWorkArticleView extends PoolCounterWork {
                // Make sure file cache is not used on uncacheable content.
                // Output that has magic words in it can still use the parser cache
                // (if enabled), though it will generally expire sooner.
-               if ( !$this->parserOutput->isCacheable() || $this->parserOutput->containsOldMagic() ) {
+               if ( !$this->parserOutput->isCacheable() ) {
                        $wgUseFileCache = false;
                }
 
                if ( $isCurrent ) {
-                       $this->page->doCascadeProtectionUpdates( $this->parserOutput );
+                       $this->page->triggerOpportunisticLinksUpdate( $this->parserOutput );
                }
 
                return true;
index 4b74206..dbf80fa 100644 (file)
@@ -35,19 +35,10 @@ abstract class Profiler {
        protected $templated = false;
        /** @var array All of the params passed from $wgProfiler */
        protected $params = array();
-
+       /** @var IContextSource Current request context */
+       protected $context = null;
        /** @var TransactionProfiler */
        protected $trxProfiler;
-
-       /**
-        * @var array Mapping of output type to class name
-        */
-       private static $outputTypes = array(
-               'db' => 'ProfilerOutputDb',
-               'text' => 'ProfilerOutputText',
-               'udp' => 'ProfilerOutputUdp',
-       );
-
        /** @var Profiler */
        private static $instance = null;
 
@@ -68,17 +59,28 @@ abstract class Profiler {
         */
        final public static function instance() {
                if ( self::$instance === null ) {
-                       global $wgProfiler;
+                       global $wgProfiler, $wgProfileLimit;
+
+                       $params = array(
+                               'class'     => 'ProfilerStub',
+                               'sampling'  => 1,
+                               'threshold' => $wgProfileLimit,
+                               'output'    => array(),
+                       );
                        if ( is_array( $wgProfiler ) ) {
-                               $class = isset( $wgProfiler['class'] ) ? $wgProfiler['class'] : 'ProfilerStub';
-                               $factor = isset( $wgProfiler['sampling'] ) ? $wgProfiler['sampling'] : 1;
-                               if ( PHP_SAPI === 'cli' || mt_rand( 0, $factor - 1 ) != 0 ) {
-                                       $class = 'ProfilerStub';
-                               }
-                               self::$instance = new $class( $wgProfiler );
-                       } else {
-                               self::$instance = new ProfilerStub( array() );
+                               $params = array_merge( $params, $wgProfiler );
+                       }
+
+                       $inSample = mt_rand( 0, $params['sampling'] - 1 ) === 0;
+                       if ( PHP_SAPI === 'cli' || !$inSample ) {
+                               $params['class'] = 'ProfilerStub';
+                       }
+
+                       if ( !is_array( $params['output'] ) ) {
+                               $params['output'] = array( $params['output'] );
                        }
+
+                       self::$instance = new $params['class']( $params );
                }
                return self::$instance;
        }
@@ -116,6 +118,32 @@ abstract class Profiler {
                }
        }
 
+       /**
+        * Sets the context for this Profiler
+        *
+        * @param IContextSource $context
+        * @since 1.25
+        */
+       public function setContext( $context ) {
+               $this->context = $context;
+       }
+
+       /**
+        * Gets the context for this Profiler
+        *
+        * @return IContextSource
+        * @since 1.25
+        */
+       public function getContext() {
+               if ( $this->context ) {
+                       return $this->context;
+               } else {
+                       wfDebug( __METHOD__ . " called and \$context is null. " .
+                               "Return RequestContext::getMain(); for sanity\n" );
+                       return RequestContext::getMain();
+               }
+       }
+
        // Kept BC for now, remove when possible
        public function profileIn( $functionname ) {}
        public function profileOut( $functionname ) {}
@@ -133,7 +161,7 @@ abstract class Profiler {
        /**
         * @param ScopedCallback $section
         */
-       public function scopedProfileOut( ScopedCallback &$section ) {
+       public function scopedProfileOut( ScopedCallback &$section = null ) {
                $section = null;
        }
 
@@ -151,34 +179,54 @@ abstract class Profiler {
        abstract public function close();
 
        /**
-        * Log the data to some store or even the page output
+        * Get all usable outputs.
         *
         * @throws MWException
+        * @return array Array of ProfilerOutput instances.
+        * @since 1.25
+        */
+       private function getOutputs() {
+               $outputs = array();
+               foreach ( $this->params['output'] as $outputType ) {
+                       // The class may be specified as either the full class name (for
+                       // example, 'ProfilerOutputUdp') or (for backward compatibility)
+                       // the trailing portion of the class name (for example, 'udp').
+                       $outputClass = strpos( $outputType, 'ProfilerOutput' ) === false
+                               ? 'ProfilerOutput' . ucfirst( $outputType )
+                               : $outputType;
+                       if ( !class_exists( $outputClass ) ) {
+                               throw new MWException( "'$outputType' is an invalid output type" );
+                       }
+                       $outputInstance = new $outputClass( $this, $this->params );
+                       if ( $outputInstance->canUse() ) {
+                               $outputs[] = $outputInstance;
+                       }
+               }
+               return $outputs;
+       }
+
+       /**
+        * Log the data to some store or even the page output
+        *
         * @since 1.25
         */
        public function logData() {
-               $output = isset( $this->params['output'] ) ? $this->params['output'] : null;
+               $request = $this->getContext()->getRequest();
 
-               if ( !$output || $this instanceof ProfilerStub ) {
-                       // return early when no output classes defined or we're a stub
+               $timeElapsed = $request->getElapsedTime();
+               $timeElapsedThreshold = $this->params['threshold'];
+               if ( $timeElapsed <= $timeElapsedThreshold ) {
                        return;
                }
 
-               if ( !is_array( $output ) ) {
-                       $output = array( $output );
+               $outputs = $this->getOutputs();
+               if ( !$outputs ) {
+                       return;
                }
 
-               foreach ( $output as $outType ) {
-                       if ( !isset( self::$outputTypes[$outType] ) ) {
-                               throw new MWException( "'$outType' is an invalid output type" );
-                       }
-                       $class = self::$outputTypes[$outType];
-
-                       /** @var ProfilerOutput $profileOut */
-                       $profileOut = new $class( $this, $this->params );
-                       if ( $profileOut->canUse() ) {
-                               $profileOut->log( $this->getFunctionStats() );
-                       }
+               $stats = $this->getFunctionStats();
+               foreach ( $outputs as $output ) {
+                       $output->log( $stats );
                }
        }
 
index 5580f94..244b4e4 100644 (file)
@@ -28,7 +28,7 @@
  */
 class ProfilerStub extends Profiler {
        public function scopedProfileIn( $section ) {
-               return new ScopedCallback( null ); // no-op
+               return null; // no-op
        }
 
        public function getFunctionStats() {
@@ -43,4 +43,7 @@ class ProfilerStub extends Profiler {
        public function getCurrentSection() {
                return '';
        }
+
+       public function logData() {
+       }
 }
index 7a50497..f36cdc1 100644 (file)
@@ -183,4 +183,12 @@ class ProfilerXhprof extends Profiler {
                }
                return implode( "\n", $out );
        }
+
+       /**
+        * Retrieve raw data from xhprof
+        * @return array
+        */
+       public function getRawData() {
+               return $this->xhprof->getRawData();
+       }
 }
index 9609bd3..f02d66f 100644 (file)
@@ -22,6 +22,9 @@
  * @author Aaron Schulz
  */
 
+use Psr\Log\LoggerInterface;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\NullLogger;
 /**
  * Helper class that detects high-contention DB queries via profiling calls
  *
  *
  * @since 1.24
  */
-class TransactionProfiler {
+class TransactionProfiler implements LoggerAwareInterface {
        /** @var float Seconds */
        protected $dbLockThreshold = 3.0;
        /** @var float Seconds */
        protected $eventThreshold = .25;
-       /** @var integer */
-       protected $affectedThreshold = 500;
 
        /** @var array transaction ID => (write start time, list of DBs involved) */
        protected $dbTrxHoldingLocks = array();
@@ -54,11 +55,25 @@ class TransactionProfiler {
                'writes'      => INF,
                'queries'     => INF,
                'conns'       => INF,
-               'masterConns' => INF
+               'masterConns' => INF,
+               'maxAffected' => INF
        );
        /** @var array */
        protected $expectBy = array();
 
+       /**
+        * @var LoggerInterface
+        */
+       private $logger;
+
+       public function __construct() {
+               $this->setLogger( new NullLogger() );
+       }
+
+       public function setLogger( LoggerInterface $logger ) {
+               $this->logger = $logger;
+       }
+
        /**
         * Set performance expectations
         *
@@ -126,7 +141,7 @@ class TransactionProfiler {
        public function transactionWritingIn( $server, $db, $id ) {
                $name = "{$server} ({$db}) (TRX#$id)";
                if ( isset( $this->dbTrxHoldingLocks[$name] ) ) {
-                       wfDebugLog( 'DBPerformance', "Nested transaction for '$name' - out of sync." );
+                       $this->logger->info( "Nested transaction for '$name' - out of sync." );
                }
                $this->dbTrxHoldingLocks[$name] = array(
                        'start' => microtime( true ),
@@ -154,9 +169,8 @@ class TransactionProfiler {
                $eTime = microtime( true );
                $elapsed = ( $eTime - $sTime );
 
-               if ( $isWrite && $n > $this->affectedThreshold && PHP_SAPI !== 'cli' ) {
-                       wfDebugLog( 'DBPerformance',
-                               "Query affected $n rows:\n" . $query . "\n" . wfBacktrace( true ) );
+               if ( $isWrite && $n > $this->expect['maxAffected'] ) {
+                       $this->logger->info( "Query affected $n row(s):\n" . $query . "\n" . wfBacktrace( true ) );
                }
 
                // Report when too many writes/queries happen...
@@ -210,7 +224,7 @@ class TransactionProfiler {
        public function transactionWritingOut( $server, $db, $id ) {
                $name = "{$server} ({$db}) (TRX#$id)";
                if ( !isset( $this->dbTrxMethodTimes[$name] ) ) {
-                       wfDebugLog( 'DBPerformance', "Detected no transaction for '$name' - out of sync." );
+                       $this->logger->info( "Detected no transaction for '$name' - out of sync." );
                        return;
                }
                // Fill in the last non-query period...
@@ -238,7 +252,7 @@ class TransactionProfiler {
                                list( $query, $sTime, $end ) = $info;
                                $msg .= sprintf( "%d\t%.6f\t%s\n", $i, ( $end - $sTime ), $query );
                        }
-                       wfDebugLog( 'DBPerformance', $msg );
+                       $this->logger->info( $msg );
                }
                unset( $this->dbTrxHoldingLocks[$name] );
                unset( $this->dbTrxMethodTimes[$name] );
@@ -249,9 +263,12 @@ class TransactionProfiler {
         * @param string $query
         */
        protected function reportExpectationViolated( $expect, $query ) {
+               global $wgRequest;
+
                $n = $this->expect[$expect];
                $by = $this->expectBy[$expect];
-               wfDebugLog( 'DBPerformance',
-                       "Expectation ($expect <= $n) by $by not met:\n$query\n" . wfBacktrace( true ) );
+               $this->logger->info(
+                       "[{$wgRequest->getMethod()}] Expectation ($expect <= $n) by $by not met:\n$query\n" . wfBacktrace( true )
+               );
        }
 }
diff --git a/includes/profiler/output/ProfilerOutputDump.php b/includes/profiler/output/ProfilerOutputDump.php
new file mode 100644 (file)
index 0000000..bf4b85c
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Profiler dumping output in xhprof dump file
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Profiler
+ */
+
+/**
+ * Profiler dumping output in xhprof dump file
+ * @ingroup Profiler
+ *
+ * @since 1.25
+ */
+class ProfilerOutputDump extends ProfilerOutput {
+
+       protected $suffix = ".xhprof";
+
+       /**
+        * Can this output type be used?
+        *
+        * @return bool
+        */
+       public function canUse() {
+               if ( empty( $this->params['outputDir'] ) ) {
+                       return false;
+               }
+               return true;
+       }
+
+       public function log( array $stats ) {
+               $data = $this->collector->getRawData();
+               $filename = sprintf( "%s/%s.%s%s", $this->params['outputDir'], uniqid(), $this->collector->getProfileID(), $this->suffix );
+               file_put_contents( $filename, serialize( $data ) );
+       }
+}
diff --git a/includes/profiler/output/ProfilerOutputStats.php b/includes/profiler/output/ProfilerOutputStats.php
new file mode 100644 (file)
index 0000000..ef6ef7c
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * ProfilerOutput class that flushes profiling data to the profiling
+ * context's stats buffer.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Profiler
+ */
+
+/**
+ * ProfilerOutput class that flushes profiling data to the profiling
+ * context's stats buffer.
+ *
+ * @ingroup Profiler
+ * @since 1.25
+ */
+class ProfilerOutputStats extends ProfilerOutput {
+
+       /**
+        * Flush profiling data to the current profiling context's stats buffer.
+        *
+        * @param array $stats
+        */
+       public function log( array $stats ) {
+               $contextStats = $this->collector->getContext()->getStats();
+
+               foreach ( $stats as $stat ) {
+                       // Sanitize the key
+                       $key = str_replace( '::', '.', $stat['name'] );
+                       $key = preg_replace( '/[^a-z.]+/i', '_', $key );
+                       $key = trim( $key, '_.' );
+
+                       // Convert fractional seconds to whole milliseconds
+                       $cpu = round( $stat['cpu'] * 1000 );
+                       $real = round( $stat['real'] * 1000 );
+
+                       $contextStats->increment( "{$key}.calls" );
+                       $contextStats->timing( "{$key}.cpu", $cpu );
+                       $contextStats->timing( "{$key}.real", $real );
+               }
+       }
+}
index d37d74f..6752779 100644 (file)
@@ -69,9 +69,7 @@ class ProfilerOutputText extends ProfilerOutput {
                                } else {
                                        print "<!--\n{$out}\n-->\n";
                                }
-                       } elseif ( $contentType === 'text/javascript' ) {
-                               print "\n/*\n${$out}*/\n";
-                       } elseif ( $contentType === 'text/css' ) {
+                       } elseif ( $contentType === 'text/javascript' || $contentType === 'text/css' ) {
                                print "\n/*\n{$out}*/\n";
                        }
                }
index a2dcd59..a5349fb 100644 (file)
@@ -44,6 +44,7 @@ class ExtensionProcessor implements Processor {
                'APIMetaModules',
                'APIPropModules',
                'APIListModules',
+               'ValidSkinNames',
        );
 
        /**
@@ -53,6 +54,7 @@ class ExtensionProcessor implements Processor {
         */
        protected static $creditsAttributes = array(
                'name',
+               'namemsg',
                'author',
                'version',
                'url',
@@ -192,15 +194,17 @@ class ExtensionProcessor implements Processor {
                        $defaultPaths['localBasePath'] = "$dir/{$defaultPaths['localBasePath']}";
                }
 
-               if ( isset( $info['ResourceModules'] ) ) {
-                       foreach ( $info['ResourceModules'] as $name => $data ) {
-                               if ( isset( $data['localBasePath'] ) ) {
-                                       $data['localBasePath'] = "$dir/{$data['localBasePath']}";
+               foreach ( array( 'ResourceModules', 'ResourceModuleSkinStyles' ) as $setting ) {
+                       if ( isset( $info[$setting] ) ) {
+                               foreach ( $info[$setting] as $name => $data ) {
+                                       if ( isset( $data['localBasePath'] ) ) {
+                                               $data['localBasePath'] = "$dir/{$data['localBasePath']}";
+                                       }
+                                       if ( $defaultPaths ) {
+                                               $data += $defaultPaths;
+                                       }
+                                       $this->globals["wg$setting"][$name] = $data;
                                }
-                               if ( $defaultPaths ) {
-                                       $data += $defaultPaths;
-                               }
-                               $this->globals['wgResourceModules'][$name] = $data;
                        }
                }
        }
index 8541e31..5ef3853 100644 (file)
@@ -91,41 +91,55 @@ class ExtensionRegistry {
                if ( $data ) {
                        $this->exportExtractedData( $data );
                } else {
-                       $data = array( 'globals' => array( 'wgAutoloadClasses' => array() ) );
-                       $autoloadClasses = array();
-                       foreach ( $this->queued as $path => $mtime ) {
-                               $json = file_get_contents( $path );
-                               $info = json_decode( $json, /* $assoc = */ true );
-                               if ( !is_array( $info ) ) {
-                                       throw new Exception( "$path is not a valid JSON file." );
-                               }
-                               $autoload = $this->processAutoLoader( dirname( $path ), $info );
-                               // Set up the autoloader now so custom processors will work
-                               $GLOBALS['wgAutoloadClasses'] += $autoload;
-                               $autoloadClasses += $autoload;
-                               if ( isset( $info['processor'] ) ) {
-                                       $processor = $this->getProcessor( $info['processor'] );
-                               } else {
-                                       $processor = $this->getProcessor( 'default' );
-                               }
-                               $processor->extractInfo( $path, $info );
-                       }
-                       foreach ( $this->processors as $processor ) {
-                               $data = array_merge_recursive( $data, $processor->getExtractedInfo() );
-                       }
-                       foreach ( $data['credits'] as $credit ) {
-                               $data['globals']['wgExtensionCredits'][$credit['type']][] = $credit;
-                       }
-                       $this->processors = array(); // Reset
+                       $data = $this->readFromQueue( $this->queued );
                        $this->exportExtractedData( $data );
                        // Do this late since we don't want to extract it since we already
                        // did that, but it should be cached
-                       $data['globals']['wgAutoloadClasses'] += $autoloadClasses;
+                       $data['globals']['wgAutoloadClasses'] += $data['autoload'];
+                       unset( $data['autoload'] );
                        $this->cache->set( $key, $data );
                }
                $this->queued = array();
        }
 
+       /**
+        * Process a queue of extensions and return their extracted data
+        *
+        * @param array $queue keys are filenames, values are ignored
+        * @return array extracted info
+        * @throws Exception
+        */
+       public function readFromQueue( array $queue ) {
+               $data = array( 'globals' => array( 'wgAutoloadClasses' => array() ) );
+               $autoloadClasses = array();
+               foreach ( $queue as $path => $mtime ) {
+                       $json = file_get_contents( $path );
+                       $info = json_decode( $json, /* $assoc = */ true );
+                       if ( !is_array( $info ) ) {
+                               throw new Exception( "$path is not a valid JSON file." );
+                       }
+                       $autoload = $this->processAutoLoader( dirname( $path ), $info );
+                       // Set up the autoloader now so custom processors will work
+                       $GLOBALS['wgAutoloadClasses'] += $autoload;
+                       $autoloadClasses += $autoload;
+                       if ( isset( $info['processor'] ) ) {
+                               $processor = $this->getProcessor( $info['processor'] );
+                       } else {
+                               $processor = $this->getProcessor( 'default' );
+                       }
+                       $processor->extractInfo( $path, $info );
+               }
+               foreach ( $this->processors as $processor ) {
+                       $data = array_merge_recursive( $data, $processor->getExtractedInfo() );
+               }
+               foreach ( $data['credits'] as $credit ) {
+                       $data['globals']['wgExtensionCredits'][$credit['type']][] = $credit;
+               }
+               $this->processors = array(); // Reset
+               $data['autoload'] = $autoloadClasses;
+               return $data;
+       }
+
        protected function getProcessor( $type ) {
                if ( !isset( $this->processors[$type] ) ) {
                        $processor = $type === 'default' ? new ExtensionProcessor() : new $type();
@@ -142,8 +156,21 @@ class ExtensionRegistry {
                foreach ( $info['globals'] as $key => $val ) {
                        if ( !isset( $GLOBALS[$key] ) || !$GLOBALS[$key] ) {
                                $GLOBALS[$key] = $val;
-                       } elseif ( is_array( $GLOBALS[$key] ) && is_array( $val ) ) {
+                       } elseif ( $key === 'wgHooks' || $key === 'wgExtensionCredits' ) {
+                               // Special case $wgHooks and $wgExtensionCredits, which require a recursive merge.
+                               // Ideally it would have been taken care of in the first if block though.
                                $GLOBALS[$key] = array_merge_recursive( $GLOBALS[$key], $val );
+                       } elseif ( $key === 'wgGroupPermissions' ) {
+                               // First merge individual groups
+                               foreach ( $GLOBALS[$key] as $name => &$groupVal ) {
+                                       if ( isset( $val[$name] ) ) {
+                                               $groupVal += $val[$name];
+                                       }
+                               }
+                               // Now merge groups that didn't exist yet
+                               $GLOBALS[$key] += $val;
+                       } elseif ( is_array( $GLOBALS[$key] ) && is_array( $val ) ) {
+                               $GLOBALS[$key] = array_merge( $val, $GLOBALS[$key] );
                        } // else case is a config setting where it has already been overriden, so don't set it
                }
                foreach ( $info['defines'] as $name => $val ) {
index 1922999..3d5cc51 100644 (file)
@@ -72,6 +72,11 @@ class ResourceLoader {
         */
        protected $errors = array();
 
+       /**
+        * @var MessageBlobStore
+        */
+       protected $blobStore;
+
        /**
         * Load information stored in the database about modules.
         *
@@ -250,6 +255,7 @@ class ResourceLoader {
                        $this->registerTestModules();
                }
 
+               $this->setMessageBlobStore( new MessageBlobStore() );
        }
 
        /**
@@ -259,6 +265,14 @@ class ResourceLoader {
                return $this->config;
        }
 
+       /**
+        * @param MessageBlobStore $blobStore
+        * @since 1.25
+        */
+       public function setMessageBlobStore( MessageBlobStore $blobStore ) {
+               $this->blobStore = $blobStore;
+       }
+
        /**
         * Register a module with the ResourceLoader system.
         *
@@ -332,12 +346,9 @@ class ResourceLoader {
                                        }
 
                                        // Add new file paths, remapping them to refer to our directories and not use settings
-                                       // from the module we're modifying. These can come from the base definition or be defined
-                                       // for each module.
+                                       // from the module we're modifying, which come from the base definition.
                                        list( $localBasePath, $remoteBasePath ) =
                                                ResourceLoaderFileModule::extractBasePaths( $skinStyles );
-                                       list( $localBasePath, $remoteBasePath ) =
-                                               ResourceLoaderFileModule::extractBasePaths( $paths, $localBasePath, $remoteBasePath );
 
                                        foreach ( $paths as $path ) {
                                                $styleFiles[] = new ResourceLoaderFilePath( $path, $localBasePath, $remoteBasePath );
@@ -461,6 +472,17 @@ class ResourceLoader {
                }
        }
 
+       /**
+        * Check whether a ResourceLoader module is registered
+        *
+        * @since 1.25
+        * @param string $name
+        * @return bool
+        */
+       public function isModuleRegistered( $name ) {
+               return isset( $this->moduleInfos[$name] );
+       }
+
        /**
         * Get the ResourceLoaderModule object for a given module name.
         *
@@ -854,9 +876,11 @@ class ResourceLoader {
                $states = array();
 
                if ( !count( $modules ) && !count( $missing ) ) {
-                       return "/* This file is the Web entry point for MediaWiki's ResourceLoader:
+                       return <<<MESSAGE
+/* This file is the Web entry point for MediaWiki's ResourceLoader:
    <https://www.mediawiki.org/wiki/ResourceLoader>. In this request,
-   no modules were requested. Max made me put this here. */";
+   no modules were requested. Max made me put this here. */
+MESSAGE;
                }
 
                $image = $context->getImageObj();
@@ -872,7 +896,7 @@ class ResourceLoader {
                // Pre-fetch blobs
                if ( $context->shouldIncludeMessages() ) {
                        try {
-                               $blobs = MessageBlobStore::getInstance()->get( $this, $modules, $context->getLanguage() );
+                               $blobs = $this->blobStore->get( $this, $modules, $context->getLanguage() );
                        } catch ( Exception $e ) {
                                MWExceptionHandler::logException( $e );
                                wfDebugLog(
@@ -1068,23 +1092,19 @@ class ResourceLoader {
                } elseif ( !is_array( $scripts ) ) {
                        throw new MWException( 'Invalid scripts error. Array of URLs or string of code expected.' );
                }
-
-               return Xml::encodeJsCall(
-                       'mw.loader.implement',
-                       array(
-                               $name,
-                               $scripts,
-                               // Force objects. mw.loader.implement requires them to be javascript objects.
-                               // Although these variables are associative arrays, which become javascript
-                               // objects through json_encode. In many cases they will be empty arrays, and
-                               // PHP/json_encode() consider empty arrays to be numerical arrays and
-                               // output javascript "[]" instead of "{}". This fixes that.
-                               (object)$styles,
-                               (object)$messages,
-                               (object)$templates,
-                       ),
-                       ResourceLoader::inDebugMode()
+               // mw.loader.implement requires 'styles', 'messages' and 'templates' to be objects (not
+               // arrays). json_encode considers empty arrays to be numerical and outputs "[]" instead
+               // of "{}". Force them to objects.
+               $module = array(
+                       $name,
+                       $scripts,
+                       (object) $styles,
+                       (object) $messages,
+                       (object) $templates,
                );
+               self::trimArray( $module );
+
+               return Xml::encodeJsCall( 'mw.loader.implement', $module, ResourceLoader::inDebugMode() );
        }
 
        /**
@@ -1191,20 +1211,33 @@ class ResourceLoader {
                );
        }
 
+       private static function isEmptyObject( stdClass $obj ) {
+               foreach ( $obj as $key => &$value ) {
+                       return false;
+               }
+               return true;
+       }
+
        /**
         * Remove empty values from the end of an array.
         *
         * Values considered empty:
         *
         * - null
-        * - empty array
+        * - array()
+        * - new XmlJsCode( '{}' )
+        * - new stdClass() // (object) array()
         *
         * @param Array $array
         */
        private static function trimArray( Array &$array ) {
                $i = count( $array );
                while ( $i-- ) {
-                       if ( $array[$i] === null || $array[$i] === array() ) {
+                       if ( $array[$i] === null
+                               || $array[$i] === array()
+                               || ( $array[$i] instanceof XmlJsCode && $array[$i]->value === '{}' )
+                               || ( $array[$i] instanceof stdClass && self::isEmptyObject( $array[$i] ) )
+                       ) {
                                unset( $array[$i] );
                        } else {
                                break;
index fbca08e..671098e 100644 (file)
@@ -174,7 +174,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *     to $wgResourceBasePath
         *
         * Below is a description for the $options array:
-        * @throws MWException
+        * @throws InvalidArgumentException
         * @par Construction options:
         * @code
         *     array(
@@ -255,14 +255,14 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                case 'skinScripts':
                                case 'skinStyles':
                                        if ( !is_array( $option ) ) {
-                                               throw new MWException(
+                                               throw new InvalidArgumentException(
                                                        "Invalid collated file path list error. " .
                                                        "'$option' given, array expected."
                                                );
                                        }
                                        foreach ( $option as $key => $value ) {
                                                if ( !is_string( $key ) ) {
-                                                       throw new MWException(
+                                                       throw new InvalidArgumentException(
                                                                "Invalid collated file path list key error. " .
                                                                "'$key' given, string expected."
                                                        );
@@ -295,6 +295,18 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                }
                if ( $hasTemplates ) {
                        $this->dependencies[] = 'mediawiki.template';
+                       // Ensure relevant template compiler module gets loaded
+                       foreach ( $this->templates as $alias => $templatePath ) {
+                               if ( is_int( $alias ) ) {
+                                       $alias = $templatePath;
+                               }
+                               $suffix = explode( '.', $alias );
+                               $suffix = end( $suffix );
+                               $compilerModule = 'mediawiki.template.' . $suffix;
+                               if ( $suffix !== 'html' && !in_array( $compilerModule, $this->dependencies ) ) {
+                                       $this->dependencies[] = $compilerModule;
+                               }
+                       }
                }
        }
 
@@ -561,6 +573,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                $files = array_map( array( $this, 'getLocalPath' ), $files );
                // File deps need to be treated separately because they're already prefixed
                $files = array_merge( $files, $this->getFileDependencies( $context->getSkin() ) );
+               // Filter out any duplicates from getFileDependencies() and others.
+               // Most commonly introduced by compileLessFile(), which always includes the
+               // entry point Less file we already know about.
+               $files = array_values( array_unique( $files ) );
 
                // If a module is nothing but a list of dependencies, we need to avoid
                // giving max() an empty array
@@ -587,9 +603,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @return array
         */
        public function getDefinitionSummary( ResourceLoaderContext $context ) {
-               $summary = array(
-                       'class' => get_class( $this ),
-               );
+               $summary = parent::getDefinitionSummary( $context );
                foreach ( array(
                        'scripts',
                        'debugScripts',
diff --git a/includes/resourceloader/ResourceLoaderFilePageModule.php b/includes/resourceloader/ResourceLoaderFilePageModule.php
deleted file mode 100644 (file)
index 8c7fbe7..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * Resource loader module for MediaWiki:Filepage.css
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * ResourceLoader definition for MediaWiki:Filepage.css
- */
-class ResourceLoaderFilePageModule extends ResourceLoaderWikiModule {
-
-       /**
-        * @param ResourceLoaderContext $context
-        * @return array
-        */
-       protected function getPages( ResourceLoaderContext $context ) {
-               return array(
-                       'MediaWiki:Filepage.css' => array( 'type' => 'style' ),
-               );
-       }
-}
index 6788c6f..12d1e82 100644 (file)
@@ -44,7 +44,7 @@ class ResourceLoaderImage {
         * @param string|array $descriptor Path to image file, or array structure containing paths
         * @param string $basePath Directory to which paths in descriptor refer
         * @param array $variants
-        * @throws MWException
+        * @throws InvalidArgumentException
         */
        public function __construct( $name, $module, $descriptor, $basePath, $variants ) {
                $this->name = $name;
@@ -53,6 +53,20 @@ class ResourceLoaderImage {
                $this->basePath = $basePath;
                $this->variants = $variants;
 
+               // Expand shorthands:
+               // 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 ]
+                                       );
+                                       unset( $this->descriptor['lang'][ $langList ] );
+                               }
+                       }
+               }
+
                // Ensure that all files have common extension.
                $extensions = array();
                $descriptor = (array)$descriptor;
@@ -61,11 +75,11 @@ class ResourceLoaderImage {
                } );
                $extensions = array_unique( $extensions );
                if ( count( $extensions ) !== 1 ) {
-                       throw new MWException( 'Image type for various images differs.' );
+                       throw new InvalidArgumentException( "File type for different image files of '$name' not the same" );
                }
                $ext = $extensions[0];
                if ( !isset( self::$fileTypes[$ext] ) ) {
-                       throw new MWException( 'Invalid image type; svg, png, gif or jpg required.' );
+                       throw new InvalidArgumentException( "Invalid file type for image files of '$name' (valid: svg, png, gif, jpg)" );
                }
                $this->extension = $ext;
        }
@@ -184,13 +198,14 @@ class ResourceLoaderImage {
         * Call getExtension() or getMimeType() with the same $format argument to learn what file type the
         * returned data uses.
         *
-        * @param ResourceLoaderContext $context Image context, or any context of $variant and $format
+        * @param ResourceLoaderContext $context Image context, or any context if $variant and $format
         *     given.
-        * @param string|null $variant Variant to get the data for. Optional, if given, overrides the data
+        * @param string|null $variant Variant to get the data for. Optional; if given, overrides the data
         *     from $context.
-        * @param string $format Format to get the data for, 'original' or 'rasterized'. Optional, if
+        * @param string $format Format to get the data for, 'original' or 'rasterized'. Optional; if
         *     given, overrides the data from $context.
         * @return string|false Possibly binary image data, or false on failure
+        * @throws MWException If the image file doesn't exist
         */
        public function getImageData( ResourceLoaderContext $context, $variant = false, $format = false ) {
                if ( $variant === false ) {
@@ -200,18 +215,26 @@ class ResourceLoaderImage {
                        $format = $context->getFormat();
                }
 
+               $path = $this->getPath( $context );
+               if ( !file_exists( $path ) ) {
+                       throw new MWException( "File '$path' does not exist" );
+               }
+
                if ( $this->getExtension() !== 'svg' ) {
-                       return file_get_contents( $this->getPath( $context ) );
+                       return file_get_contents( $path );
                }
 
                if ( $variant && isset( $this->variants[$variant] ) ) {
                        $data = $this->variantize( $this->variants[$variant], $context );
                } else {
-                       $data = file_get_contents( $this->getPath( $context ) );
+                       $data = file_get_contents( $path );
                }
 
                if ( $format === 'rasterized' ) {
                        $data = $this->rasterize( $data );
+                       if ( !$data ) {
+                               wfDebugLog( 'ResourceLoaderImage', __METHOD__ . " failed to rasterize for $path" );
+                       }
                }
 
                return $data;
@@ -256,7 +279,7 @@ class ResourceLoaderImage {
        }
 
        /**
-        * Massage the SVG image data for converters which doesn't understand some path data syntax.
+        * Massage the SVG image data for converters which don't understand some path data syntax.
         *
         * This is necessary for rsvg and ImageMagick when compiled with rsvg support.
         * Upstream bug is https://bugzilla.gnome.org/show_bug.cgi?id=620923, fixed 2014-11-10, so
@@ -291,11 +314,11 @@ class ResourceLoaderImage {
                // class, with a separate set of configuration settings.
                //
                // This is a distinct use case from regular SVG rasterization:
-               // * we can skip many sanity and security checks (as the images come from a trusted source,
-               //   rather than from the user)
-               // * we need to provide extra options to some converters to achieve acceptable quality for very
-               //   small images, which might cause performance issues in the general case
-               // * we need to directly pass image data to the converter instead of a file path
+               // * We can skip many sanity and security checks (as the images come from a trusted source,
+               //   rather than from the user).
+               // * We need to provide extra options to some converters to achieve acceptable quality for very
+               //   small images, which might cause performance issues in the general case.
+               // * We want to directly pass image data to the converter, rather than a file path.
                //
                // See https://phabricator.wikimedia.org/T76473#801446 for examples of what happens with the
                // default settings.
@@ -307,7 +330,8 @@ class ResourceLoaderImage {
 
                $svg = $this->massageSvgPathdata( $svg );
 
-               if ( $wgSVGConverter === 'rsvg' ) {
+               // Sometimes this might be 'rsvg-secure'. Long as it's rsvg.
+               if ( strpos( $wgSVGConverter, 'rsvg' ) === 0 ) {
                        $command = 'rsvg-convert';
                        if ( $wgSVGConverterPath ) {
                                $command = wfEscapeShellArg( "$wgSVGConverterPath/" ) . $command;
@@ -339,16 +363,24 @@ class ResourceLoaderImage {
 
                        $metadata = SVGMetadataExtractor::getMetadata( $tempFilenameSvg );
                        if ( !isset( $metadata['width'] ) || !isset( $metadata['height'] ) ) {
+                               unlink( $tempFilenameSvg );
                                return false;
                        }
 
                        $handler = new SvgHandler;
-                       $handler->rasterize( $tempFilenameSvg, $tempFilenamePng, $metadata['width'], $metadata['height'] );
-
-                       $png = file_get_contents( $tempFilenamePng );
-
+                       $res = $handler->rasterize(
+                               $tempFilenameSvg,
+                               $tempFilenamePng,
+                               $metadata['width'],
+                               $metadata['height']
+                       );
                        unlink( $tempFilenameSvg );
-                       unlink( $tempFilenamePng );
+
+                       $png = null;
+                       if ( $res === true ) {
+                               $png = file_get_contents( $tempFilenamePng );
+                               unlink( $tempFilenamePng );
+                       }
 
                        return $png ?: false;
                }
index 67806ff..bf6a7dd 100644 (file)
@@ -38,7 +38,9 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
 
        protected $images = array();
        protected $variants = array();
-       protected $prefix = array();
+       protected $prefix = null;
+       protected $selectorWithoutVariant = '.{prefix}-{name}';
+       protected $selectorWithVariant = '.{prefix}-{name}-{variant}';
        protected $targets = array( 'desktop', 'mobile' );
 
        /**
@@ -57,69 +59,82 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         *         'localBasePath' => [base path],
         *         // CSS class prefix to use in all style rules
         *         'prefix' => [CSS class prefix],
+        *         // Alternatively: Format of CSS selector to use in all style rules
+        *         'selector' => [CSS selector template, variables: {prefix} {name} {variant}],
+        *         // Alternatively: When using variants
+        *         'selectorWithoutVariant' => [CSS selector template, variables: {prefix} {name}],
+        *         'selectorWithVariant' => [CSS selector template, variables: {prefix} {name} {variant}],
         *         // List of variants that may be used for the image files
         *         'variants' => array(
-        *             // ([image type] is a string, used in generated CSS class names and to match variants to images)
-        *             [image type] => array(
         *                 [variant name] => array(
         *                     'color' => [color string, e.g. '#ffff00'],
-        *                     'global' => [boolean, if true, this variant is available for all images of this type],
+        *                     'global' => [boolean, if true, this variant is available
+        *                                  for all images of this type],
         *                 ),
-        *             )
+        *             ...
         *         ),
         *         // List of image files and their options
         *         'images' => array(
-        *             [image type] => array(
         *                 [file path string],
         *                 [file path string] => array(
         *                     'name' => [image name string, defaults to file name],
-        *                     'variants' => [array of variant name strings, variants available for this image],
+        *                     'variants' => [array of variant name strings, variants
+        *                                    available for this image],
         *                 ),
-        *             )
+        *             ...
         *         ),
         *     )
         * @endcode
-        * @throws MWException
+        * @throws InvalidArgumentException
         */
        public function __construct( $options = array(), $localBasePath = null ) {
                $this->localBasePath = self::extractLocalBasePath( $options, $localBasePath );
 
-               if ( !isset( $options['prefix'] ) || !$options['prefix'] ) {
-                       throw new MWException(
-                               "Required 'prefix' option not given or empty."
-                       );
+               // Accepted combinations:
+               // * prefix
+               // * selector
+               // * selectorWithoutVariant + selectorWithVariant
+               // * prefix + selector
+               // * prefix + selectorWithoutVariant + selectorWithVariant
+
+               $prefix = isset( $options['prefix'] ) && $options['prefix'];
+               $selector = isset( $options['selector'] ) && $options['selector'];
+               $selectorWithoutVariant = isset( $options['selectorWithoutVariant'] ) && $options['selectorWithoutVariant'];
+               $selectorWithVariant = isset( $options['selectorWithVariant'] ) && $options['selectorWithVariant'];
+
+               if ( $selectorWithoutVariant && !$selectorWithVariant ) {
+                       throw new InvalidArgumentException( "Given 'selectorWithoutVariant' but no 'selectorWithVariant'." );
+               }
+               if ( $selectorWithVariant && !$selectorWithoutVariant ) {
+                       throw new InvalidArgumentException( "Given 'selectorWithVariant' but no 'selectorWithoutVariant'." );
+               }
+               if ( $selector && $selectorWithVariant ) {
+                       throw new InvalidArgumentException( "Incompatible 'selector' and 'selectorWithVariant'+'selectorWithoutVariant' given." );
+               }
+               if ( !$prefix && !$selector && !$selectorWithVariant ) {
+                       throw new InvalidArgumentException( "None of 'prefix', 'selector' or 'selectorWithVariant'+'selectorWithoutVariant' given." );
                }
 
                foreach ( $options as $member => $option ) {
                        switch ( $member ) {
                                case 'images':
-                                       if ( !is_array( $option ) ) {
-                                               throw new MWException(
-                                                       "Invalid collated file path list error. '$option' given, array expected."
-                                               );
-                                       }
-                                       foreach ( $option as $key => $value ) {
-                                               if ( !is_string( $key ) ) {
-                                                       throw new MWException(
-                                                               "Invalid collated file path list key error. '$key' given, string expected."
-                                                       );
-                                               }
-                                               $this->{$member}[$key] = (array)$value;
-                                       }
-                                       break;
-
                                case 'variants':
                                        if ( !is_array( $option ) ) {
-                                               throw new MWException(
-                                                       "Invalid variant list error. '$option' given, array expected."
+                                               throw new InvalidArgumentException(
+                                                       "Invalid list error. '$option' given, array expected."
                                                );
                                        }
                                        $this->{$member} = $option;
                                        break;
 
                                case 'prefix':
+                               case 'selectorWithoutVariant':
+                               case 'selectorWithVariant':
                                        $this->{$member} = (string)$option;
                                        break;
+
+                               case 'selector':
+                                       $this->selectorWithoutVariant = $this->selectorWithVariant = (string)$option;
                        }
                }
        }
@@ -132,6 +147,17 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                return $this->prefix;
        }
 
+       /**
+        * Get CSS selector templates used by this module.
+        * @return string
+        */
+       public function getSelectors() {
+               return array(
+                       'selectorWithoutVariant' => $this->selectorWithoutVariant,
+                       'selectorWithVariant' => $this->selectorWithVariant,
+               );
+       }
+
        /**
         * Get a ResourceLoaderImage object for given image.
         * @param string $name Image name
@@ -150,26 +176,30 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                if ( !isset( $this->imageObjects ) ) {
                        $this->imageObjects = array();
 
-                       foreach ( $this->images as $type => $list ) {
-                               foreach ( $list as $name => $options ) {
-                                       $imageDesc = is_string( $options ) ? $options : $options['image'];
+                       foreach ( $this->images as $name => $options ) {
+                               $fileDescriptor = is_string( $options ) ? $options : $options['file'];
 
-                                       $allowedVariants = array_merge(
-                                               isset( $options['variants'] ) ? $options['variants'] : array(),
-                                               $this->getGlobalVariants( $type )
+                               $allowedVariants = array_merge(
+                                       is_array( $options ) && isset( $options['variants'] ) ? $options['variants'] : array(),
+                                       $this->getGlobalVariants()
+                               );
+                               if ( isset( $this->variants ) ) {
+                                       $variantConfig = array_intersect_key(
+                                               $this->variants,
+                                               array_fill_keys( $allowedVariants, true )
                                        );
-                                       if ( isset( $this->variants[$type] ) ) {
-                                               $variantConfig = array_intersect_key(
-                                                       $this->variants[$type],
-                                                       array_fill_keys( $allowedVariants, true )
-                                               );
-                                       } else {
-                                               $variantConfig = array();
-                                       }
-
-                                       $image = new ResourceLoaderImage( $name, $this->getName(), $imageDesc, $this->localBasePath, $variantConfig );
-                                       $this->imageObjects[ $image->getName() ] = $image;
+                               } else {
+                                       $variantConfig = array();
                                }
+
+                               $image = new ResourceLoaderImage(
+                                       $name,
+                                       $this->getName(),
+                                       $fileDescriptor,
+                                       $this->localBasePath,
+                                       $variantConfig
+                               );
+                               $this->imageObjects[ $image->getName() ] = $image;
                        }
                }
 
@@ -177,43 +207,24 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
        }
 
        /**
-        * Get list of variants in this module that are 'global' for given type of images, i.e., available
-        * for every image of given type regardless of image options.
-        * @param string $type Image type
+        * Get list of variants in this module that are 'global', i.e., available
+        * for every image regardless of image options.
         * @return string[]
         */
-       public function getGlobalVariants( $type ) {
-               if ( !isset( $this->globalVariants[$type] ) ) {
-                       $this->globalVariants[$type] = array();
+       public function getGlobalVariants() {
+               if ( !isset( $this->globalVariants ) ) {
+                       $this->globalVariants = array();
 
-                       if ( isset( $this->variants[$type] ) ) {
-                               foreach ( $this->variants[$type] as $name => $config ) {
+                       if ( isset( $this->variants ) ) {
+                               foreach ( $this->variants as $name => $config ) {
                                        if ( isset( $config['global'] ) && $config['global'] ) {
-                                               $this->globalVariants[$type][] = $name;
+                                               $this->globalVariants[] = $name;
                                        }
                                }
                        }
                }
 
-               return $this->globalVariants[$type];
-       }
-
-       /**
-        * Get the type of given image.
-        * @param string $imageName Image name
-        * @return string
-        */
-       public function getImageType( $imageName ) {
-               foreach ( $this->images as $type => $list ) {
-                       foreach ( $list as $key => $value ) {
-                               $file = is_int( $key ) ? $value : $key;
-                               $options = is_array( $value ) ? $value : array();
-                               $name = isset( $options['name'] ) ? $options['name'] : pathinfo( $file, PATHINFO_FILENAME );
-                               if ( $name === $imageName ) {
-                                       return $type;
-                               }
-                       }
-               }
+               return $this->globalVariants;
        }
 
        /**
@@ -224,49 +235,64 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                // Build CSS rules
                $rules = array();
                $script = $context->getResourceLoader()->getLoadScript( $this->getSource() );
-               $prefix = $this->getPrefix();
+               $selectors = $this->getSelectors();
 
                foreach ( $this->getImages() as $name => $image ) {
-                       $type = $this->getImageType( $name );
-
                        $declarations = $this->getCssDeclarations(
                                $image->getDataUri( $context, null, 'original' ),
                                $image->getUrl( $context, $script, null, 'rasterized' )
                        );
                        $declarations = implode( "\n\t", $declarations );
-                       $rules[] = ".$prefix-$type-$name {\n\t$declarations\n}";
+                       $selector = strtr(
+                               $selectors['selectorWithoutVariant'],
+                               array(
+                                       '{prefix}' => $this->getPrefix(),
+                                       '{name}' => $name,
+                                       '{variant}' => '',
+                               )
+                       );
+                       $rules[] = "$selector {\n\t$declarations\n}";
 
-                       // TODO: Get variant configurations from $context->getSkin()
                        foreach ( $image->getVariants() as $variant ) {
                                $declarations = $this->getCssDeclarations(
                                        $image->getDataUri( $context, $variant, 'original' ),
                                        $image->getUrl( $context, $script, $variant, 'rasterized' )
                                );
                                $declarations = implode( "\n\t", $declarations );
-                               $rules[] = ".$prefix-$type-$name-$variant {\n\t$declarations\n}";
+                               $selector = strtr(
+                                       $selectors['selectorWithVariant'],
+                                       array(
+                                               '{prefix}' => $this->getPrefix(),
+                                               '{name}' => $name,
+                                               '{variant}' => $variant,
+                                       )
+                               );
+                               $rules[] = "$selector {\n\t$declarations\n}";
                        }
                }
 
                $style = implode( "\n", $rules );
-               if ( $this->getFlip( $context ) ) {
-                       $style = CSSJanus::transform( $style, true, false );
-               }
                return array( 'all' => $style );
        }
 
        /**
+        * SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG).
+        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique
+        *
+        * Keep synchronized with the .background-image-svg LESS mixin in
+        * /resources/src/mediawiki.less/mediawiki.mixins.less.
+        *
         * @param string $primary Primary URI
         * @param string $fallback Fallback URI
         * @return string[] CSS declarations to use given URIs as background-image
         */
        protected function getCssDeclarations( $primary, $fallback ) {
-               // SVG support using a transparent gradient to guarantee cross-browser
-               // compatibility (browsers able to understand gradient syntax support also SVG).
-               // http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique
                return array(
                        "background-image: url($fallback);",
                        "background-image: -webkit-linear-gradient(transparent, transparent), url($primary);",
                        "background-image: linear-gradient(transparent, transparent), url($primary);",
+                       "background-image: -o-linear-gradient(transparent, transparent), url($fallback);",
                );
        }
 
index 4c2c2b2..ed16521 100644 (file)
@@ -458,21 +458,26 @@ abstract class ResourceLoaderModule {
                        return 1;
                }
 
+               // Embed the hash itself in the cache key. This allows for a few nifty things:
+               // - During deployment, servers with old and new versions of the code communicating
+               //   with the same memcached will not override the same key repeatedly increasing
+               //   the timestamp.
+               // - In case of the definition changing and then changing back in a short period of time
+               //   (e.g. in case of a revert or a corrupt server) the old timestamp and client-side cache
+               //   url will be re-used.
+               // - If different context-combinations (e.g. same skin, same language or some combination
+               //   thereof) result in the same definition, they will use the same hash and timestamp.
                $cache = wfGetCache( CACHE_ANYTHING );
-               $key = wfMemcKey( 'resourceloader', 'modulemodifiedhash', $this->getName(), $hash );
+               $key = wfMemcKey( 'resourceloader', 'hashmtime', $this->getName(), $hash );
 
                $data = $cache->get( $key );
-               if ( is_array( $data ) && $data['hash'] === $hash ) {
-                       // Hash is still the same, re-use the timestamp of when we first saw this hash.
-                       return $data['timestamp'];
+               if ( is_int( $data ) && $data > 0 ) {
+                       // We've seen this hash before, re-use the timestamp of when we first saw it.
+                       return $data;
                }
 
                $timestamp = time();
-               $cache->set( $key, array(
-                       'hash' => $hash,
-                       'timestamp' => $timestamp,
-               ) );
-
+               $cache->set( $key, $timestamp );
                return $timestamp;
        }
 
@@ -504,18 +509,7 @@ abstract class ResourceLoaderModule {
                }
 
                $hash = md5( json_encode( $summary ) );
-
                $cache = wfGetCache( CACHE_ANYTHING );
-
-               // Embed the hash itself in the cache key. This allows for a few nifty things:
-               // - During deployment, servers with old and new versions of the code communicating
-               //   with the same memcached will not override the same key repeatedly increasing
-               //   the timestamp.
-               // - In case of the definition changing and then changing back in a short period of time
-               //   (e.g. in case of a revert or a corrupt server) the old timestamp and client-side cache
-               //   url will be re-used.
-               // - If different context-combinations (e.g. same skin, same language or some combination
-               //   thereof) result in the same definition, they will use the same hash and timestamp.
                $key = wfMemcKey( 'resourceloader', 'moduledefinition', $this->getName(), $hash );
 
                $data = $cache->get( $key );
@@ -524,12 +518,11 @@ abstract class ResourceLoaderModule {
                        return $data;
                }
 
-               wfDebugLog( 'resourceloader', __METHOD__ . ": New definition hash for module "
-                       . "{$this->getName()} in context {$context->getHash()}: $hash." );
+               wfDebugLog( 'resourceloader', __METHOD__ . ": New definition for module "
+                       . "{$this->getName()} in context \"{$context->getHash()}\"" );
 
                $timestamp = time();
                $cache->set( $key, $timestamp );
-
                return $timestamp;
        }
 
@@ -636,9 +629,10 @@ abstract class ResourceLoaderModule {
         * @return int UNIX timestamp
         */
        protected static function safeFilemtime( $filename ) {
-               if ( !file_exists( $filename ) ) {
-                       return 1;
-               }
-               return filemtime( $filename );
+               wfSuppressWarnings();
+               $mtime = filemtime( $filename ) ?: 1;
+               wfRestoreWarnings();
+
+               return $mtime;
        }
 }
diff --git a/includes/resourceloader/ResourceLoaderNoscriptModule.php b/includes/resourceloader/ResourceLoaderNoscriptModule.php
deleted file mode 100644 (file)
index 61927d7..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * Resource loader for site customizations for users without JavaScript enabled.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write 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 Trevor Parscal
- * @author Roan Kattouw
- */
-
-/**
- * Module for site customizations
- */
-class ResourceLoaderNoscriptModule extends ResourceLoaderWikiModule {
-
-       /* Protected Methods */
-
-       /**
-        * Gets list of pages used by this module.  Obviously, it makes absolutely no
-        * sense to include JavaScript files here... :D
-        *
-        * @param ResourceLoaderContext $context
-        *
-        * @return array List of pages
-        */
-       protected function getPages( ResourceLoaderContext $context ) {
-               return array( 'MediaWiki:Noscript.css' => array( 'type' => 'style' ) );
-       }
-
-       /* Methods */
-
-       /**
-        * Gets group name
-        *
-        * @return string Name of group
-        */
-       public function getGroup() {
-               return 'noscript';
-       }
-}
index 1d9721a..19e0bae 100644 (file)
  */
 class ResourceLoaderSiteModule extends ResourceLoaderWikiModule {
 
-       /* Protected Methods */
-
        /**
-        * Gets list of pages used by this module
+        * Get list of pages used by this module
         *
         * @param ResourceLoaderContext $context
-        *
         * @return array List of pages
         */
        protected function getPages( ResourceLoaderContext $context ) {
@@ -45,18 +42,16 @@ class ResourceLoaderSiteModule extends ResourceLoaderWikiModule {
                if ( $this->getConfig()->get( 'UseSiteCss' ) ) {
                        $pages['MediaWiki:Common.css'] = array( 'type' => 'style' );
                        $pages['MediaWiki:' . ucfirst( $context->getSkin() ) . '.css'] = array( 'type' => 'style' );
+                       $pages['MediaWiki:Print.css'] = array( 'type' => 'style', 'media' => 'print' );
 
                }
-               $pages['MediaWiki:Print.css'] = array( 'type' => 'style', 'media' => 'print' );
                return $pages;
        }
 
-       /* Methods */
-
        /**
-        * Gets group name
+        * Get group name
         *
-        * @return string Name of group
+        * @return string
         */
        public function getGroup() {
                return 'site';
index 9835932..3ba63e6 100644 (file)
@@ -31,11 +31,33 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
         */
        public function getStyles( ResourceLoaderContext $context ) {
                $logo = $this->getConfig()->get( 'Logo' );
+               $logoHD = $this->getConfig()->get( 'LogoHD' );
                $styles = parent::getStyles( $context );
                $styles['all'][] = '.mw-wiki-logo { background-image: ' .
                        CSSMin::buildUrlValue( $logo ) .
                        '; }';
-
+               if ( $logoHD ) {
+                       if ( isset( $logoHD['1.5x'] ) ) {
+                               $styles[
+                                       '(-webkit-min-device-pixel-ratio: 1.5), ' .
+                                       '(min--moz-device-pixel-ratio: 1.5), ' .
+                                       '(min-resolution: 1.5dppx), ' .
+                                       '(min-resolution: 144dpi)'
+                               ][] = '.mw-wiki-logo { background-image: ' .
+                               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-resolution: 2dppx), ' .
+                                       '(min-resolution: 192dpi)'
+                               ][] = '.mw-wiki-logo { background-image: ' .
+                               CSSMin::buildUrlValue( $logoHD['2x'] ) . ';' .
+                               'background-size: 135px auto; }';
+                       }
+               }
                return $styles;
        }
 
@@ -64,6 +86,7 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
         */
        public function getModifiedHash( ResourceLoaderContext $context ) {
                $logo = $this->getConfig()->get( 'Logo' );
-               return md5( parent::getModifiedHash( $context ) . $logo );
+               $logoHD = $this->getConfig()->get( 'LogoHD' );
+               return md5( parent::getModifiedHash( $context ) . $logo . json_encode( $logoHD ) );
        }
 }
diff --git a/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php b/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php
new file mode 100644 (file)
index 0000000..5c91709
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Resource loader module for populating special characters data for some
+ * editing extensions to use.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Resource loader module for populating special characters data for some
+ * editing extensions to use.
+ */
+class ResourceLoaderSpecialCharacterDataModule extends ResourceLoaderModule {
+       private $path = "resources/src/mediawiki.language/specialcharacters.json";
+       protected $targets = array( 'desktop', 'mobile' );
+
+       /**
+        * Get all the dynamic data.
+        *
+        * @return array
+        */
+       protected function getData() {
+               return json_decode( file_get_contents( $this->path ) );
+       }
+
+       /**
+        * @param ResourceLoaderContext $context
+        * @return string JavaScript code
+        */
+       public function getScript( ResourceLoaderContext $context ) {
+               return Xml::encodeJsCall(
+                       'mw.language.setSpecialCharacters',
+                       array(
+                               $this->getData()
+                       ),
+                       ResourceLoader::inDebugMode()
+               );
+       }
+
+       /**
+        * @param ResourceLoaderContext $context
+        * @return int UNIX timestamp
+        */
+       public function getModifiedTime( ResourceLoaderContext $context ) {
+               return static::safeFilemtime( $this->path );
+       }
+
+       /**
+        * @param ResourceLoaderContext $context
+        * @return string Hash
+        */
+       public function getModifiedHash( ResourceLoaderContext $context ) {
+               return md5( serialize( $this->getData() ) );
+       }
+
+       /**
+        * @return array
+        */
+       public function getDependencies() {
+               return array( 'mediawiki.language' );
+       }
+
+       /**
+        * @return array
+        */
+       public function getMessages() {
+               return array(
+                       'special-characters-group-latin',
+                       'special-characters-group-latinextended',
+                       'special-characters-group-ipa',
+                       'special-characters-group-symbols',
+                       'special-characters-group-greek',
+                       'special-characters-group-cyrillic',
+                       'special-characters-group-arabic',
+                       'special-characters-group-arabicextended',
+                       'special-characters-group-persian',
+                       'special-characters-group-hebrew',
+                       'special-characters-group-bangla',
+                       'special-characters-group-tamil',
+                       'special-characters-group-telugu',
+                       'special-characters-group-sinhala',
+                       'special-characters-group-devanagari',
+                       'special-characters-group-gujarati',
+                       'special-characters-group-thai',
+                       'special-characters-group-lao',
+                       'special-characters-group-khmer',
+                       'special-characters-title-endash',
+                       'special-characters-title-emdash',
+                       'special-characters-title-minus'
+               );
+       }
+}
index ee350cf..417cfce 100644 (file)
  */
 class ResourceLoaderUserGroupsModule extends ResourceLoaderWikiModule {
 
-       /* Protected Members */
-
        protected $origin = self::ORIGIN_USER_SITEWIDE;
        protected $targets = array( 'desktop', 'mobile' );
 
-       /* Protected Methods */
-
        /**
         * @param ResourceLoaderContext $context
         * @return array
@@ -63,9 +59,9 @@ class ResourceLoaderUserGroupsModule extends ResourceLoaderWikiModule {
                return $pages;
        }
 
-       /* Methods */
-
        /**
+        * Get group name
+        *
         * @return string
         */
        public function getGroup() {
index 1b6d1de..a097844 100644 (file)
  */
 class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
 
-       /* Protected Members */
-
        protected $origin = self::ORIGIN_USER_INDIVIDUAL;
 
-       /* Protected Methods */
-
        /**
+        * Get list of pages used by this module
+        *
         * @param ResourceLoaderContext $context
-        * @return array
+        * @return array List of pages
         */
        protected function getPages( ResourceLoaderContext $context ) {
-               $username = $context->getUser();
-
-               if ( $username === null ) {
-                       return array();
-               }
-
                $allowUserJs = $this->getConfig()->get( 'AllowUserJs' );
                $allowUserCss = $this->getConfig()->get( 'AllowUserCss' );
-
                if ( !$allowUserJs && !$allowUserCss ) {
                        return array();
                }
 
-               // Get the normalized title of the user's user page
-               $userpageTitle = Title::makeTitleSafe( NS_USER, $username );
-
-               if ( !$userpageTitle instanceof Title ) {
+               $user = $context->getUserObj();
+               if ( !$user || $user->isAnon() ) {
                        return array();
                }
 
-               $userpage = $userpageTitle->getPrefixedDBkey(); // Needed so $excludepages works
+               // Needed so $excludepages works
+               $userPage = $user->getUserPage()->getPrefixedDBkey();
 
                $pages = array();
                if ( $allowUserJs ) {
-                       $pages["$userpage/common.js"] = array( 'type' => 'script' );
-                       $pages["$userpage/" . $context->getSkin() . '.js'] = array( 'type' => 'script' );
+                       $pages["$userPage/common.js"] = array( 'type' => 'script' );
+                       $pages["$userPage/" . $context->getSkin() . '.js'] = array( 'type' => 'script' );
                }
                if ( $allowUserCss ) {
-                       $pages["$userpage/common.css"] = array( 'type' => 'style' );
-                       $pages["$userpage/" . $context->getSkin() . '.css'] = array( 'type' => 'style' );
+                       $pages["$userPage/common.css"] = array( 'type' => 'style' );
+                       $pages["$userPage/" . $context->getSkin() . '.css'] = array( 'type' => 'style' );
                }
 
                // Hack for bug 26283: if we're on a preview page for a CSS/JS page,
@@ -82,9 +72,9 @@ class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
                return $pages;
        }
 
-       /* Methods */
-
        /**
+        * Get group name
+        *
         * @return string
         */
        public function getGroup() {
index 1a1a6d0..7b44cc6 100644 (file)
  * because of its dependence on the functionality of
  * Title::isCssJsSubpage.
  */
-abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
+class ResourceLoaderWikiModule extends ResourceLoaderModule {
 
-       /* Protected Members */
-
-       # Origin is user-supplied code
+       // Origin defaults to users with sitewide authority
        protected $origin = self::ORIGIN_USER_SITEWIDE;
 
        // In-object cache for title info
        protected $titleInfo = array();
 
-       /* Abstract Protected Methods */
+       // List of page names that contain CSS
+       protected $styles = array();
+
+       // List of page names that contain JavaScript
+       protected $scripts = array();
+
+       // Group of module
+       protected $group;
+
+       /**
+        * @param array $options For back-compat, this can be omitted in favour of overwriting getPages.
+        */
+       public function __construct( array $options = null ) {
+               if ( isset( $options['styles'] ) ) {
+                       $this->styles = $options['styles'];
+               }
+               if ( isset( $options['scripts'] ) ) {
+                       $this->scripts = $options['scripts'];
+               }
+               if ( isset( $options['group'] ) ) {
+                       $this->group = $options['group'];
+               }
+       }
 
        /**
         * Subclasses should return an associative array of resources in the module.
@@ -57,9 +77,34 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
         * @param ResourceLoaderContext $context
         * @return array
         */
-       abstract protected function getPages( ResourceLoaderContext $context );
+       protected function getPages( ResourceLoaderContext $context ) {
+               $config = $this->getConfig();
+               $pages = array();
+
+               // Filter out pages from origins not allowed by the current wiki configuration.
+               if ( $config->get( 'UseSiteJs' ) ) {
+                       foreach ( $this->scripts as $script ) {
+                               $pages[$script] = array( 'type' => 'script' );
+                       }
+               }
+
+               if ( $config->get( 'UseSiteCss' ) ) {
+                       foreach ( $this->styles as $style ) {
+                               $pages[$style] = array( 'type' => 'style' );
+                       }
+               }
+
+               return $pages;
+       }
 
-       /* Protected Methods */
+       /**
+        * Get group name
+        *
+        * @return string
+        */
+       public function getGroup() {
+               return $this->group;
+       }
 
        /**
         * Get the Database object used in getTitleMTimes(). Defaults to the local slave DB
@@ -105,8 +150,6 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                return $content->serialize( $format );
        }
 
-       /* Methods */
-
        /**
         * @param ResourceLoaderContext $context
         * @return string
index b4ac628..f16fd15 100644 (file)
@@ -92,7 +92,7 @@ abstract class RevDelList extends RevisionListBase {
                $this->res = false;
                $dbw = wfGetDB( DB_MASTER );
                $this->doQuery( $dbw );
-               $dbw->begin( __METHOD__ );
+               $dbw->startAtomic( __METHOD__ );
                $status = Status::newGood();
                $missing = array_flip( $this->ids );
                $this->clearFileOps();
@@ -207,10 +207,15 @@ abstract class RevDelList extends RevisionListBase {
                        'authorIds' => $authorIds,
                        'authorIPs' => $authorIPs
                ) );
-               $dbw->commit( __METHOD__ );
 
                // Clear caches
-               $status->merge( $this->doPostCommitUpdates() );
+               $that = $this;
+               $dbw->onTransactionIdle( function() use ( $that ) {
+                       $that->doPostCommitUpdates();
+               } );
+
+               $dbw->endAtomic( __METHOD__ );
+
                return $status;
        }
 
@@ -250,13 +255,19 @@ abstract class RevDelList extends RevisionListBase {
                // Add params for affected page and ids
                $logParams = $this->getLogParams( $params );
                // Actually add the deletion log entry
-               $log = new LogPage( $logType );
-               $logid = $log->addEntry( $this->getLogAction(), $params['title'],
-                       $params['comment'], $logParams, $this->getUser() );
+               $logEntry = new ManualLogEntry( $logType, $this->getLogAction() );
+               $logEntry->setTarget( $params['title'] );
+               $logEntry->setComment( $params['comment'] );
+               $logEntry->setParameters( $logParams );
+               $logEntry->setPerformer( $this->getUser() );
                // Allow for easy searching of deletion log items for revision/log items
-               $log->addRelations( $field, $params['ids'], $logid );
-               $log->addRelations( 'target_author_id', $params['authorIds'], $logid );
-               $log->addRelations( 'target_author_ip', $params['authorIPs'], $logid );
+               $logEntry->setRelations( array(
+                       $field => $params['ids'],
+                       'target_author_id' => $params['authorIds'],
+                       'target_author_ip' => $params['authorIPs'],
+               ) );
+               $logId = $logEntry->insert();
+               $logEntry->publish( $logId );
        }
 
        /**
@@ -274,10 +285,10 @@ abstract class RevDelList extends RevisionListBase {
         */
        public function getLogParams( $params ) {
                return array(
-                       $this->getType(),
-                       implode( ',', $params['ids'] ),
-                       "ofield={$params['oldBits']}",
-                       "nfield={$params['newBits']}"
+                       '4::type' => $this->getType(),
+                       '5::ids' => $params['ids'],
+                       '6::ofield' => $params['oldBits'],
+                       '7::nfield' => $params['newBits'],
                );
        }
 
index 86c5af3..d8bd2f7 100644 (file)
@@ -95,9 +95,9 @@ class RevDelLogList extends RevDelList {
 
        public function getLogParams( $params ) {
                return array(
-                       implode( ',', $params['ids'] ),
-                       "ofield={$params['oldBits']}",
-                       "nfield={$params['newBits']}"
+                       '4::ids' => $params['ids'],
+                       '5::ofield' => $params['oldBits'],
+                       '6::nfield' => $params['newBits'],
                );
        }
 }
diff --git a/includes/site/CachingSiteStore.php b/includes/site/CachingSiteStore.php
new file mode 100644 (file)
index 0000000..9243f12
--- /dev/null
@@ -0,0 +1,195 @@
+<?php
+
+/**
+ * Represents the site configuration of a wiki.
+ * Holds a list of sites (ie SiteList), with a caching layer.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.25
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class CachingSiteStore implements SiteStore {
+
+       /**
+        * @var SiteList|null
+        */
+       private $sites = null;
+
+       /**
+        * @var string|null
+        */
+       private $cacheKey;
+
+       /**
+        * @var int
+        */
+       private $cacheTimeout;
+
+       /**
+        * @var BagOStuff
+        */
+       private $cache;
+
+       /**
+        * @var SiteStore
+        */
+       private $siteStore;
+
+       /**
+        * @param SiteStore $siteStore
+        * @param BagOStuff $cache
+        * @param string|null $cacheKey
+        * @param int $cacheTimeout
+        */
+       public function __construct(
+               SiteStore $siteStore,
+               BagOStuff $cache,
+               $cacheKey = null,
+               $cacheTimeout = 3600
+       ) {
+               $this->siteStore = $siteStore;
+               $this->cache = $cache;
+               $this->cacheKey = $cacheKey;
+               $this->cacheTimeout = $cacheTimeout;
+       }
+
+       /**
+        * Constructs a cache key to use for caching the list of sites.
+        *
+        * This includes the concrete class name of the site list as well as a version identifier
+        * for the list's serialization, to avoid problems when unserializing site lists serialized
+        * by an older version, e.g. when reading from a cache.
+        *
+        * The cache key also includes information about where the sites were loaded from, e.g.
+        * the name of a database table.
+        *
+        * @see SiteList::getSerialVersionId
+        *
+        * @return string The cache key.
+        */
+       private function getCacheKey() {
+               if ( $this->cacheKey === null ) {
+                       $type = 'SiteList#' . SiteList::getSerialVersionId();
+                       $this->cacheKey = wfMemcKey( "sites/$type" );
+               }
+
+               return $this->cacheKey;
+       }
+
+       /**
+        * @see SiteStore::getSites
+        *
+        * @since 1.25
+        *
+        * @return SiteList
+        */
+       public function getSites() {
+               if ( $this->sites === null ) {
+                       $this->sites = $this->cache->get( $this->getCacheKey() );
+
+                       if ( !is_object( $this->sites ) ) {
+                               $this->sites = $this->siteStore->getSites();
+
+                               $this->cache->set( $this->getCacheKey(), $this->sites, $this->cacheTimeout );
+                       }
+               }
+
+               return $this->sites;
+       }
+
+       /**
+        * @see SiteStore::getSite
+        *
+        * @since 1.25
+        *
+        * @param string $globalId
+        *
+        * @return Site|null
+        */
+       public function getSite( $globalId ) {
+               $sites = $this->getSites();
+
+               return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
+       }
+
+       /**
+        * @see SiteStore::saveSite
+        *
+        * @since 1.25
+        *
+        * @param Site $site
+        *
+        * @return bool Success indicator
+        */
+       public function saveSite( Site $site ) {
+               return $this->saveSites( array( $site ) );
+       }
+
+       /**
+        * @see SiteStore::saveSites
+        *
+        * @since 1.25
+        *
+        * @param Site[] $sites
+        *
+        * @return bool Success indicator
+        */
+       public function saveSites( array $sites ) {
+               if ( empty( $sites ) ) {
+                       return true;
+               }
+
+               $success = $this->siteStore->saveSites( $sites );
+
+               // purge cache
+               $this->reset();
+
+               return $success;
+       }
+
+       /**
+        * Purges the internal and external cache of the site list, forcing the list
+        * of sites to be reloaded.
+        *
+        * @since 1.25
+        */
+       public function reset() {
+               // purge cache
+               $this->cache->delete( $this->getCacheKey() );
+               $this->sites = null;
+       }
+
+       /**
+        * Clears the list of sites stored.
+        *
+        * @see SiteStore::clear()
+        *
+        * @return bool Success
+        */
+       public function clear() {
+               $this->reset();
+
+               return $this->siteStore->clear();
+       }
+
+}
diff --git a/includes/site/DBSiteStore.php b/includes/site/DBSiteStore.php
new file mode 100644 (file)
index 0000000..f167584
--- /dev/null
@@ -0,0 +1,345 @@
+<?php
+
+/**
+ * Represents the site configuration of a wiki.
+ * Holds a list of sites (ie SiteList), stored in the database.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.25
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class DBSiteStore implements SiteStore {
+
+       /**
+        * @var SiteList|null
+        */
+       protected $sites = null;
+
+       /**
+        * @var ORMTable
+        */
+       protected $sitesTable;
+
+       /**
+        * @since 1.25
+        *
+        * @param ORMTable|null $sitesTable
+        */
+       public function __construct( ORMTable $sitesTable = null ) {
+               if ( $sitesTable === null ) {
+                       $sitesTable = $this->newSitesTable();
+               }
+
+               $this->sitesTable = $sitesTable;
+       }
+
+       /**
+        * @see SiteStore::getSites
+        *
+        * @since 1.25
+        *
+        * @return SiteList
+        */
+       public function getSites() {
+               $this->loadSites();
+
+               return $this->sites;
+       }
+
+       /**
+        * Returns a new Site object constructed from the provided ORMRow.
+        *
+        * @since 1.25
+        *
+        * @param ORMRow $siteRow
+        *
+        * @return Site
+        */
+       protected function siteFromRow( ORMRow $siteRow ) {
+
+               $site = Site::newForType( $siteRow->getField( 'type', Site::TYPE_UNKNOWN ) );
+
+               $site->setGlobalId( $siteRow->getField( 'global_key' ) );
+
+               $site->setInternalId( $siteRow->getField( 'id' ) );
+
+               if ( $siteRow->hasField( 'forward' ) ) {
+                       $site->setForward( $siteRow->getField( 'forward' ) );
+               }
+
+               if ( $siteRow->hasField( 'group' ) ) {
+                       $site->setGroup( $siteRow->getField( 'group' ) );
+               }
+
+               if ( $siteRow->hasField( 'language' ) ) {
+                       $site->setLanguageCode( $siteRow->getField( 'language' ) === ''
+                               ? null
+                               : $siteRow->getField( 'language' )
+                       );
+               }
+
+               if ( $siteRow->hasField( 'source' ) ) {
+                       $site->setSource( $siteRow->getField( 'source' ) );
+               }
+
+               if ( $siteRow->hasField( 'data' ) ) {
+                       $site->setExtraData( $siteRow->getField( 'data' ) );
+               }
+
+               if ( $siteRow->hasField( 'config' ) ) {
+                       $site->setExtraConfig( $siteRow->getField( 'config' ) );
+               }
+
+               return $site;
+       }
+
+       /**
+        * Get a new ORMRow from a Site object
+        *
+        * @since 1.25
+        *
+        * @param Site $site
+        *
+        * @return ORMRow
+        */
+       protected function getRowFromSite( Site $site ) {
+               $fields = array(
+                       // Site data
+                       'global_key' => $site->getGlobalId(), // TODO: check not null
+                       'type' => $site->getType(),
+                       'group' => $site->getGroup(),
+                       'source' => $site->getSource(),
+                       'language' => $site->getLanguageCode() === null ? '' : $site->getLanguageCode(),
+                       'protocol' => $site->getProtocol(),
+                       'domain' => strrev( $site->getDomain() ) . '.',
+                       'data' => $site->getExtraData(),
+
+                       // Site config
+                       'forward' => $site->shouldForward(),
+                       'config' => $site->getExtraConfig(),
+               );
+
+               if ( $site->getInternalId() !== null ) {
+                       $fields['id'] = $site->getInternalId();
+               }
+
+               return new ORMRow( $this->sitesTable, $fields );
+       }
+
+       /**
+        * Fetches the site from the database and loads them into the sites field.
+        *
+        * @since 1.25
+        */
+       protected function loadSites() {
+               $this->sites = new SiteList();
+
+               foreach ( $this->sitesTable->select() as $siteRow ) {
+                       $this->sites[] = $this->siteFromRow( $siteRow );
+               }
+
+               // Batch load the local site identifiers.
+               $ids = wfGetDB( $this->sitesTable->getReadDb() )->select(
+                       'site_identifiers',
+                       array(
+                               'si_site',
+                               'si_type',
+                               'si_key',
+                       ),
+                       array(),
+                       __METHOD__
+               );
+
+               foreach ( $ids as $id ) {
+                       if ( $this->sites->hasInternalId( $id->si_site ) ) {
+                               $site = $this->sites->getSiteByInternalId( $id->si_site );
+                               $site->addLocalId( $id->si_type, $id->si_key );
+                               $this->sites->setSite( $site );
+                       }
+               }
+       }
+
+       /**
+        * @see SiteStore::getSite
+        *
+        * @since 1.25
+        *
+        * @param string $globalId
+        *
+        * @return Site|null
+        */
+       public function getSite( $globalId ) {
+               if ( $this->sites === null ) {
+                       $this->sites = $this->getSites();
+               }
+
+               return $this->sites->hasSite( $globalId ) ? $this->sites->getSite( $globalId ) : null;
+       }
+
+       /**
+        * @see SiteStore::saveSite
+        *
+        * @since 1.25
+        *
+        * @param Site $site
+        *
+        * @return bool Success indicator
+        */
+       public function saveSite( Site $site ) {
+               return $this->saveSites( array( $site ) );
+       }
+
+       /**
+        * @see SiteStore::saveSites
+        *
+        * @since 1.25
+        *
+        * @param Site[] $sites
+        *
+        * @return bool Success indicator
+        */
+       public function saveSites( array $sites ) {
+               if ( empty( $sites ) ) {
+                       return true;
+               }
+
+               $dbw = $this->sitesTable->getWriteDbConnection();
+
+               $dbw->startAtomic( __METHOD__ );
+
+               $success = true;
+
+               $internalIds = array();
+               $localIds = array();
+
+               foreach ( $sites as $site ) {
+                       if ( $site->getInternalId() !== null ) {
+                               $internalIds[] = $site->getInternalId();
+                       }
+
+                       $siteRow = $this->getRowFromSite( $site );
+                       $success = $siteRow->save( __METHOD__ ) && $success;
+
+                       foreach ( $site->getLocalIds() as $idType => $ids ) {
+                               foreach ( $ids as $id ) {
+                                       $localIds[] = array( $siteRow->getId(), $idType, $id );
+                               }
+                       }
+               }
+
+               if ( $internalIds !== array() ) {
+                       $dbw->delete(
+                               'site_identifiers',
+                               array( 'si_site' => $internalIds ),
+                               __METHOD__
+                       );
+               }
+
+               foreach ( $localIds as $localId ) {
+                       $dbw->insert(
+                               'site_identifiers',
+                               array(
+                                       'si_site' => $localId[0],
+                                       'si_type' => $localId[1],
+                                       'si_key' => $localId[2],
+                               ),
+                               __METHOD__
+                       );
+               }
+
+               $dbw->endAtomic( __METHOD__ );
+
+               $this->reset();
+
+               return $success;
+       }
+
+       /**
+        * Resets the SiteList
+        *
+        * @since 1.25
+        */
+       public function reset() {
+               $this->sites = null;
+       }
+
+       /**
+        * Clears the list of sites stored in the database.
+        *
+        * @see SiteStore::clear()
+        *
+        * @return bool Success
+        */
+       public function clear() {
+               $dbw = $this->sitesTable->getWriteDbConnection();
+
+               $dbw->startAtomic( __METHOD__ );
+               $ok = $dbw->delete( 'sites', '*', __METHOD__ );
+               $ok = $dbw->delete( 'site_identifiers', '*', __METHOD__ ) && $ok;
+               $dbw->endAtomic( __METHOD__ );
+
+               $this->reset();
+
+               return $ok;
+       }
+
+       /**
+        * @since 1.25
+        *
+        * @return ORMTable
+        */
+       protected function newSitesTable() {
+               return new ORMTable(
+                       'sites',
+                       array(
+                               'id' => 'id',
+
+                               // Site data
+                               'global_key' => 'str',
+                               'type' => 'str',
+                               'group' => 'str',
+                               'source' => 'str',
+                               'language' => 'str',
+                               'protocol' => 'str',
+                               'domain' => 'str',
+                               'data' => 'array',
+
+                               // Site config
+                               'forward' => 'bool',
+                               'config' => 'array',
+                       ),
+                       array(
+                               'type' => Site::TYPE_UNKNOWN,
+                               'group' => Site::GROUP_NONE,
+                               'source' => Site::SOURCE_LOCAL,
+                               'data' => array(),
+
+                               'forward' => false,
+                               'config' => array(),
+                               'language' => '',
+                       ),
+                       'ORMRow',
+                       'site_'
+               );
+       }
+
+}
diff --git a/includes/site/FileBasedSiteLookup.php b/includes/site/FileBasedSiteLookup.php
new file mode 100644 (file)
index 0000000..9654440
--- /dev/null
@@ -0,0 +1,139 @@
+<?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
+ *
+ * @license GNU GPL v2+
+ */
+
+/**
+ * Provides a file-based cache of a SiteStore. The sites are stored in
+ * a json file. (see docs/sitescache.txt regarding format)
+ *
+ * The cache can be built with the rebuildSitesCache.php maintenance script,
+ * and a MediaWiki instance can be setup to use this by setting the
+ * 'wgSitesCacheFile' configuration to the cache file location.
+ *
+ * @since 1.25
+ */
+class FileBasedSiteLookup implements SiteLookup {
+
+       /**
+        * @var SiteList
+        */
+       private $sites = null;
+
+       /**
+        * @var string
+        */
+       private $cacheFile;
+
+       /**
+        * @param string $cacheFile
+        */
+       public function __construct( $cacheFile ) {
+               $this->cacheFile = $cacheFile;
+       }
+
+       /**
+        * @since 1.25
+        *
+        * @return SiteList
+        */
+       public function getSites() {
+               if ( $this->sites === null ) {
+                       $this->sites = $this->loadSitesFromCache();
+               }
+
+               return $this->sites;
+       }
+
+       /**
+        * @param string $globalId
+        *
+        * @since 1.25
+        *
+        * @return Site|null
+        */
+       public function getSite( $globalId ) {
+               $sites = $this->getSites();
+
+               return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
+       }
+
+       /**
+        * @return SiteList
+        */
+       private function loadSitesFromCache() {
+               $data = $this->loadJsonFile();
+
+               $sites = new SiteList();
+
+               // @todo lazy initialize the site objects in the site list (e.g. only when needed to access)
+               foreach ( $data['sites'] as $siteArray ) {
+                       $sites[] = $this->newSiteFromArray( $siteArray );
+               }
+
+               return $sites;
+       }
+
+       /**
+        * @throws MWException
+        * @return array see docs/sitescache.txt for format of the array.
+        */
+       private function loadJsonFile() {
+               if ( !is_readable( $this->cacheFile ) ) {
+                       throw new MWException( 'SiteList cache file not found.' );
+               }
+
+               $contents = file_get_contents( $this->cacheFile );
+               $data = json_decode( $contents, true );
+
+               if ( !is_array( $data ) || !is_array( $data['sites'] )
+                       || !array_key_exists( 'sites', $data )
+               ) {
+                       throw new MWException( 'SiteStore json cache data is invalid.' );
+               }
+
+               return $data;
+       }
+
+       /**
+        * @param array $data
+        *
+        * @return Site
+        */
+       private function newSiteFromArray( array $data ) {
+               $siteType = array_key_exists( 'type', $data ) ? $data['type'] : Site::TYPE_UNKNOWN;
+               $site = Site::newForType( $siteType );
+
+               $site->setGlobalId( $data['globalid'] );
+               $site->setForward( $data['forward'] );
+               $site->setGroup( $data['group'] );
+               $site->setLanguageCode( $data['language'] );
+               $site->setSource( $data['source'] );
+               $site->setExtraData( $data['data'] );
+               $site->setExtraConfig( $data['config'] );
+
+               foreach ( $data['identifiers'] as $identifier ) {
+                       $site->addLocalId( $identifier['type'], $identifier['key'] );
+               }
+
+               return $site;
+       }
+
+}
diff --git a/includes/site/HashSiteStore.php b/includes/site/HashSiteStore.php
new file mode 100644 (file)
index 0000000..2c25472
--- /dev/null
@@ -0,0 +1,123 @@
+<?php
+/**
+ * In-memory implementation of SiteStore.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * In-memory SiteStore implementation, storing sites in an associative array.
+ *
+ * @author Daniel Kinzler
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ *
+ * @since 1.25
+ * @ingroup Site
+ */
+class HashSiteStore implements SiteStore {
+
+       /**
+        * @var Site[]
+        */
+       private $sites = array();
+
+       /**
+        * @param array $sites
+        */
+       public function __construct( $sites = array() ) {
+               $this->saveSites( $sites );
+       }
+
+       /**
+        * Saves the provided site.
+        *
+        * @since 1.25
+        *
+        * @param Site $site
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSite( Site $site ) {
+               $this->sites[$site->getGlobalId()] = $site;
+
+               return true;
+       }
+
+       /**
+        * Saves the provided sites.
+        *
+        * @since 1.25
+        *
+        * @param Site[] $sites
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSites( array $sites ) {
+               foreach ( $sites as $site ) {
+                       $this->saveSite( $site );
+               }
+
+               return true;
+       }
+
+       /**
+        * Returns the site with provided global id, or null if there is no such site.
+        *
+        * @since 1.25
+        *
+        * @param string $globalId
+        * @param string $source either 'cache' or 'recache'.
+        *                       If 'cache', the values can (but not obliged) come from a cache.
+        *
+        * @return Site|null
+        */
+       public function getSite( $globalId, $source = 'cache' ) {
+               if ( isset( $this->sites[$globalId] ) ) {
+                       return $this->sites[$globalId];
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * Returns a list of all sites. By default this site is
+        * fetched from the cache, which can be changed to loading
+        * the list from the database using the $useCache parameter.
+        *
+        * @since 1.25
+        *
+        * @param string $source either 'cache' or 'recache'.
+        *                       If 'cache', the values can (but not obliged) come from a cache.
+        *
+        * @return SiteList
+        */
+       public function getSites( $source = 'cache' ) {
+               return new SiteList( $this->sites );
+       }
+
+       /**
+        * Deletes all sites from the database. After calling clear(), getSites() will return an empty
+        * list and getSite() will return null until saveSite() or saveSites() is called.
+        */
+       public function clear() {
+               $this->sites = array();
+
+               return true;
+       }
+
+}
index 9711f04..95631f8 100644 (file)
@@ -116,7 +116,7 @@ class MediaWikiSite extends Site {
                        // Make sure the string is normalized into NFC (due to the bug 40017)
                        // but do nothing to the whitespaces, that should work appropriately.
                        // @see https://bugzilla.wikimedia.org/show_bug.cgi?id=40017
-                       $pageName = UtfNormal::cleanUp( $pageName );
+                       $pageName = UtfNormal\Validator::cleanUp( $pageName );
 
                        // Build the args for the specific call
                        $args = array(
@@ -137,7 +137,7 @@ class MediaWikiSite extends Site {
 
                        // Go on call the external site
                        // @todo we need a good way to specify a timeout here.
-                       $ret = Http::get( $url );
+                       $ret = Http::get( $url, array(), __METHOD__ );
                }
 
                if ( $ret === false ) {
diff --git a/includes/site/SiteExporter.php b/includes/site/SiteExporter.php
new file mode 100644 (file)
index 0000000..62f6ca3
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+
+/**
+ * Utility for exporting site entries to XML.
+ * For the output file format, see docs/sitelist.txt and docs/sitelist-1.0.xsd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.25
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Daniel Kinzler
+ */
+class SiteExporter {
+
+       /**
+        * @var resource
+        */
+       private $sink;
+
+       /**
+        * @param resource $sink A file handle open for writing
+        */
+       public function __construct( $sink ) {
+               if ( !is_resource( $sink ) || get_resource_type( $sink ) !== 'stream' ) {
+                       throw new InvalidArgumentException( '$sink must be a file handle' );
+               }
+
+               $this->sink = $sink;
+       }
+
+       /**
+        * Writes a <site> tag for each Site object in $sites, and encloses the entire list
+        * between <sites> tags.
+        *
+        * @param Site[]|SiteList $sites
+        */
+       public function exportSites( $sites ) {
+               $attributes = array(
+                       'version' => '1.0',
+                       'xmlns' => 'http://www.mediawiki.org/xml/sitelist-1.0/',
+               );
+
+               fwrite( $this->sink, XML::openElement( 'sites', $attributes ) . "\n" );
+
+               foreach ( $sites as $site ) {
+                       $this->exportSite( $site );
+               }
+
+               fwrite( $this->sink, XML::closeElement( 'sites' ) . "\n" );
+               fflush( $this->sink );
+       }
+
+       /**
+        * Writes a <site> tag representing the given Site object.
+        *
+        * @param Site $site
+        */
+       private function exportSite( Site $site ) {
+               if ( $site->getType() !== Site::TYPE_UNKNOWN ) {
+                       $siteAttr = array( 'type' => $site->getType() );
+               } else {
+                       $siteAttr = null;
+               }
+
+               fwrite( $this->sink, "\t" . XML::openElement( 'site', $siteAttr ) . "\n" );
+
+               fwrite( $this->sink, "\t\t" . XML::element( 'globalid', null, $site->getGlobalId() ) . "\n" );
+
+               if ( $site->getGroup() !== Site::GROUP_NONE ) {
+                       fwrite( $this->sink, "\t\t" . XML::element( 'group', null, $site->getGroup() ) . "\n" );
+               }
+
+               if ( $site->getSource() !== Site::SOURCE_LOCAL ) {
+                       fwrite( $this->sink, "\t\t" . XML::element( 'source', null, $site->getSource() ) . "\n" );
+               }
+
+               if ( $site->shouldForward() ) {
+                       fwrite( $this->sink, "\t\t" . XML::element( 'forward', null, '' ) . "\n" );
+               }
+
+               foreach ( $site->getAllPaths() as $type => $path ) {
+                       fwrite( $this->sink, "\t\t" . XML::element( 'path', array( 'type' => $type ), $path ) . "\n" );
+               }
+
+               foreach ( $site->getLocalIds() as $type => $ids ) {
+                       foreach ( $ids as $id ) {
+                               fwrite( $this->sink, "\t\t" . XML::element( 'localid', array( 'type' => $type ), $id ) . "\n" );
+                       }
+               }
+
+               //@todo: export <data>
+               //@todo: export <config>
+
+               fwrite( $this->sink, "\t" . XML::closeElement( 'site' ) . "\n" );
+       }
+
+}
diff --git a/includes/site/SiteImporter.php b/includes/site/SiteImporter.php
new file mode 100644 (file)
index 0000000..a05bad5
--- /dev/null
@@ -0,0 +1,263 @@
+<?php
+
+/**
+ * Utility for importing site entries from XML.
+ * For the expected format of the input, see docs/sitelist.txt and docs/sitelist-1.0.xsd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.25
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Daniel Kinzler
+ */
+class SiteImporter {
+
+       /**
+        * @var SiteStore
+        */
+       private $store;
+
+       /**
+        * @var callable|null
+        */
+       private $exceptionCallback;
+
+       /**
+        * @param SiteStore $store
+        */
+       public function __construct( SiteStore $store ) {
+               $this->store = $store;
+       }
+
+       /**
+        * @return callable
+        */
+       public function getExceptionCallback() {
+               return $this->exceptionCallback;
+       }
+
+       /**
+        * @param callable $exceptionCallback
+        */
+       public function setExceptionCallback( $exceptionCallback ) {
+               $this->exceptionCallback = $exceptionCallback;
+       }
+
+       /**
+        * @param string $file
+        */
+       public function importFromFile( $file ) {
+               $xml = file_get_contents( $file );
+
+               if ( $xml === false ) {
+                       throw new RuntimeException( 'Failed to read ' . $file . '!' );
+               }
+
+               $this->importFromXML( $xml );
+       }
+
+       /**
+        * @param string $xml
+        *
+        * @throws InvalidArgumentException
+        */
+       public function importFromXML( $xml ) {
+               $document = new DOMDocument();
+
+               $oldLibXmlErrors = libxml_use_internal_errors( true );
+               $ok = $document->loadXML( $xml, LIBXML_NONET );
+
+               if ( !$ok ) {
+                       $errors = libxml_get_errors();
+                       libxml_use_internal_errors( $oldLibXmlErrors );
+
+                       foreach ( $errors as $error ) {
+                               /** @var LibXMLError $error */
+                               throw new InvalidArgumentException(
+                                       'Malformed XML: ' . $error->message . ' in line ' . $error->line
+                               );
+                       }
+
+                       throw new InvalidArgumentException( 'Malformed XML!' );
+               }
+
+               libxml_use_internal_errors( $oldLibXmlErrors );
+               $this->importFromDOM( $document->documentElement );
+       }
+
+       /**
+        * @param DOMElement $root
+        */
+       private function importFromDOM( DOMElement $root ) {
+               $sites = $this->makeSiteList( $root );
+               $this->store->saveSites( $sites );
+       }
+
+       /**
+        * @param DOMElement $root
+        *
+        * @return Site[]
+        */
+       private function makeSiteList( DOMElement $root ) {
+               $sites = array();
+
+               // Old sites, to get the row IDs that correspond to the global site IDs.
+               // TODO: Get rid of internal row IDs, they just get in the way. Get rid of ORMRow, too.
+               $oldSites = $this->store->getSites();
+
+               $current = $root->firstChild;
+               while ( $current ) {
+                       if ( $current instanceof DOMElement && $current->tagName === 'site' ) {
+                               try {
+                                       $site = $this->makeSite( $current );
+                                       $key = $site->getGlobalId();
+
+                                       if ( $oldSites->hasSite( $key ) ) {
+                                               $oldSite = $oldSites->getSite( $key );
+                                               $site->setInternalId( $oldSite->getInternalId() );
+                                       }
+
+                                       $sites[$key] = $site;
+                               } catch ( Exception $ex ) {
+                                       $this->handleException( $ex );
+                               }
+                       }
+
+                       $current = $current->nextSibling;
+               }
+
+               return $sites;
+       }
+
+       /**
+        * @param DOMElement $siteElement
+        *
+        * @return Site
+        * @throws InvalidArgumentException
+        */
+       public function makeSite( DOMElement $siteElement ) {
+               if ( $siteElement->tagName !== 'site' ) {
+                       throw new InvalidArgumentException( 'Expected <site> tag, found ' . $siteElement->tagName );
+               }
+
+               $type = $this->getAttributeValue( $siteElement, 'type', Site::TYPE_UNKNOWN );
+               $site = Site::newForType( $type );
+
+               $site->setForward( $this->hasChild( $siteElement, 'forward' ) );
+               $site->setGlobalId( $this->getChildText( $siteElement, 'globalid' ) );
+               $site->setGroup( $this->getChildText( $siteElement, 'group', Site::GROUP_NONE ) );
+               $site->setSource( $this->getChildText( $siteElement, 'source', Site::SOURCE_LOCAL ) );
+
+               $pathTags = $siteElement->getElementsByTagName( 'path' );
+               for ( $i = 0; $i < $pathTags->length; $i++ ) {
+                       $pathElement = $pathTags->item( $i );
+                       $pathType = $this->getAttributeValue( $pathElement, 'type' );
+                       $path = $pathElement->textContent;
+
+                       $site->setPath( $pathType, $path );
+               }
+
+               $idTags = $siteElement->getElementsByTagName( 'localid' );
+               for ( $i = 0; $i < $idTags->length; $i++ ) {
+                       $idElement = $idTags->item( $i );
+                       $idType = $this->getAttributeValue( $idElement, 'type' );
+                       $id = $idElement->textContent;
+
+                       $site->addLocalId( $idType, $id );
+               }
+
+               //@todo: import <data>
+               //@todo: import <config>
+
+               return $site;
+       }
+
+       /**
+        * @param DOMElement $element
+        * @param $name
+        * @param string|null|bool $default
+        *
+        * @return null|string
+        * @throws MWException If the attribute is not found and no default is provided
+        */
+       private function getAttributeValue( DOMElement $element, $name, $default = false ) {
+               $node = $element->getAttributeNode( $name );
+
+               if ( !$node ) {
+                       if ( $default !== false ) {
+                               return $default;
+                       } else {
+                               throw new MWException(
+                                       'Required ' . $name . ' attribute not found in <' . $element->tagName . '> tag'
+                               );
+                       }
+               }
+
+               return $node->textContent;
+       }
+
+       /**
+        * @param DOMElement $element
+        * @param string $name
+        * @param string|null|bool $default
+        *
+        * @return null|string
+        * @throws MWException If the child element is not found and no default is provided
+        */
+       private function getChildText( DOMElement $element, $name, $default = false ) {
+               $elements = $element->getElementsByTagName( $name );
+
+               if ( $elements->length < 1 ) {
+                       if ( $default !== false ) {
+                               return $default;
+                       } else {
+                               throw new MWException(
+                                       'Required <' . $name . '> tag not found inside <' . $element->tagName . '> tag'
+                               );
+                       }
+               }
+
+               $node = $elements->item( 0 );
+               return $node->textContent;
+       }
+
+       /**
+        * @param DOMElement $element
+        * @param string $name
+        *
+        * @return bool
+        * @throws MWException
+        */
+       private function hasChild( DOMElement $element, $name ) {
+               return $this->getChildText( $element, $name, null ) !== null;
+       }
+
+       /**
+        * @param Exception $ex
+        */
+       private function handleException( Exception $ex ) {
+               if ( $this->exceptionCallback ) {
+                       call_user_func( $this->exceptionCallback, $ex );
+               } else {
+                       wfLogWarning( $ex->getMessage() );
+               }
+       }
+
+}
diff --git a/includes/site/SiteListFileCache.php b/includes/site/SiteListFileCache.php
deleted file mode 100644 (file)
index e48a187..0000000
+++ /dev/null
@@ -1,136 +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
- *
- * @license GNU GPL v2+
- */
-
-/**
- * Provides a file-based cache of a SiteStore, stored as a json file.
- * The cache can be built with the rebuildSitesCache.php maintenance script,
- * and a MediaWiki instance can be setup to use this by setting the
- * 'wgSitesCacheFile' configuration to the cache file location.
- *
- * @since 1.25
- */
-class SiteListFileCache {
-
-       /**
-        * @var SiteList
-        */
-       private $sites = null;
-
-       /**
-        * @var string
-        */
-       private $cacheFile;
-
-       /**
-        * @param string $cacheFile
-        */
-       public function __construct( $cacheFile ) {
-               $this->cacheFile = $cacheFile;
-       }
-
-       /**
-        * @since 1.25
-        *
-        * @return SiteList
-        */
-       public function getSites() {
-               if ( $this->sites === null ) {
-                       $this->sites = $this->loadSitesFromCache();
-               }
-
-               return $this->sites;
-       }
-
-       /**
-        * @param string $globalId
-        *
-        * @since 1.25
-        *
-        * @return Site|null
-        */
-       public function getSite( $globalId ) {
-               $sites = $this->getSites();
-
-               return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
-       }
-
-       /**
-        * @return SiteList
-        */
-       private function loadSitesFromCache() {
-               $data = $this->loadJsonFile();
-
-               $sites = new SiteList();
-
-               // @todo lazy initialize the site objects in the site list (e.g. only when needed to access)
-               foreach ( $data['sites'] as $siteArray ) {
-                       $sites[] = $this->newSiteFromArray( $siteArray );
-               }
-
-               return $sites;
-       }
-
-       /**
-        * @throws MWException
-        * @return array
-        */
-       private function loadJsonFile() {
-               if ( !is_readable( $this->cacheFile ) ) {
-                       throw new MWException( 'SiteList cache file not found.' );
-               }
-
-               $contents = file_get_contents( $this->cacheFile );
-               $data = json_decode( $contents, true );
-
-               if ( !is_array( $data ) || !array_key_exists( 'sites', $data ) ) {
-                       throw new MWException( 'SiteStore json cache data is invalid.' );
-               }
-
-               return $data;
-       }
-
-       /**
-        * @param array $data
-        *
-        * @return Site
-        */
-       private function newSiteFromArray( array $data ) {
-               $siteType = array_key_exists( 'type', $data ) ? $data['type'] : Site::TYPE_UNKNOWN;
-               $site = Site::newForType( $siteType );
-
-               $site->setGlobalId( $data['globalid'] );
-               $site->setInternalId( $data['internalid'] );
-               $site->setForward( $data['forward'] );
-               $site->setGroup( $data['group'] );
-               $site->setLanguageCode( $data['language'] );
-               $site->setSource( $data['source'] );
-               $site->setExtraData( $data['data'] );
-               $site->setExtraConfig( $data['config'] );
-
-               foreach ( $data['identifiers'] as $identifier ) {
-                       $site->addLocalId( $identifier['type'], $identifier['key'] );
-               }
-
-               return $site;
-       }
-
-}
diff --git a/includes/site/SiteListFileCacheBuilder.php b/includes/site/SiteListFileCacheBuilder.php
deleted file mode 100644 (file)
index 7307a6f..0000000
+++ /dev/null
@@ -1,113 +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
- *
- * @since 1.25
- *
- * @file
- *
- * @license GNU GPL v2+
- */
-class SiteListFileCacheBuilder {
-
-       /**
-        * @var SiteStore
-        */
-       private $siteStore;
-
-       /**
-        * @var string
-        */
-       private $cacheFile;
-
-       /**
-        * @param SiteStore $siteStore
-        * @param string $cacheFile
-        */
-       public function __construct( SiteStore $siteStore, $cacheFile ) {
-               $this->siteStore = $siteStore;
-               $this->cacheFile = $cacheFile;
-       }
-
-       public function build() {
-               $this->sites = $this->siteStore->getSites( 'recache' );
-               $this->cacheSites( $this->sites->getArrayCopy() );
-       }
-
-       /**
-        * @param Site[] $sites
-        *
-        * @throws MWException if in manualRecache mode
-        * @return bool
-        */
-       private function cacheSites( array $sites ) {
-               $sitesArray = array();
-
-               foreach ( $sites as $site ) {
-                       $globalId = $site->getGlobalId();
-                       $sitesArray[$globalId] = $this->getSiteAsArray( $site );
-               }
-
-               $json = json_encode( array(
-                       'sites' => $sitesArray
-               ) );
-
-               $result = file_put_contents( $this->cacheFile, $json );
-
-               return $result !== false;
-       }
-
-       /**
-        * @param Site $site
-        *
-        * @return array
-        */
-       private function getSiteAsArray( Site $site ) {
-               $siteEntry = unserialize( $site->serialize() );
-               $siteIdentifiers = $this->buildLocalIdentifiers( $site );
-               $identifiersArray = array();
-
-               foreach ( $siteIdentifiers as $identifier ) {
-                       $identifiersArray[] = $identifier;
-               }
-
-               $siteEntry['identifiers'] = $identifiersArray;
-
-               return $siteEntry;
-       }
-
-       /**
-        * @param Site $site
-        *
-        * @return array Site local identifiers
-        */
-       private function buildLocalIdentifiers( Site $site ) {
-               $localIds = array();
-
-               foreach ( $site->getLocalIds() as $idType => $ids ) {
-                       foreach ( $ids as $id ) {
-                               $localIds[] = array(
-                                       'type' => $idType,
-                                       'key' => $id
-                               );
-                       }
-               }
-
-               return $localIds;
-       }
-
-}
diff --git a/includes/site/SiteLookup.php b/includes/site/SiteLookup.php
new file mode 100644 (file)
index 0000000..610bf0b
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Interface for service objects providing a lookup of Site objects.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.25
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ */
+interface SiteLookup {
+
+       /**
+        * Returns the site with provided global id, or null if there is no such site.
+        *
+        * @since 1.25
+        *
+        * @param string $globalId
+        *
+        * @return Site|null
+        */
+       public function getSite( $globalId );
+
+       /**
+        * Returns a list of all sites.
+        *
+        * @since 1.25
+        *
+        * @return SiteList
+        */
+       public function getSites();
+
+}
index 8f25c76..d77f07b 100644 (file)
  * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-class SiteSQLStore implements SiteStore {
-       /**
-        * @since 1.21
-        *
-        * @var SiteList|null
-        */
-       protected $sites = null;
-
-       /**
-        * @var ORMTable
-        */
-       protected $sitesTable;
-
-       /**
-        * @var string|null
-        */
-       private $cacheKey = null;
-
-       /**
-        * @var int
-        */
-       private $cacheTimeout = 3600;
-
-       /**
-        * @var BagOStuff
-        */
-       private $cache;
+class SiteSQLStore extends CachingSiteStore {
 
        /**
         * @since 1.21
+        * @deprecated 1.25 Construct a SiteStore instance directly instead.
         *
         * @param ORMTable|null $sitesTable
         * @param BagOStuff|null $cache
@@ -69,370 +44,9 @@ class SiteSQLStore implements SiteStore {
                        $cache = wfGetMainCache();
                }
 
-               return new static( $cache, $sitesTable );
-       }
-
-       /**
-        * Constructor.
-        *
-        * @since 1.21
-        *
-        * @param BagOStuff $cache
-        * @param ORMTable|null $sitesTable
-        */
-       protected function __construct( BagOStuff $cache, ORMTable $sitesTable = null ) {
-               if ( $sitesTable === null ) {
-                       $sitesTable = $this->newSitesTable();
-               }
-
-               $this->cache = $cache;
-               $this->sitesTable = $sitesTable;
-       }
-
-       /**
-        * Constructs a cache key to use for caching the list of sites.
-        *
-        * This includes the concrete class name of the site list as well as a version identifier
-        * for the list's serialization, to avoid problems when unserializing site lists serialized
-        * by an older version, e.g. when reading from a cache.
-        *
-        * The cache key also includes information about where the sites were loaded from, e.g.
-        * the name of a database table.
-        *
-        * @see SiteList::getSerialVersionId
-        *
-        * @return string The cache key.
-        */
-       protected function getCacheKey() {
-
-               if ( $this->cacheKey === null ) {
-                       $type = 'SiteList#' . SiteList::getSerialVersionId();
-                       $source = $this->sitesTable->getName();
-
-                       if ( $this->sitesTable->getTargetWiki() !== false ) {
-                               $source = $this->sitesTable->getTargetWiki() . '.' . $source;
-                       }
-
-                       $this->cacheKey = wfMemcKey( "$source/$type" );
-               }
-
-               return $this->cacheKey;
-       }
-
-       /**
-        * @see SiteStore::getSites
-        *
-        * @since 1.21
-        *
-        * @param string $source Either 'cache' or 'recache'
-        *
-        * @return SiteList
-        */
-       public function getSites( $source = 'cache' ) {
-
-               if ( $source === 'cache' ) {
-                       if ( $this->sites === null ) {
-                               $sites = $this->cache->get( $this->getCacheKey() );
-
-                               if ( is_object( $sites ) ) {
-                                       $this->sites = $sites;
-                               } else {
-                                       $this->loadSites();
-                               }
-                       }
-               }
-               else {
-                       $this->loadSites();
-               }
-
-               return $this->sites;
-       }
-
-       /**
-        * Returns a new Site object constructed from the provided ORMRow.
-        *
-        * @since 1.21
-        *
-        * @param ORMRow $siteRow
-        *
-        * @return Site
-        */
-       protected function siteFromRow( ORMRow $siteRow ) {
-
-               $site = Site::newForType( $siteRow->getField( 'type', Site::TYPE_UNKNOWN ) );
-
-               $site->setGlobalId( $siteRow->getField( 'global_key' ) );
-
-               $site->setInternalId( $siteRow->getField( 'id' ) );
-
-               if ( $siteRow->hasField( 'forward' ) ) {
-                       $site->setForward( $siteRow->getField( 'forward' ) );
-               }
-
-               if ( $siteRow->hasField( 'group' ) ) {
-                       $site->setGroup( $siteRow->getField( 'group' ) );
-               }
-
-               if ( $siteRow->hasField( 'language' ) ) {
-                       $site->setLanguageCode( $siteRow->getField( 'language' ) === ''
-                               ? null
-                               : $siteRow->getField( 'language' )
-                       );
-               }
-
-               if ( $siteRow->hasField( 'source' ) ) {
-                       $site->setSource( $siteRow->getField( 'source' ) );
-               }
-
-               if ( $siteRow->hasField( 'data' ) ) {
-                       $site->setExtraData( $siteRow->getField( 'data' ) );
-               }
-
-               if ( $siteRow->hasField( 'config' ) ) {
-                       $site->setExtraConfig( $siteRow->getField( 'config' ) );
-               }
-
-               return $site;
-       }
-
-       /**
-        * Get a new ORMRow from a Site object
-        *
-        * @since 1.22
-        *
-        * @param Site $site
-        *
-        * @return ORMRow
-        */
-       protected function getRowFromSite( Site $site ) {
-               $fields = array(
-                       // Site data
-                       'global_key' => $site->getGlobalId(), // TODO: check not null
-                       'type' => $site->getType(),
-                       'group' => $site->getGroup(),
-                       'source' => $site->getSource(),
-                       'language' => $site->getLanguageCode() === null ? '' : $site->getLanguageCode(),
-                       'protocol' => $site->getProtocol(),
-                       'domain' => strrev( $site->getDomain() ) . '.',
-                       'data' => $site->getExtraData(),
-
-                       // Site config
-                       'forward' => $site->shouldForward(),
-                       'config' => $site->getExtraConfig(),
-               );
-
-               if ( $site->getInternalId() !== null ) {
-                       $fields['id'] = $site->getInternalId();
-               }
-
-               return new ORMRow( $this->sitesTable, $fields );
-       }
-
-       /**
-        * Fetches the site from the database and loads them into the sites field.
-        *
-        * @since 1.21
-        */
-       protected function loadSites() {
-
-               $this->sites = new SiteList();
-
-               foreach ( $this->sitesTable->select() as $siteRow ) {
-                       $this->sites[] = $this->siteFromRow( $siteRow );
-               }
-
-               // Batch load the local site identifiers.
-               $ids = wfGetDB( $this->sitesTable->getReadDb() )->select(
-                       'site_identifiers',
-                       array(
-                               'si_site',
-                               'si_type',
-                               'si_key',
-                       ),
-                       array(),
-                       __METHOD__
-               );
-
-               foreach ( $ids as $id ) {
-                       if ( $this->sites->hasInternalId( $id->si_site ) ) {
-                               $site = $this->sites->getSiteByInternalId( $id->si_site );
-                               $site->addLocalId( $id->si_type, $id->si_key );
-                               $this->sites->setSite( $site );
-                       }
-               }
-
-               $this->cache->set( $this->getCacheKey(), $this->sites, $this->cacheTimeout );
-
-       }
-
-       /**
-        * @see SiteStore::getSite
-        *
-        * @since 1.21
-        *
-        * @param string $globalId
-        * @param string $source
-        *
-        * @return Site|null
-        */
-       public function getSite( $globalId, $source = 'cache' ) {
-
-               $sites = $this->getSites( $source );
-
-               return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
-       }
-
-       /**
-        * @see SiteStore::saveSite
-        *
-        * @since 1.21
-        *
-        * @param Site $site
-        *
-        * @return bool Success indicator
-        */
-       public function saveSite( Site $site ) {
-               return $this->saveSites( array( $site ) );
-       }
-
-       /**
-        * @see SiteStore::saveSites
-        *
-        * @since 1.21
-        *
-        * @param Site[] $sites
-        *
-        * @return bool Success indicator
-        */
-       public function saveSites( array $sites ) {
-
-               if ( empty( $sites ) ) {
-                       return true;
-               }
-
-               $dbw = $this->sitesTable->getWriteDbConnection();
-
-               $dbw->startAtomic( __METHOD__ );
-
-               $success = true;
-
-               $internalIds = array();
-               $localIds = array();
-
-               foreach ( $sites as $site ) {
-                       if ( $site->getInternalId() !== null ) {
-                               $internalIds[] = $site->getInternalId();
-                       }
-
-                       $siteRow = $this->getRowFromSite( $site );
-                       $success = $siteRow->save( __METHOD__ ) && $success;
-
-                       foreach ( $site->getLocalIds() as $idType => $ids ) {
-                               foreach ( $ids as $id ) {
-                                       $localIds[] = array( $siteRow->getId(), $idType, $id );
-                               }
-                       }
-               }
-
-               if ( $internalIds !== array() ) {
-                       $dbw->delete(
-                               'site_identifiers',
-                               array( 'si_site' => $internalIds ),
-                               __METHOD__
-                       );
-               }
-
-               foreach ( $localIds as $localId ) {
-                       $dbw->insert(
-                               'site_identifiers',
-                               array(
-                                       'si_site' => $localId[0],
-                                       'si_type' => $localId[1],
-                                       'si_key' => $localId[2],
-                               ),
-                               __METHOD__
-                       );
-               }
-
-               $dbw->endAtomic( __METHOD__ );
-
-               // purge cache
-               $this->reset();
-
-               return $success;
-       }
-
-       /**
-        * Purges the internal and external cache of the site list, forcing the list
-        * of sites to be re-read from the database.
-        *
-        * @since 1.21
-        */
-       public function reset() {
-               // purge cache
-               $this->cache->delete( $this->getCacheKey() );
-               $this->sites = null;
-
-       }
-
-       /**
-        * Clears the list of sites stored in the database.
-        *
-        * @see SiteStore::clear()
-        *
-        * @return bool Success
-        */
-       public function clear() {
-               $dbw = $this->sitesTable->getWriteDbConnection();
-
-               $dbw->startAtomic( __METHOD__ );
-               $ok = $dbw->delete( 'sites', '*', __METHOD__ );
-               $ok = $dbw->delete( 'site_identifiers', '*', __METHOD__ ) && $ok;
-               $dbw->endAtomic( __METHOD__ );
-
-               $this->reset();
-
-               return $ok;
-       }
-
-       /**
-        * @since 1.21
-        *
-        * @return ORMTable
-        */
-       protected function newSitesTable() {
-               return new ORMTable(
-                       'sites',
-                       array(
-                               'id' => 'id',
-
-                               // Site data
-                               'global_key' => 'str',
-                               'type' => 'str',
-                               'group' => 'str',
-                               'source' => 'str',
-                               'language' => 'str',
-                               'protocol' => 'str',
-                               'domain' => 'str',
-                               'data' => 'array',
-
-                               // Site config
-                               'forward' => 'bool',
-                               'config' => 'array',
-                       ),
-                       array(
-                               'type' => Site::TYPE_UNKNOWN,
-                               'group' => Site::GROUP_NONE,
-                               'source' => Site::SOURCE_LOCAL,
-                               'data' => array(),
+               $siteStore = new DBSiteStore();
 
-                               'forward' => false,
-                               'config' => array(),
-                               'language' => '',
-                       ),
-                       'ORMRow',
-                       'site_'
-               );
+               return new static( $siteStore, $cache );
        }
 
 }
index 537f1cc..10e0c1b 100644 (file)
@@ -26,7 +26,7 @@
  * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-interface SiteStore {
+interface SiteStore extends SiteLookup {
 
        /**
         * Saves the provided site.
@@ -50,33 +50,6 @@ interface SiteStore {
         */
        public function saveSites( array $sites );
 
-       /**
-        * Returns the site with provided global id, or null if there is no such site.
-        *
-        * @since 1.21
-        *
-        * @param string $globalId
-        * @param string $source Either 'cache' or 'recache'.
-        * If 'cache', the values are allowed (but not obliged) to come from a cache.
-        *
-        * @return Site|null
-        */
-       public function getSite( $globalId, $source = 'cache' );
-
-       /**
-        * Returns a list of all sites. By default this site is
-        * fetched from the cache, which can be changed to loading
-        * the list from the database using the $useCache parameter.
-        *
-        * @since 1.21
-        *
-        * @param string $source Either 'cache' or 'recache'.
-        * If 'cache', the values are allowed (but not obliged) to come from a cache.
-        *
-        * @return SiteList
-        */
-       public function getSites( $source = 'cache' );
-
        /**
         * Deletes all sites from the database. After calling clear(), getSites() will return an empty
         * list and getSite() will return null until saveSite() or saveSites() is called.
diff --git a/includes/site/SitesCacheFileBuilder.php b/includes/site/SitesCacheFileBuilder.php
new file mode 100644 (file)
index 0000000..2e42040
--- /dev/null
@@ -0,0 +1,113 @@
+<?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
+ *
+ * @since 1.25
+ *
+ * @file
+ *
+ * @license GNU GPL v2+
+ */
+class SitesCacheFileBuilder {
+
+       /**
+        * @var SiteLookup
+        */
+       private $siteLookup;
+
+       /**
+        * @var string
+        */
+       private $cacheFile;
+
+       /**
+        * @param SiteLookup $siteLookup
+        * @param string $cacheFile
+        */
+       public function __construct( SiteLookup $siteLookup, $cacheFile ) {
+               $this->siteLookup = $siteLookup;
+               $this->cacheFile = $cacheFile;
+       }
+
+       public function build() {
+               $this->sites = $this->siteLookup->getSites();
+               $this->cacheSites( $this->sites->getArrayCopy() );
+       }
+
+       /**
+        * @param Site[] $sites
+        *
+        * @throws MWException if in manualRecache mode
+        * @return bool
+        */
+       private function cacheSites( array $sites ) {
+               $sitesArray = array();
+
+               foreach ( $sites as $site ) {
+                       $globalId = $site->getGlobalId();
+                       $sitesArray[$globalId] = $this->getSiteAsArray( $site );
+               }
+
+               $json = json_encode( array(
+                       'sites' => $sitesArray
+               ) );
+
+               $result = file_put_contents( $this->cacheFile, $json );
+
+               return $result !== false;
+       }
+
+       /**
+        * @param Site $site
+        *
+        * @return array
+        */
+       private function getSiteAsArray( Site $site ) {
+               $siteEntry = unserialize( $site->serialize() );
+               $siteIdentifiers = $this->buildLocalIdentifiers( $site );
+               $identifiersArray = array();
+
+               foreach ( $siteIdentifiers as $identifier ) {
+                       $identifiersArray[] = $identifier;
+               }
+
+               $siteEntry['identifiers'] = $identifiersArray;
+
+               return $siteEntry;
+       }
+
+       /**
+        * @param Site $site
+        *
+        * @return array Site local identifiers
+        */
+       private function buildLocalIdentifiers( Site $site ) {
+               $localIds = array();
+
+               foreach ( $site->getLocalIds() as $idType => $ids ) {
+                       foreach ( $ids as $id ) {
+                               $localIds[] = array(
+                                       'type' => $idType,
+                                       'key' => $id
+                               );
+                       }
+               }
+
+               return $localIds;
+       }
+
+}
index eedd2a1..25df0f9 100644 (file)
@@ -634,7 +634,8 @@ abstract class BaseTemplate extends QuickTemplate {
         * debug stuff. This should be called right before outputting the closing
         * body and html tags.
         */
-       function printTrail() { ?>
+       function printTrail() {
+?>
 <?php echo MWDebug::getDebugHTML( $this->getSkin()->getContext() ); ?>
 <?php $this->html( 'bottomscripts' ); /* JS call to runBodyOnloadHook */ ?>
 <?php $this->html( 'reporttime' ) ?>
index 6cc139b..ac7a85b 100644 (file)
@@ -339,8 +339,13 @@ abstract class Skin extends ContextSource {
                                $this->mRelevantUser = User::newFromName( $rootUser, false );
                        } else {
                                $user = User::newFromName( $rootUser, false );
-                               if ( $user && $user->isLoggedIn() ) {
-                                       $this->mRelevantUser = $user;
+
+                               if ( $user ) {
+                                       $user->load( User::READ_NORMAL );
+
+                                       if ( $user->isLoggedIn() ) {
+                                               $this->mRelevantUser = $user;
+                                       }
                                }
                        }
                        return $this->mRelevantUser;
@@ -646,7 +651,7 @@ abstract class Skin extends ContextSource {
 
                return $this->msg( 'retrievedfrom' )
                        ->rawParams( '<a dir="ltr" href="' . $url. '">' . $url . '</a>' )
-                       ->escaped();
+                       ->parse();
        }
 
        /**
@@ -656,7 +661,7 @@ abstract class Skin extends ContextSource {
                $action = $this->getRequest()->getVal( 'action', 'view' );
 
                if ( $this->getTitle()->userCan( 'deletedhistory', $this->getUser() ) &&
-                       ( $this->getTitle()->getArticleID() == 0 || $action == 'history' ) ) {
+                       ( !$this->getTitle()->exists() || $action == 'history' ) ) {
                        $n = $this->getTitle()->isDeleted();
 
                        if ( $n ) {
@@ -837,9 +842,15 @@ abstract class Skin extends ContextSource {
        function getPoweredBy() {
                global $wgResourceBasePath;
 
-               $url1 = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png" );
-               $url1_5 = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png" );
-               $url2 = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png" );
+               $url1 = htmlspecialchars(
+                       "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
+               );
+               $url1_5 = htmlspecialchars(
+                       "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png"
+               );
+               $url2 = htmlspecialchars(
+                       "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png"
+               );
                $text = '<a href="//www.mediawiki.org/"><img src="' . $url1
                        . '" srcset="' . $url1_5 . ' 1.5x, ' . $url2 . ' 2x" '
                        . 'height="31" width="88" alt="Powered by MediaWiki" /></a>';
@@ -863,7 +874,7 @@ abstract class Skin extends ContextSource {
                if ( $timestamp ) {
                        $d = $this->getLanguage()->userDate( $timestamp, $this->getUser() );
                        $t = $this->getLanguage()->userTime( $timestamp, $this->getUser() );
-                       $s = ' ' . $this->msg( 'lastmodifiedat', $d, $t )->escaped();
+                       $s = ' ' . $this->msg( 'lastmodifiedat', $d, $t )->parse();
                } else {
                        $s = '';
                }
@@ -1166,7 +1177,7 @@ abstract class Skin extends ContextSource {
 
                return array(
                        'href' => $title->getLocalURL( $urlaction ),
-                       'exists' => $title->getArticleID() != 0,
+                       'exists' => $title->isKnown(),
                );
        }
 
@@ -1466,7 +1477,8 @@ abstract class Skin extends ContextSource {
         * Get a cached notice
         *
         * @param string $name Message name, or 'default' for $wgSiteNotice
-        * @return string HTML fragment
+        * @return string|bool HTML fragment, or false to indicate that the caller
+        *   should fall back to the next notice in its sequence
         */
        private function getCachedNotice( $name ) {
                global $wgRenderHashAppend, $parserMemc, $wgContLang;
@@ -1482,7 +1494,9 @@ abstract class Skin extends ContextSource {
                        }
                } else {
                        $msg = $this->msg( $name )->inContentLanguage();
-                       if ( $msg->isDisabled() ) {
+                       if ( $msg->isBlank() ) {
+                               return '';
+                       } elseif ( $msg->isDisabled() ) {
                                return false;
                        }
                        $notice = $msg->plain();
@@ -1543,13 +1557,13 @@ abstract class Skin extends ContextSource {
                                $siteNotice = $this->getCachedNotice( 'sitenotice' );
                        } else {
                                $anonNotice = $this->getCachedNotice( 'anonnotice' );
-                               if ( !$anonNotice ) {
+                               if ( $anonNotice === false ) {
                                        $siteNotice = $this->getCachedNotice( 'sitenotice' );
                                } else {
                                        $siteNotice = $anonNotice;
                                }
                        }
-                       if ( !$siteNotice ) {
+                       if ( $siteNotice === false ) {
                                $siteNotice = $this->getCachedNotice( 'default' );
                        }
                }
@@ -1584,20 +1598,46 @@ abstract class Skin extends ContextSource {
                        $attribs['title'] = wfMessage( 'editsectionhint' )->rawParams( $tooltip )
                                ->inLanguage( $lang )->text();
                }
-               $link = Linker::link( $nt, wfMessage( 'editsection' )->inLanguage( $lang )->text(),
-                       $attribs,
-                       array( 'action' => 'edit', 'section' => $section ),
-                       array( 'noclasses', 'known' )
+
+               $links = array(
+                       'editsection' => array(
+                               'text' => wfMessage( 'editsection' )->inLanguage( $lang )->escaped(),
+                               'targetTitle' => $nt,
+                               'attribs' => $attribs,
+                               'query' => array( 'action' => 'edit', 'section' => $section ),
+                               'options' => array( 'noclasses', 'known' )
+                       )
                );
 
-               # Add the brackets and the span and run the hook.
-               $result = '<span class="mw-editsection">'
-                       . '<span class="mw-editsection-bracket">[</span>'
-                       . $link
-                       . '<span class="mw-editsection-bracket">]</span>'
-                       . '</span>';
+               Hooks::run( 'SkinEditSectionLinks', array( $this, $nt, $section, $tooltip, &$links, $lang ) );
 
-               Hooks::run( 'DoEditSectionLink', array( $this, $nt, $section, $tooltip, &$result, $lang ) );
+               $result = '<span class="mw-editsection"><span class="mw-editsection-bracket">[</span>';
+
+               $linksHtml = array();
+               foreach ( $links as $k => $linkDetails ) {
+                       $linksHtml[] = Linker::link(
+                               $linkDetails['targetTitle'],
+                               $linkDetails['text'],
+                               $linkDetails['attribs'],
+                               $linkDetails['query'],
+                               $linkDetails['options']
+                       );
+               }
+
+               $result .= implode(
+                       '<span class="mw-editsection-divider">'
+                               . wfMessage( 'pipe-separator' )->inLanguage( $lang )->text()
+                               . '</span>',
+                       $linksHtml
+               );
+
+               $result .= '<span class="mw-editsection-bracket">]</span></span>';
+               // Deprecated, use SkinEditSectionLinks hook instead
+               Hooks::run(
+                       'DoEditSectionLink',
+                       array( $this, $nt, $section, $tooltip, &$result, $lang ),
+                       '1.25'
+               );
                return $result;
        }
 
index 9cb4ea0..312769f 100644 (file)
@@ -24,9 +24,11 @@ class SkinFallbackTemplate extends BaseTemplate {
                        return $maybeDir !== '.' && $maybeDir !== '..' && is_dir( "$styleDirectory/$maybeDir" );
                } );
 
-               // Only keep the ones that contain a .php file with the same name inside
+               // Filter out skins that aren't installed
                $possibleSkins = array_filter( $possibleSkins, function ( $skinDir ) use ( $styleDirectory ) {
-                       return is_file( "$styleDirectory/$skinDir/$skinDir.php" );
+                       return
+                               is_file( "$styleDirectory/$skinDir/skin.json" )
+                               || is_file( "$styleDirectory/$skinDir/$skinDir.php" );
                } );
 
                return $possibleSkins;
@@ -56,14 +58,16 @@ class SkinFallbackTemplate extends BaseTemplate {
                                } else {
                                        $skinsInstalledText[] = $this->getMsg( 'default-skin-not-found-row-disabled' )
                                                ->params( $normalizedKey, $skin )->plain();
-                                       $skinsInstalledSnippet[] = "require_once \"\$IP/skins/$skin/$skin.php\";";
+                                       $skinsInstalledSnippet[] = $this->getSnippetForSkin( $skin );
                                }
                        }
 
                        return $this->getMsg( 'default-skin-not-found' )->params(
                                $defaultSkin,
                                implode( "\n", $skinsInstalledText ),
-                               implode( "\n", $skinsInstalledSnippet )
+                               implode( "\n", $skinsInstalledSnippet ) )->numParams(
+                                       count( $skinsInstalledText ),
+                                       count( $skinsInstalledSnippet )
                        )->parseAsBlock();
                } else {
                        return $this->getMsg( 'default-skin-not-found-no-skins' )->params(
@@ -72,6 +76,21 @@ class SkinFallbackTemplate extends BaseTemplate {
                }
        }
 
+       /**
+        * Get the appropriate LocalSettings.php snippet to enable the given skin
+        *
+        * @param string $skin
+        * @return string
+        */
+       private function getSnippetForSkin( $skin ) {
+               global $IP;
+               if ( file_exists( "$IP/skins/$skin/skin.json" ) ) {
+                       return "wfLoadSkin( '$skin' );";
+               } else {
+                       return  "require_once \"\$IP/skins/$skin/$skin.php\";";
+               }
+       }
+
        /**
         * Outputs the entire contents of the page. No navigation (other than search box), just the big
         * warning message and page content.
index 45a1a8b..61aad92 100644 (file)
@@ -54,7 +54,8 @@ class SkinTemplate extends Skin {
                $out->addModuleStyles( array(
                        'mediawiki.legacy.shared',
                        'mediawiki.legacy.commonPrint',
-                       'mediawiki.ui.button'
+                       'mediawiki.ui.button',
+                       'mediawiki.sectionAnchor'
                ) );
        }
 
@@ -716,7 +717,7 @@ class SkinTemplate extends Skin {
                        $text = $msg->text();
                } else {
                        global $wgContLang;
-                       $text = $wgContLang->getFormattedNsText(
+                       $text = $wgContLang->getConverter()->convertNamespace(
                                MWNamespace::getSubject( $title->getNamespace() ) );
                }
 
@@ -743,17 +744,20 @@ class SkinTemplate extends Skin {
                self::checkTitle( $title, $name );
                return array(
                        'href' => $title->getLocalURL( $urlaction ),
-                       'exists' => $title->getArticleID() != 0,
+                       'exists' => $title->isKnown(),
                );
        }
 
+       /**
+        * @todo is this even used?
+        */
        function makeArticleUrlDetails( $name, $urlaction = '' ) {
                $title = Title::newFromText( $name );
                $title = $title->getSubjectPage();
                self::checkTitle( $title, $name );
                return array(
                        'href' => $title->getLocalURL( $urlaction ),
-                       'exists' => $title->getArticleID() != 0,
+                       'exists' => $title->exists(),
                );
        }
 
@@ -944,7 +948,6 @@ class SkinTemplate extends Skin {
                                                'text' => wfMessageFallback( "$skname-view-history", 'history_short' )
                                                        ->setContext( $this->getContext() )->text(),
                                                'href' => $title->getLocalURL( 'action=history' ),
-                                               'rel' => 'archives',
                                        );
 
                                        if ( $title->quickUserCan( 'delete', $user ) ) {
@@ -1213,7 +1216,7 @@ class SkinTemplate extends Skin {
                                'href' => $this->getTitle()->getLocalURL( "action=info" )
                        );
 
-                       if ( $this->getTitle()->getArticleID() ) {
+                       if ( $this->getTitle()->exists() ) {
                                $nav_urls['recentchangeslinked'] = array(
                                        'href' => SpecialPage::getTitleFor( 'Recentchangeslinked', $this->thispage )->getLocalURL()
                                );
index 3476c26..b913235 100644 (file)
@@ -65,6 +65,12 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        $batch->add( NS_USER, $row->rc_user_text );
                        $batch->add( NS_USER_TALK, $row->rc_user_text );
                        $batch->add( $row->rc_namespace, $row->rc_title );
+                       if ( $row->rc_source === RecentChange::SRC_LOG ) {
+                               $formatter = LogFormatter::newFromRow( $row );
+                               foreach ( $formatter->getPreloadTitles() as $title ) {
+                                       $batch->addObj( $title );
+                               }
+                       }
                }
                $batch->execute();
 
@@ -309,7 +315,9 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                );
        }
 
-       protected function runMainQueryHook( &$tables, &$fields, &$conds, &$query_options, &$join_conds, $opts ) {
+       protected function runMainQueryHook( &$tables, &$fields, &$conds,
+               &$query_options, &$join_conds, $opts
+       ) {
                return Hooks::run(
                        'ChangesListSpecialPageQuery',
                        array( $this->getName(), &$tables, &$fields, &$conds, &$query_options, &$join_conds, $opts )
index f727c05..9056761 100644 (file)
@@ -89,9 +89,12 @@ abstract class FormSpecialPage extends SpecialPage {
         * @return HTMLForm|null
         */
        protected function getForm() {
-               $this->fields = $this->getFormFields();
-
-               $form = HTMLForm::factory( $this->getDisplayFormat(), $this->fields, $this->getContext(), $this->getMessagePrefix() );
+               $form = HTMLForm::factory(
+                       $this->getDisplayFormat(),
+                       $this->getFormFields(),
+                       $this->getContext(),
+                       $this->getMessagePrefix()
+               );
                $form->setSubmitCallback( array( $this, 'onSubmit' ) );
                $form->setWrapperLegendMsg( $this->getMessagePrefix() . '-legend' );
 
index 1ff7e3f..da752f6 100644 (file)
@@ -527,7 +527,7 @@ abstract class QueryPage extends SpecialPage {
 
                $this->numRows = $res->numRows();
 
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getRecacheDB();
                $this->preprocessResults( $dbr, $res );
 
                $out->addHTML( Xml::openElement( 'div', array( 'class' => 'mw-spcontent' ) ) );
index 31d679a..f9d1e8a 100644 (file)
@@ -356,6 +356,7 @@ class SpecialPage {
                if ( $this->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
                        $out->addModuleStyles( array(
                                'mediawiki.ui.input',
+                               'mediawiki.ui.radio',
                                'mediawiki.ui.checkbox',
                        ) );
                }
index 175b0cb..c262519 100644 (file)
@@ -249,8 +249,8 @@ class SpecialPageFactory {
                        // Add extension special pages
                        self::$list = array_merge( self::$list, $wgSpecialPages );
 
-                       // Run hooks
-                       // This hook can be used to remove undesired built-in special pages
+                       // This hook can be used to disable unwanted core special pages
+                       // or conditionally register special pages.
                        Hooks::run( 'SpecialPage_initList', array( &self::$list ) );
 
                }
index 66f1f03..2c00175 100644 (file)
@@ -302,7 +302,7 @@ class SpecialActiveUsers extends SpecialPage {
         * @return int How many seconds old the cache is
         */
        public static function mergeActiveUsers( $period, $days ) {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = wfGetDB( DB_SLAVE, 'recentchanges' );
                $cTime = $dbr->selectField( 'querycache_info',
                        'qci_timestamp',
                        array( 'qci_type' => 'activeusers' )
@@ -311,7 +311,10 @@ class SpecialActiveUsers extends SpecialPage {
                if ( !wfReadOnly() ) {
                        if ( !$cTime || ( time() - wfTimestamp( TS_UNIX, $cTime ) ) > $period ) {
                                $dbw = wfGetDB( DB_MASTER );
-                               if ( $dbw->estimateRowCount( 'recentchanges' ) <= 10000 ) {
+                               $cond = $cTime
+                                       ? array( 'rc_timestamp > ' . $dbw->addQuotes( $cTime ) )
+                                       : array();
+                               if ( $dbw->estimateRowCount( 'recentchanges', '*', $cond ) <= 10000 ) {
                                        $window = $days * 86400; // small wiki
                                } else {
                                        $window = $period * 2;
index 0008b10..5211e30 100644 (file)
@@ -59,6 +59,7 @@ class SpecialAllMessages extends SpecialPage {
 
                $this->outputHeader( 'allmessagestext' );
                $out->addModuleStyles( 'mediawiki.special' );
+               $out->addHelpLink( 'Help:System message' );
 
                $this->table = new AllmessagesTablePager(
                        $this,
index 08b8761..74b1f7b 100644 (file)
@@ -101,7 +101,10 @@ class SpecialAllPages extends IncludableSpecialPage {
                $t = $this->getPageTitle();
 
                $out = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) );
-               $out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $this->getConfig()->get( 'Script' ) ) );
+               $out .= Xml::openElement(
+                       'form',
+                       array( 'method' => 'get', 'action' => $this->getConfig()->get( 'Script' ) )
+               );
                $out .= Html::hidden( 'title', $t->getPrefixedText() );
                $out .= Xml::openElement( 'fieldset' );
                $out .= Xml::element( 'legend', null, $this->msg( 'allpages' )->text() );
index 1d4a860..c237401 100644 (file)
@@ -103,6 +103,8 @@ class SpecialBlock extends FormSpecialPage {
                $msg = $this->alreadyBlocked ? 'ipb-change-block' : 'ipbsubmit';
                $form->setSubmitTextMsg( $msg );
 
+               $this->getOutput()->addHelpLink( 'Help:Blocking users' );
+
                # Don't need to do anything if the form has been posted
                if ( !$this->getRequest()->wasPosted() && $this->preErrors ) {
                        $s = $form->formatErrors( $this->preErrors );
@@ -236,6 +238,14 @@ class SpecialBlock extends FormSpecialPage {
                # This will be overwritten by request data
                $fields['Target']['default'] = (string)$this->target;
 
+               if ( $this->target ) {
+                       $status = self::validateTarget( $this->target, $this->getUser() );
+                       if ( !$status->isOK() ) {
+                               $errors = $status->getErrorsArray();
+                               $this->preErrors = array_merge( $this->preErrors, $errors );
+                       }
+               }
+
                # This won't be
                $fields['PreviousTarget']['default'] = (string)$this->target;
 
@@ -671,7 +681,7 @@ class SpecialBlock extends FormSpecialPage {
                        # Recheck params here...
                        if ( $type != Block::TYPE_USER ) {
                                $data['HideUser'] = false; # IP users should not be hidden
-                       } elseif ( !in_array( $data['Expiry'], array( 'infinite', 'infinity', 'indefinite' ) ) ) {
+                       } elseif ( !wfIsInfinity( $data['Expiry'] ) ) {
                                # Bad expiry.
                                return array( 'ipb_expiry_temp' );
                        } elseif ( $wgHideUserContribLimit !== false
@@ -784,22 +794,21 @@ class SpecialBlock extends FormSpecialPage {
 
                # Prepare log parameters
                $logParams = array();
-               $logParams[] = $data['Expiry'];
-               $logParams[] = self::blockLogFlags( $data, $type );
+               $logParams['5::duration'] = $data['Expiry'];
+               $logParams['6::flags'] = self::blockLogFlags( $data, $type );
 
                # Make log entry, if the name is hidden, put it in the oversight log
                $log_type = $data['HideUser'] ? 'suppress' : 'block';
-               $log = new LogPage( $log_type );
-               $log_id = $log->addEntry(
-                       $logaction,
-                       Title::makeTitle( NS_USER, $target ),
-                       $data['Reason'][0],
-                       $logParams,
-                       $performer
-               );
+               $logEntry = new ManualLogEntry( $log_type, $logaction );
+               $logEntry->setTarget( Title::makeTitle( NS_USER, $target ) );
+               $logEntry->setComment( $data['Reason'][0] );
+               $logEntry->setPerformer( $performer );
+               $logEntry->setParameters( $logParams );
                # Relate log ID to block IDs (bug 25763)
                $blockIds = array_merge( array( $status['id'] ), $status['autoIds'] );
-               $log->addRelations( 'ipb_id', $blockIds, $log_id );
+               $logEntry->setRelations( array( 'ipb_id' => $blockIds ) );
+               $logId = $logEntry->insert();
+               $logEntry->publish( $logId );
 
                # Report to the user
                return true;
@@ -847,7 +856,7 @@ class SpecialBlock extends FormSpecialPage {
                        $infinity = wfGetDB( DB_SLAVE )->getInfinity();
                }
 
-               if ( $expiry == 'infinite' || $expiry == 'indefinite' ) {
+               if ( wfIsInfinity( $expiry ) ) {
                        $expiry = $infinity;
                } else {
                        $expiry = strtotime( $expiry );
index 4583430..0ec144a 100644 (file)
@@ -113,11 +113,6 @@ class SpecialBlockList extends SpecialPage {
        }
 
        function showList() {
-               # Purge expired entries on one in every 10 queries
-               if ( !mt_rand( 0, 10 ) ) {
-                       Block::purgeExpired();
-               }
-
                $conds = array();
                # Is the user allowed to see hidden blocks?
                if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
@@ -398,6 +393,10 @@ class BlockListPager extends TablePager {
                        'join_conds' => array( 'user' => array( 'LEFT JOIN', 'user_id = ipb_by' ) )
                );
 
+               # Filter out any expired blocks
+               $db = $this->getDatabase();
+               $info['conds'][] = 'ipb_expiry > ' . $db->addQuotes( $db->timestamp() );
+
                # Is the user allowed to see hidden blocks?
                if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
                        $info['conds']['ipb_deleted'] = 0;
index 91a148d..7028fdc 100644 (file)
@@ -135,7 +135,7 @@ class SpecialBookSources extends SpecialPage {
                        'isbn',
                        20,
                        $this->isbn,
-                       array( 'autofocus' => true, 'class' => 'mw-ui-input-inline' )
+                       array( 'autofocus' => '', 'class' => 'mw-ui-input-inline' )
                );
 
                $form .= '&#160;' . Html::submitButton(
index 674cbc8..eca307d 100644 (file)
@@ -141,7 +141,8 @@ class SpecialChangeEmail extends FormSpecialPage {
                        # Notify user that a confirmation email has been sent...
                        $this->getOutput()->wrapWikiMsg( "<div class='error' style='clear: both;'>\n$1\n</div>",
                                'eauthentsent', $this->getUser()->getName() );
-                       $this->getOutput()->addReturnTo( $titleObj, wfCgiToArray( $query ) ); // just show the link to go back
+                       // just show the link to go back
+                       $this->getOutput()->addReturnTo( $titleObj, wfCgiToArray( $query ) );
                }
        }
 
index 680aa35..9e4bbbe 100644 (file)
@@ -78,6 +78,53 @@ class DeletedContribsPager extends IndexPager {
                );
        }
 
+       /**
+        * This method basically executes the exact same code as the parent class, though with
+        * a hook added, to allow extensions to add additional queries.
+        *
+        * @param string $offset Index offset, inclusive
+        * @param int $limit Exact query limit
+        * @param bool $descending Query direction, false for ascending, true for descending
+        * @return ResultWrapper
+        */
+       function reallyDoQuery( $offset, $limit, $descending ) {
+               $pager = $this;
+
+               $data = array( parent::reallyDoQuery( $offset, $limit, $descending ) );
+
+               // This hook will allow extensions to add in additional queries, nearly
+               // identical to ContribsPager::reallyDoQuery.
+               Hooks::run(
+                       'DeletedContribsPager::reallyDoQuery',
+                       array( &$data, $pager, $offset, $limit, $descending )
+               );
+
+               $result = array();
+
+               // loop all results and collect them in an array
+               foreach ( $data as $query ) {
+                       foreach ( $query as $i => $row ) {
+                               // use index column as key, allowing us to easily sort in PHP
+                               $result[$row->{$this->getIndexField()} . "-$i"] = $row;
+                       }
+               }
+
+               // sort results
+               if ( $descending ) {
+                       ksort( $result );
+               } else {
+                       krsort( $result );
+               }
+
+               // enforce limit
+               $result = array_slice( $result, 0, $limit );
+
+               // get rid of array keys
+               $result = array_values( $result );
+
+               return new FakeResultWrapper( $result );
+       }
+
        function getUserCond() {
                $condition = array();
 
@@ -141,6 +188,50 @@ class DeletedContribsPager extends IndexPager {
        /**
         * Generates each row in the contributions list.
         *
+        * @todo This would probably look a lot nicer in a table.
+        * @param stdClass $row
+        * @return string
+        */
+       function formatRow( $row ) {
+               $ret = '';
+               $classes = array();
+
+               /*
+                * There may be more than just revision rows. To make sure that we'll only be processing
+                * revisions here, let's _try_ to build a revision out of our row (without displaying
+                * notices though) and then trying to grab data from the built object. If we succeed,
+                * 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();
+               try {
+                       $rev = Revision::newFromArchiveRow( $row );
+                       $validRevision = (bool)$rev->getId();
+               } catch ( Exception $e ) {
+                       $validRevision = false;
+               }
+               wfRestoreWarnings();
+
+               if ( $validRevision ) {
+                       $ret = $this->formatRevisionRow( $row );
+               }
+
+               // Let extensions add data
+               Hooks::run( 'DeletedContributionsLineEnding', array( $this, &$ret, $row, &$classes ) );
+
+               if ( $classes === array() && $ret === '' ) {
+                       wfDebug( "Dropping Special:DeletedContribution row that could not be formatted\n" );
+                       $ret = "<!-- Could not format Special:DeletedContribution row. -->\n";
+               } else {
+                       $ret = Html::rawElement( 'li', array( 'class' => $classes ), $ret ) . "\n";
+               }
+
+               return $ret;
+       }
+
+       /**
+        * Generates each row in the contributions list for archive entries.
+        *
         * Contributions which are marked "top" are currently on top of the history.
         * For these contributions, a [rollback] link is shown for users with sysop
         * privileges. The rollback link restores the most recent version that was not
@@ -150,8 +241,7 @@ class DeletedContribsPager extends IndexPager {
         * @param stdClass $row
         * @return string
         */
-       function formatRow( $row ) {
-
+       function formatRevisionRow( $row ) {
                $page = Title::makeTitle( $row->ar_namespace, $row->ar_title );
 
                $rev = new Revision( array(
@@ -255,8 +345,6 @@ class DeletedContribsPager extends IndexPager {
                        $ret .= " <strong>" . $this->msg( 'rev-deleted-user-contribs' )->escaped() . "</strong>";
                }
 
-               $ret = Html::rawElement( 'li', array(), $ret ) . "\n";
-
                return $ret;
        }
 
index 77d2317..799e526 100644 (file)
@@ -53,6 +53,7 @@ class SpecialDiff extends RedirectSpecialPage {
                        $this->mAddedRedirectParams['diff'] = $parts[1];
                } else {
                        // Wrong number of parameters, bail out
+                       $this->getOutput()->addHelpLink( 'Help:Diff' );
                        throw new ErrorPageError( 'nopagetitle', 'nopagetext' );
                }
 
index ffe7892..910fe25 100644 (file)
@@ -344,7 +344,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         */
        protected function getWatchlistInfo() {
                $titles = array();
-               $dbr = wfGetDB( DB_MASTER );
+               $dbr = wfGetDB( DB_SLAVE );
 
                $res = $dbr->select(
                        array( 'watchlist' ),
index 891ea01..b7582e6 100644 (file)
@@ -154,7 +154,7 @@ class SpecialExpandTemplates extends SpecialPage {
                        'contexttitle',
                        60,
                        $title,
-                       array( 'autofocus' => true, 'class' => 'mw-ui-input-inline' )
+                       array( 'autofocus' => '', 'class' => 'mw-ui-input-inline' )
                ) . '</p>';
                $form .= '<p>' . Xml::label(
                        $this->msg( 'expand_templates_input' )->text(),
index 38c52a0..c30d962 100644 (file)
@@ -182,13 +182,20 @@ class SpecialExport extends SpecialPage {
                $out = $this->getOutput();
                $out->addWikiMsg( 'exporttext' );
 
+               if ( $page == '' ) {
+                       $categoryName = $request->getText( 'catname' );
+               } else {
+                       $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
+                       40,
+                       $categoryName
                ) . '&#160;';
                $form .= Xml::submitButton(
                        $this->msg( 'export-addcat' )->text(),
index 607b4f6..da79bb8 100644 (file)
@@ -110,25 +110,31 @@ class FileDuplicateSearchPage extends QueryPage {
                $out = $this->getOutput();
 
                # Create the input form
-               $out->addHTML(
-                       Html::openElement(
-                               'form',
-                               array( 'id' => 'fileduplicatesearch', 'method' => 'get', 'action' => wfScript() )
-                       ) . "\n" .
-                               Html::hidden( 'title', $this->getPageTitle()->getPrefixedDBkey() ) . "\n" .
-                               Html::openElement( 'fieldset' ) . "\n" .
-                               Html::element( 'legend', null, $this->msg( 'fileduplicatesearch-legend' )->text() ) . "\n" .
-                               Xml::inputLabel(
-                                       $this->msg( 'fileduplicatesearch-filename' )->text(),
-                                       'filename',
-                                       'filename',
-                                       50,
-                                       $this->filename
-                               ) . "\n" .
-                               Xml::submitButton( $this->msg( 'fileduplicatesearch-submit' )->text() ) . "\n" .
-                               Html::closeElement( 'fieldset' ) . "\n" .
-                               Html::closeElement( 'form' )
+               $formFields = array(
+                       'filename' => array(
+                               'type' => 'text',
+                               'name' => 'filename',
+                               'label-message' => 'fileduplicatesearch-filename',
+                               'id' => 'filename',
+                               'size' => 50,
+                               'value' => $this->filename,
+                               'cssclass' => 'mw-ui-input-inline'
+                       ),
+               );
+               $hiddenFields = array(
+                       'title' => $this->getPageTitle()->getPrefixedDBKey(),
                );
+               $htmlForm = HTMLForm::factory( 'inline', $formFields, $this->getContext() );
+               $htmlForm->addHiddenFields( $hiddenFields );
+               $htmlForm->setAction( wfScript() );
+               $htmlForm->setMethod( 'get' );
+               $htmlForm->setSubmitProgressive();
+               $htmlForm->setSubmitTextMsg( $this->msg( 'fileduplicatesearch-submit' ) );
+               $htmlForm->setWrapperLegendMsg( 'fileduplicatesearch-legend' );
+
+               // The form should be visible always, even if it was submitted (e.g. to perform another action).
+               // To bypass the callback validation of HTMLForm, use prepareForm() and displayForm().
+               $htmlForm->prepareForm()->displayForm( false );
 
                if ( $this->file ) {
                        $this->hash = $this->file->getSha1();
@@ -212,7 +218,6 @@ class FileDuplicateSearchPage extends QueryPage {
                if ( $result->isLocal() ) {
                        $userId = $result->getUser( 'id' );
                        $user = Linker::userLink( $userId, $userText );
-                       $user .= $this->getContext()->msg( 'word-separator' )->escaped();
                        $user .= '<span style="white-space: nowrap;">';
                        $user .= Linker::userToolLinks( $userId, $userText );
                        $user .= '</span>';
index aa9b0f4..af86964 100644 (file)
@@ -546,7 +546,6 @@ class ImportReporter extends ContextSource {
                                        "</li>\n"
                        );
 
-                       $log = new LogPage( 'import' );
                        if ( $this->mIsUpload ) {
                                $detail = $this->msg( 'import-logentry-upload-detail' )->numParams(
                                        $successCount )->inContentLanguage()->text();
@@ -554,7 +553,7 @@ class ImportReporter extends ContextSource {
                                        $detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text()
                                                . $this->reason;
                                }
-                               $log->addEntry( 'upload', $title, $detail, array(), $this->getUser() );
+                               $action = 'upload';
                        } else {
                                $interwiki = '[[:' . $this->mInterwiki . ':' .
                                        $foreignTitle->getFullText() . ']]';
@@ -564,9 +563,16 @@ class ImportReporter extends ContextSource {
                                        $detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text()
                                                . $this->reason;
                                }
-                               $log->addEntry( 'interwiki', $title, $detail, array(), $this->getUser() );
+                               $action = 'interwiki';
                        }
 
+                       $logEntry = new ManualLogEntry( 'import', $action );
+                       $logEntry->setTarget( $title );
+                       $logEntry->setComment( $detail );
+                       $logEntry->setPerformer( $this->getUser() );
+                       $logid = $logEntry->insert();
+                       $logEntry->publish( $logid );
+
                        $comment = $detail; // quick
                        $dbw = wfGetDB( DB_MASTER );
                        $latest = $title->getLatestRevID();
index 492105d..ecb166a 100644 (file)
@@ -242,9 +242,13 @@ HTML;
                        'debug' => ResourceLoader::inDebugMode() ? 'true' : 'false',
                ) );
 
-               $styles = $out->makeResourceLoaderLink( 'jquery.qunit', ResourceLoaderModule::TYPE_STYLES, false );
+               $styles = $out->makeResourceLoaderLink(
+                       'jquery.qunit', ResourceLoaderModule::TYPE_STYLES, false
+               );
                // Use 'raw' since this is a plain HTML page without ResourceLoader
-               $scripts = $out->makeResourceLoaderLink( 'jquery.qunit', ResourceLoaderModule::TYPE_SCRIPTS, false, array( 'raw' => 'true' ) );
+               $scripts = $out->makeResourceLoaderLink(
+                       'jquery.qunit', ResourceLoaderModule::TYPE_SCRIPTS, false, array( 'raw' => 'true' )
+               );
 
                $head = trim( $styles['html'] . $scripts['html'] );
                $html = <<<HTML
index f6cb84d..75ff8f3 100644 (file)
@@ -27,6 +27,8 @@
  * @ingroup SpecialPage
  */
 class LinkSearchPage extends QueryPage {
+       /** @var array|bool */
+       private $mungedQuery = false;
 
        /**
         * @var PageLinkRenderer
@@ -66,8 +68,9 @@ class LinkSearchPage extends QueryPage {
         * This allows for dependency injection even though we don't control object creation.
         */
        private function initServices() {
+               global $wgLanguageCode;
                if ( !$this->linkRenderer ) {
-                       $lang = $this->getContext()->getLanguage();
+                       $lang = Language::factory( $wgLanguageCode );
                        $titleFormatter = new MediaWikiTitleCodec( $lang, GenderCache::singleton() );
                        $this->linkRenderer = new MediaWikiPageLinkRenderer( $titleFormatter );
                }
@@ -162,7 +165,7 @@ class LinkSearchPage extends QueryPage {
                                'namespace' => $namespace,
                                'protocol' => $protocol ) );
                        parent::execute( $par );
-                       if ( $this->mMungedQuery === false ) {
+                       if ( $this->mungedQuery === false ) {
                                $out->addWikiMsg( 'linksearch-error' );
                        }
                }
@@ -221,13 +224,13 @@ class LinkSearchPage extends QueryPage {
                $dbr = wfGetDB( DB_SLAVE );
                // strip everything past first wildcard, so that
                // index-based-only lookup would be done
-               list( $this->mMungedQuery, $clause ) = self::mungeQuery( $this->mQuery, $this->mProt );
-               if ( $this->mMungedQuery === false ) {
+               list( $this->mungedQuery, $clause ) = self::mungeQuery( $this->mQuery, $this->mProt );
+               if ( $this->mungedQuery === false ) {
                        // Invalid query; return no results
                        return array( 'tables' => 'page', 'fields' => 'page_id', 'conds' => '0=1' );
                }
 
-               $stripped = LinkFilter::keepOneWildcard( $this->mMungedQuery );
+               $stripped = LinkFilter::keepOneWildcard( $this->mungedQuery );
                $like = $dbr->buildLike( $stripped );
                $retval = array(
                        'tables' => array( 'page', 'externallinks' ),
index 760704d..7576c1f 100644 (file)
@@ -84,6 +84,7 @@ class ImageListPager extends TablePager {
        function __construct( IContextSource $context, $userName = null, $search = '',
                $including = false, $showAll = false
        ) {
+               $this->setContext( $context );
                $this->mIncluding = $including;
                $this->mShowAll = $showAll;
 
@@ -107,7 +108,7 @@ class ImageListPager extends TablePager {
                }
 
                if ( !$including ) {
-                       if ( $context->getRequest()->getText( 'sort', 'img_date' ) == 'img_date' ) {
+                       if ( $this->getRequest()->getText( 'sort', 'img_date' ) == 'img_date' ) {
                                $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
                        } else {
                                $this->mDefaultDirection = IndexPager::DIR_ASCENDING;
@@ -425,7 +426,7 @@ class ImageListPager extends TablePager {
        function formatValue( $field, $value ) {
                switch ( $field ) {
                        case 'thumb':
-                               $opt = array( 'time' => $this->mCurrentRow->img_timestamp );
+                               $opt = array( 'time' => wfTimestamp( TS_MW, $this->mCurrentRow->img_timestamp ) );
                                $file = RepoGroup::singleton()->getLocalRepo()->findFile( $value, $opt );
                                // If statement for paranoia
                                if ( $file ) {
index 9315eb8..88184f9 100644 (file)
  * @ingroup SpecialPage
  */
 class SpecialLog extends SpecialPage {
-       /**
-        * List log type for which the target is a user
-        * Thus if the given target is in NS_MAIN we can alter it to be an NS_USER
-        * Title user instead.
-        */
-       private $typeOnUser = array(
-               'block',
-               'newusers',
-               'rights',
-       );
-
        public function __construct() {
                parent::__construct( 'Log' );
        }
@@ -97,14 +86,16 @@ class SpecialLog extends SpecialPage {
                        }
                } else {
                        // Allow extensions to add relations to their search types
-                       Hooks::run( 'SpecialLogAddLogSearchRelations', array( $opts->getValue( 'type' ), $this->getRequest(), &$qc ) );
+                       Hooks::run(
+                               'SpecialLogAddLogSearchRelations',
+                               array( $opts->getValue( 'type' ), $this->getRequest(), &$qc )
+                       );
                }
 
                # Some log types are only for a 'User:' title but we might have been given
                # only the username instead of the full title 'User:username'. This part try
                # to lookup for a user by that name and eventually fix user input. See bug 1697.
-               Hooks::run( 'GetLogTypesOnUser', array( &$this->typeOnUser ) );
-               if ( in_array( $opts->getValue( 'type' ), $this->typeOnUser ) ) {
+               if ( in_array( $opts->getValue( 'type' ), self::getLogTypesOnUser() ) ) {
                        # ok we have a type of log which expect a user title.
                        $target = Title::newFromText( $opts->getValue( 'page' ) );
                        if ( $target && $target->getNamespace() === NS_MAIN ) {
@@ -118,6 +109,29 @@ class SpecialLog extends SpecialPage {
                $this->show( $opts, $qc );
        }
 
+       /**
+        * List log type for which the target is a user
+        * Thus if the given target is in NS_MAIN we can alter it to be an NS_USER
+        * Title user instead.
+        *
+        * @since 1.25
+        * @return array
+        */
+       public static function getLogTypesOnUser() {
+               static $types = null;
+               if ( $types !== null ) {
+                       return $types;
+               }
+               $types = array(
+                       'block',
+                       'newusers',
+                       'rights',
+               );
+
+               Hooks::run( 'GetLogTypesOnUser', array( &$types ) );
+               return $types;
+       }
+
        /**
         * Return an array of subpages that this special page will accept.
         *
index 1056cda..b62de5d 100644 (file)
@@ -73,6 +73,10 @@ class MediaStatisticsPage extends QueryPage {
                                'namespace' => NS_MEDIA, /* needs to be something */
                                'value' => '1'
                        ),
+                       'conds' => array(
+                               // WMF has a random null row in the db
+                               'img_media_type IS NOT NULL'
+                       ),
                        'options' => array(
                                'GROUP BY' => array(
                                        'img_media_type',
index 7e74cd5..368d491 100644 (file)
@@ -152,16 +152,17 @@ class SpecialMergeHistory extends SpecialPage {
 
                if ( count( $errors ) ) {
                        $this->showMergeForm();
-                       $this->getOutput()->addHTML( implode( "\n", $errors ) );
+                       $out->addHTML( implode( "\n", $errors ) );
                } else {
                        $this->showHistory();
                }
        }
 
        function showMergeForm() {
-               $this->getOutput()->addWikiMsg( 'mergehistory-header' );
+               $out = $this->getOutput();
+               $out->addWikiMsg( 'mergehistory-header' );
 
-               $this->getOutput()->addHTML(
+               $out->addHTML(
                        Xml::openElement( 'form', array(
                                'method' => 'get',
                                'action' => wfScript() ) ) .
@@ -185,6 +186,8 @@ class SpecialMergeHistory extends SpecialPage {
                                '</fieldset>' .
                                '</form>'
                );
+
+               $out->addHelpLink( 'Help:Merge history' );
        }
 
        private function showHistory() {
index cac324a..a519bd0 100644 (file)
@@ -140,6 +140,7 @@ class MovePageForm extends UnlistedSpecialPage {
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'move-page', $this->oldTitle->getPrefixedText() ) );
                $out->addModules( 'mediawiki.special.movePage' );
+               $out->addHelpLink( 'Help:Moving a page' );
 
                $newTitle = $this->newTitle;
 
@@ -536,8 +537,9 @@ class MovePageForm extends UnlistedSpecialPage {
                        // Delete an associated image if there is
                        if ( $nt->getNamespace() == NS_FILE ) {
                                $file = wfLocalFile( $nt );
+                               $file->load( File::READ_LATEST );
                                if ( $file->exists() ) {
-                                       $file->delete( $reason, false );
+                                       $file->delete( $reason, false, $user );
                                }
                        }
 
index 71b1893..fce1cdc 100644 (file)
@@ -63,6 +63,7 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
         * @return Title|null
         */
        public function findTitle( $par ) {
+               $par = (string)$par;
                // base = title without language code suffix
                // provided = the title as it was given
                $base = $provided = Title::newFromText( $par );
@@ -80,6 +81,11 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
                        return null;
                }
 
+               if ( $base->isRedirect() ) {
+                       $page = new WikiPage( $base );
+                       $base = $page->getRedirectTarget();
+               }
+
                $uiCode = $this->getLanguage()->getCode();
                $proposed = $base->getSubpage( $uiCode );
                if ( $uiCode !== $this->getConfig()->get( 'LanguageCode' ) && $proposed && $proposed->exists() ) {
index 94e77e3..de19fa4 100644 (file)
@@ -30,6 +30,9 @@ class SpecialNewFiles extends IncludableSpecialPage {
                $this->setHeaders();
                $this->outputHeader();
 
+               $out = $this->getOutput();
+               $out->addHelpLink( 'Help:New images' );
+
                $pager = new NewFilesPager( $this->getContext(), $par );
 
                if ( !$this->including() ) {
@@ -39,9 +42,9 @@ class SpecialNewFiles extends IncludableSpecialPage {
                        $form->displayForm( '' );
                }
 
-               $this->getOutput()->addHTML( $pager->getBody() );
+               $out->addHTML( $pager->getBody() );
                if ( !$this->including() ) {
-                       $this->getOutput()->addHTML( $pager->getNavigationBar() );
+                       $out->addHTML( $pager->getNavigationBar() );
                }
        }
 
index 994a2e5..594628f 100644 (file)
@@ -127,6 +127,8 @@ class SpecialNewpages extends IncludableSpecialPage {
                $this->showNavigation = !$this->including(); // Maybe changed in setup
                $this->setup( $par );
 
+               $out->addHelpLink( 'Help:New pages' );
+
                if ( !$this->including() ) {
                        // Settings
                        $this->form();
index cea00fa..ef61f94 100644 (file)
@@ -55,6 +55,8 @@ class SpecialPreferences extends SpecialPage {
                        );
                }
 
+               $out->addHelpLink( 'Help:Preferences' );
+
                $htmlForm = Preferences::getFormObject( $this->getUser(), $this->getContext() );
                $htmlForm->setSubmitCallback( array( 'Preferences', 'tryUISubmit' ) );
 
index 2e67e2b..5a67d92 100644 (file)
@@ -102,7 +102,10 @@ class SpecialPrefixindex extends SpecialAllPages {
         */
        protected function namespacePrefixForm( $namespace = NS_MAIN, $from = '' ) {
                $out = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) );
-               $out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $this->getConfig()->get( 'Script' ) ) );
+               $out .= Xml::openElement(
+                       'form',
+                       array( 'method' => 'get', 'action' => $this->getConfig()->get( 'Script' ) )
+               );
                $out .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
                $out .= Xml::openElement( 'fieldset' );
                $out .= Xml::element( 'legend', null, $this->msg( 'allpages' )->text() );
index 69436bf..b6f19ec 100644 (file)
@@ -68,6 +68,8 @@ class SpecialRandomInCategory extends FormSpecialPage {
        }
 
        protected function getFormFields() {
+               $this->getOutput()->addHelpLink( 'Help:RandomInCategory' );
+
                $form = array(
                        'category' => array(
                                'type' => 'text',
index efb870b..1387988 100644 (file)
@@ -252,7 +252,9 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                return $rows;
        }
 
-       protected function runMainQueryHook( &$tables, &$fields, &$conds, &$query_options, &$join_conds, $opts ) {
+       protected function runMainQueryHook( &$tables, &$fields, &$conds,
+               &$query_options, &$join_conds, $opts
+       ) {
                return parent::runMainQueryHook( $tables, $fields, $conds, $query_options, $join_conds, $opts )
                        && Hooks::run(
                                'SpecialRecentChangesQuery',
@@ -261,6 +263,10 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        );
        }
 
+       protected function getDB() {
+               return wfGetDB( DB_SLAVE, 'recentchanges' );
+       }
+
        public function outputFeedLinks() {
                $this->addFeedLinks( $this->getFeedQuery() );
        }
@@ -311,7 +317,9 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        $rc = RecentChange::newFromRow( $obj );
                        $rc->counter = $counter++;
                        # Check if the page has been updated since the last visit
-                       if ( $this->getConfig()->get( 'ShowUpdatedMarker' ) && !empty( $obj->wl_notificationtimestamp ) ) {
+                       if ( $this->getConfig()->get( 'ShowUpdatedMarker' )
+                               && !empty( $obj->wl_notificationtimestamp )
+                       ) {
                                $rc->notificationtimestamp = ( $obj->rc_timestamp >= $obj->wl_notificationtimestamp );
                        } else {
                                $rc->notificationtimestamp = false; // Default
@@ -732,7 +740,8 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
 
                        $link = $this->makeOptionsLink( $linkMessage->text(),
                                array( $key => 1 - $options[$key] ), $nondefaults );
-                       $links[] = "<span class=\"$msg rcshowhideoption\">" . $this->msg( $msg )->rawParams( $link )->escaped() . '</span>';
+                       $links[] = "<span class=\"$msg rcshowhideoption\">"
+                               . $this->msg( $msg )->rawParams( $link )->escaped() . '</span>';
                }
 
                // show from this onward link
index 7a350c7..e0a964e 100644 (file)
@@ -374,10 +374,12 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                $userAllowed = true;
 
                // Messages: revdelete-selected-text, revdelete-selected-file, logdelete-selected
-               $this->getOutput()->wrapWikiMsg( "<strong>$1</strong>", array( $this->typeLabels['selected'],
+               $out = $this->getOutput();
+               $out->wrapWikiMsg( "<strong>$1</strong>", array( $this->typeLabels['selected'],
                        $this->getLanguage()->formatNum( count( $this->ids ) ), $this->targetObj->getPrefixedText() ) );
 
-               $this->getOutput()->addHTML( "<ul>" );
+               $out->addHelpLink( 'Help:RevisionDelete' );
+               $out->addHTML( "<ul>" );
 
                $numRevisions = 0;
                // Live revisions...
@@ -395,14 +397,14 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        }
 
                        $numRevisions++;
-                       $this->getOutput()->addHTML( $item->getHTML() );
+                       $out->addHTML( $item->getHTML() );
                }
 
                if ( !$numRevisions ) {
                        throw new ErrorPageError( 'revdelete-nooldid-title', 'revdelete-nooldid-text' );
                }
 
-               $this->getOutput()->addHTML( "</ul>" );
+               $out->addHTML( "</ul>" );
                // Explanation text
                $this->addUsageText();
 
@@ -413,7 +415,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
 
                // Show form if the user can submit
                if ( $this->mIsAllowed ) {
-                       $out = Xml::openElement( 'form', array( 'method' => 'post',
+                       $form = Xml::openElement( 'form', array( 'method' => 'post',
                                        'action' => $this->getPageTitle()->getLocalURL( array( 'action' => 'submit' ) ),
                                        'id' => 'mw-revdel-form-revisions' ) ) .
                                Xml::fieldset( $this->msg( 'revdelete-legend' )->text() ) .
@@ -465,12 +467,12 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                        array(),
                                        array( 'action' => 'edit' )
                                );
-                               $out .= Xml::tags( 'p', array( 'class' => 'mw-revdel-editreasons' ), $link ) . "\n";
+                               $form .= Xml::tags( 'p', array( 'class' => 'mw-revdel-editreasons' ), $link ) . "\n";
                        }
                } else {
-                       $out = '';
+                       $form = '';
                }
-               $this->getOutput()->addHTML( $out );
+               $out->addHTML( $form );
        }
 
        /**
index 1bafc61..8cf9367 100644 (file)
@@ -22,6 +22,8 @@
  * @author Aaron Schulz
  */
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * Special page designed for running background tasks (internal use only)
  *
@@ -61,10 +63,11 @@ class SpecialRunJobs extends UnlistedSpecialPage {
 
                $squery = $params;
                unset( $squery['signature'] );
-               $cSig = self::getQuerySignature( $squery, $this->getConfig()->get( 'SecretKey' ) ); // correct signature
-               $rSig = $params['signature']; // provided signature
+               $correctSignature = self::getQuerySignature( $squery, $this->getConfig()->get( 'SecretKey' ) );
+               $providedSignature = $params['signature'];
 
-               $verified = is_string( $rSig ) && hash_equals( $cSig, $rSig );
+               $verified = is_string( $providedSignature )
+                       && hash_equals( $correctSignature, $providedSignature );
                if ( !$verified || $params['sigexpiry'] < time() ) {
                        header( "HTTP/1.0 400 Bad Request" );
                        print 'Invalid or stale signature provided';
@@ -88,7 +91,7 @@ class SpecialRunJobs extends UnlistedSpecialPage {
 
                // Do all of the specified tasks...
                if ( in_array( 'jobs', explode( '|', $params['tasks'] ) ) ) {
-                       $runner = new JobRunner( MWLoggerFactory::getInstance( 'runJobs' ) );
+                       $runner = new JobRunner( LoggerFactory::getInstance( 'runJobs' ) );
                        $response = $runner->run( array(
                                'type'     => $params['type'],
                                'maxJobs'  => $params['maxjobs'] ? $params['maxjobs'] : 1,
index 55be2c2..608d62e 100644 (file)
@@ -533,7 +533,7 @@ class SpecialSearch extends SpecialPage {
                                $request->getVal( 'nsRemember' ),
                                'searchnamespace',
                                $request
-                       )
+                       ) && !wfReadOnly()
                ) {
                        // Reset namespace preferences: namespaces are not searched
                        // when they're not mentioned in the URL parameters.
index eff06f4..ed3ad5b 100644 (file)
@@ -45,6 +45,7 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
                        return;
                }
 
+               $out->addHelpLink( 'Help:Special pages' );
                $this->outputPageList( $groups );
        }
 
index 1f339d1..0acbf95 100644 (file)
@@ -126,7 +126,7 @@ class SpecialStatistics extends SpecialPage {
         * @return string
         */
        private function getPageStats() {
-               return Xml::openElement( 'tr' ) .
+               $pageStatsHtml = Xml::openElement( 'tr' ) .
                        Xml::tags( 'th', array( 'colspan' => '2' ), $this->msg( 'statistics-header-pages' )->parse() ) .
                        Xml::closeElement( 'tr' ) .
                                $this->formatRow( Linker::linkKnown( SpecialPage::getTitleFor( 'Allpages' ),
@@ -136,11 +136,17 @@ class SpecialStatistics extends SpecialPage {
                                $this->formatRow( $this->msg( 'statistics-pages' )->parse(),
                                        $this->getLanguage()->formatNum( $this->total ),
                                        array( 'class' => 'mw-statistics-pages' ),
-                                       'statistics-pages-desc' ) .
-                               $this->formatRow( Linker::linkKnown( SpecialPage::getTitleFor( 'MediaStatistics' ),
-                                       $this->msg( 'statistics-files' )->parse() ),
-                                       $this->getLanguage()->formatNum( $this->images ),
-                                       array( 'class' => 'mw-statistics-files' ) );
+                                       'statistics-pages-desc' );
+
+               // Show the image row only, when there are files or upload is possible
+               if ( $this->images !== 0 || $this->getConfig()->get( 'EnableUploads' ) ) {
+                       $pageStatsHtml .= $this->formatRow( Linker::linkKnown( SpecialPage::getTitleFor( 'MediaStatistics' ),
+                               $this->msg( 'statistics-files' )->parse() ),
+                               $this->getLanguage()->formatNum( $this->images ),
+                               array( 'class' => 'mw-statistics-files' ) );
+               }
+
+               return $pageStatsHtml;
        }
 
        private function getEditStats() {
index ff263b6..0b8147e 100644 (file)
@@ -114,6 +114,12 @@ class SpecialTags extends SpecialPage {
                $showActions = $user->isAllowed( 'managechangetags' );
 
                // Write the headers
+               $tagUsageStatistics = ChangeTags::tagUsageStatistics();
+
+               // Show header only if there exists atleast one tag
+               if ( !$tagUsageStatistics ) {
+                       return;
+               }
                $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() ) .
@@ -134,7 +140,7 @@ class SpecialTags extends SpecialPage {
                $this->extensionActivatedTags = array_fill_keys(
                        ChangeTags::listExtensionActivatedTags(), true );
 
-               foreach ( ChangeTags::tagUsageStatistics() as $tag => $hitcount ) {
+               foreach ( $tagUsageStatistics as $tag => $hitcount ) {
                        $html .= $this->doTagRow( $tag, $hitcount, $showActions );
                }
 
index 192dc96..f81f1c3 100644 (file)
@@ -227,8 +227,12 @@ class SpecialUnblock extends SpecialPage {
                }
 
                # Make log entry
-               $log = new LogPage( 'block' );
-               $log->addEntry( 'unblock', $page, $data['Reason'], array(), $performer );
+               $logEntry = new ManualLogEntry( 'block', 'unblock' );
+               $logEntry->setTarget( $page );
+               $logEntry->setComment( $data['Reason'] );
+               $logEntry->setPerformer( $performer );
+               $logId = $logEntry->insert();
+               $logEntry->publish( $logId );
 
                return true;
        }
index fb2c421..de2365e 100644 (file)
@@ -370,6 +370,7 @@ class PageArchive {
 
                if ( $restoreFiles && $this->title->getNamespace() == NS_FILE ) {
                        $img = wfLocalFile( $this->title );
+                       $img->load( File::READ_LATEST );
                        $this->fileStatus = $img->restore( $fileVersions, $unsuppress );
                        if ( !$this->fileStatus->isOK() ) {
                                return false;
@@ -790,6 +791,7 @@ class SpecialUndelete extends SpecialPage {
                        return;
                }
 
+               $out->addHelpLink( 'Help:Undelete' );
                if ( $this->mAllowed ) {
                        $out->setPageTitle( $this->msg( 'undeletepage' ) );
                } else {
@@ -839,7 +841,7 @@ class SpecialUndelete extends SpecialPage {
                                        'prefix',
                                        20,
                                        $this->mSearchPrefix,
-                                       array( 'id' => 'prefix', 'autofocus' => true )
+                                       array( 'id' => 'prefix', 'autofocus' => '' )
                                ) . ' ' .
                                Xml::submitButton( $this->msg( 'undelete-search-submit' )->text() ) .
                                Xml::closeElement( 'fieldset' ) .
@@ -1312,7 +1314,7 @@ class SpecialUndelete extends SpecialPage {
                                        'wpComment',
                                        50,
                                        $this->mComment,
-                                       array( 'id' => 'wpComment', 'autofocus' => true )
+                                       array( 'id' => 'wpComment', 'autofocus' => '' )
                                ) .
                                "</td>
                        </tr>
index ce8192b..6f9254b 100644 (file)
@@ -160,6 +160,8 @@ class SpecialUpload extends SpecialPage {
                        throw new ErrorPageError( 'uploaddisabled', 'uploaddisabledtext' );
                }
 
+               $this->getOutput()->addHelpLink( 'Help:Managing files' );
+
                # Check permissions
                $user = $this->getUser();
                $permissionRequired = UploadBase::isAllowed( $user );
@@ -883,6 +885,17 @@ class UploadForm extends HTMLForm {
                        );
                }
 
+               $help = $this->msg( 'upload-maxfilesize',
+                               $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] )
+                       )->parse();
+
+               // If the user can also upload by URL, there are 2 different file size limits.
+               // This extra message helps stress which limit corresponds to what.
+               if ( $canUploadByUrl ) {
+                       $help .= $this->msg( 'word-separator' )->escaped();
+                       $help .= $this->msg( 'upload_source_file' )->parse();
+               }
+
                $descriptor['UploadFile'] = array(
                        'class' => 'UploadSourceField',
                        'section' => 'source',
@@ -892,11 +905,7 @@ class UploadForm extends HTMLForm {
                        'label-message' => 'sourcefilename',
                        'upload-type' => 'File',
                        'radio' => &$radio,
-                       'help' => $this->msg( 'upload-maxfilesize',
-                               $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] )
-                       )->parse() .
-                               $this->msg( 'word-separator' )->escaped() .
-                               $this->msg( 'upload_source_file' )->escaped(),
+                       'help' => $help,
                        'checked' => $selectedSourceType == 'file',
                );
 
index 462dbee..12e103e 100644 (file)
@@ -48,10 +48,6 @@ class SpecialUploadStash extends UnlistedSpecialPage {
 
        public function __construct() {
                parent::__construct( 'UploadStash', 'upload' );
-               try {
-                       $this->stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
-               } catch ( UploadStashNotAvailableException $e ) {
-               }
        }
 
        /**
@@ -62,6 +58,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         * @return bool Success
         */
        public function execute( $subPage ) {
+               $this->stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
                $this->checkPermissions();
 
                if ( $subPage === null || $subPage === '' ) {
@@ -250,9 +247,9 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                // make a curl call to the scaler to create a thumbnail
                $httpOptions = array(
                        'method' => 'GET',
-                       'timeout' => 'default'
+                       'timeout' => 5 // T90599 attempt to time out cleanly
                );
-               $req = MWHttpRequest::factory( $scalerThumbUrl, $httpOptions );
+               $req = MWHttpRequest::factory( $scalerThumbUrl, $httpOptions, __METHOD__ );
                $status = $req->execute();
                if ( !$status->isOK() ) {
                        $errors = $status->getErrorsArray();
index f2f6b69..10edbcf 100644 (file)
@@ -545,14 +545,11 @@ class LoginForm extends SpecialPage {
                                return Status::newFatal( 'badretype' );
                        }
 
-                       # check for minimal password length
-                       $valid = $u->getPasswordValidity( $this->mPassword );
-                       if ( $valid !== true ) {
-                               if ( !is_array( $valid ) ) {
-                                       $valid = array( $valid, $wgMinimalPasswordLength );
-                               }
-
-                               return call_user_func_array( 'Status::newFatal', $valid );
+                       # check for password validity, return a fatal Status if invalid
+                       $validity = $u->checkPasswordValidity( $this->mPassword );
+                       if ( !$validity->isGood() ) {
+                               $validity->ok = false; // make sure this Status is fatal
+                               return $validity;
                        }
                }
 
@@ -765,7 +762,7 @@ class LoginForm extends SpecialPage {
                                // As a side-effect, we can authenticate the user's e-mail ad-
                                // dress if it's not already done, since the temporary password
                                // was sent via e-mail.
-                               if ( !$u->isEmailConfirmed() ) {
+                               if ( !$u->isEmailConfirmed() && !wfReadOnly() ) {
                                        $u->confirmEmail();
                                        $u->saveSettings();
                                }
@@ -916,7 +913,7 @@ class LoginForm extends SpecialPage {
                        case self::SUCCESS:
                                # We've verified now, update the real record
                                $user = $this->getUser();
-                               $user->invalidateCache();
+                               $user->touch();
 
                                if ( $user->requiresHTTPS() ) {
                                        $this->mStickHTTPS = true;
index a5edcb0..785a844 100644 (file)
@@ -135,6 +135,7 @@ class UserrightsPage extends SpecialPage {
 
                $out = $this->getOutput();
                $out->addModuleStyles( 'mediawiki.special' );
+               $out->addHelpLink( 'Help:Assigning permissions' );
 
                // show the general form
                if ( count( $available['add'] ) || count( $available['remove'] ) ) {
@@ -440,7 +441,7 @@ class UserrightsPage extends SpecialPage {
                                30,
                                str_replace( '_', ' ', $this->mTarget ),
                                array(
-                                       'autofocus' => true,
+                                       'autofocus' => '',
                                        'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
                                )
                        ) . ' ' .
index a7365bb..c1a9593 100644 (file)
@@ -515,7 +515,10 @@ class SpecialVersion extends SpecialPage {
                        array( 'id' => 'mw-version-libraries' ),
                        $this->msg( 'version-libraries' )->text()
                );
-               $out .= Html::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'sv-libraries' ) );
+               $out .= Html::openElement(
+                       'table',
+                       array( 'class' => 'wikitable plainlinks', 'id' => 'sv-libraries' )
+               );
                $out .= Html::openElement( 'tr' )
                        . Html::element( 'th', array(), $this->msg( 'version-libraries-library' )->text() )
                        . Html::element( 'th', array(), $this->msg( 'version-libraries-version' )->text() )
@@ -528,7 +531,11 @@ class SpecialVersion extends SpecialPage {
                                continue;
                        }
                        $out .= Html::openElement( 'tr' )
-                               . Html::rawElement( 'td', array(), Linker::makeExternalLink( "https://packagist.org/packages/$name", $name ) )
+                               . Html::rawElement(
+                                       'td',
+                                       array(),
+                                       Linker::makeExternalLink( "https://packagist.org/packages/$name", $name )
+                               )
                                . Html::element( 'td', array(), $info['version'] )
                                . Html::closeElement( 'tr' );
                }
@@ -588,11 +595,15 @@ class SpecialVersion extends SpecialPage {
 
                $fhooks = $wgParser->getFunctionHooks();
                if ( count( $fhooks ) ) {
-                       $out = Html::rawElement( 'h2', array( 'class' => 'mw-headline plainlinks' ), Linker::makeExternalLink(
-                               '//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Parser_functions',
-                               $this->msg( 'version-parser-function-hooks' )->parse(),
-                               false /* msg()->parse() already escapes */
-                       ) );
+                       $out = Html::rawElement(
+                               'h2',
+                               array( 'class' => 'mw-headline plainlinks' ),
+                               Linker::makeExternalLink(
+                                       '//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Parser_functions',
+                                       $this->msg( 'version-parser-function-hooks' )->parse(),
+                                       false /* msg()->parse() already escapes */
+                               )
+                       );
 
                        $out .= $this->listToText( $fhooks );
                } else {
index cad2348..dd4eb0a 100644 (file)
@@ -72,7 +72,10 @@ class WantedPagesPage extends WantedQueryPage {
                                "pg2.page_namespace != '" . NS_MEDIAWIKI . "'"
                        ),
                        'options' => array(
-                               'HAVING' => "COUNT(*) > $count",
+                               'HAVING' => array(
+                                       "COUNT(*) > $count",
+                                       "COUNT(*) > SUM(pg2.page_is_redirect)"
+                               ),
                                'GROUP BY' => array( 'pl_namespace', 'pl_title' )
                        ),
                        'join_conds' => array(
index 28be790..0b3175a 100644 (file)
@@ -73,7 +73,9 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
 
                $this->target = Title::newFromURL( $opts->getValue( 'target' ) );
                if ( !$this->target ) {
-                       $out->addHTML( $this->whatlinkshereForm() );
+                       if ( !$this->including() ) {
+                               $out->addHTML( $this->whatlinkshereForm() );
+                       }
 
                        return;
                }
@@ -152,7 +154,9 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                        $conds['pagelinks'][] = 'rd_from is NOT NULL';
                }
 
-               $queryFunc = function ( $dbr, $table, $fromCol ) use ( $conds, $target, $limit, $useLinkNamespaceDBFields ) {
+               $queryFunc = function ( $dbr, $table, $fromCol ) use (
+                       $conds, $target, $limit, $useLinkNamespaceDBFields
+               ) {
                        // Read an extra row as an at-end check
                        $queryLimit = $limit + 1;
                        $on = array(
@@ -278,7 +282,11 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
 
                        if ( $row->rd_from && $level < 2 ) {
                                $out->addHTML( $this->listItem( $row, $nt, $target, true ) );
-                               $this->showIndirectLinks( $level + 1, $nt, $this->getConfig()->get( 'MaxRedirectLinksRetrieved' ) );
+                               $this->showIndirectLinks(
+                                       $level + 1,
+                                       $nt,
+                                       $this->getConfig()->get( 'MaxRedirectLinksRetrieved' )
+                               );
                                $out->addHTML( Xml::closeElement( 'li' ) );
                        } else {
                                $out->addHTML( $this->listItem( $row, $nt, $target ) );
diff --git a/includes/templates/NoLocalSettings.mustache b/includes/templates/NoLocalSettings.mustache
new file mode 100644 (file)
index 0000000..5457949
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+       <head>
+               <meta charset="UTF-8" />
+               <title>MediaWiki {{wgVersion}}</title>
+               <style media="screen">
+                       html, body {
+                               color: #000;
+                               background-color: #fff;
+                               font-family: sans-serif;
+                               text-align: center;
+                       }
+
+                       h1 {
+                               font-size: 150%;
+                       }
+               </style>
+       </head>
+       <body>
+               <img src="{{path}}resources/assets/mediawiki.png" alt="The MediaWiki logo" />
+
+               <h1>MediaWiki {{wgVersion}}</h1>
+               <div class="error">
+               {{#localSettingsExists}}
+                       <p>LocalSettings.php not readable.</p>
+                       <p>Please correct file permissions and try again.</p>
+               {{/localSettingsExists}}
+               {{^localSettingsExists}}
+                       <p>LocalSettings.php not found.</p>
+                       {{#installerStarted}}
+                               <p>Please <a href="{{path}}mw-config/index.{{ext}}">complete the installation</a> and download LocalSettings.php.</p>
+                       {{/installerStarted}}
+                       {{^installerStarted}}
+                               <p>Please <a href="{{path}}mw-config/index.{{ext}}">set up the wiki</a> first.</p>
+                       {{/installerStarted}}
+               {{/localSettingsExists}}
+               </div>
+       </body>
+</html>
\ No newline at end of file
diff --git a/includes/templates/NoLocalSettings.php b/includes/templates/NoLocalSettings.php
deleted file mode 100644 (file)
index 5b88dfd..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-// @codingStandardsIgnoreFile
-/**
- * Template used when there is no LocalSettings.php file.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Templates
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
-       die( "NoLocalSettings.php is not a valid MediaWiki entry point\n" );
-}
-
-if ( !isset( $wgVersion ) ) {
-       $wgVersion = 'VERSION';
-}
-
-# bug 30219 : can not use pathinfo() on URLs since slashes do not match
-$matches = array();
-$ext = 'php';
-$path = '/';
-foreach ( array_filter( explode( '/', $_SERVER['PHP_SELF'] ) ) as $part ) {
-       if ( !preg_match( '/\.(php5?)$/', $part, $matches ) ) {
-               $path .= "$part/";
-       } else {
-               $ext = $matches[1] == 'php5' ? 'php5' : 'php';
-       }
-}
-
-# Check to see if the installer is running
-if ( !function_exists( 'session_name' ) ) {
-       $installerStarted = false;
-} else {
-       session_name( 'mw_installer_session' );
-       $oldReporting = error_reporting( E_ALL & ~E_NOTICE );
-       $success = session_start();
-       error_reporting( $oldReporting );
-       $installerStarted = ( $success && isset( $_SESSION['installData'] ) );
-}
-?>
-<!DOCTYPE html>
-<html lang="en" dir="ltr">
-       <head>
-               <meta charset="UTF-8" />
-               <title>MediaWiki <?php echo htmlspecialchars( $wgVersion ) ?></title>
-               <style media='screen'>
-                       html, body {
-                               color: #000;
-                               background-color: #fff;
-                               font-family: sans-serif;
-                               text-align: center;
-                       }
-
-                       h1 {
-                               font-size: 150%;
-                       }
-               </style>
-       </head>
-       <body>
-               <img src="<?php echo htmlspecialchars( $path ) ?>resources/assets/mediawiki.png" alt='The MediaWiki logo' />
-
-               <h1>MediaWiki <?php echo htmlspecialchars( $wgVersion ) ?></h1>
-               <div class='error'>
-               <?php if ( !file_exists( MW_CONFIG_FILE ) ) { ?>
-                       <p>LocalSettings.php not found.</p>
-                       <p>
-                       <?php
-                       if ( $installerStarted ) {
-                               echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\">complete the installation</a> and download LocalSettings.php.";
-                       } else {
-                               echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\">set up the wiki</a> first.";
-                       }
-                       ?>
-                       </p>
-               <?php } else { ?>
-                       <p>LocalSettings.php not readable.</p>
-                       <p>Please correct file permissions and try again.</p>
-               <?php } ?>
-
-               </div>
-       </body>
-</html>
index 43bab0e..f09b6bb 100644 (file)
@@ -218,7 +218,7 @@ class UsercreateTemplate extends BaseTemplate {
                                                                                echo 'checked="checked"';
                                                                        } ?>
                                                                ><label for="<?php echo htmlspecialchars( $inputItem['name'] ); ?>">
-                                                                       <?php $this->msgHtml( $inputItem['msg'] ); ?>
+                                                                       <?php $this->msg( $inputItem['msg'] ); ?>
                                                                </label>
                                                        </div>
                                                <?php
@@ -261,7 +261,7 @@ class UsercreateTemplate extends BaseTemplate {
                                <?php
                                echo Html::submitButton(
                                        $this->getMsg( $this->data['loggedin'] ? 'createacct-another-submit' : 'createacct-submit' ),
-                                       $attrs = array(
+                                       array(
                                                'id' => 'wpCreateaccount',
                                                'name' => 'wpCreateaccount',
                                                'tabindex' => $tabIndex++
index c05a87d..20034b7 100644 (file)
@@ -230,7 +230,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                );
                $dbkey = trim( $dbkey, '_' );
 
-               if ( strpos( $dbkey, UTF8_REPLACEMENT ) !== false ) {
+               if ( strpos( $dbkey, UtfNormal\Constants::UTF8_REPLACEMENT ) !== false ) {
                        # Contained illegal UTF-8 sequences or forbidden Unicode chars.
                        throw new MalformedTitleException( 'Bad UTF-8 sequences found in title: ' . $text );
                }
index a8a38c7..6da8250 100644 (file)
@@ -622,6 +622,7 @@ abstract class UploadBase {
                $warnings = array();
 
                $localFile = $this->getLocalFile();
+               $localFile->load( File::READ_LATEST );
                $filename = $localFile->getName();
 
                /**
@@ -677,10 +678,10 @@ abstract class UploadBase {
                }
 
                // Check dupes against archives
-               $archivedImage = new ArchivedFile( null, 0, "{$hash}.{$this->mFinalExtension}" );
-               if ( $archivedImage->getID() > 0 ) {
-                       if ( $archivedImage->userCan( File::DELETED_FILE ) ) {
-                               $warnings['duplicate-archive'] = $archivedImage->getName();
+               $archivedFile = new ArchivedFile( null, 0, '', $hash );
+               if ( $archivedFile->getID() > 0 ) {
+                       if ( $archivedFile->userCan( File::DELETED_FILE ) ) {
+                               $warnings['duplicate-archive'] = $archivedFile->getName();
                        } else {
                                $warnings['duplicate-archive'] = '';
                        }
@@ -701,6 +702,7 @@ abstract class UploadBase {
         * @return Status Indicating the whether the upload succeeded.
         */
        public function performUpload( $comment, $pageText, $watch, $user ) {
+               $this->getLocalFile()->load( File::READ_LATEST );
 
                $status = $this->getLocalFile()->upload(
                        $this->mTempPath,
@@ -1410,27 +1412,22 @@ abstract class UploadBase {
                                }
                        }
 
-                       # href with embedded svg as target
-                       if ( $stripped == 'href' && preg_match( '!data:[^,]*image/svg[^,]*,!sim', $value ) ) {
-                               wfDebug( __METHOD__ . ": Found href to embedded svg "
-                                       . "\"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
-
-                               return true;
-                       }
-
-                       # href with embedded (text/xml) svg as target
-                       if ( $stripped == 'href' && preg_match( '!data:[^,]*text/xml[^,]*,!sim', $value ) ) {
-                               wfDebug( __METHOD__ . ": Found href to embedded svg "
-                                       . "\"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
-
-                               return true;
+                       # only allow data: targets that should be safe. This prevents vectors like,
+                       # image/svg, text/xml, application/xml, and text/html, which can contain scripts
+                       if ( $stripped == 'href' && strncasecmp( 'data:', $value, 5 ) === 0 ) {
+                               // rfc2397 parameters. This is only slightly slower than (;[\w;]+)*.
+                               $parameters = '(?>;[a-zA-Z0-9\!#$&\'*+.^_`{|}~-]+=(?>[a-zA-Z0-9\!#$&\'*+.^_`{|}~-]+|"(?>[\0-\x0c\x0e-\x21\x23-\x5b\x5d-\x7f]+|\\\\[\0-\x7f])*"))*(?:;base64)?';
+                               if ( !preg_match( "!^data:\s*image/(gif|jpeg|jpg|png)$parameters,!i", $value ) ) {
+                                       wfDebug( __METHOD__ . ": Found href to unwhitelisted data: uri "
+                                               . "\"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
+                                       return true;
+                               }
                        }
 
-                       # Change href with animate from (http://html5sec.org/#137). This doesn't seem
-                       # possible without embedding the svg, but filter here in case.
-                       if ( $stripped == 'from'
+                       # Change href with animate from (http://html5sec.org/#137).
+                       if ( $stripped === 'attributename'
                                && $strippedElement === 'animate'
-                               && !preg_match( '!^https?://!im', $value )
+                               && $this->stripXmlNamespace( $value ) == 'href'
                        ) {
                                wfDebug( __METHOD__ . ": Found animate that might be changing href using from "
                                        . "\"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
@@ -1522,7 +1519,7 @@ abstract class UploadBase {
        private static function checkCssFragment( $value ) {
 
                # Forbid external stylesheets, for both reliability and to protect viewer's privacy
-               if ( strpos( $value, '@import' ) !== false ) {
+               if ( stripos( $value, '@import' ) !== false ) {
                        return true;
                }
 
@@ -1699,6 +1696,7 @@ abstract class UploadBase {
        private function checkOverwrite( $user ) {
                // First check whether the local file can be overwritten
                $file = $this->getLocalFile();
+               $file->load( File::READ_LATEST );
                if ( $file->exists() ) {
                        if ( !self::userCanReUpload( $user, $file ) ) {
                                return array( 'fileexists-forbidden', $file->getName() );
@@ -1710,7 +1708,7 @@ abstract class UploadBase {
                /* Check shared conflicts: if the local file does not exist, but
                 * wfFindFile finds a file, it exists in a shared repository.
                 */
-               $file = wfFindFile( $this->getTitle() );
+               $file = wfFindFile( $this->getTitle(), array( 'latest' => true ) );
                if ( $file && !$user->isAllowed( 'reupload-shared' ) ) {
                        return array( 'fileexists-shared-forbidden', $file->getName() );
                }
@@ -1739,6 +1737,8 @@ abstract class UploadBase {
                        return false;
                }
 
+               $img->load( File::READ_LATEST );
+
                return $user->getId() == $img->getUser( 'id' );
        }
 
index 8e6c9c6..cc9f5c8 100644 (file)
@@ -170,20 +170,6 @@ class UploadFromChunks extends UploadFromFile {
                return $status;
        }
 
-       /**
-        * Perform the upload, then remove the temp copy afterward
-        * @param string $comment
-        * @param string $pageText
-        * @param bool $watch
-        * @param User $user
-        * @return Status
-        */
-       public function performUpload( $comment, $pageText, $watch, $user ) {
-               $rv = parent::performUpload( $comment, $pageText, $watch, $user );
-
-               return $rv;
-       }
-
        /**
         * Returns the virtual chunk location:
         * @param int $index
@@ -303,10 +289,10 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * Gets the current offset in fromt the stashedupload table
+        * Get the offset at which the next uploaded chunk will be appended to
         * @return int Current byte offset of the chunk file set
         */
-       private function getOffset() {
+       public function getOffset() {
                if ( $this->mOffset !== null ) {
                        return $this->mOffset;
                }
index 14a6da6..fc59ace 100644 (file)
@@ -231,12 +231,18 @@ class UploadFromUrl extends UploadBase {
         * @return int Number of bytes handled
         */
        public function saveTempFileChunk( $req, $buffer ) {
+               wfDebugLog( 'fileupload', 'Received chunk of ' . strlen( $buffer ) . ' bytes' );
                $nbytes = fwrite( $this->mTmpHandle, $buffer );
 
                if ( $nbytes == strlen( $buffer ) ) {
                        $this->mFileSize += $nbytes;
                } else {
                        // Well... that's not good!
+                       wfDebugLog(
+                               'fileupload',
+                               'Short write ' . $this->nbytes . '/' . strlen( $buffer ) .
+                                       ' bytes, aborting with '  . $this->mFileSize . ' uploaded so far'
+                       );
                        fclose( $this->mTmpHandle );
                        $this->mTmpHandle = false;
                }
@@ -262,6 +268,7 @@ class UploadFromUrl extends UploadBase {
                if ( !$this->mTmpHandle ) {
                        return Status::newFatal( 'tmp-create-error' );
                }
+               wfDebugLog( 'fileupload', 'Temporary file created "' . $this->mTempPath . '"' );
 
                $this->mRemoveTempFile = true;
                $this->mFileSize = 0;
@@ -275,7 +282,12 @@ class UploadFromUrl extends UploadBase {
                if ( $wgCopyUploadTimeout && !isset( $options['timeout'] ) ) {
                        $options['timeout'] = $wgCopyUploadTimeout;
                }
-               $req = MWHttpRequest::factory( $this->mUrl, $options );
+               wfDebugLog(
+                       'fileupload',
+                       'Starting download from "' . $this->mUrl . '" ' .
+                               '<' . implode( ',', array_keys( array_filter( $options ) ) ) . '>'
+               );
+               $req = MWHttpRequest::factory( $this->mUrl, $options, __METHOD__ );
                $req->setCallback( array( $this, 'saveTempFileChunk' ) );
                $status = $req->execute();
 
@@ -288,8 +300,14 @@ class UploadFromUrl extends UploadBase {
                        return Status::newFatal( 'tmp-write-error' );
                }
 
-               if ( !$status->isOk() ) {
-                       return $status;
+               wfDebugLog( 'fileupload', $status );
+               if ( $status->isOk() ) {
+                       wfDebugLog( 'fileupload', 'Download by URL completed successfuly.' );
+               } else {
+                       wfDebugLog(
+                               'fileupload',
+                               'Download by URL completed with HTTP status ' . $req->getStatus()
+                       );
                }
 
                return $status;
index 52ce4d3..c07665a 100644 (file)
@@ -727,9 +727,6 @@ class UploadStashFile extends UnregisteredLocalFile {
 class UploadStashException extends MWException {
 }
 
-class UploadStashNotAvailableException extends UploadStashException {
-}
-
 class UploadStashFileNotFoundException extends UploadStashException {
 }
 
index 1f639fc..9cf8cab 100644 (file)
@@ -167,7 +167,7 @@ class AutoloadGenerator {
                        <<<EOD
 <?php
 // This file is generated by $commandName, do not adjust manually
-
+// @codingStandardsIgnoreFile
 global \${$this->variableName};
 
 \${$this->variableName} {$op} array(
diff --git a/jsduck.json b/jsduck.json
new file mode 100644 (file)
index 0000000..ae723e9
--- /dev/null
@@ -0,0 +1,43 @@
+{
+       "--title": "MediaWiki core - Documentation",
+       "--categories": "maintenance/jsduck/categories.json",
+       "--eg-iframe": "maintenance/jsduck/eg-iframe.html",
+       "--tags": "maintenance/jsduck/custom_tags.rb",
+       "--warnings": ["-nodoc(class,public)"],
+       "--builtin-classes": true,
+       "--processes": "0",
+       "--warnings-exit-nonzero": true,
+       "--external": "HTMLElement,HTMLDocument,Window,File,MouseEvent,KeyboardEvent",
+       "--output": "docs/js",
+       "--": [
+               "maintenance/jsduck/external.js",
+               "resources/src/mediawiki",
+               "resources/src/mediawiki.action",
+               "resources/src/mediawiki.api",
+               "resources/src/mediawiki.language",
+               "resources/src/mediawiki.messagePoster",
+               "resources/src/mediawiki.page",
+               "resources/src/mediawiki.special",
+               "resources/src/mediawiki.toolbar",
+               "resources/src/jquery/jquery.accessKeyLabel.js",
+               "resources/src/jquery/jquery.arrowSteps.js",
+               "resources/src/jquery/jquery.autoEllipsis.js",
+               "resources/src/jquery/jquery.badge.js",
+               "resources/src/jquery/jquery.byteLength.js",
+               "resources/src/jquery/jquery.byteLimit.js",
+               "resources/src/jquery/jquery.checkboxShiftClick.js",
+               "resources/src/jquery/jquery.colorUtil.js",
+               "resources/src/jquery/jquery.confirmable.js",
+               "resources/src/jquery/jquery.footHovzer.js",
+               "resources/src/jquery/jquery.getAttrs.js",
+               "resources/src/jquery/jquery.hidpi.js",
+               "resources/src/jquery/jquery.localize.js",
+               "resources/src/jquery/jquery.makeCollapsible.js",
+               "resources/src/jquery/jquery.spinner.js",
+               "resources/src/jquery/jquery.suggestions.js",
+               "resources/src/jquery/jquery.tabIndex.js",
+               "resources/lib/jquery.client/jquery.client.js",
+               "resources/lib/oojs",
+               "resources/lib/oojs-ui"
+       ]
+}
index d203c0f..07d47ed 100644 (file)
@@ -587,7 +587,7 @@ class Language {
                global $wgExtraGenderNamespaces;
 
                $ns = $wgExtraGenderNamespaces +
-                       self::$dataCache->getItem( $this->mCode, 'namespaceGenderAliases' );
+                       (array)self::$dataCache->getItem( $this->mCode, 'namespaceGenderAliases' );
 
                return isset( $ns[$index][$gender] ) ? $ns[$index][$gender] : $this->getNsText( $index );
        }
@@ -1254,7 +1254,9 @@ class Language {
                                        break;
                                case 'D':
                                        $usedDay = true;
-                                       $s .= $this->getWeekdayAbbreviation( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1 );
+                                       $s .= $this->getWeekdayAbbreviation(
+                                               Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1
+                                       );
                                        break;
                                case 'j':
                                        $usedDay = true;
@@ -1283,7 +1285,9 @@ class Language {
                                        break;
                                case 'l':
                                        $usedDay = true;
-                                       $s .= $this->getWeekdayName( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1 );
+                                       $s .= $this->getWeekdayName(
+                                               Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1
+                                       );
                                        break;
                                case 'F':
                                        $usedMonth = true;
@@ -1530,43 +1534,72 @@ class Language {
                } elseif ( $usedHour ) {
                        $ttl = 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
                } elseif ( $usedAMPM ) {
-                       $ttl = 43200 - ( substr( $ts, 8, 2 ) % 12 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
-               } elseif ( $usedDay || $usedHebrewMonth || $usedIranianMonth || $usedHijriMonth || $usedHebrewYear || $usedIranianYear || $usedHijriYear || $usedTennoYear ) {
-                       // @todo Someone who understands the non-Gregorian calendars should write proper logic for them
-                       // so that they don't need purged every day.
-                       $ttl = 86400 - substr( $ts, 8, 2 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+                       $ttl = 43200 - ( substr( $ts, 8, 2 ) % 12 ) * 3600 -
+                               substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+               } elseif (
+                       $usedDay ||
+                       $usedHebrewMonth ||
+                       $usedIranianMonth ||
+                       $usedHijriMonth ||
+                       $usedHebrewYear ||
+                       $usedIranianYear ||
+                       $usedHijriYear ||
+                       $usedTennoYear
+               ) {
+                       // @todo Someone who understands the non-Gregorian calendars
+                       // should write proper logic for them so that they don't need purged every day.
+                       $ttl = 86400 - substr( $ts, 8, 2 ) * 3600 -
+                               substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
                } else {
                        $possibleTtls = array();
-                       $timeRemainingInDay = 86400 - substr( $ts, 8, 2 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+                       $timeRemainingInDay = 86400 - substr( $ts, 8, 2 ) * 3600 -
+                               substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
                        if ( $usedWeek ) {
-                               $possibleTtls[] = ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400 + $timeRemainingInDay;
+                               $possibleTtls[] =
+                                       ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400 +
+                                       $timeRemainingInDay;
                        } elseif ( $usedISOYear ) {
                                // December 28th falls on the last ISO week of the year, every year.
                                // The last ISO week of a year can be 52 or 53.
-                               $lastWeekOfISOYear = DateTime::createFromFormat( 'Ymd', substr( $ts, 0, 4 ) . '1228', $zone ?: new DateTimeZone( 'UTC' ) )->format( 'W' );
+                               $lastWeekOfISOYear = DateTime::createFromFormat(
+                                       'Ymd',
+                                       substr( $ts, 0, 4 ) . '1228',
+                                       $zone ?: new DateTimeZone( 'UTC' )
+                               )->format( 'W' );
                                $currentISOWeek = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'W' );
                                $weeksRemaining = $lastWeekOfISOYear - $currentISOWeek;
-                               $timeRemainingInWeek = ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400 + $timeRemainingInDay;
+                               $timeRemainingInWeek =
+                                       ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400
+                                       + $timeRemainingInDay;
                                $possibleTtls[] = $weeksRemaining * 604800 + $timeRemainingInWeek;
                        }
 
                        if ( $usedMonth ) {
-                               $possibleTtls[] = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 't' ) - substr( $ts, 6, 2 ) ) * 86400 + $timeRemainingInDay;
+                               $possibleTtls[] =
+                                       ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 't' ) -
+                                               substr( $ts, 6, 2 ) ) * 86400
+                                       + $timeRemainingInDay;
                        } elseif ( $usedYear ) {
-                               $possibleTtls[] = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
+                               $possibleTtls[] =
+                                       ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 -
+                                               Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
                                        + $timeRemainingInDay;
                        } elseif ( $usedIsLeapYear ) {
                                $year = substr( $ts, 0, 4 );
-                               $timeRemainingInYear = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
+                               $timeRemainingInYear =
+                                       ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 -
+                                               Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
                                        + $timeRemainingInDay;
                                $mod = $year % 4;
                                if ( $mod || ( !( $year % 100 ) && $year % 400 ) ) {
                                        // this isn't a leap year. see when the next one starts
                                        $nextCandidate = $year - $mod + 4;
                                        if ( $nextCandidate % 100 || !( $nextCandidate % 400 ) ) {
-                                               $possibleTtls[] = ( $nextCandidate - $year - 1 ) * 365 * 86400 + $timeRemainingInYear;
+                                               $possibleTtls[] = ( $nextCandidate - $year - 1 ) * 365 * 86400 +
+                                                       $timeRemainingInYear;
                                        } else {
-                                               $possibleTtls[] = ( $nextCandidate - $year + 3 ) * 365 * 86400 + $timeRemainingInYear;
+                                               $possibleTtls[] = ( $nextCandidate - $year + 3 ) * 365 * 86400 +
+                                                       $timeRemainingInYear;
                                        }
                                } else {
                                        // this is a leap year, so the next year isn't
@@ -2912,7 +2945,7 @@ class Language {
                        }
 
                        // Break down Hangul syllables to grab the first jamo
-                       $code = utf8ToCodepoint( $matches[1] );
+                       $code = UtfNormal\Utils::utf8ToCodepoint( $matches[1] );
                        if ( $code < 0xac00 || 0xd7a4 <= $code ) {
                                return $matches[1];
                        } elseif ( $code < 0xb098 ) {
@@ -3004,7 +3037,7 @@ class Language {
         */
        function normalize( $s ) {
                global $wgAllUnicodeFixes;
-               $s = UtfNormal::cleanUp( $s );
+               $s = UtfNormal\Validator::cleanUp( $s );
                if ( $wgAllUnicodeFixes ) {
                        $s = $this->transformUsingPairFile( 'normalize-ar.ser', $s );
                        $s = $this->transformUsingPairFile( 'normalize-ml.ser', $s );
@@ -3895,13 +3928,9 @@ class Language {
                        }
                }
 
-               // Since usually only infinite or indefinite is only on list, so try
-               // equivalents if still here.
-               $indefs = array( 'infinite', 'infinity', 'indefinite' );
-               if ( in_array( $str, $indefs ) ) {
-                       foreach ( $indefs as $val ) {
-                               $show = array_search( $val, $duration, true );
-                               if ( $show !== false ) {
+               if ( wfIsInfinity( $str ) ) {
+                       foreach ( $duration as $show => $value ) {
+                               if ( wfIsInfinity( $value ) ) {
                                        return htmlspecialchars( trim( $show ) );
                                }
                        }
index 43d6063..844888e 100644 (file)
@@ -842,7 +842,7 @@ class LanguageConverter {
         * @param bool $fromCache Load from memcached? Defaults to true.
         */
        function loadTables( $fromCache = true ) {
-               global $wgLangConvMemc;
+               global $wgLanguageConverterCacheType;
 
                if ( $this->mTablesLoaded ) {
                        return;
@@ -850,9 +850,10 @@ class LanguageConverter {
 
                $this->mTablesLoaded = true;
                $this->mTables = false;
+               $cache = ObjectCache::getInstance( $wgLanguageConverterCacheType );
                if ( $fromCache ) {
                        wfProfileIn( __METHOD__ . '-cache' );
-                       $this->mTables = $wgLangConvMemc->get( $this->mCacheKey );
+                       $this->mTables = $cache->get( $this->mCacheKey );
                        wfProfileOut( __METHOD__ . '-cache' );
                }
                if ( !$this->mTables || !array_key_exists( self::CACHE_VERSION_KEY, $this->mTables ) ) {
@@ -869,7 +870,7 @@ class LanguageConverter {
                        $this->postLoadTables();
                        $this->mTables[self::CACHE_VERSION_KEY] = true;
 
-                       $wgLangConvMemc->set( $this->mCacheKey, $this->mTables, 43200 );
+                       $cache->set( $this->mCacheKey, $this->mTables, 43200 );
                        wfProfileOut( __METHOD__ . '-recache' );
                }
        }
index 043b155..bf3e167 100644 (file)
@@ -51,7 +51,7 @@ class LanguageJa extends Language {
 
        /**
         * Italic is not appropriate for Japanese script
-        * Unfortunately most browsers do not recognise this, and render <em> as italic
+        * Unfortunately most browsers do not recognise this, and render `<em>` as italic
         *
         * @param string $text
         * @return string
index 4271ed3..0f47c38 100644 (file)
@@ -70,8 +70,8 @@ class ZhConverter extends LanguageConverter {
                        'zh-cn' => new ReplacementArray( $zh2CN ),
                        'zh-hk' => new ReplacementArray( $zh2HK ),
                        'zh-mo' => new ReplacementArray( $zh2HK ),
-                       'zh-my' => new ReplacementArray( $zh2SG ),
-                       'zh-sg' => new ReplacementArray( $zh2SG ),
+                       'zh-my' => new ReplacementArray( $zh2CN ),
+                       'zh-sg' => new ReplacementArray( $zh2CN ),
                        'zh-tw' => new ReplacementArray( $zh2TW ),
                        'zh' => new ReplacementArray
                );
index 89638d5..6ef231d 100644 (file)
        "right-movefile": "Pinah beureukaih",
        "right-upload": "Peutamöng beureukaih",
        "right-upload_by_url": "Peutamöng beureukaih nibak URL",
+       "right-writeapi": "Meungui API teumuléh",
        "right-delete": "Sampôh laman",
        "right-bigdelete": "Sampôh laman ngön ban dum riwayatjih",
        "right-browsearchive": "Mita laman nyang geusampôh",
        "action-move": "Peupinah laman nyoë",
        "nchanges": "$1 {{PLURAL:$1|neuubah}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|yôh seunaweuë seuneulheuëh kön}}",
+       "enhancedrc-history": "riwayat",
        "recentchanges": "Neuubah barô",
        "recentchanges-legend": "Peuniléh neuubah barô",
        "recentchanges-summary": "Di yup nyoë nakeuh neuubah barô nyang na bak Wikipèdia nyoë.\nHareutoë: (bida) = neuubah, (riwayat) = riwayat teumuléh, '''B''' = laman barô, '''u''' = neuandam ubeut, '''b''' = neuandam bot, (± ''bit'') = jeumeulah asoë meutamah/meukureuëng, → = neuandam bideuëng, ← = mohtasa otomatis.\n----",
        "recentchanges-label-minor": "Nyoe neuandam ubeut",
        "recentchanges-label-bot": "Neuandam nyoe geupubuet le bot",
        "recentchanges-label-unpatrolled": "Neuandam nyoe goh lom geukalon",
+       "recentchanges-legend-heading": "'''Hareutoë:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (eu cit [[Special:NewPages|dapeuta laman barô]])",
        "rcnotefrom": "Di yup nyoë nakeuh neuubah yôh <strong>$2</strong> (geupeudeuh trôh ‘an <strong>$1</strong> neuubah).",
        "rclistfrom": "Peudeuih neuubah barô yôh $3 $2 kön",
        "rcshowhideminor": "$1 andam bacut",
+       "rcshowhideminor-hide": "Peusom",
        "rcshowhidebots": "$1 bot",
+       "rcshowhidebots-show": "Peuleumah",
        "rcshowhideliu": "$1 ureuëng ngui tamöng",
+       "rcshowhideliu-hide": "Peusom",
        "rcshowhideanons": "$1 ureuëng ngui hana nan",
+       "rcshowhideanons-hide": "Peusom",
        "rcshowhidepatr": "$1 andam teurunda",
        "rcshowhidemine": "$1 atra lôn andam",
+       "rcshowhidemine-hide": "Peusom",
        "rclinks": "Peudeuih $1 neuubah barô lam $2 uroë nyoë<br />$3",
        "diff": "bida",
        "hist": "riwayat",
        "sharedupload": "Beureukah nyoë dari $1 ngön kadang geunguy lé buët-buët la’én.",
        "sharedupload-desc-here": "Beureukaih nyoe nejih nibak $1 ngon kadang geunguy le proyek-proyek la'en.\nTeuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
        "uploadnewversion-linktext": "Peulöt seunalén nyang leubèh barô nibak beureukah nyoë.",
+       "upload-disallowed-here": "Droëneuh h'an jeuët neutimpa beureukaih nyoë",
        "mimesearch": "Mita MIME",
        "listredirects": "Dapeuta peuninah",
        "unusedtemplates": "Templat nyang hana geungui",
        "tooltip-pt-mycontris": "Dapeuta beuneuri Droëneuh",
        "tooltip-pt-login": "Droëneuh geupadan keu tamong log, bah pih nyan hana geupeuwajéb.",
        "tooltip-pt-logout": "Teubiët",
+       "tooltip-pt-createaccount": "Droëneuh geupadan keu neupeugöt saboh akun ngön neutamöng; bah pih nyan hana wajéb",
        "tooltip-ca-talk": "Marit laman asoë",
        "tooltip-ca-edit": "Droëneuh jeuët neuandam laman nyoë. Neungui tumbôi eu dilèë sigoh neukeubah.",
        "tooltip-ca-addsection": "Puphôn beunagi barô",
        "tooltip-undo": "Peuriwang geunantoë nyoë ngön peuhah plôk neu’andam ngön cara eu dilèë. Choë jeuët geupeutamah bak plôk ehtisa.",
        "tooltip-summary": "Pasoë éhtisa paneuk",
        "interlanguage-link-title": "$1 – $2",
+       "simpleantispam-label": "Paréksa anti-spam.\n<strong>BÈK</strong> neupasoë!",
        "pageinfo-toolboxlink": "Teuneurang laman",
        "previousdiff": "← Bida awai",
        "nextdiff": "Geunantoë lheuëh nyan →",
        "file-nohires": "Hana resolusi nyang leubèh manyang.",
        "svg-long-desc": "Beureukah SVG, nominal $1 x $2 piksel, rayek beureukah: $3",
        "show-big-image": "Beureukaih aseuli",
+       "show-big-image-preview": "Seunipat seuneudeuh awai: $1",
+       "show-big-image-other": "{{PLURAL:$2|Resolusi}} la'én: $1.",
+       "show-big-image-size": "$1 × $2 piksel",
        "newimages": "Beureukah barô",
        "ilsubmit": "Mita",
        "bad_image_list": "Beuntukjih lagèë di miyub nyoë:\n\nCit buté dapeuta (baréh nyang geupeuphôn ngon tanda *) nyang geukira. Hubông phôn bak saboh baréh beukeuh hubông u beureukaih nyang brôk.\nHubông-hubông lheuëh nyan bak baréh nyang saban geukira sibagoë keucuali, nakeuh teunuléh nyang jeuët peuleumah beureukaih nyan.",
        "metadata-expand": "Peuleumah tapeusili teunamah",
        "metadata-collapse": "Peusom tapeusili teunamah",
        "metadata-fields": "Bideuëng mètadata gamba nyang na lam peusan nyoë keuneuk geupasoë bak tampilan halaman gamba 'oh watèë tabel mètadata geutôp.\nData nyang la'én eunteuk teupeusom keudroë.\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-xresolution": "Resolusi linteuëng",
+       "exif-yresolution": "Rèsolusi buju",
        "namespacesall": "ban dum",
        "monthsall": "ban dum",
        "recreate": "Peugöt ulang",
        "tags": "Tag neuubah nyang sah",
        "tag-filter": "Saréng [[Special:Tags|tag]]:",
        "tag-filter-submit": "Saréng",
+       "logentry-newusers-create": "$1 {{GENDER:$2|geupeugöt}} akun ureuëng ngui",
        "searchsuggest-search": "Mita",
        "duration-seconds": "{{PLURAL:$1|deutik}}",
        "duration-minutes": "{{PLURAL:$1|minèt}}",
index 7b71a0b..e9547e9 100644 (file)
@@ -19,7 +19,8 @@
                        "Spacebirdy",
                        "Xethron",
                        "පසිඳු කාවින්ද",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Onderstreep skakels.",
        "import-rootpage-nosubpage": "Die naamruimte \"$1\" van die basisblad laat nie subblaaie toe nie.",
        "importlogpage": "Invoer logboek",
        "importlogpagetext": "Administratiewe invoere van bladsye met geskiedenis van ander wiki's.",
-       "import-logentry-upload": "[[$1]] ingevoer deur 'n lêer op te laai",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|weergawe|weergawes}}",
-       "import-logentry-interwiki": "importeer $1 via transwiki",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|weergawe|weergawes}} vanaf $2",
        "javascripttest": "JavaScript toetsing",
        "javascripttest-pagetext-noframework": "Hierdie bladsy is gereserveer vir die uitvoer van JavaScript-toetse.",
        "version-parser-function-hooks": "Ontleder-funksiehoeke",
        "version-hook-name": "Hoek naam",
        "version-hook-subscribedby": "Gebruik deur",
-       "version-version": "(Weergawe $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[geen naam]",
        "version-license": "MediaWiki se lisensie",
        "version-ext-license": "Lisensie",
        "logentry-upload-revert": "$1 het $3 {{GENDER:$2|opgelaai}}",
        "rightsnone": "(geen)",
        "revdelete-summary": "redigeringsopsomming",
+       "feedback-adding": "U terugvoer word op die bladsy geplaas...",
+       "feedback-bugcheck": "Gaaf! Kontroleer of dit nie dalk een van die [$1 bekende foute] is nie.",
+       "feedback-bugnew": "Ek het gekontroleer. Rapporteer 'n nuwe fout.",
        "feedback-bugornote": "As u reg is om 'n tegniese probleem in detail te beskryf, [$1 rapporteer 'n fout].\nAnders kan u die eenvoudige vorm hieronder gebruik. U kommentaar sal by die bladsy \"[$3 $2]\", saam met u gebruikersnaam en die webblaaier wat u gebruik gevoeg word.",
-       "feedback-subject": "Onderwerp:",
-       "feedback-message": "Boodskap:",
        "feedback-cancel": "Kanselleer",
-       "feedback-submit": "Stuur terugvoer",
-       "feedback-adding": "U terugvoer word op die bladsy geplaas...",
+       "feedback-close": "Gedoen",
        "feedback-error1": "Fout: onbekende resultaat van die API",
        "feedback-error2": "Fout: Wysiging het gefaal",
        "feedback-error3": "Fout: Geen reaksie van API",
+       "feedback-message": "Boodskap:",
+       "feedback-subject": "Onderwerp:",
+       "feedback-submit": "Dien in",
        "feedback-thanks": "Dankie! U terugvoer is op die bladsy \"[$2 $1]\" geplaas.",
-       "feedback-close": "Gedoen",
-       "feedback-bugcheck": "Gaaf! Kontroleer of dit nie dalk een van die [$1 bekende foute] is nie.",
-       "feedback-bugnew": "Ek het gekontroleer. Rapporteer 'n nuwe fout.",
        "searchsuggest-search": "Soek",
        "searchsuggest-containing": "bevat...",
        "api-error-badaccess-groups": "U word nie toegelaat om lêers te laai op hierdie wiki.",
        "mediastatistics-header-text": "Tekslêers",
        "mediastatistics-header-executable": "Uitvoerbare lêers",
        "mediastatistics-header-archive": "Gekompakteerde lêers",
-       "json-error-syntax": "Sintaksfout"
+       "json-error-syntax": "Sintaksfout",
+       "special-characters-group-latin": "Latyns",
+       "special-characters-group-latinextended": "Latyns uitgebreid",
+       "special-characters-group-ipa": "IFA",
+       "special-characters-group-symbols": "Simbole",
+       "special-characters-group-greek": "Grieks",
+       "special-characters-group-cyrillic": "Cyrillies",
+       "special-characters-group-arabic": "Arabies",
+       "special-characters-group-arabicextended": "Arabies uitgebrei",
+       "special-characters-group-persian": "Persiese",
+       "special-characters-group-hebrew": "Hebreeus",
+       "special-characters-group-bangla": "Bengaals",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index b74b682..0a96eef 100644 (file)
        "deletereason-dropdown": "*ተራ የማጥፋት ምክንያቶች\n** በአቅራቢው ጥያቄ\n** ማብዛቱ ያልተፈቀደለት ጽሑፍ\n** ተንኮል",
        "delete-edit-reasonlist": "'ተራ የማጥፋት ምክንያቶች' ለማዘጋጀት",
        "rollback": "ለውጦቹ ይገልበጡ",
-       "rollback_short": "ይመለስ",
        "rollbacklink": "ROLLBACK ይመለስ",
        "rollbackfailed": "መገልበጡ አልተከናወነም",
        "cantrollback": "ለውጡን መገልበጥ አይቻልም፦ አቅራቢው ብቻ ስላዘጋጁት ነው።",
        "watchlisttools-view": "የምከታተላቸው ለውጦች",
        "watchlisttools-edit": "ዝርዝሩን ለማስተካከል",
        "watchlisttools-raw": "የዝርዝሩ ጥሬ ኮድ",
-       "unknown_extension_tag": "ያልታወቀ የቅጥያ ምልክት «$1»",
        "version": "ዝርያ",
        "version-extensions": "የተሳኩ ቅጥያዎች",
        "version-specialpages": "ልዩ ገጾች",
        "version-parser-function-hooks": "የዘርዛሪ ተግባር ሜጦዎች",
        "version-hook-name": "የሜንጦ ስም",
        "version-hook-subscribedby": "የተጨመረበት",
-       "version-version": "(ዝርያ $1)",
+       "version-version": "($1)",
        "version-license": "ፈቃድ",
        "version-software": "የተሳካ ሶፍትዌር",
        "version-software-product": "ሶፍትዌር",
index ee38c93..5658641 100644 (file)
@@ -10,7 +10,8 @@
                        "Urhixidur",
                        "Willtron",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Subrayar os vinclos:",
        "delete-toobig": "Ista pachina tiene un historial d'edicions prou largo, con mas de $1 {{PLURAL:$1|versión|versions}}. S'ha restrinchito o borrau d'ista mena de pachinas ta aprevenir d'a corrompición accidental de {{SITENAME}}.",
        "delete-warning-toobig": "Ista pachina tiene un historial d'edición prou largo, con más de $1 {{PLURAL:$1|versión|versions}}. Si la borra podría corromper as operacions d'a base de datos de {{SITENAME}}; contine con cuenta.",
        "rollback": "Revertir edicions",
-       "rollback_short": "Revertir",
        "rollbacklink": "revertir",
        "rollbackfailed": "No s'ha puesto revertir",
        "cantrollback": "No se pueden revertir as edicions; o zaguer colaborador ye o solo autor d'iste articlo.",
        "import-error-invalid": "A pachina \"$1\" no s'ha importau porque o suyo nombre ye invalido.",
        "importlogpage": "Rechistro d'importacions",
        "importlogpagetext": "Importacions almenistrativas de pachinas con historial dende atros wikis.",
-       "import-logentry-upload": "importata [[$1]] cargando un fichero",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|versión|versions}}",
-       "import-logentry-interwiki": "Importata $1 entre wikis",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versión|versions}} dende $2",
        "javascripttest": "Prebatinas de JavaScript",
-       "javascripttest-title": "Fendo as prebas de $1",
        "javascripttest-pagetext-noframework": "Ista pachina ye reservada ta fer as prebas de JavaScrip.",
        "javascripttest-pagetext-unknownframework": "Bastida de prebas \"$1\" desconoixida.",
        "javascripttest-pagetext-frameworks": "Por favor, trigue una d'as siguients bastidas de prebas: $1",
        "javascripttest-pagetext-skins": "Trigue una apariencia ta fer as prebas con ella:",
        "javascripttest-qunit-intro": "Mire-se [$1 a documentación de prebatinas] en mediawiki.org",
-       "javascripttest-qunit-heading": "Suite de prebas MediaWiki JavaScript QUnit",
        "tooltip-pt-userpage": "A suya pachina d'usuario",
        "tooltip-pt-anonuserpage": "A pachina d'usuario de l'adreza IP dende a que ye editando",
        "tooltip-pt-mytalk": "A suya pachina de descusión",
        "watchlisttools-edit": "Veyer y editar a lista de seguimiento",
        "watchlisttools-raw": "Editar a lista de seguimiento en formato texto",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discusión]])",
-       "unknown_extension_tag": "Etiqueta d'estensión \"$1\" esconoixita",
        "duplicate-defaultsort": "Pare cuenta: A clau d'ordenación por defecto «$2» anula l'anterior clau d'ordenación por defecto «$1».",
        "version": "Versión",
        "version-extensions": "Estensions instalatas",
        "version-parser-function-hooks": "Grifios d'as funcions d'o parseyador",
        "version-hook-name": "Nombre d'o grifio",
        "version-hook-subscribedby": "Suscrito por",
-       "version-version": "(Versión $1)",
+       "version-version": "($1)",
        "version-license": "Licencia",
        "version-poweredby-credits": "Iste wiki funciona gracias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "atros",
        "logentry-newusers-autocreate": "S'ha creyau automaticament a cuenta $1",
        "rightsnone": "(garra)",
        "revdelete-summary": "editar resumen",
+       "feedback-adding": "Adhibindo comentarios ta la pachina...",
+       "feedback-bugcheck": "Perfecto! Comprebe nomás que no sía un [$1 fallo conoixiu].",
+       "feedback-bugnew": "L'he comprebau. Informar d'un nuevo fallo.",
        "feedback-bugornote": "Si creye que puede describir en detalle un problema tecnico, [$1 informe d'un bug] por favor.\n\nSi no, puet usar o siguient formulario. O suyo comentario será adhibiu a la pachina [$3 $2], de conchunta con o suyo nombre d'usuario y o navegador que fa servir.",
-       "feedback-subject": "Afer:",
-       "feedback-message": "Mensache:",
        "feedback-cancel": "Cancelar",
-       "feedback-submit": "Ninviar comentarios",
-       "feedback-adding": "Adhibindo comentarios ta la pachina...",
+       "feedback-close": "Feito",
        "feedback-error1": "Error: No se reconoixe o resultau de l'API",
        "feedback-error2": "Error: Ha fallato a edición",
        "feedback-error3": "Error: No i hai respuesta de l'API",
+       "feedback-message": "Mensache:",
+       "feedback-subject": "Afer:",
+       "feedback-submit": "Ninviar",
        "feedback-thanks": "Gracias! O suyo comentario s'ha publicau en a pachina [$2  $1].",
-       "feedback-close": "Feito",
-       "feedback-bugcheck": "Perfecto! Comprebe nomás que no sía un [$1 fallo conoixiu].",
-       "feedback-bugnew": "L'he comprebau. Informar d'un nuevo fallo.",
        "searchsuggest-search": "Mirar",
        "searchsuggest-containing": "que contién...",
        "api-error-badaccess-groups": "No puetz cargar fichers en iste wiki.",
        "expand_templates_ok": "Confirmar",
        "expand_templates_remove_comments": "Sacar comentarios",
        "expand_templates_generate_xml": "Amostrar l'árbol de parseyo XML",
-       "expand_templates_preview": "Previsualización"
+       "expand_templates_preview": "Previsualización",
+       "special-characters-group-latin": "Latín",
+       "special-characters-group-latinextended": "Latín enamplau",
+       "special-characters-group-ipa": "AFI(IPA)",
+       "special-characters-group-symbols": "Símbols",
+       "special-characters-group-greek": "Griego",
+       "special-characters-group-cyrillic": "Cirilico",
+       "special-characters-group-arabic": "Arabico",
+       "special-characters-group-arabicextended": "Arabigo extendiu",
+       "special-characters-group-persian": "Persa",
+       "special-characters-group-hebrew": "Hebreu",
+       "special-characters-group-bangla": "Bengalí",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Cingalés",
+       "special-characters-group-gujarati": "Gujaratí",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Laosiano",
+       "special-characters-group-khmer": "Khmer"
 }
index 18f1eef..9221af9 100644 (file)
        "actions": "Fremmunga",
        "namespaces": "Namstedas",
        "variants": "Missenlīcnessa",
+       "navigation-heading": "Sōcne getæl",
        "errorpagetitle": "Wōh",
        "returnto": "Gān eft tō $1",
        "tagline": "Fram {{SITENAME}}",
        "permalink": "Fæst hlenca",
        "print": "Ūtmǣlan",
        "view": "Sihþ",
+       "view-foreign": "Sihþ on $1",
        "edit": "Adihtan",
        "create": "Scieppan",
+       "create-local": "Besettan stōwlice gemearcunge",
        "editthispage": "Adihtan þisne tramet",
        "create-this-page": "Scieppan þisne tramet",
        "delete": "Forlēosan",
        "acct_creation_throttle_hit": "Nēosiende tō þissum wici, þe þīnne IP-Stōwe brȳcþ, hæfþ gesett {{PLURAL:$1|1 hordcleofan|$1 hordcleofan}} in þǣm læsten dæge. Þu ne canst settan ǣnige māran. Þǣrfram ne cunnon Nēosiende, þe þisne IP-Stōwe brȳcþ, settan ǣnige hordcleofan māran on þisse handhwīle.",
        "accountcreated": "Scōp reccinge",
        "loginlanguagelabel": "Sprǣc: $1",
-       "pt-login": "Inġelōgian",
-       "pt-login-button": "Inġelōgian",
-       "pt-createaccount": "Ūtġelōgian",
-       "pt-userlogout": "Ūtġelōgian",
+       "pt-login": "Inmeldian",
+       "pt-login-button": "Inmeldian",
+       "pt-createaccount": "Ūtmeldian",
+       "pt-userlogout": "Ūtmeldian",
        "changepassword": "Andwendan þafungword",
        "oldpassword": "Eald þafungword:",
        "newpassword": "Nīwe þafungword:",
        "retypenew": "Wrīt nīwe þafungword eft:",
        "resetpass-submit-loggedin": "Andwendan þafungword",
        "resetpass-submit-cancel": "Undōn",
+       "passwordreset": "Settan þafungword eft",
        "passwordreset-legend": "Settan þafungword eft",
        "passwordreset-username": "Brūcendnama:",
        "bold_sample": "Þicce traht",
        "note": "'''Gewritincel:'''",
        "previewnote": "<strong>Beþenc þe þis is gīet efne forebysen.</strong>\nÞīna andwendunga gīet ne sind hordoda!",
        "editing": "Adihtende $1",
+       "creating": "Scipþ nū $1",
        "editingsection": "Adihtende $1 (dǣl)",
        "editingcomment": "Adihtende $1 (nīwe dǣl)",
        "editconflict": "Adihtunge wiþdǣd: $1",
        "permissionserrors": "Þafunge wōh",
        "permissionserrorstext-withaction": "Þū ne hæfst þafunge tō $2, for {{PLURAL:$1|þisre race|þissum racum}}:",
        "recreate-moveddeleted-warn": "'''Warnung: Þū edsciepst tramet þe wæs ǣr forloren.'''\n\nÞu sceoldest smēagan, hwæðer hit gerādlīc sīe, forþ tō gānne mid þǣre adihtunge þisses trametes.\nÞæt forlēosunge and wegunge ealdhord þisses trametes is hēr geīeht for behēfnesse:",
+       "moveddeleted-notice": "Þes tramet wæs forloren.\nÞæt forlēosunge and wǣgunge stǣr þæs trametes is geīwed hēr.",
        "viewpagelogs": "Sēon þisses trametes ealdhold",
        "nohistory": "Nis nān adihtunge stǣr for þissum tramete.",
        "currentrev-asof": "Nīwost fadung on þǣre $3. tīde þæs $2.",
        "cur": "nū",
        "next": "nīehst",
        "last": "ǣr",
-       "page_first": "ærost",
-       "page_last": "sƿift",
+       "page_first": "ǣrost",
+       "page_last": "ǣrra",
        "history-fieldset-title": "Sēcan stǣr",
        "histfirst": "ieldeste",
        "histlast": "nīwoste",
        "mergehistory-reason": "Racu:",
        "revertmerge": "Settan þā geānlǣcinge on bæc",
        "history-title": "Ednīwunga stǣr for \"$1\"",
+       "difference-title": "Fǣgness betweox fadungum \"$1\"",
        "lineno": "$1. līne:",
        "compareselectedversions": "Bemetan gecorena ednīwunga",
        "editundo": "undōn",
        "searchprofile-articles": "Innunge trametas",
        "searchprofile-images": "Missenendebyrdness",
        "searchprofile-everything": "Gehwæt",
+       "searchprofile-advanced": "Manigfeald",
        "searchprofile-articles-tooltip": "Sēcan in $1",
        "searchprofile-images-tooltip": "Sēcan ymelan",
+       "searchprofile-everything-tooltip": "Sēcan geond ealla innunga (ēac mōtungum)",
        "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 worda}})",
        "search-redirect": "(edlǣded fram \"$1\")",
        "search-section": "(dǣl $1)",
        "searchrelated": "gesibb",
        "searchall": "eall",
        "showingresults": "Īewan under oþ <b>$1</b> tōhīgunga onginnenda mid #<b>$2</b>.",
+       "search-nonefound": "Ne cūðe findan þæt þū woldest.",
        "powersearch-legend": "Manigfeald sēcung",
        "powersearch-ns": "Sēcan in namstedum:",
        "search-external": "Ūtanweard sōcn",
        "rightslog": "Brūcenda riht cranic",
        "action-edit": "adihtan þisne tramet",
        "nchanges": "$1 {{PLURAL:$1|andwendung|andwendunga}}",
+       "enhancedrc-history": "stǣr",
        "recentchanges": "Nīwa andwendunga",
        "recentchanges-legend": "Nīwra andwendunga cyras",
+       "recentchanges-summary": "Sēon þā nīwostan andwendunga þisses wiki on þissum tramete",
        "recentchanges-feed-description": "Īwan þā nīwostan andwendunga þæs wiki mid þissum strēame",
        "recentchanges-label-newpage": "Þēos adihtung scōp nīwne tramet",
        "recentchanges-label-minor": "Þēos is lytel adihtung",
        "recentchanges-label-bot": "Searuþrǣl fremede þās adihtunge",
+       "recentchanges-label-plusminus": "Þæs trametes micelness wæs andwended þȳs rīme grēatbitena",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (seoh ēac [[Special:NewPages|getæl nīwra trameta]])",
        "rcnotefrom": "Niðer sind þā andwendunga fram <strong>$2</strong> (mǣst īweþ <strong>$1</strong>).",
        "rclistfrom": "Īwan nīwa andwendunga fram $3 $2 and siþþan",
        "rcshowhideminor": "$1 lytela adihtunga",
+       "rcshowhideminor-show": "Īwan",
+       "rcshowhideminor-hide": "Hȳdan",
        "rcshowhidebots": "$1 searuþrǣlas",
+       "rcshowhidebots-show": "Īwan",
+       "rcshowhidebots-hide": "Hȳdan",
        "rcshowhideliu": "$1 brūcendas on nambēc",
+       "rcshowhideliu-hide": "Hȳdan",
        "rcshowhideanons": "$1 uncūðe brūcendas",
+       "rcshowhideanons-show": "Īwan",
+       "rcshowhideanons-hide": "Hȳdan",
        "rcshowhidemine": "$1 mīna adihtunga",
+       "rcshowhidemine-show": "Īwan",
+       "rcshowhidemine-hide": "Hȳdan",
        "rclinks": "Īwan þā nīwostan $1 andwendunga in þissum nīehstum $2 daga<br />$3",
        "diff": "scēad",
        "hist": "stǣr",
        "morelinkstoimage": "Sēon [[Special:WhatLinksHere/$1|mā hlencan]] tō þisre ymelan.",
        "duplicatesoffile": "{{PLURAL:$1|Sēol folgiende ymele is gelīcnes|Þā folgiendan ymelan sind gelīcnessa}} þisse ymelan (seoh [[Special:FileDuplicateSearch/$2|mā cȳþþe ymbe þis]]):",
        "sharedupload": "Þēos ymele is fram $1 and man mæg hīe brūcan on ōðrum weorcum.",
+       "sharedupload-desc-here": "Þēos ymele is fram $1 and cann wesan gebrocen fram ōðrum weorcum. Sēo amearcung on hire [$2 tramete ymelan amearcunge] þǣr is hēr geīwed.",
        "uploadnewversion-linktext": "Hladan nīwe fadunge þisse ymelan forþ",
+       "upload-disallowed-here": "Þū ne canst wrītan ofer þisse ymelan.",
        "filerevert-legend": "Settan ymelan on bæc",
        "filedelete-submit": "Forlēosan",
        "unusedtemplateswlh": "ōðre hlencan",
        "pager-older-n": "{{PLURAL:$1|ieldre 1|ieldran $1}}",
        "booksources": "Bōcfruman",
        "booksources-search-legend": "Sēcan bōcfruman",
+       "booksources-search": "Sēcan",
        "booksources-text": "Niðer is getæl hlencena tō ōðrum webstedum þe cīpaþ nīwa and gebrocena bēc, and wēninga hæbben ēac mā cȳþþu ymbe bēc þe þu sēcst:",
        "specialloguserlabel": "Gelǣstende brūcend:",
        "speciallogtitlelabel": "Ende (trametes titul oþþe brūcendes nama):",
        "tooltip-pt-mycontris": "Getæl þīnra forðunga",
        "tooltip-pt-login": "Man þē byldeþ to inmeldienne; þēah, þis nis abeden",
        "tooltip-pt-logout": "Ūtmeldian",
+       "tooltip-pt-createaccount": "Þū āhst wyrcan grīman tō brūcenne, ac þū ne þearft þæt dōn.",
        "tooltip-ca-talk": "Mōtung ymbe þone innunge tramet",
        "tooltip-ca-edit": "Þū meaht þisne tramet adihtan. Brūc lā þone fōrebysene cnæpp ǣr þū hordie.",
        "tooltip-ca-addsection": "Beginnan nīwne dǣl",
        "tooltip-compareselectedversions": "Sēon þā gescēad betweonan þǣm twǣm gecorenum fadungum þisses trametes",
        "tooltip-watch": "Ēacnian þīn behealdungtæl mid þissum tramete",
        "tooltip-undo": "\"Undōn\" undēþ þās adihtunge and openaþ þǣre adihtunge bysene tō fōrebysene. Man cann secgan race on þǣre sceortnesse.",
+       "tooltip-summary": "Wrītan sceorte gemearcunge",
        "anonymous": "{{PLURAL:$1|uncūþ brūcend|uncūðra brūcenda}} of {{SITENAME}}",
        "siteuser": "{{SITENAME}}n brūcend $1",
        "others": "ōðru",
        "anonusers": "{{SITENAME}} {{PLURAL:$2|uncūþ brūcend|uncūðra brūcenda}} $1",
+       "pageinfo-toolboxlink": "Trametes cȳþþu",
        "previousdiff": "← Ieldre adihtung",
        "nextdiff": "Nīwre adihtung →",
        "imagemaxsize": "Mǣst biliðes micelness:<br />''(for ymelena amearcunga trametum)''",
        "file-nohires": "Þǣr nis nǣnig māre micelness.",
        "svg-long-desc": "SVG ymele, rihte $1 × $2 pixela, ymelan micelness: $3",
        "show-big-image": "Frumlicu ymele",
+       "show-big-image-preview": "Micelness þisre forebysene: $1.",
+       "show-big-image-other": "{{PLURAL:$2|Ōðru biliðes micelness|Ōðra biliða micelnessa}}: $1.",
+       "show-big-image-size": "$1 be $2 dotta",
        "imagelisttext": "Niðer is getæl '''$1''' {{PLURAL:$1|ymelan|ymelena}}, endebyrded on $2.",
        "noimages": "Nāht tō sēonne.",
        "ilsubmit": "Sēcan",
        "exif-imagewidth": "Wīdnes",
        "exif-imagelength": "Hīehþ",
        "exif-compression": "Ȝeþryccungmōd",
+       "exif-orientation": "Gebīgedness",
        "exif-ycbcrpositioning": "Y and C gesetednes",
+       "exif-xresolution": "Wīdnesse micelness",
+       "exif-yresolution": "Hēahþu micelness",
+       "exif-datetime": "Tælmearc and tīd þǣre ymelan andwendunge",
        "exif-imagedescription": "Biliðes nama",
+       "exif-make": "Biliðfōndes wyrhta",
+       "exif-model": "Biliþfōndes fadung",
+       "exif-software": "Weorcwrithyrst þe wæs gebrocen",
        "exif-artist": "Fruma",
+       "exif-colorspace": "Bleohmearc",
        "exif-usercomment": "Brūcendes trahtnunga",
+       "exif-datetimeoriginal": "Tælmearc and tīd þǣre wyrcunge þǣre cȳþþu",
+       "exif-datetimedigitized": "Tælmearc and tīd þǣre awendunge tō spearctellenda ymelan",
        "exif-exposuretime": "Blicestīd",
        "exif-brightnessvalue": "APEX beorhtness",
        "exif-lightsource": "Lēohtfruma",
        "exif-gpsmeasuremode": "Mētungmōd",
        "exif-gpsimgdirection": "Rihtung þæs biliðes",
        "exif-compression-1": "Unȝeþrycced",
+       "exif-orientation-1": "Gewunelic",
        "exif-meteringmode-0": "Uncūþ",
        "exif-meteringmode-1": "Geþēawisc",
        "exif-meteringmode-6": "Sām",
        "version-other": "Ōðer",
        "version-hooks": "Anglas",
        "version-hook-name": "Angelnama",
-       "version-version": "($1. fadung)",
+       "version-version": "($1)",
        "fileduplicatesearch-filename": "Ymelan nama:",
        "fileduplicatesearch-submit": "Sēcan",
        "specialpages": "Syndrige trametas",
        "htmlform-submit": "Forþsendan",
        "htmlform-reset": "Undōn andwendunga",
        "htmlform-selectorother-other": "Ōðer",
-       "revdelete-summary": "ādihtscortnes"
+       "logentry-delete-delete": "$1 {{GENDER:$2|forlēas}} tramet $3",
+       "logentry-newusers-create": "Brūcendes grīma $1 wæs {{GENDER:$2|geworht}}",
+       "revdelete-summary": "ādihtscortnes",
+       "searchsuggest-search": "Sēcan"
 }
index 2593639..f0b1caf 100644 (file)
@@ -49,7 +49,9 @@
                        "Omda4wady",
                        "Bibas",
                        "Khaled",
-                       "Emara"
+                       "Emara",
+                       "Macofe",
+                       "Yahya Sakhnini"
                ]
        },
        "tog-underline": "سطر تحت الوصلات:",
        "disclaimers": "إخلاء مسؤولية",
        "disclaimerpage": "Project:إخلاء مسؤولية عام",
        "edithelp": "مساعدة التحرير",
+       "helppage-top-gethelp": "مساعدة",
        "mainpage": "الصفحة الرئيسية",
        "mainpage-description": "الصفحة الرئيسية",
        "policy-url": "Project:سياسة",
        "badtitle": "عنوان سيء",
        "badtitletext": "عنوان الصفحة المطلوب إما غير صحيح أو فارغ، وربما الرابط بين اللغات أو بين المشاريع خاطئ.\nربما يحوي محارف لا تصلح للاستخدام في العناوين.",
        "perfcached": "البيانات التالية مخبأة و قد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مخبّأة|مخبّأتان|مخبّأة}}.",
-       "perfcachedts": "اÙ\84بÙ\8aاÙ\86ات Ø§Ù\84تاÙ\84Ù\8aØ© Ù\85خبÙ\91أة Ù\88Ù\83اÙ\86 Ø¢Ø®Ø± ØªØ­Ø¯Ù\8aØ« Ù\84Ù\87ا Ù\81Ù\8a $1. {{PLURAL:$4||Ù\86تÙ\8aجة Ù\88احدة|Ù\86تÙ\8aجتاÙ\86|$4 Ù\86تائج|$4 Ù\86تÙ\8aجة}} Ø¹Ù\84Ù\89 Ø§Ù\84Ø£Ù\83ثر {{PLURAL:$4||Ù\85خبÙ\91أة|Ù\85خبÙ\91أتاÙ\86\85خبÙ\91Ø£ة}}.",
+       "perfcachedts": "اÙ\84بÙ\8aاÙ\86ات Ø§Ù\84تاÙ\84Ù\8aØ© Ù\85خزÙ\86Ø©Ø\8c Ù\88Ù\83اÙ\86 Ø¢Ø®Ø± ØªØ­Ø¯Ù\8aØ« Ù\84Ù\87ا Ù\81Ù\8a $1. Ø§Ù\84عدد Ø§Ù\84Ø£Ù\82صÙ\89 Ù\84Ù\84Ù\86تائج Ø§Ù\84Ù\85خزÙ\86Ø© Ù\87Ù\88 {{PLURAL:$4||Ù\86تÙ\8aجة Ù\88احدة|Ù\86تÙ\8aجتاÙ\86|$4 Ù\86تائج|$4 Ù\86تÙ\8aجة}}.",
        "querypage-no-updates": "تحديثات هذه الصفحة معطلة حاليا.\nالبيانات هنا لن يتم تحديثها حاليا.",
        "viewsource": "اعرض المصدر",
        "viewsource-title": "استعرض مصدر $1",
        "showhideselectedversions": "أظهر/أخف المراجعات المختارة",
        "editundo": "رجوع",
        "diff-empty": "(لا فرق)",
-       "diff-multi-sameuser": "({{PLURAL:$1|لا مراجعات متوسطة|مراجعة متوسطة واحدة|مراجعتان متوسطتان|$1 مراجعات متوسطة|$1 مراجعة متوسطة}} بواسطة نفس المستخدم غير معروضة)",
-       "diff-multi-otherusers": "({{PLURAL:$1|لا مراجعات|مراجعة متوسطة واحدة|مراجعتان متوسطتان|$1 مراجعات متوسطة|$1 مراجعة متوسطة}} بواسطة {{PLURAL:$2|ولا مستخدم|مستخدم واحد آخر|مستخدمين اثنين آخرين|$2 مستخدمين|$2 مستخدماً|$2 مستخدم}} غير معروضة)",
+       "diff-multi-sameuser": "({{PLURAL:$1|لا مراجعات متوسطة|مراجعة متوسطة واحدة|مراجعتان متوسطتان|$1 مراجعات متوسطة|$1 مراجعة متوسطة}} بواسطة نفس المستخدم غير {{PLURAL:$1|معروضة|معروضة|معروضتين|معروضة}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|لا مراجعات|مراجعة متوسطة واحدة|مراجعتان متوسطتان|$1 مراجعات متوسطة|$1 مراجعة متوسطة}} بواسطة {{PLURAL:$2|ولا مستخدم|مستخدم واحد آخر|مستخدمين اثنين آخرين|$2 مستخدمين|$2 مستخدماً|$2 مستخدم}} غير {{PLURAL:$1|معروضة|معروضة|معروضتين|معروضة}})",
        "diff-multi-manyusers": "({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة أجراها|مراجعتان متوسطتان غير معروضتان أجراهما|$1 مراجعات متوسطة غير معروضة أجراها|$1 مراجعة متوسطة غير معروضة أجراها}} أكثر من {{PLURAL:$2||مستخدم واحد|مستخدمين|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)",
        "difference-missing-revision": "{{PLURAL:$2|مراجعة واحدة|$2 مراجعات}} لهذا الفرق ($1) {{PLURAL:$2|لم|لم}} يتم إيجادها.\n\nهذا يحدث عادة عن طريق اتباع وصلة فرق قديمة لصفحة تم حذفها.\nالتفاصيل يمكن إيجادها في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
        "searchresults": "نتائج البحث",
        "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|نتيجة|نتيجة}} لكل صفحة",
        "thumbnail_image-missing": "الملف يبدو أنه مفقود: $1",
        "thumbnail_image-failure-limit": "هناك الكثير من المحاولات الفاشلة مؤخراً ($1 أو أكثر) لتَصْيير هذه الصورة المصغرة. الرجاء المحاولة مرة أخرى لاحقاً.",
        "import": "استيراد صفحات",
-       "importinterwiki": "استÙ\8aراد ØªØ±Ø§Ù\86سÙ\88Ù\8aÙ\83Ù\8a",
+       "importinterwiki": "استÙ\88رد Ù\85Ù\86 Ù\88Ù\8aÙ\83Ù\8a Ø£Ø®Ø±Ù\89",
        "import-interwiki-text": "اختر ويكي وعنوان الصفحة للاستيراد.\nتواريخ المراجعات وأسماء المحررين سيتم حفظها.\nكل أفعال الاستيراد عبر الويكي يتم تسجيلها في [[Special:Log/import|سجل الاستيراد]].",
        "import-interwiki-sourcewiki": "الويكي المصدر:",
        "import-interwiki-sourcepage": "الصفحة المصدر:",
        "import-rootpage-nosubpage": "إن النطاق \"$1\" لصفحة الجذر لا يسمح بصفحات فرعية.",
        "importlogpage": "سجل الاستيراد",
        "importlogpagetext": "عمليات الاستيراد الإدارية للصفحات مع تاريخ التعديل من ويكيات أخرى.",
-       "import-logentry-upload": "استورد [[$1]] بواسطة رفع ملف",
        "import-logentry-upload-detail": "{{PLURAL:$1|لا مراجعات|مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}}",
-       "import-logentry-interwiki": "استورد عبر الويكي $1",
        "import-logentry-interwiki-detail": "تم استيراد {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}} من $2",
        "javascripttest": "اختبار جافاسكربت",
        "javascripttest-pagetext-noframework": "هذه الصفحة محجوزة لإجراء أختبارات الجافا سكريبت.",
        "version-parser-function-hooks": "خطاطيف دالة المحلل",
        "version-hook-name": "اسم الخطاف",
        "version-hook-subscribedby": "يستخدم بواسطة",
-       "version-version": "(نسخة $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[لا اسم]",
        "version-svn-revision": "ن$1",
        "version-license": "ترخيص ميدياويكي",
        "tags-tag": "اسم الوسم",
        "tags-display-header": "الظهور في قوائم التغييرات",
        "tags-description-header": "وصف كامل للمعنى",
+       "tags-source-header": "المصدر",
        "tags-active-header": "نشط؟",
        "tags-hitcount-header": "تغييرات موسومة",
+       "tags-actions-header": "إجراءات",
        "tags-active-yes": "نعم",
        "tags-active-no": "لا",
        "tags-edit": "عدل",
+       "tags-delete": "احذف",
+       "tags-activate": "نشط",
+       "tags-deactivate": "تعطيل",
        "tags-hitcount": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
+       "tags-create-tag-name": "اسم الوسم:",
+       "tags-create-reason": "السبب:",
+       "tags-create-submit": "أنشئ",
+       "tags-delete-reason": "سبب:",
+       "tags-activate-submit": "تفعيل",
+       "tags-deactivate-reason": "سبب",
        "comparepages": "قارن صفحات",
        "compare-page1": "صفحة 1",
        "compare-page2": "صفحة 2",
        "revdelete-uname-unhid": "اسم المستخدم غير مخفي",
        "revdelete-restricted": "طبق الضوابط لمديري النظام",
        "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-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-revert": "{{GENDER:$2|رفع|رفعت}} $1 $3",
        "rightsnone": "(لا شيء)",
        "revdelete-summary": "ملخص التعديل",
+       "feedback-adding": "إضافة تعليقات إلى الصفحة...",
+       "feedback-bugcheck": "رائع! تحقق من أن هذه ليست إحدى [$1 العلل المعروفة].",
+       "feedback-bugnew": "لقد تحققت. بلّغ عن علة جديدة.",
        "feedback-bugornote": "إن كنت مستعدا لشرح  مشكلة تقنية بالتفصيل، رجاءا [$1 قدم تقريرا بالخلل].\nبخلاف ذلك، يمكنك أستخدام الطريقة الأسهل أسفله، سيتم إضافة تعليقك للصفحة \"[$3 $2]\"، بالإضافة إلى اسم المستخدم و نوع المتصفح الذي تستخدمه حاليا.",
-       "feedback-subject": "الموضوع:",
-       "feedback-message": "الرسالة:",
        "feedback-cancel": "إلغاء",
-       "feedback-submit": "أرسل الملاحظات",
-       "feedback-adding": "إضافة تعليقات إلى الصفحة...",
+       "feedback-close": "تم",
        "feedback-error1": "خطأ: لا يمكن التعرف عليها من API",
        "feedback-error2": "خطأ: فشل في تحرير",
        "feedback-error3": "خطأ : لا توجد استجابة من API",
+       "feedback-message": "الرسالة:",
+       "feedback-subject": "الموضوع:",
+       "feedback-submit": "إرسال",
        "feedback-thanks": "شكرا! أُرسلت ملاحظاتك لصفحة \"[$2 $1]\".",
-       "feedback-close": "تم",
-       "feedback-bugcheck": "رائع! تحقق من أن هذه ليست إحدى [$1 العلل المعروفة].",
-       "feedback-bugnew": "لقد تحققت. بلّغ عن علة جديدة.",
        "searchsuggest-search": "بحث",
        "searchsuggest-containing": "يحتوي...",
        "api-error-badaccess-groups": "لا يسمح لك بتحميل الملفات إلى هذه الويكي.",
        "json-error-utf8": "خطأ في تشكيل محارف UTF-8، ربما نتيجة سوء ترميزها.",
        "json-error-recursion": "يوجد قيد الترميز إشارة مرجعية حلقية أو أكثر",
        "json-error-inf-or-nan": "قيد الترميز قيمة أو أكثر من نمط NAN أو INF",
-       "json-error-unsupported-type": "نمط قيمة لا يمكن تشفيره قد أعطي"
+       "json-error-unsupported-type": "نمط قيمة لا يمكن تشفيره قد أعطي",
+       "headline-anchor-title": "وصلة لهذا القسم",
+       "special-characters-group-latin": "لاتينية",
+       "special-characters-group-latinextended": "لاتينية موسعة",
+       "special-characters-group-ipa": "صوتية دولية",
+       "special-characters-group-symbols": "رموز",
+       "special-characters-group-greek": "يونانية",
+       "special-characters-group-cyrillic": "كيريلية",
+       "special-characters-group-arabic": "عربية",
+       "special-characters-group-arabicextended": "عربية موسعة",
+       "special-characters-group-persian": "فارسية",
+       "special-characters-group-hebrew": "عبرية",
+       "special-characters-group-bangla": "بنغالية",
+       "special-characters-group-tamil": "تاميلية",
+       "special-characters-group-telugu": "تيلوجية",
+       "special-characters-group-sinhala": "سنهالية",
+       "special-characters-group-gujarati": "غجراتية",
+       "special-characters-group-devanagari": "ديوناكرية",
+       "special-characters-group-thai": "تايلندية",
+       "special-characters-group-lao": "لاوية",
+       "special-characters-group-khmer": "خميرية",
+       "special-characters-title-endash": "واصلة قصيرة",
+       "special-characters-title-emdash": "واصلة طويلة",
+       "special-characters-title-minus": "علامة الطرح"
 }
index 5dde327..befb4b2 100644 (file)
        "version": "ܨܚܚܐ",
        "version-specialpages": "ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ",
        "version-other": "ܐܚܪܢܐ",
-       "version-version": "(ܨܚܚܐ $1)",
+       "version-version": "($1)",
        "version-poweredby-others": "ܐܚܪ̈ܢܐ",
        "version-software-version": "ܨܚܚܐ",
        "fileduplicatesearch": "ܒܨܝ ܥܠ ܠܦܦ̈ܐ ܥܦܝܦ̈ܐ",
        "logentry-newusers-autocreate": "ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $1 {{GENDER:$2|ܐܬܬܣܝܡ}} ܝܬܐܝܬ",
        "rightsnone": "(ܠܐ ܡܕܡ)",
        "revdelete-summary": "ܫܚܠܦ ܦܣܝܩܬ̈ܐ",
-       "feedback-subject": "ܡܠܘܐܐ:",
-       "feedback-message": "ܐܓܪܬܐ:",
        "feedback-cancel": "ܒܛܘܠ",
+       "feedback-message": "ܐܓܪܬܐ:",
+       "feedback-subject": "ܡܠܘܐܐ:",
        "searchsuggest-search": "ܒܨܝ",
        "searchsuggest-containing": "ܬܚܒܘܫ...",
        "expandtemplates": "ܐܪܘܚ ܩܠܒ̈ܐ",
index 68d2398..61b96d4 100644 (file)
@@ -13,7 +13,7 @@
        "tog-newpageshidepatrolled": "خبي الباجات المعسوسه اللي في ليستت الباجات الجدد",
        "tog-extendwatchlist": "دلّي الليستة تاع التتباع باش تورّي كامل التبديلات، ماشي برك غير التوالا",
        "tog-usenewrc": "جمّع الـتبدالات بل صفحة فل تبدالات الـجديدة و الـليستة تاع الـعسّة",
-       "tog-numberheadings": "رÙ\82Ù\85 Ø§Ù\84Ù\8aا Ø¹Ù\86اÙ\88Ù\8aÙ\86 Ø§Ù\84سÙ\83سÙ\8aÙ\88",
+       "tog-numberheadings": "رÙ\82Ù\91Ù\85 Ø§Ù\84عÙ\84اÙ\88Ù\86 ØªØ§Ø¹ Ø§Ù\84Ù\82سÙ\8aÙ\85ات",
        "tog-showtoolbar": "بيّن البارّة تاع دوزان‘ الكتبة",
        "tog-editondblclick": "آكتيفي التبدال تاع الباجات بل زوج ضركات تاع الفارة",
        "tog-editsectiononrightclick": "آكتيفي التبدال تاع السكسيوّات بل ضريك بل ليمنة على العلاوين نتاعهم",
@@ -21,6 +21,7 @@
        "tog-watchdefault": "زيد الـصفحات و الـفيشيّات اللي نبدّلها فل قايمة تاع الـتتباع تاعي",
        "tog-watchmoves": "زيد الـصفحات و الـفيشيات اللي نحوّلها فل قايمة تاع الـتباع تاعي",
        "tog-watchdeletion": "زيد الـصفحات اللي نفصيها فل قايمة تاع التتباع تاعي",
+       "tog-watchrollback": "بيّن فل ليستة تاع المتابعة تاعي، الصفحات الّي كنت أنا سترجعتها.",
        "tog-minordefault": "ماركي كل التبديلات بلي راهي خفيفه",
        "tog-previewontop": "ورّي نضرة قبليّة تاع واش يصرا، فوق الجيهة تاع التبدال",
        "tog-previewonfirst": "بين شوفه-قبليه مع اول تبديله",
@@ -31,7 +32,7 @@
        "tog-shownumberswatching": "بين شحال كاين من مستعمل يتبع الباجه",
        "tog-oldsig": "خطّ‘لـيدّ اللي كاين",
        "tog-fancysig": "اعتبر التوقيع كي كتيبه ويكي (بلا وصيله توماتيك)",
-       "tog-uselivepreview": "استعمل الـنضرة الـقبلانيّة الحيّة (عفسة تجرابيّة، تخلّيك تشوف التبدال الّي يصرا فل وقت الّي تكون تكتب)",
+       "tog-uselivepreview": "استعمل الشوفة الخفيفة",
        "tog-forceeditsummary": "نبّهني كي تندخل كاش صفحة خاوية",
        "tog-watchlisthideown": "خبّي الـتبدالات تاوعي فل ليستة تاع الـتتباع",
        "tog-watchlisthidebots": "خبّي الـتبدالات تاع الـروبويات فل ليستة تاع التتباع تاعي",
        "april": "أفريل",
        "may_long": "ماي",
        "june": "جوان",
-       "july": "جويليي",
+       "july": "جويليا",
        "august": "أوت",
        "september": "سبتمبر",
-       "october": "أكتوبر",
+       "october": "Ø£Ù\88Ù\83تÙ\88بر",
        "november": "نوفمبر",
        "december": "ديسمبر",
        "january-gen": "جانفي",
@@ -97,9 +98,9 @@
        "apr": "أفريل",
        "may": "ماي",
        "jun": "جوان",
-       "jul": "جويليي",
+       "jul": "جويليا",
        "aug": "أوت",
-       "sep": "سيبتمبر",
+       "sep": "سبتمبر",
        "oct": "أوكتوبر",
        "nov": "نوفمبر",
        "dec": "ديسمبر",
        "faqpage": "Project:سؤالات متكرره",
        "actions": "أفعال",
        "namespaces": "بلاصه تع أسموات",
-       "variants": "متغيرات",
+       "variants": "تنويعات",
        "navigation-heading": "القايمة تاع الـتبحار",
        "errorpagetitle": "غلطه",
        "returnto": "ولي إلى $1.",
        "talkpage": "قرعَج على هاد الباجة",
        "talkpagelinktext": "ناقش",
        "specialpage": "باجة خوصوصيّة",
-       "personaltools": "ادÙ\88اÙ\84ت شخصيه",
+       "personaltools": "دÙ\88زاÙ\86 شخصيه",
        "articlepage": "شوف الباجة تاع المحتاوا",
        "talk": "مناقشه",
-       "views": "Ø´Ù\88Ù\81ات",
-       "toolbox": "صÙ\86دÙ\88Ù\82 ØªØ§Ø¹ Ø§Ù\84دÙ\88زاÙ\86",
+       "views": "استبÙ\8aاÙ\86",
+       "toolbox": "دوزان",
        "userpage": "شوف الباجة تاع المستعملي",
        "projectpage": "شوف الباجة تاع البروجي",
        "imagepage": "شوف الباجة تاع الفيشي",
        "otherlanguages": "بلوغات وحد اوخره",
        "redirectedfrom": "(محول من $1)",
        "redirectpagesub": "باجة تاع التحوال",
+       "redirectto": "حوّل لـ:",
        "lastmodifiedat": "هاد الباجه راهي تبدّلت نهار الـ $1, على الـساعة $2.",
        "viewcount": "هاد الباجة نشافت {{PLURAL:$1|خطرة وحدة|$1 خطرة}}.",
        "protectedpage": "باجة محضيّة",
        "jumpto": "اقفز ل:",
-       "jumptonavigation": "تجÙ\88اÙ\84",
-       "jumptosearch": "تفتاش",
+       "jumptonavigation": "تبحار",
+       "jumptosearch": "فتّش",
        "view-pool-error": "اعدرونا، السربايات راهم مغبّنين ف هاد الوقيتة.\nبزّاف المستعمليّين راهم باغيين يشوفو هاد الباجة.\nاصبرو شي وقيتة قبل ما تحاولو تلحقو لها عاود.\n\n$1",
        "generic-pool-error": "اعدرونا، السربايات راهم مغبّنين ف هاد الوقيتة.\nبزّاف المستعمليّين راهم باغيين يشوفو هاد الباجة.\nاصبرو شي وقيتة قبل ما تحاولو تلحقو لها عاود.",
        "pool-timeout": "المهلة تاع المقارعة راهي فاتت",
        "pool-queuefull": "السنسلة تاع المقارعة راهي عامرة",
        "pool-errorunknown": "خلطة ماشي معروفة",
        "pool-servererror": "السربيس تاع العدّان راه حابس ( $1 ).",
+       "poolcounter-usage-error": "غلطة تاع ستُعمال: $1",
        "aboutsite": "على{{SITENAME}}",
        "aboutpage": "Project:على",
        "copyright": "المحتاوا راه تحت النسخة $1 تاع الليسانس، غير يلا كان مكتوب حاجاخرة.",
        "disclaimers": "تنبيهات",
        "disclaimerpage": "Project:التحذيرات العامه",
        "edithelp": "معونة",
-       "mainpage": "الباجة اللولانيّة",
-       "mainpage-description": "الباجة اللوله",
+       "helppage-top-gethelp": "معاونة",
+       "mainpage": "الپاجة اللولانيّة",
+       "mainpage-description": "الپاجة اللولانيّة",
        "policy-url": "Project:المقاون",
-       "portal": "المجتمع",
+       "portal": "بÙ\88رطاÙ\8a Ø§Ù\84Ù\85جتÙ\85ع",
        "portal-url": "Project:بورطاي المجتمع",
        "privacy": "السياسة تاع الخصوصيات (الدين الضيّق)",
        "privacypage": "Project:خصوصيه",
        "hidetoc": "خبّي",
        "collapsible-collapse": "خبّي",
        "collapsible-expand": "ورّي",
+       "confirmable-confirm": "آش يلا راك مأكّد{{GENDER:$1||ة}}؟",
+       "confirmable-yes": "إيه",
+       "confirmable-no": "لا",
        "thisisdeleted": "راك باغي تشوف ولا ترجّع $1؟",
        "viewdeleted": "شوف $1؟",
        "restorelink": "{{PLURAL:$1|تبدال واحد مفاصي|$1 تبدالات مفاصيين|$1 تبدال مفاصي}}",
        "readonly_lag": "الدخيرة تاع الخبرات راهي مقفولة بيدما السربايات التوناويّة يلحقو التوخار الّي عندهم معا السرباي اللولاني",
        "internalerror": "غلطة دخلانيّة",
        "internalerror_info": "غلطة دخلانيّة: $1",
+       "internalerror-fatal-exception": "غلطة واعرة من الطبَع \"$1\"",
        "filecopyerror": "ما قدرش تنساخ الفيشي \"$1\" لل \"$2\"",
        "filerenameerror": "ما قدرش تبدال السميّة تاع الفيشي \"$1\" لل \"$2\".",
        "filedeleteerror": "ما قدرش تمحيتٰ الفيشي \"$1\".",
        "directorycreateerror": "ما قدرش خلقان الدفتار \"$1\".",
+       "directoryreadonlyerror": "الزمّام «$1» راه لل قراية برك (ما ينجمش يكون مبدّل).",
+       "directorynotreadableerror": "الزمّام «$1» ما راهش واجد لل قراية.",
        "filenotfound": "ما قدرش مصيبتٰ الفيشي \"$1\".",
        "unexpected": "قيمة ما شي مستنية : \"$1\"=\"$2\".",
        "formerror": "غلطة: ما قدرش ترسال الستيمارة",
        "badtitle": "عنوان عيان",
        "badtitletext": "عنوان الباجه المطلوب إما ماشي صحيح والا فارغ، وبالاك الوصيل بين اللغات والا بين البروجيات ماشي صحيح.\nبالاك فيه حروف ما تصلحش  باس يستعملوها فالعناوين.",
        "perfcached": "الموطايات هادي راهي مخبّية و بالاك تاني يكون فات عليها الوقت. {{PLURAL:$1||ناتج واحد|زوج نواتج|$1 نواتج|$1 ناتج}} على الكتَر {{PLURAL:$1||مخبّي|مخبّيين}}.",
+       "perfcachedts": "المعلومات هادو راهم مخبّيين، و تعاودو فل $1. يلا كتّر {{PLURAL:$4|ناتج واحد راه|$4 نواتج راهم}} واجدين فل خبّاي.",
+       "querypage-no-updates": "المعاودات تاع هاد الصفحة راهم معطّلين.\nالمعلومات هادي ما راهيش مرجّعة لل حاضر.",
        "viewsource": "شوف الاصل",
+       "viewsource-title": "شوف المصدر تاع $1",
+       "actionthrottled": "الفعل راه محبّس",
+       "actionthrottledtext": "باش نحرزو من السبام، ما يمكنش تدير هاد الفعل بزّاف المرات في مدّة تاع وقت قصير، و راك ضركا فتّ هذا الحد.\nمن فضلك عاود سيّي منّا على شي دقايق.",
+       "protectedpagetext": "هاد الصفحة راهي تنحضات باش ما تتبدّلش ولا شي حاجاخرة.",
+       "viewsourcetext": "تنجم تشوف ولا تنسّح المصدر تاع هاد الصفحة:",
+       "viewyourtext": "تنجم تشوف و تنسّخ المصدر تاع <strong>التبدالات تاعك</strong> ف هاد الصفحة:",
+       "protectedinterface": "هاد الباجة توفّر لك وريشة (interface) تاع كتابة مديورة لل صوفتوار الّي ف هاد الويكي، و راهي مأمّنة باش تنحضا من الضرارات.\nباش تزيد ولا تبدّل طرجمات ل كامل الويكيّات، من فضلك استعمل [//translatewiki.net/ translatewiki.net] المشروع ميدياويكي تاع التبلادات.",
+       "editinginterface": "<strong>ردّ بالك:</strong>راك تبدّل صفحة الّمديورة باش تصنع النصّ تاع الواجهة تاع اللوجيسيال. التبدالات على هاد الصفحة غادي يوتّرو على الشكَل تاع الواجهة حتا عند المستعمليين لخرين.",
+       "translateinterface": "باش تزيد ولا تبدّل الطرجمات ل كامل الويكيّات، استعمل [//translatewiki.net/ translatewiki.net]، المشروع تاع التبلاد تاع الميديويكي.",
+       "exception-nologin": "ماشي مسجّل الدخول",
        "yourname": "اسم المستخدم:",
+       "userlogin-yourname": "سميّة تاع المستعملي",
+       "userlogin-yourname-ph": "دخّل السميّة تاع المستعملي تاعك",
        "yourpassword": "كلمة السر:",
+       "userlogin-yourpassword": "كلمت` السرّ",
+       "userlogin-yourpassword-ph": "دخّل كلمت` السرّ تاعك",
+       "createacct-yourpassword-ph": "دخّل كلمت` سرّ",
        "yourpasswordagain": "عاود كتبت كلمت السر:",
+       "createacct-yourpasswordagain": "أكّد كلمت` السرّ",
+       "createacct-yourpasswordagain-ph": "عاود دخّل كلمت` السرّ",
        "remembermypassword": "اتفكر الدخول تاعي ب هاذ النافيكاتور (ب مدّة حدها{{PLURAL:$1||يوم واحد|يومين|$1 إيّام|$1 يوم}})",
+       "userlogin-remembermypassword": "خلّيني مسجّل داخل",
        "login": "كونكسيون",
        "nav-login-createaccount": "تسجل/ اصنع حساب",
        "userlogin": "تسجل/ اصنع حساب",
+       "userloginnocreate": "مسجّل الدخول",
+       "logout": "مسجّل الخروج",
        "userlogout": "سجل خروج",
+       "userlogin-noaccount": "ما عندك حساب؟",
+       "userlogin-joinproject": "انضم لـ {{SITENAME}}",
        "nologin": "ما عندكش حساب مسجل؟ '''$1'''.",
        "nologinlink": "اصنع حساب",
        "createaccount": "اصنع حساب",
        "gotaccount": "عندك حساب مسجل؟ '''$1'''.",
        "gotaccountlink": "كونكسيون",
        "userlogin-resetlink": "نسيت تفاصيل الدخول؟",
+       "userlogin-resetpassword-link": "راك ناسي كلمت` السرّ؟",
+       "userlogin-helplink2": "معاونة ف تسجال الدخول",
+       "createacct-emailrequired": "علوان تاع إيمال",
+       "createacct-emailoptional": "علوان ليمال (ماشي مسيّف)",
+       "createacct-email-ph": "دخّل علوان` ليمال تاعك",
+       "createacct-another-email-ph": "دخّل علوان تاع إيمال",
+       "createaccountreason": "سبّة:",
+       "createacct-reason": "سبّة",
+       "createacct-captcha": "تحقق أمني",
+       "createacct-imgcaptcha-ph": "دخّل النصّ الّي راك تشوفهُ لفوق",
+       "createacct-submit": "اصنع حسابك",
+       "createacct-benefit-heading": "{{SITENAME}} مخلوق من عند شي ناس غير كيفك.",
+       "createacct-benefit-body1": "{{PLURAL:$1|تحرير|تحريرات}}",
+       "createacct-benefit-body2": "$1 {{PLURAL:$1|صفحة|صفحات}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|مساهم|مساهمين}} توالا",
        "mailmypassword": "أرسل لي كلمة سر جديده",
        "loginlanguagelabel": "اللوغه: $1",
+       "pt-login": "دخله",
+       "pt-login-button": "دخول",
+       "pt-createaccount": "اصنع حساب",
+       "pt-userlogout": "خروج",
+       "passwordreset": "صفّي كلمت` السرّ",
+       "passwordreset-legend": "استرجع كلمت` السرّ",
        "bold_sample": "كتيبة غليظه",
        "bold_tip": "كتيبة غليظه",
        "italic_sample": "كتبة مايلة",
        "preview": "شوفه-قبلي",
        "showpreview": "بين معاينة",
        "showdiff": "عرض التبديلات",
-       "anoneditwarning": "'''توله:''' راك ما دخلتش.\nغادي يتسجل لادراس آيبي نتاعك في تاريخ هذه الباجه.",
+       "anoneditwarning": "'''توليهة:''' راك ما دخلتش بل حساب تاعك.\nيلا تدير شي تبدال، غادي تتسجّل لادريسة آيبي تاعك فل متراخ تاع هاد الصفحة و تكون باينة ل كلّ واحد. يلا [$1 تتكونيكتا]</strong> ولا <strong>[$2 تخلق حساب]</strong>، التبدالات تاعك غادي يبانو تحت السميّة تاع المستعملي تاعك، و كاين تاني مزيّات وحدخرين.",
+       "loginreqlink": "اتكونيكتا",
        "newarticle": "(جديد)",
        "newarticletext": "راك تبعت وصيلة لباجه لم ما تخدمتش بعد.\nباش تصنع هاذ الباجه ابدا الكتبه فالصندوق التحت (شوف في [$1  زياده باجه المساعده] لمعلومات).\nإذا كانت زيارتك لهاذ الباجه غلطه، ادرك على بوطون''ولى'' في نافيقاتور الإنترنت نتاعك.",
-       "noarticletext": "لحد الساعه ما كانش حتى نص في هاذ الباجه.\nتقدرو [[Special:Search/{{PAGENAME}}|ترميو تفتيشه على هاذ العنوان]] فالباجات لخرين,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} فتش فالعمليات المربوطه]\nو إلا[{{fullurl:{{FULLPAGENAME}}|action=edit}} أصنع هاذ الباجه]</span>.",
+       "noarticletext": "حتا لضركا، ما كاين حتا نصّ ف هاذ الپاجه.\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}}}} فتش فالعمليات المربوطه]\nو إلا[{{fullurl:{{FULLPAGENAME}}|action=edit}} أصنع هاذ الباجه]</span>.",
        "previewnote": "'''ما تنساش هذي معاينه قبليه.'''\nلدوك التبديلات دياولك ما تسجلوش!",
        "editing": "تحرير $1",
+       "creating": "خليق $1",
        "editingsection": "كتيبه $1 (قسم)",
        "templatesused": "{{PLURAL:$1||القالب المستعمل|القوالب المستعمله}} في هذه الباجه:",
        "template-protected": "(محميه)",
        "viewpagelogs": "بين العمليات على هاذ الباحه",
        "currentrev-asof": "نسخة ضركانية بل تاريخ تاع $1",
        "revisionasof": "معاودة تاع الـ $1",
-       "revision-info": "مراجعه $1 بواسطت $2",
+       "revision-info": "مراجعة تاع $1 من عند {{GENDER:$6|$2}}$7",
        "previousrevision": "← نسخة اللوله",
        "nextrevision": "فرسيون جايه←",
        "currentrevisionlink": "المراجعه الحاليه",
        "revdel-restore": "غير كيف راهي تبان",
        "revertmerge": "فرق",
        "history-title": " «$1»: تاريخ المراجعات",
+       "difference-title": "فروقات بين التبدالات تاع \"$1\"",
        "lineno": "سطر$1:",
        "compareselectedversions": "كومباري بين نسختين مخيرين",
        "editundo": "نحي",
+       "diff-multi-sameuser": "({{PLURAL:$1|تبديلة متوسّطة وحدة|$1 تبديلات متوسّطين}} ماشي {{PLURAL:$1|مورّية|$1 مورّيين}} من عند نفس المستعملي)",
        "searchresults": "نتاج تاع التفتيشة",
        "searchresults-title": "ريزيلته تاع التحواس \"$1\"",
        "prevn": "{{PLURAL:$1|précédente|$1 اللولانيين}}",
        "shown-title": "آفيشي $1 {{PLURAL:$1|نتيجة}} فل صفحة",
        "viewprevnext": "شوف($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''كاين باجه اسمها « [[:$1]] » في هاذ الويكي'''",
-       "searchmenu-new": "'''أصنع الباجه « [[:$1|$1]] » في هذ الويكي !'''",
+       "searchmenu-new": "'''أصنع الباجة \"[[:$1]]\" في هذ الويكي !'''\n{{PLURAL:$2|0=|شوف تاني الصفحة الّي صبتها ف`التفتاش..|شوف تاني النواتج تاع التفتاش.}}",
        "searchprofile-articles": "باجه تع محتوى",
        "searchprofile-images": "ميلتيميديا",
        "searchprofile-everything": "كلش",
        "search-suggest": "كنت باغي تقول: $1",
        "searchrelated": "مرتابطه",
        "searchall": "ألكل",
+       "search-showingresults": "{{PLURAL:$4|النتيج <strong>$1</strong> تاع <strong>$3</strong>|النتايج <strong>$1 - $2</strong> من أصل <strong>$3</strong>}}",
        "search-nonefound": "ما كانش نتائج تطابق المسقسية.",
        "mypreferences": "إختيارات",
        "youremail": "البريه الالكترونيه:",
        "yourrealname": "الاسم الحقاني:",
        "prefs-help-email": "لادريس نتع البريه الإلكترونيه بالخاطر، ولكن هي لازمه في حال نسيت كلمت السر نتاعك.",
        "prefs-help-email-others": "تقدر تاني تخلي لوخرين يتاصلو بيك في باجت نقاشك ولا في وصيله في باجت مستخدم نتاعك, اذا ارسلك واحد ما يبانش لادريس نتاعك , حتى اذ رديت عليه باش يبان لادريس نتاعك.",
+       "right-writeapi": "استعمل API للكتابه نتاع الويكي",
        "newuserlogpage": "ريجيستر صنعة حسابات المستخدمين",
        "action-edit": "عدل هاذ الباجه",
        "nchanges": "$1 تبديله{{PLURAL:$1||s}}",
+       "enhancedrc-history": "تاريخ",
        "recentchanges": "تبديلات توالا",
        "recentchanges-legend": "ابسيون التبديلات التواله",
+       "recentchanges-summary": "اجبر التبدالات اللواخر الّي صراو ف هاد الصفحة.",
        "recentchanges-feed-description": "تبع التبديلات الجدد للويكي في هاذ التيار .",
        "recentchanges-label-newpage": " هاذ التبديل صنع باجه جديده",
        "recentchanges-label-minor": "هاذا تبديل صغير",
        "recentchanges-label-bot": "هاذ التبديل ندار بروبو",
        "recentchanges-label-unpatrolled": "ما تراجعتش هاذ التبديله للآن",
+       "recentchanges-label-plusminus": "الحجَم تاع الصفحة راه تبدّل ب هاد العدّة تاع البايتات",
+       "recentchanges-legend-heading": "'''تفسار:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (شوف تاني [[Special:NewPages|ليستة تاع صفحات جديدة]])",
        "rcnotefrom": "هاهي التبديلات  من'''$2''' (ل'''$1''' معروضه).",
        "rclistfrom": "بين التبديلات البديه من $3 $2",
        "rcshowhideminor": "$1 التبديلات الصغير",
+       "rcshowhideminor-show": "ورّي",
+       "rcshowhideminor-hide": "خبّي",
        "rcshowhidebots": "$1 البوتات",
+       "rcshowhidebots-show": "ورّي",
+       "rcshowhidebots-hide": "خبّي",
        "rcshowhideliu": "$1 المستخدمين المسجلين",
+       "rcshowhideliu-hide": "خبّي",
        "rcshowhideanons": "$1 المستخدمين المجهولين",
+       "rcshowhideanons-show": "ورّي",
+       "rcshowhideanons-hide": "خبّي",
        "rcshowhidepatr": "$1 التبديلات المعسوسه",
        "rcshowhidemine": "$1 تبديلات نتاعي",
+       "rcshowhidemine-show": "ورّي",
+       "rcshowhidemine-hide": "خبّي",
        "rclinks": "بين آخر $1 تبديل في آخر $2 يوم<br />$3",
        "diff": "إختلاف",
        "hist": "تاريخ",
        "minoreditletter": "ط",
        "newpageletter": "ج‌",
        "boteditletter": "ب",
+       "rc-change-size-new": "$1 {{PLURAL:$1|octet|octets}} مورا التبدال",
        "rc-enhanced-expand": "بين التفاصيل (يلزمها جافاسكريبت)",
        "rc-enhanced-hide": "خبي التفاصيل",
        "recentchangeslinked": "تبديلات مربوطه",
        "filedesc": "ملخص",
        "license": "ترخيص:",
        "license-header": "ترخيص:",
+       "imgfile": "فيشي",
        "file-anchor-link": "ملف",
        "filehist": "تاريخ الفيشيي",
        "filehist-help": "ادرك على وقت و تاريخ/باش تشوف الملف كما بان  في هاذ الوقت.",
        "linkstoimage": "{{PLURAL:$1|الباجة توصل|ال$1 باجات يوصلو}} لهاذ الملف :",
        "nolinkstoimage": "ما كانش باجات موصوله لهاذ الفيشي.",
        "sharedupload-desc-here": "هاذ الملف جاي من $1. يمكن يكون مستعمل من بروجيات وحد أخرين.\nالتوصيف نتاعو في [$2 باجت الصفات] محطوطه هنا لتحت.",
+       "upload-disallowed-here": "ما تنحمش تعدّل هاد التصويرة",
        "randompage": "باجة على الزهر",
        "statistics": "إحصاويّات",
        "nbytes": "{{PLURAL:$1|بايت 1|$1 بايت}}",
        "pager-older-n": "{{PLURAL:$1|قديم بزاف 1|قديم بزاف $1}}",
        "booksources": "مصادر كتاب",
        "booksources-search-legend": "حوس ما بين مصادر الكتب",
+       "booksources-search": "فتّش",
        "log": "ريجيسترات العمليات",
        "allpages": "قاع الباجات",
        "allarticles": "قاع الباجات",
        "actionfailed": "العمليه فشلت",
        "dellogpage": "ريجيستر محو الباجات",
        "rollbacklink": "ولي",
+       "rollbacklinkcount": "رجّع {{PLURAL:$1|تعديل واحد|$1 تعديلات}}",
        "protectlogpage": "ريجيستر الحمايه",
        "protectedarticle": "راه حمى \"[[$1]]\"",
        "undeletelink": "شوف/رجع",
        "undeleteviewlink": "شوف",
        "namespace": "بلاصه تع أسموات",
        "invert": "اعكس التخيار",
+       "tooltip-invert": "علّم هاد المقّبسة باش تخبّي التبدالات تاع الصفحات الّي فيها وسَع` التسمية (و وسَع التسمية المربوط يلا كاين)",
+       "namespace_association": "وسَع التسمية المربوط",
+       "tooltip-namespace_association": "علّم على هاد المقيبسة باش تدخّل تاني المهادرة ولا وسَع التسمية تاع الموضوع المربوط معا وسَع التسمية المسيليكسيوني",
        "blanknamespace": "أساسي",
        "contributions": "مساهمات {{GENDER:$1|المستخدم|المستخدمه}}",
        "contributions-title": "مساهمات {{GENDER:$1|المستخدم|المستخدمه}} $1",
        "sp-contributions-username": "عنوان أيبي والال اسم مستخدم:",
        "sp-contributions-toponly": "ما تورّي غير المشاركات التوالا تاع المقالات",
        "sp-contributions-submit": "تفتاش",
-       "whatlinkshere": "Ù\88اش Ù\8aÙ\88صل هنا",
+       "whatlinkshere": "Ù\88اش Ù\88اصل هنا",
        "whatlinkshere-title": "الباجات اللي تقين في \"$1\"",
        "whatlinkshere-page": "الباجه:",
        "linkshere": "هاذ الباجات يوصلو إلى '''[[:$1]]''':",
        "tooltip-pt-preferences": "وش خيرت",
        "tooltip-pt-watchlist": "ليستت الباجات الي راك أتبع تبديلاتهم",
        "tooltip-pt-mycontris": "ليسته نتع مساهماتك",
-       "tooltip-pt-login": "Ù\85ادابÙ\8aÙ\83 ØªØ³Ø¬Ù\84 Ø§Ù\84دخÙ\88Ù\84 ØªØ§Ø¹Ù\83Ø\8c Ø¨ØµÙ\91Ø­ Ù\85اشÙ\8a Ù\85Ù\84زÙ\88Ù\85 Ø¹Ù\84Ù\8aÙ\83",
+       "tooltip-pt-login": "Ù\85ادابÙ\8aÙ\83 ØªØ³Ø¬Ù\84 Ø¯Ø®Ù\84تÙ\83 Ø\8c Ù\84Ù\83Ù\86 Ù\85اشÙ\8a Ù\84ازÙ\85",
        "tooltip-pt-logout": "سجل خروج",
-       "tooltip-ca-talk": "تقرعيج على باجتٰ المحتاوا",
-       "tooltip-ca-edit": "تنجم تحرر هاذ الباجه ،ماذابيك تستعمل قفله المراجعه قبل ما تحفظ",
+       "tooltip-pt-createaccount": "ننصح باش تصنع حساب و تسجل دخلتك ; على كل حال ماهوش ضروري",
+       "tooltip-ca-talk": "مناقشه على هاد باجت المحتوا",
+       "tooltip-ca-edit": "تقدر تبدل هاذ الباجه ،ماذابيك تستعمل قفله المراجعه قبل ما تسجل",
        "tooltip-ca-addsection": "ابدأ طرف جديد",
        "tooltip-ca-viewsource": "هاذ الباجه محميه. و شنو تقدرو تشوفو الأصلي نتاعها",
        "tooltip-ca-history": "المراجعات التوالا تاع الباجة (معا المساهمين تاوعها)",
        "tooltip-ca-watch": "زيد هذ الباجة لل ليستة تاعك تاع التتباع",
        "tooltip-ca-unwatch": "اقلع هاد الباجة منل ليستة تاعك تاع التتباع",
        "tooltip-search": " فتّش في {{SITENAME}}",
-       "tooltip-search-go": "روح الباجه عندها نفس الآسم إذا كانت كاينه",
+       "tooltip-search-go": "روح لباجه عندها ذاك الآسم نفسو  إذا كانت",
        "tooltip-search-fulltext": "فتّش على باجه بهاد الكتبة",
-       "tooltip-p-logo": "رÙ\88Ø­ Ù\84Ù\84باجÙ\87 Ø§Ù\84Ù\84Ù\88Ù\84اÙ\86Ù\8aÙ\91Ù\87",
-       "tooltip-n-mainpage": "زور الباجه اللوله",
-       "tooltip-n-mainpage-description": "زور الباجه لوله",
-       "tooltip-n-portal": "عÙ\84Ù\89 Ø§Ù\84پرÙ\88جÙ\8aØ\8cÙ\88اش ØªÙ\86جÙ\85 تدير، وين تصيب واش تحتاج",
+       "tooltip-p-logo": "زÙ\88ر Ø§Ù\84پاجة Ø§Ù\84Ù\84Ù\88Ù\84اÙ\86Ù\8aÙ\91Ø©",
+       "tooltip-n-mainpage": "زور الپاجة اللولانيّة",
+       "tooltip-n-mainpage-description": "زور الپاجة اللولانيّة",
+       "tooltip-n-portal": "عÙ\84Ù\89 Ø§Ù\84پرÙ\88جÙ\8aØ\8cÙ\88اش ØªÙ\82در تدير، وين تصيب واش تحتاج",
        "tooltip-n-currentevents": "صيب خبارات مستّرين على الصوالح الّي راهم يصراو ضركا",
-       "tooltip-n-recentchanges": "اÙ\84Ù\84Ù\8aستة ØªØ§Ø¹ Ø§Ù\84تبدÙ\8aÙ\84ات Ø§Ù\84تÙ\88اÙ\84ا فل ويكي",
+       "tooltip-n-recentchanges": "اÙ\84Ù\84Ù\8aستة ØªØ§Ø¹ Ø§Ù\84تبدÙ\8aÙ\84ات Ø§Ù\84جدÙ\8aدة فل ويكي",
        "tooltip-n-randompage": "طلّع باجه على الزهر",
        "tooltip-n-help": "بلاصة المعونة",
-       "tooltip-t-whatlinkshere": "ليستة تاع كاع الباجات تاع المحتاوا الي توصّل لهنا",
+       "tooltip-t-whatlinkshere": "ليستة تاع كامل باجات المحتاوا الواصله هنا",
        "tooltip-t-recentchangeslinked": "ليستة تاع التبديلات التوالا تاع الباجات الّي عندهم رباط معا هادي",
        "tooltip-feed-atom": "سيلان آتوم تاع هاد الباجة",
        "tooltip-t-contributions": "شوفان ليسته مساهمات هاذا المستخدم",
        "tooltip-rollback": "\"نحّي\" : ب ضركة وحدة تآنيلي التبديلة ولا التبديلات تاع المساهم التالي",
        "tooltip-undo": "\"نحّي\" فاصي هاد الـمعاودة و حلّ تاقة تاع تبدال بشوفه قبلانيّه. تخلّي باش ترجع لل معاوده التاليه و تزيد الـسبّة علاش فل قابسه تاع الـحويصله.",
        "tooltip-summary": "دخل تلخيص صغير",
+       "simpleantispam-label": "مسيّة ضدّ السبام.\nما تعمّرش هادا!",
+       "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": "الملف الأصلي",
+       "show-big-image-preview": "حجم هذه المعاينه: $1.",
+       "show-big-image-other": "{{PLURAL:$2||التدقاقة|التدقاقات}}: $1.",
+       "show-big-image-size": "$1 × $2 بكسل",
        "bad_image_list": "الفورمة راهي كيما واش يتبع:\nما كاين غير السطور الّي باديين بل *، الّي يكونو معدودين\nالـوصيل الـلوّل تاع سطر لازم كون تاع تصويرة ضايعة.\nكامل الوصيلات لخرين الّي فل سطر، يكونو معدودين كلّي تتنيّات، بل متال باجات وين الـتصويرة تنجم تبان.",
        "metadata": "بايان ميتا",
        "metadata-help": "هذا الملف راه فيه خبيرات زايدين، بالاك تكون انزادت من عند صواره نيميريك ولا سكانر مين صنع الملف.\nالأصلي، شي تفاصيل بالاك ما تعبرش على الملف المعدل.",
        "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": "التاريخ تاع التنمريل (numérisation)",
+       "exif-orientation-1": "عادي",
        "namespacesall": "لكل",
        "monthsall": "لكل",
        "watchlisttools-view": "اعرض التبديلات المرتابطه",
        "watchlisttools-edit": "اعرض قائمه المراقبه و عدلها",
        "watchlisttools-raw": "موديفي ليستت التبيعه الخام",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|تقرعيج]])",
        "duplicate-defaultsort": "'''توليه:''' مفتاح التستيف الافتراضي \"$2\" ديباسا مفتاح التستيف الافتراضي التالي\"$1\".",
        "specialpages": "الباجات الخصوصيه",
        "external_image_whitelist": " #<pre>خلى هاذ السطر كيما راه\n#حط منثورات التعبيرات المنتظمة (برك الجزء الي يروح بين //) بالتحت\n#هاذ يكون مطابقتها مع مسارات التصاوير البرانيه (الموصولة بصفه مباشره)\n#هاذي الي تشبهغادي تنعرض  كتصاور، خلاف هذا برك وصيلة للتصويرة غادي تنعرض\n#السطور اللي تبدأا ب# تعتبر تعليقات\n#هذا لا يتأثر بحالة الحروف\n\n#حط كامل منثورات التعبيرات المنتظمة فوق هذا السطر. خلي هاذ السطر سواسوا كيما هو</pre>",
-       "tag-filter": "صفاية[[Special:Tags|الوشام]]:"
+       "tag-filter": "صفاية[[Special:Tags|الوشام]]:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1||وسم|وسمان|وسوم}}]]: $2)",
+       "logentry-delete-delete": "$1 {{GENDER:$2| راه محا|راهي محات}}الصفحة $3",
+       "logentry-move-move": "{{GENDER:$2|نقّل|نقّلت}} $1 الصفحة $3 لـ $4",
+       "logentry-newusers-create": "راه تفتح حساب {{GENDER:$2|المستخدم|المستخدمه}} $1",
+       "logentry-upload-upload": " {{GENDER:$2|نزّل|نزّلت}} $1 $3",
+       "searchsuggest-search": "تفتاش"
 }
index f408d43..79e12cc 100644 (file)
        "deletereasonotherlist": "Sabab weḫdaĥor",
        "delete-edit-reasonlist": "ĝddel asbab l-ḫdf",
        "rollback": "tjjea taadilat",
-       "rollback_short": "Rjeĝ l-lor",
        "rollbacklink": "Rjeĝ l-lor",
        "rollbackfailed": "rjoaa mankhch",
        "editcomment": "molĥĥaṣ ṫ-ṫĝdil kan: \"''$1''\".",
        "watchlisttools-view": "Lista dyal s-suivi",
        "watchlisttools-edit": "Ċof o ĝeddel l-lista dyal s-suivi",
        "watchlisttools-raw": "Ṣayeb l-lista dyal s-suivi",
-       "unknown_extension_tag": "tag mṫidad ma mĝrof-ċ \"$1\"",
        "duplicate-defaultsort": "'''ṫḫdir:''' saroṫ ṫrṫib fṫiṛaḍi \"$2\" faṫ saroṫ ṫrṫib fṫiṛaḍi \"$1\".",
        "version": "Noskha",
        "version-extensions": "limtidadat lmotabbata",
        "version-parser-function-hooks": "khtatif dyal dalat lmohllil",
        "version-hook-name": "smiyt lkhttaf",
        "version-hook-subscribedby": "kaytstaml mn taraf",
-       "version-version": "(Noskha $1)",
+       "version-version": "($1)",
        "version-license": "rokhssa",
        "version-poweredby-others": "khrin",
        "version-software": "lbarnamaj li m'anstalli",
index 65f556f..adf0eed 100644 (file)
        "delete-toobig": "الصفحه دى  ليها تاريخ تعديل كبير، أكتر من $1 {{PLURAL:$1|مراجعة|مراجعة}}.\nمسح الصفحات اللى زى دى تم تحديده لمنع الاضطراب العرضى فى {{SITENAME}}.",
        "delete-warning-toobig": "الصفحة دى ليها تاريخ تعديل كبير، أكتر من $1 {{PLURAL:$1|مراجعة|مراجعة}}.\nممكن مسحها يعمل اضطراب  فى عمليات قاعدة البيانات فى {{SITENAME}}؛\nاستمر بس خد بالك.",
        "rollback": "إرجع فى التعديلات",
-       "rollback_short": "إرجع لـ ورا",
        "rollbacklink": "ترجيع",
        "rollbackfailed": "الترجيع ما نفعش",
        "cantrollback": "ماقدرناش نرجع فى التعديل؛ آخر مساهم هوه الوحيد اللى ساهم فى الصفحة دي.",
        "hebrew-calendar-m11-gen": "آب",
        "hebrew-calendar-m12-gen": "أيلول",
        "timezone-utc": "يو تى سى",
-       "unknown_extension_tag": "تاج بتاع امتداد مش معروف \"$1\"",
        "duplicate-defaultsort": "تحزير: زرار الترتيب الاوتوماتيكي\"$2\" بيوقف زرار الترتيب الاوتوماتيكي\"$1\" القديم.",
        "version": "نسخة",
        "version-extensions": "الامتدادات المتثبتة",
        "version-parser-function-hooks": "خطاطيف دالة المحلل",
        "version-hook-name": "اسم الخطاف",
        "version-hook-subscribedby": "اشتراك باسم",
-       "version-version": "(نسخه $1)",
+       "version-version": "($1)",
        "version-license": "الترخيص",
        "version-software": "السوفتوير المتستاب",
        "version-software-product": "المنتج",
        "specialpages-group-wiki": "بيانات وأدوات الويكى",
        "specialpages-group-redirects": "صفحات  التحويل الخاصه",
        "specialpages-group-spam": "أدوات السبام",
+       "specialpages-group-developer": "أدوات المطورين",
        "blankpage": "صفحة فاضية",
        "intentionallyblankpage": "الصفحة دى متسابة فاضية بالقصد",
        "external_image_whitelist": " # سيب السطر دا زى ما هو كدا<pre>\n#حط حتت التعبيرات المنتظمه (بس الجزء اللى بيروح بين //) تحت\n# ح يحصل تطابق بينهم و بين ال URLs بتاع الصور الخارجيه (هوت لينك)\n#اذا حصل تطابق ح يتعرضو ك صور ، و اذا ما حصلش ف ح تظهر بس لينك للصوره\n#السطور اللى بتبتدى بـ # بتتعامل كأنها تعليقات\n#دا ما بيتأثرش بحالة الحروف\n\n#حط كل حتت الريجيكس فوق . سيب السطر دا زى ما هو كدا</pre>",
index d90c4ef..6d86b3f 100644 (file)
@@ -15,7 +15,9 @@
                        "Simbu123",
                        "Urhixidur",
                        "아라",
-                       "Aftabuzzaman"
+                       "Aftabuzzaman",
+                       "Macofe",
+                       "IKHazarika"
                ]
        },
        "tog-underline": "সংযোগসমূহ অধোৰেখিত কৰক:",
        "showhideselectedversions": "নিৰ্বাচিত সংশোধনসমূহ দেখুৱাওক/আঁৰ কৰক",
        "editundo": "পূৰ্ববত কৰক",
        "diff-empty": "(কোনো পাৰ্থক্য নাই)",
-       "diff-multi-sameuser": "একেজন সদস্যই কৰা ({{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1টা মধ্যৱৰ্তী সংশোধন}} দেখুওৱা হোৱা নাই",
+       "diff-multi-sameuser": "একেজন সদস্যই কৰা ({{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1 মধ্যৱৰ্তী সংশোধন}} দেখুওৱা হোৱা নাই)",
        "diff-multi-otherusers": "{{PLURAL:$2|আন এজন সদস্যই|$2জন সদস্যই}} কৰা ({{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1টা মধ্যৱৰ্তী সংশোধন}} দেখুওৱা হোৱা নাই।",
        "diff-multi-manyusers": "({{PLURAL:$2|এজনতকৈ|$2-জনতকৈ}} অধিক সদস্যৰ দ্বাৰা {{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1-টা মধ্যৱৰ্তী সংশোধন}} দেখুওৱা হোৱা নাই)",
        "difference-missing-revision": "{{PLURAL:$2|এটা সংস্কৰণ|$2 সংস্কৰণসমূহৰ}} সংশোধনৰ পাৰ্থক্য  ($1) {{PLURAL:$2| পোৱা নগ’ল}}।\n\n\nসাধাৰণতে বিলোপ কৰা এখন পৃষ্ঠাৰ পুৰণা ইতিহাস লিংক অনুসৰণ কৰিলে এনে হয়।\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} বিলোপন অভিলেখ] চালে অধিক তথ্য পাব।",
        "searchrelated": "সম্পৰ্কিত",
        "searchall": "সকলো",
        "showingresults": "তলত #'''$2'''ৰ পৰা {{PLURAL:$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": "নামস্থানবোৰত সন্ধান:",
        "import-rootpage-nosubpage": "মূল পৃষ্ঠাৰ \"$1\" নামস্থানে উপপৃষ্ঠা অনুমোদন নকৰে।",
        "importlogpage": "আমদানিৰ অভিলেখ",
        "importlogpagetext": "আন ৱিকিৰ পৰা সম্পাদনা ইতিহাসসহ প্ৰশাসনীয় পৃষ্ঠা আমদানি।",
-       "import-logentry-upload": "নথি আপল'ডৰ মাধ্যমেৰে [[$1]] আমদানি কৰা হ'ল",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|টা সংশোধন|টা সংশোধন}}",
-       "import-logentry-interwiki": "আন্তঃৱিকি-স্থানান্তৰিত $1",
        "import-logentry-interwiki-detail": "$2ৱে কৰা $1 {{PLURAL:$1|টা সংশোধন|টা সংশোধন}}",
        "javascripttest": "জাভাস্ক্ৰিপ্ট পৰীক্ষা।",
        "javascripttest-pagetext-noframework": "এই পৃষ্ঠাটো জাভাস্ক্ৰিপ্ট পৰীক্ষা চলোৱাৰ বাবে সংৰক্ষিত।",
        "tooltip-pt-mycontris": "আপোনাৰ বৰঙণিৰ তালিকা",
        "tooltip-pt-login": "বাধ্যতামূলক নহ'লেও প্ৰৱেশ কৰাটো বাঞ্চনীয়",
        "tooltip-pt-logout": "প্ৰস্থান",
+       "tooltip-pt-createaccount": "আপোনাক এটা একাউণ্ট সৃষ্টি কৰি প্ৰৱেশ কৰিবলৈ অনুৰোধ জনোৱা হৈছে, কিন্তু এয়া বাধ্যতামূলক নহয়",
        "tooltip-ca-talk": "সংশ্লিষ্ট প্ৰবন্ধ সম্পৰ্কীয় আলোচনা",
        "tooltip-ca-edit": "আপুনি এই পৃষ্ঠাটো সালসলনি কৰিব পাৰে, অনুগ্ৰহ কৰি সালসলনি সাচী থোৱাৰ আগতে খচৰা চাই লব",
        "tooltip-ca-addsection": "নতুন অনুচ্ছেদ আৰম্ভ কৰক",
        "version-parser-function-hooks": "পাৰ্চাৰ ফাংচন হুকসমূহ",
        "version-hook-name": "হুক নাম",
        "version-hook-subscribedby": "চাবস্ক্ৰাইব কৰিছে",
-       "version-version": "(সংস্কৰণ $1)",
+       "version-version": "($1)",
        "version-license": "অনুজ্ঞাপত্ৰ",
        "version-ext-license": "অনুজ্ঞাপত্ৰ",
        "version-ext-colheader-name": "এক্সটেন্‌চন",
        "logentry-rights-rights": "$1ৰ গোট সদস্যপদ $3ৰ পৰা $4লৈ $5 লৈ সলনি কৰা হ'ল",
        "logentry-rights-rights-legacy": "$1-ৰ গোট সদস্যপদ $3-লৈ সলনি কৰা হ'ল",
        "logentry-rights-autopromote": "$1ক  $4ৰ পৰা $5লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত কৰা হ’ল",
+       "logentry-upload-upload": "$1 $3 {{GENDER:$2|আপল'ড কৰা হ'ল}}",
        "rightsnone": "(নাই)",
        "revdelete-summary": "সম্পাদনাৰ সাৰমৰ্ম",
+       "feedback-adding": "পৃষ্ঠাত প্ৰতিক্ৰিয়া যোগ কৰা হৈছে...",
+       "feedback-bugcheck": "অতি উত্তম! কেৱল পৰীক্ষা কৰক যে ই ইতিমধ্যে [$1 জ্ঞাত বাগসমূহ]ৰ এটা নহয়।",
+       "feedback-bugnew": "মই পৰীক্ষা কৰিলো। এটা নতুন বাগ সংবাদন কৰক",
        "feedback-bugornote": "যদি আপুনি এটা কাৰিকৰী সমস্যাৰ বিৱৰণ দিবলৈ প্ৰস্তুত, অনুগ্ৰহ কৰি [$1 এটা বাগ ৰিপ'ৰ্ট কৰক]।\nনহ'লে আপুনি তলৰ সহজ ফৰ্ম ব্যৱহাৰ কৰিব পাৰিব। আপোনাৰ মন্তব্য আপোনাৰ সদস্যনাম আৰু আপুনি ব্যৱহাৰ কৰা ব্ৰাউজাৰৰ সৈতে \"[$3 $2]\" -পৃষ্ঠাত যোগ কৰা হ'ব।",
-       "feedback-subject": "বিষয়:",
-       "feedback-message": "বাৰ্তা:",
        "feedback-cancel": "বাতিল কৰক",
-       "feedback-submit": "প্ৰতিক্ৰিয়া জমা কৰক",
-       "feedback-adding": "পৃষ্ঠাত প্ৰতিক্ৰিয়া যোগ কৰা হৈছে...",
+       "feedback-close": "কৰা হ’ল",
        "feedback-error1": "ত্ৰুটি: এ.পি.আই.ৰ অজ্ঞাত ফলাফল",
        "feedback-error2": "ত্ৰুটি: সম্পাদনা বিফল হৈছে",
        "feedback-error3": "ত্ৰুটি: এ.পি.আই.ৰ কোনো সঁহাৰি নাই",
+       "feedback-message": "বাৰ্তা:",
+       "feedback-subject": "বিষয়:",
+       "feedback-submit": "দাখিল কৰক",
        "feedback-thanks": "ধন্যবাদ ! আপোনাৰ প্ৰতিক্ৰিয়া \"[$2 $1]\" পৃষ্ঠাত প্ৰকাশ কৰা হৈছে।",
-       "feedback-close": "কৰা হ’ল",
-       "feedback-bugcheck": "অতি উত্তম! কেৱল পৰীক্ষা কৰক যে ই ইতিমধ্যে [$1 জ্ঞাত বাগসমূহ]ৰ এটা নহয়।",
-       "feedback-bugnew": "মই পৰীক্ষা কৰিলো। এটা নতুন বাগ সংবাদন কৰক",
        "searchsuggest-search": "সন্ধান কৰক",
        "searchsuggest-containing": "যি আছে...",
        "api-error-badaccess-groups": "এই ৱিকিত ফাইল আপল'ড কৰিবলৈ আপোনাৰ অনুমতি নাই।",
        "pagelang-select-lang": "ভাষা নিৰ্বাচন কৰক",
        "right-pagelang": "পৃষ্ঠাৰ ভাষা পৰিৱৰ্তন কৰক",
        "action-pagelang": "পৃষ্ঠাৰ ভাষা পৰিৱৰ্তন কৰক",
-       "log-name-pagelang": "ভাষা পৰিৱৰ্তন ল'গ"
+       "log-name-pagelang": "ভাষা পৰিৱৰ্তন ল'গ",
+       "special-characters-group-latin": "লেটিন",
+       "special-characters-group-latinextended": "সম্প্ৰসাৰিত লেটিন",
+       "special-characters-group-ipa": "আইপিএ (IPA)",
+       "special-characters-group-symbols": "চিহ্নসমূহ",
+       "special-characters-group-greek": "গ্ৰীক",
+       "special-characters-group-cyrillic": "ছিৰিলিক",
+       "special-characters-group-arabic": "আৰবীক",
+       "special-characters-group-arabicextended": "সম্প্ৰসাৰিত আৰবীক",
+       "special-characters-group-persian": "ফাৰ্ছী",
+       "special-characters-group-hebrew": "হিব্ৰু",
+       "special-characters-group-bangla": "বাংলা",
+       "special-characters-group-tamil": "তামিল",
+       "special-characters-group-telugu": "তেলেগু",
+       "special-characters-group-sinhala": "সিংহলী",
+       "special-characters-group-gujarati": "গুজৰাটী",
+       "special-characters-group-devanagari": "দেবনাগৰী",
+       "special-characters-group-thai": "থাই",
+       "special-characters-group-lao": "লাও",
+       "special-characters-group-khmer": "খেমাৰ",
+       "special-characters-title-endash": "en দেছ্‌",
+       "special-characters-title-emdash": "em দেছ‌",
+       "special-characters-title-minus": "বিয়োগ চিন"
 }
index 5cbed2e..1b0c089 100644 (file)
@@ -10,7 +10,8 @@
                        "Xuacu",
                        "לערי ריינהארט",
                        "아라",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Macofe"
                ]
        },
        "tog-underline": "Sorrayar enllaces:",
@@ -38,7 +39,7 @@
        "tog-shownumberswatching": "Amosar el númberu d'usuarios que tán vixilando la páxina",
        "tog-oldsig": "Firma esistente:",
        "tog-fancysig": "Tratar la firma como testu wiki (ensin enllaz automáticu)",
-       "tog-uselivepreview": "Usar vista previa en tiempu real (experimental)",
+       "tog-uselivepreview": "Usar vista previa en tiempu real",
        "tog-forceeditsummary": "Avisame cuando grabe col resume d'edición en blanco",
        "tog-watchlisthideown": "Anubrir les mios ediciones na llista de siguimientu",
        "tog-watchlisthidebots": "Anubrir les ediciones de bots na llista de siguimientu",
        "pool-queuefull": "La cola de trabayu ta enllena",
        "pool-errorunknown": "Fallu desconocíu",
        "pool-servererror": "El serviciu de contador de recursos compartíos nun ta disponible ($1).",
+       "poolcounter-usage-error": "Error d'usu: $1",
        "aboutsite": "Tocante a {{SITENAME}}",
        "aboutpage": "Project:Tocante a",
        "copyright": "El conteníu ta disponible baxo los términos de la $1 si nun s'indica otra cosa.",
        "readonly_lag": "La base de datos candóse automáticamente mentes los sirvidores de la base de datos esclava se sincronicen cola maestra",
        "internalerror": "Fallu internu",
        "internalerror_info": "Fallu internu: $1",
+       "internalerror-fatal-exception": "Escepción fatal de tipu «$1»",
        "filecopyerror": "Nun se pudo copiar el ficheru «$1» como «$2».",
        "filerenameerror": "Nun se pudo renomar el ficheru «$1» como «$2».",
        "filedeleteerror": "Nun se pudo desaniciar el ficheru «$1».",
        "directorycreateerror": "Nun se pudo crear el direutoriu «$1».",
+       "directoryreadonlyerror": "El direutoriu «$1» ye de sólo llectura.",
+       "directorynotreadableerror": "El direutoriu \"$1\" nun ye lleíble.",
        "filenotfound": "Nun pudo atopase'l ficheru «$1».",
        "unexpected": "Valor inesperáu: «$1»=«$2».",
        "formerror": "Fallu: Nun se pudo unviar el formulariu.",
        "viewsourcetext": "Pues ver y copiar la fonte d'esta páxina:",
        "viewyourtext": "Pues ver y copiar la fonte de '''les tos ediciones''' d'esta páxina:",
        "protectedinterface": "Esta páxina proporciona'l testu de la interfaz del software d'esta wiki, y ta candada pa torgar abusos.\nP'amestar o cambiar les traducciones de toles wikis, por favor usa [//translatewiki.net/translatewiki.net], el proyeutu de llocalización de MediaWiki.",
-       "editinginterface": "'''Avisu:''' Tas editando una páxina que s'usa pa proporcionar el testu d'interfaz del programa.\nLos cambeos nesta páxina van afeutar l'apariencia de la interfaz pa otros usuarios d'esta wiki.\nP'amestar o camudar traducciones pa toles wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyeutu de traducción de MediaWiki.",
+       "editinginterface": "<strong>Avisu:</strong> Tas editando una páxina que s'usa pa proporcionar el testu de la interfaz del programa.\nLos cambeos nesta páxina afeutarán al aspeutu de la interfaz pa otros usuarios d'esta wiki.",
+       "translateinterface": "P'amestar o camudar les traducciones pa toles wikis, usa [//translatewiki.net/ translatewiki.net], el proyeutu de traducción de MediaWiki.",
        "cascadeprotected": "Esta páxina ta protexida d'ediciones porque ta inxerta {{PLURAL:$1|na siguiente páxina, protexida|nes siguientes páxines, protexíes}} cola opción «en cascada» activada:\n$2",
        "namespaceprotected": "Nun tienes permisu pa editar páxines nel espaciu de nomes '''$1'''.",
        "customcssprotected": "Nun tienes permisu pa editar esta páxina CSS porque contién preferencies personales d'otru usuariu.",
        "anoneditwarning": "<strong>Avisu:</strong> Nun aniciasti sesión. La direición IP sedrá visible en público si faes dalguna edición. Si <strong>[$1 anicies sesión]</strong> o <strong>[$2 crees una cuenta]</strong>, les ediciones atribuiránse al to nome d'usuariu, xunto con otros beneficios.",
        "anonpreviewwarning": "''Nun aniciasti sesión. Al guardar quedará rexistrada la to direición IP nel historial d'edición d'esta páxina.''",
        "missingsummary": "'''Recordatoriu:''' Nun conseñasti un resume d'edición.\nSi calques nuevamente \"{{int:savearticle}}\", la to edición guardaráse ensin nengún resume.",
+       "selfredirect": "<strong>Atención:</strong> Tas redirixendo esta páxina a ella mesma.\nSeique conseñaras un oxetivu enquivocáu pa la redireición, o que teas editando una páxina enquivocada. Si vuelves a facer clic en «{{int:savearticle}}», crearáse la redireición de toles maneres.",
        "missingcommenttext": "Por favor, escribi un comentariu abaxo.",
        "missingcommentheader": "'''Recordatoriu:''' Nun conseñasti un asuntu/titular pa esti comentariu.\nSi calques nuevamente \"{{int:savearticle}}\", la to edición guardaráse ensin dengún.",
        "summary-preview": "Vista previa del resume:",
        "content-model-text": "testu simple",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Oxetu baleru",
+       "content-json-empty-array": "Matriz balera",
+       "duplicate-args-category": "Páxines con argumentos duplicaos nes llamaes a plantíes",
+       "duplicate-args-category-desc": "La páxina contién 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 contién demasiaes llamaes costoses a funciones d'análisis sintáuticu.\n\nHabría tener menos de $2 {{PLURAL:$2|llamada|llamaes}}, y agora tien $1 {{PLURAL:$1|llamada|llamaes}}.",
        "expensive-parserfunction-category": "Páxines con demasiaes llamaes costoses a funciones analítiques",
        "post-expand-template-inclusion-warning": "'''Avisu:''' El tamañu de les plantíes incluyíes ye demasiao grande.\nDelles plantíes nun se van incluir.",
        "history-feed-empty": "La páxina solicitada nun esiste.\nSeique fuera desaniciada de la wiki, o renomada.\nPrueba a [[Special:Search|buscar na wiki]] otres páxines nueves.",
        "rev-deleted-comment": "(resume d'edición desaniciáu)",
        "rev-deleted-user": "(nome d'usuariu desaniciáu)",
-       "rev-deleted-event": "(aición del rexistru desaniciada)",
+       "rev-deleted-event": "(detalles del rexistru desaniciaos)",
        "rev-deleted-user-contribs": "[nome d'usuariu o direición IP desaniciáu - ediciones anubríes en contribuciones]",
        "rev-deleted-text-permission": "Esta revisión de la páxina se '''desanició'''.\nLos detalles s'alcuentren nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistru de desanicios].",
        "rev-suppressed-text-permission": "Esta revisión de la páxina <strong>suprimióse</strong>.\nLos detalles s'alcuentren nel [{{fullurl:{{#Special:Log}}/supress|page={{FULLPAGENAMEE}}}} rexistru de supresiones].",
        "revdelete-legend": "Establecer torgues de visibilidá",
        "revdelete-hide-text": "Testu de la revisión",
        "revdelete-hide-image": "Tapecer el conteníu del ficheru",
-       "revdelete-hide-name": "Tapecer aición y oxetivu",
+       "revdelete-hide-name": "Tapecer el destín y los parámetros",
        "revdelete-hide-comment": "Resume d'edición",
        "revdelete-hide-user": "Nome del editor/Direición IP",
        "revdelete-hide-restricted": "Desaniciar datos de los alministradores y d'otros",
        "search-result-category-size": "{{PLURAL:$1|1 miembru|$1 miembros}} ({{PLURAL:$2|1 subcategoría|$2 subcategories}}, {{PLURAL:$3|1 ficheru|$3 ficheros}})",
        "search-redirect": "(redireición de $1)",
        "search-section": "(seición $1)",
+       "search-category": "(categoría $1)",
        "search-file-match": "(casa col conteníu del ficheru)",
        "search-suggest": "Quixisti dicir: $1",
        "search-interwiki-caption": "Proyeutos hermanos",
        "prefs-personal": "Perfil del usuariu",
        "prefs-rc": "Cambios recientes",
        "prefs-watchlist": "Llista de siguimientu",
+       "prefs-editwatchlist": "Editar la llista de siguimientu",
+       "prefs-editwatchlist-label": "Editar les entraes de la to llista de siguimientu:",
+       "prefs-editwatchlist-edit": "Ver y desaniciar los títulos de la to llista de siguimientu",
+       "prefs-editwatchlist-raw": "Editar la llista de siguimientu (ensin formatu)",
+       "prefs-editwatchlist-clear": "Llimpiar la to llista de siguimientu",
        "prefs-watchlist-days": "Númberu de díes qu'amosar na llista de siguimientu:",
        "prefs-watchlist-days-max": "Máximo $1 {{PLURAL:$1|día|díes}}",
        "prefs-watchlist-edits": "Númberu máximu d'ediciones qu'amosar na llista de siguimientu espandida:",
        "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.",
        "email": "Corréu",
-       "prefs-help-realname": "El nome real ye opcional y si decides conseñalu va ser usáu p'atribuyite'l to trabayu.",
+       "prefs-help-realname": "El nome real ye opcional.\nSi se da, pue usase pa date reconocimientu pol to trabayu.",
        "prefs-help-email": "La direición de corréu ye opcional, pero ye necesaria pa unviate una conseña nueva si escaeces la tuya.",
        "prefs-help-email-others": "Tamién pues escoyer permitir qu'otres persones contauten contigo pela to páxina d'usuariu o la d'alderique ensin necesidá de revelar la to identidá.",
        "prefs-help-email-required": "Necesítase una direición de corréu electrónicu.",
        "right-protect": "Camudar los niveles de proteición y editar páxines protexíes en cascada",
        "right-editprotected": "Editar les páxines protexíes como \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Editar les páxines protexíes como \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Editar el modelu de conteníu d'una páxina",
        "right-editinterface": "Editar la interfaz d'usuariu",
        "right-editusercssjs": "Editar los archivos CSS y JS d'otros usuarios",
        "right-editusercss": "Editar los archivos CSS d'otros usuarios",
        "right-override-export-depth": "Esportar páxines, incluyendo páxines enllazaes fasta una fondura de 5",
        "right-sendemail": "Unviar corréu a otros usuarios",
        "right-passwordreset": "Ver los correos de reestablecimientu de conseña",
+       "right-managechangetags": "Crear y desaniciar [[Special:Tags|etiquetes]] dende la base de datos",
        "newuserlogpage": "Rexistru de creación d'usuarios",
        "newuserlogpagetext": "Esti ye un rexistru de creación d'usuarios.",
        "rightslog": "Rexistru de perfil d'usuariu",
        "action-viewmywatchlist": "ver la llista de vixilancia propia",
        "action-viewmyprivateinfo": "ver la so información privada",
        "action-editmyprivateinfo": "editar la so información privada",
+       "action-editcontentmodel": "editar el modelu de conteníu d'una páxina",
+       "action-managechangetags": "crear y desaniciar etiquetes dende la base de datos",
        "nchanges": "{{PLURAL:$1|un cambiu|$1 cambios}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|dende la última visita}}",
        "enhancedrc-history": "historial",
        "uploaderror": "Error de xubida",
        "upload-recreate-warning": "'''Avisu: Se desanició o treslladó un ficheru con esi nome.'''\n\nEquí s'ufre'l rexistru de desaniciu y treslláu d'esta páxina por comodidá:",
        "uploadtext": "Usa'l formulariu de más abaxo pa xubir ficheros.\nPa ver o buscar ficheros xubíos previamente, vete a la [[Special:FileList|llista de ficheros xubíos]]. Les (re)xubíes tamién queden conseñaes nel [[Special:Log/upload|rexistru de xubíes]], y los desanicios nel [[Special:Log/delete|rexistru de desanicios]].\n\nPa incluir un ficheru nuna páxina, usa un enllaz con ún de los siguientes formatos:\n*<strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ficheru.jpg]]</nowiki></code></strong> pa usar la versión completa del ficheru\n*<strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ficheru.png|200px|thumb|left|testu alternativu]]</nowiki></code></strong> pa usar una versión de 200 píxeles d'anchu nun cuadru nel marxe izquierdu con «testu alternativu» como descripción\n*<strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Ficheru.ogg]]</nowiki></code></strong> pa enllazar al ficheru direutamente ensin amosalu",
-       "upload-permitted": "Menes d'archivu permitíes: $1.",
-       "upload-preferred": "Menes d'archivu preferíes: $1.",
-       "upload-prohibited": "Menes d'archivu prohibíes: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tipu de ficheru permitíu|Tipos de ficheros permitíos}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tipu de ficheru preferíu|Tipos de ficheros preferíos}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Tipu de ficheru torgáu|Tipos de ficheros torgaos}}: $1.",
        "uploadlogpage": "Rexistru de xubíes",
        "uploadlogpagetext": "Abaxo amuésase una llista de les xubíes d'archivos más recientes.\nMira la [[Special:NewFiles|galería d'archivos nuevos]] pa una güeyada más visual.",
        "filename": "Nome del ficheru",
        "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-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]].",
        "pager-older-n": "{{PLURAL:$1|1 anterior|$1 anteriores}}",
        "suppress": "Güeyador",
        "querypage-disabled": "Esta páxina especial ta desactivada por razones de rindimientu.",
+       "apihelp": "Ayuda de la API",
+       "apihelp-no-such-module": "Nun s'alcuentra'l módulu «$1».",
        "booksources": "Fontes de llibros",
        "booksources-search-legend": "Busca de fontes de llibros",
        "booksources-search": "Buscar",
        "namespace": "Espaciu de nomes:",
        "invert": "Invertir seleición",
        "tooltip-invert": "Marca esta caxella p'anubrir los cambios de les páxines pertenecientes al espaciu de nomes seleicionáu (y al espaciu de nomes asociáu si se marcó)",
+       "tooltip-whatlinkshere-invert": "Marca esta caxella pa tapecer los enllaces de páxines que tean nel espaciu de nomes seleicionáu.",
        "namespace_association": "Espaciu de nome asociáu",
        "tooltip-namespace_association": "Marca esta caxella p'amestar tamién l'espaciu de nombres d'alderique o asuntu asociaos col espaciu de nomes seleicionáu",
        "blanknamespace": "(Principal)",
        "thumbnail-temp-create": "Nun se pudo crear el ficheru temporal de miniatura",
        "thumbnail-dest-create": "Nun se pudo guardar la miniatura nel destín",
        "thumbnail_invalid_params": "Parámetros de miniatura non válidos",
+       "thumbnail_toobigimagearea": "Ficheru con dimensiones mayores que $1",
        "thumbnail_dest_directory": "Nun se pue crear el direutoriu de destín",
        "thumbnail_image-type": "Triba d'imaxe ensin sofitu",
        "thumbnail_gd-library": "Configuración incompleta de la biblioteca GD: falta la función $1",
        "thumbnail_image-missing": "Paez que falta'l ficheru: $1",
        "thumbnail_image-failure-limit": "Hebo demasiaos intentos recientes que fallaron ($1 o más) al representar esta miniatura. Vuelva a intentalo más sero.",
        "import": "Importar páxines",
-       "importinterwiki": "Importación treswiki",
-       "import-interwiki-text": "Seleiciona una wiki y un títulu de páxina pa importar.\nLes feches de revisión y los nomes de los editores caltendránse.\nToles aiciones d'importación treswiki queden rexistraes nel [[Special:Log/import|rexistru d'importaciones]].",
+       "importinterwiki": "Importar d'otra wiki",
+       "import-interwiki-text": "Seleiciona una wiki y un títulu de páxina pa importar.\nVan caltenese les feches de revisión y los nomes de los editores.\nToles importaciones d'otres wikis queden rexistraes nel [[Special:Log/import|rexistru d'importaciones]].",
        "import-interwiki-sourcewiki": "Wiki d'orixe:",
        "import-interwiki-sourcepage": "Páxina d'orixe:",
        "import-interwiki-history": "Copiar toles versiones d'historial d'esta páxina",
        "importcantopen": "Nun se pudo abrir el ficheru d'importación",
        "importbadinterwiki": "Enllaz interwiki incorreutu",
        "importsuccess": "¡Importación finalizada!",
-       "importnosources": "Nun se definió l'orixe de la importación treswiki y les xubíes direutes del historial tán deshabilitaes.",
+       "importnosources": "Nun se definieron wikis de onde importar y les xubíes direutes del historial tán desactivaes.",
        "importnofile": "Nun se xubió nengún archivu d'importación.",
        "importuploaderrorsize": "Falló la xubida del archivu d'importación. L'archivu ye más grande que'l tamañu permitíu de xubida.",
        "importuploaderrorpartial": "Falló la xubida del archivu d'importación. L'archivu xubióse solo parcialmente.",
        "javascripttest": "Prueba de JavaScript",
        "javascripttest-pagetext-noframework": "Esta páxina ta acutada pa executar pruebes de javascript.",
        "javascripttest-pagetext-unknownframework": "L'entornu de pruebes «$1» ye desconocíu.",
+       "javascripttest-pagetext-unknownaction": "Aición desconocida «$1».",
        "javascripttest-pagetext-frameworks": "Escueyi un de los siguientes entornos de pruebes: $1",
        "javascripttest-pagetext-skins": "Escueyi una apariencia pa executar les pruebes:",
        "javascripttest-qunit-intro": "Ver la [$1 documentación de les pruebes] en mediawiki.org.",
        "tooltip-pt-mycontris": "Llista de les tos collaboraciones",
        "tooltip-pt-login": "T'encamentamos que t'identifiques, anque nun ye obligatorio",
        "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-addsection": "Emprima una seición nueva",
        "tooltip-feed-atom": "Canal Atom pa esta páxina",
        "tooltip-t-contributions": "Llista de collaboraciones d'esti usuariu",
        "tooltip-t-emailuser": "Unvia un corréu a esti usuariu",
+       "tooltip-t-info": "Más información sobro esta páxina",
        "tooltip-t-upload": "Xubir ficheros",
        "tooltip-t-specialpages": "Llista de toles páxines especiales",
        "tooltip-t-print": "Versión imprentable d'esta páxina",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|alderique]])",
        "duplicate-defaultsort": "Avisu: La clave d'ordenación predeterminada \"$2\" anula la clave d'ordenación anterior \"$1\".",
        "duplicate-displaytitle": "<strong>Avisu:</strong> El títulu a amosar \"$2\" anula el títulu anterior \"$1\".",
+       "invalid-indicator-name": "<strong>Error:</strong> L'atributu <code>name</code> de los indicadores d'estáu de la páxina nun pue tar baleru.",
        "version": "Versión",
        "version-extensions": "Estensiones instalaes",
        "version-skins": "Temes instalaos",
        "version-parser-function-hooks": "Hooks de les funciones d'análisis sintáuticu",
        "version-hook-name": "Nome del hook",
        "version-hook-subscribedby": "Suscritu por",
-       "version-version": "(Versión $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[ensin nome]",
        "version-license": "Llicencia de MediaWiki",
        "version-ext-license": "Llicencia",
        "version-entrypoints": "URLs del puntu d'entrada",
        "version-entrypoints-header-entrypoint": "Puntu d'entrada",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Biblioteques instalaes",
+       "version-libraries-library": "Biblioteca",
+       "version-libraries-version": "Versión",
        "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]].",
        "specialpages-group-wiki": "Datos y ferramientes",
        "specialpages-group-redirects": "Páxines especiales de redireición",
        "specialpages-group-spam": "Ferramientes pa spam",
+       "specialpages-group-developer": "Ferramientes pa desendolcadores",
        "blankpage": "Páxina en blanco",
        "intentionallyblankpage": "Esta páxina ta en blanco arrémente",
        "external_image_whitelist": "#Dexa esta llinia exautamente como ta<pre>\n#Pon los fragmentos d'espresiones regulares (namái la parte que va ente les //) debaxo\n#Esto va ser comprobao coles URLs d'imáxenes esternes (hotlinked)\n#Les que concuayen se van amosar como imáxenes; si nun concuayen, namái se va amosar un enllaz a la imaxe\n#Les llinies qu'emprimen con # se traten como comentarios\n#Esto nun ye sensible a la capitalización\n\n#Pon tolos fragmentos regex enantes d'esta llinia. Dexa esta llinia exautamente como ta</pre>",
        "tags-tag": "Nome d'etiqueta",
        "tags-display-header": "Aspeutu nes llistes de cambios",
        "tags-description-header": "Descripción completa del significáu",
+       "tags-source-header": "Fonte",
        "tags-active-header": "¿Activu?",
        "tags-hitcount-header": "Cambios etiquetaos",
+       "tags-actions-header": "Aiciones",
        "tags-active-yes": "Sí",
        "tags-active-no": "Non",
+       "tags-source-extension": "Definida por una estensión",
+       "tags-source-manual": "Aplicada a mano polos usuarios y bots",
+       "tags-source-none": "Yá nun s'usa",
        "tags-edit": "editar",
+       "tags-delete": "desaniciar",
+       "tags-activate": "activar",
+       "tags-deactivate": "desactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|cambiu|cambios}}",
+       "tags-manage-no-permission": "Nun tienes permisu p'alministrar etiquetes de cambiu.",
+       "tags-create-heading": "Crear una etiqueta nueva",
+       "tags-create-explanation": "De mou predetermináu, les etiquetes nueves que se creen tarán disponibles pa que les usen los usuarios y bots.",
+       "tags-create-tag-name": "Nome de la etiqueta:",
+       "tags-create-reason": "Motivu:",
+       "tags-create-submit": "Crear",
+       "tags-create-no-name": "Tienes d'especificar un nome d'etiqueta.",
+       "tags-create-invalid-chars": "Los nomes d'etiqueta nun tienen de contener comes (<code>,</code>) o barres (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Los nomes d'etiqueta nun puen contener caráuteres que nun puedan usase nos títulos de páxina",
+       "tags-create-already-exists": "La etiqueta «$1» yá esiste.",
+       "tags-create-warnings-above": "{{PLURAL:$2|Alcontróse'l siguiente avisu|Alcontráronse los siguientes avisos}} al intentar crear la etiqueta «$1»:",
+       "tags-create-warnings-below": "¿Quies siguir creando de la etiqueta?",
+       "tags-delete-title": "Desaniciar etiqueta",
+       "tags-delete-explanation-initial": "Tas a piques de desaniciar la etiqueta «$1» de la base de datos.",
+       "tags-delete-explanation-in-use": "Desaniciaráse de {{PLURAL:$2|la revisión o entrada|les $2 revisiones y/o entraes}} del rexistru a {{PLURAL:$2|la|les}} que s'aplica actualmente.",
+       "tags-delete-explanation-warning": "Esta aición ye <strong>irreversible</strong> y <strong>nun podrán desfacela</strong> siquiera los alministradores de la base de datos. Confirma qu'esta ye la etiqueta que quies desaniciar.",
+       "tags-delete-explanation-active": "<strong>La etiqueta «$1» sigue activa y siguirá aplicándose nel futuru.</strong> Pa que dexe d'asoceder, vete al llugar(es) onde ta configurada la aplicación d'esta etiqueta y desactívala allí.",
+       "tags-delete-reason": "Motivu:",
+       "tags-delete-submit": "Desaniciar esta etiqueta de mou irreversible",
+       "tags-delete-not-allowed": "Les etiquetes definíes por una estensión nun puen desaniciase mentanto la estensión nun lo permita específicamente.",
+       "tags-delete-not-found": "La etiqueta «$1» nun esiste.",
+       "tags-activate-reason": "Motivu:",
+       "tags-activate-submit": "Activar",
+       "tags-deactivate-title": "Desactivar etiqueta",
+       "tags-deactivate-reason": "Motivu:",
+       "tags-deactivate-submit": "Desactivar",
        "comparepages": "Comparar páxines",
        "compare-page1": "Páxina 1",
        "compare-page2": "Páxina 2",
        "compare-revision-not-exists": "La revisión que conseñasti nun esiste.",
        "dberr-problems": "¡Sentímoslo! Esti sitiu ta esperimentando dificultaes téuniques.",
        "dberr-again": "Tenta esperar dellos minutos y recargar.",
-       "dberr-info": "(Nun se pue contautar cola base de datos del sirvidor: $1)",
-       "dberr-info-hidden": "(Nun se pue comunicar col sirvidor de base de datos)",
+       "dberr-info": "(Nun se pue entrar na base de datos: $1)",
+       "dberr-info-hidden": "(Nun se pue entrar na base de datos)",
        "dberr-usegoogle": "Pue probar a buscar con Google mentanto.",
        "dberr-outofdate": "Atalanta que los sos índices del nuesu conteníu seique nun tean actualizaos.",
        "dberr-cachederror": "Esta ye una copia na caché de la páxina que se pidiera, y pue que nun tea actualizada.",
        "revdelete-uname-unhid": "nome d'usuariu non anubríu",
        "revdelete-restricted": "aplicaes les restricciones a los alministradores",
        "revdelete-unrestricted": "eliminaes les restricciones a los alministradores",
+       "logentry-block-block": "$1 {{GENDER:$2|bloquió}} a {{GENDER:$4|$3}} con un tiempu de duración de $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|desbloquió a}} {{GENDER:$4|$3}}",
        "logentry-move-move": "$1 {{GENDER:$2|treslladó}} la páxina \"$3\" a \"$4\"",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|treslladó}} la páxina \"$3\" a \"$4\" ensin dexar una redireición",
        "logentry-move-move_redir": "$1 {{GENDER:$2|treslladó}} la páxina \"$3\" a \"$4\" sobre una redireición",
        "logentry-upload-revert": "$1 {{GENDER:$2|xubió}} $3",
        "rightsnone": "(nengún)",
        "revdelete-summary": "editar resume",
+       "feedback-adding": "Amestando el comentariu a la páxina...",
+       "feedback-bugcheck": "¡Perfeuto! Comprueba que nun tea yá ente los [$1 fallos conocíos].",
+       "feedback-bugnew": "Yá lo comprobé. Informar d'esti fallu nuevu",
        "feedback-bugornote": "Si tas preparáu pa describir un problema técnicu en detalle, [$1 informa del fallu].\nD'otra miente, pues usar el formulariu cenciellu d'abaxo. El to comentariu apaecerá na páxina \"[$3 $2]\" xunto col to nome d'usuariu y el restolador qu'uses.",
-       "feedback-subject": "Asuntu:",
-       "feedback-message": "Mensaxe:",
        "feedback-cancel": "Encaboxar",
-       "feedback-submit": "Unviar comentarios",
-       "feedback-adding": "Amestando el comentariu a la páxina...",
+       "feedback-close": "Fecho",
        "feedback-error1": "Fallu: Resultáu de la API non reconocíu",
        "feedback-error2": "Fallu: Falló la edición",
        "feedback-error3": "Fallu: Ensin respuesta de la API",
+       "feedback-message": "Mensaxe:",
+       "feedback-subject": "Asuntu:",
+       "feedback-submit": "Unviar",
        "feedback-thanks": "¡Gracies! La to opinión s'espublizó na páxina «[$2  $1]».",
-       "feedback-close": "Fecho",
-       "feedback-bugcheck": "¡Perfeuto! Comprueba que nun tea yá ente los [$1 fallos conocíos].",
-       "feedback-bugnew": "Yá lo comprobé. Informar d'esti fallu nuevu",
        "searchsuggest-search": "Buscar",
        "searchsuggest-containing": "que contién...",
        "api-error-badaccess-groups": "Nun tienes permisu pa xubir ficheros a esta wiki.",
        "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": "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 to instalación paez qu'incluye los siguientes aspeutos. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activalos y escoyer el predetermináu.\n\n$2\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. 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:* 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 les llinies siguientes en <code>LocalSettings.php</code> p'activar 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:* 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 los siguientes aspeutos. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo 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 les llinies siguientes en <code>LocalSettings.php</code> p'activar 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-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",
        "json-error-utf8": "Carauteres UTF-8 con errores de formatu, seique codificaos incorreutamente",
        "json-error-recursion": "Una o más referencies recursives nel valor a codificar",
        "json-error-inf-or-nan": "Unu o más valores NAN (númberu nun conseñáu) o INF (infinitu) nel valor a codificar",
-       "json-error-unsupported-type": "Diose un valor d'un tipu que nun pue codificase"
+       "json-error-unsupported-type": "Diose un valor d'un tipu que nun pue codificase",
+       "headline-anchor-title": "Enllaz a esta sección"
 }
index 40b39fc..40914c0 100644 (file)
        "delete-toobig": "Batu bu va izvotap (lo $1 {{PLURAL:$1|betara|betara}}) digir. Ta djira va waltafa empara va {{SITENAME}} sulara va manu bu zo irutar.",
        "delete-warning-toobig": "Batu bu va izvotap (lo $1 {{PLURAL:$1|betara|betara}}) digir. Sulara va manu bu va skura ke origak ke {{SITENAME}} rotempar, acum obrason diotel !",
        "rollback": "nabildara va betareem",
-       "rollback_short": "Nabildara",
        "rollbacklink": "nabildara",
        "rollbackfailed": "Rodjeyesa nabildara",
        "cantrollback": "Impossible de révoquer : dernier auteur est le seul à avoir modifié cet article",
        "watchlisttools-view": "Wira va icdef betakseem",
        "watchlisttools-edit": "Wira va suzdasiki isu betara",
        "watchlisttools-raw": "Betara va suzdasiki",
-       "unknown_extension_tag": "\"$1\" megrupena divatcenafa tcala",
        "duplicate-defaultsort": "'''OBRAL !''' \"$2\" omavafa muberamarna va \"$1\" tela abdifa selur.",
        "version": "Siatos",
        "version-extensions": "Inkeyeni divatcesiki se",
        "version-parser-function-hooks": "Exuleraflidemi",
        "version-hook-name": "Demiyolt",
        "version-hook-subscribedby": "Wimpayan gan",
-       "version-version": "(Siatos $1)",
+       "version-version": "($1)",
        "version-license": "Sorta",
        "version-software": "Inkeyen talpeyot",
        "version-software-product": "Warzeks",
index 3e03958..218fa2e 100644 (file)
        "disclaimers": "अस्वीकरण",
        "disclaimerpage": "Project:साधारण अस्वीकरण",
        "edithelp": "सम्पादन सहायता",
+       "helppage-top-gethelp": "मदद",
        "mainpage": "प्रधान पन्ना",
        "mainpage-description": "प्रधान पन्ना",
        "policy-url": "Project:नीति",
        "import-rootpage-nosubpage": "दिए गए उपसर्ग पृष्ठ \"$1\" के नामस्थान में उप-पृष्ठ नहीं बनाए जा सकते।",
        "importlogpage": "आयात सूची",
        "importlogpagetext": "अन्य विकियों से प्रबन्धकों द्वारा किए गए सम्पादन इतिहास के साथ होने वाले पृष्ठों का आयात।",
-       "import-logentry-upload": "सञ्चिका अपलोड करके [[$1]] का आयात किया",
-       "import-logentry-interwiki": " $1 कय अन्तरविकिकरण कई गय",
        "javascripttest": "जावास्क्रिप्ट परीक्षण",
        "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"",
        "javascripttest-pagetext-unknownaction": "अज्ञात काम \"$1\".",
        "tooltip-pt-mycontris": "आप कय योगदान कय सुची",
        "tooltip-pt-login": "आप कय खाता प्रवेश खत्तिर प्रोत्साहित कै जात है, लेकिन ई अनिवार्य नाई है",
        "tooltip-pt-logout": "बहरे निकरा जाय",
+       "tooltip-pt-createaccount": "हमारा सुझाव है की आप खाता बनाएँ और लॉगिन करें, परन्तु यह अनिवार्य नहीं है",
        "tooltip-ca-talk": "सामग्री पन्ना कय बारे में बात-चीत",
        "tooltip-ca-edit": "आप ई पन्ना कय सम्पादन कै सका जात है। कृपया पन्ना सुरक्षित करय से पहिले पूर्वावलोकन बटन कय इस्तेमाल करा जाय।",
        "tooltip-ca-addsection": "एक्ठु नँवा खण्ड शुरु करा जाय",
        "logentry-move-move": "$1 ने $3 पृष्ठ $4 पर {{GENDER:$2|स्थानांतरित}} कै गय",
        "rightsnone": "(कउनो नाहीं)",
        "revdelete-summary": "संपादन सारांश",
-       "feedback-subject": "विषय:",
-       "feedback-message": "सनेशा:",
-       "feedback-cancel": "रद्द करा जाय",
-       "feedback-submit": "प्रतिक्रिया भेजा जाय",
        "feedback-adding": "पृष्ठ पे प्रतिक्रिया जोडत है ...",
-       "feedback-error2": "त्रुटि: संपादन विफल रहा है",
+       "feedback-cancel": "रद्द करा जाय",
        "feedback-close": "होइ गवा",
+       "feedback-error2": "त्रुटि: संपादन विफल रहा है",
+       "feedback-message": "सनेशा:",
+       "feedback-subject": "विषय:",
+       "feedback-submit": "प्रतिक्रिया भेजा जाय",
        "searchsuggest-search": "खोज",
        "searchsuggest-containing": "...से युक्त",
        "api-error-badaccess-groups": "इ विकि मा आप कय फाइल अपलोड करेक अनुमति नाइ है",
index c1b8944..dcc2dbc 100644 (file)
        "permalink": "Daimi bağlantı",
        "print": "Çap",
        "view": "Görünüş",
+       "view-foreign": "$1 üzərindən baxış",
        "edit": "Redaktə",
+       "edit-local": "Lokal izahı redaktə et",
        "create": "Yarat",
+       "create-local": "Lokal izah əlavə et",
        "editthispage": "Bu səhifəni redaktə et",
        "create-this-page": "Bu səhifəni yarat",
        "delete": "Sil",
        "otherlanguages": "Başqa dillərdə",
        "redirectedfrom": "($1 səhifəsindən yönləndirilmişdir)",
        "redirectpagesub": "Yönləndirmə səhifəsi",
+       "redirectto": "İstiqamətləndirilir:",
        "lastmodifiedat": "Bu səhifə sonuncu dəfə $2, $1 tarixində redaktə edilib.",
        "viewcount": "Bu səhifəyə $1 {{PLURAL:$1|dəfə}} müraciət olunub.",
        "protectedpage": "Mühafizəli səhifə",
        "edit-no-change": "Sizin redaktələr qeydə alınmamışdır. Belə ki, mətndə heç bir düzəliş edilməmişdir.",
        "postedit-confirmation-saved": "Redaktəniz qeyd edildi.",
        "edit-already-exists": "Yeni səhifəni yaratmaq mümkün deyil.\nBelə ki, bu adda səhifə artıq mövcuddur.",
+       "content-not-allowed-here": "\"$1\" tərkibi [[$2]] səhifəsi üçün icazə verilmir.",
+       "content-model-wikitext": "vikimətn",
+       "content-model-text": "adi mətn",
        "content-model-javascript": "JavaScript",
        "expensive-parserfunction-category": "Kifayət qədər böyük sayda genişresurslu funksiyaların müraciət olunduğu səhifələr",
        "post-expand-template-inclusion-warning": "'''DİQQƏT!''' Daxil edilən şablonların həcmi həddindən artıq böyükdür.\nBəzi şablonlar əlavə olunmayacaq.",
        "compareselectedversions": "Seçilən versiyaları müqayisə et",
        "showhideselectedversions": "Seçilən versiyaları göstər/gizlə",
        "editundo": "əvvəlki halına qaytar",
+       "diff-multi-sameuser": "(Eyni istifadəçi tərəfindən edilmiş {{PLURAL:$1|bir dəyişiklik|$1 bir neçə dəyişiklik}} göstərilmir)",
        "diff-multi-manyusers": "({{PLURAL:$2|Bir istifadəçi|$2 istifadəçi}} tərəfindən edilən {{PLURAL:$1|bir ara redaktə|$1 ara redaktə}} göstərilmir)",
        "difference-missing-revision": "Səhifənin  {{PLURAL:$2|bu versiyasının|$2 versiyalarının}} müqayisəsi ($1) tapılmadı.\nBu xəta adətən, köhnəlmiş səhifələrin müqayisə versiyalarından keçid edildikdə baş verir.\nDaha ətraflı məlumat üçün [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silmə qeydlərinə] baxın.",
        "searchresults": "Axtarış nəticələri",
        "right-delete": "Səhifələrin silinməsi",
        "right-bigdelete": "Uzun tarixçəsi olan səhifələrin silinməsi",
        "right-deleterevision": "səhifənin konkret versiyasının silinməsi və bərpası",
-       "right-deletedhistory": "silinmiş mətnə daxil olmadan silinmiş səhifələrin tarixçələrinə baxma",
+       "right-deletedhistory": "Silinmiş mətni görmədən silinmiş səhifələrin tarixçələrinə baxmaq",
        "right-browsearchive": "Silinmiş səhifələri axtar",
        "right-undelete": "Silinmiş səhifələrin bərpası",
        "right-suppressrevision": "Səhifələrin gizli versiyalarına bax, gizlə və göstər",
        "action-writeapi": "API yazıdan istifadə",
        "action-delete": "bu səhifəni sil",
        "action-deleterevision": "bu yoxlamaı ləğv et",
-       "action-deletedhistory": "səhifənin silinmə tarixinə bax",
+       "action-deletedhistory": "səhifənin silinmə tarixinə baxmaq",
        "action-browsearchive": "Silinmiş səhifələri axtar",
        "action-undelete": "bu səhifəni silmə",
        "action-suppressrevision": "bu gizli redaktəyə bax və bərpa et",
        "action-suppressionlog": "xüsusi gündəliyə baxış",
-       "action-block": "istifadəçinin redaktə etməsini əngəlləmək",
+       "action-block": "bu istifadəçinin redaktə etməsinə qadağa qoymaq",
        "action-protect": "bu səhifənin mühafizə səviyyəsini dəyişmək",
        "action-import": "başqa vikidən səhifələrin idxalı",
        "action-importupload": "fayl yükləmə vasitəsilə səhifələrin idxalı",
        "action-siteadmin": "Məlumatlar bazasının bloklanması və blokun götürülməsi",
        "action-sendemail": "e-məktub göndər",
        "nchanges": "$1 {{PLURAL:$1|dəyişiklik|dəyişiklik}}",
+       "enhancedrc-history": "tarixçə",
        "recentchanges": "Son dəyişikliklər",
        "recentchanges-legend": "Son dəyişiklik seçimləri",
        "recentchanges-summary": "'''Ən son dəyişiklikləri bu səhifədən izləyin:'''",
        "recentchanges-label-bot": "Bu redaktə bot tərəfindən edilmişdir",
        "recentchanges-label-unpatrolled": "Bu redaktə hələ nəzərdən keçirilməmişdir",
        "recentchanges-label-plusminus": "Səhifənin ölçüsü bayt miqdarı ilə təyin edilir",
+       "recentchanges-legend-heading": "'''Legenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (həmçinin bax: [[Special:NewPages|yeni səhifələrin siyahısı]])",
        "rcnotefrom": "Aşağıda <strong>$2</strong>-dən bu yana olan dəyişikliklər göstərilib (<strong>$1</strong>-dən çox olmayaraq).",
        "rclistfrom": "$3 $2 vaxtından başlayaraq yeni dəyişiklikləri göstər",
        "rcshowhideminor": "Kiçik redaktələri $1",
+       "rcshowhideminor-show": "Göstər",
+       "rcshowhideminor-hide": "Gizlət",
        "rcshowhidebots": "Botları $1",
+       "rcshowhidebots-show": "Göstər",
+       "rcshowhidebots-hide": "Gizlət",
        "rcshowhideliu": "Qeydiyyatlı istifadəçiləri $1",
+       "rcshowhideliu-hide": "Gizlət",
        "rcshowhideanons": "Anonim istifadəçiləri $1",
+       "rcshowhideanons-show": "Göstər",
+       "rcshowhideanons-hide": "Gizlət",
        "rcshowhidepatr": "Yoxlanılmış redaktələri $1",
        "rcshowhidemine": "Mənim redaktələrimi $1",
+       "rcshowhidemine-show": "Göstər",
+       "rcshowhidemine-hide": "Gizlət",
        "rclinks": "Son $2 gün ərzindəki son $1 dəyişikliyi göstər <br />$3",
        "diff": "fərq",
        "hist": "tarixçə",
        "shared-repo-from": "$1-dən",
        "shared-repo": "ümumi fayl anbarı",
        "shared-repo-name-wikimediacommons": "Wikimedia Commons",
+       "upload-disallowed-here": "Siz bu faylı yenidən yükləyə bilməzsiniz.",
        "filerevert": "$1 faylını əvvəlki vəziyyətinə qaytar",
        "filerevert-legend": "Faylı əvvəlki vəziyyətinə qaytar",
        "filerevert-comment": "Səbəb:",
        "booksources": "Kitab mənbələri",
        "booksources-search-legend": "Kitab mənbələri axtar",
        "booksources-isbn": "ISBN:",
+       "booksources-search": "Axtar",
        "booksources-text": "Aşağıda yeni və işlənmiş kitablar satan xarici keçidlərdə siz axtardığınız kitab haqqında əlavə məlumat ala bilərsiz:",
        "specialloguserlabel": "İcraçı:",
        "speciallogtitlelabel": "Məqsəd (başlıq və ya istifadəçi):",
        "undelete-show-file-submit": "Bəli",
        "namespace": "Adlar fəzası:",
        "invert": "Seçilən xaricindəkiləri",
+       "tooltip-invert": "Seçilmiş ad fəzasında (və ya göstərilmiş uyğunluqlarda olan adlar) olan səhifələrdəki dəyişiklikləri gizlətmək üçün bura işarə edin",
        "namespace_association": "Əlaqəli ad sahəsi",
        "blanknamespace": "(Ana)",
        "contributions": "{{GENDER:$1|İstifadəçinin}} fəaliyyəti",
        "ipboptions": "2 saat:2 hours,1 gün:1 day,3 gün:3 days,1 həftə:1 week,2 həftə:2 weeks,1 ay:1 month,3 ay:3 months,6 ay:6 months,1 il:1 year,müddətsiz:infinite",
        "ipbhidename": "İstifadəçi adını redaktələrdə və siyahılarda gizlət",
        "ipbwatchuser": "Bu istifadəçinin müzakirə və istifadəçi səhifəsini izlə",
-       "ipb-disableusertalk": "Bu istifadəçi bloklu olarkən öz müzakirə səhifəsində redaktə etməsini əngəllə",
+       "ipb-disableusertalk": "Bu istifadəçi bloklu olarkən öz müzakirə səhifəsində redaktə etməsinə qadağa qoy",
        "ipb-change-block": "Bu səbəblərlə istifadəçini yenidən blokla",
        "ipb-confirm": "Bloku təsdiqlə",
        "badipaddress": "Səhv IP",
        "immobile-target-namespace-iw": "İntervikilər səhifə adının dəyişməsi üçün əsas ola bilməz.",
        "immobile-source-page": "Bu səhifənin adı dəyişdirilə bilməz.",
        "immobile-target-page": "Bu hədəf başlığına daşınmır.",
+       "bad-target-model": "İstənilən hədəf fərqli bir məzmun modeli istifadə edir. $1 modelindən $2 modelinə çevrilmir.",
        "imageinvalidfilename": "Seçilmiş fayl adı keçərsizdir.",
        "protectedpagemovewarning": "'''Xəbərdarlıq:''' Bu səhifə mühafizə edildiyi üçün onun adını yalnız idarəçilər dəyişə bilərlər.",
        "export": "Səhifələri ixrac et",
        "importlogpage": "Çıxarılma gündəliyi",
        "importlogpagetext": "Səhifələrin idarəçilər tərəfindən digər vikilərdən dəyişiklik tarixçəsi ilə birlikdə köçürülməsi",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|dəyişiklik|dəyişiklik}} idxal edildi.",
-       "import-logentry-interwiki": "vikilərarası idxal $1",
        "import-logentry-interwiki-detail": "$2 vikidən $1 {{PLURAL:$1|dəyişiklik|dəyişiklik}} idxal edildi",
        "tooltip-pt-userpage": "İstifadəçi səhifəniz",
        "tooltip-pt-anonuserpage": "The user page for the ip you",
        "creditspage": "Səhifə kreditleri",
        "spamprotectiontitle": "Spam qoruma süzgəci",
        "spambot_username": "MediaViki spam təmizləməsi",
+       "simpleantispam-label": "Anti-spam yoxlanılması.\nBuranı <strong>DOLDURMAYIN</strong>!",
        "pageinfo-title": "\"$1\" üçün məlumat",
        "pageinfo-header-basic": "Əsas məlumatlar",
        "pageinfo-header-edits": "Redaktə tarixçəsi",
        "pageinfo-header-restrictions": "Səhifə mühafizəsi",
        "pageinfo-header-properties": "Səhifə xüsusiyyətləri",
        "pageinfo-display-title": "Göstərilən başlıq",
+       "pageinfo-default-sort": "Susmaya görə çeşidləmə açarı",
        "pageinfo-length": "Səhifənin ölçüsü (baytla)",
        "pageinfo-article-id": "Səhifə ID-si",
        "pageinfo-language": "Səhifənin dili",
        "pageinfo-content-model": "Səhifə məzmunu modeli",
+       "pageinfo-robot-policy": "Robotlar tərəfindən indeksləşmə",
+       "pageinfo-robot-index": "İcazə verilir",
        "pageinfo-robot-noindex": "İcazə verilmədi",
        "pageinfo-watchers": "Səhifəyə baxışların sayı",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|izləyicidən|izləyicilərdən}} az",
        "exif-pixelydimension": "Şəkilin eni",
        "exif-pixelxdimension": "Şəkilin hündürlüyü",
        "exif-usercomment": "İstifadəçi şərhi",
+       "exif-datetimeoriginal": "Orijinal tarix və vaxt",
+       "exif-datetimedigitized": "Tarix və vaxt rəqəmləşdirilir",
        "exif-exposuretime-format": "$1 saniyə ($2)",
        "exif-fnumber": "F nömrəsi",
        "exif-exposureprogram": "Ekspozisiya proqramı",
        "watchlisttools-view": "Siyahıdakı səhifələrdə edilən dəyişikliklər",
        "watchlisttools-edit": "İzlədiyim səhifələri göstər və redaktə et",
        "watchlisttools-raw": "Adi mətn kimi redaktə et",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|müzakirə]])",
        "duplicate-defaultsort": "<strong>Diqqət:</strong> Susmaya görə \"$2\" çeşidləmə açarı susmaya görə əvvəlki \"$1\" çeşidləmə açarını inkar edir.",
        "version": "Versiya",
        "version-extensions": "NIzamlanmış genişlənmələr",
        "version-hooks": "Çəngəllər",
        "version-hook-name": "Çəngəlin adı",
        "version-hook-subscribedby": "Abunə olan",
-       "version-version": "(Versiya $1)",
+       "version-version": "($1)",
        "version-license": "MediaViki lisenziyası",
        "version-ext-license": "Lisenziya",
        "version-ext-colheader-version": "Versiya",
        "htmlform-selectorother-other": "Digər",
        "sqlite-has-fts": "$1 tam mətn axtarma ilə",
        "sqlite-no-fts": "$1 tam mətn axtarma olmadan",
+       "logentry-delete-delete": "$1 $3 səhifəsini {{GENDER:$2|sildi}}",
        "logentry-suppress-delete": "$1 $3 səhifəsini {{GENDER:$2|gizlətdi}}",
        "revdelete-content-hid": "gizli mətn",
        "revdelete-summary-hid": "gizli tarixçə",
        "logentry-newusers-create": "$1 istifadəçi hesabı yaradıldı",
        "logentry-newusers-create2": "$3 istifadəçi hesabı $1 tərəfindən yaradıldı",
        "logentry-newusers-autocreate": "$1 istifadəçi hesabı avtomatik yaradıldı",
+       "logentry-upload-upload": "$1 $3 faylını {{GENDER:$2|yüklədi}}.",
        "rightsnone": "(yoxdur)",
        "revdelete-summary": "redaktə xülasəsi",
-       "feedback-subject": "Mövzu:",
-       "feedback-message": "Mesaj:",
+       "feedback-bugnew": "Mən yoxladım. Yeni xəta barədə xəbər ver",
        "feedback-cancel": "İmtina",
-       "feedback-error2": "Xəta: Redaktə qeydə alınmadı",
        "feedback-close": "Oldu",
-       "feedback-bugnew": "Mən yoxladım. Yeni xəta barədə xəbər ver",
+       "feedback-error2": "Xəta: Redaktə qeydə alınmadı",
+       "feedback-message": "Mesaj:",
+       "feedback-subject": "Mövzu:",
        "searchsuggest-search": "Axtar",
        "api-error-filename-tooshort": "Fayl adı qısadır.",
        "api-error-filetype-banned": "Bu tip fayllar qadağandır.",
        "duration-decades": "$1 {{PLURAL:$1|onillik|onillik}}",
        "duration-centuries": "$1 {{PLURAL:$1|əsr|əsr}}",
        "duration-millennia": "$1 {{PLURAL:$1|minillik|minillik}}",
+       "limitreport-cputime": "CPU vaxt istifadəsi",
+       "limitreport-walltime": "Real vaxt istifadəsi",
        "expand_templates_output": "Nəticə",
-       "expand_templates_ok": "OK"
+       "expand_templates_ok": "OK",
+       "special-characters-group-latin": "Latın",
+       "special-characters-group-latinextended": "Latın genişləndirilmiş",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simvollar",
+       "special-characters-group-greek": "Yunan",
+       "special-characters-group-cyrillic": "Kiril",
+       "special-characters-group-arabic": "Ərəb",
+       "special-characters-group-persian": "Fars",
+       "special-characters-group-hebrew": "İvrit",
+       "special-characters-group-bangla": "Benqal",
+       "special-characters-group-telugu": "Teluqu",
+       "special-characters-group-sinhala": "Sinqal",
+       "special-characters-group-gujarati": "Qucarat",
+       "special-characters-group-thai": "Tay",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index 85ed84b..40a7b4c 100644 (file)
@@ -13,7 +13,8 @@
                        "Microchip08",
                        "아라",
                        "Koroğlu",
-                       "Baloch Afghanistan"
+                       "Baloch Afghanistan",
+                       "Macofe"
                ]
        },
        "tog-underline": "باغلانتیلارین آلتینی خطله:",
@@ -30,6 +31,7 @@
        "tog-watchdefault": "دَییشدیردیگیم صحیفه‌‌لری و فايل‌لاری، گؤزله‌دیکلریمه آرتیر",
        "tog-watchmoves": "داشیدیغیم صحیفه‌‌لری و فايل‌لاری گؤزله‌دیکلریمه آرتیر",
        "tog-watchdeletion": "سیلدیگیم صحیفه‌‌لری و فايل‌لاری گؤزله‌دیکلریمه آرتیر",
+       "tog-watchrollback": "قایتاریلمیش صفحه لری ایزلدیکلریمه آرتیر",
        "tog-minordefault": "وارساییلان اوْلاراق، بۆتون دَییشدیر‌مه‌لری کیچیک کیمی نیشانلا",
        "tog-previewontop": "اؤن‌گؤستریشی، يازماق قۇتوسوندان قاباق گؤستر",
        "tog-previewonfirst": "ایلک دَییشدیرمه‌ده اؤن‌گؤستریشی گؤستر",
        "permalink": "قالان باغلانتی",
        "print": "یازدیر",
        "view": "باخ",
+       "view-foreign": "$1 گور",
        "edit": "دَییشدیر",
+       "edit-local": "یئرلی آچیقلامالاری دَییشدیر",
        "create": "یارات",
+       "create-local": "یئرلی آچیقلاما آرتیر",
        "editthispage": "بۇ صحیفه‌‌نی دَییشدیر",
        "create-this-page": "بۇ صحیفه‌‌نی يارات",
        "delete": "سیل",
        "otherlanguages": "آیری دیل‌لرده",
        "redirectedfrom": "($1-دن يوْل‌لاندیریلمیش)",
        "redirectpagesub": "یوْل‌لاندیرما صحیفه‌سی",
+       "redirectto": "مسیزپرین دَییشیب:",
        "lastmodifiedat": "بۇ صحیفه‌‌ سوْن دفعه‌‌ $1، $2 چاغیندا دَییشیلمیشدیر.",
        "viewcount": "بۇ صحیفه {{PLURAL:$1|بیر|$1}} دفعه گؤرولوبدور.",
        "protectedpage": "قوْرونموش صحیفه",
        "pool-timeout": "قیفیلا دؤزماغین واختی بیتیردی",
        "pool-queuefull": "مخزن صفی دوْلودور",
        "pool-errorunknown": "بیلینمه‌ین خطا",
+       "pool-servererror": "پول سنتر سئرویسی الده دئییل ( $1 ).",
+       "poolcounter-usage-error": "$1:ایشلتمک خطاسی",
        "aboutsite": "{{SITENAME}} حاقیندا",
        "aboutpage": "Project:حاقیندا",
        "copyright": "ایچینده‌کیلر $1 لیسانسی احاطه‌سینده‌دیلر.",
        "nospecialpagetext": "<strong>سیز بیر یانلیش اؤزل صحیفه ایسته‌میسینیز.</strong>\n\nدۆزگون اؤزل صحیفه‌لرین لیستینی [[Special:SpecialPages|{{int:specialpages}}]]-ده گؤره بیلرسینیز.",
        "error": "خطا",
        "databaseerror": "دِیتابِیس خطاسی",
+       "databaseerror-text": "داده پایگاهیندا موشکول اوز وئریب. \nبو اولا بیلر گوستره نرم افزار دا ایراد وار.",
+       "databaseerror-textcl": "داده پایگاهیندا بیر سورغو خطاسی اوز وئریب",
+       "databaseerror-query": "سورغو: $1",
+       "databaseerror-function": "تابع: $1",
+       "databaseerror-error": "خطا: $1",
        "laggedslavemode": "'''دیقت:''' یارپاق‌دا، سون دَییشیکلیکلرین اولماماسی ایمکانی وار.",
        "readonly": "دیتابیس باغلانیب",
        "enterlockreason": "باغلاما نَدَن‌لیگی و آچیلماغین تخمینی واختینی یازین",
        "filerenameerror": "«$1» فایلین آدی «$2»-نا دَییشدیریلنمه‌دی.",
        "filedeleteerror": "«$1» فایلی سیلیننمه‌دی.",
        "directorycreateerror": "«$1» دایرکتوری‌سی سیلیننمه‌دی.",
+       "directoryreadonlyerror": "دایرکتوری \"$1\" تکجه اوخومالی دیر.",
+       "directorynotreadableerror": "دایرکتوری \"$1\" اوخونمالی دئییل.",
        "filenotfound": "«$1» فایلی تاپیلانمادی.",
        "unexpected": "گؤزلنیلمه‌ین دَیَر: «$1»=«$2»",
        "formerror": "خطا: فورم یوللانانمادی.",
        "cannotdelete": "«$1» فایل یا یارپاغی سیلیننمه‌دی.\nاولا بیلر اونو اؤنجه‌دن باشقا بیر اشلدن سیلمیش اولا.",
        "cannotdelete-title": "«$1» یارپاغی سیلیننمیر",
        "delete-hook-aborted": "سیمک، چنگل‌له یاری‌دا قالدی.\nاو هئچ بیر ایضاح وئرمه‌دی.",
+       "no-null-revision": "\"$1\" صحیفه‌سی اوچون یئنی بوش بیر نوسخه یارادیلا بیلمه‌دی",
        "badtitle": "پیس باشلیق",
        "badtitletext": "آختاریلان صحیفه‌‌ آدی سهودیر و يا بوْشدور، يا دا دۆزگون اوْلمايان دیللر‌آراسی، ياخود ویکیلرآراسی کئچید ایستیفاده ائدیلیب. \nباشلیقلاردا ایستیفاده ائدیلمه‌سی قاداغان اوْلونان بیر و يا داها چوْخ سیمووْل ایستیفاده ائدیلمیش اوْلا بیلر.",
        "perfcached": "بو بیلگی، کَش اولوب‌دور و اولا بیلر گونجل اولماسین. چوخو {{PLURAL:$1|بیر نتیجه|$1 نتیجه}} کَش‌ده‌دیر.",
        "viewsourcetext": "سیز بو صحیفه‌نین مزمونونو گؤره و کؤچوره بیلرسینیز:",
        "viewyourtext": "'''اؤز دَییشیکلیکلرینیز''' ین کودونو گؤروب و بو صحیفه‌یه کوپی ائده بیلرسینیز:",
        "protectedinterface": "بو صحیفه‌ده پروقرام تأمیناتی اوچون سیستئم بیلگی‌لری وار و سوی-ایستیفاده‌نین قارشی‌سینی آلماق اوچون محافظه اولونما‌لی‌دیر.",
-       "editinginterface": "'''دیقت:''' سیز بیر یازیلیم آرا-اوزونه یازی تعمین ائدن صحیفه‌نی دَییشدیرمک‌ده‌سینیز.\nبو صحیفه‌نی دَییشدیرمک، بو ویکی‌نی ایستیفاده ائدن باشقا ایستیفاده‌چیلرین گؤرونوشونو دَییشه‌جک‌دیر.\nچئویرمه‌لری بوتون ویکی‌لره آرتیریب یوخسا دَییشدیرمک اوچون لوطفاً [//translatewiki.net/ translatewiki.net]، مئدیاویکی‌نین یئرلیلشدیرمه پروژه‌سیندن ایستیفاده ائدین.",
+       "editinginterface": "<strong>دیقت:</strong> سیز بیر یازیلیم آرا-اوزونه یازی تعمین ائدن صحیفه‌نی دَییشدیرمک‌ده‌سینیز.\nبو صحیفه‌نی دَییشدیرمک، بو ویکی‌نی ایستیفاده ائدن باشقا ایستیفاده‌چیلرین گؤرونوشونو دَییشه‌جک‌دیر.",
+       "translateinterface": "ترجومه و یا اونون دَییشدیرمک هامی ویکی لر اوچون [//translatewiki.net/ translatewiki.net]،مدیا ویکی نین یئرلری ائتمک پروژه سیندن ایستفاده ائدین",
        "cascadeprotected": "بو صحیفه دَییشیکلیکلر قاباغیندا قورونوب‌دور، چونکو بو آشاغیداکی، آبشاری {{PLURAL:$1|سئچمه‌سی|سئچمه‌لری}} سئچیلن، قورونان {{PLURAL:$1|صحیفه|صحیفه‌لر}} ایچینده‌دیر:\n$2",
        "namespaceprotected": "سیز '''$1''' آدفضاسینداکی صحیفه‌لرین دَییشمه‌سینه ایجازه‌نیز یوخدور.",
        "customcssprotected": "سیز بو CSS صفحه‌سینین دَییشمه‌سینه ایجازه‌نیز یوخدور نییه کی اون‌دا باشقا ایشلدنین شخصی تنظیملری واردیر.",
        "invalidtitle-knownnamespace": "«$2» آدآلان‌لی و «$3» یازی‌لی یانلیش باشلیق",
        "invalidtitle-unknownnamespace": "تانینمامیش $1 نومره‌لی آدآلان و «$2» یازی‌لی یانلیش باشلیق",
        "exception-nologin": "گیریش ائتمه‌میسینیز",
-       "exception-nologin-text": "بو یارپاق یا ایشی گؤرمگه، بو ویکی‌یه گیرمه‌لیسینیز.",
+       "exception-nologin-text": "بو صحیفه‌یه داخیل اولماق و یا فعالیتی ایجرا ائتمک اوچون اؤزونوزو سیستئمه گیریش ائدین.",
+       "exception-nologin-text-manual": " بو صحیفه‌یه و یا حرکته داخیل اولماق اوچون $1 لازیم‌دیر.",
        "virus-badscanner": "پیس تنظیملر: تانینمامیش ویروس یوخلایان: ''$1''",
        "virus-scanfailed": "یوخلاماق باشا چاتمادی (کود $1)",
        "virus-unknownscanner": "تانینمامیش آنتی‌ویروس:",
-       "logouttext": "'''سیز ایندی سیستِم‌دن چیخدینیز.'''\n\nسیز {{SITENAME}}-ی تانینمامیش اولاراق ایشلده بیلرسینیز، یوخسا همن ایستیفاده‌چی آدی یا باشقا ایستیفاده‌چی آدی ایله <span class='plainlinks'>[$1یئنی‌دن گیریش]</span> ائده بیلرسینیز.\nبونا دیقت ائدین کی بعضی صحیفه‌لر، کَش-ینیزی سیلمه‌میشه کیمی، هله ده سیزین گیریش ائتدیگینیز کیمی گؤستریله‌جکلر.",
+       "logouttext": "<strong>سیز ایندی سیستِم‌دن چیخدینیز.</strong>\n\nسیز {{SITENAME}}-ی تانینمامیش اولاراق ایشلده بیلرسینیز، یوخسا همن ایستیفاده‌چی آدی یا باشقا ایستیفاده‌چی آدی ایله <span class='plainlinks'>[$1یئنی‌دن گیریش]</span> ائده بیلرسینیز.\nبونا دیقت ائدین کی بعضی صحیفه‌لر، کَش-ینیزی سیلمه‌میش کیمی، هله ده سیزین گیریش ائتدیگینیز کیمی گؤستریله‌جکلر.",
        "welcomeuser": "خوش گلمیسینیز، $1!",
        "welcomecreation-msg": "حسابینیز آچیلدی.\n[[Special:Preferences|{{SITENAME}}ترجیحلر]] دییشدیرمیی اونوتمایین.",
        "yourname": "ایستیفاده‌چی آدی:",
        "userlogin-yourname": "ایستیفاده‌چی آدی",
        "userlogin-yourname-ph": "ایستیفاده‌چی آدینیزی دَییشدیرین",
+       "createacct-another-username-ph": "ایستیفاده‌چی آدینیزی داخیل ائدین",
        "yourpassword": "رمز:",
        "userlogin-yourpassword": "رمز",
        "userlogin-yourpassword-ph": "رمزینیزی داخیل ائدین",
        "gotaccountlink": "گیریش",
        "userlogin-resetlink": "گیریش بیلگیلرینیزی اونوتموسونوز؟",
        "userlogin-resetpassword-link": "رمزینیزی اونوتموسوز مو؟",
+       "userlogin-helplink2": "یاردیم ایله گیریش",
+       "userlogin-loggedin": "سیر حال حاضیردا {{GENDER:$1|$1}} عونوانیندا گیریش ائدیب سیز.\nآشاغیداکی فورمودان بیر آیری ایشلدن عونوانیندا گیریش اوچون ایشلدین.",
        "userlogin-createanother": "بیر باشقا حساب یارات",
        "createacct-emailrequired": "ایمیل آدرسی",
        "createacct-emailoptional": "ایمیل آدرسی (ایستگه باغلی)",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|دانیشیق]]) ایستیفاده‌چی حسابی یارادیلیب‌دیر.",
        "createaccount-title": "{{SITENAME}} اوچون حساب یارادیلماسی",
        "createaccount-text": "بیر کس، سیزین ایمیل آدرسینیزه {{SITENAME}} ($4) سایتیندا «$2» آدی و «$3» رمزی ایله بیر حساب آچیب‌دیر. سیز گرک گیریش ائدیب و رمزینیزی ایندی دَییشدیره‌سیز.\n\nبو حساب یانلیش دوزلیب‌سه، بو مئساژا محل قویمایابیلرسیز.",
-       "login-throttled": "سیزین چوخ گیریش چالیشماغینیز اولوب‌دور.\nلوطفاً یئنی‌دن چالیشماق‌دان اؤنجه بیر آز دؤزون.",
+       "login-throttled": "سیزین چوخ گیریش چالیشماغینیز اولوب‌دور.\nلوطفاً یئنی‌دن چالیشماق‌دان اؤنجه بیر آز $1 دؤزون.",
        "login-abort-generic": "سیزین گیریشینیز باشاری‌سیز اولدو - دایاندیریلدی",
+       "login-migrated-generic": "ایستفادچی حسابینیز آختاریلمیش دیر و آدینیز داها بو ویکی ده یوخدور",
        "loginlanguagelabel": "دیل: $1",
        "suspicious-userlogout": "سیزین چیخیش ایستگینیز رد اولوندو. بو، براوزرین یا پروکسی-کَشلمه‌سینین دوزگون ایشله‌مه‌مه‌سین‌دن قایناق‌لانیر.",
+       "createacct-another-realname-tip": "اصلی آد ایستگینیزه باغلی‌دیر.\nاگر اونو وئرماغی سئچسز، سیزین ایشلرینیزی سیزه مونتسب ائدن‌ده، بو اصلی آد ایشلنه‌جک‌دیر.",
        "pt-login": "گیریش ائت",
        "pt-login-button": "گیریش ائت",
        "pt-createaccount": "حساب یارات",
        "resetpass-submit-loggedin": "رمزی دَییشدیر",
        "resetpass-submit-cancel": "لغو ائت",
        "resetpass-wrong-oldpass": "یانلیش گئچیجی یا ایندیکی رمز.\nاولا بیلر سیز باشاریلیق‌لا رمزینیزی دَییشمیسینیز یوخسا یئنی گئچرلی رمز ایسته‌میسینیز.",
+       "resetpass-recycled": "لوطفا گیریش رمزینیزی ایندیکی اولمایان بیر ایری گیریش رمزینه دَییشین",
        "resetpass-temp-password": "گئچیجی رمز:",
        "resetpass-abort-generic": "رمز دَییشدیرمک، بیر اوزانتی ایله یاریدا کسیلیب‌دیر.",
        "passwordreset": "رمزی یئنی‌له",
        "preview": "اؤن‌گؤستریش",
        "showpreview": "سیناق گؤستریش",
        "showdiff": "دَییشیکلیکلری گؤستر",
-       "anoneditwarning": "'''دیقت:''' سیز سیستئمه گیرمه‌میسینیز. سیزین آی‌پی آدرسینیز بو صفحه‌نین دییشیک تاریخچه‌سین‌ده یازیلاجاق‌دیر.",
+       "anoneditwarning": "<strong>دیقت:</strong> سیز سیستئمه گیرمه‌میسینیز. سیزین آی‌پی آدرسینیز بو صفحه‌نین دییشیک تاریخچه‌سین‌ده یازیلب و گورسنجک.هر دَییشدیرمه ائتسز.<strong>[$1 گیریش ائتسز]</strong> یا <strong>[$2 بیر ایشلدن حسابی آچاسیز]</strong>, دَییشدیرمه لرینیز سیزین ایشلدن حساب آدینیزا نیسبت وئریلجک و آرتیق مزیت لرله.",
        "anonpreviewwarning": "''سیستمه گیرمه‌میسینیز. قئید ائتمک‌له، سیزین آی‌پی آدرسینیز بو صحیفه‌نین گئچمیشین‌ده ثبت اولوناجاقدیر.''",
        "missingsummary": "'''یادا سالما:''' سیز بیر دَییشیکلیک قیساسی یازمامیسینیز. «{{int:savearticle}}» دویمه‌سینی تیک‌لاسازسا، دَییشیکلیگینیز، قیسا شرح‌سیز اولاراق قئید اولوناجاق.",
        "missingcommenttext": "لوطفاً آشاغی‌دا بیر یوروم یازین.",
        "loginreqlink": "گیریش",
        "loginreqpagetext": "باشقا صحیفه‌لری گؤرمک اوچون گرک $1.",
        "accmailtitle": "رمز گؤندریلدی",
-       "accmailtext": "[[User talk:$1|$1]] اوچون بیر راست‌گله رمز یارادیلیب و $2-ه گؤندریلدی.\n\nبو یئنی حسابین رمزی، گیرندن سونرا ''[[Special:ChangePassword|رمز دَییشدیرمه]]'' صحیفه‌سیندن دَییشیله بیلر.",
+       "accmailtext": "[[User talk:$1|$1]] اوچون بیر راست‌گله رمز یارادیلیب و $2-ه گؤندریلدی.\n\nبو یئنی حسابین رمزی، گیرندن سونرا <em>[[Special:ChangePassword|رمز دَییشدیرمه]]</em> صحیفه‌سیندن دَییشیله بیلر.",
        "newarticle": "(یئنی)",
        "newarticletext": "مؤوجود اوْلمايان صحیفه‌‌يه اوْلان کئچیدی ایزله‌دینیز. \nآشاغیداکی ساحه‌‌يه مظمونونو يازاراق بۇ صحیفه‌‌نی '''سیز''' يارادا بیلرسینیز. (علاوه‌‌ معلومات اۆچون [$1 کؤمک صحیفه‌‌سینه] باخین). اگر بۇ صحیفه‌‌يه سهون گلمیسینیزسه ساده‌جه اوْلاراق براوزئرین '''گئری''' دۆيمه‌سینه وۇرون.",
        "anontalkpagetext": "''بو صحیفه قئیدیات‌دان کئچممیش و یا داخیل اولمامیش آنونیم ایستیفادچییه عایید موذاکیره صحیفه‌سی‌دیر.\nاونا گؤره بو ایستیفادچینی رقم‌لردن عبارت ایپ اونوانی ایله معین ائتمک مجبوریتیندییک.\nبئله ایپ اونوان بیر نئچه فرد طرفین‌دن ایستیفاده‌ده اولا بیلر.\nاگر سیز آنونیم ایستیفادچیسینیزسه و بو مئساژین سیزه عایید اولمادیغینی دوشونورسونوزسه، اوندا  [[Special:UserLogin/signup|قئیدیات‌دان کئچین]] و یا [[Special:UserLogin|داخی اولون]].''",
        "content-failed-to-parse": "تجزیه محتوای $2  مدل اوچون $1: $3 موفقیت اله گلمه دی",
        "invalid-content-data": "اعتبارسیز مضمون معلوماتی",
        "content-not-allowed-here": "\"$1\" مقاله‌سینه، [[$2]] صحیفه‌سینده ایجازه وئریلممیش دیر.",
-       "editwarning-warning": "بو صحیفه‌نی ترک ائتمک، دَییشدیرمه‌لرینیزی الدن وئرمگه سبب اولا بیلر. اگر گیریش ائتمیسینیز بو ایخطاری، ترجیحلرینیزین «دَییشدیرمک» بؤلوموندن، ایشدن سالا بیلرسینیز.",
+       "editwarning-warning": "بو صحیفه‌نی ترک ائتمک، دَییشدیرمه‌لرینیزی الدن وئرمگه سبب اولا بیلر. اگر گیریش ائتمیسینیز بو ایخطاری، ترجیحلرینیزین «دَییشدیرمک» بؤلوموندن، \"{{int:prefs-editing}}\"ایشدن سالا بیلرسینیز.",
        "content-model-wikitext": "ویکی‌یازی",
        "content-model-text": "ساده یازی",
        "content-model-javascript": "جاوااسکریپت",
        "currentrev": "سون نوسخه",
        "currentrev-asof": "$1 تاریخینه کیمی سون حال",
        "revisionasof": "$1 نوسخه‌سی",
-       "revision-info": "$1-ده $2-له یارادیلمیش نوسخه",
+       "revision-info": "$1- یارادیلمیش نوسخه{{GENDER:$6|$2}}$7 الیله",
        "previousrevision": "اونجه‌کی وئرسیيا",
        "nextrevision": "داها یئنی نوسخه ←",
        "currentrevisionlink": "سون نوسخه",
        "revdelete-show-file-submit": "بلی",
        "logdelete-selected": "'ژورنالین {{PLURAL:$1|سئچیلمیش قئیدی|سئچیلمیش قئیدلری}}:'",
        "revdelete-confirm": "خاهیش ائدیریک، بونو ائتمک ایستدیگینیزی، نتیجه‌لرینی آنلادیغینیزی، و بونو [[{{MediaWiki:Policy-url}}| پرینسیپ‌لره]] گؤره ائدیر اولدوغونوزو تسدیق ائدین.",
-       "revdelete-suppress-text": "ساخلاما 'یالنیز آشاغی‌داکی حال‌لار اوچون ایستیفاده ائدیلمه‌لی‌دیر:\n* اویگون‌سوز فردی معلومات\n*:' ائو اونوان‌لاری و تئلئفون نؤمره‌لری، سوسیال تهلوکه‌سیزلیک نؤمره‌لری، و س.'",
+       "revdelete-suppress-text": "ساخلاما <strong>یالنیز</strong> آشاغی‌داکی حال‌لار اوچون ایستیفاده ائدیلمه‌لی‌دیر:\n* اویگون‌سوز فردی معلومات\n*:<em> ائو اونوان‌لاری و تئلئفون نؤمره‌لری، سوسیال تهلوکه‌سیزلیک نؤمره‌لری، و س.</em>",
        "revdelete-legend": "گؤرونوش محدودیتلری قوی:",
        "revdelete-hide-text": "صحیفه‌‌نین بو وئرسیياسی‌نین متنینی گیزله",
        "revdelete-hide-image": "فایلین ایچینده‌کیلرینی گیزلت",
        "shown-title": "هر صحیفه‌ده {{PLURAL:$1|بیر|$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": "هرشئی",
        "searchrelated": "ایلگیلی",
        "searchall": "بوتون",
        "showingresults": "آشاغیدا نومره '''$2'''-دن باشلایان {{PLURAL:$1|'''بیر'''|'''$1'''}} سونوجا قدر گؤستریلیر.",
+       "search-showingresults": "{{PLURAL:$4|نتیجه لر <strong>$1</strong> از <strong>$3</strong>|نتیجه لر<strong>$1 - $2</strong> از <strong>$3</strong>}}",
        "search-nonefound": "سیزین سورونوزا اویغون نتیجه تاپیلمادی.",
        "powersearch-legend": "گلیشمیش آختاریش",
        "powersearch-ns": "آدفضالاریندا آختار",
        "recentchanges-label-minor": "بو بیر کیچیک دَییشدیرمه‌دیر",
        "recentchanges-label-bot": "بو دییشیک بیر بوت طرفیندن ائدیلیب‌دیر",
        "recentchanges-label-unpatrolled": "بو دییشیکلیک هله گؤزدن گئچیریلمه‌ییب‌دیر",
+       "recentchanges-label-plusminus": "صحیفه‌نین اؤلچوسو بایت میقداری ایله تعیین ائدیلیر",
        "recentchanges-legend-heading": "'''ایختیصارلار:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (هم‌ده [[Special:NewPages|یئنی صحیفه‌لرین لیستینه]] باخین)",
        "rcnotefrom": "آشاغیدا '''$2'''-دن ('''$1'''-ه قدر) ديَیشیکلیکلر گلیبلر.",
        "import-rootpage-nosubpage": "آد فضا سی  \"$1\" آنا باسئ ٔآلت صحیفه اوچون اجازه وئرمیر.",
        "importlogpage": "چیخاریلما گونده‌لیگی",
        "importlogpagetext": "باشقا ویکیلردن، دَییشیکلیک گئچمیشلریله بیرلیک‌ده گتیریلمیش صحیفه‌لر.",
-       "import-logentry-upload": "[[$1]]-ی فایل یوکله‌مکله گتیردی",
        "import-logentry-upload-detail": "{{PLURAL:$1|بیر|$1}} نوسخه",
-       "import-logentry-interwiki": "$1-ی ویکی‌آراسی ائتدی",
        "import-logentry-interwiki-detail": "$2-دن {{PLURAL:$1|بیر|$1}} نوسخه",
        "javascripttest": "جاوااسکریپت تِستی",
        "javascripttest-pagetext-noframework": "بو صحیفه، جاوااسکریپت تِستلرینی ایشلدمگه ساخلانیلیب‌دیر.",
        "tooltip-pt-mycontris": "سیزین چالیشمالارینیزین لیستی",
        "tooltip-pt-login": "گیریش ائتمه‌یینیز توصیه اولونور؛ اما گرکلی دئییل",
        "tooltip-pt-logout": "چیخیش",
+       "tooltip-pt-createaccount": "سیزدن دعوت اولونور ایشلدن حسابی آچیب و گیریش ائده سیز،آنجاق حساب یارتماق اختیاری دیر.",
        "tooltip-ca-talk": "ایچینده‌کیلره گؤره دانیشیق",
        "tooltip-ca-edit": "سیز بو صحیفه‌نی دَییشدیره بیلرسینیز. لوطفاً قئید ائتمه‌دن اونجه اؤن‌گؤستریش دویگه‌سینی ایشلدین",
        "tooltip-ca-addsection": "یئنی بؤلوم یارات",
        "spam_reverting": "$1-ه باغلانتیسی اولمایان سون نوسخه‌یه قایتاریلیر",
        "spam_blanking": "$1-ه باغلانتیلاری اولان بوتون نوسخه‌لر، بوشادیلیر",
        "spam_deleting": "$1-ه باغلانتیلاری اولان بوتون نوسخه‌لر، سیلینیر",
+       "simpleantispam-label": "ضید هرز یازما بررسلیغی.\nبو قیسمتی'''دولدورمایین'''!",
        "pageinfo-title": "«$1» اوچون بیلگیلر",
        "pageinfo-not-current": "تأسفله بو بیلگیلری اسکی نوسخه‌لره وئرمک اولانماز بیر ایش‌دیر.",
        "pageinfo-header-basic": "اساس معلومات‌لار",
        "svg-long-desc": "SVG فایلی، $1 × $2 پیکسئل، فایلین اؤلچوسو: $3",
        "svg-long-desc-animated": "فایل اس‌وی‌جی حرکت ائدن، ابعادی <span dir=\"ltr\">$1 × $2</span> پیکسل، فایل اولچوسو: $3",
        "svg-long-error": "اعتبارسیز سوگ فایل: $1",
-       "show-big-image": "یوکسک کیفیتلی",
+       "show-big-image": "فایلین اصلی",
        "show-big-image-preview": "سیناق گؤستریشی اؤلچوسو: $1.",
        "show-big-image-other": "دیگر {{PLURAL:$2|نتیج|نتیجه‌لر}}: $1.",
        "show-big-image-size": "$1 × $2 پیکسئل",
        "version-parser-function-hooks": "آیریشدیران فونکسیا چنگل‌لری",
        "version-hook-name": "چنگه‌لین آدی",
        "version-hook-subscribedby": "طرفیندن گیریش‌‌میش",
-       "version-version": "(نسخه $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[آد سیز]",
        "version-license": "مِدیاویکی لیسانسی",
        "version-ext-license": "لیسانس",
        "logentry-rights-rights": "$1، $3-ین قروپ عوضولوگونو $4-دن $5-ه {{GENDER:$2|دَییشدیردی}}",
        "logentry-rights-rights-legacy": "$1، $3-ین قروپ عوضولوگونو {{GENDER:$2|دَییشدیردی}}",
        "logentry-rights-autopromote": "$1-ین مقامی اوتوماتیک $4-دن $5-ه {{GENDER:$2|آرتیریلدی}}",
+       "logentry-upload-upload": "$1 $3 را {{GENDER:$2|یوکلندیردی}}",
        "rightsnone": "(هئچ)",
+       "feedback-adding": "صحیفه‌یه گئری-بیلدیریم آرتیریلیر...",
+       "feedback-bugcheck": "گؤزل! فقط لوطفاً باخین او [$1 تانینمیش خطالار]دان اولماسین.",
+       "feedback-bugnew": "یوخلادیم. یئنی بیر خطا گؤندر",
        "feedback-bugornote": "بیر تکنیکی خطانی شرح وئرمگه آماده اولساز، لوطفاً [$1 بیر باگ بیلدیرین].\nاو اولماسا، بو آشاغیداکی ساده فورم‌دان ایستیفاده ائده بیلرسینیز. سیزین باخیشینیز، ایستیفاده‌چی آدینیزلا، «[$3 $2]» صحیفه‌سینه آرتیریلاجاق‌دیر.",
-       "feedback-subject": "قونو:",
-       "feedback-message": "مئساژ:",
        "feedback-cancel": "لغو ائت",
-       "feedback-submit": "گئری-بیلدیریمی یول‌لا",
-       "feedback-adding": "صحیفه‌یه گئری-بیلدیریم آرتیریلیر...",
+       "feedback-close": "اولدو",
        "feedback-error1": "خطا: API-دان تانینمامیش نتیجه",
        "feedback-error2": "خطا: دَییشدیرمه باشاری‌سیز اولدو",
        "feedback-error3": "خطا: API-دان جاواب گلمه‌دی",
+       "feedback-message": "مئساژ:",
+       "feedback-subject": "قونو:",
+       "feedback-submit": "گؤندر",
        "feedback-thanks": "تشکورلر! سیزین گئری-بیلدیریمینیز «[$2 $1]» صحیفه‌سینه گؤندریلدی.",
-       "feedback-close": "اولدو",
-       "feedback-bugcheck": "گؤزل! فقط لوطفاً باخین او [$1 تانینمیش خطالار]دان اولماسین.",
-       "feedback-bugnew": "یوخلادیم. یئنی بیر خطا گؤندر",
        "searchsuggest-search": "آختار",
        "searchsuggest-containing": "ساخلانیلیر...",
        "api-error-badaccess-groups": "سیزین بو ویکی‌یه فایل یوکله‌مک ایجازه‌نیز یوخدور.",
        "mediastatistics-header-bitmap": "بیت‌مپ گؤرونتولر",
        "mediastatistics-header-audio": "سس",
        "mediastatistics-header-video": "ویدیولار",
-       "mediastatistics-header-office": "دفتر"
+       "mediastatistics-header-office": "دفتر",
+       "special-characters-group-latin": "لاتین",
+       "special-characters-group-latinextended": "لاتین گئنیشلندیریلمیش",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "سیمبول لار",
+       "special-characters-group-greek": "یونانی",
+       "special-characters-group-cyrillic": "کیریل",
+       "special-characters-group-arabic": "عربجه",
+       "special-characters-group-arabicextended": "گئنیشلندیریلمیش عربجه",
+       "special-characters-group-persian": "فارسجا",
+       "special-characters-group-hebrew": "عبرجه",
+       "special-characters-group-bangla": "بنگالجه",
+       "special-characters-group-tamil": "تامیلجه",
+       "special-characters-group-telugu": "تالوگوجه",
+       "special-characters-group-sinhala": "سینهالجه",
+       "special-characters-group-gujarati": "گجراتجه",
+       "special-characters-group-devanagari": "دیواناگرى",
+       "special-characters-group-thai": "تایلندجه",
+       "special-characters-group-lao": "لائو",
+       "special-characters-group-khmer": "خمر",
+       "special-characters-title-endash": "آرالیق خطی دی",
+       "special-characters-title-emdash": "آرالیق خطی چکیلیب",
+       "special-characters-title-minus": "منفی علامتی"
 }
index 1808272..a748209 100644 (file)
        "delete-toobig": "Был биттең үҙгәртеүҙәр тарихы бик оҙон, $1 {{PLURAL:$1|өлгөнән}} күберәк.\n{{SITENAME}} проектының эшмәкәрлеге боҙолмауы маҡсатында бындай биттәрҙе юйыу тыйылған.",
        "delete-warning-toobig": "Был биттең үҙгәртеүҙәр тарихы бик оҙон, $1 {{PLURAL:$1|өлгөнән}} күберәк.\nБитте юйыу {{SITENAME}} проектының эшмәкәрлеге боҙолоуына килтереүе мөмкин, һаҡлыҡ менән эш итегеҙ.",
        "rollback": "Үҙгәртеүҙәрҙе кире ҡайтарырға",
-       "rollback_short": "Кире ҡайтарырға",
        "rollbacklink": "кире",
        "rollbacklinkcount": "$1 {{PLURAL:$1|1=төҙәтеүҙе|төҙәтеүҙе}} кире алырға",
        "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|1=төҙәтеүҙән|төҙәтеүҙән}} күберәк кире алырға",
        "import-logentry-interwiki": "$1 битен вики проекттары-ара тейәгән",
        "import-logentry-interwiki-detail": "$2 өлгөнән $1 {{PLURAL:$1|1=өлгө|өлгө}}",
        "javascripttest": "\nJavaScript тикшереү",
-       "javascripttest-title": "$1 тикшеренеү үткәрелә",
        "javascripttest-pagetext-noframework": "Был бит JavaScript тикшеренеүҙәре үткәреү өсөн  резервланған.",
        "javascripttest-pagetext-unknownframework": "Билдәһеҙ тикшеренеүҙәр мөхитнамәһе \"$1\".",
        "javascripttest-pagetext-frameworks": "Зинһар өсөн киләһе тикшеренеүҙәр мөхитнамәһенең береһен һайлап алығыҙ: $1",
        "javascripttest-pagetext-skins": "Һынауҙы башлау өсөн тышса һыйлағыҙ.",
        "javascripttest-qunit-intro": "mediawiki.org адресы буйынса ҡарағыҙ [$1 тест үткәреү документацияһы].",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit өсөн һынауҙар йыйлмаһы.",
        "tooltip-pt-userpage": "Ҡулланыусы битегеҙ",
        "tooltip-pt-anonuserpage": "IP адресығыҙ өсөн ҡатнашыусы бите",
        "tooltip-pt-mytalk": "Фекерләшеү битегеҙ",
        "version-parser-function-hooks": "Уҡыу ҡоралдары функцияларын эләктереп алыусылар",
        "version-hook-name": "Эләктереп алыусы исеме",
        "version-hook-subscribedby": "Яҙҙырылған",
-       "version-version": "($1 өлгөһө)",
+       "version-version": "($1)",
        "version-license": "Рөхсәтнамә",
        "version-poweredby-credits": "Был вики проект '''[https://www.mediawiki.org/ MediaWiki]''' нигеҙендә эшләй, copyright © 2001-$1 $2.",
        "version-poweredby-others": "башҡалар",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|}} автоматик рәүештә {{GENDER:$2|}} $4 урынына $5 ителде.",
        "rightsnone": "(юҡ)",
        "revdelete-summary": "үҙгәртеүҙәр тасуирламаһы",
+       "feedback-adding": "Биткә кире белдереү өҫтәлә",
+       "feedback-bugcheck": "Шәп! Тик [$1 билдәле хаталар] исемлегендә оҡшаш белдереүҙең булмауына иғтибар итегеҙ.",
+       "feedback-bugnew": "Тикшерҙем. Яңы хата тураһында белдерергә",
        "feedback-bugornote": "Әгәр Һеҙ техник проблеманы ентекле рәүештә аңлатырға теләһәгеҙ, зинһар, [$1 хата тураһында белдерегеҙ].\nБашҡа осраҡта, ошо ябай форманы ҡуллана алаһығыҙ. Комментарийығыҙ «[$3 $2]» битенә ҡулланыусы исемегеҙ һәм браузер мәғлүмәте менән өҫтәләсәк.",
-       "feedback-subject": "Тема:",
-       "feedback-message": "Хәбәр:",
        "feedback-cancel": "Кире алырға",
-       "feedback-submit": "Кире белдереү ебәрергә",
-       "feedback-adding": "Биткә кире белдереү өҫтәлә",
+       "feedback-close": "Әҙер",
        "feedback-error1": "Хата: API-нан беленмәгән хата",
        "feedback-error2": "Хата: Мөхәррирләү хатаһы",
        "feedback-error3": "Хата: API-нан яуап юҡ",
+       "feedback-message": "Хәбәр:",
+       "feedback-subject": "Тема:",
+       "feedback-submit": "Кире белдереү ебәрергә",
        "feedback-thanks": "Рәхмәт! Һеҙҙең фекерегеҙ «[$2 $1]» битенә өҫтәлде.",
-       "feedback-close": "Әҙер",
-       "feedback-bugcheck": "Шәп! Тик [$1 билдәле хаталар] исемлегендә оҡшаш белдереүҙең булмауына иғтибар итегеҙ.",
-       "feedback-bugnew": "Тикшерҙем. Яңы хата тураһында белдерергә",
        "searchsuggest-search": "Эҙләү",
        "searchsuggest-containing": "эстәлегендә...",
        "api-error-badaccess-groups": "Һеҙгә был викиға файлдар күсереү рөхсәт ителмәй",
index daada20..8bfc90e 100644 (file)
        "rcnotefrom": "Untn san de Endarunga seit  '''$2''' (bis za '''$1''' Ozoagn).",
        "rclistfrom": "Nua Endarunga seit $3 $2 zoagn",
        "rcshowhideminor": "Kloane Endarunga $1",
+       "rcshowhideminor-hide": "Ausblendn",
        "rcshowhidebots": "Bots $1",
        "rcshowhideliu": "Eigloggte Nutza $1",
+       "rcshowhideliu-hide": "Ausblendn",
        "rcshowhideanons": "Anonyme Nutza $1",
+       "rcshowhideanons-hide": "Ausblendn",
        "rcshowhidepatr": "Kontrolliade Endarunga $1",
        "rcshowhidemine": "Meine Beidreg $1",
+       "rcshowhidemine-hide": "Ausblendn",
        "rclinks": "De letztn Endarunga vo de letztn $2 Dog zoagn<br />$3",
        "diff": "Untaschied",
        "hist": "Versiona",
        "watchlisttools-edit": "normal beorbatn",
        "watchlisttools-raw": "Im Roh-Listnformat beorbatn",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussión]])",
-       "unknown_extension_tag": "Unbekaunnter Extension-Tag „$1“",
        "duplicate-defaultsort": "Obocht: Da Sortiasschlossl \"$2\" ibaschreibt in friaan Schlissl \"$1\".",
        "version": "Versión",
        "version-extensions": "Installierde Daweiterrungen",
        "version-parser-function-hooks": "Parserfunkziónen",
        "version-hook-name": "Schnidstönnaum",
        "version-hook-subscribedby": "Aufruaff voh",
-       "version-version": "(Versión $1)",
+       "version-version": "($1)",
        "version-license": "Lizenz",
        "version-poweredby-credits": "Dé Nétzseiten braucht '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
        "version-poweredby-others": "åndre",
index 59d1773..9f05621 100644 (file)
@@ -10,7 +10,8 @@
                        "아라",
                        "RigiMahnoor",
                        "Oldstoneage",
-                       "Baloch Afghanistan"
+                       "Baloch Afghanistan",
+                       "Mjbmr"
                ]
        },
        "tog-underline": ":لینکانآ خط کش",
        "prefs-custom-js": "رسمی جی‌اس",
        "prefs-common-css-js": "یک پیمین سی‌اس‌اس/جاوااسکریپٹ پر پهکین اسکین:",
        "prefs-reset-intro": "شما توانت چه ای  صفحه په واترینگ تنظیمات وت په پیش‌فرض استفاده کنیت. ای کار بازگشت‌ناپذیر انت.",
-       "prefs-emailconfirm-label": "تایید کتن پست الکترونیک:",
+       "prefs-emailconfirm-label": "تایید کتن ایمیل:",
        "youremail": "ایمیل:",
        "username": "{{GENDER:$1|یوزرنام}}:",
        "prefs-memberingroups": "{{GENDER:$2|عضو}} {{PLURAL:$1|گروپ|گروپ}}:",
        "emailccsubject": "کپی چه شمی کوله په $1: $2",
        "emailsent": "ایمیل دیم دهگ بوت",
        "emailsenttext": "شمی کوله ایمیل دیم دهگ بوت.",
-       "emailuserfooter": "این نامه الکترونیکی گون استفاده چه ویژگی «پست الکترونیکی به کاربر» {{SITENAME}} گون $1 په $2 دیم دهگ بوتت.",
+       "emailuserfooter": "این ایمیل گون استفاده چه ویژگی «ایمیل کاربر» {{SITENAME}} گون $1 په $2 دیم دهگ بوتت.",
        "watchlist": "منی لیست چارگ",
        "mywatchlist": "منی لیست چارگ",
        "nowatchlist": "شما را هچ چیزی ته وتی لیست چارگ نیست.",
        "delete-toobig": "صفحهء یک مزنین تاریح اصلاحی هست گیشتر چه $1 {{PLURAL:$1|بازبینی|بازبینی}}.\nحذف چوشین صفحات په خاظر جلو گر چه ناگهانی اتفاق ته سایت {{SITENAME}} ممنوع بوتت.",
        "delete-warning-toobig": "ای صفحه  مزنین تاریح اصلاح هست، گیش چه  $1 {{PLURAL:$1|بازبینی|بازبینی}}.\nحذف آی شاید کار دیتابیس  {{SITENAME}} قطع کنت؛\nگون اخطار پیش روت.",
        "rollback": "پشت ترگ اصلاحات",
-       "rollback_short": "پشتررگ",
        "rollbacklink": "عقب ترگ",
        "rollbackfailed": "پشتررگ پروشت",
        "cantrollback": "نه تونیت اصلاح برگردینیت؛\nآهری شرکت کننده فقط نویسوک ای صفحه انت.",
        "import-invalid-interwiki": "چه مشخص بیتگین ویکی وارد کنگ نبیتن",
        "importlogpage": "ورودان وارد کن",
        "importlogpagetext": "ورود مدیریتی صفحات گون تاریح صلاح چه دگه ویکی آن.",
-       "import-logentry-upload": "وارد بوت [[$1]]  گون فایل آپلود بوتگین",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|بازبینی|بازبینی ان}}",
-       "import-logentry-interwiki": "بین ویکی بوت $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|بازبینی|بازبینی ان}} چه $2",
        "tooltip-pt-userpage": "شمی صفحات",
        "tooltip-pt-anonuserpage": "صفحه کاربر په آی پی که شما هنو اصلاح کنیت په داب",
        "version-parser-function-hooks": "عمل گر تجزیه کنوک گیر کت",
        "version-hook-name": "نام گیر",
        "version-hook-subscribedby": "اشتراک بیت گون",
-       "version-version": "(نسخه $1)",
+       "version-version": "($1)",
        "version-license": "لیسانس",
        "version-software": "نصبین برنامه",
        "version-software-product": "محصول",
        "expand_templates_generate_xml": "پیش دار درچک تجزیه XMLء",
        "expand_templates_preview": "بازبین",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (پعال)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''غیر پعال''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''غیر پعال''')",
+       "special-characters-group-latin": "لاتین",
+       "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": "خمر"
 }
index 4041ee2..e5a69d9 100644 (file)
@@ -8,7 +8,8 @@
                        "Shirayuki",
                        "Steven*fung",
                        "Urhixidur",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Linyahan an kilyawan:",
        "import-rootpage-nosubpage": "Espasyong-ngaran \"$1\" kan ugat na pahina dae minatugot nin pan-irarom na mga pahina.",
        "importlogpage": "Usip nin pagpalaog",
        "importlogpagetext": "Administratibong mga importadong pahina na igwang historiya nin pagliliwat gikan sa ibang wikis.",
-       "import-logentry-upload": "pigpadara an [[$1]] kan pagkarga nin ''file''",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|rebisyon|mga rebisyon}}",
-       "import-logentry-interwiki": "na-transwiki an $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebisyon|mga rebisyon}} gikan sa $2",
        "javascripttest": "Testing sa JavaScript",
        "javascripttest-pagetext-noframework": "An pahinang ini reserbado para sa pagpapadalagan kan mga pagtesting sa JavaScript.",
        "version-parser-function-hooks": "Mga panpunksyong pangawil kan Parser",
        "version-hook-name": "Ngaran kan pangawil",
        "version-hook-subscribedby": "Pinaghaguhot ni",
-       "version-version": "(Bersyon na $1)",
+       "version-version": "($1)",
        "version-license": "Lisensiya kan MediaWiki",
        "version-ext-license": "Lisensiya",
        "version-ext-colheader-name": "Ekstensyon",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|nagliwat}} kan pangrupong pagkamiyembro para sa $3",
        "logentry-rights-autopromote": "$1 awtomatikong {{GENDER:$2|pinagpalangkaw}} gikan sa $4 pasiring sa $5",
        "rightsnone": "(mayô)",
+       "feedback-adding": "Idugang an balik-simbag sa pahina...",
+       "feedback-bugcheck": "Marhay! I-tsek sana baya na ini bakong saro sa mga [$1 bistadong kuto].",
+       "feedback-bugnew": "Pig-tsek ko. Pakireport kan sarong baguhong kuto",
        "feedback-bugornote": "Kun ika andam na iladawan an sarong teknikal na problema na igwang detalye tabi [$1 ipaaram an kuto].\nKun bako man, ika makakagamit nin sayon na porma sa ibaba. An saimong komento idudugang sa pahina \"[$3 $2]\", kaiba an saimong paragamit na ngaran.",
-       "feedback-subject": "Subheto",
-       "feedback-message": "An Mensahe:",
        "feedback-cancel": "Kanselaron",
-       "feedback-submit": "Isumite an balik-simbag",
-       "feedback-adding": "Idugang an balik-simbag sa pahina...",
+       "feedback-close": "Nagibo na",
        "feedback-error1": "Kasalaan: Bakong bistadong resulta gikan sa API",
        "feedback-error2": "Kasalaan: An pagliwat nagpalya",
        "feedback-error3": "Kasalaan: Mayong kasimbagan gikan sa API",
+       "feedback-message": "An Mensahe:",
+       "feedback-subject": "Subheto",
+       "feedback-submit": "Isumite",
        "feedback-thanks": "Salamat! An saimong balik-simbag pinagposte sa pahina \"[$2 $1]\".",
-       "feedback-close": "Nagibo na",
-       "feedback-bugcheck": "Marhay! I-tsek sana baya na ini bakong saro sa mga [$1 bistadong kuto].",
-       "feedback-bugnew": "Pig-tsek ko. Pakireport kan sarong baguhong kuto",
        "searchsuggest-search": "Hanapa baya",
        "searchsuggest-containing": "may laog na...",
        "api-error-badaccess-groups": "Ika daeng permiso na magkarga nin mga sagunson sa wiking ini.",
index bd38b9f..001757b 100644 (file)
        "disclaimers": "Адмова ад адказнасьці",
        "disclaimerpage": "Project:Адмова ад адказнасьці",
        "edithelp": "Дапамога ў рэдагаваньні",
+       "helppage-top-gethelp": "Дапамога",
        "mainpage": "Галоўная старонка",
        "mainpage-description": "Галоўная старонка",
        "policy-url": "Project:Правілы",
        "readonly_lag": "База зьвестак была аўтаматычна заблякаваная да выкананьня рэплікацыі галоўнай базы зьвестак з другаснымі",
        "internalerror": "Унутраная памылка",
        "internalerror_info": "Унутраная памылка: $1",
+       "internalerror-fatal-exception": "Фатальнае выключэньне тыпу «$1»",
        "filecopyerror": "Немагчыма cкапіяваць файл «$1» у «$2».",
        "filerenameerror": "Немагчыма перайменаваць файл «$1» у «$2».",
        "filedeleteerror": "Немагчыма выдаліць файл «$1».",
        "userlogin-helplink2": "Дапамога з уваходам у сыстэму",
        "userlogin-loggedin": "Вы ўжо ўвайшлі як {{GENDER:$1|$1}}.\nДля ўваходу пад іншым удзельнікам скарыстайцеся формай унізе.",
        "userlogin-createanother": "Стварыць іншы рахунак",
-       "createacct-emailrequired": "E-mail адрас",
-       "createacct-emailoptional": "E-mail адрас (неабавязкова)",
-       "createacct-email-ph": "Увядзіце ваш e-mail адрас",
-       "createacct-another-email-ph": "Увядзіце адрас e-mail",
-       "createaccountmail": "Стварыць часовы адвольны пароль і даслаць яго на e-mail адрас, пазначаны ніжэй",
+       "createacct-emailrequired": "Адрас электроннай пошты",
+       "createacct-emailoptional": "Адрас электроннай пошты (неабавязкова)",
+       "createacct-email-ph": "Увядзіце ваш адрас электроннай пошты",
+       "createacct-another-email-ph": "Увядзіце адрас электроннай пошты",
+       "createaccountmail": "Стварыць часовы адвольны пароль і даслаць яго на пазначаны адрас электроннай пошты",
        "createacct-realname": "Сапраўднае імя (неабавязкова)",
        "createaccountreason": "Прычына:",
        "createacct-reason": "Прычына",
        "createacct-benefit-heading": "{{SITENAME}} створаная людзьмі, такімі як вы.",
        "createacct-benefit-body1": "{{PLURAL:$1|праўка|праўкі|правак}}",
        "createacct-benefit-body2": "{{PLURAL:$1|старонка|старонкі|старонак}}",
-       "createacct-benefit-body3": "{{PLURAL:$1|удзельнік|удзельніка|удзельнікаў}} за апошні час",
+       "createacct-benefit-body3": "{{PLURAL:$1|удзельнік|удзельнікі|удзельнікаў}} за апошні час",
        "badretype": "Уведзеныя Вамі паролі не супадаюць.",
        "userexists": "Уведзенае Вамі імя ўдзельніка ўжо выкарыстоўваецца кімсьці іншым. \nКалі ласка, выберыце іншае імя.",
        "loginerror": "Памылка ўваходу",
        "createacct-error": "Памылка стварэньня рахунку",
        "createaccounterror": "Немагчыма стварыць рахунак: $1",
-       "nocookiesnew": "Рахунак быў створаны, але ў сыстэму Вы не ўвайшлі.\n{{SITENAME}} выкарыстоўвае cookie для ўваходу ў сыстэму.\nУ Вашым браўзэры cookies адключаныя.\nКалі ласка, дазвольце іх, а потым ўвайдзіце з новым іменем удзельніка і паролем.",
-       "nocookieslogin": "{{SITENAME}} выкарыстоўвае cookie для ўваходу ў сыстэму.\nУ Вашым браўзэры cookie адключаныя.\nКалі ласка, уключыце іх і паспрабуйце яшчэ раз.",
-       "nocookiesfornew": "Рахунак удзельніка ня быў створаны, таму што мы не змаглі пацьвердзіць яго крыніцу. \nУпэўніце, што ў Вас уключаныя закладкі (cookies), перазагрузіце гэтую старонку і паспрабуйце зноў.",
+       "nocookiesnew": "Рахунак быў створаны, але ў сыстэму Вы не ўвайшлі.\n{{SITENAME}} выкарыстоўвае файлы-кукі для ўваходу ў сыстэму.\nУ Вашым браўзэры файлы-кукі адключаныя.\nКалі ласка, дазвольце іх, а потым ўвайдзіце з новым іменем удзельніка і паролем.",
+       "nocookieslogin": "{{SITENAME}} выкарыстоўвае файлы-кукі для ўваходу ў сыстэму.\nУ Вашым браўзэры файлы-кукі адключаныя.\nКалі ласка, уключыце іх і паспрабуйце яшчэ раз.",
+       "nocookiesfornew": "Рахунак удзельніка ня быў створаны, таму што мы не змаглі пацьвердзіць яго крыніцу. \nУпэўніцеся, што ў Вас уключаныя файлы-кукі, перазагрузіце гэтую старонку і паспрабуйце зноў.",
        "noname": "Вы пазначылі няслушнае імя ўдзельніка.",
        "loginsuccesstitle": "Пасьпяховы ўваход у сыстэму",
-       "loginsuccess": "'''Цяпер Вы ўвайшлі ў {{GRAMMAR:вінавальны|{{SITENAME}}}} як «$1».'''",
+       "loginsuccess": "<strong>Цяпер Вы ўвайшлі ў {{GRAMMAR:вінавальны|{{SITENAME}}}} як «$1».</strong>",
        "nosuchuser": "Удзельніка «$1» не існуе.\nВялікія і малыя літары адрозьніваюцца ў імёнах удзельнікаў.\nПраверце напісаньне альбо [[Special:UserLogin/signup|стварыце новы рахунак]].",
        "nosuchusershort": "Удзельніка зь іменем «$1» не існуе. Праверце напісаньне.",
        "nouserspecified": "Вы мусіце пазначыць імя ўдзельніка.",
        "wrongpassword": "Уведзены няслушны пароль. Калі ласка, паспрабуйце яшчэ раз.",
        "wrongpasswordempty": "Быў уведзены пусты пароль. Калі ласка, паспрабуйце яшчэ раз.",
        "passwordtooshort": "Паролі павінны ўтрымліваць ня менш за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.",
+       "passwordtoolong": "Паролі ня могуць быць даўжэй за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.",
        "password-name-match": "Ваш пароль павінен адрозьнівацца ад Вашага імя ўдзельніка.",
-       "password-login-forbidden": "Ð\92Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82анÑ\8cне Ð³Ñ\8dÑ\82ага Ñ\96мÑ\8f Ñ\9eдзелÑ\8cнÑ\96ка Ñ\96 Ð¿Ð°Ñ\80олÑ\8f было забароненае.",
+       "password-login-forbidden": "Ð\92Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82анÑ\8cне Ð³Ñ\8dÑ\82ага Ñ\96мÑ\8f Ñ\9eдзелÑ\8cнÑ\96ка Ñ\96 Ð¿Ð°Ñ\80олÑ\8e было забароненае.",
        "mailmypassword": "Скінуць пароль",
        "passwordremindertitle": "Новы часовы пароль для {{GRAMMAR:родны|{{SITENAME}}}}",
        "passwordremindertext": "Нехта (магчыма Вы, з IP-адрасу $1) запытаў нас даслаць новы пароль для {{GRAMMAR:родны|{{SITENAME}}}} ($4). Для ўдзельніка «$2» быў створаны часовы пароль і ён цяпер «$3». Калі гэта была Вашая ініцыятыва, Вам трэба ўвайсьці ў сыстэму і адразу зьмяніць пароль. Тэрмін дзеяньня Вашага часовага паролю — $5 {{PLURAL:$5|дзень|дні|дзён}}.\n\nКалі гэты запыт адправіў нехта іншы, альбо Вы ўзгадалі свой пароль і ўжо не жадаеце яго зьмяніць, Вы можаце праігнараваць гэты ліст і працягваць карыстацца старым паролем.",
        "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}}|адміністратараў]], каб абмеркаваць блякаваньне. Заўважце, што Вы ня зможаце ўжыць магчымасьць «даслаць ліст па электроннай пошце», пакуль не пазначыце сапраўдны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах]], і калі гэта Вам не было забаронена.\nВаш IP-адрас — $3, ідэнтыфікатар блякаваньня — #$5.\nКалі ласка, улучайце ўсю вышэйпададзеную інфармацыю ва ўсе запыты, што Вы будзеце рабіць.",
        "autoblockedtext": "Ваш IP-адрас быў аўтаматычна заблякаваны, таму што ён ужываўся іншым удзельнікам, які быў заблякаваны $1.\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Калі ласка, улучайце ўсю вышэйпададзеную інфармацыю ва ўсе запыты, што Вы будзеце рабіць.",
        "notextmatches": "Супадзеньні ў тэкстах старонак ня знойдзеныя",
        "prevn": "{{PLURAL:$1|папярэдняя|папярэднія|папярэднія}} $1",
        "nextn": "{{PLURAL:$1|наступная|наступныя|наступныя}} $1",
+       "prev-page": "папярэдняя старонка",
+       "next-page": "наступная старонка",
        "prevn-title": "{{PLURAL:$1|Папярэдні $1 вынік|Папярэднія $1 вынікі|Папярэднія $1 вынікаў}}",
        "nextn-title": "{{PLURAL:$1|Наступны $1 вынік|Наступныя $1 вынікі|Наступныя $1 вынікаў}}",
        "shown-title": "Паказваць $1 {{PLURAL:$1|вынік|вынікі|вынікаў}} на старонцы",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}]",
        "rc_categories": "Абмежаваць катэгорыямі (разьдзяляйце знакам «|»)",
        "rc_categories_any": "Усе",
-       "rc-change-size-new": "$1 {{PLURAL:$1|байт|байта|байтаў}} пасьля зьмены",
+       "rc-change-size-new": "$1 {{PLURAL:$1|байт|байты|байтаў}} пасьля зьмены",
        "newsectionsummary": "/* $1 */ новая сэкцыя",
        "rc-enhanced-expand": "Паказаць падрабязнасьці",
        "rc-enhanced-hide": "Схаваць падрабязнасьці",
        "unusedimages": "Файлы, якія не выкарыстоўваюцца",
        "wantedcategories": "Запатрабаваныя катэгорыі",
        "wantedpages": "Запатрабаваныя старонкі",
+       "wantedpages-summary": "Сьпіс няісных старонак з найбольшай колькасьцю спасылак на іх, за выключэньнем старонак, на якія спасылаюцца толькі старонкі-перанакіраваньні. Дзеля сьпісу няісных старонак, на якія спасылаюцца перанакіраваньні, глядзіце [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Няслушная назва сярод вынікаў: $1",
        "wantedfiles": "Запатрабаваныя файлы",
        "wantedfiletext-cat": "Наступныя файлы выкарыстоўваюцца, але іх няма. Файлы са зьнешніх сховішчаў могуць знаходзіцца ў сьпісе без уліку іх існаваньня. Любыя такія няслушныя ўваходжаньні будуць <del>выкрасьленыя</del>. Дадаткова, старонкі, якія ўбудоўваюць неіснуючыя файлы прыведзеныя на [[:$1]].",
        "emailccsubject": "Копія Вашага ліста да $1: $2",
        "emailsent": "Ліст адасланы",
        "emailsenttext": "Ваш ліст быў адасланы.",
-       "emailuserfooter": "Гэты ліст быў дасланы ўдзельнікам $1 да {{GENDER:$2|ўдзельніка|ўдзельніцы}} $2 з дапамогай функцыі «Даслаць ліст» {{GRAMMAR:родны|{{SITENAME}}}}.",
+       "emailuserfooter": "Гэты ліст быў дасланы {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $1 да {{GENDER:$2|ўдзельніка|ўдзельніцы}} $2 з дапамогай функцыі «{{int:emailpage}}» {{GRAMMAR:родны|{{SITENAME}}}}.",
        "usermessage-summary": "Паведамленьне пра выхад з сыстэмы.",
        "usermessage-editor": "Дастаўка сыстэмных паведамленьняў",
        "watchlist": "Сьпіс назіраньня",
        "thumbnail_image-missing": "Верагодна няма файла $1",
        "thumbnail_image-failure-limit": "Было зроблена зашмат няўдалых спробаў ($1 ці болей) сфармаваць гэтую мініятуру. Калі ласка, паспрабуйце пазьней.",
        "import": "Імпартаваць старонкі",
-       "importinterwiki": "Імпартаваньне зь іншых вікі",
+       "importinterwiki": "Імпартаваньне зь іншай вікі",
        "import-interwiki-text": "Абярыце вікі і назву старонкі для імпартаваньня.\nДаты зьменаў і імёны аўтараў будуць захаваныя.\nУсе дзеяньні імпартаваньня паміж вікі запісваюцца ў [[Special:Log/import|журнал імпартаваньняў]].",
        "import-interwiki-sourcewiki": "Крынічная вікі:",
        "import-interwiki-sourcepage": "Крынічная старонка:",
        "importcantopen": "Немагчыма адкрыць файл імпарту",
        "importbadinterwiki": "Няслушная спасылка на іншую моўную вэрсію",
        "importsuccess": "Імпартаваньне скончанае!",
-       "importnosources": "Ð\9aÑ\80Ñ\8bнÑ\96Ñ\86Ñ\8b Ñ\96мпаÑ\80Ñ\82Ñ\83 Ð¿Ð°Ð¼Ñ\96ж Ð²Ñ\96кÑ\96 не былі вызначаныя і наўпроставая загрузка гісторыі адключаная.",
+       "importnosources": "Ð\92Ñ\96кÑ\96 Ð´Ð»Ñ\8f Ñ\96мпаÑ\80Ñ\82Ñ\83 не былі вызначаныя і наўпроставая загрузка гісторыі адключаная.",
        "importnofile": "Файл для імпартаваньня ня быў загружаны.",
        "importuploaderrorsize": "Не атрымалася загрузіць файл імпартаваньня.\nПамер файла болей за дазволены для загрузкі.",
        "importuploaderrorpartial": "Не атрымалася загрузіць файл імпартаваньня.\nЁн быў загружаны толькі часткова.",
        "import-rootpage-nosubpage": "Падстаронкі ў прасторы назваў «$1» карнявой старонкі не дазволеныя.",
        "importlogpage": "Журнал імпартаваньняў",
        "importlogpagetext": "Імпартаваньне адміністратарамі старонак з гісторыяй зьменаў зь іншых вікі.",
-       "import-logentry-upload": "імпартавана [[$1]] праз загрузку файла",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|вэрсія імпартаваная|вэрсіі імпартаваныя|вэрсіяў імпартаваныя}}",
-       "import-logentry-interwiki": "імпартавана зь іншай вікі $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|вэрсія імпартаваная|вэрсіі імпартаваныя|вэрсіяў імпартаваныя}} з $2",
        "javascripttest": "Тэставаньне JavaScript",
        "javascripttest-pagetext-noframework": "Гэтая старонка трымаецца для правядзеньня тэстаў JavaScript.",
        "version-parser-function-hooks": "Перахопнікі функцыяў парсэра",
        "version-hook-name": "Назва працэдуры-перахопніка",
        "version-hook-subscribedby": "Падпісаны на",
-       "version-version": "(Вэрсія $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[бяз назвы]",
        "version-svn-revision": "(r$2)",
        "version-license": "Ліцэнзія MediaWiki",
        "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-no-name": "Вы мусіце пазначыць назву меткі.",
+       "tags-create-invalid-chars": "Назвы метак ня мусяць утрымліваць коскі (<code>,</code>) або сымбалі касых рысаў (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Назвы метак ня мусяць утрымліваць сымбалі, якія нельга ўжываць у назвах старонак.",
+       "tags-create-already-exists": "Метка «$1» ужо існуе.",
        "comparepages": "Параўнаньне старонак",
        "compare-page1": "Старонка 1",
        "compare-page2": "Старонка 2",
        "logentry-upload-revert": "$1 {{GENDER:$2|загрузіў|загрузіла}} $3",
        "rightsnone": "(няма)",
        "revdelete-summary": "кароткае апісаньне зьменаў",
+       "feedback-adding": "Даданьне водгуку на старонку…",
+       "feedback-bugcheck": "Выдатна! Толькі праверце, магчыма гэтыя памылкі ўжо [$1 вядомыя].",
+       "feedback-bugnew": "Я праверыў. Гэта новая памылка",
        "feedback-bugornote": "Калі Вы гатовы падрабязна апісаць тэхнічную праблему, калі ласка [$1 паведаміце пра памылку]. \nУ адваротным выпадку, Вы можаце выкарыстоўваць простую форму пададзеную ніжэй. Ваш камэнтар будзе дададзены на старонку «[$3 $2]», разам з Вашым іменем удзельніка і выкарыстоўваемым браўзэрам.",
-       "feedback-subject": "Тэма:",
-       "feedback-message": "Паведамленьне:",
        "feedback-cancel": "Скасаваць",
-       "feedback-submit": "Даслаць водгук",
-       "feedback-adding": "Даданьне водгуку на старонку…",
+       "feedback-close": "Выканана",
        "feedback-error1": "Памылка: невядомы вынік з API",
        "feedback-error2": "Памылка рэдагаваньня",
        "feedback-error3": "Памылка: няма адказу ад API",
+       "feedback-message": "Паведамленьне:",
+       "feedback-subject": "Тэма:",
+       "feedback-submit": "Даслаць",
        "feedback-thanks": "Дзякуй! Ваш водгук быў разьмешчаны на старонцы «[$2 $1]».",
-       "feedback-close": "Выканана",
-       "feedback-bugcheck": "Выдатна! Толькі праверце, магчыма гэтыя памылкі ўжо [$1 вядомыя].",
-       "feedback-bugnew": "Я праверыў. Гэта новая памылка",
        "searchsuggest-search": "Пошук",
        "searchsuggest-containing": "утрымлівае...",
        "api-error-badaccess-groups": "У Вас няма дазволу загружаць файлы ў гэтую вікі.",
        "json-error-utf8": "Некарэктныя сымбалі UTF-8, магчыма, няслушнае кадаваньне",
        "json-error-recursion": "Значэньне, якое трэба закадаваць, утрымлівае адну ці некалькі рэкурсіўных спасылак",
        "json-error-inf-or-nan": "У значэньні, якое трэба закадаваць, прысутнічаюць адно ці болей NAN- або INF-значэньняў",
-       "json-error-unsupported-type": "Было пададзенае значэньне тыпу, які ня можа быць закадаваны"
+       "json-error-unsupported-type": "Было пададзенае значэньне тыпу, які ня можа быць закадаваны",
+       "headline-anchor-title": "Спасылка на гэты разьдзел",
+       "special-characters-group-latin": "Лацінскія",
+       "special-characters-group-latinextended": "Лацінскія дадатковыя",
+       "special-characters-group-ipa": "МФА (IPA)",
+       "special-characters-group-symbols": "Сымбалі",
+       "special-characters-group-greek": "Грэцкія",
+       "special-characters-group-cyrillic": "Кірылічныя",
+       "special-characters-group-arabic": "Арабскія",
+       "special-characters-group-arabicextended": "Арабскія пашыраныя",
+       "special-characters-group-persian": "Пэрсыдзкія",
+       "special-characters-group-hebrew": "Іўрыт",
+       "special-characters-group-bangla": "Бэнгальскія",
+       "special-characters-group-tamil": "Тамільскія",
+       "special-characters-group-telugu": "Тэлугу",
+       "special-characters-group-sinhala": "Сынгальскія",
+       "special-characters-group-gujarati": "Гуджараці",
+       "special-characters-group-devanagari": "Дэванагары",
+       "special-characters-group-thai": "Тайскія",
+       "special-characters-group-lao": "Лаоскія",
+       "special-characters-group-khmer": "Кхмэрскія",
+       "special-characters-title-endash": "кароткі працяжнік",
+       "special-characters-title-emdash": "доўгі працяжнік",
+       "special-characters-title-minus": "мінус"
 }
index 5d9c4dc..836a20c 100644 (file)
        "disclaimers": "Адмова ад адказнасці",
        "disclaimerpage": "Project:Агульная адмова ад адказнасці",
        "edithelp": "Даведка рэдактарскага акна",
+       "helppage-top-gethelp": "Даведка",
        "mainpage": "Галоўная старонка",
        "mainpage-description": "Першая старонка",
        "policy-url": "Project:Арганізацыйная палітыка",
        "import-rootpage-nosubpage": "У прастора назваў \"$1\" каранёвай старонкі падстаронкі не дазволены.",
        "importlogpage": "Журнал імпартаванняў",
        "importlogpagetext": "Адміністрацыйныя імпартаванні старонак з іншых вікі, разам з гісторыямі правак.",
-       "import-logentry-upload": "імпартавана [[$1]] праз файлавы ўклад",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|версія|версіі|версій}} імпартавана",
-       "import-logentry-interwiki": "транс-вікавана $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|версія|версіі|версій}} імпартавана з $2",
        "javascripttest": "JavaScript-тэсты",
        "javascripttest-pagetext-noframework": "Гэта старонка зарэзервавана для запуску тэстаў JavaScript",
        "version-parser-function-hooks": "Хукі функцый парсера",
        "version-hook-name": "Назва хука",
        "version-hook-subscribedby": "Сюды падпісаныя",
-       "version-version": "(Версія $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[без назвы]",
        "version-license": "Ліцэнзія MediaWiki",
        "version-ext-license": "Ліцэнзія",
        "logentry-upload-revert": "$1 {{GENDER:$2|уклаў|уклала}} $3",
        "rightsnone": "(няма)",
        "revdelete-summary": "тлумачэнне праўкі",
+       "feedback-adding": "Даданне водгуку на старонку…",
+       "feedback-bugcheck": "Выдатна! Толькі праверце, што ў спісе [$1 вядомых памылак] яе няма падобнага запісу.",
+       "feedback-bugnew": "Я праверыў. Паведаміць пра новую памылку",
        "feedback-bugornote": "Калі вы гатовыя падрабязна апісаць тэхнічную праблему, калі ласка, [$1 паведаміце пра памылку].\nУ адваротным выпадку вы можаце выкарыстоўваць гэтую простую форму. Ваш каментар будзе дададзены на старонку «[$3 $2]» разам з вашым імем удзельніка і выкарыстоўваемым браўзерам.",
-       "feedback-subject": "Тэма:",
-       "feedback-message": "Паведамленне",
        "feedback-cancel": "Адмена",
-       "feedback-submit": "Даслаць водгук",
-       "feedback-adding": "Даданне водгуку на старонку…",
+       "feedback-close": "Зроблена.",
        "feedback-error1": "Памылка. Невядомы вынік з API",
        "feedback-error2": "Памылка. Збой праўкі",
        "feedback-error3": "Памылка. Няма адказу ад API",
+       "feedback-message": "Паведамленне",
+       "feedback-subject": "Тэма:",
+       "feedback-submit": "Даслаць водгук",
        "feedback-thanks": "Дзякуй! Ваш водгук размешчаны на старонцы «[$2 $1]».",
-       "feedback-close": "Зроблена.",
-       "feedback-bugcheck": "Выдатна! Толькі праверце, што ў спісе [$1 вядомых памылак] яе няма падобнага запісу.",
-       "feedback-bugnew": "Я праверыў. Паведаміць пра новую памылку",
        "searchsuggest-search": "Знайсці",
        "searchsuggest-containing": "змяшчае...",
        "api-error-badaccess-groups": "У Вас няма дазволу загружаць файлы ў гэтую вікі.",
        "default-skin-not-found": "Упс! Прадвызначаная вокладка для вашай вікі (<code>$wgDefaultSkin</code>), <code>$1</code>, недаступна.\n\nВыглядае на тое, што ваша інсталяцыя ўключае наступныя вокладкі. Гл. [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], такім чынам:\n:* Узяўшы [https://www.mediawiki.org/wiki/Download tarball-інсталятар], які ўтрымлівае некалькі вокладак і прыставак. Вы можаце скапіяваць і ўставіць каталог <code>skins/</code> з яго.\n:* Зрабіўшы клон  аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталог <code>skins/</code> вашай інсталяцыі MediaWiki.\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>$wgDefaultSkin</code>), <code>$1</code>, недаступна.\n\nВы не ўстанавілі вокладкі.\n\n; Калі вы толькі што ўстанавілі ці абнавілі MediaWiki:\n: Магчыма, вы ўстанавілі з git, ці наўпрост з зыходнага коду, выкарыстаўшы іншы метад. Гэта нармальна. MediaWiki 1.24 і навейшыя не ўключаюць вокладкі ў асноўнае сховішча. Паспрабуйце ўстанавіць некалькі вокладак з [https://www.mediawiki.org/wiki/Category:All_skins каталога вокладак mediawiki.org], такім чынам:\n:* Узяўшы [https://www.mediawiki.org/wiki/Download tarball-інсталятар], які ўтрымлівае некалькі вокладак і прыставак. Вы можаце скапіяваць і ўставіць каталог <code>skins/</code> адтуль.\n:* Зрабіўшы клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталог <code>skins/</code> вашай інсталяцыі MediaWiki.\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 ('''выключана''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''выключана''')",
+       "special-characters-group-latin": "Лацінскія",
+       "special-characters-group-latinextended": "Лацінскія дадатковыя",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Сімвалы",
+       "special-characters-group-greek": "Грэчаскія",
+       "special-characters-group-cyrillic": "Кірылічныя",
+       "special-characters-group-arabic": "Арабскія",
+       "special-characters-group-arabicextended": "Арабскія дадатковыя",
+       "special-characters-group-persian": "Персідскія",
+       "special-characters-group-hebrew": "Іўрыт",
+       "special-characters-group-bangla": "Бенгальскія",
+       "special-characters-group-tamil": "Тамільскія",
+       "special-characters-group-telugu": "Целугу",
+       "special-characters-group-sinhala": "Сінгальскія",
+       "special-characters-group-gujarati": "Гуджараці",
+       "special-characters-group-devanagari": "Дэванагары",
+       "special-characters-group-thai": "Тайскія",
+       "special-characters-group-lao": "Лаоскія",
+       "special-characters-group-khmer": "Кхмерскія",
+       "special-characters-title-endash": "кароткі працяжнік",
+       "special-characters-title-emdash": "доўгі працяжнік",
+       "special-characters-title-minus": "мінус"
 }
index 0b57887..b51ddbf 100644 (file)
@@ -26,7 +26,8 @@
                        "Bjankuloski06",
                        "Vodnokon4e",
                        "ShadeOfGrey",
-                       "PetaRZ"
+                       "PetaRZ",
+                       "Macofe"
                ]
        },
        "tog-underline": "Подчертаване на препратките:",
        "copyrightpage": "{{ns:project}}:Авторски права",
        "currentevents": "Текущи събития",
        "currentevents-url": "Project:Текущи събития",
-       "disclaimers": "УÑ\81ловиÑ\8f Ð·Ð° Ð¿Ð¾Ð»Ð·Ð²Ð°Ð½е",
-       "disclaimerpage": "Project:УÑ\81ловиÑ\8f Ð·Ð° Ð¿Ð¾Ð»Ð·Ð²Ð°Ð½е",
+       "disclaimers": "Ð\9fÑ\80едÑ\83пÑ\80еждение",
+       "disclaimerpage": "Project:Ð\9fÑ\80едÑ\83пÑ\80еждение",
        "edithelp": "Помощ при редактиране",
        "mainpage": "Начална страница",
        "mainpage-description": "Начална страница",
        "import-rootpage-nosubpage": "Именното пространство „$1“ на основната страница не позволява създаването на подстраници.",
        "importlogpage": "Дневник на внасянията",
        "importlogpagetext": "Административни внасяния на страници с редакционна история от други уикита.",
-       "import-logentry-upload": "[[$1]] беше внесена от файл",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия беше внесена|версии бяха внесени}}",
-       "import-logentry-interwiki": "$1 беше внесена от друго уики",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|една версия|$1 версии}} на $2 бяха внесени",
        "javascripttest": "Тестване на JavaScript",
        "javascripttest-pagetext-noframework": "Тази страница е запазена за изпълнение на Джаваскрипт тестове.",
        "version-parser-function-hooks": "Куки в парсерни функции",
        "version-hook-name": "Име на куката",
        "version-hook-subscribedby": "Ползвана от",
-       "version-version": "(Версия $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[без име]",
        "version-license": "Лиценз на МедияУики",
        "version-ext-license": "Лиценз",
        "logentry-rights-autopromote": "$1 е автоматично {{GENDER:$2|повишен|повишена}} от $4 до $5",
        "rightsnone": "(никакви)",
        "revdelete-summary": "резюме",
+       "feedback-adding": "Добавяне на коментар към страницата...",
+       "feedback-bugcheck": "Страхотно! Само проверете дали това не сред вече [$1 докладваните грешки].",
+       "feedback-bugnew": "Проверих. Докладвай за нова грешка",
        "feedback-bugornote": "Ако сте готови подробно да опишете технически проблем, моля [$1 докладвайте го тук].\nВ противен случай, можете да използвате лесния формуляр по-долу. Коментарът ви ще бъде добавен към страницата \"[$3 $2]\", наред с вашето потребителско име.",
-       "feedback-subject": "Тема:",
-       "feedback-message": "Съобщение:",
        "feedback-cancel": "Отказване",
-       "feedback-submit": "Оставяне на коментар",
-       "feedback-adding": "Добавяне на коментар към страницата...",
+       "feedback-close": "Готово",
        "feedback-error1": "Грешка: Неразпознат резултат от API",
        "feedback-error2": "Грешка: Неуспешна редакция",
        "feedback-error3": "Грешка: Няма отговор от API",
+       "feedback-message": "Съобщение:",
+       "feedback-subject": "Тема:",
+       "feedback-submit": "Изпращане",
        "feedback-thanks": "Благодарности! Вашата обратна информация е публикувана на страницата „[$2  $1]“.",
-       "feedback-close": "Готово",
-       "feedback-bugcheck": "Страхотно! Само проверете дали това не сред вече [$1 докладваните грешки].",
-       "feedback-bugnew": "Проверих. Докладвай за нова грешка",
        "searchsuggest-search": "Търсене",
        "api-error-badaccess-groups": "Нямате необходимите права, за да качвате файлове в това уики.",
        "api-error-badtoken": "Вътрешна грешка: неправилен маркер.",
        "mediastatistics-table-mimetype": "MIME тип",
        "mediastatistics-header-audio": "Аудио",
        "mediastatistics-header-video": "Видео",
-       "json-error-syntax": "Синтактична грешка"
+       "json-error-syntax": "Синтактична грешка",
+       "special-characters-group-latin": "Латиница",
+       "special-characters-group-latinextended": "Латиница – разширена",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Символи",
+       "special-characters-group-greek": "Гръцки",
+       "special-characters-group-cyrillic": "Кирилица",
+       "special-characters-group-arabic": "Арабски",
+       "special-characters-group-arabicextended": "Разширен арабски",
+       "special-characters-group-persian": "персийски",
+       "special-characters-group-hebrew": "Иврит",
+       "special-characters-group-bangla": "Бенгалски",
+       "special-characters-group-tamil": "Тамилски",
+       "special-characters-group-telugu": "Телугу",
+       "special-characters-group-sinhala": "Синхалски",
+       "special-characters-group-gujarati": "Гуджарати",
+       "special-characters-group-devanagari": "Деванагари",
+       "special-characters-group-thai": "тайландски",
+       "special-characters-group-lao": "Лао",
+       "special-characters-group-khmer": "кхмерски",
+       "special-characters-title-endash": "средно тире",
+       "special-characters-title-emdash": "дълго тире",
+       "special-characters-title-minus": "знак минус"
 }
index aaa71bf..e473177 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Baloch Afghanistan"
+                       "Baloch Afghanistan",
+                       "Ibrahim khashrowdi"
                ]
        },
        "tog-underline": "لینکانی جهلگا خط کشیتین",
        "disclaimers": "تکذیب‌ نامه‌هان",
        "disclaimerpage": "Project:ئمومی ئین تکذیب‌ نامه",
        "edithelp": "کومک په ایدیت ئی خاتیرا",
+       "helppage-top-gethelp": "کومک",
        "mainpage": "بُنیادی تاکدیم",
        "mainpage-description": "بُنیادی تاکدیم",
        "policy-url": "Project:سیاست‌ئان",
        "readonly_lag": "مئلوماتین بانک بی انونین وختا اتوماتیکین رکما قُلپ بوته تا که پشتوانی ئی و بُنیادی ئین نخسه گو وت هماهنگ بیئنت",
        "internalerror": "داخلین خطا",
        "internalerror_info": "داخلین خطا: $1",
+       "internalerror-fatal-exception": "خرابکارین استسنائین نمونه \"$1\"",
        "filecopyerror": "نه شه فایل «$1» بی «$2» کاپی بیئت.",
        "filerenameerror": "نه شه فایل «$1» بی «$2» تغیر نام بیئت.",
        "filedeleteerror": "نه بوت فایل «$1» پاک بیئت.",
        "virus-badscanner": "بدین پیکربندی: نازانتین ویروس ئی سکن کورتین: ''$1''",
        "virus-scanfailed": "ناکامین سکن  (کود $1)",
        "virus-unknownscanner": "نامئلومین انتی ویروس:",
+       "logouttext": "'''انون شما ثبت دَر بوتین کورته ئیت.'''\nتوجه داشته بئیت که وتي بروزیر ئی چیهرین حافظهٔ ئا پاک مه کنیت، بعضی شه دیمان ممکن اینت که بئ یک رقم ئی نشان داته بیئنت که بگوشی ته آوانی تا داخل بوته ئی.",
        "welcomeuser": "وش آتیت $1!",
        "welcomecreation-msg": "شمی کار زوروکین حساب جوڑ بوت.\nبی هوش مکنیت که وتئ [[Special:Preferences|تنظیماتان ئا {{SITENAME}}]] تغیر بدهیت.",
        "yourname": "کار زوروکین نام:",
        "loginerror": "خطا بی داخل بوتینی تا",
        "createacct-error": "کار زوروکین حسابئ جوڑ کورتینی خطا",
        "createaccounterror": "ای حسابئ جوڑ کورتین امکان نداریت: $1",
+       "nocookiesnew": "کارزوروکی هیساب جۆڑ بوت، اما تا انون لوگین نه بوته ایت.\n{{SITENAME}} په کارزوروکانی لوگین بوتین ئا شه کوکی ئا ایستیپاده ئا کننت.\nشما کوکی ئانه شه کار پرینته ایت.\nمهربانی بکنیت کوکی ئانه په کار بگیریت، و پدا گۆ وتی نۆکین کارزوروکی ناما و چیهرگال ئا لوگین به ایت.",
+       "nocookieslogin": "{{SITENAME}} په کارزوروکانی لوگین بوتینا شه کوکی ئان ایستیپاده ئه کننت.\nشما کوکی ئانه شه کار پرینته ایت.\nمهربانی بکنیت کوکی ئانه په کار بگریت و پدا کوشش بکنیت.",
+       "nocookiesfornew": "کارزوروکی هیساب جۆڑ نه بوت، په خاتیریکه نتوانتن آیی منبه ئا تایید بکنن.\nموتمه ئین به یت که کوکی په ئال انت، آ وختا شه سری ن\tۆک بارگیری بکینت و پدا امتیهان بکنیت .",
        "noname": "شما یک موتبرین کار زوروکی ئین نامی ئا مشخص نه کورته ئیت.",
        "loginsuccesstitle": "کامیابین لوگین",
        "loginsuccess": "'''شما انون گو «$1» ئی نا بی {{SITENAME}} ئی تا داخل بوته ایت.'''",
+       "nosuchuser": "کار زوروکئ گۆ «$1» ئی ناما موجود نه اینت.\nکار زورکئ نام گۆ گۆنڈی یا توُهی ئا هوروپ ئان هساس اینت.\nنامی املا ئا بگنیدیت، یا [[Special:UserLogin/signup|یک نوکین کار زورکی هسابئ جۆڑ بکنیت]].",
        "nosuchusershort": "هیچ کار زوروکئ بی نامئ  ''$1'' ئا وجود نداریت.\nوتئ املا ئا چیک بکنیت.",
        "nouserspecified": "باید یک کار زوروکئ نام مشخص بکنیت.",
        "login-userblocked": "ای کار زوروک بلاک بوته، په داخل بوتینا اجازه نه اینت.",
        "wrongpassword": "ای پاسورد یا چیهر گالا که داخل کورته ایت صحیح نه اینت.\nمهربانی بکنیت، پدا امتحان بکینت.",
        "wrongpasswordempty": "ای پاسورد یا چیهر گالا که داخل کورته ایت ، خالی اینت.\nمهربانی پدا کوشش بکنیت.",
        "passwordtooshort": "پاسورد باید کم شه کم {{PLURAL:$1|۱ حرف|$1 حرف}} داشته بیئت.",
+       "passwordtoolong": "پاسورد نه باید گیشتیر شه {{PLURAL:$1|۱ حرف|$1 حرفا}}  داشته بیئت.",
        "password-name-match": "شمی چیهرگال یا پاسورد باید شه شمی کار زورکی ئین ناما فرق داشته بیئت.",
        "password-login-forbidden": "استفاده شه ای کار زوروکی ناما و شه ای چیهرگالا اجازه نه اینت.",
        "mailmypassword": "پاک کورتین پاسوردئ",
        "passwordremindertitle": "نوکین موقتی ئین چیهرگال یا پاسورد په  {{SITENAME}}",
        "noemail": "هیچ ایمیل ادرسئ په  «$1» کار زوروکا ثبت نه بوته.",
        "noemailcreate": "باید یک موتبرین ایمیل ادرسئ داخل بکنیت",
+       "passwordsent": "نوکین چیهرگال بئ سبت بوته ئین ایمیل ادرس ئا په «$1» ئا دیم داته بوت.\nمهربانی بکنیت شه آیی گیپتین ئا پد لوگین به ییت.",
        "mailerror": "خطا بی ایمیلی داتینی تا: $1",
        "emailauthenticated": "شمی ایمیلی ادرس بی $2 سائت $3  تا تصدیق ئه بیئت.",
        "emailnotauthenticated": "شمی ایمیلئ ادرس تا انون قبول نه بوته.\nایمیل په هیچ یک شه ویژه گی ئان دیم داته ئه نه بیئت.",
        "user-mail-no-addy": "کوشش په دیم داتین یک خط بی شه گوجام ایمیل ادرسئ  ئا.",
        "user-mail-no-body": "کوشش په دیم داتین ئا یک گونڈین یا خالی ئین ایمیل ئی ئا.",
        "changepassword": "پاسوردی تغیر داتین",
+       "resetpass_announce": "شما باید په لوگین ئی الاسی ئا، نۆکین چیهرگالی ئی تنظیم بکنیت.",
        "resetpass_header": "پاسوردئ تغیر داتین",
        "oldpassword": "دیمئ پاسورد:",
        "newpassword": "نوکین پاسورد:",
        "retypenew": "نوکین پاسوردا پدا داخل کورتین",
        "resetpass_submit": "پاسوردی تنظیم و داخل بوتین",
        "changepassword-success": "شمی پاسوردئ تغیر کامیاب بوت و پاسورد تغیر کورت",
+       "changepassword-throttled": "شما بیخی باز وار په لوگین بوتینا کوشش کورته ایت.\nمهربانئ بکنیت دیم شه آیی که پدا کوشش بکنیت $1 صبر کنیت.",
        "resetpass_forbidden": "نه توانیت که پاسوردا تغیر بدهیت",
        "resetpass-no-info": "په ای تاکدیمی دسترسی ئی خاتیرا داخل بئیت.",
        "resetpass-submit-loggedin": "پاسوردی تغیر داتین",
        "resetpass-submit-cancel": "کنسیل",
+       "resetpass-recycled": "مهربانی بکینت دیگه پاسورد یا چیهرگالی غیر شه انونین چیهرگال ئا تنظیم بکنیت.",
+       "resetpass-temp-emailed": "شما گۆ یک موقتین ایمیل بوته ئین کود ئا لوگین بوته ئیت.\nپه لوگین ئی الاسی ئا شما باید نوکین چیهرگالی ایدا داخل بکنیت:",
        "resetpass-temp-password": "موقیئتین پاسورد:",
+       "resetpass-abort-generic": "چیهرگالی ٹگل شه یک توسئ ئه گری نیمگا شه کار پرینته بوت.",
+       "resetpass-expired": "شمی چیهرگالی ئی وخت الاس بوته. مهربانی په لوگین بوتینا نۆکین چیهرگالی تنظیم بکنیت.",
        "passwordreset": "پاک کورتین پاسوردئ",
+       "passwordreset-text-one": "په پدا نادینتین ایمیلی پاسوردی خاتیرا ای فرم ئا پر کنیت.",
        "passwordreset-text-many": "{{PLURAL:$1|په موقتی ئین چیهرگال ئی گیپتین شه ایمیلئ راه ئا، یکی شه زمینه‌هان ئا پر کنیت.}}",
        "passwordreset-legend": "پاک کورتین پاسوردئ",
        "passwordreset-disabled": "ای ویکی ئی تا پاسورد یا چیهرگالی پدا بیئر گردینتین غیر پئال اینت.",
        "passwordreset-emailsent": "یک ایمیل په چیهر گالئ  پاک بوتین  خاتیرا دیم داته بوت.",
        "passwordreset-emailsent-capture": "یک ایمیلئ په بیئرگردینتین ئا پاسوردئ خاتیرا، دیم داته بوت.",
        "changeemail": "ایمیل ادرسی تغیر داتین",
+       "changeemail-no-info": "په ای تاکدیمی دسترسی ئی خاتیرا داخل بئیت.",
        "changeemail-oldemail": "انونین ایمیل ادرس:",
        "changeemail-newemail": "نوکین ایمیل ادرس:",
        "changeemail-none": "(هیچ)",
        "changeemail-submit": "ایمیل ادرسی تغیر",
        "changeemail-throttled": "شما بیخی باز وار په لوگین بوتینا کوشش کورته ایت.\nمهربانئ بکنیت دیم شه آیی که پدا کوشش بکنیت $1 صبر کنیت.",
        "resettokens": "بیئر گردینتین نشانگ ئانی",
+       "resettokens-no-tokens": "هیچ نشانگ ئی په ریست کورتین ئا وجود نداریت.",
        "resettokens-legend": "بیئر گردینتین نشانگ ئانی",
        "resettokens-tokens": "نشانگان:",
        "resettokens-token-label": "$1 (انونین اندازه گ: $2)",
        "resettokens-done": "بیئر گردینتین نشانگ ئان.",
+       "resettokens-resetbutton": "نشانی بوته ئین وسایلانی بیئرگردینتین.",
        "bold_sample": "پر رنگین متن",
        "bold_tip": "پر رنگین متن",
        "italic_sample": "مورب متن",
        "anonpreviewwarning": "<em>شما لوگین نه بوته ئیت. ذخیره کورتین باعث ئه بیئت که شمی آی پی ادرس بی ای تاکدیمی تاریخچه ئی تا ثبت بیئت.</em>",
        "missingcommenttext": "مهربانی بکنیت جهلگا توضیح دهیت.",
        "summary-preview": "دیم دیست ئی خلاصه:",
+       "subject-preview": "موضو ئی دیم دیست/ئنوان:",
        "blockedtitle": "کار زوروک بسته بوته",
        "blockednoreason": "دلیلی مشخص نه بوته",
        "whitelistedittext": "په مقاله ئانی ایڈیٹ ئا باید $1.",
        "sitejspreview": "'''شه هوشا مه بَریت که شما فقط جاوااسکریپت ئی دیم دیست ئا گیندیت.'''\n'''ای جاوااسکریپت تا انون ذخیره نه بوته!'''",
        "updated": "(نوک بوته ئین)",
        "note": "'''نکته:'''",
+       "previewnote": "'''بئ هوش ئا داشته بیئت که ای په قت دیم اینت.'''\nشمی تغیرات تا انون زه خیره نه بوته انت!",
        "continue-editing": "شوتین بی ایڈ\tیٹ\tی نیمگا",
        "editing": "بی ایڈ\tیٹ\t کورتینی حالا $1",
        "creating": "بی جوڑ کورتینی حالا $1",
        "storedversion": "ذخیره بوته ئین نخسه",
        "yourdiff": "تفاوت‌هان",
        "templatesused": "{{PLURAL:$1|تراشوان|تراشوانان}} استفاده بوته انت بی ای تاکدیمئ تا:",
+       "templatesusedpreview": "ای دیم دیست ئی تا استفاده بوته ئین {{PLURAL:$1|تراشوان|تراشوانان}} :",
+       "templatesusedsection": "ای بخش ئی تا استفاده بوته ئین {{PLURAL:$1|تراشوان|تراشوانان}} :",
        "template-protected": "(قُلپ بوته)",
        "template-semiprotected": "(نیمه‌ گ قُلپ بوته)",
        "hiddencategories": "ای تاکدیم بی {{PLURAL:$1|یک چیهرین تهر|$1 چیهرین تهر}} تا قرار داریت:",
+       "nocreate-loggedin": "شما نوکین دیم ئی جۆڑ کورتین ئی اجازه ئا نداریت.",
+       "sectioneditnotsupported-title": "بخش ئانی ایڈیٹ پشتیوانی ئه نه بیئنت",
        "sectioneditnotsupported-text": "ای تاکدیم شه بخشانی ایڈیٹ ئا پُشتوانی ئه نه کنت.",
        "permissionserrors": "دسترسی ئی خطا",
        "permissionserrorstext": "شما ای کارئ اجازه ئا په ای {{PLURAL:$1|دلیلا|دلیلان}} نداریت:",
        "postedit-confirmation-restored": "ای تاکدیم بیئرگردینته بوته.",
        "postedit-confirmation-saved": "شمی ایڈ\tیٹ ذخیره بوت.",
        "edit-already-exists": "نوکین تاکدیمئ جوڑ کورتین امکان نه داریت.\nای تاکدیم شه دیما وجود داشتت.",
+       "defaultmessagetext": "پیامی پیش فرضین متن",
+       "content-failed-to-parse": "$2 مهتوایی تجزیه کار نه کورت په $1 مدل ئا: $3",
+       "invalid-content-data": "ناموتبرین دیتایی کانتکت",
+       "content-not-allowed-here": "«$1» ئی محتوا بئ [[$2]] ئی دیمی تا جایز نه اینت",
+       "editwarning-warning": "شه ای دیما دَر بوتین ممکن اینت که هر آنچه که شما بوجود آورته ئیت آوانا شه دست ب دهیت.\nاگر شما سایٹ ئی داخل بوته ئیت، توانیت که ای هشدار ئا بئ تنزیماتانی «{{int:prefs-editing}}» ئی بخشی تا بند کنیت .",
+       "editpage-notsupportedcontentformat-title": "پشتیوانی نه بوته ئین دیتا کانتکت ئی فورمت کورتین",
+       "editpage-notsupportedcontentformat-text": "$1 ئی مهتوائین پورمت گۆ $2 ئی مهتوائین مدل ئا پُشتیوانی نه بوته انت.",
        "content-model-wikitext": "ویکی‌متن",
        "content-model-text": "ساده گین متن",
        "content-model-javascript": "جاوااسکریپت",
        "undo-summary": " $1 ئی ایڈیٹ شه [[Special:Contributions/$2|$2]] ([[User talk:$2|حبر و گپ]]) نیمگا شه بَیْن بورته بوت",
        "undo-summary-username-hidden": " $1 نخسه ئی شه بین بورتین بی یک کار زوروکئ دستا چیهر بوته",
        "cantcreateaccounttitle": "نه توانیت حسابئ پاچ کنیت",
+       "cantcreateaccount-text": "کار زوروکئ هیساب ئی جۆڑ کورتین ئی هه ق گۆ ای آی‌پی  ('''$1''') ادرس ئا، شه [[User:$3|$3]] نیمگا گیپته بوته.\n\nشه $3 ئی نیمگا دلیل ایرنگ بیان بوته: $2",
        "viewpagelogs": "ای تاکدیمئ سیاه چال ئی دیستین",
        "nohistory": "ای تاکدیم ایڈیٹ ئی تاریخچه نداریت.",
        "currentrev": "انونین نخسه یی نشان داتین",
        "history-feed-title": "ایڈ\tیٹانئ دپتر یا تاریخچه گ",
        "history-feed-description": "ای تاکدیمی ایڈیٹ ئی تاریخچه بئ ویکی ئی تا",
        "history-feed-item-nocomment": "$1 بی $2",
+       "history-feed-empty": "لۆٹیته بوته ئین دیم موجود نه اینت.\nممکن اینت که شه ویکی ئی تا پاک بوته بیئت یا که نامی تغیر بوته.\nنوکین تاکدیمانا په مربوتین موریدان بئ ای ویکی ئی تا [[Special:Search|بگردیت]].",
        "rev-deleted-comment": "(ایڈیٹ ئی خلاصه پاک بوت)",
        "rev-deleted-user": "(کار زوروکین نام پاک بوت)",
        "rev-deleted-event": "(سیاه چال ئی جزئیات پاک بوته انت)",
        "rev-deleted-user-contribs": "[کار زوروکئ نام یا آی پی ادرس پاک بوته - چیهر بوته ئین ایڈیٹ بئ مشارکتانئ تا]",
        "rev-deleted-text-permission": "ای ایڈیٹ شه ای تاکدیما '''پاک بوته'''.\nممکن اینت آیی باره ها مئلومات بئ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} پاک بوته ئین سیاه چال] ئی تا موجود بیئت.",
        "rev-suppressed-text-permission": "ای ایڈیٹ شه ای تاکدیما '''پاک بوته'''.\nشما توانیت آیرا بگیندیت؛ ممکن اینت آی باره ئا مئلومات بئ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} پاک بوته ئین سیاه چال] ئی تا موجود بیئت.",
+       "rev-deleted-text-unhide": "ای دستکاری شه ای دیما '''پاک بوته'''.\nممکن اینت که آیی مربوتین مه لوماتانا بئ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} پاک بوته ئانی سیاهه] ئی تا موجود به ینت.\nشما اگه لوتیته به ییت توانیت که [ای نخسه ئی $1 ئا بگیندیت ].",
        "rev-deleted-text-view": "ای ایڈیٹ شه ای تاکدیما '''پاک بوته'''.\nشما توانیت آیرا بگیندیت؛ ممکن اینت آیی مربوتین مئلوماتانا بئ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} پاک بوته ئین سیاه چال ] تا ودئ بکنیت.",
        "rev-delundel": "نمایش/نهفتن",
        "rev-showdeleted": "نشان داتین",
        "revisiondelete": "پاک کورتین/نخسه ئی پدا جۆڑ کورتین",
        "revdelete-nooldid-title": "هدف ئی نامجازین نخسه",
+       "revdelete-no-file": "مشخص بوته ئین فایل موجود نه اینت.",
+       "revdelete-show-file-confirm": "آیا شما مطمئن وێت که لوٹیت یک پاک بوته ئین نخسه شه فایل \"<nowiki>$1</nowiki>\" مورخ $2 سائت $3 ئا بگیندیت؟",
        "revdelete-show-file-submit": "هان",
        "revdelete-selected-text": "{{PLURAL:$1|انتخاب بوته ئین نخسه هان|انتخابین نخسه هان}} [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|انتخاب بوته ئین نخسه|انتخابین نخسه}} [[:$2]]:",
        "prefs-editwatchlist-edit": "پاک کورتین و دیستین ئنوانانئ شه وتئ واچلیستا",
        "prefs-editwatchlist-raw": "واچلیستئ آمگین لیستانی ایڈیٹ",
        "prefs-editwatchlist-clear": "وتئ واچلیستئ پاک کورتین",
+       "prefs-watchlist-days": "روچانئ اندازه گ که باید بئ دیدارلیست ئی تا نشان داته بیئنت:",
        "prefs-watchlist-days-max": "حداکثر $1 {{PLURAL:$1|روچ}}",
        "prefs-watchlist-edits": "شمی ایڈیٹانئ اندازه گ بئ واچلیست ئي تا پراخ بوته:",
        "prefs-watchlist-edits-max": "حداکثر اندازه گ: ۱۰۰۰",
        "stub-threshold-disabled": "غیرفعال",
        "recentchangesdays": "روچانی اندازه گ بئ آخیر ئین تغیراتانئ تا نشان داته بوته انت:",
        "recentchangesdays-max": "حداکثر $1 {{PLURAL:$1|روچ}}",
+       "recentchangescount": "پیش پرزین نشان داته بوته ئین ایڈیٹ ئانی اندازه گ:",
+       "prefs-help-recentchangescount": "ای شامیل آخیرئین تغیرانی،تاکدیمانی تاریخچه ئی و سیاهه ئانی است.",
        "savedprefs": "شمی تنظیمات ذخیره بوتنت.",
        "timezonelegend": "منطقهٔ زمانی:",
        "localtime": "محلی ئن وخت:",
        "right-delete": "تاکدیمی پاک کورتین",
        "right-bigdelete": "ٹوهین تاریخچه والا ئین تاکدیمانئ پاک کورتین",
        "right-deletelogentry": "پاک کورتین و پداجۆڑ کورتین خاصین دروچه شه سیاهه ئان",
+       "right-deleterevision": "پاک کورتین و پدا جۆڑ کورتین خاصین نخسه ئان شه تاکدیما",
+       "right-deletedhistory": "شه تاریخچه ئا پاک بوته ئین مواریدانی دیستین، بیدون شه آوانی متنی دستینا",
        "right-deletedtext": "دیستین پاک بوته ئین متن ئان و تغیر ئان پاک بوته ئین نخسه ئانی مانجینا",
        "right-browsearchive": "گشتین په پاک بوته ئین تاکدیمان",
        "right-undelete": "بی جاه آورتین  تاکدیمانئ",
        "right-block": "دیگه کار زوروکانئ بلاک کورتین شه ایڈیٹ ئان",
        "right-blockemail": "دیگه کار زوروکانئ بلاک کورتین شه ایمیل ئی دیم داتین ئا",
        "right-hideuser": "کار زوروکئ بلاک کورتین و چیهر داتین شه عمومی ئی دیدا",
+       "right-ipblock-exempt": "تاسیر نه گیپتین شه آی پی ئین بلاک ئی ، وتکارین یا پاسیله ئین بلاکان",
+       "right-proxyunbannable": "تاسیر نه گیپتین شه وتکارین پروکسی ئی بلاک بوتین ئان",
        "right-unblockself": "وتي دسترسی ئی پاچ کورتین",
        "right-protect": "قُلپ بوته تاکدیمانئ قلپی میزانی تغیر داتین و آوانی ایڈیٹ کورتین",
        "right-editprotected": "ایڈیٹ کورتین قُلپ بوته ئین تاکدیمانی بئ ئنوانئ «{{int:protect-level-sysop}}»",
        "right-importupload": "تاکدیمئ داخل کورتین شه فایلئ اپلوڈ کورتین ئا",
        "right-patrol": "دیگرانئ ایڈیٹانی مارک جتین",
        "right-autopatrol": "اوتوماتیکین مارک وارتین ایڈیٹ ئانی",
+       "right-patrolmarks": "آخیرئین گشت وارته ئین برچسپ ئی دیستین",
+       "right-unwatchedpages": "دیستین آ دیمانی لیستی که پدگیری ئه نه بیئنت",
        "right-mergehistory": "تاکدیمانی تاریخچه ئی ادغام کورتین",
        "right-userrights": "ایڈیٹ کورتین کار زوروکئ موچین اختیارانئ",
        "right-userrights-interwiki": "دیگه ویکی ئی کار زوروکانئ اختیارانی ایڈیٹ کورتین",
        "right-siteadmin": "مئلومات ئین بانکئ قُلپ و یا پاچ کورتین",
        "right-sendemail": "دیم داتین ایمل په دیگه کار زوروکان",
        "right-passwordreset": "پاسوردی نوک تنظیم کورتینی ایمیل",
+       "right-managechangetags": "[[Special:Tags|برچسپ ئانی]] جۆڑ و پاک کورتین مه لوماتین بانکا",
        "newuserlogpage": "کار زوروکئ جوڑ کورتینی سیاه چال",
        "newuserlogpagetext": "ای سیاه چال شه نوکین کار زوروکئ ناما جوڑ بوته.",
        "rightslog": "کار زوروکی اختیارانئ سیاه چال",
        "action-viewmyprivateinfo": "وتئ خصوصین مئلوماتانا بگیندیت",
        "action-editmyprivateinfo": "وتئ خصوصین مئلوماتانا ایڈیٹ بکنیت",
        "action-editcontentmodel": "یک تاکدیمی محتوائین مدل ئی ایڈیٹ کورتین",
+       "action-managechangetags": "تگ ئانی جۆڑ و پاک کورتین شه مه لوماتین بانکا",
        "nchanges": "$1 {{PLURAL:$1|ٹگل|ٹگل}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|شه اخر ئین دیستینا}}",
        "enhancedrc-history": "تاریخچه",
        "ignorewarning": "چشم چیهرداتین شه هشدارا و ذخیره کورتین فایلئ.",
        "ignorewarnings": "چم پوشی شه موچین هشداران",
        "minlength1": "فایلئ نام باید کم شه کم یک حرف بیئت.",
+       "filename-toolong": "پائیل نام نه باید شه ۲۴۰ بایت ئا تچکتیر بیئت.",
+       "badfilename": "پائیل نام بئ «$1» ئا تغییر کورت.",
        "filetype-missing": "ای فایل پدوندی (مثلاً «‎.jpg») نداریت.",
        "empty-file": "فایلی که دیم داته بوت خالی ات.",
        "file-too-large": "فایلی که دیم داتیت بئ حد ٹوو ات.",
        "unknown-error": "یک نا زانتین خطائی رخ دات.",
        "tmp-create-error": "موقتین فایلی جۆڑ کورتین ممکن نه اینت.",
        "tmp-write-error": "خطا بئ موقتین فایلی نیویشتینا.",
+       "windows-nonascii-filename": "ای ویکی پایل ئی ناما گۆ خاسین نۆیسگ ئان پُشتیوانی ئه نه کنت.",
+       "fileexists": "پایل ئی گۆ ای ناما شه دیما موجود اینت، اگه موتمئین {{GENDER:|نه ۆیت}} که لوٹیت ای پایل ئا تغیر ب دهیت، مهربانی بکنیت <strong>[[:$1]]</strong> ئا بگیندیت.\n[[$1|thumb]]",
        "uploadwarning": "بُرز کورتینئ هشدار",
        "savefile": "فایلی ذخیره کورتین",
        "uploaddisabled": "بُرز کورتین غیر پئال اینت.",
        "copyuploaddisabled": "بُرز کورتین شه اینترنیتی ادرسا غیرفعال اینت.",
        "uploaddisabledtext": "فایل ئی بُرز کورتین غیر فعال اینت.",
+       "uploadscriptednamespace": "این اس‌وی‌جی ئی پوشه شامل غیرقانونی ئین  '$1' ئی پزای نام ئا اینت",
+       "uploadinvalidxml": "XML بئ بُرز بوته ئین پایل تا نتوانت تجزیه بیئت.",
+       "uploadvirus": "ای پایل ویروس داریت!\nگیشتیرین مه لومات : $1",
        "upload-source": "فایلی منشا",
        "sourcefilename": "منشائی فایلی نام:",
        "sourceurl": "منشائی ادرس:",
        "upload-options": "بُرز کورتین یا آپلوڈئ اپشن",
        "watchthisupload": "دیستین ای فایلی",
        "upload-success-subj": "بُرز کورتین یا آپلوڈ گو کامیابی ئا انجام بوت",
+       "upload-success-msg": "شمی بُرز کورتین شه [$2] ئا کامیاب ات. توانیت که ای پایل ئا ایدا : [[:{{ns:file}}:$1]] بگیندیت",
        "upload-failure-subj": "بُرز کنوکی پرابلم",
+       "upload-failure-msg": "یک مشکل بئ بُرز کورتینا شه [$2] ئا وجود داشت:\n\n$1",
        "upload-warning-subj": "بُرز کورتینئ هشدار",
        "upload-proto-error": "نادروستین پروتوکول",
        "upload-proto-error-text": "بُرز کورتین شه دوردستا به ادرس ئان که گو <code dir=ltr>http://</code> یا <code dir=ltr>ftp://</code>  ئی شرو بیئنت ضرورت داریت .",
        "backend-fail-stream": "نه توانن $1 ئی فایلا دیم دهین.",
        "backend-fail-backup": "نتنوانن پُشتوانی نخسه یی په $1 فایلا جۆڑ کنن.",
        "backend-fail-notexists": " $1 ئی فایل وجود نداریت.",
+       "backend-fail-hashes": "پایل ئانی هیش ئانی گیپتین په موقایسه ئا ناکام ات.",
        "backend-fail-notsame": "غیر یکرنگی فایل بئ $1 ئی تا وجود نداریت.",
        "backend-fail-invalidpath": "$1 ئی ذخیره کنۆکی مسیر موتبر نه اینت.",
        "backend-fail-delete": "نه توان که $1 ئی فایل پاک کورت.",
        "backend-fail-read": "$1 ئی فایلا نه توان وانت.",
        "backend-fail-create": "نه توانن بئ  $1 ئی فایلی سرا مئلومات نیویشته کنن.",
        "backend-fail-maxsize": "نه توان که  $1 ئی فایلی سرا مئلومات نیویشته کورت چون که شه {{PLURAL:$2|یک بایٹ ئا|$2 بایٹ ئا}} ٹوو اینت.",
+       "backend-fail-readonly": "«$1» پُشتوانی انون په قت بی وانتین ئی هالا اینت . پیش بوته ئین دلیل ایرنگ گوشته بوته: «$2»",
        "backend-fail-connect": "ارتباط گۆ «$1» ئی ذخیره ئی پُشتیوانا برقرار نه بوت.",
        "backend-fail-internal": "نامئلومین خطایی بئ «$1» ئی ذخیره پُشتیوانی تا رخ دات.",
        "lockmanager-notlocked": "نه توان که «$1» ئی قُلپا پاچ کورت؛ چون که قُلپ نه بوته.",
        "uploadstash-refresh": "فایلانئ لڑلیستئ نوک کورتین",
        "invalid-chunk-offset": "قطعه ئی ناموتبرین جابجايی",
        "img-auth-accessdenied": "دسترسی ئی منشا",
+       "img-auth-badtitle": "یک مجازین ئینوانی جۆڑ کورتین ئی امکان شه «$1» ئا وجود نداریت.",
+       "img-auth-nologinnWL": "شما لوگین نه بوته ایت و بئ  «$1» ئی سپیتین لیست ئی تا وێت.",
        "img-auth-nofile": "«$1» ئی فایل موجود نه اینت.",
        "img-auth-isdir": "شما کوشش کورته ئیت که بئ «$1» ئی شاخه ئا دسترسی ودی بکنیت.\nتانا په فایل ئا دسترسی جایز اینت.",
        "img-auth-streaming": "بئ حال جاری کورتینی «$1» ئا.",
+       "img-auth-noread": "کار زوروک «$1» ئی وانتین ئی دسترسی ئا نداریت.",
        "http-invalid-url": "انترنیتی ادرس ناموتبر اینت: $1",
        "http-invalid-scheme": "انترنیتی ئین نخسه گۆ «$1» ئی پیشنهادا پُشتیوانی ئه نه بیئنت.",
        "http-request-error": "اچ‌تی‌تی‌پی ئی ریکویست گۆ نامئلومین خطائا، ناکام ات.",
        "http-read-error": "اچ‌تی‌تی‌پی ئی وانتینئ خطا.",
        "http-timed-out": "اچ‌تی‌تی‌پی ئی ریکویست ئی وخت الاس بوت.",
        "http-curl-error": "خطا بئ انترنیتی ادرسی آورتینی تا: $1",
+       "http-bad-status": "بئ اچ‌تی‌تی‌پی ئی ریکویست ئی وختا خطایی رخ دات: $1 $2",
+       "upload-curl-error6": "په انترنیتی ئین ادرس ئا دسترسی ممکن نه بوت",
+       "upload-curl-error6-text": "انترنیتی ئین ادرس که شما لوٹیته ئیت قابل دسترس نه اینت.\nمهربانی بکنیت آیی جۆانئ سرا وترا متمئین بکنیت و پدا کوشش بکنیت.",
        "upload-curl-error28": "بُرز کورتین ئی وخت الاس بوت",
        "license": "اجازه‌نامه:",
        "license-header": "اجازه‌نامه",
        "nolicense": "هیچگوجام انتخاب نه بوته",
        "licenses-edit": "ایڈیٹ ئی  مجوزین آپشن ئان",
        "license-nopreview": "(دیم دیست ئی وجود نداریت)",
+       "upload_source_url": "(شما شه یک موتبرین و جۆانین URL ئا فایل ئی انتخاب کورته ایت، که موچانی دسترس ئا توانت بیئت)",
        "upload_source_file": "(شمی انتخابی ئین فایل شه شمی کامپیوتیرا)",
        "listfiles-delete": "پاک کورتین",
        "listfiles-summary": "ای خاصین تاکدیم موچین بُرز بوته ئین فایلانه نشان ئه دنت.",
        "filehist-comment": "کومنیت",
        "imagelinks": "بی کار گیپتین فایلئ",
        "linkstoimage": "{{PLURAL:$1|تاکدیم|تاکدیمان}} جهلگین بی اکسا لینک {{PLURAL:$1|داریت|دارنت}}:",
+       "linkstoimage-more": "گیشتیر شه $1 تاکدیم گۆ ای فایلا لینک {{PLURAL:$1|داریت|دارنت}}.\nجهلگی لڑ تانا {{PLURAL:$1|اولین لینک|اولین $1 لینک}} گۆ ای دیما نشان ئا دنت.\n[[Special:WhatLinksHere/$2|کامیلین لیست]] هم موجود اینت.",
        "nolinkstoimage": "ای فایل بئ هیچ تاکدیمی تا بئ کار گیپته نه بوته.",
        "morelinkstoimage": "ای فایلئ [[Special:WhatLinksHere/$1|دیگرین لینکانا]] بگیندیت.",
        "linkstoimage-redirect": "$1 (فایلی تغیرمسیر) $2",
+       "duplicatesoffile": "جهلگی{{PLURAL:$1|فایل|فایلان}} تکرارین نخسه شه ای فایلا  {{PLURAL:$1|است|هستنت}} ([[Special:FileDuplicateSearch/$2|گیشتیرین مئلومات]]):",
+       "sharedupload-desc-here": "ای فایل بئ $1 ئی تا قرار داریت و ممکن اینت که بئ دیگه پروژه‌هانئ تا هم استفاده بیئت.\nموجودین شرح بئ [$2 فایلی دیمی شرح بئ آ جای تا]، جهلگا نشان داته بوته.",
        "filepage-nofile": "فایلی گۆ ای ناما موجود نه اینت.",
        "filepage-nofile-link": "فایلی گۆ ای ناما موجود نه اینت، اما شما ئه توانیت آیرا [$1 بُرز کنیت].",
        "uploadnewversion-linktext": "نوکین نخسه ئی بُرز کورتین شه فایلا",
        "filedelete-nofile-old": "ارشیف  بوته ئین نخسه شه  '''$1''' گۆ داته بوته ئین مشخصاتان، موجود نه اینت.",
        "filedelete-otherreason": "دیگرین دلیل/اضافی:",
        "filedelete-reason-otherlist": "دیگرین دلیل",
+       "filedelete-reason-dropdown": "*پاک بوتین ئی مشترکین دلیلان\n** کاپی رایٹ پُروشه گ\n** تکرارین پایل",
        "filedelete-edit-reasonlist": "پاک بوتینئ دلیلانئ ایڈیٹ",
        "filedelete-maintenance-title": "نه توانیت فایلا پاک بکنیت",
        "mimesearch": "گشتین بی اساس MIME",
        "pageswithprop-legend": "تاکدیم گۆ تاکدیمانئ خاصیتا",
        "pageswithprop-prop": "خاصیت ئی نام:",
        "pageswithprop-submit": "برا",
+       "pageswithprop-prophidden-long": "($1) ئی تچکین متنی چیهرین جزییات",
+       "pageswithprop-prophidden-binary": "($1) ئی باینری چیهرین اندازگ ئی جزییات",
+       "doubleredirects": "دوتائین تغیرمسیرئان",
+       "double-redirect-fixer": "تغیرمسیرئانی تئمیرکار",
+       "brokenredirects": "خرابین تغیرمسیر",
+       "brokenredirectstext": "جهلگین تغییرمسیرئان بئ یک ناموجودین دیمی لینک دارنت:",
        "brokenredirects-edit": "ایڈیٹ",
        "brokenredirects-delete": "پاک کورتین",
+       "withoutinterwiki": "تاکدیمان بی شه زبانئ لینک ئان",
        "withoutinterwiki-legend": "دیموند",
        "withoutinterwiki-submit": "نشان داتین",
        "fewestrevisions": "مقاله ئان گۆ کم ئین ایڈیٹ ئی اندازگ ئا",
        "wantedpages": "ضرورتین تاکدیمان",
        "wantedpages-badtitle": "نامجازین ئنوانی بی مجموعه نتایج: $1",
        "wantedfiles": "ضرورتین فایلان",
+       "wantedfiletext-nocat-noforeign": "جهلگین پایل ایستیپاده ئه به ینت مگه موجود نه انت.",
        "wantedtemplates": "ضرورتین تراشوانان",
        "mostlinked": "تاکدیمان که گیشتیر شه دیگران بئ آوان لینک داته بوته",
        "mostlinkedcategories": "تهرهان که گیشتیر شه دیگران بئ آوان لینک داته بوته",
        "mostinterwikis": "تاکدیمان گۆ بازین میان ویکی هان",
        "mostrevisions": "تاگدیمان گۆ بازێن نخسه ئان",
        "prefixindex": "موچین تاکدیمان گۆ پدوندی",
+       "prefixindex-namespace": "موچین تاکدیمان گۆ ($1 ئی پزایی ناما)",
+       "prefixindex-strip": "دیموندین نوار بئ لیست ئی تا",
        "shortpages": "گونڈ\tین تاکدیمان",
        "longpages": "تچکین تاکدیمان",
        "deadendpages": "بن بستین تاکدیمان",
+       "deadendpagestext": "جهلگین تاکدیمان گۆ هیچگوجام تاکدیما بئ  {{SITENAME}} ئی تا لینک نه دارنت.",
        "protectedpages": "قُلپ بوتگین تاکدیمان",
+       "protectedpages-indef": "فقط بی پایانین قُلپ ئان",
+       "protectedpages-cascade": "په قت آبشارین قُلپ هان",
+       "protectedpages-noredirect": "تغیرمسیرانی چیهرداتین",
+       "protectedpagesempty": "بئ انونین وختا هیچ دیمی قُلپ نه بوته.",
        "protectedpages-timestamp": "وختی برچسپ",
        "protectedpages-page": "تاکدیم",
        "protectedpages-expiry": "الاسی وخت",
        "protectedpages-unknown-timestamp": "نامئلوم",
        "protectedpages-unknown-performer": "نادروستئ ئین کار زوروک",
        "protectedtitles": "قُلپ بوته ئین ئنوانان",
+       "protectedtitles-summary": "ای تاکدیم ، لیست ئی شه آ تاکدیمان اینت که شه جۆڑ کورتین ئا قُلپ بوته انت. په قُلپ بوته ئین  ئنوانانی لیستا که شه ایڈیٹ ئا ساتیته بوته انت، بئ ایدا  [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] برویت.",
+       "protectedtitlesempty": "بئ انونین وختا هیچ ئنوانی قُلپ نه بوته گۆ ای پارامیترا.",
        "listusers": "کار زوروکانئ لڑلیست",
        "listusers-editsonly": "فقط آ کار زوروکان که ایڈیٹ کورته انت نشان ب دئ",
        "listusers-creationsort": "مرتب کورتین بئ اساس جۆڑ کورتینی تاریخا",
        "allarticles": "موچین تاکدیمان",
        "allinnamespace": "موچین تاکدیمان ($1 نامی فضا)",
        "allpagessubmit": "برا",
+       "allpagesprefix": "تاکدیمانی نمایش گۆ دیمۆندا:",
+       "allpagesbadtitle": "شمی درخواستین ئنوان ناموتبر،خالی،یا میان زبانین یا میان ویکی ئین ئنوان و یا شه خرابین لینکی است.\nممکن اینت که یک یا چینکه نویسگ داشته بیئت که نتوانن آوانا بئ تاکدیمانی ئنوانانی تا استیپاده کنن.",
        "allpages-bad-ns": "{{SITENAME}} ، «$1» ئی نامی فضا ئا نداریت.",
        "allpages-hide-redirects": "تغیرمسیرانی چیهرداتین",
        "cachedspecial-refresh-now": "دیستین آخرین ئانی.",
        "activeusers-hidesysops": "مدیرانئ چیهرداتین",
        "activeusers-noresult": "هیچ کار زوروکئ ودی نه بوت.",
        "listgrouprights": "کار زوروکین گروپانئ اختیاران",
+       "listgrouprights-key": "* <span class=\"listgrouprights-granted\">داته بوته ئین اختیاران</span>\n* <span class=\"listgrouprights-revoked\">کیپته بوته ئین اختیاران</span>",
        "listgrouprights-group": "گروپ",
        "listgrouprights-rights": "حقوق",
        "listgrouprights-helppage": "Help:گروپانئ حقوق",
        "listgrouprights-removegroup-self-all": "توانیت وتئ حسابا شه موچین گروپان پاک بکنیت",
        "listgrouprights-namespaceprotection-header": "فضای نام ئی محدودیت",
        "listgrouprights-namespaceprotection-namespace": "نامی فضا",
+       "listgrouprights-namespaceprotection-restrictedto": "مجازین هه قوق (هان) په دستکاری ئا",
        "trackingcategories": "ردیابی کنۆکین تهرهان",
        "trackingcategories-msg": "ردیابئ تهر",
        "trackingcategories-name": "پیامی نام",
        "emailpage": "کار زوروکی ایمیل",
        "defemailsubject": "{{SITENAME}} ایمیل شه کار زوروکئ نیمگا «$1»",
        "usermaildisabled": "کار زوروکئ ایمیل غیر پئال اینت",
+       "usermaildisabledtext": "شما نه توانیت ای ویکی تا په دیگه رین کارزوروکان ایمیل دیم دهیت.",
        "noemailtitle": "ایمیل ئی ادرس موجود نه اینت",
        "noemailtext": "ای کار زوروک موتبرین ایمیل ئی مشخص نه کورته.",
        "nowikiemailtext": "ای کار زوروک انتخاب کورته که شه دیگه کار زوروکان په آیی ایمیل مه آینت.",
        "watching": "بئ دیستینئ حالا...",
        "unwatching": "دیستینئ اوشتارینتین...",
        "watcherrortext": "مشکل بئ شمی واچلیستئ تنظماتانی بدل کورتینی وختا په «$1» ئا رخ دات.",
+       "enotif_reset": "نشان گذاری کورتین موچین تاکدیمانی گۆ دیسته بوته ئین ئنوانا",
        "enotif_impersonal_salutation": "کار زوروک {{SITENAME}}",
        "enotif_subject_deleted": "{{SITENAME}} تاکدیم $1 شه {{gender:$2|$2}} نیمگا پاک بوت.",
        "enotif_subject_created": "{{SITENAME}} تاکدیم $1 شه {{gender:$2|$2}} نیمگا جوڑ بوته.",
        "enotif_subject_restored": "{{SITENAME}} تاکدیم $1 شه {{gender:$2|$2}} نیمگا نوک بوت.",
        "enotif_subject_changed": "{{SITENAME}} تاکدیم $1 شه {{gender:$2|$2}} نیمگا تغیر بوت.",
        "enotif_body_intro_deleted": "$1 تاکدیم {{SITENAME}} $PAGEEDITDATE بی تاریخی شه{{gender:$2|$2}} نیمگا پاک بُوت ، $3 ئا بگیندیت .",
+       "enotif_body_intro_created": "{{SITENAME}} $1 ئی تاکدیم بئ تاریخ $PAGEEDITDATE شه {{gender:$2|$2}} ئی نیمگا جۆڑ بوت، $3 ئا په انونین نخسه ئا بگیندیت.",
        "enotif_body_intro_moved": "{{SITENAME}} $1 ئی تاکدیم بئ تاریخ $PAGEEDITDATE شه {{gender:$2|$2}} ئی نیمگا انتقال بوت، $3 ئا په انونین نخسه ئا بگیندیت.",
        "enotif_body_intro_restored": "{{SITENAME}} $1 تاکدیم بئ تاریخ $PAGEEDITDATE شه {{gender:$2|$2}} ئی نیمگا پدا جۆڑ بوت، $3 ئا په انونین نخسه ئا بگیندیت.",
        "enotif_body_intro_changed": "{{SITENAME}} $1 ئی تاکدیم بئ تاریخ $PAGEEDITDATE شه {{gender:$2|$2}} ئی نیمگا تغیر داته بوت، $3 ئا په انونین نخسه ئا بگیندیت.",
        "sp-contributions-search": "گشتین په شراکتان",
        "sp-contributions-username": "آی‌پی ادرس یا کار زوروکئ نام:",
        "sp-contributions-toponly": "فقط آخیرین نخسه ئانی  ایڈیٹ نشان داته بئنت",
+       "sp-contributions-newonly": "فقط نشان داتین آ ایڈیٹانی که دیمی جۆڑ کورتینی هستنت",
        "sp-contributions-submit": "گشتین",
        "whatlinkshere": "لینک بئ ای تاکدیما",
        "whatlinkshere-title": "تاکدیمان که گو  «$1» لینک دارنت",
        "ipbsubmit": "ای کار زوروک بسته بیئت",
        "ipbother": "دیگه وخت:",
        "ipboptions": "۲ سائت:2 hours,۱ روچ:1 day,۳ روچ:3 days,۱ هپتگ:1 week,۲ هپتگ:2 weeks,۱ ماه:1 month,۳ ماه:3 months,۶ ماه:6 months,۱ سال:1 year,بی‌پایان:infinite",
+       "ipbhidename": "چیهرداتین کار زوروکئ ناما شه ایڈیٹان و لیستا",
        "ipbwatchuser": "ای کار زوروکئ ، کارزوروکین و حبر وگپ ئی دیمانی دیستین",
+       "ipb-disableusertalk": "دیمگیری کورتین شه ایڈیٹ کورتین ئا گپ و حبر ئی تاکدیمئ شه کار زوروکئ جیندئ نیمگا وختی که آ بلاک اینت",
+       "ipb-change-block": "کار زوروکئ پدا بلاک کورتین گۆ ای تنظیماتان",
        "ipb-confirm": "بستینئ تائید کورتین",
        "badipaddress": "آی‌پی نامجازین ادرس",
        "blockipsuccesssub": "بستین گو کامیابیا انجام بوت",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] بسته بوت.<br />\nپه بلاک یا بسته بوته ئین نانی خاتیرا [[Special:BlockList|ای جاه]] ئا بگیندیت.",
+       "ipb-blockingself": "شما وترا بئ بلاک کورتین ئی حالا هستیت! آیا شما موتمئین هستیت که لۆٹیت ایرنگین کاری بکنیت؟",
        "ipb-edit-dropdown": "بلاک ئی دلیلانی ایڈیٹ کورتین",
        "ipb-unblock-addr": " $1 پاچ کورتین",
        "ipb-unblock": "کار زوروکئ یا آی پی ادرس ئی بلاک ئی پاچ کورتین",
        "createaccountblock": "حسابئ جوڑ کورتینئ قابلیت غیر پئال بوت",
        "emailblock": "ایمیل بسته بوته",
        "blocklist-nousertalk": "وتئ گپ ئی تاکدیما نتوان ایڈیٹ کورت",
+       "ipblocklist-empty": "بسته بوته ئین ئانی لیست خالی اینت.",
        "blocklink": "بلاک یا بستین",
        "unblocklink": "پاچ یا انبلاک بێت",
        "change-blocklink": "بلاک ئی تغیرداتین",
        "contribslink": "مشارکت ئان",
        "emaillink": "ایمیلی دیم داتین",
        "blocklogpage": "کورمئ بستین",
+       "blocklogentry": "«[[$1]]» ئا تا $2 بست $3",
        "unblocklogentry": "$1 ئا پاچ کورت",
        "block-log-flags-anononly": "فقط زیان نامین کار زوروکان",
        "block-log-flags-nocreate": "حسابئ جوڑ کورتینئ قابلیت غیر پئال بوت",
        "block-log-flags-angry-autoblock": "پیشرفته ئین اتوماتیکین بلاک فعال بوت",
        "block-log-flags-hiddenname": "چیهرین کار زوروکئ نام",
        "ipb_expiry_invalid": "الاسی وخت صحیح نه اینت.",
+       "ipb_expiry_temp": "چیهرین کارزوروکانی دسترسی قه تی کورتین یا بلاک باید همیشگی بیئت .",
+       "ipb_hide_invalid": "ای هیساب ئی سرکوب کورتین امکان نداریت; ای گیشتیر شه {{PLURAL:$1|یک ایڈیٹ|$1 ایڈیٹان}} داریت.",
        "ipb_already_blocked": "«$1» همی انون بسته بوته",
+       "ipb-needreblock": " $1 ئی دسترسی شه دیما بسته بسته بوته . آیا لوٹیت که آیی تنزیماتان تغیر ب دهیت؟",
        "ipb-otherblocks-header": "دیگرین {{PLURAL:$1|بلاک|بلاک ئان}}",
+       "unblock-hideuser": "په ای خاتیرا که ای کار زوروکی هیساب چیهرداته بوته شما ئه نه توانیت آیرا پاچ بکنیت.",
+       "ipb_cant_unblock": "خه تا:  $1 ئی بلاک آی ڈی ودی نه بوت . ممکن اینت که دیمتیرا پاچ بوته بیت.",
        "ip_range_invalid": "ناموتبرین آی پی ئی رینج",
+       "ip_range_toolarge": "بلاک کورتین ئی رینج ٹوُتیر شه /$1 ئا مجاز نه اینت.",
        "proxyblocker": "پروکسی ئی بلاک کنۆک",
+       "ipbnounblockself": "شما په وتی آنبلاک یا پاچ کورتین ئا اجازه نه داریت.",
        "lockdb": "مئلوماتئ بانکی قُلپ کورتین",
        "unlockdb": "مئلوماتئ بانکی قُلپئ پروشتێن",
        "lockconfirm": "هان، من جدآن لوٹین که مئلومانئ بانکا قُلپ کنین.",
        "move-page": "انتقال $1",
        "move-page-legend": "تاکدیمی انتقال",
        "movearticle": "تاکدیمی انتقال:",
+       "movenotallowed": "شما په تاکدیمانی جابجا کورتین ئی اجازه ئا نداریت.",
+       "movenotallowedfile": "شما په پایل ئانی جابجا کورتین ئی اجازه ئا نداریت.",
+       "cant-move-category-page": "شما په تهرئانی تاکدیمانی جابجا کورتین ئا اجازه  نداریت.",
+       "cant-move-to-category-page": "شما په تهری یک دیم په دیگه دیمی جابیجا کورتینا اجازه نداریت.",
        "newtitle": "گۆ نوکین ئنوانا:",
+       "move-watch": "دیستین مخسد و زهی دیمانی",
        "movepagebtn": "تاکدیمی انتقال",
        "pagemovedsub": "جابجایی گۆ کامیابیا بوت",
        "movepage-moved": "'''«$1» بئ «$2» انتقال بوت'''",
        "movepage-moved-redirect": "یک تغیرمسیر جۆڑ بوت.",
+       "movepage-moved-noredirect": "شه تغیرمسیر ئا دیمگیری بوت.",
+       "articleexists": "یک دیمی گۆ ای ناما شه دیما موجود اینت، یا نامی که شما انتخاب کورته ایت موتبر نه اینت.\nمهربانی بکنیت دیگه نامی انتخاب بکنیت.",
        "movetalk": "حبر و گپ ئی دیم جابجا بیئت",
+       "move-subpages": "گۆنڈ دیمانی انتقال (تا $1 دیم)",
+       "move-talk-subpages": "حبر وگپ ئی گۆنڈ دیمانی انتقال (تا $1 دیما)",
        "movepage-page-exists": "$1 ئی تاکدیم شه دیما موجود اینت ، نه توان که آیرا بئ اوتوماتیکین رقما جایگیر بکنت.",
        "movepage-page-moved": "$1 ئی دیم بئ $2 ئا انتکا بوت.",
+       "movepage-page-unmoved": "$1 ئی دیما نتوان که بئ  $2 ئا جابجا کورت.",
+       "movelogpage": "انتقال ئی سیاهه",
+       "movelogpagetext": "بئ جهلگا لیستی شه انتقال ئی دیمانی آته.",
        "movesubpage": "{{PLURAL:$1|گۆنڈدیم|گۆنڈدیم هان}}",
        "movenosubpage": "ای تاکدیم هیچ گۆنڈدیم ئی نداریت.",
        "movereason": "دلیل:",
        "delete_and_move": "پاک کورتین یا جابیجا",
        "delete_and_move_confirm": "هان،تاکدیم پاک بیئت",
        "delete_and_move_reason": "پاک کورتین  «[[$1]]» جابجایی امکانا",
+       "immobile-source-page": "ای دیم جابیجا ئه نه بیئت.",
+       "immobile-target-page": "انتقال ئی امکان په ای ئنوانا موجود نه اینت.",
+       "move-leave-redirect": "بئ جا ایشتین یک تغیری مسیر ئی",
        "export": "ڈن کورتین  تاکدیمانئ",
        "exportall": "ڈن کورتین موچین تاکدیمانئ",
        "exportcuronly": "فقط انونین نخسه شامل بیئت، نه موچین تاریخچه",
        "allmessagesdefault": "پیامی پیش فرضین متن",
        "allmessagescurrent": "پیامی انونین متن",
        "allmessages-filter-legend": "فیلتر",
+       "allmessages-filter": "فیلترکورتین بئ اساس ئی شخصی کورتین ئی وزیئتا:",
        "allmessages-filter-unmodified": "تغیر نه کورته",
        "allmessages-filter-all": "موچ",
        "allmessages-filter-modified": "تغیر نه کورته",
        "allmessages-filter-translate": "ترجمه",
        "thumbnail-more": "ٹُوه کورتین",
        "filemissing": "فایل وجود نداریت",
+       "thumbnail_error": "خطا بئ ناحُنی ئی جۆڑ کورتین ئی وختا: $1",
        "thumbnail_error_remote": "خطای پیام $1 :\n$2",
+       "djvu_page_error": "DjVu دیم خارج مجازین محدوده ئا",
+       "djvu_no_xml": "XML ئی فایلی ودی کورتین ئی امکان په DjVu ئی استفاده کورتین ئا وجود نداشت.",
        "thumbnail-temp-create": "نتوان که موقتین ناحُنی ئین فایلی جۆڑ کورت",
+       "thumbnail-dest-create": "نه توان که ناحُنی ئین اکس ئا بئ وتي مخصد ئی جاه تا ذخیره کورت",
        "thumbnail_image-missing": "بی نظر ئه رسیت فایل زیان بوته: $1",
        "import": "تاکدیمانێ بێ تێ کورتین",
        "importinterwiki": "بي تئ رییتین ترانس ویکی ئی",
        "import-revision-count": "$1 {{PLURAL:$1|نخسه|نخسه}}",
        "importnopages": "هیچ تاکدیمی په ایمپورت ئا نه اینت.",
        "importfailed": "ایمپورت شکست وارت: <nowiki>$1</nowiki>",
+       "importunknownsource": "بُنریچی ئی رقم مئلوم نه اینت",
        "importbadinterwiki": "بدئین انتیرویکی ئی لینک",
        "importsuccess": "بي تی ریتین یا ایمپورت بوت!",
        "import-upload": "اکس ام ال ئی دیتای بُرز کورتین",
        "importlogpage": "ایمپورت لوگ",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} وارد بوته",
-       "import-logentry-interwiki": "$1 ئا ترانس ویکی کورت",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} داخل بوته شه $2",
        "javascripttest": "جاوا اسکریپتی آزمایش",
        "javascripttest-pagetext-noframework": "ای تاکدیم په جاوا اسکریپتی آزمایشی خاتیرا ایشته بوته.",
        "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-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-info": "ای دیمی باره ئا گیشتیرین مئلومات",
        "tooltip-t-upload": "فایلی بُرز کورتین",
+       "tooltip-t-specialpages": "لیستئ شه موچین خاصین تاکدیمانی",
+       "tooltip-t-print": "ای دیمی چاپ ئی وڑ ئین نخسه",
+       "tooltip-t-permalink": "شه تاکدیما ثابت ئین لینک په ای نخسه ئا",
        "tooltip-ca-nstab-main": "تاکدیمێ محتویاتێ دیستین",
        "tooltip-ca-nstab-user": "کارزوروکین تاکدیمی دیستین",
        "tooltip-ca-nstab-media": "میدیایی تاکدیمێ دیستین",
        "tooltip-ca-nstab-category": "دیستین تهری تاکدیمی",
        "tooltip-minoredit": "ای ایڈیٹ ئا گۆنڈ ایڈیٹ نشانگ کن",
        "tooltip-save": "وتئ تغیرانا ذخیره بکنیت",
+       "tooltip-preview": "شمی تغیرانی دیم دیست، مهربانی بکنیت دیما شه تاکدیمی ذخیره کورتینا شه ای کیلی ئا استفاده بکنیت.",
+       "tooltip-diff": "شمی تغیرانی نمایش که شما بئ متن ئی تا داته ایت.",
        "tooltip-watchlistedit-normal-submit": "ئنوانانی پاک کورتین",
        "tooltip-watchlistedit-raw-submit": "واچلیست ئی اپڈیٹ",
        "tooltip-recreate": "پداجۆڑ کورتین تاکدیمی نه دیستین ایشیرا که ای تاکدیم دیما پاک بوته",
        "tooltip-upload": "بُرز کورتینی شرو",
+       "tooltip-rollback": "«بیئرگردینتین» ای دیمی آخیرئین ایڈیٹ کنۆک ئی ایڈیٹ(هان) گۆ یک کلیک ئا.",
        "tooltip-preferences-save": "تنظیماتانی ذخیره کورتین",
        "tooltip-summary": "خلاصه ئا داخل بکنیت",
        "anonymous": "زیان نامین {{PLURAL:$1|کار زوروک|کار زوروکان}} شه {{SITENAME}}",
        "spamprotectiontitle": "سپم ئانی فیلترینگ",
        "spambot_username": "میدیا ویکی ئی تمیزکاری شه سپم هان",
        "spam_reverting": "بیئرگردینتین آخیرین نخسه ئی که بئ $1 ئا لینک نداریت.",
+       "spam_deleting": "موچین نخسه ئان که گۆ\t  $1 ئا لینک انتت، بئ پاک کورتین حالا",
+       "simpleantispam-label": "انتی-سپم ئی چیک .\nای قسمت ئا پُر  '''مه کنیت'''!",
        "pageinfo-title": "مئلومات په «$1» ئا",
        "pageinfo-header-basic": "بُنادین مئلومات",
        "pageinfo-header-edits": "تاریخچه ئی ایڈیٹ",
        "pageinfo-header-restrictions": "ساتیتین تاکدیمئ",
        "pageinfo-header-properties": "تاکدیمی خاص ئین ئان",
        "pageinfo-display-title": "ئنوان ئی نشان داتین",
+       "pageinfo-default-sort": "پیش فرضین مرتب کنوکین کیلی",
        "pageinfo-length": "تاکدیمی حجم (بایٹ)",
        "pageinfo-article-id": "تاکدیمی آی دی",
        "pageinfo-language": "تاکدیمی محتوایی زبان",
        "pageinfo-watchers": "تاکدیمی دیدار کنۆکانی اندازگ",
        "pageinfo-few-watchers": "کمتیر شه  $1 {{PLURAL:$1| دیدار|دیدار}}",
        "pageinfo-redirects-name": "تغیرمسیرانی اندازگ په ای تاکدیما",
+       "pageinfo-subpages-name": "ای گۆنڈ دیم ئی تاکدیمانی اندازه گ",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|تغییرمسیر|تغییرمسیر}}; $3 {{PLURAL:$3|غیرتغییرمسیر|غیرتغییرمسیر}})",
        "pageinfo-firstuser": "ای تاکدیمئ جوڑ کنوک",
        "pageinfo-firsttime": "ای تاکدیمئ جوڑ کورتینی وخت",
        "pageinfo-toolboxlink": "تاکدیمئ مئلومات",
        "pageinfo-redirectsto": "تغییر مسیر بی",
        "pageinfo-redirectsto-info": "مئلومات",
+       "pageinfo-contentpage": "هیساب بوته بئ ئنوان مهتوائین دیمی",
        "pageinfo-contentpage-yes": "هان",
        "pageinfo-protect-cascading-yes": "هان",
        "pageinfo-category-info": "تهری مئلومات",
        "pageinfo-category-pages": "تاکدیمانی نمبر",
+       "pageinfo-category-subcats": "گۆنڈ تهرئانی اندازه گ",
        "pageinfo-category-files": "فایلانی اندازگ",
+       "markaspatrolleddiff": "گشت وارته ئین ئانی برچسپ جتین",
+       "markaspatrolledtext": "بئ دیما گشت وارته ئین ئی برچسپ بجن",
+       "markedaspatrolled": "گشت وارته ئی برچسپ جته بوت",
+       "markedaspatrolledtext": "بئ انتخاب بوته ئین نخسه شه  [[:$1]] ئا گشت وارته ئین مارک جه ته بوت.",
+       "rcpatroldisabled": "آخیرئین تغیرائانی مارک جه تین غیرپئال اینت",
+       "markedaspatrollederror": "گشت وارته ئی برچسپ جته نه بوت",
+       "markedaspatrollederrortext": "یک نخسه ئی را نشانی بکنیت تا مارک بۆارت.",
+       "markedaspatrollederror-noautopatrol": "شما توانیت وتي تغیرائانه مارک بجنیت.",
+       "markedaspatrollednotify": "ای تغیر بئ $1 سرا مارک وارت.",
+       "markedaspatrollederrornotify": "گشت وارته ئی برچسپ جتین ناکام ات.",
        "patrol-log-page": "گشتئ سیاه چال",
+       "patrol-log-header": "ای سیاهه شه گشت وارته ئین ایڈیٹ ئان است.",
+       "log-show-hide-patrol": "$1 گشت جنوکین سیاهه",
+       "deletedrevision": "$1 قدیمی پاک بوته ئین نخسه ئی است",
+       "filedeleteerror-short": "خطا بئ فایلی پاک کورتین: $1",
+       "filedeleteerror-long": "بی پدا  پاک کورتین ئی وختا خطا رخ دات:\n\n$1",
        "previousdiff": "→دیمتیرین ئی فرق",
        "nextdiff": "نۆکتیرین ئی فرق ←",
+       "mediawarning": "'''هشدار''': ای فایل ممکن اینت که شه خراب ئین کودئان داشته بئیت .\nگۆ آوانی اجرا کورتین ئا ممکن اینت که بئ شمی کمپیوترا تاوان برسیت.",
+       "thumbsize": "ناهُنی ئین بند ئی اندازه گ:",
        "widthheightpage": "$1×$2، $3 {{PLURAL:$3|تاکدیم|تاکدیم}}",
        "file-info": "فایلئ اندازه گ: $1، نوع  MIME $2",
        "file-info-size": "<span dir=\"ltr\">$1 × $2</span> پیکسل، فایلئ اندازه گ: $3، نوع MIME فایلئ: $4",
        "file-info-size-pages": "<span style=\"direction:ltr\">$1 × $2</span> نقطه، فایلئ حجم: $3، نوع MIME فایل: $4، $5 تاکدیم",
+       "file-nohires": "گیشتیرین تفکیک پذیری بئ دسترس ئا نه اینت.",
+       "svg-long-desc": "اس‌وی‌جی ئی فایل، گۆ\t ابئاد <span dir=\"ltr\">$1 × $2</span> پیکسل، فایل اندازه گ: $3",
+       "svg-long-error": "SVG ئی فایل ناجایز اینت: $1",
        "show-big-image": "اورجینال ئین فایل",
+       "show-big-image-preview": "ای دیم دیست ئی اندازه گ: $1.",
        "show-big-image-other": "دیگرین {{PLURAL:$2|کیفیت|کیفیت‌هان}}: $1.",
        "show-big-image-size": "<span dir=\"ltr\">$1 × $2</span> پیکسل",
        "file-info-gif-looped": "چرخش‌دار",
        "file-info-png-looped": "چرخش‌دار",
        "file-info-png-repeat": "$1 {{PLURAL:$1|وار|وار}} پخش بوت",
        "file-info-png-frames": "$1 {{PLURAL:$1|قاب|قاب}}",
+       "newimages": "نوکین فایلانی البوم",
+       "newimages-summary": "ای تاکدیم خاص په آخیرئین فایلان اینت که بُرز بوته انت.",
        "newimages-legend": "فیلتر",
+       "newimages-label": "فایلی نام (یا قسمتی شه آیی):",
+       "newimages-showbots": "نشان داتین بُرز بوته ئین گۆ روبات ئا",
        "noimages": "چیزی په دیستینا نه اینت.",
        "ilsubmit": "گشتین",
        "bydate": "شه تاریخی رُوگا",
        "sunday-at": "یک‌شنبی $1",
        "yesterday-at": "زئ  بی $1",
        "metadata": "فرادیتا",
+       "metadata-expand": "تپسیلی ئین مالوماتی نشان داتین",
+       "metadata-collapse": "تپسیلی ئین مالوماتی چیهرداتین",
+       "metadata-fields": "ای پیامی تا اکس ئی میتادیتا نشان داته بوته و وختی که میتادیتا ئی لیست جم بیئت هم نشان داته ئه بیئت . دیگه موارید تانا وختی نشان داته ئه بیئنت که جدول پاچ بیئت.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "گوور، عرض",
        "exif-imagelength": "تَچکي",
+       "exif-bitspersample": "نقطه بئ هر جز ئی تا",
+       "exif-compression": "پرینچیتینوکین شیما",
        "exif-photometricinterpretation": "ٹیک ئانی ترکیب",
        "exif-orientation": "نیمگ ، جهت",
+       "exif-samplesperpixel": "اجزائانی اندازه گ",
+       "exif-planarconfiguration": "دیتا ئی آرایش",
+       "exif-ycbcrsubsampling": "جه هل نمونگ نسبت  Y بئ C",
        "exif-ycbcrpositioning": "Y و C موقیعتان",
+       "exif-xresolution": "افقی ئین تفکیک پذیری",
+       "exif-yresolution": "عمودین تفکیک پذیری",
+       "exif-stripoffsets": "اکس ئی دیتای جاگه",
+       "exif-rowsperstrip": "ردیپ هانی اندازگ بئ هر نواری تا",
+       "exif-stripbytecounts": "بایت بئ هر پریننچیته بوته ئین نواری تا",
+       "exif-jpeginterchangeformat": "جابه‌جایی نسبت بئ JPEG SOI",
+       "exif-jpeginterchangeformatlength": "بایٹ  JPEG ئی دیتایی",
+       "exif-whitepoint": "سپیتین ٹیکئ رنگینی",
+       "exif-primarychromaticities": "اولویتانی رنگیری",
+       "exif-ycbcrcoefficients": "ماتریس ئی زرایب تبدیل رنگین په زایی",
+       "exif-referenceblackwhite": "سیاه و سپیتین مرجه ئانی اندازهگ",
+       "exif-datetime": "فایلی تغیر ئی وخت و تاریخ",
        "exif-imagedescription": "اکسئ ئنوان",
+       "exif-make": "کامره ئی جۆڑ کنۆکین شرکت",
+       "exif-model": "کامره ئی موڈیل",
+       "exif-software": "استفاده بوته ئین ساپٹ ایر",
        "exif-artist": "اکس گيروک/هنرمند",
+       "exif-copyright": "کاپی رایٹ ئی واوُند",
+       "exif-exifversion": "exif ئی نخسه",
+       "exif-flashpixversion": "Flashpix ئی پُشتیوانی بوته ئین نخسه",
+       "exif-colorspace": "رنگانئ فضا",
+       "exif-componentsconfiguration": "هریک شه مووله په ئانی مانا",
+       "exif-compressedbitsperpixel": "اکس ئی پشرده ئی هالت",
        "exif-pixelydimension": "اکسئ گۆر",
        "exif-pixelxdimension": "اکسئ بُرزی",
        "exif-usercomment": "کار زوروکئ توضیحات",
+       "exif-relatedsoundfile": "مربوتین توارین پایل",
+       "exif-datetimeoriginal": "دیتائانی ودئ بوتین ئی تاریخ و وخت",
+       "exif-datetimedigitized": "دیجیتالی بوتین ئی وخت و تاریخ",
+       "exif-subsectime": "تاریخ و وختی کسر سانیه",
+       "exif-subsectimeoriginal": "اسلی ین وختی کسر سانیه",
+       "exif-subsectimedigitized": "دیجیتالین وختی کسر سانیه",
+       "exif-exposuretime": "نوردهگی وخت",
+       "exif-exposuretime-format": "$1 ثانیه ($2)",
        "exif-fnumber": "اف ئی نمبر",
        "exif-exposureprogram": "نوردهئ پروگرام",
        "exif-spectralsensitivity": "طیفئ ئین حساسیت",
        "exif-aperturevalue": "دیافراگم آپکس ئی اندازه گ",
        "exif-brightnessvalue": "آپکس روشنائی",
        "exif-exposurebiasvalue": "نوردهئ خطا",
+       "exif-maxaperturevalue": "ڈگاری پراخی هد اکسه ر",
        "exif-subjectdistance": "سوژه ئی فاصله",
+       "exif-meteringmode": "روشنایی سنجیش هالت",
        "exif-lightsource": "نور ئی منشا",
        "exif-flash": "پلاش",
+       "exif-focallength": "ئدسی ئی کانونین پاسیله",
        "exif-subjectarea": "جسم ئی مساحت",
        "exif-flashenergy": "پلاش ئی قدرت",
+       "exif-focalplanexresolution": "تفکیک‌پذیری X کانونی دیم",
+       "exif-focalplaneyresolution": "تفکیک‌پذیری Y کانونین دیم",
+       "exif-focalplaneresolutionunit": "کانونی دیمی تپکیک زورتین ئی واهید",
        "exif-subjectlocation": "سوژه ئی مکان",
+       "exif-exposureindex": "نوردهگی شاخس",
+       "exif-sensingmethod": "هسگری روش",
        "exif-filesource": "فایلئ منشا",
+       "exif-scenetype": "سه هنه ئی ره کم",
+       "exif-customrendered": "سه پاریشی ئی اکس ئی زوهور",
+       "exif-exposuremode": "نوردهگی هالت",
+       "exif-whitebalance": "سپیت ئین رنگی ته هادول (white balance)",
+       "exif-digitalzoomratio": "دیجیتالین نه زیننکی ئی نیسبت",
+       "exif-focallengthin35mmfilm": "کانونین پاسیله په ۳۵ میلی میترین پیلم ئا",
+       "exif-scenecapturetype": "سکن ئی کاپی تور ئی ره قم",
+       "exif-gaincontrol": "سه هنه ئی تنزیم",
        "exif-contrast": "کنتراست",
+       "exif-saturation": "رنگئ بَزئ",
+       "exif-sharpness": "وضوح",
+       "exif-devicesettingdescription": "دستگاه ئی تنظیماتانی شرح",
+       "exif-subjectdistancerange": "سوژه پاسیله مهدوده",
+       "exif-imageuniqueid": "اکس ئی یونیک ئین آی ڈی",
+       "exif-gpsversionid": "جی‌پی‌اس ئی نخسه برچسپ",
+       "exif-gpslatituderef": "جوگراپیایین گۆور شمالی یا جنوبی",
+       "exif-gpslatitude": "جوگرافیایی ئین گۆر",
+       "exif-gpslongituderef": "جوگراپیایین تچکی روچ درات یا روچ کپت",
+       "exif-gpslongitude": "جوگرافیایی ئین تچکی",
+       "exif-gpsaltituderef": "ارتقائی مرجئهی ٹیک",
+       "exif-gpsaltitude": "بُرزئ",
+       "exif-gpstimestamp": "جی‌پی‌اس ئی وخت (اتمی ئین سائت)",
+       "exif-gpssatellites": "ایستیپاده بوته ئین ماهواره په اندازه گیری ئا",
+       "exif-gpsstatus": "گیرۆکی وزی ئت",
+       "exif-gpsmeasuremode": "اندازه گیری هالت",
+       "exif-gpsdop": "اندازه گیری ئی د قت",
+       "exif-gpsspeedref": "سورئت ئی یونی\tٹ",
+       "exif-gpsspeed": "جی پی اس ئی گیروکی سور ئه ت",
+       "exif-gpstrackref": "مرجه په هه رکت ئی نیمگا",
+       "exif-gpstrack": "هه رکت ئی نیمگ",
+       "exif-gpsimgdirectionref": "مرجه په اکس ئی نیمگا",
+       "exif-gpsimgdirection": "اکس ئی نیمه گ",
+       "exif-gpsmapdatum": "جیودیستک ئی نخشه برداری ئی مه لومات",
+       "exif-gpsdestlatituderef": "مرجه ئی په جوگراپیایین گۆور مخسدا",
+       "exif-gpsdestlatitude": "جوگراپیایی مخسدی گۆور",
+       "exif-gpsdestlongituderef": "مرجه ئی په جوگراپیایین تچکی مخسدا",
+       "exif-gpsdestlongitude": "مخسه د ئی جوغراپیائی تچکی",
+       "exif-gpsdestbearingref": "مرجه ئی په مخسدی نیمگا",
+       "exif-gpsdestbearing": "مخسدی نیمگ",
+       "exif-gpsdestdistanceref": "مرجه په پاسیله تا مخسدا",
+       "exif-gpsdestdistance": "پاسیله تا مخسه د ئا",
+       "exif-gpsprocessingmethod": "GPS ئی پروسیس ئی میتود ئی نام",
        "exif-gpsareainformation": "جی‌پی‌اس ئی ناحیه ئی نام",
        "exif-gpsdatestamp": "جی پی اس ئی تاریخ",
+       "exif-gpsdifferential": "جی‌پی‌اس کمی ئی تسهی کورتین",
+       "exif-jpegfilecomment": "JPEG ئی فایل ئی توزی ئات",
+       "exif-keywords": "کیبورد",
+       "exif-worldregioncreated": "منتیکه شه جهانا که اکس آدا گیپته بوته",
+       "exif-countrycreated": "ملکی نام که اکس آدا گیپته بوته",
+       "exif-countrycodecreated": "ملکی کود که اکس آدا گیپته بوته",
+       "exif-provinceorstatecreated": "ولایت یا ایالت که اکس آد گیپته بوته",
+       "exif-citycreated": "شاری که اکس آدا گیپته بوته",
+       "exif-sublocationcreated": "شاری یک بخش که اکس آدا گیپته بوته",
        "exif-worldregiondest": "جهانئ منطقه نشان داته بوته",
        "exif-countrydest": "مُلک نشان داته بوته",
        "exif-countrycodedest": "مُلکی کود نشان داته بوته",
        "exif-citydest": "شار نشان داته بوته",
        "exif-sublocationdest": "شاری یک بخش نشان داته بوته",
        "exif-objectname": "گۆنڈین ئینوان",
+       "exif-specialinstructions": "خاسین دستورئان",
        "exif-headline": "ئنوان",
+       "exif-credit": "امتیاز يی واوند/پیش داروک",
        "exif-source": "منشا",
+       "exif-editstatus": "اکسی تهریریه ئین وزی ئت",
+       "exif-urgency": "پوریت",
+       "exif-fixtureidentifier": "نشریه ئی ستون ئی نام",
+       "exif-locationdest": "اکس بوته ئین مئل",
+       "exif-locationdestcode": "اکس بوته ئین مئلی کود",
+       "exif-objectcycle": "ای روچی وخت که ای می\tڈیا په آیی بی نه زر گیپته بوته",
+       "exif-contact": "ته ماس ئی مه لومات",
        "exif-writer": "نویسوک",
        "exif-languagecode": "زبان",
        "exif-iimversion": "IIM ئی نخسه",
        "exif-iimcategory": "تهر",
        "exif-iimsupplementalcategory": "تکمیلین تهر ئان",
+       "exif-datetimeexpires": "ایستیپاده شه تاریخ ئا",
        "exif-datetimereleased": "منتشر بوته بی",
+       "exif-originaltransmissionref": "اسلی ئین مئل ئی جابجایی کود",
+       "exif-identifier": "شناسگ",
+       "exif-lens": "استفاده بوته ئین لینز",
+       "exif-serialnumber": "کامره ئی سریال نمبر",
+       "exif-cameraownername": "کامره ئی واوُند",
        "exif-label": "برچسب",
+       "exif-datetimemetadata": "دی\tٹائی آخیرئین تغیرات",
+       "exif-nickname": "اکس ئی غیررسمی ئین نام",
+       "exif-rating": "امتیاز (شه 5)",
+       "exif-rightscertificate": "هه قوق ئی مدیریت ئی سه ر تیپی کی\tٹ",
+       "exif-copyrighted": "کاپی رایٹ ئی وزیئت",
+       "exif-copyrightowner": "کاپی رایٹ ئی واوُند",
+       "exif-usageterms": "استفاده ئی شرایط",
+       "exif-webstatement": "آنلاین کاپی رایت ئی جار",
+       "exif-originaldocumentid": "یونیک آی ڈی شه اسلین سندئان",
+       "exif-licenseurl": "انترنتی ادرس په کاپی رایٹی جواز ئا",
+       "exif-morepermissionsurl": "جایگزین ئین مالوماتانی جواز ئان",
+       "exif-attributionurl": "پدا ایستیپاده ئی وختا، مهربانی بکنیت لینک به دهیت په",
+       "exif-preferredattributionname": "پدا ایستیپاده ئی وختا، مهربانی بکنیت ائتیبار به دهیت په",
+       "exif-pngfilecomment": "PNG ئی فایلی شرح",
+       "exif-disclaimer": "تکذیب‌نامه",
+       "exif-contentwarning": "محتوایی هشدار",
+       "exif-giffilecomment": "GIF ئی فایلی شرح",
+       "exif-intellectualgenre": "مورید ئی رقم",
+       "exif-subjectnewscode": "موضو ئی کود",
+       "exif-scenecode": "IPTC سکن ئی کوڈ",
+       "exif-event": "هالت ئی که بئ اکس ئی تا نشان داته بوته",
+       "exif-organisationinimage": "نشان داته بوته ئین سازمان",
+       "exif-personinimage": "نشان داته بوته ئین شخس",
+       "exif-originalimageheight": "اکس ئی بُرزی دیم شه بوریتین ئا",
+       "exif-originalimagewidth": "اکس ئی گوور دیم شه بوریتین ئا",
+       "exif-compression-1": "غیرپشورده",
+       "exif-compression-3": "سی‌سی‌آی‌تی‌تی ئی نمبرئانی ۳ گروپ کودگذاری کورتین",
+       "exif-compression-4": "سی‌سی‌آی‌تی‌تی ئی نمبرئانی ۴ گروپ کودگذاری کورتین",
        "exif-copyrighted-true": "کاپی رایت بوت",
+       "exif-copyrighted-false": "کاپی رایٹ ئی وزی ئت ته ئین نه بوته",
        "exif-unknowndate": "نامئلومین تاریخ",
        "exif-orientation-1": "نورمال",
+       "exif-orientation-2": "اوپۆکی ئین پۆشت و دیم بوته ئین",
        "exif-orientation-3": "۱۸۰ درجه چرخ وارته",
+       "exif-orientation-4": "ئۆمودی ئین پۆشت و دیم بوته ئین",
+       "exif-orientation-8": "۹۰° سائتگرد چاوارته",
+       "exif-planarconfiguration-1": "په زورین قالب",
+       "exif-planarconfiguration-2": "دو دیمین پورمت",
+       "exif-colorspace-65535": "تنزیم نه بوته",
+       "exif-componentsconfiguration-0": "وجود نداریت",
+       "exif-exposureprogram-0": "تئریپ نه بوته",
        "exif-exposureprogram-1": "دستی",
        "exif-exposureprogram-2": "عادی ئین پروگرام",
+       "exif-exposureprogram-3": "دیاپراگم ئی اولویت",
        "exif-exposureprogram-4": "شاتر ئی اولویت",
        "exif-subjectdistance-value": "$1 متر",
        "exif-meteringmode-0": "نامئلوم",
        "exif-lightsource-0": "نامئلوم",
        "exif-lightsource-1": "روچی روشنائی",
        "exif-lightsource-2": "فلورسانت",
+       "exif-lightsource-3": "تنگستن (نور بی گرمی ئا)",
        "exif-lightsource-4": "پلاش",
        "exif-lightsource-9": "جوانین هوا",
        "exif-lightsource-10": "جمری ئین آسمان",
        "exif-lightsource-255": "نور ئی دیگه منشا ئان",
        "exif-flash-fired-0": "پلاش جته نه بوت",
        "exif-flash-fired-1": "گو پلاش جتینا",
+       "exif-flash-return-2": "انئی کاسین روشنایی ودی نه بوت",
+       "exif-flash-return-3": "انئی کاسین روشنایی ودی نه بوت",
+       "exif-flash-mode-1": "اجبارین پلاش جتین",
+       "exif-flash-mode-2": "دیمگیری شه اجبارین پلاش جتین ئا",
+       "exif-flash-mode-3": "اوتوماتیکین هاله ت",
+       "exif-flash-function-1": "پلاش ئی ئملکرد نه داریت",
+       "exif-flash-redeye-1": "چمانی سۆر ئی زیان کورتین",
+       "exif-focalplaneresolutionunit-2": "اینچ",
+       "exif-sensingmethod-1": "ته ریپ نه بوته",
+       "exif-sensingmethod-2": "نائیه ئی رنگین سنسور یک تراشه ئین",
+       "exif-sensingmethod-3": "نائیه ئی رنگین سنسور دو تراشه ئین",
+       "exif-sensingmethod-4": "نائیه ئی رنگین سنسور سه تراشه ئین",
+       "exif-sensingmethod-5": "نائیه ئی رنگین سنسور ترتیب",
+       "exif-filesource-3": "اکاسی دیجیتالین کامره",
+       "exif-scenetype-1": "اکس دیم په دیم اکاسی بوته",
        "exif-customrendered-0": "عادین ظهور",
        "exif-customrendered-1": "سفارشین ظهور",
        "exif-exposuremode-0": "اوتوماتیکین نوردهی",
        "exif-exposuremode-1": "دستئ نور دهی",
+       "exif-exposuremode-2": "Auto bracket",
+       "exif-whitebalance-0": "سپیت ئین رنگی ته هادل ئی اوتوماتیکین تنزیم (white balance)",
+       "exif-whitebalance-1": "سپیت ئین رنگی ته هادل ئی دستی ئین تنزیم (white balance)",
        "exif-scenecapturetype-0": "سٹاندارت",
        "exif-scenecapturetype-1": "چم چران",
        "exif-scenecapturetype-2": "پرتره",
        "exif-scenecapturetype-3": "شپئ چم گیند",
        "exif-gaincontrol-0": "هیچ‌گوجام",
+       "exif-gaincontrol-1": "دریاپتی هدی آقلین باز کورتین",
+       "exif-gaincontrol-2": "دریاپتی هدی آکسرین باز کورتین",
+       "exif-gaincontrol-3": "هه دی آقل گیپتی نوکی کم کورتین",
+       "exif-gaincontrol-4": "هه دی اکسر گیپتی نوکی کم کورتین",
        "exif-contrast-0": "نورمال",
        "exif-contrast-1": "نرم",
        "exif-contrast-2": "سک",
        "exif-subjectdistancerange-1": "ماکرو",
        "exif-subjectdistancerange-2": "نزینک گیند",
        "exif-subjectdistancerange-3": "دور گیند",
+       "exif-gpslatitude-n": "جوگراپیایی شمالی گ\tۆور",
+       "exif-gpslatitude-s": "جوگراپیایی جنوبی گ\tۆور",
+       "exif-gpslongitude-e": "جوگراپیایی روچ درات ئی تچکی",
+       "exif-gpslongitude-w": "جوگراپیایی روچ کپت ئی تچکی",
+       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|میتر|میتر}} بُرزتیر شه دریابی روگا",
+       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|میتر|میتر}} جهلتیر شه دریابی روگا",
+       "exif-gpsstatus-a": "بی اندازه گیری هالا",
+       "exif-gpsstatus-v": "اندازه گ ئی موقایسه گیری",
+       "exif-gpsmeasuremode-2": "دو بوئدین اندازه گیری",
+       "exif-gpsmeasuremode-3": "۳ بوئدین اندازه گیری",
+       "exif-gpsspeed-k": "کیلومیتر بئ سائت تا",
        "exif-gpsspeed-m": "مایل بئ سائت",
        "exif-gpsspeed-n": "گرین",
        "exif-gpsdestdistance-k": "کیلومتر",
        "exif-objectcycle-p": "تانا دیگرونواشام",
        "exif-objectcycle-b": "سوب و نواشام",
        "exif-gpsdirection-t": "جوانین نیمگ",
+       "exif-gpsdirection-m": "آهنربائین نیمگ",
+       "exif-ycbcrpositioning-1": "مانجین بوتگ",
+       "exif-ycbcrpositioning-2": "اشتراکی",
+       "exif-dc-contributor": "شراکت کنۆک ئان",
        "exif-dc-date": "تاریخ(ئان)",
        "exif-dc-publisher": "ناشر",
+       "exif-dc-relation": "مربوتین میڈیاهان",
        "exif-dc-rights": "حقوق",
+       "exif-dc-source": "بُنزهی ئین میڈیا",
+       "exif-dc-type": "میڈیایی رقم",
+       "exif-rating-rejected": "رد بوته ئین",
+       "exif-isospeedratings-overflow": "مزنتیر شه ۶۵۵۳۵",
+       "exif-iimcategory-ace": "هنر، فرهنگ و سرگرمی",
+       "exif-iimcategory-clj": "جنایت و قانون",
+       "exif-iimcategory-dis": "به لا و پیش آمدئان",
+       "exif-iimcategory-fin": "اقتصاد و تجارت",
        "exif-iimcategory-edu": "یادگیپتین",
        "exif-iimcategory-evn": "محیط زیست",
        "exif-iimcategory-hth": "سلامت",
+       "exif-iimcategory-hum": "بشر ئی علاقه",
        "exif-iimcategory-lab": "کار",
+       "exif-iimcategory-lif": "زنده گی ره قم و بیکاری وختان",
        "exif-iimcategory-pol": "سیاست",
        "exif-iimcategory-rel": "مذهب و باور",
        "exif-iimcategory-sci": "علم و تخنیک",
        "exif-urgency-normal": "ئادی ($1)",
        "exif-urgency-low": "کم ($1)",
        "exif-urgency-high": "باز ($1)",
+       "exif-urgency-other": "تاریپ بوته ئین اولویت شه ($1) کارزوروک ئی نیمه گا",
        "namespacesall": "موچ",
        "monthsall": "موچ",
        "confirmemail": "ایمیل ادرسی تائید کورتین",
+       "confirmemail_noemail": "شما بئ وتی [[Special:Preferences|کارزوروکی تنزیماتئ ]] دیمی تا موته برین ایمیل ادرس ئی وارد نه کورته ایت.",
+       "confirmemail_send": "پُست‌کورتینن یک تاییدی کود ئی",
+       "confirmemail_sent": "یک تاییدین ایمیل ئی دیم داته بوت.",
+       "confirmemail_needlogin": "په وتي ایمیل ئی تائید بوتین ئا خاتیرا په $1 ئا زه رورت داریت.",
+       "confirmemail_success": "شمی ایمیل ادرس تائید بوته.\n\nهمی انون توانیت که [[Special:UserLogin|سایٹ تا داخل به ئیت]] و شه ویکی ئا لیزت به ریت.",
+       "confirmemail_loggedin": "شمی ایمیل ادرس انون تائید بوت.",
+       "confirmemail_subject": "شمی ایمیل ادرس ئی تأییدی {{SITENAME}}",
+       "confirmemail_body": "یک نپر، احتمالاً که شما وت ، شه $1 ئی آی پی ادرس ئا یک کار زوروکئ حساب گۆ «$2» ئی ناما بئ ای ایمیل ادرس ئی تا بئ  {{SITENAME}} ئی تا جۆڑ کورته است.\n\nپه تأیید کورتین ایشی  که ای حساب واقئاً بئ شما مربوت اینت و هم پئال کورتین {{SITENAME}} ایمیلی امکاناتانی خاتیرا ، جهلگی لینک ئا بئ وتي بروزیر ئی تا پاچ بکنیت:\n\n$3\n\nاگر شما ای کار زوروکین حساب ئا راجستر *نه کورته ئیت*، مهربانی بکنیت جهلگی لینک \nئی پدا بگیرێت تا که ای ایمیل ادرس ئی تایید بند بێت:\n\n$5\n\nای تاییدی ئی کوڈ بئ تاریخ $4 ئا شه بین ئه رۆت.\n</div>",
+       "confirmemail_body_changed": "یک نپر، احتمالاً که شما وت ، شه $1 ئی آی پی ادرس ئا یک کار زوروکئ حساب گۆ «$2» ئی ناما بئ ای ایمیل ادرس ئی تا بئ  {{SITENAME}} ئی تا تغیر داته است.\n\nپه تأیید کورتین ایشی  که ای حساب واقئاً بئ شما مربوت اینت و هم پئال کورتین {{SITENAME}} ایمیلی امکاناتانی خاتیرا ، جهلگی لینک ئا بئ وتي بروزیر ئی تا پاچ بکنیت:\n\n$3\n\nاگر شما ای کار زوروکین حساب ئا راجستر *نه کورته ئیت*، مهربانی بکنیت جهلگی لینک \nئی پدا بگیرێت تا که ای ایمیل ادرس ئی تایید بند بێت:\n\n$5\n\nای تاییدی ئی کوڈ بئ تاریخ $4 ئا شه بین ئه رۆت.",
+       "confirmemail_body_set": "یک نپر، احتمالاً که شما وت ، شه $1 ئی آی پی ادرس ئا یک کار زوروکئ حساب گۆ «$2» ئی ناما بئ ای ایمیل ادرس ئی تا بئ  {{SITENAME}} نشانی ئا تغیر دات.\n\nپه تأیید کورتین ایشی  که ای حساب واقئاً بئ شما مربوت اینت و هم پئال کورتین {{SITENAME}} ایمیلی امکاناتانی خاتیرا ، جهلگی لینک ئا بئ وتي بروزیر ئی تا پاچ بکنیت:\n\n$3\n\nاگر شما ای کار زوروکین حساب ئا راجستر *نه کورته ئیت*، مهربانی بکنیت جهلگی لینک \nئی پدا بگیرێت تا که ای ایمیل ادرس ئی تایید بند بێت:\n\n$5\n\nای تاییدی ئی کوڈ بئ تاریخ $4 ئا شه بین ئه رۆت.",
+       "confirmemail_invalidated": "ایمیل ادرس ئی تاییدی لگ بوت",
+       "invalidateemail": "ایمیل ادرس ئی لگ کورتین",
+       "scarytranscludedisabled": "[ترانسکلۆدینگ میان ویکی ئی په ئال نه اینت]",
+       "scarytranscludetoolong": "[انترنتی ئین ادرس (URL) شه اندازه ئا تچکتیر ات]",
+       "deletedwhileediting": "'''هشدار''': ای دیم پدا شه آیی که شما آیی ایڈیٹ ئا شرو کورته ئیت، پاک بوته!",
+       "confirmrecreate": "کار زوروک [[User:$1|$1]] ([[User talk:$1|گپ و هبر]]) ای مه قاله ئا پد شه آیی که شوما بئ آیی ایڈی\tٹ کورتین ئا شورو کورتیت ای دلیل ئا پاک کورت :\n: ''$2''\nمهربانی بکنیت تائید بکنیت که شوما ئه لو\tٹیت ای مه قاله ئا پدا جۆڑ بکنیت .",
+       "confirmrecreate-noreason": "کار زوروک [[User:$1|$1]] ([[User talk:$1|گپ و هبر]]) ای دیما پد شه شمئ ایڈی\tٹ ئی شرو ئا پاک کورت. مهربانی بکنیت تائید بکنیت که لو\tٹیت ای دیما پدا جۆڑ بکنیت.",
        "recreate": "پدا جۆڑ کورتین",
        "confirm_purge_button": "قبول داشتین",
+       "confirm-purge-top": "ای دیمی چیهرین هاپیزه ئی پاک کورتین ئا تائید ئه کنیت؟",
        "confirm-watch-button": "قبول داشتین",
+       "confirm-watch-top": "ای دیم بئ شمی دیدارلیست ئا ایزاپه بیئت؟",
        "confirm-unwatch-button": "قبول داشتین",
+       "confirm-unwatch-top": "ای دیم شه شمئ دیدارلیست ئا پاک بیئت؟",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "&rarr; دیمتیری تاکدیم",
        "imgmultipagenext": "بئدین تاکدیم &larr;",
        "table_pager_prev": "دیمتیرین تاکدیم",
        "table_pager_first": "اولین تاکدیم",
        "table_pager_last": "آخرین تاکدیم",
+       "table_pager_limit": "$1 ئی نشان داتین بئ هر دیمئ تا",
+       "table_pager_limit_label": "مواریدئانی اندازه گ بی هر دیمی تا :",
        "table_pager_limit_submit": "برا",
+       "table_pager_empty": "هیچ نتیجه",
+       "autosumm-blank": "تاکدیما خالی کورت",
+       "autosumm-replace": "تاکدیمی جابجایی گۆ '$1'",
+       "autoredircomment": "جهت یی تغیر بئ [[$1]]",
+       "autosumm-new": "نوکین دیمی گۆ «$1» ئا جۆڑ کورت",
+       "autosumm-newblank": "خالی ئین دیمی جۆڑ بوت",
+       "watchlistedit-normal-title": "دیدارلیست ئی ایڈیٹ کورتین",
+       "watchlistedit-normal-legend": "ئینوانانی پاک کورتین شه دیدارلیست ئا",
+       "watchlistedit-normal-submit": "ئنوانانی پاک کورتین",
+       "watchlistedit-normal-done": "$1 ئینوان شه شمی دیدارلیست ئا پاک  {{PLURAL:$1|بوت|بوتنت}}:",
+       "watchlistedit-raw-title": "واچلیستئ آمگین لیستانی ایڈیٹ",
+       "watchlistedit-raw-legend": "واچلیستئ آمگین لیستانی ایڈیٹ",
        "watchlistedit-raw-titles": "ئنوانان:",
+       "watchlistedit-raw-submit": "واچلیست ئی اپڈیٹ",
+       "watchlistedit-raw-done": "شمی دیدارلیست اپڈیٹ بوت.",
+       "watchlistedit-raw-added": "$1 ئی ئنوان بئ دیدارلیست ئا ایزاپه {{PLURAL:$1|بوت|بوتنت}}:",
+       "watchlistedit-raw-removed": "$1 ئی ئنوان پاک {{PLURAL:$1|بوت|بوتنت}}:",
+       "watchlistedit-clear-title": "دیدارلیست پاک بوته",
+       "watchlistedit-clear-legend": "دیدارلیست ئی پاک کورتین",
+       "watchlistedit-clear-explain": "موچین ئناوین شه شمی دیدارلیست ئا پاک ئه بئنت",
+       "watchlistedit-clear-titles": "ئنوانان:",
+       "watchlistedit-clear-submit": "دیداری ئانی پاک کورتین (ای دائم اینت!)",
+       "watchlistedit-clear-done": "شمی دیدارلیست پاک بوت.",
+       "watchlistedit-clear-removed": "$1 ئی ئنوان پاک {{PLURAL:$1|بوت|بوتنت}}:",
+       "watchlistedit-too-many": "بازین دیم ایدا په نمایش ئی خاتیرا موجود انت.",
+       "watchlisttools-clear": "دیدارلیست ئی پاک کورتین",
+       "watchlisttools-view": "مربوتین تغیرانی دیستین",
+       "watchlisttools-edit": "دیدارلیست ئی دیستین و ایڈیٹ کورتین",
+       "watchlisttools-raw": "واچلیستئ آمگین لیستانی ایڈیٹ",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گپ و حبر]])",
        "version": "نخسه",
+       "version-extensions": "لچیته گین اپزونه ئان",
+       "version-skins": "نصب بوته ئین پوسته ئانی",
        "version-specialpages": "خاصین تاکدیمان",
+       "version-parserhooks": "تجزیه گرین چنگک ئان",
+       "version-variables": "موته غیرئان",
+       "version-antispam": "دیمگیری شه سپم ئان",
        "version-other": "دیگرین",
+       "version-mediahandlers": "می\tڈیایی بئ دست گیروک ئان",
+       "version-hooks": "چنگک ئان",
+       "version-parser-extensiontags": "ایزاپه کنوکین تجزیه گر ئی برچسپ",
+       "version-parser-function-hooks": "ئه مل کنوکین تجزیه گرین چنگک",
+       "version-hook-name": "چنگک ئی نام",
+       "version-hook-subscribedby": "داخل بوته گ\tۆ",
        "version-no-ext-name": "[بی نام]",
+       "version-license": "میڈیاویکی ئی اجازه نامه",
        "version-ext-license": "اجازه نامه ئان",
        "version-ext-colheader-name": "پراخئ ئان",
        "version-skin-colheader-name": "پوست",
        "version-ext-colheader-description": "توضیح",
        "version-ext-colheader-credits": "مؤلفان",
        "version-license-title": "مجوز په $1",
+       "version-license-not-found": "ای سند ئی شه جواز ئی مالومات ئا په ای پراخ کن\tۆک ئا ودی نه بوت.",
        "version-credits-title": "کریدیت په $1",
+       "version-credits-not-found": "ای کریدیت ئی شه جواز ئی مالومات ئا په ای پراخ کن\tۆک ئا ودی نه بوت.",
        "version-poweredby-credits": "ای ویکی شه '''[https://www.mediawiki.org/ میڈیا ویکی]''' ئی نیمگا پُشتیوانی ئه بیئت، موچین حقوق محفوظ انت © 2001-$1 $2.",
        "version-poweredby-others": "دیگران",
        "version-poweredby-translators": "translatewiki.net مترجم ئان",
+       "version-credits-summary": "جهلگین کس ئانه په خاتیرایڈی\tٹ بئ  [[Special:Version|میڈیاویکی]] تا ماریپی ئه کنن.",
        "version-software": "لچیته ئین نخسه هان",
        "version-software-product": "محصول",
        "version-software-version": "نخسه",
+       "version-entrypoints": "ورود ئی مئل ئی انترنتی ادرس",
+       "version-entrypoints-header-entrypoint": "داخل بوتین ئی ٹیک",
        "version-entrypoints-header-url": "انترننئ ئین ادرس",
+       "version-libraries": "نصب بوته ئین کتابخانه",
        "version-libraries-library": "کتابجاه",
        "version-libraries-version": "نخسه",
+       "redirect-legend": "جابجا په یک پایل یا دیم ئی",
        "redirect-submit": "برا",
        "redirect-lookup": "گشتین:",
        "redirect-value": "اندازه گ:",
        "redirect-revision": "تاکدیمی نخسه",
        "redirect-file": "فایلئ نام",
        "redirect-not-exists": "اندازه گ ودی نه بوت",
+       "fileduplicatesearch": "گشتین په تکرارین فایلان",
+       "fileduplicatesearch-summary": "گشتین په تکرارین پایلان بي اساس آوانی درهم بوته اندازه گ ئا سورت ئه گیت.",
+       "fileduplicatesearch-legend": "گشتین په تکرارین موریدان",
        "fileduplicatesearch-filename": "فایلئ نام:",
        "fileduplicatesearch-submit": "گشتین",
        "fileduplicatesearch-info": "<span dir=\"ltr\">$1 × $2</span> پیکسل<br />فایلئ اندازه گ: $3<br />نوع MIME: $4",
+       "fileduplicatesearch-result-1": "«$1» ئی فایل تکرارین مورید نداریت.",
        "fileduplicatesearch-result-n": " «$1» ئی فایل یک {{PLURAL:$2|تکراری موردئ|$2 تکرارئ مورئ}} داریت.",
        "fileduplicatesearch-noresults": "فایلئ گو «$1» ئی ناما ودئ نه بوت.",
        "specialpages": "خاصین تاکدیمان",
        "specialpages-group-maintenance": "ساتیتینئ راپور",
        "specialpages-group-other": "دیگه خاصین تاکدیمان",
        "specialpages-group-login": "داخل بوتین  / حسابي جوڑ کورتین",
+       "specialpages-group-changes": "آخیرئین تغیرئان و سیاهه ئان",
+       "specialpages-group-media": "میڈیایی بُرز کورتینوکین راپور",
+       "specialpages-group-users": "کار زوروکان و آوانی حقوق",
+       "specialpages-group-highuse": "باز گیندوکین دیمان",
        "specialpages-group-pages": "تاکدیمانی لڑ\t لیست",
        "specialpages-group-pagetools": "تاکدیمانئ وسایلان",
        "specialpages-group-wiki": "دتا و وسایلان",
+       "specialpages-group-redirects": "مسیر ئی تغیری خاسین تاکدیمان",
+       "specialpages-group-spam": "سپم ئی وسایلان",
+       "specialpages-group-developer": "توسه ئه دهوکین وسایلان",
+       "blankpage": "خالی ئین دیم",
+       "intentionallyblankpage": "این دیم بئ قصدین رقما خالی ایشته بوته.",
        "tags": "مجازین تغیرانئ برچسپ",
        "tag-filter": "[[Special:Tags|برچسپ هاني]] فیلتر:",
        "tag-filter-submit": "فیلتر",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برچسپ|برچسپ هان}}]]: $2)",
        "tags-title": "برچسپ هان",
        "tags-tag": "برچسپئ نام",
+       "tags-display-header": "نشان داتین بئ تعیراتانی لیست ئي تا",
+       "tags-description-header": "مانا ئی کامیلین ت\tۆزی",
+       "tags-source-header": "بُن زهی",
        "tags-active-header": "پئال؟",
+       "tags-hitcount-header": "تغیرئانی برچسپ",
        "tags-actions-header": "عملکردهان",
        "tags-active-yes": "هان",
        "tags-active-no": "نه",
+       "tags-source-extension": "تاریپ بوته بئ ایزاپه کن\tۆکین پایه ئا",
+       "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": "نوکین برچسپ ئی ج\tۆر کورتین",
        "tags-create-tag-name": "برچسپئ نام:",
        "tags-create-reason": "دلیل:",
        "tags-create-submit": "جوڑ\t کورتین",
+       "tags-create-no-name": "شما تگی نام باید مشخس بکنیت.",
+       "tags-create-invalid-chars": "تگ‌ئانی نام  نباید که کامه (<code>,</code>) یا مورب خت  (<code>/</code>) داشته بیئنت.",
+       "tags-create-already-exists": "\"$1\" ئی تگ همی انون موجود اینت.",
+       "tags-create-warnings-above": "\"$1\" ئی تگی جۆڑ کورتینی وختا جهگی {{PLURAL:$2|هشدار|هشدارئان}} آته انت:",
+       "tags-create-warnings-below": "آیا لوٹیت که تگ ئی جۆڑ کورتین ئا ایدامه دهیت؟",
+       "tags-delete-title": "تگ ئی پاک کورتین",
+       "tags-delete-explanation-initial": "شما بئ هالی پاک کورتینا «$1» ئی تگی شه مالوماتی بانکا هستیت.",
+       "tags-delete-reason": "دلیل:",
+       "tags-delete-submit": "ای تگ ئا غیرقابیل بیئرگشت پاک کن",
+       "tags-delete-not-found": "«$1» ئی تگ وجود نداریت.",
+       "tags-delete-too-many-uses": "\"$1\" ئی تگ گشتیر شه $2 {{PLURAL:$2|نخسه|نخسه ئانی}} سرا ایئمال بوته و نتوان که آیرا پاک کورت.",
+       "tags-delete-warnings-after-delete": "برچسب \"$1\" ئی تگ پاک بوت ، مه گه گۆ جهلگین  {{PLURAL:$2|خه تا|خه تا ئان}} گۆن ات:",
+       "tags-activate-title": "تگ ئی په ئال کورتین",
+       "tags-activate-question": "شما بئ هالی په هال کورتین  «$1» ئی تگ ویت.",
        "tags-activate-reason": "دلیل:",
+       "tags-activate-not-allowed": "«$1» ئی تگی په هال کورتین ممکن نه اینت.",
+       "tags-activate-not-found": "«$1» ئی تگ وجود نداریت.",
        "tags-activate-submit": "پئال کورتین",
+       "tags-deactivate-title": "تگ ئی غیر په ئال کورتین",
+       "tags-deactivate-question": "شما بئ هالی غیر په هال کورتین  «$1» ئی تگ ویت.",
        "tags-deactivate-reason": "دلیل:",
+       "tags-deactivate-not-allowed": "«$1» ئی تگی غیر په هال کورتین ممکن نه اینت.",
        "tags-deactivate-submit": "غیرپئال کورتین",
        "comparepages": "تاکدیمانئ مقایسه",
        "compare-page1": "تاکدیم ۱",
        "compare-rev1": "نخسه ۱",
        "compare-rev2": "نخسه ۲",
        "compare-submit": "مقایسه",
+       "compare-invalid-title": "ته ئین بوته ئین ئینوان ناموتبر اینت.",
+       "compare-title-not-exists": "مشخص بوته ئین ئینوان موجود نه اینت.",
+       "compare-revision-not-exists": "مشخس بوته پیلتر موجود نه اینت.",
+       "dberr-problems": "ئوزر لوٹن! ای سایٹ شه تخنیکی ئین مشکل ئان رنج ئه وارت.",
+       "dberr-again": "چینکه دقیقه سبر کنیت و پدا ای دیما بارگیری بکینت.",
+       "htmlform-float-invalid": "اندازه ئی که داخل کورته یک ئدد ئی نه ئینت.",
+       "htmlform-int-toolow": "اندازه ئی که داخل کورته ئیت کمتیر شه $1 ئا است.",
+       "htmlform-int-toohigh": "اندازه ئی که داخل کورته ئیت گیشتیر شه $1 ئا اینت.",
        "htmlform-required": "ای اندازه گ ضرورت اینت",
        "htmlform-submit": "ثبت کورتین",
        "htmlform-reset": "تغیرانئ خنثا کورتین",
        "htmlform-cloner-create": "گیشتیر اضافه کورتین",
        "htmlform-cloner-delete": "پاک کورتین",
        "htmlform-cloner-required": "حداقل ضرورت انداره گ.",
+       "sqlite-has-fts": "$1 گۆ پُشتیوانی شه گشتین ئا بئ کامیلین متن ئی تا",
+       "sqlite-no-fts": "$1 بدون پُشتیوانی شه گشتین ئا بئ کاملین متن ئی تا",
        "logentry-delete-delete": "$1 ، $3 تاکدیما {{GENDER:$2|پاک کورت}}",
        "logentry-delete-restore": "$1 ، $3 ئی تاکدیما {{GENDER:$2|پدا جۆڑ کورت}}",
        "logentry-delete-event": "$1 پیدایی {{PLURAL:$5|یک مورد سیاه چال|$5 مورد سیاه چال}} ئا بئ $3 {{GENDER:$2|تا تغیر دات}}: $4",
        "logentry-delete-revision": "$1 پیدایی {{PLURAL:$5|یک نخسه|$5 نخسه}} تاکدیم $3 ئا {{GENDER:$2|تغییر دات}}: $4",
+       "logentry-suppress-delete": "$1 $3 ئی تاکدیما {{GENDER:$2| سرکوب کورت}}",
+       "logentry-suppress-event": "$1 پیدایی {{PLURAL:$5|یک مورد سیاه چال|$5 مورد سیاه چال}} ئا بئ $3 {{GENDER:$2|تا چیهر دات}}: $4",
+       "logentry-suppress-revision": "$1 پیدایی {{PLURAL:$5|یک نخسه|$5 نخسه}} تاکدیم $3 ئا چیهراکائی {{GENDER:$2|تغییر دات}}: $4",
        "revdelete-content-hid": "محتوائانه چیهر کورت",
+       "revdelete-summary-hid": "ایڈیٹ ئی خلاصه ئا چیهر کورت",
        "revdelete-uname-hid": "چیهرین کار زوروکئ نام",
        "revdelete-content-unhid": "محتوائانه سر درا کورت",
+       "revdelete-summary-unhid": "ایڈیٹ ئی خلاصه ئا دررا کورت",
        "revdelete-uname-unhid": "کار زوروکئ ناما سر درا کورت",
        "revdelete-restricted": "مدیر ئانه محدود کورت",
        "revdelete-unrestricted": "مدیرئانی محدودیت ئا پروشت",
        "logentry-upload-upload": "$1 $3 ئا {{GENDER:$2|بُرز کورت}}",
        "logentry-upload-overwrite": "$1 نوکین نخسه ئی شه $3 ئا {{GENDER:$2|بُرز کورت}}",
        "logentry-upload-revert": "$1 {{GENDER:$2|بُرز کورت}} $3 ئا",
+       "log-name-managetags": "تگ ئی تاریخچه ئی مدیریت",
+       "logentry-managetags-create": "$1 تگ «$4» ئا {{GENDER:$2|ج\tۆڑ کورت}}",
        "rightsnone": "(هیچ)",
        "revdelete-summary": "ایڈیتی خاصه",
-       "feedback-subject": "ئنوان:",
-       "feedback-message": "پیام:",
+       "feedback-back": "بیئرگشت",
+       "feedback-bugnew": "دیستونئ . نوکین مشکل ئی راپور دیئ",
        "feedback-cancel": "کنسیل",
        "feedback-close": "کار بوت",
+       "feedback-external-bug-report-button": "یک تخنیکی ئین کاری پایل",
+       "feedback-dialog-title": "یک پیڈبک ئی دیم داتین",
+       "feedback-error-title": "خطا",
+       "feedback-error2": "خطا: پروشت بئ ایڈیٹ ئی تا",
+       "feedback-message": "پیام:",
+       "feedback-subject": "ئنوان:",
+       "feedback-submit": "ثبت کورتین",
+       "feedback-thanks": "منتوارن! شمی فیدبک بئ «[$1 $2]» ئی دیمی تا ثبت بوت.",
+       "feedback-thanks-title": "منتوارن!",
+       "feedback-useragent": "کارزوروکی آگینت:",
        "searchsuggest-search": "گشتین",
+       "searchsuggest-containing": "شامیلین دیمان...",
+       "api-error-badaccess-groups": "شما اجازه په پایلی ئی بُرز کورتین ئا بئ ای ویکی ای تا نداریت.",
+       "api-error-badtoken": "داخیلی ئین خه تا: امنیتی ئین کوڈ سه ئی نه اینت (Bad token).",
+       "api-error-duplicate-popup-title": "تکرارین {{PLURAL:$1|فایل|فایلان}}",
+       "api-error-empty-file": "فایلی که دیم داته بوت خالی ات.",
+       "api-error-emptypage": "خالی ئین دیمانی جۆڑ کورتین جایز نه اینت.",
+       "api-error-file-too-large": "فایلی که دیم داتیت بئ حد ٹوو ات.",
+       "api-error-filename-tooshort": "فایلی نام بئ شه اندازگ ئا گۆنڈ ات.",
+       "api-error-filetype-banned": "ایرنگین فایل ئی اجازه نه اینت.",
+       "api-error-filetype-missing": "فایل ئی نام فرمت نه داریت.",
+       "api-error-hookaborted": "تغیر که شما لۆٹیت جۆڑ کنیت شه یک جنگک یی نیمگا بند بوت.",
+       "api-error-http": "داخلین خطا:وصل بوتین بئ سرویس ئا ممکن نه اینت.",
+       "api-error-illegal-filename": "فایل ئی نام غیرمجاز اینت.",
+       "api-error-invalid-file-key": "داخلین خطا: فایل نام بئ موقت ئین حافظه ئی تا موجود نه اینت.",
+       "api-error-missingparam": "داخلین خطا: ناموجودین پارامیترئان بئ ریکویست ئی تا.",
+       "api-error-mustbeloggedin": "په فایلی بُرز کورتینا، شما باید بئ سایٹ ئی تا داخل بئیت.",
+       "api-error-mustbeposted": "داخلین خطا: ریکویست باید شه POST HTTP ئی روش ئا دیم داته بیئت.",
        "api-error-unclassified": "یک نا زانتین خطائی رخ دات.",
        "api-error-unknown-code": "نازانتین خطای: \" $1 \"",
+       "api-error-unknown-warning": "نادروستئ ئین ایختار: $1",
+       "api-error-unknownerror": "نادروستئ ئین خه تا: «$1».",
+       "api-error-uploaddisabled": "پایلانی بُرز کورتین بئ ای ویکی تا غیر په هال اینت.",
        "duration-seconds": "$1 ثانیه",
        "duration-minutes": "$1 دقیقه",
        "duration-hours": "$1 سائت",
        "duration-decades": "$1 دههگ",
        "duration-centuries": "$1 قرن",
        "duration-millennia": "{{PLURAL:$1|هزار سال |$1 هزار سال}}",
+       "limitreport-title": "پروپایل ئی دیتا ئی تجزیه گر:",
+       "limitreport-cputime": "سی‌پی‌یو ئی مسرپ وخت",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|سانیه|سانیه ئان}}",
        "limitreport-walltime": "واقئین مصرفئ مدت",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|ثانیه|ثانیه}}",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بایٹ|بایٹ}}",
        "expand_templates_generate_xml": "XML تجزیه ئی درختی نشان داتین",
        "expand_templates_generate_rawhtml": "حامیگین اچ تی ام ال ئی نشان داتین",
        "expand_templates_preview": "دیم دیست",
+       "pagelanguage": "زبانی انتخابی دیم",
        "pagelang-name": "تاکدیم",
        "pagelang-language": "زبان",
        "pagelang-use-default": "استفاده کورتین شه پیش فرض ئین زبانا",
        "pagelang-select-lang": "زبانی انتخاب",
+       "right-pagelang": "زبانی تاکدیم ئی تغیر",
+       "action-pagelang": "دیمی زبان ئی تغیر",
+       "log-name-pagelang": "لوگ ئی زبان تغیرداتین",
+       "log-description-pagelang": "ای سیاهه زبانانی تغیراتانی دیم اینت.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (په ئال)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''غیر په ئال''')",
+       "mediastatistics": "میڈیایی سرجم",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 بایٹ}} ($2؛ $3٪)",
        "mediastatistics-table-mimetype": "مایم ئی رکم",
+       "mediastatistics-table-extensions": "موته ئمیلین اپزونه ئان",
+       "mediastatistics-table-count": "فایلانی اندازگ",
        "mediastatistics-table-totalbytes": "ترکیبین حجم",
        "mediastatistics-header-unknown": "نامئلوم",
        "mediastatistics-header-bitmap": "بیت مپ ئی اکسان",
        "mediastatistics-header-office": "آفیس",
        "mediastatistics-header-text": "متنی",
        "mediastatistics-header-executable": "اجرایی",
+       "mediastatistics-header-archive": "پشورده ئین پورمت ئان",
+       "json-warn-trailing-comma": "$1 ئی کاما بئ اخیرا شه جی‌سن ئا {{PLURAL:$1|پاک بوت}}.",
        "json-error-unknown": "مشکلی گو جی‌سن ات. خطا: $1",
        "json-error-state-mismatch": "جن سن جووان نه اینت یا ناقض اینت",
        "json-error-syntax": "نحوی ئین خطا",
        "json-error-inf-or-nan": "INF یا NAN ئی مقادیر یک یا گیشتیر بی مقداری که کدگذاری ئا بیئنت",
-       "json-error-unsupported-type": "یک اندازه که نتوانت کد گذاری بیئت داته بوته"
+       "json-error-unsupported-type": "یک اندازه که نتوانت کد گذاری بیئت داته بوته",
+       "headline-anchor-title": "لینک بئ ای قیسمت ئا"
 }
index 86d2168..c79c723 100644 (file)
@@ -4,7 +4,8 @@
                        "Anshumangupta21",
                        "Ganesh",
                        "Nepaboy",
-                       "Rajivkurjee"
+                       "Rajivkurjee",
+                       "SatyamMishra"
                ]
        },
        "tog-underline": "लिंक के नीचे रेखा",
@@ -12,7 +13,7 @@
        "tog-hidepatrolled": "हाल के परिवर्तन में मामूली संपादन छुपाईं",
        "tog-newpageshidepatrolled": "नयका पृष्ठ के सूची में से जाँचल पृष्क के छुपाँई",
        "tog-extendwatchlist": "मात्र हाल के परिवर्तन ही नाही,बल्कि सब परिवर्तन के देखावे खातिर ध्यान सूची के विस्तारित करीं",
-       "tog-usenewrc": "तà¥\81रà¤\82त à¤­à¤\88ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤®à¥\87à¤\82 à¤\86 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤­à¤\88ल परिवर्तनन के पन्ना अनुसार समूह में बांटी",
+       "tog-usenewrc": "तà¥\81रà¤\82त à¤­à¤\87ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤®à¥\87à¤\82 à¤\86 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤­à¤\87ल परिवर्तनन के पन्ना अनुसार समूह में बांटी",
        "tog-numberheadings": "स्वयं-सांख्यिकी शिर्षक",
        "tog-showtoolbar": "सम्पादन औजारपट्टी के दिखावल जाव",
        "tog-editondblclick": "दुई क्लिक पर पन्ना संपादन करीं",
@@ -31,7 +32,7 @@
        "tog-shownumberswatching": "ध्यान रखे वालन सदस्यन के देखावल जाव",
        "tog-oldsig": "वर्तमान हस्ताक्षर:",
        "tog-fancysig": "हस्ताक्षर के विकी पाठ के रुप में उपयोग करीं (बिना स्वचालित कड़ी के)",
-       "tog-uselivepreview": "लाइव पुर्वालोकन के प्रयोग करीं (प्रयोगात्मक)",
+       "tog-uselivepreview": "लाइव पुर्वालोकन के प्रयोग करीं",
        "tog-forceeditsummary": "यदि सम्पादन सारांश ना दिहल होखे त हमके सूचित करब",
        "tog-watchlisthideown": "हमार ध्यान दिहल पन्ना के सूची से हमरा खातिर परिवर्तन छिपाईं",
        "tog-watchlisthidebots": "हमार ध्यान सूची से बोट द्वारा करल गईल परिवर्तन के छिपाईं",
        "otherlanguages": "अन्य भाषा में",
        "redirectedfrom": "($1 द्वारा पुन: निर्देशित)",
        "redirectpagesub": "पुन: निर्देशित पन्ना",
+       "redirectto": "पुनः निर्देशित:",
        "lastmodifiedat": "$1 के $2 पर ई पन्ना पर अन्तिम बार परिवर्तन भईल।",
        "viewcount": "ई पन्ना {{PLURAL:$1|एक|$1}} बार देखल गईल बा।",
        "protectedpage": "सुरक्षित पन्ना",
        "disclaimers": "अस्विकरण",
        "disclaimerpage": "Project:सामान्य अस्विकरण",
        "edithelp": "मदद सम्पादन",
+       "helppage-top-gethelp": "मदद",
        "mainpage": "मुख्य पन्ना",
        "mainpage-description": "मुख्य पन्ना",
        "policy-url": "Project:नीति",
        "youhavenewmessagesmulti": "रउआ लगे $1 पर नया सन्देश बा",
        "editsection": "सम्पादन",
        "editold": "सम्पादन",
-       "viewsourceold": "सà¥\8dतà¥\8dरà¥\8bत à¤¦à¥\87à¤\96à¥\80à¤\82",
+       "viewsourceold": "स्रोत देखीं",
        "editlink": "सम्पादन",
-       "viewsourcelink": "सà¥\8dतà¥\8dरà¥\8bत à¤¦à¥\87à¤\96à¥\80à¤\82",
+       "viewsourcelink": "स्रोत देखीं",
        "editsectionhint": "सम्पादन खण्ड: $1",
        "toc": "सामग्री",
        "showtoc": "देखाईं",
        "perfcached": "नीचे दिहल गइल डेटा कैशे मेमोरी से लिहल गइल बा, अतः हो सकता बा कि इ के पूर्ण अद्यतन ना भइल होखे। कैशे मेमोरी में अधिकतम {{PLURAL:$1|एक  नतीजा|$1 नतीजं}} उपलब्ध बाड़े।",
        "perfcachedts": "नीचे दिहल गइल डेटा कैशे मेमोरी से बा, आ एकर अंतिम अपडेट $1 के भइल रहल। कैश मेमोरी में अधिकतम {{PLURAL:$4|एक  नतीजा|$4 नतीजां}} उपलब्ध बा।",
        "querypage-no-updates": "इ पृष्ठ के अपडेट करल अयोग्य बा। अभी अहिजा के डाटा के ताज़ा नइखे करल जा सकत।",
-       "viewsource": "सà¥\8dतà¥\8dरà¥\8bत à¤¦à¥\87à¤\96à¥\80à¤\82",
+       "viewsource": "स्रोत देखीं",
        "viewsource-title": "$1 के स्रोत देखीं",
        "actionthrottled": "कार्य समाप्त कर दिहल गइल बा",
        "actionthrottledtext": "स्पैम के रोकथाम खातिर, इ क्रिया एतना कम समय में एक सीमा से अधिक बार करे के मना बा, आ रउआ इ सीमा के पार कर चुकल बानी।\nकृपया कुछ समय बाद पुन: यत्न करीं।",
        "protectedpagetext": "इ पन्ना संपादन आ अन्य कार्यं से बचाव खातिर सुरक्षित कर दिहल गइल बा।",
-       "viewsourcetext": "रà¤\89à¤\86 à¤\87 à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¸à¥\8dत्रोत देख सकत बानी आ एकर नकल उतार सकत बानी:",
+       "viewsourcetext": "रà¤\89à¤\86 à¤\8fह à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¸्रोत देख सकत बानी आ एकर नकल उतार सकत बानी:",
        "viewyourtext": "रउआ इ पन्ना में ''आपन सम्पादन'' के स्रोत देख सकत बानी आ ओकर नकल उतार सकत बानी:",
        "protectedinterface": "इ पन्ना इ विकी के सॉफ़्टवेयर के इंटरफ़ेस पाठ्य के देवेला, आ इ के गलत प्रयोग से बचावे खातिर सुरक्षित कर दिहल गइल बा।\nसभन विकियन खातिर अनुवाद जोड़े या बदले खातिर कृपया मीडियाविकि के क्षेत्रीयकरण प्रकल्प [//translatewiki.net/ translatewiki.net] के प्रयोग करीं।",
-       "editinginterface": "'''चेतावनी:''' रउआ एगो अइसन पन्ना के बदल रहल बानी जउन सॉफ़्टवेयर के इंटरफ़ेस पाठ्य प्रदान करेला।\nइ पन्ना के बदलला से अन्य सदस्यन के प्रदर्शित इंटरफ़ेस के शक्ल-सूरत में बदलाव आइ।\nसभे विकियन के खातिर अनुवाद बदले या जोड़े खातिर कृपया मीडियाविकि के क्षेत्रीयकरण परियोजना [//translatewiki.net/wiki/Main_Page?setlang=hi translatewiki.net] के प्रयोग करीं।",
+       "editinginterface": "<strong>चेतावनी:</strong> आप एगो अइसन पन्ना के बदल बदल रहल बानी जवन सॉफ़्टवेयर के इंटरफ़ेस पाठ प्रदान करेला। इ पृष्ठ के बदले से अन्य सदस्यवन के प्रदर्शित इंटरफ़ेस के शक्लोसूरत में बदलाव आई।",
        "cascadeprotected": "इ पन्ना पर सम्पादन करे के अधिकार खत्म कर दिहल गइल बा काहे कि इ निम्न में शामिल बा {{PLURAL:$1|पन्ना, जउन|पन्नां, जउन}} \"व्यापक\" विकल्प के चालू कइला के साथ सुरक्षित कर दिहल गइल बा:\n$2",
        "namespaceprotected": "रउआ के '''$1''' नामस्थान के पन्नं में सम्पादन करे के अधिकार नइखे दिहल गइल।",
        "customcssprotected": "रउआ के इ CSS पन्ना के संपादित करे के अनुमति नइखे, काहे कि इ में अन्य सदस्यं के व्यक्तिगत सेटिंग्स समाविष्ट बा।",
        "invalidtitle-knownnamespace": "\"$2\" नामस्थान आ \"$3\" पाठ्य वाला गलत शीर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आ नाम \"$2\" वाला गलत शीर्षक",
        "exception-nologin": "खाता में प्रवेश नईखीं भईल",
-       "exception-nologin-text": "इ पन्ना अथवा कार्य के सक्षम करे खातिर कृपया [[Special:Userlogin|लॉग इन]] करीं।",
+       "exception-nologin-text": "इ पन्ना अथवा कार्य के सक्षम करे खातिर कृपया प्रवेश करीं।",
        "exception-nologin-text-manual": "इ पन्ना अथवा कार्य के सक्षम करे खातिर कृपया $1 करीं।",
        "virus-badscanner": "गलत जमाव: अज्ञात वायरस जाँचक: ''$1''",
        "virus-scanfailed": "जाँच विफल (कोड $1)",
        "preview": "पूर्वावलोकन",
        "showpreview": "पूर्वावलोकन देखाईं",
        "showdiff": "परिवर्तन देखाईं",
-       "anoneditwarning": "'''चेतावनी:''' रउआ आपन खाता में प्रवेश नईखीं कईले। ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज कईल जाई।",
+       "anoneditwarning": "<strong>चेतावनी:</strong> रउआ आपन खाता में प्रवेश नईखीं कईले। यदि रउआ कवनो बदलाव करत बानी त राउर आईपी पता खुलेआम दिखाई दी। यदि रउआ <strong>[$1 लॉग इन]</strong> या <strong>[$2 नया खाता बनायेब]</strong> त, अन्य सुविधावन के साथ राउर सम्पादन के श्रेय राउर सदस्यनाम पर चल जाई।",
        "anonpreviewwarning": "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"",
        "missingsummary": "'''स्मरणपत्र:'''रउआ एगो सारांश के सम्पादन नईखीं प्रदान कईले। अगर रउआ \"फिर से सुरक्षित करीं\" पर क्लिक करेब, त राउर सम्पादन बिना एगो सारांश के सुरक्षित हो जाई।",
        "missingcommenttext": "कृपया निचे एगो टिप्पणी करीं।",
        "template-protected": "(संरक्षित)",
        "template-semiprotected": "(अर्ध-सुरक्षित)",
        "nocreate-loggedin": "नया पन्ना बनावे रउआ अधिकार नइखे।",
+       "sectioneditnotsupported-title": "अनुभाग सम्पादन समर्थित नइखे",
+       "sectioneditnotsupported-text": "इ पन्ना पर अनुभाग सम्पादन समर्थित नइखे",
        "permissionserrors": "अनुमति त्रुटी",
+       "permissionserrorstext": "निम्नलिखित {{PLURAL:$1|कारण|कारणन}} के चलते आपके अइसन करे के अनुमति नइखे:",
        "log-fulllog": "पूरा लॉग देखीं",
        "edit-conflict": "संपादन अंतर्विरोध",
        "postedit-confirmation-created": "पन्ना बना दिहल गईल।",
        "postedit-confirmation-saved": "राउर सम्पादन सुरक्षित कर दिहल गईल।",
+       "defaultmessagetext": "संदेश के डिफ़ॉल्ट पाठ्य",
        "invalid-content-data": "अवैध डाटा सामग्री",
        "content-model-wikitext": "विकीपाठ्य",
        "content-model-text": "सामान्य पाठ",
        "post-expand-template-inclusion-category": "अइसन पृष्ठ जे पर साँचा जोडे के सीमा पार हो गइल बा",
        "cantcreateaccounttitle": "खाता खुल नईखे सकत",
        "revisionasof": "$1 के रुप में संशोधन",
-       "revision-info": "$2 में से $1 के रुप में संशोधन",
+       "revision-info": "{{GENDER:$6|$2}}$7 के द्वारा $1 के संशोधन",
        "previousrevision": "← पुरान संशोधन",
        "nextrevision": "नया संशोधन →",
        "currentrevisionlink": "हाल के संशोधन",
        "history-feed-empty": "अनुरोध करल गईल पन्ना उपलब्ध नईखे। हो सकत बा उ के विकि पर से मिटा दिहल गईल होखे, आ चाहे उ के नाम बदल देवल गईल होखे।\nप्रासंगिक पन्ना के [[Special:Search|विकि पर खोजे के]] कोशिश करत रहीं।",
        "rev-deleted-comment": "(सम्पादन सारांश हटावल गईल)",
        "rev-deleted-user": "(प्रयोगकर्ता के नाम मिटा दिहल गईल बा)",
-       "rev-deleted-event": "(लà¥\89à¤\97 à¤\95ारà¥\8dरवाà¤\88 à¤®à¤¿टा दिहल गईल बा)",
+       "rev-deleted-event": "(लà¥\89à¤\97 à¤µà¤¿à¤µà¤°à¤£ à¤¹टा दिहल गईल बा)",
        "rev-deleted-user-contribs": "[प्रयोगकर्ता नाम आ चाहे आइ पी पता हटा दिहल गईल बा - योगदान से सम्पादन छुप गईल बा]",
        "rev-deleted-text-permission": "ई पन्ना के संशोधन '''मिटा'''' दिहल गईल बा।\nमेटावल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} डिलेशन लॉग] में मिली।",
        "rev-delundel": "दिखाईं/छुपाईं",
        "rev-showdeleted": "देखाईं",
        "revdelete-show-file-submit": "जी",
-       "revdelete-hide-text": "संशोधन पाठ्य छुपाँईं",
+       "revdelete-hide-text": "संशोधन पाठ्य",
        "revdelete-hide-image": "फाइल के सामग्री छुपाँईं",
-       "revdelete-hide-comment": "समà¥\8dपादित à¤¸à¤¾à¤°à¤¾à¤\82श à¤\9bà¥\81पाà¤\81à¤\88à¤\82",
-       "revdelete-hide-user": "समà¥\8dपादà¤\95 à¤\95à¥\87 à¤¸à¤¦à¤¸à¥\8dयनाम/à¤\86à¤\87॰पà¥\80 à¤\9bà¥\81पाà¤\81à¤\88à¤\82",
+       "revdelete-hide-comment": "साराà¤\82श à¤¸à¤®à¥\8dपादन",
+       "revdelete-hide-user": "समà¥\8dपादà¤\95 à¤\95à¥\87 à¤¸à¤¦à¤¸à¥\8dयनाम/à¤\86à¤\87॰पà¥\80 à¤ªà¤¤à¤¾",
        "revdelete-radio-same": "(मत बदलीं)",
-       "revdelete-radio-set": "à¤\9cà¥\80",
-       "revdelete-radio-unset": "ना",
+       "revdelete-radio-set": "à¤\9bà¥\81पल",
+       "revdelete-radio-unset": "दà¥\83शà¥\8dयमान",
        "revdelete-log": "कारण:",
        "revdel-restore": "दूश्यता बदलीं",
        "pagehist": "पन्ना के इतिहास",
        "revdelete-reasonotherlist": "अन्य कारण",
        "revdelete-edit-reasonlist": "हटावे के कारण बदलीं",
        "revdelete-offender": "संशोधन सम्पादक:",
-       "mergehistory-from": "सà¥\8dतà¥\8dरà¥\8bत à¤ªà¤¨à¥\8dना:",
+       "mergehistory-from": "स्रोत पन्ना:",
        "mergehistory-reason": "कारण:",
        "revertmerge": "अलग करीं",
-       "mergelogpagetext": "à¤\8fà¤\95 à¤ªà¤¨à¥\8dना à¤\87तिहास à¤\95à¥\87 à¤¦à¥\81सर à¤ªà¤¨à¥\8dना à¤\87तिहास à¤®à¥\87à¤\82 à¤¤à¥\81रà¤\82त à¤µà¤¿à¤²à¤¯ à¤­à¤\88ल एगो सूची नीचे दिहल बा।",
+       "mergelogpagetext": "à¤\8fà¤\95 à¤ªà¤¨à¥\8dना à¤\87तिहास à¤\95à¥\87 à¤¦à¥\81सर à¤ªà¤¨à¥\8dना à¤\87तिहास à¤®à¥\87à¤\82 à¤¤à¥\81रà¤\82त à¤µà¤¿à¤²à¤¯ à¤­à¤\87लà¥\87 à¤\95à¥\87 एगो सूची नीचे दिहल बा।",
        "history-title": "''$1'' के संशोधन इतिहास",
        "lineno": "पंक्ति $1:",
        "compareselectedversions": "चुनल गईल संशोधन में अन्तर देखीं",
        "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|परिणाम}}",
        "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-section": "(खंड $1)",
        "search-suggest": "का राउर मतलब बा: $1",
        "search-interwiki-caption": "भ्रातृ परियोजना",
-       "search-interwiki-default": "$1 à¤\95े परिणाम:",
+       "search-interwiki-default": "$1 à¤¸े परिणाम:",
        "search-interwiki-more": "(अउर)",
        "search-relatedarticle": "संबंधित",
        "searchrelated": "संबंधित",
        "preferences": "वरीयता",
        "mypreferences": "राउर पसन्द",
        "prefs-edits": "सम्पादन संख्या",
+       "prefsnologintext2": "आपन वरीयता में बदलाव लावे खातिर प्रवेश करीं।",
        "prefs-skin": "त्वचा",
        "skin-preview": "पूर्वावलोकन",
+       "datedefault": "वरीयता नईखे",
        "prefs-user-pages": "सदस्य पन्ना",
        "prefs-personal": "सदस्य प्रोफाईल",
-       "prefs-rc": "तà¥\81रà¤\82त à¤­à¤\88ल परिवर्तन",
+       "prefs-rc": "तà¥\81रà¤\82त à¤­à¤\87ल परिवर्तन",
        "saveprefs": "सुरक्षित करीं",
        "prefs-editing": "संपादन",
        "searchresultshead": "खोज",
        "prefs-preview": "पूर्वावलोकन",
        "action-move": "ई पन्ना के स्थांतरण करीं",
        "action-delete": "ई पन्ना के मिटाईं",
-       "recentchanges": "तà¥\81रà¤\82त à¤­à¤\88ल परिवर्तन",
+       "recentchanges": "तà¥\81रà¤\82त à¤­à¤\87ल परिवर्तन",
        "recentchanges-legend": "हाल के परिवर्तन संबंधी विकल्प",
        "recentchanges-label-newpage": "ई सम्पादन से एगो नवका पृष्ठ तैयार हो गइल बा",
        "recentchanges-label-minor": "ई एगो छोटा सम्पाद बा",
        "newpageletter": "न",
        "boteditletter": "बो",
        "number_of_watching_users_pageview": "[$1 देखल जा रहल बा {{PLURAL:$1|प्रयोगकर्ता|प्रयोगकर्ता}}]",
+       "rc-change-size-new": "$1 {{PLURAL:$1|बाइट|बाइट सब}} बदलाव के बाद",
        "recentchangeslinked": "सम्बन्धित बदलाव",
        "recentchangeslinked-feed": "सम्बन्धित बदलाव",
        "recentchangeslinked-toolbox": "सम्बन्धित बदलाव",
        "fileuploadsummary": "सारांश:",
        "filesource": "स्रोत:",
        "unknown-error": "अज्ञात त्रुटि उत्पन्न हो गईल बा।",
+       "license-header": "लाईसेंसिंग",
        "file-anchor-link": "फ़ाइल",
        "filehist": "पन्ना के इतिहास",
        "filehist-deleteall": "सब मिटाईं",
        "newpages": "नवका पन्ना",
        "move": "स्थान्तरण",
        "movethispage": "ई पन्ना के स्थांतरण करीं",
-       "booksources": "à¤\95िताबà¥\80 à¤¸à¥\8dतà¥\8dरà¥\8bत",
+       "booksources": "किताबी स्रोत",
        "allarticles": "सभी पन्ना",
        "allpagessubmit": "जाईं",
        "allpagesprefix": "उपसर्ग के साथे पन्ना प्रदर्शन:",
        "contributions-title": " $1 खातिर प्रयोगकर्ता योगदान",
        "mycontris": "राउर योगदान के सूची",
        "nocontribs": "ई मानदंड से मिलत जुलत कौनो बदलाव ना मिलल।",
-       "uctop": "(शà¥\80रà¥\8dष)",
+       "uctop": "(हाल à¤\95à¥\87)",
        "month": "महिना से (आ उ से पहिले):",
        "year": "साल से (आ उ से पहिले):",
        "sp-contributions-newbies": "खाली नया खाता के योगदान देखीं।",
        "whatlinkshere-next": "{{PLURAL:$1|अगला|अगला $1}}",
        "whatlinkshere-links": "← लिंक",
        "whatlinkshere-hideredirs": "$1 पुन: निर्देशित",
+       "whatlinkshere-hidetrans": "$1 ट्रान्स्क्ल्युजन्स",
        "whatlinkshere-hidelinks": "$1 लिंक",
        "whatlinkshere-hideimages": "$1 फ़ाइल लिंक",
        "whatlinkshere-filters": "फिल्टर",
-       "blockip": "प्रतिबंधित प्रयोगकर्ता",
+       "blockip": "{{GENDER:$1|सदस्य}} अवरोधित करीं",
        "ipboptions": "२ घंटे:2 hours,१ दिन:1 day,३ दिन:3 days,१ हफ्ता:1 week,२ हफ्ते:2 weeks,१ महिना:1 month,३ महिने:3 months,६ महिने:6 months,१ साल:1 year,हमेशा खातिर:infinite",
        "blocklink": "निष्क्रिय",
        "unblocklink": "ताला खोलीं",
        "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-protect": "इ पन्ना के संरक्षित करीं।",
-       "tooltip-ca-unprotect": "à¤\87 à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¸à¤\82रà¤\95à¥\8dषण à¤¹à¤\9fाà¤\88ं।",
+       "tooltip-ca-unprotect": "à¤\88 à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¸à¥\81रà¤\95à¥\8dषा à¤¬à¤¦à¤²à¥\80ं।",
        "tooltip-ca-delete": "ई पन्ना मिटाईं",
        "tooltip-ca-move": "ई पन्ना के स्थांतरण करीं",
        "tooltip-ca-watch": "इ पन्ना के आपन ध्यानसूची में डालीं",
        "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-image": "संचिका के पन्ना देखीं",
        "tooltip-ca-nstab-template": "टेम्प्लेट देखीं",
        "tooltip-preview": "आपन द्वारा कियल गइल बदलाव के देखीं, संजोये से पहले ईका इस्तेमाल करीं!",
        "tooltip-rollback": "\"वापिस लीं\" ई पन्ना के पिछ्ला योगदाता के बदलाव एकही चटके मे गायब कर देवेला",
        "tooltip-summary": "एगो संक्षिप्त सारांश दर्ज करीं",
+       "pageinfo-toolboxlink": "जानकारी पन्ना",
        "file-nohires": " उच्च गुणवत्ता उपलब्ध नईखे।",
        "svg-long-desc": "एस वी जी फाईल, नॉमिनल्ली $1 x $2 पिक्सल्स, फाईल के आकार $3",
-       "show-big-image": "पुरा गुणवत्ता",
+       "show-big-image": "मूल फाईल",
+       "show-big-image-size": "$1 × $2 पिक्सल",
        "file-info-gif-looped": "लूप्ड",
        "file-info-gif-frames": "$1 {{PLURAL:$1|फ्रेम}}",
        "file-info-png-looped": "लूप्ड",
        "exif-yresolution": "लम्बवत समाधान",
        "exif-stripoffsets": "चित्र डेटा के स्थिती",
        "exif-jpeginterchangeformatlength": "JPEG डेटा के बाइट",
+       "exif-make": "कैमेरा उत्पादक",
+       "exif-model": "कैमेरा मॉडेल",
+       "exif-software": "प्रयोग करल गईल सॉफ्टवेयर",
+       "exif-datetimeoriginal": "डाटा बनावे के दिनांक अउर समय",
+       "exif-orientation-1": "सामान्य",
        "namespacesall": "सब",
        "monthsall": "सब",
        "confirmemail": "इ-मेल पता कन्फर्म करीं",
        "version-no-ext-name": "[अज्ञात नाम]",
        "specialpages": "ख़ाश पन्ना",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग|टैग कुल}}]]: $2)",
+       "logentry-delete-delete": "$1 द्वारा पन्ना $3 {{GENDER:$2|हटा}} दिहल गईल",
        "revdelete-restricted": "प्रबंधक पर प्रतिबंध लागू",
        "revdelete-unrestricted": "प्रबंधक पर से प्रतिबंध समाप्त",
-       "revdelete-summary": "सारांश संपादन"
+       "revdelete-summary": "सारांश संपादन",
+       "searchsuggest-search": "खोजीं"
 }
index 42d6e0a..cffaf52 100644 (file)
@@ -6,7 +6,8 @@
                        "J Subhi",
                        "Kaganer",
                        "Riemogerz",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Garisi di bawah tautan",
        "delete-toobig": "Tungkaran ngini baisi sabuting sajarah pambabakan nang panjang, labih pada $1 {{PLURAL:$1|ralatan|raralatan}}.\nPahapusan tutungkaran kaini dibatasi hagan mancagah parakaian bakajutan di {{SITENAME}}.",
        "delete-warning-toobig": "Tungkaran ngini baisi halam babakan ganal, labih pada $1 {{PLURAL:$1|ralatan|raralatan}}.\nMahapus ngini kawa mangaruhi databasis oparasi {{SITENAME}};\njalanakan awan ba-a-awas.",
        "rollback": "Gulung bulik babakan",
-       "rollback_short": "Gulung-bulik",
        "rollbacklink": "bulikakan",
        "rollbackfailed": "Guling-bulik luput",
        "cantrollback": "Kada kawa mambalikakan babakan;\npanyumbang tauncit adalah asa-asanya panulis tungkaran ngini.",
        "import-error-create": "Tungkaran \"$1\" kada diumpur karana Pian kada bulih maulah ngini.",
        "importlogpage": "Log impur",
        "importlogpagetext": "Impur administratip matan tutungkaran awan babakan halam matan wiwiki lain.",
-       "import-logentry-upload": "[[$1]] diimpur lung hunggah barakas",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|ralatan|raralatan}}",
-       "import-logentry-interwiki": "ditranswiki $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ralatan|raralatan}} matan $2",
        "javascripttest": "Mantis JavaScript",
        "javascripttest-pagetext-skins": "Pilih kulit nang cagar Pian cubai:",
        "watchlisttools-edit": "Tiringi wan babak daptar itihan",
        "watchlisttools-raw": "Babak daptar itihan mantah",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|pandir]])",
-       "unknown_extension_tag": "Tag ekstensi kada dipinandui \"$1\"",
        "duplicate-defaultsort": "Paringatan: Sunduk pangurutan baku \"$2\" mangabaikan sunduk pangurutan baku \"$1\" sabalumnya.",
        "version": "Virsi",
        "version-extensions": "Ekstensi tapasang",
        "version-parser-function-hooks": "Kait pungsi parser",
        "version-hook-name": "Ngaran kait",
        "version-hook-subscribedby": "Dilanggani ulih",
-       "version-version": "(Pirsi $1)",
+       "version-version": "($1)",
        "version-license": "Lisansi",
        "version-poweredby-credits": "Wiki ngini disukung ulih '''[https://www.mediawiki.org/ MediaWiki]''', hak salin © 2001-$1 $2.",
        "version-poweredby-others": "lainnya",
        "logentry-newusers-autocreate": "Akun $1 utumatis diulah",
        "rightsnone": "(kadada)",
        "revdelete-summary": "Kasimpulan babakan",
+       "feedback-adding": "Manambahi kitihanbalik ka tungkaran...",
+       "feedback-bugcheck": "Harat! hanyar dipariksa bahwasa ngini lainan salah asa [$1 bug nang dipinandui].",
+       "feedback-bugnew": "Ulun mamariksa. Malapurakan sabuah bug hanyar",
        "feedback-bugornote": "Pabila Pian siap manjalasakan sabuah masalah taknik rinci muhun [lapurakan sabuah bug $1].\nSalain ngitu, Pian kawa mamuruk prmulir nyaman di bawah ngini. Kumintar Pian akan ditambahi ka si tungkaran \"[$3 $2]\", baimbai awan ngaran-pamuruk Pian wan panjalajah nagn Pian puruk.",
-       "feedback-subject": "Parihal:",
-       "feedback-message": "Pasan:",
        "feedback-cancel": "Walangi",
-       "feedback-submit": "Kirimi Kitihanbalik",
-       "feedback-adding": "Manambahi kitihanbalik ka tungkaran...",
+       "feedback-close": "Sudah",
        "feedback-error1": "Kasalahan: kulihan matan API kada-dipinandui",
        "feedback-error2": "Kasalahan: Babakan gagal",
        "feedback-error3": "Kasalahan: Kadada tanggapan matan API",
+       "feedback-message": "Pasan:",
+       "feedback-subject": "Parihal:",
+       "feedback-submit": "Kirim",
        "feedback-thanks": "Tarimakasih! jitihanbalik Pian sudah dipusakan ka si tungkaran \"[$2 $1]\".",
-       "feedback-close": "Sudah",
-       "feedback-bugcheck": "Harat! hanyar dipariksa bahwasa ngini lainan salah asa [$1 bug nang dipinandui].",
-       "feedback-bugnew": "Ulun mamariksa. Malapurakan sabuah bug hanyar",
        "searchsuggest-search": "Gagai",
        "searchsuggest-containing": "isian ...",
        "api-error-missingresult": "Kasalahan intarnal: kada kawa manantuakan napakah panyalinan tuntung.",
        "api-error-unknown-warning": "Paringatan kada dipinandui: \"$1\".",
        "api-error-unknownerror": "Kasalahan kada dipinandui: \"$1\".",
        "api-error-uploaddisabled": "Paunggahan dinunaktipakan di wiki naya.",
-       "api-error-verification-error": "Barakas naya kira-kira rusak atawa baisi ikstinsi nang salah."
+       "api-error-verification-error": "Barakas naya kira-kira rusak atawa baisi ikstinsi nang salah.",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simbul",
+       "special-characters-group-greek": "Yunani",
+       "special-characters-group-cyrillic": "Sirilik",
+       "special-characters-group-arabic": "Arab",
+       "special-characters-group-persian": "Parsia",
+       "special-characters-group-hebrew": "Ibrani",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index 397c7b2..5e079d3 100644 (file)
@@ -45,7 +45,7 @@
        "tog-minordefault": "শুরুতেই সব সম্পাদনাকে অনুল্লেখ্য বলে চিহ্নিত করা হোক",
        "tog-previewontop": "সম্পাদনা বাক্সের আগে প্রাকদর্শন দেখানো হোক",
        "tog-previewonfirst": "প্রথম সম্পাদনার ক্ষেত্রে প্রাকদর্শন দেখানো হোক",
-       "tog-enotifwatchlistpages": "à¦\86মার à¦¨à¦\9cর à¦¤à¦¾à¦²à¦¿à¦\95ায় à¦\86à¦\9bà§\87 à¦\8fমন à¦ªà¦¾à¦¤à¦¾ à¦\85থবা à¦«à¦¾à¦\87লà§\87 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦¹à¦²à§\87 à¦¤à¦¾ à¦\9cানিয়à§\87 à¦\86মাà¦\95à§\87 à¦\87-মà§\87à¦\87ল à¦\95রà§\8b",
+       "tog-enotifwatchlistpages": "আমার নজর তালিকায় আছে এমন পাতা অথবা ফাইলে পরিবর্তন হলে আমাকে ই-মেইল করো",
        "tog-enotifusertalkpages": "আমার ব্যবহারকারী আলোচনা পাতার পরিবর্তন হলে আমাকে ই-মেইল করা হোক",
        "tog-enotifminoredits": "পাতা এবং ফাইলগুলোতে অনুল্লেখ্য সম্পাদনার জন্যও আমাকে ই-মেইল করা হোক",
        "tog-enotifrevealaddr": "বিজ্ঞপ্তি মেইলে আমার ই-মেইল ঠিকানা প্রকাশ করা হোক",
        "qbedit": "সম্পাদনা",
        "qbpageoptions": "এই পাতা",
        "qbmyoptions": "আমার পাতাসমূহ",
-       "faq": "সমà§\8dভাবà§\8dয à¦ªà§\8dরশà§\8dনসমà§\82হ",
+       "faq": "পà§\8dরাà¦\9cিপà§\8dর",
        "faqpage": "Project:প্রাজিপ্র",
        "actions": "কার্যক্রম",
        "namespaces": "নামস্থান",
        "permalink": "স্থায়ী সংযোগ",
        "print": "মুদ্রণ",
        "view": "দেখাও",
-       "view-foreign": "$1 দেখুন",
+       "view-foreign": "$1-এ দেখুন",
        "edit": "সম্পাদনা",
        "edit-local": "স্থানীয় বিবরণ সম্পাদনা করুন",
        "create": "তৈরি",
        "create-local": "স্থানীয় বিবরণ যোগ করুন",
-       "editthispage": "সম্পাদনা করুন",
+       "editthispage": "পাতাà¦\9fি à¦¸à¦®à§\8dপাদনা à¦\95রà§\81ন",
        "create-this-page": "পাতাটি তৈরি করো",
        "delete": "অপসারণ",
        "deletethispage": "এই পাতাটি মুছে ফেলুন",
        "viewdeleted_short": "{{PLURAL:$1| টি অপসারিত সম্পাদনা|$1 টি অপসারিত সম্পাদনা}} দেখাও",
        "protect": "সুরক্ষা",
        "protect_change": "পরিবর্তন করুন",
-       "protectthispage": "সà¦\82রà¦\95à§\8dষণ à¦\95রà§\81ন",
+       "protectthispage": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\95à§\87 à¦¸à§\81রà¦\95à§\8dষিত à¦\95রà§\8b",
        "unprotect": "সুরক্ষা পরিবর্তন",
        "unprotectthispage": "এই পাতার সুরক্ষা পরিবর্তন করুন",
        "newpage": "নতুন পাতা",
        "talkpagelinktext": "আলোচনা",
        "specialpage": "বিশেষ পাতা",
        "personaltools": "নিজস্ব সরঞ্জামসমূহ",
-       "articlepage": "নিবনà§\8dধ দেখুন",
+       "articlepage": "বিষয়বসà§\8dতà§\81 à¦ªà¦¾à¦¤à¦¾à¦\9fি দেখুন",
        "talk": "আলোচনা",
        "views": "দৃষ্টিকোণ",
        "toolbox": "সরঞ্জাম",
        "categorypage": "বিষয়শ্রেণীর পাতাটি দেখুন",
        "viewtalkpage": "আলোচনা দেখুন",
        "otherlanguages": "অন্যান্য ভাষাসমূহ",
-       "redirectedfrom": "($1 à¦¥à§\87à¦\95à§\87 à¦\98à§\81রà§\87 à¦\8fসà§\87à¦\9bà§\87)",
+       "redirectedfrom": "($1 à¦¥à§\87à¦\95à§\87 à¦ªà§\81নরà§\8dনিরà§\8dদà§\87শিত)",
        "redirectpagesub": "পুনর্নির্দেশ পাতা",
        "redirectto": "পুননির্দেশিত হয়েছে:",
        "lastmodifiedat": "এ পাতায় শেষ পরিবর্তন হয়েছিল $2টার সময়, $1 তারিখে।",
        "disclaimers": "দাবিত্যাগ",
        "disclaimerpage": "Project:সাধারণ দাবিত্যাগ",
        "edithelp": "সম্পাদনা সহায়িকা",
+       "helppage-top-gethelp": "সাহায্য",
        "mainpage": "প্রধান পাতা",
        "mainpage-description": "প্রধান পাতা",
        "policy-url": "Project:নীতিমালা",
        "readonly_lag": "ডাটাবেজ স্বয়ংক্রিয়ভাবে বন্ধ করে দেয়া হয়েছে, যাতে অধীন ডাটাবেজ সার্ভারগুলি প্রধান ডাটাবেজ সার্ভারের অবস্থায় আসতে পারে।",
        "internalerror": "আভ্যন্তরীণ ত্রুটি",
        "internalerror_info": "আভ্যন্তরীণ ত্রুটি: $1",
+       "internalerror-fatal-exception": "\"$1\" ধরনের মারাত্মক ব্যতিক্রম",
        "filecopyerror": "\"$1\" থেকে \"$2\" ফাইল কপি করা যায়নি",
        "filerenameerror": "\"$1\" ফাইলটির নাম বদলে \"$2\" করা সম্ভব হচ্ছে না।",
        "filedeleteerror": "\"$1\" ফাইলটি মুছে ফেলা সম্ভব হচ্ছে না।",
        "missingcommentheader": "'''খেয়াল করুন:''' আপনি এই মন্তব্যের জন্য কোন বিষয়/শিরোনাম দেননি। সংরক্ষণ বোতামে ক্লিক করলে, আপনার এই সম্পাদনা কোন বিষয়/শিরোনাম ছাড়াই সংরক্ষিত হবে।",
        "summary-preview": "সারাংশ প্রাকদর্শন:",
        "subject-preview": "বিষয়/শিরোনাম প্রাকদর্শন:",
+       "previewerrortext": "আপনার পরিবর্তনগুলি প্রাকদর্শন করার চেষ্টা করার সময় একটি ত্রুটি ঘটেছে।",
        "blockedtitle": "ব্যবহারকারীকে বাধা দেয়া হয়েছে",
        "blockedtext": "আপনার ব্যবহারকারী নাম বা আইপি ঠিকানার ঊপর নিষেধাজ্ঞা আরোপিত হয়েছে।\n\n$1 নিষেধাজ্ঞা আরোপ করেছেন। নিষেধের কারণ হিসেবে বলা হয়েছে:''$2''।\n\n* নিষেধাজ্ঞা শুরুর সময়:$8\n* নিষেধাজ্ঞা উঠিয়ে নেয়ার সময়: $6\n* যার উপর নিষেধাজ্ঞা আরোপ করা হয়েছে: $7\n\nআপনি $1 অথবা [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকদের]] কারও সাথে এই নিষেধাজ্ঞা সংক্রান্ত বিষয়ে আলোচনা করতে পারেন।\n\nআপনি '(ব্যবহারকারীকে) ইমেইল করুন' ফিচারটি ব্যবহার করতে পারবেন না। তবে [[Special:Preferences|আপনার পছন্দ তালিকাতে]] যদি একটি বৈধ ই-মেইল ঠিকানা নির্দিষ্ট করা হয়ে থাকে এবং ফিচারটি ব্যবহারে যদি আপনাকে বাধা না দেওয়া হয়ে থাকে, তবে আপনি ফিচারটি ব্যবহার করতে পারবেন।\n\nআপনার বর্তমান আইপি ঠিকানা $3, এবং আপনার নিষেধাজ্ঞা নং হল #$5।\n\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আপনার বর্তমান IP ঠিকানা হচ্ছে $3, এবং যা বাধা দানের আইডি হল $5।\nযেকোন প্রশ্ন করার সময় উপরের সকল তথ্য উল্লেখ করুন।",
        "nosuchsectiontitle": "অনুচ্ছেদ পাওয়া যায়নি",
        "nosuchsectiontext": "আপনি এমন একটি অনুচ্ছেদ সম্পাদনার চেষ্টা করেছেন, যার কোন অস্তিত্ব নেই।\nযখন এই পাতাটি দেখার চেষ্টা করছে, তখন হয়তো এটি সরিয়ে অথবা অপসারণ করা হয়েছে।",
        "loginreqtitle": "লগ-ইন প্রয়োজন",
-       "loginreqlink": "লà¦\97-à¦\87ন",
+       "loginreqlink": "পà§\8dরবà§\87শ",
        "loginreqpagetext": "অন্যান্য পাতা দেখতে হলে আপনাকে অবশ্যই $1 হতে হবে।",
        "accmailtitle": "পাসওয়ার্ড পাঠানো হয়েছে",
        "accmailtext": "[[User talk:$1|$1]] এর জন্য দৈব ভাবে উৎপন্ন শব্দ চাবি $2 এ পাঠানো হয়েছে।\nলগ-ইন করার পর ''[[Special:ChangePassword|পাসওয়ার্ড পরিবর্তন]]'' পাতা থেকে এটি পরিবর্তন করা যাব।",
        "rev-suppressed-unhide-diff": "তুলনা করা হয়েছে এমন সংস্করণগুলোর কোনো একটি '''অপসারিত''' হয়েছে।\nবিস্তারিত কারণ এর [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] পাওয়া যেতে পারে।\nআপনি ইচ্ছা পোষণ করলে [$1 এই সংস্করণটি দেখতে পারেন]।",
        "rev-deleted-diff-view": "তুলনা করা হয়েছে এমন সংস্করণগুলোর কোনো একটি '''অপসারণ''' করা হয়েছে।\nআপনি এটি দেখতে পারেন; এ সংক্রাস্ত বিস্তারিত বিবরণ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} অবলুপ্তি লগে] থাকতে পারে।",
        "rev-suppressed-diff-view": "তুলনা করা হয়েছে এমন সংস্করণগুলোর কোনো একটি '''অপসারণ''' করা হয়েছে।\nআপনি এটি দেখতে পারেন; এ সংক্রাস্ত বিস্তারিত বিবরণ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} অবলুপ্তি লগে] থাকতে পারে।",
-       "rev-delundel": "দà§\87à¦\96াà¦\93/à¦\86ড়াল করো",
+       "rev-delundel": "দà§\83শà§\8dযমানতা à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন করো",
        "rev-showdeleted": "দেখাও",
        "revisiondelete": "অবলুপ্ত/পুনঃস্থাপন সংশোধনসমূহ",
        "revdelete-nooldid-title": "বেঠিক লক্ষ্য সংশোধন",
        "prevn": "পূর্ববর্তী {{PLURAL:$1|$1}}টি",
        "nextn": "পরবর্তী {{PLURAL:$1|$1}}টি",
        "prevn-title": "পূর্ববর্তী $1 {{PLURAL:$1|ফলাফল|ফলাফলসমূহ}}",
-       "nextn-title": "পরবর্তী $1 {{PLURAL:$1|ফলাফল|ফলাফলসমূহ}}",
-       "shown-title": "প্রতি পাতায় $1 {{PLURAL:$1|ফলাফল|ফলাফলসমূহ}} দেখাও",
+       "nextn-title": "পরবর্তী $1টি {{PLURAL:$1|ফলাফল}}",
+       "shown-title": "প্রতি পাতায় $1টি {{PLURAL:$1|ফলাফল}} দেখাও",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) দেখানো হোক।",
        "searchmenu-exists": "'''এই উইকিতে \"[[:$1]]\" নামে একটি পাতা রয়েছে'''",
        "searchmenu-new": "<strong>\"[[:$1]]\" পাতাটি এই উইকিতে তৈরি করুন!</strong> {{PLURAL:$2|0=|এছাড়া আপনার অনুসন্ধানের সাথে পাওয়া পাতা দেখুন।|এছাড়া অনুসন্ধানে পাওয়া ফলাফলগুলি দেখুন।}}",
        "prefs-rc": "সাম্প্রতিক পরিবর্তনসমূহ",
        "prefs-watchlist": "নজরতালিকা",
        "prefs-editwatchlist": "নজরতালিকা সম্পাদনা করো",
+       "prefs-editwatchlist-label": "আপনার নজরতালিকার ভুক্তিসমূহ সম্পাদনা করুন:",
+       "prefs-editwatchlist-edit": "আপনার নজরতালিকায় থাকা শিরোনাম দেখুন ও সরান",
        "prefs-editwatchlist-raw": "অশোধিত নজরতালিকা সম্পাদনা করুন",
        "prefs-editwatchlist-clear": "নজরতালিকা পরিস্কার করুন",
        "prefs-watchlist-days": "যত দিনের নজরতালিকা দেখানো হবে:",
        "right-override-export-depth": "৫ম স্তর পর্যন্ত সংযুক্তিসহ একটি পাতা রপ্তানী করুন",
        "right-sendemail": "অন্য ব্যবহারকারীকে ইমেইল পাঠান",
        "right-passwordreset": "পাসওয়ার্ড রিসেট ইমেইল দেখুন",
+       "right-managechangetags": "ডাটাবেস থেকে [[Special:Tags|ট্যাগ]] তৈরি ও অপসারণ করুন",
        "newuserlogpage": "ব্যবহারকারী সৃষ্টির লগ",
        "newuserlogpagetext": "এটি নতুন ব্যবহারকারী সৃষ্টির লগ",
        "rightslog": "ব্যবহারকারীর অধিকার লগ",
        "action-viewmywatchlist": "আপনার নজরতালিকা দেখুন",
        "action-viewmyprivateinfo": "আপনার ব্যক্তিগত তথ্য দেখুন",
        "action-editmyprivateinfo": "আপনার ব্যক্তিগত তথ্য সম্পাদনা করুন",
+       "action-managechangetags": "ডাটাবেস থেকে ট্যাগ তৈরি ও অপসারণ করুন",
        "nchanges": "$1টি {{PLURAL:$1|পরিবর্তন}}",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|সর্বশেষ প্রদর্শনের পর}} $1টি",
        "enhancedrc-history": "ইতিহাস",
        "listduplicatedfiles": "সদৃশ ফাইলের তালিকা",
        "listduplicatedfiles-summary": "এটি ফাইলসমূহের একটি তালিকা যেখানে একটি ফাইলের সাম্প্রতিকতম সংস্করণ অন্য আরেকটি ফাইলের সাম্প্রতিকতম সংস্করণের প্রতিলিপি। শুধু স্থানীয় ফাইল বিবেচনা করা হয়েছে।",
        "listduplicatedfiles-entry": "[[:File:$1|$1]]-এর [[$3|{{PLURAL:$2|একটি প্রতিলিপি|$2টি প্রতিলিপি}}]] রয়েছে।",
-       "unusedtemplates": "à¦\85বà§\8dযবহà§\83ত à¦\9fà§\87মপà§\8dলà§\87à¦\9fà¦\97à§\81লি",
+       "unusedtemplates": "à¦\85বà§\8dযবহà§\83ত à¦\9fà§\87মপà§\8dলà§\87à¦\9fসমà§\82হ",
        "unusedtemplatestext": "{{ns:template}} নামস্থানের যে সমস্ত পাতা অন্য কোন পাতায় অন্তর্ভুক্ত নয়, তাদের সবগুলির তালিকা এই পাতায় দেওয়া হল। টেমপ্লেটগুলি মুছে ফেলার আগে পরীক্ষা করে দেখুন অন্য কোথাও থেকে এগুলিতে সংযোগ আছে কি না।",
        "unusedtemplateswlh": "অন্যান্য সংযোগগুলি",
        "randompage": "অজানা যেকোনো পাতা",
        "pageswithprop-submit": "চলো",
        "pageswithprop-prophidden-long": "দীর্ঘ প্রোপার্টি টেক্সটগুলো লুকানো রয়েছে ($1)",
        "pageswithprop-prophidden-binary": "বাইনারি প্রোপার্টি টেক্সটগুলো লুকানো রয়েছে ($1)",
-       "doubleredirects": "দà§\81à¦\87বার à¦\95রা à¦ªà§\81নরà§\8dনিরà§\8dদà§\87শনাà¦\97à§\81লি",
+       "doubleredirects": "দà§\81à¦\87বার à¦\95রা à¦ªà§\81নরà§\8dনিরà§\8dদà§\87শনাসমà§\82হ",
        "doubleredirectstext": "এই পাতায় এমন পাতাগুলোর তালিকা আছে, যেগুলো অন্য কোন পুনর্নির্দেশনা পাতায় পুনর্নির্দেশিত হয়েছে। প্রতিটি সারিতে প্রথম ও দ্বিতীয় পুনর্নির্দেশনার জন্য সংযোগ আছে এবং দ্বিতীয় পুনর্নির্দেশনাটির লক্ষ্য সংযোগটিও দেওয়া আছে। এই লক্ষ্য সংযোগটিই সাধারণত \"আসল\" লক্ষ্য পাতা, যেটিতে প্রথম পুনর্নির্দেশনাটি থেকে সংযোগ থাকা উচিত।\n<del>কেটে দেওয়া</del> ভুক্তিগুলো ঠিক করা হয়েছে।",
        "double-redirect-fixed-move": "[[$1]] সরিয়ে নেওয়া হয়েছে।\nএটি স্বয়ংক্রিয়ভাবে হালনাগাদ হয়েছে এবং এটি এখন [[$2]] এ পুনঃনির্দেশিত হয়েছে।",
        "double-redirect-fixed-maintenance": "রক্ষণাবেক্ষণ কাজ হিসাবে [[$1]] থেকে [[$2]] এর দ্বিপুনঃর্নিদেশ স্বয়ংক্রিয়ভাবে সংশোধন করা হয়েছে।",
        "wantedcategories": "বাঞ্ছনীয় বিষয়শ্রেণীগুলি",
        "wantedpages": "বাঞ্ছনীয় পাতাগুলি",
        "wantedpages-badtitle": "ফলাফলে ভুল শিরনাম: $1",
-       "wantedfiles": "à¦\86বশà§\8dযিà¦\95 à¦«à¦¾à¦\87লà¦\97à§\81লà§\8b",
+       "wantedfiles": "à¦\86বশà§\8dযিà¦\95 à¦«à¦¾à¦\87লসমà§\82হ",
        "wantedfiletext-cat": "নিচের ফাইলগুলো ব্যবহৃত হচ্ছে কিন্তু এগুলো অপসারিত হয়েছে। অন্যান্য রিপোজিটরী থেকে ব্যবহৃত ফাইলগুলো এভাবে প্রদর্শিত হতে পারে। এই ধরনের কোন ফাইল খুজে পেলে <del>অপসারণ করুন</del>। এছাড়া অপসারিত হয়েছে এমন ছবির সংযোগ রয়েছে এমন পাতাসমূহের লিংক পাওয়া যাবে এখানে [[:$1]]।",
        "wantedfiletext-nocat": "নিচের ফাইলগুলো ব্যবহৃত হচ্ছে কিন্তু এগুলো অপসারিত হয়েছে। অন্যান্য রিপোজিটরী থেকে ব্যবহৃত ফাইলগুলো এভাবে প্রদর্শিত হতে পারে। এই ধরনের ভূলগুলো শিঘ্রই <del>অপসারিত হবে</del>।",
        "wantedfiletext-nocat-noforeign": "নিম্নলিখিত ফাইলসমূহ ব্যবহৃত হয়েছে কিন্তু এর অস্তিত্ব নেই।",
-       "wantedtemplates": "à¦\86বশà§\8dযিà¦\95 à¦\9fà§\87মà§\8dপলà§\87à¦\9fà¦\97à§\81লà§\8b",
+       "wantedtemplates": "à¦\86বশà§\8dযিà¦\95 à¦\9fà§\87মপà§\8dলà§\87à¦\9fসমà§\82হ",
        "mostlinked": "যেসব পাতার প্রতি সবচেয়ে বেশি সংযোগ আছে",
        "mostlinkedcategories": "যেসব বিষয়শ্রেণীর প্রতি সবচেয়ে বেশি সংযোগ আছে",
        "mostlinkedtemplates": "সবচেয়ে বেশি অন্তর্ভুক্ত পাতা",
        "enotif_body_intro_created": "{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে তৈরী করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।",
        "enotif_body_intro_moved": "{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে স্থানান্তর করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।",
        "enotif_body_intro_restored": "{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE আগের অবস্থায় ফিরিয়ে এনেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।",
-       "enotif_body_intro_changed": "{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে পরিবর্তন করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।",
+       "enotif_body_intro_changed": "{{SITENAME}} এর $1 পাতাটি $PAGEEDITDATE তারিখে $2 কর্তৃক {{GENDER:$2|পরিবর্তিত}} হয়েছে, বর্তমান সংস্করণের দেখুন $3।",
        "enotif_lastvisited": "আপনার শেষ আগমনের পরে সংঘটিত সমস্ত পরিবর্তনের জন্য $1 দেখুন।",
        "enotif_lastdiff": "এই পরিবর্তনটি দেখার জন্য $1 দেখুন।",
        "enotif_anon_editor": "বেনামী ব্যবহারকারী $1",
-       "enotif_body": "প্রিয় $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nসম্পাদকের সারাংশ: $PAGESUMMARY $PAGEMINOREDIT\n\nসম্পাদকের সাথে যোগাযোগের উপায়:\nইমেইল: $PAGEEDITOR_EMAIL\nউইকি: $PAGEEDITOR_WIKI\n\nপাতাটির পরবর্তী পরিবর্তনগুলো জন্য আর কোন বিজ্ঞপ্তি পাঠানো হবে না, যতক্ষণ না আপনি লগ ইন করার সময় এই পাতায় ব্রাউজ করবেন। এছাড়া আপনি আপনার নজরতালিকায় রাখা সবগুলি পাতা জন্য বিজ্ঞপ্তি ফ্ল্যাগ শুরুর অবস্থায় ফিরিয়ে নিতে পারেন।\n\n{{SITENAME}} নোটিফিকেশন\n\n--\nইমেইল নোটিফিকেশন সেটিং পরিবর্তনের জন্য দেখুন\n{{canonicalurl:{{#special:Preferences}}}}\n\nআপনার নজরতালিকা সেটিংস পরিবর্তন করতে চাইলে দেখুন, \n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nনজরতালিকা থেকে কোন পাতা অপসারণ করতে চাইলে এখানে যান:\n$UNWATCHURL\n\nপ্রতিক্রিয়া জানাতে ও আরও সহযোগিতার জন্য:\n$HELPPAGE",
+       "enotif_body": "প্রিয় $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nসম্পাদকের সারাংশ: $PAGESUMMARY $PAGEMINOREDIT\n\nসম্পাদকের সাথে যোগাযোগের উপায়:\nইমেইল: $PAGEEDITOR_EMAIL\nউইকি: $PAGEEDITOR_WIKI\n\nপাতাটির পরবর্তী পরিবর্তনগুলো জন্য আর কোন বিজ্ঞপ্তি পাঠানো হবে না, যতক্ষণ না আপনি লগ ইন করার সময় এই পাতায় ব্রাউজ করবেন। এছাড়া আপনি আপনার নজরতালিকায় রাখা সবগুলি পাতা জন্য বিজ্ঞপ্তি ফ্ল্যাগ শুরুর অবস্থায় ফিরিয়ে নিতে পারেন।\n\nআপনার বন্ধুত্বপূর্ণ {{SITENAME}} বিজ্ঞপ্তি সিস্টেম\n\n--\nইমেইল বিজ্ঞপ্তি সেটিং পরিবর্তনের জন্য দেখুন\n{{canonicalurl:{{#special:Preferences}}}}\n\nআপনার নজরতালিকা সেটিংস পরিবর্তন করতে চাইলে দেখুন, \n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nনজরতালিকা থেকে কোন পাতা অপসারণ করতে চাইলে এখানে যান:\n$UNWATCHURL\n\nপ্রতিক্রিয়া জানাতে ও আরও সহযোগিতার জন্য:\n$HELPPAGE",
        "created": "তৈরী হয়েছিল",
        "changed": "পরিবর্তিত",
        "deletepage": "পাতাটি মুছে ফেলা হোক",
        "whatlinkshere-next": "{{PLURAL:$1|পরবর্তী|পরবর্তী $1টি}}",
        "whatlinkshere-links": "← সংযোগগুলি",
        "whatlinkshere-hideredirs": "পুননির্দেশনা $1",
-       "whatlinkshere-hidetrans": "$1 ট্রান্সক্লুশন",
+       "whatlinkshere-hidetrans": "ট্রান্সক্লুশন $1",
        "whatlinkshere-hidelinks": "সংযোগ $1",
        "whatlinkshere-hideimages": "$1 ফাইল সংযোগ",
        "whatlinkshere-filters": "ছাকনী",
        "unblocked": "[[User:$1|$1]]-এর উপর বাধা তুলে নেওয়া হয়েছে",
        "unblocked-range": "$1 -এর থেকে বাধা সরিয়ে নেওয়া হয়েছে",
        "unblocked-id": "$1 বাধাটি তুলে নেওয়া হয়েছে",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] কে অবরোধমুক্ত করা হয়েছে।",
        "blocklist": "বাধাপ্রাপ্ত ব্যবহারকারী",
        "ipblocklist": "বাধাপ্রাপ্ত ব্যবহারকারী",
        "ipblocklist-legend": "বাধা দেওয়া কোন ব্যবহারকারীকে অনুসন্ধান করুন",
        "blocklist-timestamp": "সময়বার্তা",
        "blocklist-target": "লক্ষ্য",
        "blocklist-expiry": "মেয়াদোত্তীর্ণ হবে",
-       "blocklist-by": "পà§\8dরশাসà¦\95à¦\95à§\87 à¦¬à¦¾à¦§à¦¾à¦ªà§\8dরদান",
+       "blocklist-by": "বাধাপà§\8dরদানà¦\95ারà§\80 à¦ªà§\8dরশাসà¦\95",
        "blocklist-params": "বাধাদানের প্যারামিটার",
        "blocklist-reason": "কারণ",
        "ipblocklist-submit": "অনুসন্ধান",
        "blocklogpage": "বাধা দানের লগ",
        "blocklog-showlog": "এই ব্যবহারকারীকে পূর্বেও বাধা প্রদান করা হয়েছিলো।\nতথ্যসূত্র হিসেবে তাই পূর্বের বাধাদানের লগটি নিচে প্রদর্শন করা হচ্ছে:",
        "blocklog-showsuppresslog": "এই ব্যবহারকারীকে পূর্বেও বাধা প্রদান ও লুকানো হয়েছিলো।\nতথ্যসূত্র হিসেবে তাই পূর্বের অপসারণ লগটি নিচে প্রদর্শন করা হচ্ছে:",
-       "blocklogentry": "[[$1]]এর উপর $2 $3 মেয়াদের জন্য নিষেধাজ্ঞা আরোপিত হয়েছে।",
+       "blocklogentry": "[[$1]] কে $2 মেয়াদের জন্য বাধাদান করেছেন $3",
        "reblock-logentry": "[[$1]] এর ব্লক সেটিং পরিবর্তন করা হয়েছে যেটি শেষ হবে $2 $3 সময়ে",
        "blocklogtext": "এটি ব্যবহারকারীদেরকে বাধা দানের বা বাধা তুলে নেওয়ার লগ।\nস্বয়ংক্রিয়ভাবে বাধাদানকৃত আইপি ঠিকানাগুলি এখানে তালিকাবদ্ধ করা হয়নি।\nবর্তমানে সক্রিয় নিষিদ্ধকরণ ও বাধাদানের তালিকার জন্য [[Special:BlockList| বাধাদান তালিকা]] দেখুন।",
        "unblocklogentry": "$1-এর উপর বাধা তুলে নেয়া হয়েছে",
        "thumbnail_gd-library": "অসম্পূর্ণ জিডি লাইব্রেরী কনফিগারেশন: $1 ফাংশন নেই",
        "thumbnail_image-missing": "ফাইলটি খুজে পাওয়া যাচ্ছে না: $1",
        "import": "পাতা আমদানি",
-       "importinterwiki": "à¦\86নà§\8dতà¦\83à¦\89à¦\87à¦\95ি à¦\86মদানি",
-       "import-interwiki-text": "à¦\86মদানির à¦\9cনà§\8dয à¦\8fà¦\95à¦\9fি à¦\89à¦\87à¦\95ি à¦\93 à¦ªà¦¾à¦¤à¦¾à¦° à¦¶à¦¿à¦°à§\8bনাম à¦¨à¦¿à¦°à§\8dবাà¦\9aন à¦\95রà§\81ন।\nসà¦\82শà§\8bধনà§\87র à¦¤à¦¾à¦°à¦¿à¦\96à¦\97à§\81লি à¦\8fবà¦\82 à¦¸à¦®à§\8dপাদà¦\95দà§\87র à¦¨à¦¾à¦®à¦\97à§\81লি à¦¸à¦\82রà¦\95à§\8dষণ à¦\95রা à¦¹à¦¬à§\87।\nসমসà§\8dত à¦\86নà§\8dতà¦\83à¦\89à¦\87à¦\95ি à¦\86মদানিà¦\97à§\81লি [[Special:Log/import|আমদানি লগে]] লিপিবদ্ধ আছে।",
+       "importinterwiki": "à¦\85নà§\8dয à¦\89à¦\87à¦\95ি à¦¥à§\87à¦\95à§\87 à¦\86মদানà§\80",
+       "import-interwiki-text": "à¦\86মদানির à¦\9cনà§\8dয à¦\8fà¦\95à¦\9fি à¦\89à¦\87à¦\95ি à¦\93 à¦ªà¦¾à¦¤à¦¾à¦° à¦¶à¦¿à¦°à§\8bনাম à¦¨à¦¿à¦°à§\8dবাà¦\9aন à¦\95রà§\81ন।\nসà¦\82শà§\8bধনà§\87র à¦¤à¦¾à¦°à¦¿à¦\96à¦\97à§\81লি à¦\8fবà¦\82 à¦¸à¦®à§\8dপাদà¦\95দà§\87র à¦¨à¦¾à¦®à¦\97à§\81লি à¦¸à¦\82রà¦\95à§\8dষণ à¦\95রা à¦¹à¦¬à§\87।\nà¦\85নà§\8dযানà§\8dয à¦\89à¦\87à¦\95ি à¦¥à§\87à¦\95à§\87 à¦¸à¦®à¦¸à§\8dত à¦\86মদানি [[Special:Log/import|আমদানি লগে]] লিপিবদ্ধ আছে।",
        "import-interwiki-sourcewiki": "উত্স উইকি:",
        "import-interwiki-sourcepage": "উৎস পাতা:",
        "import-interwiki-history": "এই পাতার সমস্ত ইতিহাসের সংস্করণের অনুলিপি করা হোক",
        "import-rootpage-nosubpage": "মূল পাতার \"$1\" নামস্থানে উপপাতা তৈরী অনুমোদিত নয়।",
        "importlogpage": "আমদানি লগ",
        "importlogpagetext": "প্রশাসক কর্তৃক অন্যান্য উইকি থেকে সম্পাদনা ইতিহাসসহ পাতা আমদানি।",
-       "import-logentry-upload": "ফাইল আপলোডের মাধ্যমে [[$1]] আমদানি করা হয়েছে",
        "import-logentry-upload-detail": "$1টি {{PLURAL:$1|সংশোধন}} আমদানি করা হয়েছে",
-       "import-logentry-interwiki": "$1 উইকি-স্থানান্তরিত",
        "import-logentry-interwiki-detail": "$2-এর থেকে $1টি {{PLURAL:$1|সংশোধন}} করা হয়েছে",
        "javascripttest": "জাভাস্ক্রিপ্ট পরীক্ষা",
        "javascripttest-pagetext-noframework": "এই পাতাটি জাভাস্ক্রিপ্ট পরীক্ষার জন্য সংরক্ষিত।",
        "tooltip-pt-preferences": "আমার পছন্দ",
        "tooltip-pt-watchlist": "যে পাতাগুলির পরিবর্তন আপনি নজরে রেখেছেন, তাদের তালিকা",
        "tooltip-pt-mycontris": "আপনার অবদানগুলোর তালিকা",
-       "tooltip-pt-login": "à¦\86পনার à¦²à¦\97-à¦\87ন করাটা বাঞ্চনীয়, কিন্তু তা বাধ্যতামূলক নয়।",
+       "tooltip-pt-login": "à¦\86পনার à¦ªà§\8dরবà§\87শ করাটা বাঞ্চনীয়, কিন্তু তা বাধ্যতামূলক নয়।",
        "tooltip-pt-logout": "প্রস্থান",
        "tooltip-pt-createaccount": "আপনাকে একটি অ্যাকাউন্ট তৈরি করে প্রবেশ করার পরামর্শ দেওয়া হচ্ছে; তবে এটা বাধ্যতামূলক নয়",
        "tooltip-ca-talk": "বিষয়বস্তু পাতা সম্পর্কে আলোচনা",
        "tooltip-ca-edit": "আপনি এই পাতা সম্পাদনা করতে পারেন। অনুগ্রহ করে সংরক্ষণের আগে প্রাকদর্শন করুন।",
-       "tooltip-ca-addsection": "নতুন অনুচ্ছেদ শুরু করুন",
+       "tooltip-ca-addsection": "নতুন অনুচ্ছেদ শুরু করুন",
        "tooltip-ca-viewsource": "এই পাতাটি সুরক্ষিত। আপনি পাতাটির উৎস দেখতে পারেন।",
        "tooltip-ca-history": "এই পাতার পুরনো সংস্করণগুলি",
        "tooltip-ca-protect": "এই পাতাকে সুরক্ষিত করো",
        "tooltip-ca-unprotect": "এই পাতার সুরক্ষা পরিবর্তন করো",
        "tooltip-ca-delete": "পাতাটি মুছে ফেলো",
        "tooltip-ca-undelete": "পাতাটি মুছে ফেলার আগে যে সম্পাদনাগুলি করা হয়েছিল, সেগুলি উদ্ধার করা হোক।",
-       "tooltip-ca-move": "পাতাà¦\9fি à¦¸à¦°à¦¿à¦¯à¦¼à§\87 à¦«à§\87লুন",
-       "tooltip-ca-watch": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86পনার à¦¨à¦\9cরতালিà¦\95ায় à¦¯à§\8bà¦\97 à¦\95রà§\8b",
+       "tooltip-ca-move": "পাতাà¦\9fি à¦¸à§\8dথানানà§\8dতর à¦\95রুন",
+       "tooltip-ca-watch": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86পনার à¦¨à¦\9cরতালিà¦\95ায় à¦¯à§\8bà¦\97 à¦\95রà§\81ন",
        "tooltip-ca-unwatch": "এই পাতাটি আপনার নজরতালিকা থেকে সরিয়ে ফেলুন",
        "tooltip-search": "{{SITENAME}} অনুসন্ধান",
        "tooltip-search-go": "যদি থাকে, তবে ঠিক এই নামের পাতায় চলো",
        "svg-long-desc-animated": "এনিমেটেড এসভিজি ফাইল, সাধারণত $1 × $2 পিক্সেল, ফাইলের আকার: $3",
        "svg-long-error": "অবৈধ SVG ফাইল: $1",
        "show-big-image": "মূল ফাইল",
-       "show-big-image-preview": "à¦\8fà¦\87 à¦ªà§\8dরিভিà¦\89-à¦\8fর আকার: $1।",
+       "show-big-image-preview": "à¦\8fà¦\87 à¦ªà§\8dরাà¦\95দরà§\8dশনà§\87র আকার: $1।",
        "show-big-image-other": "অন্যান্য {{PLURAL:$2|আকার|আকারসমূহ}}: $1।",
        "show-big-image-size": "$1 × $2 পিক্সেল",
        "file-info-gif-looped": "লুপকৃত",
        "exif-datetime": "ফাইল পরিবর্তনের তারিখ ও সময়",
        "exif-imagedescription": "ছবির শিরোনাম",
        "exif-make": "ক্যামেরার তৈরিকারক",
-       "exif-model": "ক্যামেরা মডেল",
+       "exif-model": "ক্যামেরা মডেল",
        "exif-software": "ব্যবহৃত সফটওয়্যার",
        "exif-artist": "স্রষ্টা",
        "exif-copyright": "কপিরাইট ধারক",
        "redirect-revision": "পাতা সংস্করণ",
        "redirect-file": "ফাইলের নাম",
        "redirect-not-exists": "মান পাওয়া যায়নি",
-       "fileduplicatesearch": "ডà§\81পà§\8dলিà¦\95à§\87à¦\9f ফাইলের জন্য অনুসন্ধান",
+       "fileduplicatesearch": "সদà§\83শ ফাইলের জন্য অনুসন্ধান",
        "fileduplicatesearch-summary": "হ্যাশ ভ্যালুর ওর ভিত্তি করে একই ছবিগুলো খুঁজুন।",
        "fileduplicatesearch-legend": "অনুলিপির জন্য অনুসন্ধান",
        "fileduplicatesearch-filename": "ফাইলনাম:",
        "tags-actions-header": "কার্যসমূহ",
        "tags-active-yes": "হ্যাঁ",
        "tags-active-no": "না",
+       "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-delete-title": "ট্যাগ অপসারণ",
        "tags-delete-reason": "কারণ:",
+       "tags-delete-submit": "অপরিবর্তনীয় এই ট্যাগ অপসারন করো",
+       "tags-activate-title": "সক্রিয় ট্যাগ",
        "tags-activate-reason": "কারণ:",
        "tags-activate-submit": "চালু",
+       "tags-deactivate-title": "নিষ্ক্রিয় ট্যাগ",
+       "tags-deactivate-reason": "কারণ:",
        "tags-deactivate-submit": "নিষ্ক্রিয়",
        "comparepages": "পাতার তুলনা",
        "compare-page1": "পাতা ১",
        "revdelete-uname-unhid": "ব্যবহারকারী নাম প্রদর্শিত",
        "revdelete-restricted": "এই সীমাবদ্ধতা প্রশাসকের ক্ষেত্রে প্রয়োগ করো",
        "revdelete-unrestricted": "এই সীমাবদ্ধতা প্রশাসকের ক্ষেত্রে তুলে নাও",
+       "logentry-block-block": "$1 {{GENDER:$4|$3}} কে $5 মেয়াদের জন্য {{GENDER:$2|বাধাদান}} করেছেন $6",
+       "logentry-block-unblock": "$1 {{GENDER:$4|$3}}-এর উপর থেকে বাধা তুলে {{GENDER:$2|নিয়েছেন}}",
        "logentry-move-move": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে {{GENDER:$2|স্থানান্তর}} করেছেন",
        "logentry-move-move-noredirect": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
        "logentry-move-move_redir": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনির্নির্দেশনার মাধ্যমে {{GENDER:$2|স্থানান্তর}} করেছেন",
        "logentry-patrol-patrol": "$1 ব্যবহারকারী $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন",
        "logentry-patrol-patrol-auto": "$1 ব্যবহারকারী স্বয়ংক্রিয়ভাবে $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন",
        "logentry-newusers-newusers": "$1 ব্যবহারকারী অ্যাকাউন্টটি {{GENDER:$2|তৈরি করা}} হয়েছে",
-       "logentry-newusers-create": "$1 অ্যাকাউন্টটি {{GENDER:$2|তৈরী করা}} হয়েছে",
+       "logentry-newusers-create": "ব্যবহারকারী অ্যাকাউন্ট $1 {{GENDER:$2|তৈরী করা}} হয়েছে",
        "logentry-newusers-create2": "$1 ব্যবহারকারী $3 নামের অ্যাকাউন্টটি {{GENDER:$2|তৈরী}} করেছেন",
        "logentry-newusers-byemail": "$1, $3 ব্যবহারকরী অ্যাকাউন্টটি {{GENDER:$2|তৈরী করেছেন}} এবং পাসওয়ার্ড ইমেইলের মাধ্যমে পাঠানো হয়েছে",
        "logentry-newusers-autocreate": "$1 অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে {{GENDER:$2|তৈরি}} হয়েছে",
        "logentry-upload-upload": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}",
        "logentry-upload-overwrite": "$1 $3-এর একটি নতুন সংস্করণ {{GENDER:$2|আপলোড করেছেন}}",
        "logentry-upload-revert": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}",
+       "log-name-managetags": "ট্যাগ ব্যবস্থাপনা লগ",
        "rightsnone": "(কিছু নাই)",
        "revdelete-summary": "সম্পাদনা সারাংশ",
+       "feedback-adding": "পাতায় প্রতিক্রিয়া যোগ হচ্ছে...",
+       "feedback-back": "পিছনে",
+       "feedback-bugcheck": "উত্তম! যাচাই করুন যে এই [$1  জানা বাগের] কোন একটি কিনা।",
+       "feedback-bugnew": "আমি যাচাই করেছি। নতুন বাগ নিবন্ধন করুন।",
        "feedback-bugornote": "কারিগরী ত্রুটির বিস্তারিত বর্ণনা জানতে [$1 বাগ রিপোর্ট করুন]।\nঅথবা নিচের এই সরল ফর্মটি ব্যবহার করতে পারেন। \"[$3 $2]\" পাতায় আপনার ব্যবহারকারী নাম সহ মন্তব্যটি প্রকাশিত হবে।",
-       "feedback-subject": "বিষয়:",
-       "feedback-message": "বার্তা:",
        "feedback-cancel": "বাতিল",
-       "feedback-submit": "প্রতিক্রিয়া জমা",
-       "feedback-adding": "পাতায় প্রতিক্রিয়া যোগ হচ্ছে...",
+       "feedback-close": "সম্পন্ন",
+       "feedback-external-bug-report-button": "প্রযুক্তিগত কাজ ফাইল করুন",
+       "feedback-dialog-title": "প্রতিক্রিয়া জমা দিন",
+       "feedback-error-title": "ত্রুটি",
        "feedback-error1": "ত্রুটি: এপিআই হতে অজানা ফলাফল এসেছে",
        "feedback-error2": "ত্রুটি: সম্পাদনা ব্যর্থ",
        "feedback-error3": "ত্রুটি: এপিআই হতে কোন সাড়া নেই",
+       "feedback-message": "বার্তা:",
+       "feedback-subject": "বিষয়:",
+       "feedback-submit": "জমা দাও",
        "feedback-thanks": "ধন্যবাদ! আপনার প্রতিক্রিয়া \"[$2 $1]\" পাতায় পোস্ট করা হয়েছে।",
-       "feedback-close": "সম্পন্ন",
-       "feedback-bugcheck": "উত্তম! যাচাই করুন যে এই [$1  জানা বাগের] কোন একটি কিনা।",
-       "feedback-bugnew": "আমি যাচাই করেছি। নতুন বাগ নিবন্ধন করুন।",
+       "feedback-thanks-title": "আপনাকে ধন্যবাদ!",
+       "feedback-useragent": "ব্যবহারকারী এজেন্ট:",
        "searchsuggest-search": "অনুসন্ধান",
        "searchsuggest-containing": "যা আছে...",
        "api-error-badaccess-groups": "আপনার এই উইকিতে ফাইল আপলোডের অনুমতি নেই।",
        "json-error-ctrl-char": "অক্ষর নিয়ন্ত্রণ ত্রুটি, সম্ভবত ভুল এনকোডকৃত",
        "json-error-syntax": "সিনট্যাক্স ত্রুটি",
        "json-error-utf8": "ত্রুটিপূর্ণ ইউটিএফ-৮ অক্ষর, সম্ভবত ভুল এনকোডকৃত",
-       "json-error-unsupported-type": "এনকোড করা যাবে না এমন একটি মানের ধরন দেয়া হয়েছে"
+       "json-error-unsupported-type": "এনকোড করা যাবে না এমন একটি মানের ধরন দেয়া হয়েছে",
+       "headline-anchor-title": "এই অনুচ্ছেদে সংযোগ",
+       "special-characters-group-latin": "লাতিন",
+       "special-characters-group-latinextended": "সম্প্রসারিত লাতিন",
+       "special-characters-group-ipa": "আইপিএ (IPA)",
+       "special-characters-group-symbols": "চিহ্নসমূহ",
+       "special-characters-group-greek": "গ্রিক",
+       "special-characters-group-cyrillic": "সিরিলিক",
+       "special-characters-group-arabic": "আরবি",
+       "special-characters-group-arabicextended": "সম্প্রসারিত আরবি",
+       "special-characters-group-persian": "ফারসি",
+       "special-characters-group-hebrew": "হিব্রু",
+       "special-characters-group-bangla": "বাংলা",
+       "special-characters-group-tamil": "তামিল",
+       "special-characters-group-telugu": "তেলেগু",
+       "special-characters-group-sinhala": "সিংহলী",
+       "special-characters-group-gujarati": "গুজরাটি",
+       "special-characters-group-devanagari": "দেবনাগরী",
+       "special-characters-group-thai": "থাই",
+       "special-characters-group-lao": "লাও",
+       "special-characters-group-khmer": "খেমার",
+       "special-characters-title-endash": "en ড্যাশ",
+       "special-characters-title-emdash": "em ড্যাশ",
+       "special-characters-title-minus": "বিয়োগ চিহ্ন"
 }
index 0138d20..f14b841 100644 (file)
        "version-specialpages": "বিশেষ পাতাহানি",
        "version-other": "হের",
        "version-hooks": "কসিগি",
-       "version-version": "(সংস্করণ $1)",
+       "version-version": "($1)",
        "version-license": "লাইসেন্স",
        "version-software": "ইনস্টলঅসে সফটওয়্যার",
        "version-software-product": "পণ্য",
index da14afa..569dbef 100644 (file)
@@ -15,7 +15,8 @@
                        "Y-M D",
                        "לערי ריינהארט",
                        "아라",
-                       "Pymouss"
+                       "Pymouss",
+                       "Macofe"
                ]
        },
        "tog-underline": "Liammoù islinennet",
        "disclaimers": "Kemennoù",
        "disclaimerpage": "Project:Kemenn hollek",
        "edithelp": "Skoazell",
+       "helppage-top-gethelp": "Skoazell",
        "mainpage": "Degemer",
        "mainpage-description": "Degemer",
        "policy-url": "Project:Reolennoù",
        "preview": "Rakwelet",
        "showpreview": "Rakwelet",
        "showdiff": "Diskouez ar c'hemmoù",
-       "anoneditwarning": "'''Diwallit :''' N'oc'h ket kevreet. \nHo chomlec'h IP eo a vo enrollet war istor kemmoù ar bajenn-mañ.",
+       "anoneditwarning": "</strong>Diwallit :</strong> N'oc'h ket kevreet.\nGallout a raio an holl dud gwelet ho chomlec'h IP ma rit kemmoù. Ma <strong>[$1kevreit]</strong>pe<strong>[$2 krouit ur gont]</strong>, e vo deroet ho kemmoù d'hoc'h anv-implijer, e-touez spletoù all.",
        "anonpreviewwarning": "''N'oc'h ket kevreet. Enrollañ a lakao war-wel ho chomlec'h IP e istor kemmoù ar bajenn.''",
        "missingsummary": "'''Taolit evezh:''' N'hoc'h eus ket lakaet tamm testenn diverrañ ebet evit ho kemmoù. Mar klikit war enrollañ en-dro, e vo enrollet ho testenn evel m'emañ hepmuiken.",
        "missingcommenttext": "Skrivit hoc'h evezhiadenn a-is.",
        "prefs-personal": "Titouroù personel",
        "prefs-rc": "Kemmoù diwezhañ",
        "prefs-watchlist": "Roll evezhiañ",
+       "prefs-editwatchlist": "Kemmañ ar roll evezhiañ",
+       "prefs-editwatchlist-raw": "Kemmañ ar roll evezhiañ (mod diginkl)",
+       "prefs-editwatchlist-clear": "Diverkañ ho roll evezhiañ",
        "prefs-watchlist-days": "Niver a zevezhioù da ziskouez er rollad evezhiañ :",
        "prefs-watchlist-days-max": "D'ar muiañ $1 {{PLURAL:$1|deiz|deiz}}",
        "prefs-watchlist-edits": "Niver a gemmoù da ziskouez er roll evezhiañ astennet :",
        "upload-curl-error28": "Aet dreist d'an termen",
        "upload-curl-error28-text": "Re bell eo bet al lec'hienn o respont. Gwiriit mat emañ al lec'hienn enlinenn, gortozit ur pennadig ha klaskit en-dro. Mat e vo deoc'h adklask d'ur mare dibresoc'h marteze ivez.",
        "license": "Aotre-implijout :",
-       "license-header": "Aotre implijout",
+       "license-header": "Aotre-implijout",
        "nolicense": "Hini ebet diuzet",
        "licenses-edit": "Aozañ dibarzhioù an aotre-implijout",
        "license-nopreview": "(Dibosupl rakwelet)",
        "pager-older-n": "{{PLURAL:$1|1 koshoc'h|$1 koshoc'h}}",
        "suppress": "Dindan evezh",
        "querypage-disabled": "Diweredekaet eo bet ar bajenn dibar-mañ evit aesaat d'ar reizhiad un tammig.",
+       "apihelp-no-such-module": "N'eo ket bet kavet ar vodulenn \"$1\".",
        "booksources": "Oberennoù dave",
        "booksources-search-legend": "Klask en oberennoù dave",
        "booksources-isbn": "ISBN :",
        "delete-warning-toobig": "Bras eo istor ar bajenn-mañ, ouzhpenn {{PLURAL:$1|stumm|stumm}} zo.\nDiverkañ anezhi a c'hallo degas reuz war mont en-dro diaz titouroù {{SITENAME}};\ntaolit evezh bras.",
        "deleteprotected": "Ne c'hallit ket dilemel ar bajenn-mañ rak gwarezet eo bet.",
        "rollback": "disteuler ar c'hemmoù",
-       "rollback_short": "Disteuler",
        "rollbacklink": "disteuler",
        "rollbacklinkcount": "disteurel $1 {{PLURAL:$1|kemm}}",
        "rollbacklinkcount-morethan": "disteurel ouzhpenn $1 {{PLURAL:$1|kemm}}",
        "import-rootpage-nosubpage": "Esaouenn anvioù \"$1\" eus ar bennpajenn ne aotre ket an ispajennoù.",
        "importlogpage": "Log an enporzhiadennoù",
        "importlogpagetext": "Enporzhiadennoù melestradurel eus pajennoù adal wikioù all gant istor ar c'hemmadennoù degaset enno.",
-       "import-logentry-upload": "en/he deus enporzhiet (pellgarget) [[$1]]",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|adweladenn}} enporzhiet",
-       "import-logentry-interwiki": "treuzwikiet $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|adweladenn}} enporzhiet eus $2",
        "javascripttest": "Amprouadenn JavaScript",
-       "javascripttest-title": "Emeur o seveniñ $1 amprouadenn",
        "javascripttest-pagetext-noframework": "Miret eo ar bajenn-mañ evit amprouiñ JavaScript.",
        "javascripttest-pagetext-unknownframework": "Framm amprouiñ \"$1\" dianav.",
        "javascripttest-pagetext-frameworks": "Diuzit unan eus ar frammoù amprouiñ da-heul : $1",
        "javascripttest-pagetext-skins": "Diuzit ar gwiskadur da vezañ implijet evit an amprouadennoù :",
        "javascripttest-qunit-intro": "Sellet ouzh [$1 an teulioù amprouiñ] e mediawiki.org.",
-       "javascripttest-qunit-heading": "Heuliad amprouadennoù QUnit eus JavaScript war MediaWiki",
        "tooltip-pt-userpage": "Ho pajenn implijer",
        "tooltip-pt-anonuserpage": "Ar bajenn implijer evit ar c'homlec'h IP implijet ganeoc'h",
        "tooltip-pt-mytalk": "Ho pajenn gaozeal",
        "tooltip-pt-mycontris": "Roll ho tegasadennoù",
        "tooltip-pt-login": "Daoust ma n'eo ket ret, ec'h aliomp deoc'h kevreañ",
        "tooltip-pt-logout": "Digevreañ",
+       "tooltip-pt-createaccount": "Erbedet eo deoc'h krouiñ ur gont ha kevreañ ; n'eo ket ret koulskoude.",
        "tooltip-ca-talk": "Kaozeadennoù diwar-benn ar pennad",
        "tooltip-ca-edit": "Gallout a rit kemmañ ar bajenn-mañ. Implijit ar stokell Rakwelet a-raok enrollañ, mar plij.",
        "tooltip-ca-addsection": "Kregiñ gant ur rann nevez.",
        "logentry-upload-revert": "$1 {{GENDER:$2|en deus|he deus}} ezporzhiet $3",
        "rightsnone": "(netra)",
        "revdelete-summary": "diverradenn eus ar c'hemmoù",
+       "feedback-adding": "Oc'h ouzhpennañ ho soñj war ar bajenn...",
+       "feedback-bugcheck": "Eus ar c'hentañ ! Gwiriit mat n'emañ ket e-touez an [$1 draen diskoachet c'hoazh].",
+       "feedback-bugnew": "Gwiriet em eus. Kemenn un draen nevez",
        "feedback-bugornote": "Ma'z oc'h prest da zeskrivañ ur gudenn deknikel dre ar munud e c'hallit [$1 kemenn un draen].\nA-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc'h evezhiadenn d'ar bajenn \"[$3 $2]\", a-gevret gant hoc'h anv implijer hag anv ar merdeer a rit gantañ.",
-       "feedback-subject": "Danvez :",
-       "feedback-message": "Kemennadenn :",
        "feedback-cancel": "Nullañ",
-       "feedback-submit": "Kas ho soñj",
-       "feedback-adding": "Oc'h ouzhpennañ ho soñj war ar bajenn...",
+       "feedback-close": "Graet",
        "feedback-error1": "Fazi : disoc'h dianav a-berzh an API",
        "feedback-error2": "Fazi : N'eus ket bet gallet degemer ar c'hemmoù",
        "feedback-error3": "Fazi : respont ebet a-berzh an API",
+       "feedback-message": "Kemennadenn :",
+       "feedback-subject": "Danvez :",
+       "feedback-submit": "Kas",
        "feedback-thanks": "Ho trugarekaat ! Postet eo bet hoc'h evezhiadenn d'ar bajenn \"[$2 $1]\".",
-       "feedback-close": "Graet",
-       "feedback-bugcheck": "Eus ar c'hentañ ! Gwiriit mat n'emañ ket e-touez an [$1 draen diskoachet c'hoazh].",
-       "feedback-bugnew": "Gwiriet em eus. Kemenn un draen nevez",
        "searchsuggest-search": "Klask",
        "searchsuggest-containing": "ennañ...",
        "api-error-badaccess-groups": "N'oc'h ket aotreet da enporzhiañ restroù war ar wiki-mañ.",
        "json-error-depth": "Aet eur en tu all da zonder brasañ an torn",
        "json-error-state-mismatch": "JSON direizh pe stummet fall",
        "json-error-syntax": "Fazi ereadur",
-       "json-error-utf8": "Arouezennoù UTF-8 stummet fall, enkodet en un doare direizh marteze"
+       "json-error-utf8": "Arouezennoù UTF-8 stummet fall, enkodet en un doare direizh marteze",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin astennet",
+       "special-characters-group-ipa": "LFE (IPA)",
+       "special-characters-group-symbols": "Arouezennoù",
+       "special-characters-group-greek": "Gresianek",
+       "special-characters-group-cyrillic": "Kirillek",
+       "special-characters-group-arabic": "Arabeg",
+       "special-characters-group-arabicextended": "Arabeg astennet",
+       "special-characters-group-persian": "Perseg",
+       "special-characters-group-hebrew": "Hebraek",
+       "special-characters-group-bangla": "Banglaek",
+       "special-characters-group-tamil": "Tamileg",
+       "special-characters-group-telugu": "Telougou",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Laoseg",
+       "special-characters-group-khmer": "Khmer"
 }
index 8e2e187..086f06a 100644 (file)
@@ -18,7 +18,8 @@
                        "Smooth O",
                        "לערי ריינהארט",
                        "아라",
-                       "Milicevic01"
+                       "Milicevic01",
+                       "Macofe"
                ]
        },
        "tog-underline": "Podvuci veze:",
        "import-rootpage-nosubpage": "Imenski prostor \"$1\" osnovne stranice ne dozvoljava podstranice.",
        "importlogpage": "Zapisnik uvoza",
        "importlogpagetext": "Administrativni uvozi stranica sa historijom izmjena sa drugih wikija.",
-       "import-logentry-upload": "uvezena stranica [[$1]] putem postavljanja datoteke",
        "import-logentry-upload-detail": "{{PLURAL:$1|Uvezena jedna revizija|Uvezene $1 revizije|Uvezeno $1 revizija}}",
-       "import-logentry-interwiki": "uveženo (''transwikied'') $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Uvezena $1 revizija|Uvezene $1 revizije|Uvezeno $1 revizija}} od $2",
        "javascripttest": "Testiranje JavaScript-e",
        "javascripttest-pagetext-noframework": "Ova stranica je određena za pokretanje JavaScript testova.",
        "version-parser-function-hooks": "Kuke parserske funkcije",
        "version-hook-name": "Naziv kuke",
        "version-hook-subscribedby": "Pretplaćeno od",
-       "version-version": "(Verzija $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[nema imena]",
        "version-license": "Licenca",
        "version-ext-license": "Licenca",
        "logentry-rights-autopromote": "$1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5",
        "rightsnone": "(nema)",
        "revdelete-summary": "sažetak",
+       "feedback-adding": "Dodajem povratne informacije na stranicu...",
+       "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-subject": "Tema:",
-       "feedback-message": "Poruka:",
        "feedback-cancel": "Odustani",
-       "feedback-submit": "Pošalji povratnu informaciju",
-       "feedback-adding": "Dodajem povratne informacije na stranicu...",
+       "feedback-close": "Završeno",
        "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-message": "Poruka:",
+       "feedback-subject": "Tema:",
+       "feedback-submit": "Pošalji",
        "feedback-thanks": "Hvala! Vaša povratna informacija je postavljena na stranicu „[$2 $1]“.",
-       "feedback-close": "Završeno",
-       "feedback-bugcheck": "Odlično! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
-       "feedback-bugnew": "Provjereno. Prijavi novu grešku",
        "searchsuggest-search": "Traži",
        "searchsuggest-containing": "sadrži...",
        "api-error-badaccess-groups": "Nemate ovlasti da postavljate datoteke na ovoj wiki.",
        "mediastatistics-header-text": "Tekstualno",
        "mediastatistics-header-executable": "Izvršni",
        "mediastatistics-header-archive": "Kompresovani formati",
-       "json-error-syntax": "Sintaksna greška"
+       "json-error-syntax": "Sintaksna greška",
+       "special-characters-group-latin": "Latinica",
+       "special-characters-group-latinextended": "Prošireni latinski",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simboli",
+       "special-characters-group-greek": "Grčki",
+       "special-characters-group-cyrillic": "Ćirilica",
+       "special-characters-group-arabic": "Arapski",
+       "special-characters-group-persian": "Perzijski",
+       "special-characters-group-hebrew": "Hebrejski",
+       "special-characters-group-bangla": "Bangladeški",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-thai": "Tajlandski",
+       "special-characters-group-lao": "Laoški",
+       "special-characters-group-khmer": "Kmerski"
 }
index cd900ba..5a1911b 100644 (file)
@@ -45,7 +45,9 @@
                        "F3RaN",
                        "ESM",
                        "Loupeter",
-                       "Macofe"
+                       "Macofe",
+                       "Gerardduenas",
+                       "Medol"
                ]
        },
        "tog-underline": "Subratlla els enllaços:",
        "october": "octubre",
        "november": "novembre",
        "december": "desembre",
-       "january-gen": "de gener",
-       "february-gen": "de febrer",
-       "march-gen": "de març",
+       "january-gen": "gener",
+       "february-gen": "febrer",
+       "march-gen": "març",
        "april-gen": "d'abril",
        "may-gen": "de maig",
        "june-gen": "de juny",
        "september-gen": "de setembre",
        "october-gen": "d'octubre",
        "november-gen": "de novembre",
-       "december-gen": "de desembre",
+       "december-gen": "desembre",
        "jan": "gen",
        "feb": "feb",
        "mar": "març",
        "currentevents-url": "Project:Actualitat",
        "disclaimers": "Avís general",
        "disclaimerpage": "Project:Avís general",
-       "edithelp": "Ajuda",
+       "edithelp": "Ajuda per a l'edició",
+       "helppage-top-gethelp": "Ajuda",
        "mainpage": "Pàgina principal",
        "mainpage-description": "Pàgina principal",
        "policy-url": "Project:Polítiques",
        "portal": "Portal de la comunitat",
-       "portal-url": "Project:Portal",
+       "portal-url": "Project:Portal de la comunitat",
        "privacy": "Política de privadesa",
        "privacypage": "Project:Política de privadesa",
        "badaccess": "Error de permisos",
        "readonly_lag": "La base de dades s'ha bloquejat automàticament mentre els servidors esclaus se sincronitzen amb el mestre",
        "internalerror": "Error intern",
        "internalerror_info": "Error intern: $1",
+       "internalerror-fatal-exception": "Excepció fatal del tipus «$1»",
        "filecopyerror": "No s'ha pogut copiar el fitxer «$1» com «$2».",
        "filerenameerror": "No s'ha pogut reanomenar el fitxer «$1» com «$2».",
        "filedeleteerror": "No s'ha pogut eliminar el fitxer «$1».",
        "wrongpassword": "La contrasenya que heu introduït és incorrecta. Torneu-ho a provar.",
        "wrongpasswordempty": "La contrasenya que s'ha introduït estava en blanc. Torneu-ho a provar.",
        "passwordtooshort": "La contrasenya ha de tenir un mínim {{PLURAL:$1|d'un caràcter|de $1 caràcters}}.",
+       "passwordtoolong": "La contrasenya ha de tenir un màxim {{PLURAL:$1|d'un caràcter|de $1 caràcters}}.",
        "password-name-match": "La contrasenya ha de ser diferent al vostre nom d'usuari.",
        "password-login-forbidden": "No és permès d'utilitzar aquest nom d'usuari i contrasenya.",
        "mailmypassword": "Restableix la contrasenya",
        "createacct-another-realname-tip": "El nom real és opcional.\nSi decidiu proporcionar-lo, s'utilitzarà per a reconèixer a l'usuari el seu treball.",
        "pt-login": "Inicia la sessió",
        "pt-login-button": "Inicia sessió",
-       "pt-createaccount": "Crea un compte",
+       "pt-createaccount": "Creeu un compte",
        "pt-userlogout": "Finalitza la sessió",
        "php-mail-error-unknown": "Error desconegut en la funció mail() de PHP",
        "user-mail-no-addy": "S'ha intentat enviar un missatge de correu electrònic sense adreça.",
        "missingcommentheader": "'''Recordatori:''' No heu proporcionat un assumpte/encapçalament per al comentari. Si cliqueu de nou al botó \"{{int:savearticle}}\", la vostra contribució se desarà sense cap.",
        "summary-preview": "Previsualització del resum:",
        "subject-preview": "Previsualització de tema/capçalera:",
+       "previewerrortext": "S'ha produït un error quan es provava de previsualitzar els canvis.",
        "blockedtitle": "L'usuari està blocat",
        "blockedtext": "'''S'ha procedit al blocatge del vostre compte d'usuari o la vostra adreça IP.'''\n\nEl blocatge l'ha dut a terme l'usuari $1.\nEl motiu donat és ''$2''.\n\n* Inici del blocatge: $8\n* Final del blocatge: $6\n* Compte blocat: $7\n\nPodeu contactar amb $1 o un dels [[{{MediaWiki:Grouppage-sysop}}|administradors]] per a discutir-ho.\n\nTingueu en compte que no podeu fer servir el formulari d'enviament de missatges de correu electrònic a cap usuari, a menys que tingueu una adreça de correu vàlida registrada a les vostres [[Special:Preferences|preferències d'usuari]] i no ho tingueu tampoc blocat.\n\nLa vostra adreça IP actual és $3, i el número d'identificació del blocatge és #$5.\nSi us plau, incloeu aquestes dades en totes les consultes que feu.",
        "autoblockedtext": "La vostra adreça IP ha estat blocada automàticament perquè va ser usada per un usuari actualment bloquejat. Aquest usuari va ser blocat per l'{{GENDER:$1|administrador|administradora}} $1. El motiu donat per al bloqueig ha estat:\n\n:''$2''\n\n* Inici del bloqueig: $8\n* Final del bloqueig: $6\n* Usuari bloquejat: $7\n\nPodeu contactar l'usuari $1 o algun altre dels [[{{MediaWiki:Grouppage-sysop}}|administradors]] per a discutir el bloqueig.\n\nRecordeu que per a poder usar l'opció «Envia un missatge de correu electrònic a aquest usuari» haureu d'haver validat una adreça de correu electrònic a les vostres [[Special:Preferences|preferències]].\n\nEl número d'identificació de la vostra adreça IP és $3, i l'ID del bloqueig és #$5. Si us plau, incloeu aquestes dades en totes les consultes que feu.",
        "nosuchsectiontitle": "No es pot trobar la secció",
        "nosuchsectiontext": "Heu intentat editar una secció que no existeix.\nPotser s'ha mogut o eliminat mentre estàveu veient la pàgina.",
        "loginreqtitle": "Cal que inicieu una sessió",
-       "loginreqlink": "inicia una sessió",
+       "loginreqlink": "inicia la sessió",
        "loginreqpagetext": "Cal que seguiu l'enllaç «$1» per a visualitzar altres pàgines.",
        "accmailtitle": "S'ha enviat una contrasenya.",
        "accmailtext": "S'ha enviat una contrasenya aleatòria a $2 per a {{GENDER:$1|l'usuari|la usuària}} [[User talk:$1|$1]].\n\nLa contrasenya per aquest nou compte pot ser canviada a la pàgina de ''[[Special:ChangePassword|canvi de contrasenya]]'' un cop connectat.",
        "nohistory": "No hi ha un historial de revisions per a aquesta pàgina.",
        "currentrev": "Revisió actual",
        "currentrev-asof": "Revisió de $1",
-       "revisionasof": "Revisió de $1",
+       "revisionasof": "Revisió del $1",
        "revision-info": "La revisió el $1 per {{GENDER:$6|$2}}$7",
        "previousrevision": "←Versió més antiga",
        "nextrevision": "Versió més nova→",
        "diff-multi-manyusers": "({{PLURAL:$1|Hi ha una revisió intermèdia|Hi ha $1 revisions intermèdies}} sense mostrar fetes per més {{PLURAL:$2|d'un usuari|de $2 usuaris}})",
        "difference-missing-revision": "{{PLURAL:$2|Una revisió|$2 revisions}} d'aquesta diferència ($1) no {{PLURAL:$2|s'ha|s'han}} trobat.\n\nAixò passa generalment en seguir un enllaç obsolet de diferències a una pàgina que s'ha suprimit.\nEs pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre de supressions].",
        "searchresults": "Resultats de la cerca",
-       "searchresults-title": "Resultats de la recerca de «$1»",
+       "searchresults-title": "Resultats de la cerca de «$1»",
        "titlematches": "Coincidències de títol de la pàgina",
        "textmatches": "Coincidències de text de pàgina",
        "notextmatches": "No hi ha cap coincidència de text de pàgina",
        "prevn": "anteriors {{PLURAL:$1|$1}}",
        "nextn": "següents {{PLURAL:$1|$1}}",
+       "prev-page": "pàgina anterior",
+       "next-page": "pàgina següent",
        "prevn-title": "$1 {{PLURAL:$1|resultat|resultats}} anteriors",
        "nextn-title": "$1 {{PLURAL:$1|resultat|resultats}} següents",
        "shown-title": "Mostra $1 {{PLURAL:$1|resultat|resultats}} per pàgina",
-       "viewprevnext": "Vés a ($1 {{int:pipe-separator}} $2) ($3).",
+       "viewprevnext": "Mostra ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Hi ha una pàgina anomenada «[[:$1]]» en aquest wiki'''",
        "searchmenu-new": "<strong>Crea la pàgina «[[:$1]]» en aquest wiki!</strong> {{PLURAL:$2|0=|Vegeu també la pàgina trobada amb la cerca.|Vegeu també els resultats de cerca trobats.}}",
        "searchprofile-articles": "Pàgines de contingut",
        "searchprofile-articles-tooltip": "Cerca a $1",
        "searchprofile-images-tooltip": "Cerca fitxers",
        "searchprofile-everything-tooltip": "Cerca tot tipus de contingut (s'hi inclouen pàgines de discussió)",
-       "searchprofile-advanced-tooltip": "Cerca als espais de noms predefinits",
+       "searchprofile-advanced-tooltip": "Cerca als espais de noms personalitzats",
        "search-result-size": "$1 ({{PLURAL:$2|1 paraula|$2 paraules}})",
        "search-result-category-size": "{{PLURAL:$1|1 membre|$1 membres}} ({{PLURAL:$2|1 subcategoria|$2 subcategories}}, {{PLURAL:$3|1 fitxer|$3 fitxers}})",
        "search-redirect": "(redirigit des de $1)",
        "right-override-export-depth": "Exportar pàgines incloent aquelles enllaçades fins a una fondària de 5",
        "right-sendemail": "Enviar missatges de correu electrònic a altres usuaris",
        "right-passwordreset": "Veure les soŀlicituds de restabliment de contrasenya per correu electrònic",
-       "newuserlogpage": "Registre de creació de l'usuari",
+       "right-managechangetags": "Crear i suprimir [[Special:Tags|etiquetes]] des de la base de dades",
+       "newuserlogpage": "Registre de creació d'usuaris",
        "newuserlogpagetext": "Aquest és un registre de creació de nous usuaris.",
        "rightslog": "Registre dels permisos d'usuari",
        "rightslogtext": "Aquest és un registre de canvis dels permisos d'usuari.",
        "action-viewmyprivateinfo": "mostra la informació personal",
        "action-editmyprivateinfo": "edita la informació personal",
        "action-editcontentmodel": "editar el model de contingut d'una pàgina",
+       "action-managechangetags": "crear i suprimir etiquetes de la base de dades",
        "nchanges": "$1 {{PLURAL:$1|canvi|canvis}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|des de la darrera visita}}",
        "enhancedrc-history": "historial",
        "recentchanges": "Canvis recents",
        "recentchanges-legend": "Opcions de canvis recents",
-       "recentchanges-summary": "Seguiu els canvis recents del projecte {{SITENAME}} en aquesta pàgina.",
+       "recentchanges-summary": "Seguiu els canvis més recents del wiki en aquesta pàgina.",
        "recentchanges-noresult": "Cap canvi corresponent a aquests criteris en el període indicat.",
        "recentchanges-feed-description": "Segueix en aquest canal els canvis més recents del wiki.",
-       "recentchanges-label-newpage": "Aquesta modificació inicià una pàgina",
+       "recentchanges-label-newpage": "Aquesta modificació creà una pàgina",
        "recentchanges-label-minor": "Aquesta és una modificació menor",
        "recentchanges-label-bot": "Aquesta modificació fou feta per un bot",
        "recentchanges-label-unpatrolled": "Aquesta modificació encara no s'ha patrullat",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vegeu també la [[Special:NewPages|llista de pàgines noves]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "A sota hi ha {{PLURAL:$5|el canvi|els canvis}} a partir de <strong>$3, $4</strong> (fins a <strong>$1</strong>).",
-       "rclistfrom": "Mostra els canvis nous des de $3 $2",
+       "rclistfrom": "Mostra els canvis nous des de $3, $2",
        "rcshowhideminor": "$1 edicions menors",
        "rcshowhideminor-show": "Mostra",
        "rcshowhideminor-hide": "Amaga",
        "rc-enhanced-expand": "Mostra detalls",
        "rc-enhanced-hide": "Amagar detalls",
        "rc-old-title": "originàriament creada com «$1»",
-       "recentchangeslinked": "Seguiment d'enllaços",
+       "recentchangeslinked": "Canvis relacionats",
        "recentchangeslinked-feed": "Canvis relacionats",
-       "recentchangeslinked-toolbox": "Seguiment d'enllaços",
+       "recentchangeslinked-toolbox": "Canvis relacionats",
        "recentchangeslinked-title": "Canvis relacionats amb «$1»",
-       "recentchangeslinked-summary": "A continuació trobareu una llista dels canvis recents a les pàgines enllaçades des de la pàgina donada (o entre els membres d'una categoria especificada).\nLes pàgines de la vostra [[Special:Watchlist|llista de seguiment]] apareixen en '''negreta'''.",
+       "recentchangeslinked-summary": "Aquesta llista reflecteix els canvis recents a les pàgines enllaçades des d'una pàgina concreta (o als membres d'una categoria concreta).\nLes pàgines de la vostra [[Special:Watchlist|llista de seguiment]] apareixen en <strong>negreta</strong>.",
        "recentchangeslinked-page": "Nom de la pàgina:",
        "recentchangeslinked-to": "Mostra els canvis de les pàgines enllaçades amb la pàgina donada",
-       "upload": "Carrega",
+       "upload": "Carregueu un fitxer",
        "uploadbtn": "Carrega un fitxer",
        "reuploaddesc": "Torna al formulari per apujar.",
        "upload-tryagain": "Envia la descripció del fitxer modificat",
        "filehist-current": "actual",
        "filehist-datetime": "Data/hora",
        "filehist-thumb": "Miniatura",
-       "filehist-thumbtext": "Miniatura per a la versió de $1",
+       "filehist-thumbtext": "Miniatura per a la versió del $1",
        "filehist-nothumb": "Sense miniatura",
        "filehist-user": "Usuari",
        "filehist-dimensions": "Dimensions",
        "filehist-filesize": "Mida del fitxer",
        "filehist-comment": "Comentari",
        "imagelinks": "Ús del fitxer",
-       "linkstoimage": "{{PLURAL:$1|La següent pàgina enllaça|Les següents pàgines enllacen}} a aquesta imatge:",
+       "linkstoimage": "{{PLURAL:$1|La pàgina següent enllaça|Les $1 pàgines següents enllacen}} a aquest fitxer:",
        "linkstoimage-more": "Hi ha més de $1 {{PLURAL:$1|pàgina que enllaça|pàgines que enllaçen}} a aquest fitxer.\nLa següent llista només mostra {{PLURAL:$1|la primera d'elles|les primeres $1 d'aquestes pàgines}}.\nPodeu consultar la [[Special:WhatLinksHere/$2|llista completa]].",
-       "nolinkstoimage": "No hi ha pàgines que enllacin aquesta imatge.",
+       "nolinkstoimage": "No hi ha pàgines que enllacin a aquesta imatge.",
        "morelinkstoimage": "Visualitza [[Special:WhatLinksHere/$1|més enllaços]] que porten al fitxer.",
        "linkstoimage-redirect": "$1 (fitxer redirigit) $2",
        "duplicatesoffile": "{{PLURAL:$1|Aquest fitxer és un duplicat del que apareix a continuació|A continuació s'indiquen els $1 duplicats d'aquest fitxer}} ([[Special:FileDuplicateSearch/$2|vegeu-ne més detalls]]):",
        "shared-repo-from": "des de $1",
        "shared-repo": "un repositori compartit",
        "shared-repo-name-wikimediacommons": "Wikimedia Commons",
-       "upload-disallowed-here": "No pot sobreescriure aquest fitxer.",
+       "upload-disallowed-here": "No podeu sobreescriure aquest fitxer.",
        "filerevert": "Reverteix $1",
        "filerevert-legend": "Reverteix el fitxer",
        "filerevert-intro": "Esteu revertint '''[[Media:$1|$1]]''' a la [$4 versió de  $3, $2].",
        "ncategories": "$1 {{PLURAL:$1|categoria|categories}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
        "nlinks": "$1 {{PLURAL:$1|enllaç|enllaços}}",
-       "nmembers": "$1 {{PLURAL:$1|membre|membres}}",
+       "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}}",
        "allpagesfrom": "Mostra les pàgines que comencin per:",
        "allpagesto": "Mostra pàgines que acabin en:",
        "allarticles": "Totes les pàgines",
-       "allinnamespace": "Totes les pàgines (de l'espai de noms $1)",
+       "allinnamespace": "Totes les pàgines (de lespai de noms $1)",
        "allpagessubmit": "Vés-hi",
        "allpagesprefix": "Mostra les pàgines amb prefix:",
        "allpagesbadtitle": "El títol de la pàgina que heu inserit no és vàlid o conté un prefix d'enllaç amb un altre projecte. També pot passar que contingui un o més caràcters que no es puguin fer servir en títols de pàgina.",
        "emailccsubject": "Còpia del vostre missatge a $1: $2",
        "emailsent": "Correu electrònic enviat",
        "emailsenttext": "S'ha enviat el vostre correu electrònic.",
-       "emailuserfooter": "Aquest missatge de correu electrònic l'ha enviat $1 a $2 amb la funció «e-mail» del projecte {{SITENAME}}.",
+       "emailuserfooter": "Aquest missatge de correu electrònic l'ha enviat $1 a $2 amb la funció «{{int:emailpage}}» de {{SITENAME}}.",
        "usermessage-summary": "Deixant missatges de sistema.",
        "usermessage-editor": "Missatger del sistema",
        "watchlist": "Llista de seguiment",
        "nolinkshere": "Cap pàgina no enllaça amb '''[[:$1]]'''.",
        "nolinkshere-ns": "No s'enllaça cap pàgina a '''[[:$1]]''' en l'espai de noms triat.",
        "isredirect": "pàgina redirigida",
-       "istemplate": "inclosa",
+       "istemplate": "inclusió",
        "isimage": "enllaç a fitxer",
        "whatlinkshere-prev": "{{PLURAL:$1|anterior|anteriors $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|següent|següents $1}}",
        "blocklist-nousertalk": "no podeu modificar la pàgina de discussió pròpia",
        "ipblocklist-empty": "La llista de bloqueigs està buida.",
        "ipblocklist-no-results": "L'adreça IP o nom d'usuari soŀlicitat no està bloquejat.",
-       "blocklink": "bloca",
+       "blocklink": "bloqueja",
        "unblocklink": "desbloca",
        "change-blocklink": "canvia el blocatge",
        "contribslink": "contribucions",
        "delete_and_move_confirm": "Sí, esborra la pàgina",
        "delete_and_move_reason": "S'ha eliminat per a permetre el reanomenament de \" [[$1]] \"",
        "selfmove": "Els títols d'origen i de destinació coincideixen: no és possible de reanomenar una pàgina a si mateixa.",
-       "immobile-source-namespace": "No es poden moure pàgines de l'espai de noms \"$1\"",
+       "immobile-source-namespace": "No es poden moure les pàgines de l’espai de noms «$1»",
        "immobile-target-namespace": "No es poden moure pàgines cap a l'espai de noms \"$1\"",
        "immobile-target-namespace-iw": "No es poden moure pàgines a l'enllaç interwiki",
        "immobile-source-page": "Aquesta pàgina no es pot moure.",
        "export-submit": "Exporta",
        "export-addcattext": "Afegeix pàgines de la categoria:",
        "export-addcat": "Afegeix",
-       "export-addnstext": "Afegeix pàgines de l'espai de noms:",
+       "export-addnstext": "Afegeix pàgines de lespai de noms:",
        "export-addns": "Afegir",
        "export-download": "Ofereix desar com a fitxer",
        "export-templates": "Inclou les plantilles",
        "thumbnail_image-missing": "Sembla que falta el fitxer: $1",
        "thumbnail_image-failure-limit": "Hi ha hagut massa intents fallits recents ($1 o més) per dibuixar aquesta miniatura.\nTorneu-ho a provar més endavant.",
        "import": "Importació de pàgines",
-       "importinterwiki": "Importa interwiki",
-       "import-interwiki-text": "Trieu un web basat en wiki i un títol de pàgina per a importar.\nEs conservaran les dates de les versions i els noms dels editors.\nTotes les accions d'importació interwiki es conserven al [[Special:Log/import|registre d'importacions]].",
+       "importinterwiki": "Importa d'un altre wiki",
+       "import-interwiki-text": "Seleccioneu un wiki i un títol de pàgina per importar.\nEs conservaran les dates de les revisions i els noms dels editors.\nTotes les importacions d'altres wikis s'emmagatzemen al [[Special:Log/import|registre d'importacions]].",
        "import-interwiki-sourcewiki": "Wiki d'origen:",
        "import-interwiki-sourcepage": "Pàgina d'origen:",
        "import-interwiki-history": "Copia totes les versions de l'historial d'aquesta pàgina",
        "import-rootpage-nosubpage": "L'espai de noms \"$1\" de la pàgina arrel no permet subpàgines.",
        "importlogpage": "Registre d'importació",
        "importlogpagetext": "Importacions administratives de pàgines amb l'historial des d'altres wikis.",
-       "import-logentry-upload": "ha importat [[$1]] per càrrega de fitxers",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisió|revisions}} importades",
-       "import-logentry-interwiki": "s'ha importat $1 via interwiki",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisió|revisions}} importades de $2",
        "javascripttest": "Proves de JavaScript",
        "javascripttest-pagetext-noframework": "Es reserva la pàgina per a l'execució de tests amb JavaScript.",
        "tooltip-pt-logout": "Finalitza la sessió d'usuari",
        "tooltip-pt-createaccount": "Us animem a què creeu un compte i inicieu sessió, encara que no és obligatori",
        "tooltip-ca-talk": "Discussió sobre el contingut d'aquesta pàgina",
-       "tooltip-ca-edit": "Podeu modificar aquesta pàgina. Si us plau, previsualitzeu-la abans de desar.",
+       "tooltip-ca-edit": "Podeu modificar aquesta pàgina. Si us plau, previsualitzeu-la abans de desar-la",
        "tooltip-ca-addsection": "Comença una nova secció",
-       "tooltip-ca-viewsource": "Aquesta pàgina està protegida. Podeu veure el seu codi font.",
-       "tooltip-ca-history": "Versions antigues d'aquesta pàgina.",
+       "tooltip-ca-viewsource": "Aquesta pàgina està protegida.\nPodeu veure'n el codi font.",
+       "tooltip-ca-history": "Versions antigues d'aquesta pàgina",
        "tooltip-ca-protect": "Protegeix aquesta pàgina.",
        "tooltip-ca-unprotect": "Desprotegeix aquesta pàgina",
        "tooltip-ca-delete": "Elimina aquesta pàgina",
        "tooltip-ca-undelete": "Restaura les edicions fetes a aquesta pàgina abans de que fos esborrada.",
        "tooltip-ca-move": "Reanomena aquesta pàgina",
-       "tooltip-ca-watch": "Afegiu aquesta pàgina a la vostra llista de seguiment.",
+       "tooltip-ca-watch": "Afegiu aquesta pàgina a la vostra llista de seguiment",
        "tooltip-ca-unwatch": "Suprimiu aquesta pàgina de la vostra llista de seguiment",
        "tooltip-search": "Cerca a {{SITENAME}}",
        "tooltip-search-go": "Vés a una pàgina amb aquest nom exacte si existeix",
        "tooltip-search-fulltext": "Cerca aquest text a les pàgines",
        "tooltip-p-logo": "Visiteu la pàgina principal",
-       "tooltip-n-mainpage": "Visiteu la pàgina principal.",
+       "tooltip-n-mainpage": "Visiteu la pàgina principal",
        "tooltip-n-mainpage-description": "Vegeu la pàgina principal",
        "tooltip-n-portal": "Sobre el projecte, què podeu fer, on podeu trobar coses",
-       "tooltip-n-currentevents": "Per trobar informació general sobre l'actualitat.",
+       "tooltip-n-currentevents": "Per trobar informació general sobre l'actualitat",
        "tooltip-n-recentchanges": "Llista de canvis recents al wiki",
        "tooltip-n-randompage": "Pàgina a l'atzar",
        "tooltip-n-help": "El lloc per saber més coses",
        "tooltip-t-whatlinkshere": "Llista de totes les pàgines wiki que enllacen aquí",
-       "tooltip-t-recentchangeslinked": "Canvis recents a pàgines que enllacen amb aquesta pàgina.",
+       "tooltip-t-recentchangeslinked": "Canvis recents a pàgines enllaçades des d'aquesta pàgina",
        "tooltip-feed-rss": "Canal RSS d'aquesta pàgina",
        "tooltip-feed-atom": "Canal Atom d'aquesta pàgina",
-       "tooltip-t-contributions": "Vegeu la llista de contribucions d'aquest usuari.",
+       "tooltip-t-contributions": "Llista de contribucions d'aquest usuari",
        "tooltip-t-emailuser": "Envia un correu en aquest usuari.",
        "tooltip-t-info": "Més informació sobre aquesta pàgina",
-       "tooltip-t-upload": "Càrrega d'imatges o altres fitxers.",
-       "tooltip-t-specialpages": "Llista de totes les pàgines especials.",
+       "tooltip-t-upload": "Carregueu fitxers",
+       "tooltip-t-specialpages": "Llista de totes les pàgines especials",
        "tooltip-t-print": "Versió per a impressió d'aquesta pàgina",
        "tooltip-t-permalink": "Enllaç permanent a aquesta versió de la pàgina",
-       "tooltip-ca-nstab-main": "Vegeu el contingut de la pàgina.",
+       "tooltip-ca-nstab-main": "Vegeu el contingut de la pàgina",
        "tooltip-ca-nstab-user": "Vegeu la pàgina d'usuari",
        "tooltip-ca-nstab-media": "Vegeu la pàgina de l'element multimèdia",
        "tooltip-ca-nstab-special": "Aquesta és una pàgina especial, no podeu modificar-la",
        "tooltip-ca-nstab-help": "Vegeu la pàgina d'ajuda",
        "tooltip-ca-nstab-category": "Vegeu la pàgina de la categoria",
        "tooltip-minoredit": "Marca-ho com una modificació menor",
-       "tooltip-save": "Desa els vostres canvis",
+       "tooltip-save": "Deseu els canvis",
        "tooltip-preview": "Reviseu els vostres canvis, feu-ho abans de desar res!",
        "tooltip-diff": "Mostra quins canvis heu fet al text",
        "tooltip-compareselectedversions": "Vegeu les diferències entre les dues versions seleccionades d'aquesta pàgina.",
        "spam_reverting": "Es reverteix a la darrera versió que no conté enllaços a $1",
        "spam_blanking": "Totes les revisions contenien enllaços $1, s'està deixant en blanc",
        "spam_deleting": "S'estan suprimint totes les revisions que contenien enllaços a $1",
-       "simpleantispam-label": "Comprovació antispam.\n'''NO''' ho ompliu!",
+       "simpleantispam-label": "Comprovació antispam.\n<strong>NO</strong> ho ompliu!",
        "pageinfo-title": "Informació de «$1»",
        "pageinfo-not-current": "Només es pot visualitzar la informació de la revisió actual.",
        "pageinfo-header-basic": "Informació bàsica",
        "version-parser-function-hooks": "Lligams funcionals de l'analitzador",
        "version-hook-name": "Nom del lligam",
        "version-hook-subscribedby": "Subscrit per",
-       "version-version": "(Versió $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[sense nom]",
        "version-license": "Llicència del MediaWiki",
        "version-ext-license": "Llicència",
        "tags-tag": "Nom de l'etiqueta",
        "tags-display-header": "Aparença de la llista de canvis",
        "tags-description-header": "Descripció completa del significat",
+       "tags-source-header": "Font",
        "tags-active-header": "Actiu?",
        "tags-hitcount-header": "Canvis etiquetats",
+       "tags-actions-header": "Accions",
        "tags-active-yes": "Sí",
        "tags-active-no": "No",
+       "tags-source-extension": "Definit per una extensió",
+       "tags-source-manual": "Aplicat manualment per usuaris i bots",
+       "tags-source-none": "Ja no està en ús",
        "tags-edit": "modifica",
+       "tags-delete": "suprimeix",
+       "tags-activate": "activa",
+       "tags-deactivate": "desactiva",
        "tags-hitcount": "$1 {{PLURAL:$1|canvi|canvis}}",
+       "tags-manage-no-permission": "No teniu permisos per administrar etiquetes de canvi",
+       "tags-create-heading": "Crea una nova etiqueta",
+       "tags-create-explanation": "Per defecte, les etiquetes acabades de crear estaran disponibles per usuaris i bots",
+       "tags-create-tag-name": "Nom de l'etiqueta:",
+       "tags-create-reason": "Motiu:",
+       "tags-create-submit": "Crea",
+       "tags-create-no-name": "Heu d'especificar un nom d'etiqueta.",
+       "tags-create-invalid-chars": "Els noms d'etiqueta no han de contenir comes (<code>,</code>) o barres (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Els noms d'etiqueta no poden contenir caracters que no es poden usar en els títols de pàgina",
+       "tags-create-already-exists": "L'etiqueta \"$1\" ja existeix.",
+       "tags-create-warnings-below": "Voleu continuar creant l'etiqueta?",
+       "tags-delete-title": "Elimina l'etiqueta",
+       "tags-delete-explanation-initial": "Esteu a punt d'eliminar l'etiqueta «$1» de la base de dades.",
+       "tags-delete-explanation-warning": "Aquesta acció és <strong>irreversible</strong> i <strong>no es pot desfer</strong>, ni tan sols els administradors de la base de dades poden desfer-la. Assegureu-vos que aquesta és l'etiqueta que voleu suprimir.",
+       "tags-delete-reason": "Motiu:",
+       "tags-delete-submit": "Suprimeix irreversiblement aquesta etiqueta",
+       "tags-delete-not-found": "L'etiqueta «$1» no existeix.",
+       "tags-delete-too-many-uses": "L'etiqueta «$1» s'aplica a més {{PLURAL:$2|d'$2 revisió|de $2 revisions}} i, per tant, no pot eliminar-se.",
+       "tags-activate-title": "Activa l'etiqueta",
+       "tags-activate-question": "Esteu a punt d'activar l'etiqueta «$1».",
+       "tags-activate-reason": "Motiu:",
+       "tags-activate-not-allowed": "No és possible activar l'etiqueta «$1».",
+       "tags-activate-not-found": "L'etiqueta «$1» no existeix.",
+       "tags-activate-submit": "Activa",
+       "tags-deactivate-title": "Desactiva l'etiqueta",
+       "tags-deactivate-question": "Esteu a punt de desactivar l'etiqueta «$1».",
+       "tags-deactivate-reason": "Motiu:",
+       "tags-deactivate-not-allowed": "No és possible desactivar l'etiqueta «$1».",
+       "tags-deactivate-submit": "Desactiva",
        "comparepages": "Comparar pàgines",
        "compare-page1": "Pàgina 1",
        "compare-page2": "Pàgina 2",
        "htmlform-cloner-required": "Cal com a mínim un valor.",
        "sqlite-has-fts": "$1, amb suport de búsqueda de text íntegre",
        "sqlite-no-fts": "$1, sense supor de búsqueda de text íntegre",
-       "logentry-delete-delete": "$1 ha esborrat $3",
+       "logentry-delete-delete": "$1 {{GENDER:$2|ha esborrat}} la pàgina $3",
        "logentry-delete-restore": "$1 ha restaurat $3",
        "logentry-delete-event": "$1 {{GENDER:$2|ha canviat}} la visibilitat {{PLURAL:$5|d'un esdeveniment al registre|de $5 esdeveniments al registre}} de $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|ha canviat}} la visibilitat {{PLURAL:$5|d'una revisió|de $5 revisions}} a la pàgina $3: $4",
        "revdelete-uname-unhid": "ha revelat un nom d'usuari que era ocult",
        "revdelete-restricted": "ha aplicat restriccions als administradors",
        "revdelete-unrestricted": "ha tret les restriccions als administradors",
+       "logentry-block-unblock": "$1 {{GENDER:$2|va desblocar}} {{GENDER:$4|$3}}",
+       "logentry-import-upload": "$1 {{GENDER:$2|va importar}} $3 a través de càrrega de fitxer",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|va importar}} $3 d'un altre wiki",
        "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-upload-upload": "$1 {{GENDER:$2|ha carregat}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ha carregat}} una nova versió de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|ha carregat}} $3",
+       "log-name-managetags": "Registre de gestió d'etiquetes",
+       "logentry-managetags-create": "$1 {{GENDER:$2|va crear}} l'etiqueta «$4»",
        "rightsnone": "(cap)",
        "revdelete-summary": "el resum d'edició",
+       "feedback-adding": "S'està afegint el comentari a la pàgina...",
+       "feedback-back": "Enrere",
+       "feedback-bugcheck": "Fantàstic! Comproveu que no sigui un dels [$1 problemes ja coneguts].",
+       "feedback-bugnew": "Ja ho he comprovat. Informeu d'un nou problema",
        "feedback-bugornote": "Si podeu descriure un problema tècnic en detall, [$1 informeu-ne].\nAltrament, podeu fer servir un senzill formulari a continuació. El vostre comentari s'afegirà a la pàgina «[$3 $2]», juntament amb el vostre nom d'usuari i el navegador que esteu emprant.",
-       "feedback-subject": "Assumpte:",
-       "feedback-message": "Missatge:",
        "feedback-cancel": "Canceŀla",
-       "feedback-submit": "Envieu la vostra opinió",
-       "feedback-adding": "S'està afegint el comentari a la pàgina...",
+       "feedback-close": "Fet",
+       "feedback-external-bug-report-button": "Arxiva una tasca tècnica",
+       "feedback-dialog-title": "Envia el comentari",
+       "feedback-dialog-intro": "Podeu utilitzar el senzill formulari de sota per a trametre la vostra opinió. El comentari s'afegirà a la pàgina «$1» juntament amb el vostre nom d'usuari.",
+       "feedback-error-title": "Error",
        "feedback-error1": "Error: Resultat de l'API no reconegut",
        "feedback-error2": "Error: Edició fallida",
        "feedback-error3": "Error: No hi ha resposta de l'API",
+       "feedback-message": "Missatge:",
+       "feedback-subject": "Assumpte:",
+       "feedback-submit": "Envia",
+       "feedback-terms": "Entenc que la informació del meu agent d'usuari inclou les versions exactes del meu navegador i del meu sistema operatiu i que seran publicades amb els meus comentaris.",
+       "feedback-termsofuse": "Accepto proporcionar informació d'acord amb les Condicions d'ús.",
        "feedback-thanks": "Gràcies! S'ha publicat la vostra opinió a la pàgina «[$2 $1]».",
-       "feedback-close": "Fet",
-       "feedback-bugcheck": "Fantàstic! Comproveu que no sigui un dels [$1 problemes ja coneguts].",
-       "feedback-bugnew": "Ja ho he comprovat. Informeu d'un nou problema",
+       "feedback-thanks-title": "Gràcies!",
+       "feedback-useragent": "Agent d'usuari:",
        "searchsuggest-search": "Cerca",
        "searchsuggest-containing": "que conté ...",
        "api-error-badaccess-groups": "No teniu permís per a carregar fitxers en aquest wiki.",
        "json-error-utf8": "Caràcters UTF-8 amb errors de format, probablement mal codificats",
        "json-error-recursion": "Una o més referències recursives en el valor per ser codificat",
        "json-error-inf-or-nan": "Un o més valors NAN (número no assignat) o INF (infinit) en el valor per ser codificat",
-       "json-error-unsupported-type": "S'ha donat un valor d'un tipus que no pot ser codificat"
+       "json-error-unsupported-type": "S'ha donat un valor d'un tipus que no pot ser codificat",
+       "headline-anchor-title": "Enllaç a aquesta secció",
+       "special-characters-group-latin": "Llatí",
+       "special-characters-group-latinextended": "Llatí ampliat",
+       "special-characters-group-ipa": "AFI",
+       "special-characters-group-symbols": "Símbols",
+       "special-characters-group-greek": "Grec",
+       "special-characters-group-cyrillic": "Ciríŀlic",
+       "special-characters-group-arabic": "Aràbic",
+       "special-characters-group-arabicextended": "Aràbic estès",
+       "special-characters-group-persian": "Persa",
+       "special-characters-group-hebrew": "Hebreu",
+       "special-characters-group-bangla": "Bengalí",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Tailandès",
+       "special-characters-group-lao": "Laosià",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "guió curt",
+       "special-characters-title-emdash": "guió llarg",
+       "special-characters-title-minus": "signe menys"
 }
index 98abb5d..a0ab89b 100644 (file)
@@ -18,7 +18,7 @@
        "tog-extendwatchlist": "Шорбина тӀехьажарна могӀам, ша беригге а хийцамаш чубогӀуш, тӀехьаббина боцурш а",
        "tog-usenewrc": "Лелабе дика могӀам керла чу хийцамашна (оьшу JavaScript)",
        "tog-numberheadings": "Ша шех хlитто терахь корташна",
-       "tog-showtoolbar": "Ð\93айÑ\82а Ð»Ð°ÐºÑ\85аÑ\80а Ð³Ó\80иÑ\80Ñ\81ан Ð´Ð°ÐºÑ\8aа Ð½Ð¸Ñ\81йеÑ\88 Ð°Ñ\82Ñ\82он Ð¾Ñ\86 Ñ\82адаÑ\80 Ñ\87оÑ\85Ñ\8c (JavaScript)",
+       "tog-showtoolbar": "Ð\93айÑ\82а Ð»Ð°ÐºÑ\85аÑ\80а Ð³Ó\80иÑ\80Ñ\81ийн Ð¿Ð°Ð½ÐµÐ»Ñ\8c Ñ\82адаÑ\80Ñ\88 Ð´ÐµÑ\87Ñ\83 Ñ\85енаÑ\85Ñ\8c",
        "tog-editondblclick": "Нисъе агӀонаш шозза тӀетаӀийча (JavaScript)",
        "tog-editsectiononrightclick": "Нисде дакъа шозза бакъехьар дахка тӀетаӀийча оцу кортан (JavaScript)",
        "tog-watchcreations": "ТӀетоха ас кхоьллина агӀонаш тергаме могӀам чу",
        "tog-prefershttps": "Даима лела йе лардина системин чудалар",
        "underline-always": "Даимна",
        "underline-never": "Цкъа а",
-       "underline-default": "Ð\9bелайа Ð±Ñ\80аÑ\83зеÑ\80ан Ð½Ð¸Ñ\81йарца",
+       "underline-default": "Ð\9bелае Ð±Ñ\80аÑ\83зеÑ\80ан Ð½Ð¸Ñ\81Ñ\8fрца",
        "editfont-style": "Тадар чохь долу шрифт:",
        "editfont-default": "Браузеран гӀирса чура шрифт",
        "editfont-monospace": "Цхьатерра доцу шрифт",
        "editfont-sansserif": "Аьтта доцу шрифт",
        "editfont-serif": "Аьтта долу шрифт",
        "sunday": "кӀиран де",
-       "monday": "Ð\9eршот",
-       "tuesday": "Шинара",
-       "wednesday": "Ð\9aхаара",
-       "thursday": "Ð\95ара",
-       "friday": "Ð\9fӀераска",
-       "saturday": "Шот",
+       "monday": "оршот",
+       "tuesday": "шинара",
+       "wednesday": "кхаара",
+       "thursday": "еара",
+       "friday": "пӀераска",
+       "saturday": "шот",
        "sun": "КӀи",
        "mon": "Ор",
        "tue": "Ши",
        "disclaimers": "Бехк тӀецалацар",
        "disclaimerpage": "Project:Бехк тӀецалацар",
        "edithelp": "ГӀо оцу тадарна",
+       "helppage-top-gethelp": "ГӀо",
        "mainpage": "Коьрта агӀо",
        "mainpage-description": "Коьрта агӀо",
        "policy-url": "Project:Бакъо",
        "thisisdeleted": "Хьажа я меттахӀоттае $1?",
        "viewdeleted": "Хьожий $1?",
        "restorelink": "{{PLURAL:$1|1=$1 дӀадаьккхина нийсдар|$1 дӀадяхна нийсдарш}}",
-       "feedlinks": "Ð\9eÑ\86Ñ\83 Ñ\85аÑ\82lаÑ\8cхь:",
+       "feedlinks": "Тайпанехь:",
        "feed-invalid": "Тайпан нийсадоцу талол оцу куьгтаlорна.",
        "feed-unavailable": "Хаитарца йолу асанаш тlекхочучехь яц",
        "site-rss-feed": "$1 — RSS-аса",
        "no-null-revision": "«$1» агӀона нисдар дан цаделира",
        "badtitle": "Цамегаш йолу цӀе",
        "badtitletext": "Дехарца йолу агӀонан цӀе нийса яц, йаьсса ю, хила мега нийса ца хӀоттийна меттаюкъар йа юкъарвики цӀе. Хила мега, цӀарца цамагош йолу символаш.",
-       "perfcached": "Ð\9bаÑ\85аÑ\80а Ñ\85аам Ñ\81Ñ\85Ñ\8cаÑ\8dÑ\86а ÐºÑ\8dÑ\88а Ñ\87Ñ\83Ñ\80а Ñ\86Ñ\83ндела Ñ\82Ó\80еÑ\85Ñ\8cаÑ\80лаÑ\8cÑ\80а Ñ\85ийÑ\86амаÑ\88 Ð³Ð¾Ð¹Ñ\82Ñ\83Ñ\88 Ð±Ð°Ñ\86. Ð\9aÑ\8dÑ\88а Ñ\87оÑ\85Ñ\8c Ð»Ð°Ñ\82Ñ\82аÑ\91 Ð¾Ñ\86Ñ\83л $1  ÐºÓ\80езиг {{PLURAL:$1|1=дÓ\80аÑ\8fздаÑ\80|дÓ\80аÑ\8fздаÑ\80Ñ\88}}.",
+       "perfcached": "Ð\9bаÑ\85аÑ\80а Ñ\85аам Ñ\81Ñ\85Ñ\8cаÑ\8dÑ\86а ÐºÑ\8dÑ\88а Ñ\87Ñ\83Ñ\80а Ñ\86Ñ\83ндела Ñ\82Ó\80аÑ\8cÑ\85Ñ\85Ñ\8cаÑ\80леÑ\80а Ñ\85ийÑ\86амаÑ\88 Ð³Ð¾Ð¹Ñ\82Ñ\83Ñ\88 Ð±Ð°Ñ\86. Ð\9aÑ\8dÑ\88а Ñ\87оÑ\85Ñ\8c Ð»Ð°Ñ\82Ñ\82айо Ð¾Ñ\86Ñ\83л $1  ÐºÓ\80езиг {{PLURAL:$1|дÓ\80аÑ\8fздаÑ\80}}.",
        "perfcachedts": "Лахара хаам схьаэца кэша чура иза тӀаьхьара карла ялла $1. Кэша чохь латта до оцул $4 кӀезиг {{PLURAL:$4|1=дӀаяздар|дӀаяздарш}}.",
        "querypage-no-updates": "ХӀинца хӀара агӀо карлаякхар дӀадайина ду.\nКхузахь гайтина болу хаамаш карла боккхур бац.",
        "viewsource": "Хьажар",
        "viewpagelogs": "Гайта хlокху агlонан тептар",
        "nohistory": "ХӀокху агӀона хийцамаш бина хила бац.",
        "currentrev": "Карара верси",
-       "currentrev-asof": "Карара верси оцу $1",
+       "currentrev-asof": "Карара верси $1",
        "revisionasof": "Верси $1",
        "revision-info": "Верси $1; {{GENDER:$6|$2}}$7",
        "previousrevision": "← Хьалха йоьдург",
        "last": "хьалх.",
        "page_first": "хьалхара",
        "page_last": "тlаьххьара",
-       "histlegend": "Ð\9aÑ\85еÑ\82оÑ\80: (Ñ\85Ó\80инÑ\86алеÑ\80а.) â\80\94 Ð¹Ð¾Ð»Ñ\83Ñ\87Ñ\83 Ð±Ð°Ñ\88Ñ\85он ÐºÑ\8aаÑ\81Ñ\82ам; (Ñ\85Ñ\8cалÑ\85.) â\80\94 Ñ\85Ñ\8cалÑ\85леÑ\80ачу башхон къастам; '''ж''' — жимо бозалца болу хийцам.",
+       "histlegend": "Ð\9aÑ\85еÑ\82оÑ\80: (Ñ\85Ó\80инÑ\86алеÑ\80а.) â\80\94 Ð¹Ð¾Ð»Ñ\83Ñ\87Ñ\83 Ð±Ð°Ñ\88Ñ\85он ÐºÑ\8aаÑ\81Ñ\82ам; (Ñ\85Ñ\8cалÑ\85.) â\80\94 Ñ\85Ñ\8cалÑ\85алеÑ\80чу башхон къастам; '''ж''' — жимо бозалца болу хийцам.",
        "history-fieldset-title": "АгӀона хийцамаш",
        "history-show-deleted": "ДӀаяхинарш",
        "histfirst": "ширниш",
        "histlast": "хьалхарниш",
        "historysize": "($1 {{PLURAL:$1|байт}})",
-       "historyempty": "(йаÑ\8cÑ\81са)",
+       "historyempty": "(еса)",
        "history-feed-title": "Хийцаман истори",
        "history-feed-description": "Википедин чохь хӀокху агӀона хийцаман истори",
        "history-feed-item-nocomment": "$1 оцу $2",
        "revdelete-otherreason": "Кхин бахьна/тӀетохар:",
        "revdelete-reasonotherlist": "Кхин бахьна",
        "revdelete-edit-reasonlist": "Бахьанин могӀам нисбар",
-       "revdelete-offender": "Ð\90гÓ\80она Ð²ÐµÑ\80Ñ\81ен автор:",
+       "revdelete-offender": "Ð\90гÓ\80она Ð²ÐµÑ\80Ñ\81ин автор:",
        "suppressionlog": "Хьулдаран тептар",
        "mergehistory": "Нисдарин истори цхьаьнатохар",
        "mergehistory-box": "Шин агӀона нисдарин истори цхьаьнатохар:",
        "searchprofile-articles-tooltip": "$1 чохь лахар",
        "searchprofile-images-tooltip": "Файлаш лахар",
        "searchprofile-everything-tooltip": "Массо агӀонашкахь лахар (дийцаре агӀонашца)",
-       "searchprofile-advanced-tooltip": "Ð\94еÑ\85аÑ\80Ñ\86а Ð¹Ð¾Ð»Ñ\83 Ñ\86Ó\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82игашкахь лахар",
+       "searchprofile-advanced-tooltip": "Ð\94еÑ\85аÑ\80Ñ\86а Ð¹Ð¾Ð»Ñ\83 Ñ\86Ó\80еÑ\80ийн Ð°Ð½ашкахь лахар",
        "search-result-size": "$1 ({{PLURAL:$2|$2 дош|$2 дешнаш}})",
        "search-result-category-size": "$1 {{PLURAL:$1|юкъаяр}} ($2 {{PLURAL:$2|1=бухара категори|бухара категореш}}, $3 {{PLURAL:$3|1=файл|файлаш}}).",
        "search-redirect": "(дlасахьажийна $1)",
        "search-showingresults": "{{PLURAL:$4|Карийна <strong>$1</strong> — цхьаъ агӀо|И дош карийна <strong>$3</strong> агӀонашкахь, царех гойту $2 агӀо}}",
        "search-nonefound": "Дехаре терра цхьа хӀума ца карийна.",
        "powersearch-legend": "Шуьйра лахар",
-       "powersearch-ns": "ЦÓ\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82игашкахь лахар:",
+       "powersearch-ns": "ЦÓ\80еÑ\80ийн Ð°Ð½ашкахь лахар:",
        "powersearch-togglelabel": "Билгалдан:",
        "powersearch-toggleall": "Массо",
        "powersearch-togglenone": "ХӀумма цаоьшу",
        "yournick": "Керла куьгтаӀор:",
        "prefs-help-signature": "Дийцаре агӀонаш чохь къуьгтаӀо деза символшца «<nowiki>~~~~</nowiki>», цара гойтур ду хьан къуьгтаӀор а хан а.",
        "badsiglength": "ТӀех деха куьг.\nКуьйган $1 {{PLURAL:$1|символ}} дукха хила цамега.",
-       "yourgender": "Ð\92Ñ\83\99Ñ\83:",
-       "gender-unknown": "хlоттийна яц",
+       "yourgender": "СÑ\82ен-боÑ\8cÑ\80Ñ\88алла",
+       "gender-unknown": "хӀоттийна яц",
        "gender-male": "борша",
        "gender-female": "сте",
        "prefs-help-gender": "ТӀехь доцург: и хаам лелош бу цхьайолу хаамаш чохь декъашхочун пол гучуйоккхуш.\nИ хаам массарна гуш хир бу.",
        "grouppage-bureaucrat": "{{ns:project}}:Бюрократаш",
        "grouppage-suppress": "{{ns:project}}:Ревизораш",
        "right-read": "агӀонашка хьажар",
-       "right-edit": "агӀонаш нийсе",
+       "right-edit": "агӀонаш нисъяр",
        "right-createpage": "АгӀонаш кхоллар (дийцарш дац)",
        "right-createtalk": "Дийцаре агӀонаш кхоллар",
        "right-createaccount": "декъашхошна керла дӀаяздарш кхоллар",
        "right-noratelimit": "чехкалин доза дац",
        "right-import": "кхечу википедешкара агӀонаш импорт ян",
        "right-importupload": "файлаш чуяхарца агӀонаш импорт ян",
-       "right-patrol": "нисдарш хьаьжна сана билгалдар",
-       "right-autopatrol": "нисдарш хьаьжна сана автоматически билгалдан",
-       "right-patrolmarks": "керла нисдарийн хьаьжна билгалонашка хьажар",
+       "right-patrol": "ниÑ\81даÑ\80Ñ\88 Ñ\85Ñ\8cаÑ\8cжжина Ñ\81ана Ð±Ð¸Ð»Ð³Ð°Ð»Ð´Ð°Ñ\80",
+       "right-autopatrol": "ниÑ\81даÑ\80Ñ\88 Ñ\85Ñ\8cаÑ\8cжжина Ñ\81ана Ð°Ð²Ñ\82омаÑ\82иÑ\87еÑ\81ки Ð±Ð¸Ð»Ð³Ð°Ð»Ð´Ð°Ð½",
+       "right-patrolmarks": "кеÑ\80ла Ð½Ð¸Ñ\81даÑ\80ийн Ñ\85Ñ\8cаÑ\8cжжина Ð±Ð¸Ð»Ð³Ð°Ð»Ð¾Ð½Ð°Ñ\88ка Ñ\85Ñ\8cажаÑ\80",
        "right-unwatchedpages": "тергамехь йоцу агӀонийн могӀане хьажар",
        "right-mergehistory": "агӀонаш вовшахтохар",
        "right-userrights": "декъашхойн массо бакъонаш хийцар",
        "action-rollback": "билгала агӀона тӀехьарчу декъашхочо дина нисдарш сиха юхадахар",
        "action-import": "кхечу википедешкара агӀонаш импорт ян",
        "action-importupload": "файлаш чуяхарца агӀонаш импорт ян",
-       "action-patrol": "кхечера нисдарш хьаьжна сана билгалдар",
-       "action-autopatrol": "шен нисдарш хьаьжна сана билгалдар",
+       "action-patrol": "кÑ\85еÑ\87еÑ\80а Ð½Ð¸Ñ\81даÑ\80Ñ\88 Ñ\85Ñ\8cаÑ\8cжжина Ñ\81ана Ð±Ð¸Ð»Ð³Ð°Ð»Ð´Ð°Ñ\80",
+       "action-autopatrol": "Ñ\88ен Ð½Ð¸Ñ\81даÑ\80Ñ\88 Ñ\85Ñ\8cаÑ\8cжжина Ñ\81ана Ð±Ð¸Ð»Ð³Ð°Ð»Ð´Ð°Ñ\80",
        "action-unwatchedpages": "тергамехь йоцу агӀонийн могӀане хьажар",
        "action-mergehistory": "хӀокху агӀона хийцаман истори вовшахтохар",
        "action-userrights": "декъашхойн массо бакъонаш хийцар",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|тӀеххьара чудаларца}}",
        "enhancedrc-history": "истори",
        "recentchanges": "Керла нисдарш",
-       "recentchanges-legend": "Керла нисдарш гар нисдар",
-       "recentchanges-summary": "Лахахь гайтина хене хьаьжна Википедин агӀонашкахь тӀаьхьара бина хийцамаш",
+       "recentchanges-legend": "Керла нисдаршка хьажар тадар",
+       "recentchanges-summary": "Ð\9bаÑ\85аÑ\85Ñ\8c Ð³Ð°Ð¹Ñ\82ина Ñ\85ене Ñ\85Ñ\8cаÑ\8cжжина Ð\92икипедин Ð°Ð³Ó\80онаÑ\88каÑ\85Ñ\8c Ñ\82Ó\80аÑ\8cÑ\85Ñ\8cаÑ\80а Ð±Ð¸Ð½Ð° Ñ\85ийÑ\86амаÑ\88",
        "recentchanges-noresult": "Билгал йинчу хенахь цхьа хийцамаш бина бац.",
        "recentchanges-feed-description": "Тергам бе тlаьхьара вики хийцаман хlокху ларца.",
        "recentchanges-label-newpage": "Оцу нисдарца кхоьллина керла агӀо.",
        "recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (хьажа кхин [[Special:NewPages|керла агӀонийн могӀа]])",
        "rcnotefrom": "Лахахь гайтина тӀера <strong>$2</strong> (хийцамаш <strong>$1</strong> кӀезиг).",
-       "rclistfrom": "Гайта хийцам $3 $2 хан",
+       "rclistfrom": "Гайта хийцам {{CURRENTYEAR}} шаран {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTTIME}} бина болу",
        "rcshowhideminor": "$1 кегийра нисдарш",
        "rcshowhideminor-show": "Гайта",
        "rcshowhideminor-hide": "Къайладаха",
        "filehist-current": "карара",
        "filehist-datetime": "Терахь/Хан",
        "filehist-thumb": "Жима",
-       "filehist-thumbtext": "Ð\96имо Ð±Ð°Ñ\88Ñ\85о Ð¾Ñ\86Ñ\83 $1",
+       "filehist-thumbtext": "Ð\96имо Ð²ÐµÑ\80Ñ\81и $1",
        "filehist-nothumb": "Миниатюра яц",
        "filehist-user": "Декъашхо",
        "filehist-dimensions": "Файлан барам",
        "mimesearch-summary": "ХӀокху агӀоно йиш хуьлуьйту MIME-тайпан файлаш харжа. Яздеш долу формат: чулацаман тайп/бухара тайп, масала  <code>image/jpeg</code>.",
        "mimetype": "MIME-тайп:",
        "download": "чуяккха",
-       "unwatchedpages": "Цхьамо тергам ца беш йолу агӀонаш",
+       "unwatchedpages": "Цхьам терго цайо агӀонаш",
        "listredirects": "ДIасахьажоран могIам",
        "listduplicatedfiles": "Файлийн могӀам дубликатшца",
        "listduplicatedfiles-summary": "ХӀара файлийн могӀам бу, кхузахь тӀехьарчу файлан верси цхьайолу тӀехьарчу файлийн версийн дубликат лоруш ю. Локальни файлаш бен лоруш яц.",
        "uncategorizedcategories": "Категореш йоцу категореш",
        "uncategorizedimages": "Категореш йоцу файлаш",
        "uncategorizedtemplates": "Категореш йоцу кепаш",
-       "unusedcategories": "Ð\99аÑ\8cÑ\81са категореш",
+       "unusedcategories": "Ð\95са категореш",
        "unusedimages": "Лелош йоцу файлаш",
        "wantedcategories": "Оьшуш йолу категореш",
        "wantedpages": "Оьшуш йолу агӀонаш",
        "protectedtitles": "ГIаролла дина цIераш",
        "listusers": "Декъашхойн могӀам",
        "listusers-editsonly": "Цхаъ мукъане а хийцам бина декъашхой гайта",
-       "listusers-creationsort": "Кхоьллина хене хьаьжна нисъяр",
+       "listusers-creationsort": "Ð\9aÑ\85оÑ\8cллина Ñ\85ене Ñ\85Ñ\8cаÑ\8cжжина Ð½Ð¸Ñ\81Ñ\8aÑ\8fÑ\80",
        "listusers-desc": "Харжа кӀезиг хиларца",
        "usereditcount": "$1 {{PLURAL:$1|нисдар|нисдарш}}",
        "usercreated": "{{GENDER:$3|дӀавазвелла|дӀаязелла}} $1 $2",
        "ancientpages": "ТӀаьххьарлерачу хенаца нисбина яззамаш",
        "move": "ЦӀе хийца",
        "movethispage": "ХӀокху агӀон цӀе хийца",
-       "unusedimagestext": "Ð\94еÑ\85аÑ\80 Ð´Ð¾, Ñ\82идаме Ñ\8dÑ\86а, ÐºÑ\85ин Ð¹Ð¾Ð»Ñ\83 Ð´Ñ\83Ñ\8cнана Ð¼Ð°Ñ\88ан-меÑ\82Ñ\82игаÑ\88 Ð° Ð»ÐµÐ»Ð¾Ñ\88 Ñ\85ила Ð¼ÐµÐ³Ð° Ð½Ð¸Ð¹Ñ\81Ñ\81а Ð¹Ð¾Ð³Ó\80Ñ\83 Ñ\85Ñ\8cажоÑ\80г (URL) Ñ\85Ó\80окÑ\85Ñ\83 Ñ\85Ó\80Ñ\83ман, Ñ\85Ó\80окÑ\85Ñ\83 Ð¼Ð¾Ð³Ó\80аме Ð¹Ð¾Ð³Ó\80Ñ\83Ñ\88 Ñ\8fлаÑ\85Ñ\8c Ñ\8fÑ\86ахь а иза хила мега жигара лелош.",
+       "unusedimagestext": "Ð\9bаÑ\85аÑ\80а Ñ\84айлаÑ\88 Ñ\86Ñ\85Ñ\8cана Ð°Ð³Ó\80онгаÑ\85Ñ\8c Ð»ÐµÐ»Ð¾Ñ\88 Ñ\8fÑ\86.\nÐ\94еÑ\85аÑ\80 Ð´Ð¾, Ñ\82идаме Ð±Ðµ, ÐºÑ\85ин Ð¹Ð¾Ð»Ñ\83 Ð²ÐµÐ±-Ñ\81айÑ\82аÑ\88 Ð° Ð»ÐµÐ»Ð¾Ñ\88 Ñ\85ила Ð¼ÐµÐ³Ð° Ð½Ð¸Ð¹Ñ\81Ñ\81а Ð¹Ð¾Ð³Ó\80Ñ\83 Ñ\85Ñ\8cажоÑ\80г (URL), Ñ\85Ó\80окÑ\85Ñ\83 Ð¼Ð¾Ð³Ó\80аме Ð¹Ð¾Ð³Ó\80Ñ\83Ñ\88 Ñ\8fлахь а иза хила мега жигара лелош.",
        "unusedcategoriestext": "ХӀокху категорешан чохь агӀонаш я кхин категореш яц.",
        "notargettitle": "Ӏалашо билгал йина яц",
        "notargettext": "И кхочушдан ахьа билгал йина яц Ӏалашонан агӀо я декъашхо.",
        "nextpage": "Тlаьхьа йогlу агlо ($1)",
        "prevpage": "Хьалхалера агlо ($1)",
        "allpagesfrom": "Гучé яха агӀонаш, йолалуш йолу оцу:",
-       "allpagesto": "Арайахар сацадé оцу:",
+       "allpagesto": "Араяхар сацадé тӀе:",
        "allarticles": "Массо агӀонаш",
        "allinnamespace": "Массо агӀонаш оцу цӀерийн анахь «$1»",
        "allpagessubmit": "Кхочушдé",
        "cachedspecial-refresh-now": "Хьажа тӀехьарчу версега.",
        "categories": "Категореш",
        "categoriespagetext": "{{PLURAL:$1|1=Лахара категореш чохь ю|Лахара категореш чохь ю}} агӀонаш я медиа-файлаш.\nКхузахь гойтуш яц [[Special:UnusedCategories|лелош йоцу категореш]].\nКхин дӀа [[Special:WantedCategories| хийла еза категореш]].",
-       "categoriesfrom": "Гучé яха категореш, оцу:",
+       "categoriesfrom": "Гучé яха категореш, тӀера:",
        "special-categories-sort-count": "нисъе дукхаллица",
        "special-categories-sort-abc": "нисъе абатца",
        "deletedcontributions": "Декъашхочун дӀабяккхина къинхьегам",
        "watchlist-options": "Тергаме могlаман гlирс нисбар",
        "watching": "Тергаме мlогаман юкъаяккха…",
        "unwatching": "Тергаме могӀанан чура дӀаяккхар…",
-       "enotif_reset": "Билгалъе ерриге агӀонаш хьаьжна санна",
+       "enotif_reset": "Ð\91илгалÑ\8aе ÐµÑ\80Ñ\80иге Ð°Ð³Ó\80онаÑ\88 Ñ\85Ñ\8cаÑ\8cжжина Ñ\81анна",
        "enotif_impersonal_salutation": "Декъашхо {{grammar:genitive|{{SITENAME}}}}",
        "enotif_subject_deleted": "Проектан «{{SITENAME}}» агӀо «$1» {{gender:$2|декъашхочо}} $2 дӀаяьккхина",
        "enotif_subject_created": "Проектан «{{SITENAME}}» агӀо «$1» {{gender:$2|декъашхочо}} $2 кхоьллина",
        "actionfailed": "Кхочушъ дина дац",
        "deletedtext": "«$1» дӀаяьккхина яра.\nХьажа. $2 хьажарна оцу тӀаьхьара дӀаяхначара могӀаме.",
        "dellogpage": "ДӀадаьхнарш долу тéптар",
-       "dellogpagetext": "Лахахь гойтуш ду дӀадахаршан тептар.",
+       "dellogpagetext": "Лахахь гойтуш ю тӀаьххьара дӀаяьхнарш.",
        "deletionlog": "дӀадаьхнарш долу тéптар",
        "deletecomment": "Бахьна:",
        "deleteotherreason": "Кхин бахьна/тӀетохар:",
        "editcomment": "Хийцамаш барна гайтина бахьна: ''$1''.",
        "revertpage": "Нисдарш [[Special:Contributions/$2|$2]] ([[User talk:$2|дийцаре]]) юха даьхна версин [[User:$1|$1]]",
        "revertpage-nouser": "Нисдарш (декъашхочун цӀе хьулйина) юхадаьхина версин {{GENDER:$1|[[User:$1|$1]]}}",
-       "rollback-success": "ЮÑ\85адаÑ\8cÑ\85на $1; Ð½Ð¸Ñ\81даÑ\80Ñ\88, $2 Ð²ÐµÑ\80Ñ\81ен.",
+       "rollback-success": "ЮÑ\85адаÑ\8cÑ\85на $1; Ð½Ð¸Ñ\81даÑ\80Ñ\88, $2 Ð²ÐµÑ\80Ñ\81ин.",
        "sessionfailure-title": "Сеансан гӀалат",
        "sessionfailure": "Карара белхан сеансан гӀалат деллачух тера ду;\nиза дешдерг сацийна «сеанс долаерзийтта».\nДехар до, тӀетаӀе «ЮхугӀо» кнопка, кхин агӀо карлаяккха.",
        "protectlogpage": "Гlаролли тептар",
        "protect-othertime": "Кхин хан:",
        "protect-othertime-op": "кхин хан",
        "protect-existing-expiry": "Карара чекхйолу хан: $2, $3",
+       "protect-existing-expiry-infinity": "Карара чекхйолу хан: чаккхе йоцу",
        "protect-otherreason": "Кхин бахьна/тӀетохар:",
        "protect-otherreason-op": "Кхин бахьна",
        "protect-dropdown": "* ГӀоралла дарна баьхьаш \n** сих-сиха зулам дар \n** дуккха спам хилар\n** нисдарийн тӀом \n** гӀараялл агӀо",
        "undeleteviewlink": "хьажа",
        "undeleteinvert": "Къастае массо",
        "undeletecomment": "Бахьна:",
-       "undeletedrevisions": "{{PLURAL:$1|меÑ\82Ñ\82аÑ\85Ó\80оÑ\82Ñ\82айина}} $1 {{PLURAL:$1|хийцам}}",
+       "undeletedrevisions": "{{PLURAL:$1|меÑ\82Ñ\82аÑ\85Ó\80оÑ\8cÑ\82Ñ\82ина}} $1 {{PLURAL:$1|хийцам}}",
        "undeletedrevisions-files": "меттахӀоьттина $1 {{PLURAL:$1|верси}} а $2 {{PLURAL:$2|файл}} а",
        "undeletedfiles": "$1 {{PLURAL:$1|файл меттахӀоттайина|файлаш меттахӀоттайина}}",
        "cannotundelete": "ГӀалат меттахӀоттайина:\n$1",
        "undelete-show-file-submit": "ХӀаъ",
        "namespace": "Цlерийн ана:",
        "invert": "Хаьржинарг къайлаяккха",
-       "tooltip-invert": "Ð¥Ó\80оÑ\82Ñ\82ае Ñ\85Ó\80аÑ\80а Ð±Ð¸Ð»Ð³Ð°Ð»Ð¾, Ñ\85аÑ\8cÑ\80жинÑ\87Ñ\83 Ñ\86Ó\80еÑ\80ийн Ð°Ð½Ð°Ð½ Ð°Ð³Ó\80онийн Ñ\85ийÑ\86амаÑ\88 ÐºÑ\8aайлабаÑ\85а (кÑ\85ин Ð´Ð¸Ñ\85кина Ñ\86Ó\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82игаш, гайтина елахь)",
+       "tooltip-invert": "Ð¥Ó\80оÑ\82Ñ\82ае Ñ\85Ó\80аÑ\80а Ð±Ð¸Ð»Ð³Ð°Ð»Ð¾, Ñ\85аÑ\8cÑ\80жинÑ\87Ñ\83 Ñ\86Ó\80еÑ\80ийн Ð°Ð½Ð°Ð½ Ð°Ð³Ó\80онийн Ñ\85ийÑ\86амаÑ\88 ÐºÑ\8aайлабаÑ\85а (кÑ\85ин Ð´Ð¸Ñ\85кина Ñ\86Ó\80еÑ\80ийн Ð°Ð½аш, гайтина елахь)",
        "namespace_association": "Йихкина ана",
        "tooltip-namespace_association": "ХӀоттае хӀара билгало, иштта дийцарийн (я кхин) цӀерийн ана юкъахь хилийта",
        "blanknamespace": "(Коьрта)",
        "export-addns": "ТӀетоха",
        "export-download": "Кховда де файл сана Ӏалашдан",
        "export-templates": "Латадé кепаш",
-       "allmessages": "Гlирса хаамаш",
+       "allmessages": "ГӀирса хаамаш",
        "allmessagesname": "Хаам",
        "allmessagesdefault": "Ӏад дитарца йоза",
        "allmessagescurrent": "Карарчу хенан йоза",
        "importlogpage": "Импортан тептар",
        "importlogpagetext": "Куьйгалхоша агӀонаш импорт яр царна бина хийцамашца кхечу википедеш чура.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|верси импорт йина|версеш импорт йина}}",
-       "import-logentry-interwiki": "«$1» — викиюкъара импорт",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|верси импорт йина|версеш импорт йина}} $2 чура",
        "javascripttest": "JavaScript хьажар",
        "tooltip-pt-userpage": "Декъашхочуьна агlо",
        "pageinfo-category-subcats": "Бухара категорийн дукхалла",
        "pageinfo-category-files": "Файлийн дукхалла",
        "markaspatrolleddiff": "Билгалйе теллина санна",
-       "markaspatrolledtext": "Билгалъе хӀара агӀо хьаьжна сана",
+       "markaspatrolledtext": "Ð\91илгалÑ\8aе Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о Ñ\85Ñ\8cаÑ\8cжжина Ñ\81ана",
        "markedaspatrolled": "ДӀадахка теллина санна хилар",
        "markedaspatrolledtext": "Хаьржина [[:$1]] агӀона верси къобалйина сана билгалйина.",
        "rcpatroldisabled": "ТӀехьара бина хийцамаш къобалбан магийна дац",
        "rcpatroldisabledtext": "ТӀехьара бина хийцамаш къобалбар хӀинца дӀадайина ду.",
        "markedaspatrollederror": "теллина сана билгалъян цало",
        "markedaspatrollednotify": "АгӀо «$1» пайдане хилар билгалдина",
-       "markedaspatrollederrornotify": "Хийцамаш хьаьжна сана билгал бан цабелира.",
+       "markedaspatrollederrornotify": "ХийÑ\86амаÑ\88 Ñ\85Ñ\8cаÑ\8cжжина Ñ\81ана Ð±Ð¸Ð»Ð³Ð°Ð» Ð±Ð°Ð½ Ñ\86абелиÑ\80а.",
        "patrol-log-page": "ТӀехьажаран тептар",
        "patrol-log-header": "Хьажжина версеш йолу тептар.",
        "log-show-hide-patrol": "$1 тӀехьажаран тептар",
        "version-parser-function-hooks": "Cинтаксисан къасторан функци схьалоцурш",
        "version-hook-name": "Схьалуьцачун цӀе",
        "version-hook-subscribedby": "ДӀабазбелла тӀе",
-       "version-version": "(Верси $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[цӀе йоцуш]",
        "version-license": "MediaWiki Лицензи",
        "version-ext-license": "Лицензи",
        "tags-deactivate": "дӀаяйа",
        "tags-hitcount": "$1 {{PLURAL:$1|хийцам|хийцамаш}}",
        "tags-create-heading": "Кхолла керла билгало",
+       "tags-create-explanation": "Юха кхоьллина билгалонаш декъашхошна а боташна а Ӏад йтарца тӀекхочуш хира ю.",
        "tags-create-tag-name": "Билгалонна цӀе:",
        "tags-create-reason": "Бахьна:",
        "tags-create-submit": "Кхолла",
        "revdelete-uname-unhid": "декъашхочун цӀе гуча яьккхина",
        "revdelete-restricted": "куьйгалхойн доза туху",
        "revdelete-unrestricted": "куьйгалхойн доза тохар дӀаяьккхина",
+       "logentry-block-block": "$1 {{GENDER:$2|блоктоьхна}} {{GENDER:$4|$3}} $5 $6 хан чекхйолу",
+       "logentry-block-unblock": "$1 {{GENDER:$2|блокдаяьккхина}} {{GENDER:$4|$3}}",
+       "logentry-suppress-block": "$1 {{GENDER:$2|блоктоьхна}} {{GENDER:$4|$3}} $5 $6 хан чекхйолу",
        "logentry-merge-merge": "$1 {{GENDER:$2|вовшахтоьхна}} $3 $4 чохь ($5 кхаччалц версеш)",
        "logentry-move-move": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4 дӀасахьажийнарг цаюьтуш",
        "logentry-managetags-create": "$1 {{GENDER:$2|Кхоьллина}} билгало «$4»",
        "rightsnone": "(яц)",
        "revdelete-summary": "хийцамах лаьцна",
+       "feedback-adding": "АгӀона хетарг тӀетохар...",
+       "feedback-back": "ЮхагӀо",
        "feedback-bugornote": "Хьайн техникин халонах лаьцна яздан хӀума делахь, дехар до, [$1 хаам бе тхоьга].\nДацахь хьан йиш ю хӀокху атта кепаца «[$3 $2]» агӀонг къамел тӀетоха хьан декъашхочун цӀарца, кхин лелош йолу браузер билгал еш.",
-       "feedback-subject": "Къамел:",
-       "feedback-message": "Хаам:",
        "feedback-cancel": "Цаоьшу",
-       "feedback-submit": "Дахьийта хетарг",
-       "feedback-adding": "АгӀона хетарг тӀетохар...",
        "feedback-close": "Кийчча ю",
+       "feedback-error-title": "ГӀалат",
+       "feedback-message": "Хаам:",
+       "feedback-subject": "Къамел:",
+       "feedback-submit": "Дахьийта",
+       "feedback-thanks-title": "Баркалла!",
        "searchsuggest-search": "Лахар",
        "searchsuggest-containing": "чуьраниг…",
        "api-error-duplicate": "Иштта чулацам болу {{PLURAL:$1|1=[$2 кхин файл]|[$2 кхин файлаш]}} йолуш ю",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|секунд}}",
        "limitreport-walltime": "Йодуш йолу хенахь лелор",
        "limitreport-walltime-value": "$1 секунд",
-       "limitreport-ppvisitednodes": "Препроцессор хьаьжна шадин дукхалла",
+       "limitreport-ppvisitednodes": "Ð\9fÑ\80епÑ\80оÑ\86еÑ\81Ñ\81оÑ\80 Ñ\85Ñ\8cаÑ\8cжжина Ñ\88адин Ð´Ñ\83кÑ\85алла",
        "limitreport-ppgeneratednodes": "Препроцессорс сгенерировать бина шадин дукхалла",
        "limitreport-postexpandincludesize": "Схьаяьстина юккъерчаран барам",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байт}}",
        "mediastatistics-header-executable": "Кхочушдийриш",
        "mediastatistics-header-archive": "Архиваш",
        "json-error-unknown": "JSON бала бу. ГӀалат: $1",
-       "json-error-syntax": "Синтаксин гӀалат"
+       "json-error-syntax": "Синтаксин гӀалат",
+       "headline-anchor-title": "ХӀокху дакъан тӀе хьажорг",
+       "special-characters-group-latin": "Латинан",
+       "special-characters-group-latinextended": "Латинан алсам",
+       "special-characters-group-ipa": "ДАЭ (IPA)",
+       "special-characters-group-symbols": "Символаш",
+       "special-characters-group-greek": "Грекийн",
+       "special-characters-group-cyrillic": "Кирилан",
+       "special-characters-group-arabic": "Ӏарбийн",
+       "special-characters-group-arabicextended": "Iаьрбийн шординарш",
+       "special-characters-group-persian": "Пхьарсхойн",
+       "special-characters-group-hebrew": "Жуьгтийн",
+       "special-characters-group-bangla": "Бангалойн",
+       "special-characters-group-tamil": "Тамилхойн",
+       "special-characters-group-telugu": "Телугойн",
+       "special-characters-group-sinhala": "Синхалойн",
+       "special-characters-group-gujarati": "Гужаратойн",
+       "special-characters-group-devanagari": "Деванагари",
+       "special-characters-group-thai": "Тайхойн",
+       "special-characters-group-lao": "Лаохойн",
+       "special-characters-group-khmer": "Кхимерхойн",
+       "special-characters-title-endash": "юкъар сиз",
+       "special-characters-title-emdash": "деха сиз",
+       "special-characters-title-minus": "хьаьрк минус"
 }
index de8be5c..2eecb5c 100644 (file)
@@ -14,7 +14,8 @@
                        "رزگار",
                        "아라",
                        "Serwan",
-                       "Ebraminio"
+                       "Ebraminio",
+                       "Macofe"
                ]
        },
        "tog-underline": "ھێڵ ھێنان بەژێر بەستەرەکان:",
        "right-override-export-depth": "هەناردنی لاپەڕەکان کە لاپەڕەکانی بەستەر پێ‌دراو تا قووڵایی 5 لەخۆ بگرێت",
        "right-sendemail": "ناردنی ئیمەیل بۆ بەکارھێنەرانی تر",
        "right-passwordreset": "دیتنی ئیمەیلەکانی ڕێکخستنەوەی تێپەڕوشە",
+       "right-managechangetags": "دروستکردن و سڕینەوەی [[Special:Tags|تاگەکان]] لە بنکەدراوە",
        "newuserlogpage": "لۆگی دروستکردنی بەکارھێنەر",
        "newuserlogpagetext": "ئەمە لۆگێکی دروستکردنی بەکارھێنەرە.",
        "rightslog": "لۆگی مافەکانی بەکارھێنەر",
        "delete-warning-toobig": "ئەم لاپەڕە مێژوویەکی دەستکاری زۆر گەورەی هەیە، زیاتر لە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}.\nسڕینەوی ئەوە لە وانەیە کارەکانی بنکەدراوی {{SITENAME}} تووشی کێشە بکات؛\nدوورنواڕانە جێ‌بەجێی بکە.",
        "deleting-backlinks-warning": "'''ھۆشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|پەڕەکانی تر]] بەم پەڕەیەی دەتەوێ بیسڕییەوە بەستەر دراوە.",
        "rollback": "گەڕاندنەوەی دەستکارییەکان",
-       "rollback_short": "گەڕاندنەوە",
        "rollbacklink": "گەڕاندنەوە",
        "rollbacklinkcount": "گەڕاندنەوەی $1 {{PLURAL:$1|دەستکاری}}",
        "rollbacklinkcount-morethan": "گەڕاندنەوەی زۆرتر لە $1 {{PLURAL:$1|دەستکاری}}",
        "import-error-invalid": "پەڕەی «$1» ھاوردە ناکرێ چون ناوەکەی نادروستە.",
        "importlogpage": "لۆگی ھاوردن",
        "importlogpagetext": "ھاوردنی پەڕەکان لەگەڵ مێژووی دەستکاری لە ویکییەکانی ترەوە.",
-       "import-logentry-upload": "[[$1]]ی بە بارکردنی پەڕگە ھاورد",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|پێداچوونەوە}} ھاوردە کرا",
-       "import-logentry-interwiki": "$1ی ناوویکی کرد",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|پێداچوونەوە}} لە $2 ھاوردە کرا",
        "javascripttest": "تاقیکردنەوەی جاڤاسکریپت",
        "tooltip-pt-userpage": "پەڕەی بەکارھێنەرییەکەت",
        "version-parser-function-hooks": "Parser function hooks",
        "version-hook-name": "ناوی قولاپ",
        "version-hook-subscribedby": "بەشداربوو لە لایەن",
-       "version-version": "(وەشانی $1)",
+       "version-version": "($1)",
        "version-license": "مۆڵەتنامە",
        "version-ext-colheader-version": "وەشان",
        "version-ext-colheader-description": "وەسف",
        "logentry-upload-overwrite": "$1 وەشانێکی نوێی $3ی {{GENDER:$2|بار کرد}}",
        "rightsnone": "(ھیچ)",
        "revdelete-summary": "پوختەی دەستکاری",
-       "feedback-subject": "بابەت:",
-       "feedback-message": "پەیام:",
        "feedback-cancel": "ھەڵیوەشێنەوە",
-       "feedback-submit": "تێبینییەکان بنێرە",
        "feedback-close": "کرا",
+       "feedback-message": "پەیام:",
+       "feedback-subject": "بابەت:",
+       "feedback-submit": "ناردن",
        "searchsuggest-search": "گەڕان",
        "searchsuggest-containing": "بە لەبەرگرتنەوەی ...",
        "api-error-empty-file": "ئەو پەڕگەیە کە ناردووتە واڵا بوو.",
        "mediastatistics-header-bitmap": "وێنەی Bitmap",
        "mediastatistics-header-audio": "دەنگ",
        "mediastatistics-header-video": "ڤیدیۆکان",
-       "json-error-syntax": "ھەڵەی ئیملایی"
+       "json-error-syntax": "ھەڵەی ئیملایی",
+       "special-characters-group-latin": "لاتینی",
+       "special-characters-group-latinextended": "لاتینیی پەرەپێدراو",
+       "special-characters-group-ipa": "ئای پی ئەی",
+       "special-characters-group-symbols": "ھێماکان",
+       "special-characters-group-greek": "یۆنانی",
+       "special-characters-group-cyrillic": "کیریلی",
+       "special-characters-group-arabic": "عەرەبی",
+       "special-characters-group-arabicextended": "عەرەبیی پەرەپێدراو",
+       "special-characters-group-persian": "فارسی",
+       "special-characters-group-hebrew": "عیبری",
+       "special-characters-group-bangla": "بەنگالی",
+       "special-characters-group-telugu": "تێلوگو",
+       "special-characters-group-sinhala": "سینھالا",
+       "special-characters-group-gujarati": "گوجەراتی",
+       "special-characters-group-thai": "تایلەندی",
+       "special-characters-group-khmer": "خمێری"
 }
index 0e0d207..c8828d1 100644 (file)
        "userlogin-yourpassword-ph": "Паролинъизни язынъыз",
        "createacct-yourpassword-ph": "Парольни язынъыз",
        "yourpasswordagain": "Парольни бир даа язынъыз:",
-       "createacct-yourpasswordagain": "Ð\9fаÑ\80олÑ\8cни Ñ\82аÑ\81дÑ\8bкÑ\8aланÑ\8aÑ\8bз",
+       "createacct-yourpasswordagain": "Ð\9fаÑ\80олÑ\8cни Ñ\82аÑ\81дÑ\8bкÑ\8aлав",
        "createacct-yourpasswordagain-ph": "Парольни бир даа язынъыз",
        "remembermypassword": "Киришимни бу компьютерде хатырла (энъ чокъ $1 {{PLURAL:$1|1=кунь|кунь}} ичюн)",
        "userlogin-remembermypassword": "Системада къалайым",
        "deleteotherreason": "Дигер/илявели себеп:",
        "deletereasonotherlist": "Дигер себеп",
        "rollback": "Денъиштирмелерни кери ал",
-       "rollback_short": "кери ал",
        "rollbacklink": "эски алына кетир",
        "rollbackfailed": "кери алув мувафакъиетсиз",
        "cantrollback": "Денъиштирмелер кери алынамай, саифени сонъки денъиштирген киши онынъ тек бир муэллифидир",
index 323b05f..47e30dd 100644 (file)
        "userlogin-yourpassword-ph": "Paroliñizni yazıñız",
        "createacct-yourpassword-ph": "Parolni yazıñız",
        "yourpasswordagain": "Parolni bir daa yazıñız:",
-       "createacct-yourpasswordagain": "Parolni tasdıqlañız",
+       "createacct-yourpasswordagain": "Parolni tasdıqlav",
        "createacct-yourpasswordagain-ph": "Parolni bir daa yazıñız",
        "remembermypassword": "Kirişimni bu kompyuterde hatırla (eñ çoq $1 {{PLURAL:$1|kün|kün}} içün)",
        "userlogin-remembermypassword": "Sistemada qalayım",
        "deleteotherreason": "Diger/ilâveli sebep:",
        "deletereasonotherlist": "Diger sebep",
        "rollback": "Deñiştirmelerni keri al",
-       "rollback_short": "keri al",
        "rollbacklink": "eski alına ketir",
        "rollbackfailed": "keri aluv muvafaqiyetsiz",
        "cantrollback": "Deñiştirmeler keri alınamay, saifeni soñki deñiştirgen kişi onıñ tek bir müellifidir",
index 9f9ca0b..d959c98 100644 (file)
@@ -25,7 +25,9 @@
                        "Utar",
                        "Vks",
                        "YjM",
-                       "לערי ריינהארט"
+                       "לערי ריינהארט",
+                       "Cvanca",
+                       "Macofe"
                ]
        },
        "tog-underline": "Podtrhávat odkazy:",
        "october-date": "$1. října",
        "november-date": "$1. listopadu",
        "december-date": "$1. prosince",
-       "pagecategories": "{{PLURAL:$1|Kategorie|Kategorie|Kategorie}}",
+       "pagecategories": "{{PLURAL:$1|Kategorie}}",
        "category_header": "Stránky v kategorii „$1“",
        "subcategories": "Podkategorie",
        "category-media-header": "Soubory v kategorii „$1“",
        "disclaimers": "Vyloučení odpovědnosti",
        "disclaimerpage": "Project:Vyloučení odpovědnosti",
        "edithelp": "Pomoc při editování",
+       "helppage-top-gethelp": "Nápověda",
        "mainpage": "Hlavní strana",
        "mainpage-description": "Hlavní strana",
        "policy-url": "Project:Pravidla",
        "restorelink": "{{PLURAL:$1|smazanou editaci|$1 smazané editace|$1 smazaných editací}}",
        "feedlinks": "Kanály:",
        "feed-invalid": "Neplatný typ kanálu.",
-       "feed-unavailable": "Kanály nejsou dostupné.",
+       "feed-unavailable": "Kanály nejsou dostupné",
        "site-rss-feed": "RSS kanál {{grammar:2sg|$1}}.",
        "site-atom-feed": "Atom kanál {{grammar:2sg|$1}}.",
        "page-rss-feed": "RSS kanál stránky „$1“",
        "nstab-help": "Nápověda",
        "nstab-category": "Kategorie",
        "nosuchaction": "Neznámý úkon",
-       "nosuchactiontext": "Činnost („action“) uvedená v URL je neplatná.\nZřejmě jste se při zadávání adresy překlepli nebo jste klikli na chybný odkaz.\nMůže se ale jednat také o chybu {{GRAMMAR:2sg|{{SITENAME}}}}.",
+       "nosuchactiontext": "Činnost („action“) uvedená v URL je neplatná.\nZřejmě jste se při zadávání adresy překlepli nebo jste přešli na chybný odkaz.\nMůže se ale jednat také o chybu v softwaru {{GRAMMAR:2sg|{{SITENAME}}}}.",
        "nosuchspecialpage": "Neexistující speciální stránka",
        "nospecialpagetext": "<strong>Zadali jste neplatnou speciální stránku.</strong>\n\nZkuste se podívat na [[Special:SpecialPages|seznam všech existujících speciálních stránek]].",
        "error": "Chyba",
        "databaseerror-query": "Dotaz: $1",
        "databaseerror-function": "Funkce: $1",
        "databaseerror-error": "Chyba: $1",
-       "laggedslavemode": "Upozornění: Stránka nemusí být zcela aktuální.",
+       "laggedslavemode": "<strong>Upozornění:</strong> Stránka nemusí být aktuální.",
        "readonly": "Databáze je uzamčena",
-       "enterlockreason": "Udejte důvod zamčení, včetně odhadu, za jak dlouho dojde k odemčení.",
+       "enterlockreason": "Udejte důvod zamčení, včetně odhadu, za jak dlouho dojde k odemčení",
        "readonlytext": "Databáze je nyní uzamčena, takže nelze ukládat nové doplňky a změny. Důvodem je pravděpodobně pravidelná údržba, po které se vše vrátí do normálního stavu.\n\nSprávce serveru, který databázi zamkl, poskytl toto zdůvodnění: $1",
-       "missing-article": "V databázi nebyl nalezen požadovaný text stránky „$1“ $2.\n\nToto je obvykle způsobeno tím, že jste následovali zastaralý odkaz na rozdíl verzí nebo historickou verzi stránky, jež byla smazána.\n\nNení-li toto váš případ, možná jste nalezli chybu v softwaru. Prosíme, ohlaste to [[Special:ListUsers/sysop|správcům]] spolu s URL této stránky.",
+       "missing-article": "V databázi nebyl nalezen požadovaný text stránky „$1“ $2.\n\nToto je obvykle způsobeno tím, že jste následovali zastaralý odkaz na rozdíl verzí nebo historickou verzi stránky, jež byla smazána.\n\nNení-li toto váš případ, možná jste nalezli chybu v softwaru.\nProsíme, ohlaste to [[Special:ListUsers/sysop|správcům]] spolu s URL této stránky.",
        "missingarticle-rev": "(číslo revize: $1)",
        "missingarticle-diff": "(Rozdíl: $1, $2)",
        "readonly_lag": "Databáze byla automaticky dočasně uzamčena kvůli zpoždění ostatních databázových serverů oproti hlavnímu",
        "internalerror": "Vnitřní chyba",
        "internalerror_info": "Vnitřní chyba: $1",
+       "internalerror-fatal-exception": "Kritická výjimka typu „$1“",
        "filecopyerror": "Nebylo možné zkopírovat soubor  „$1“ na „$2“.",
        "filerenameerror": "Nebylo možné přejmenovat soubor „$1“ na „$2“.",
        "filedeleteerror": "Nebylo možné smazat soubor „$1“.",
        "viewsource": "Zobrazit zdroj",
        "viewsource-title": "Zobrazení zdroje stránky $1",
        "actionthrottled": "Akce byla pozastavena",
-       "actionthrottledtext": "Vzhledem k protispamovým opatřením nemůžete požadovanou akci provádět příliš častokrát v krátké době. Zkuste to znovu za několik minut.",
+       "actionthrottledtext": "Vzhledem k protispamovým opatřením nemůžete požadovanou akci provádět příliš častokrát v krátké době.\nZkuste to znovu za několik minut.",
        "protectedpagetext": "Tato stránka byla zamčena, aby se předešlo jejímu editování.",
        "viewsourcetext": "Můžete si prohlédnout a zkopírovat zdrojový kód této stránky:",
-       "viewyourtext": "Můžete si prohlédnout a zkopírovat zdrojový kód '''vašich změn''' této stránky:",
+       "viewyourtext": "Můžete si prohlédnout a zkopírovat zdrojový kód <strong>vašich změn</strong> této stránky:",
        "protectedinterface": "Tato stránka obsahuje text softwarového rozhraní a je zamčena kvůli prevenci zneužití.\nPro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
        "editinginterface": "<strong>Upozornění:</strong> Editujete stránku, která definuje texty rozhraní.\nZměny této stránky ovlivní vzhled uživatelského rozhraní všem uživatelům této wiki.",
        "translateinterface": "Pro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
        "myprivateinfoprotected": "Nemáte oprávnění měnit své soukromé údaje.",
        "mypreferencesprotected": "Nemáte oprávnění změnit svá nastavení.",
        "ns-specialprotected": "Stránky ve jmenném prostoru {{ns:special}} nelze editovat.",
-       "titleprotected": "Stránku s tímto názvem nelze založit, protože název zamknul uživatel [[User:$1|$1]] s odůvodněním: ''$2''.",
-       "filereadonlyerror": "Nelze změnit soubor „$1“, protože úložiště souborů „$2“ je momentálně pouze pro čtení.\n\nSprávce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „''$3''“.",
+       "titleprotected": "Stránku s tímto názvem nelze založit, protože název zamknul uživatel [[User:$1|$1]] s odůvodněním <em>$2</em>.",
+       "filereadonlyerror": "Nelze změnit soubor „$1“, protože úložiště souborů „$2“ je pouze pro čtení.\n\nSprávce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „$3“.",
        "invalidtitle-knownnamespace": "Neplatný název se jmenným prostorem „$2“ a textem „$3“",
        "invalidtitle-unknownnamespace": "Neplatný název s neznámým číslem jmenného prostoru $1 a textem „$2“",
        "exception-nologin": "Nejste přihlášen(a)",
        "virus-badscanner": "Špatná konfigurace: neznámý antivirový program: ''$1''",
        "virus-scanfailed": "prověřování selhalo (kód $1)",
        "virus-unknownscanner": "neznámý antivirus:",
-       "logouttext": "'''Nyní jste odhlášeni.'''\n\nUvědomte si, že některé stránky se mohou i nadále zobrazovat, jako byste byli dosud přihlášeni, dokud nevymažete cache prohlížeče.",
+       "logouttext": "<strong>Nyní jste odhlášeni.</strong>\n\nNěkteré stránky se mohou i nadále zobrazovat, jako byste byli dosud přihlášeni, dokud nevymažete cache prohlížeče.",
        "welcomeuser": "Vítejte, uživateli $1!",
        "welcomecreation-msg": "Váš účet byl vytvořen.\nNezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SITENAME}}}}]].",
        "yourname": "Uživatelské jméno:",
        "nologin": "Dosud nemáte účet? $1.",
        "nologinlink": "Zaregistrujte se",
        "createaccount": "Vytvořit účet",
-       "gotaccount": "Už jste registrováni? '''$1'''.",
+       "gotaccount": "Už jste registrováni? $1.",
        "gotaccountlink": "Přihlaste se",
        "userlogin-resetlink": "Zapomněli jste přihlašovací údaje?",
        "userlogin-resetpassword-link": "Zapomněli jste heslo?",
        "nocookiesfornew": "Uživatelský účet nebyl založen, neboť jsme nebyli schopni potvrdit jeho původ.\nUjistěte se, že máte povoleny cookies, obnovte tuto stránku a zkuste to znovu.",
        "noname": "{{GENDER:|Nezadal|Nezadala|Nezadali}} jste platné uživatelské jméno.",
        "loginsuccesstitle": "Přihlášení bylo úspěšné",
-       "loginsuccess": "Nyní jste přihlášen na {{grammar:6sg|{{SITENAME}}}} jako uživatel „$1“.",
+       "loginsuccess": "<strong>Nyní jste na {{grammar:6sg|{{SITENAME}}}} {{GENDER:$1|přihlášen jako uživatel|přihlášena jako uživatelka}} „$1“.</strong>",
        "nosuchuser": "Neexistuje uživatel se jménem „$1“. U uživatelských jmen se rozlišují malá/velká písmena. Zkontrolujte zápis, nebo si [[Special:UserLogin/signup|vytvořte nový účet]].",
        "nosuchusershort": "Neexistuje uživatel se jménem „$1“. Zkontrolujte zápis.",
        "nouserspecified": "Musíte zadat uživatelské jméno.",
        "wrongpassword": "Bylo zadáno nesprávné heslo.\nZkuste to znovu.",
        "wrongpasswordempty": "Bylo zadáno prázdné heslo. Zkuste to znovu.",
        "passwordtooshort": "Heslo musí být dlouhé nejméně $1 {{PLURAL:$1|znak|znaky|znaků}}.",
+       "passwordtoolong": "Hesla nemohou být delší než {{PLURAL:$1|1 znak|$1 znaky|$1 znaků}}.",
        "password-name-match": "Vaše heslo nesmí být stejné jako uživatelské jméno.",
        "password-login-forbidden": "Použití tohoto uživatelského jména a hesla bylo zakázáno.",
        "mailmypassword": "Poslat nové heslo",
        "eauthentsent": "Na zadanou adresu byl zaslán potvrzovací e-mail.\nŽádné další zprávy vám však na tuto adresu nebudou odeslány, dokud podle instrukcí v e-mailu nepotvrdíte, že tato adresa skutečně patří vám.",
        "throttled-mailpassword": "Během {{PLURAL:$1|poslední hodiny|posledních $1 hodin}} již bylo heslo jednou zasláno.\nKvůli prevenci zneužívání lze heslo zaslat jen jednou za $1 {{PLURAL:$1|hodinu|hodiny|hodin}}.",
        "mailerror": "Chyba při zasílání e-mailu: $1",
-       "acct_creation_throttle_hit": "Uživatelé používající vaši IP adresu už dnes vytvořili $1 {{PLURAL:$1|účet|účty|účtů}}, což je dovolené maximum. Proto není v tuto chvíli dovoleno z této IP adresy zakládat další účty.",
+       "acct_creation_throttle_hit": "Uživatelé používající vaši IP adresu už dnes vytvořili $1 {{PLURAL:$1|účet|účty|účtů}}, což je dovolené maximum.\nProto není v tuto chvíli dovoleno z této IP adresy zakládat další účty.",
        "emailauthenticated": "Vaše e-mailová adresa byla ověřena $2 v $3.",
        "emailnotauthenticated": "Vaše e-mailová adresa dosud nebyla ověřena.\nU následujících funkcí nebudou zasílány žádné e-maily.",
        "noemailprefs": "Pro zprovoznění následujících možností musíte zadat svou e-mailovou adresu.",
        "resetpass-submit-cancel": "Storno",
        "resetpass-wrong-oldpass": "Nesprávné dočasné nebo aktuální heslo.\nMožná jste si již úspěšně heslo změnili, nebo jste si vyžádali nové dočasné heslo.",
        "resetpass-recycled": "Jako nové heslo si prosím nastavte něco jiného než stávající heslo.",
-       "resetpass-temp-emailed": "Přihlašujete se dočasným heslem, zaslaným e-mailem.\nAbyste dokončili přihlášení, nastavte si zde nové heslo:",
+       "resetpass-temp-emailed": "Přihlašujete se pomocí dočasného hesla, které bylo zasláno e-mailem.\nAbyste dokončili přihlášení, nastavte si nové heslo:",
        "resetpass-temp-password": "Dočasné heslo:",
        "resetpass-abort-generic": "Změna hesla byla zablokována rozšířením.",
        "resetpass-expired": "Platnost vašeho hesla vypršela. Pro přihlášení si nastavte nové heslo.",
        "passwordreset-capture-help": "Pokud zaškrtnete toto políčko, bude e-mail (s dočasným heslem) kromě zaslání uživateli zobrazen i vám.",
        "passwordreset-email": "E-mailová adresa:",
        "passwordreset-emailtitle": "Informace k účtu na {{grammar:6sg|{{SITENAME}}}}",
-       "passwordreset-emailtext-ip": "Někdo (patrně vy, z IP adresy $1) zažádal na {{grammar:6sg|{{SITENAME}}}} ($4) o nastavení nového hesla k vašemu účtu. K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:\n\n$2\n\n{{PLURAL:$3|Toto dočasné heslo|Tato dočasná hesla}} vyprší {{PLURAL:$5|za jeden den|za $5 dny|za $5 dnů}}.\nNyní byste se měl(a) přihlásit a zvolit si nové heslo. Pokud tento požadavek\nposlal někdo jiný nebo jste si na své staré heslo vzpomněl(a), a nechcete ho\ntedy změnit, můžete tuto zprávu ignorovat a nadále používat původní heslo.",
+       "passwordreset-emailtext-ip": "Někdo (patrně vy, z IP adresy $1) zažádal na {{grammar:6sg|{{SITENAME}}}} ($4) o nastavení nového hesla k vašemu účtu. K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:\n\n$2\n\n{{PLURAL:$3|Toto dočasné heslo|Tato dočasná hesla}} vyprší za {{PLURAL:$5|jeden den|$5 dny|$5 dnů}}.\nNyní byste se měli přihlásit a zvolit si nové heslo. Pokud tento požadavek poslal někdo jiný nebo jste si na své staré heslo vzpomněli, a nechcete ho tedy změnit, můžete tuto zprávu ignorovat a nadále používat původní heslo.",
        "passwordreset-emailtext-user": "{{gender:$1|Uživatel|Uživatelka}} $1 na {{grammar:6sg|{{SITENAME}}}} {{gender:$1|zažádal|zažádala}} na {{grammar:6sg|{{SITENAME}}}} ($4) o nastavení nového hesla k vašemu\núčtu. K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:\n\n$2\n\n{{PLURAL:$3|Toto dočasné heslo|Tato dočasná hesla}} vyprší {{PLURAL:$5|za jeden den|za $5 dny|za $5 dnů}}.\nNyní byste se měl(a) přihlásit a zvolit si nové heslo. Pokud tento požadavek\nposlal někdo jiný nebo jste si na své staré heslo vzpomněl(a), a nechcete ho\ntedy změnit, můžete tuto zprávu ignorovat a nadále používat původní heslo.",
        "passwordreset-emailelement": "Uživatelské jméno: $1\nDočasné heslo: $2",
        "passwordreset-emailsent": "E-mail pro získání nového hesla byl odeslán.",
        "showpreview": "Ukázat náhled",
        "showdiff": "Ukázat změny",
        "blankarticle": "<strong>Upozornění:</strong> Stránka, kterou se chystáte založit, je prázdná. Pokud ještě jednou kliknete na „{{int:savearticle}}“, bude založena zcela bez obsahu.",
-       "anoneditwarning": "'''Varování:''' Nejste přihlášen(a). Pokud uložíte jakoukoli editaci, bude vaše IP adresa zveřejněna v historii této stránky. Pokud se <strong>[$1 přihlásíte]</strong> nebo si <strong>[$2 vytvoříte účet]</strong>, budou vaše editace připsány vašemu uživatelskému jménu a získáte i další výhody.",
-       "anonpreviewwarning": "''Nejste přihlášen(a). Uložením zveřejníte svou IP adresu v historii této stránky.''",
-       "missingsummary": "'''Připomenutí:''' Nezadali jste shrnutí editace. Pokud ještě jednou kliknete na Uložit změny, bude vaše editace zapsána bez shrnutí.",
-       "selfredirect": "<strong>Upozornění:</strong> Pokušíte se tuto stránku přesměrovat samu na sebe.\nMožná jste uvedli chybný cíl přesměrování nebo editujete špatnou stránku.\nPokud ještě jednou kliknete na „{{int:savearticle}}“, bude přesměrování přesto vytvořeno.",
+       "anoneditwarning": "<strong>Varování:</strong> Nejste přihlášen(a). Pokud uložíte jakoukoli editaci, bude vaše IP adresa zveřejněna v historii této stránky. Pokud se <strong>[$1 přihlásíte]</strong> nebo si <strong>[$2 vytvoříte účet]</strong>, budou vaše editace připsány vašemu uživatelskému jménu a získáte i další výhody.",
+       "anonpreviewwarning": "<em>Nejste přihlášen(a). Uložením zveřejníte svou IP adresu v historii této stránky.</em>",
+       "missingsummary": "<strong>Připomenutí:</strong> Nezadali jste shrnutí editace. Pokud ještě jednou kliknete na „{{int:savearticle}}“, bude vaše editace zapsána bez shrnutí.",
+       "selfredirect": "<strong>Upozornění:</strong> Pokoušíte se tuto stránku přesměrovat na sebe samu.\nMožná jste zadali chybný cíl přesměrování, nebo editujete špatnou stránku.\nPokud ještě jednou kliknete na „{{int:savearticle}}“, bude i přesto přesměrování vytvořeno.",
        "missingcommenttext": "Zadejte komentář",
-       "missingcommentheader": "'''Připomenutí:''' Nezadali jste předmět/nadpis pro tento komentář.\nPokud ještě jednou kliknete na „{{int:savearticle}}“, bude vaše editace zapsána i bez toho.",
+       "missingcommentheader": "<strong>Připomenutí:</strong> Nezadali jste předmět/nadpis pro tento komentář.\nPokud ještě jednou kliknete na „{{int:savearticle}}“, bude vaše editace uložena bez něj.",
        "summary-preview": "Náhled shrnutí:",
        "subject-preview": "Náhled předmětu/nadpisu:",
+       "previewerrortext": "Při pokusu o zobrazení náhledu vašich změn došlo k chybě.",
        "blockedtitle": "Uživatel zablokován",
-       "blockedtext": "'''Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.'''\n\nZablokování provedl{{GENDER:$4||a}} $1.\nUdaným důvodem bylo ''$2''.\n\n* Začátek blokování: $8\n* Zablokování vyprší: $6\n* Blokovaný uživatel: $7\n\nPokud chcete zablokování prodiskutovat, můžete kontaktovat {{GENDER:$4|uživatele|uživatelku}} $1 či jiného [[{{MediaWiki:Grouppage-sysop}}|správce]].\nUvědomte si, že nemůžete použít nabídku „Poslat e-mail“, jestliže nemáte ve svém [[Special:Preferences|nastavení]] uvedenu platnou e-mailovou adresu nebo pokud vám byla tato možnost zakázána.\nVaše IP adresa je $3 a&nbsp;identifikační číslo bloku je #$5; tyto údaje uvádějte ve všech dotazech na správce.",
-       "autoblockedtext": "Vaše IP adresa byla automaticky zablokována, protože ji používal jiný uživatel, kterého zablokoval $1.\nUdaný důvod blokování:\n\n:''$2''\n\n* Začátek blokování: $8\n* Konec blokování: $6\n* Původně blokovaný uživatel: $7\n\nZablokování můžete prodiskutovat se správcem $1 nebo některým z dalších [[{{MediaWiki:Grouppage-sysop}}|správců]].\n\nUvědomte si však, že funkci „Poslat e-mail tomuto uživateli“ nemůžete použít, pokud nemáte ve svém [[Special:Preferences|nastavení]] zadaný platný e-mail a nebylo vám zablokováno jeho užívání.\n\nVaše současná IP adresa je $3, číslo vašeho zablokování je #$5.\nProsíme, uveďte tyto údaje při komunikaci se správci.",
+       "blockedtext": "<strong>Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.<strong>\n\nZablokování provedl{{GENDER:$4||a}} $1.\nUdaným důvodem bylo <em>$2</em>.\n\n* Začátek blokování: $8\n* Zablokování vyprší: $6\n* Blokovaný uživatel: $7\n\nPokud chcete zablokování prodiskutovat, můžete kontaktovat {{GENDER:$4|uživatele|uživatelku}} $1 či jiného [[{{MediaWiki:Grouppage-sysop}}|správce]].\nUvědomte si, že nemůžete použít nabídku „Poslat e-mail“, jestliže nemáte ve svém [[Special:Preferences|nastavení]] uvedenu platnou e-mailovou adresu nebo pokud vám byla tato možnost zakázána.\nVaše IP adresa je $3 a&nbsp;identifikační číslo bloku je #$5; tyto údaje uvádějte ve všech dotazech na správce.",
+       "autoblockedtext": "Vaše IP adresa byla automaticky zablokována, protože ji používal jiný uživatel, kterého zablokoval $1.\nUdaný důvod blokování:\n\n:<em>$2</em>\n\n* Začátek blokování: $8\n* Konec blokování: $6\n* Původně blokovaný uživatel: $7\n\nZablokování můžete prodiskutovat se správcem $1 nebo některým z dalších [[{{MediaWiki:Grouppage-sysop}}|správců]].\n\nUvědomte si však, že funkci „Poslat e-mail tomuto uživateli“ nemůžete použít, pokud nemáte ve svém [[Special:Preferences|uživatelském nastavení]] zadaný platný e-mail a nebylo vám zablokováno jeho užívání.\n\nVaše současná IP adresa je $3, číslo vašeho zablokování je #$5.\nProsíme, uveďte tyto údaje při komunikaci se správci.",
        "blockednoreason": "důvod nebyl zadán",
        "whitelistedittext": "Pro editaci se musíte $1.",
-       "confirmedittext": "Pro editaci stránek je vyžadováno potvrzení vaší e-mailové adresy. Na stránce [[Special:Preferences|nastavení]] zadejte a nechte potvrdit svou e-mailovou adresu.",
+       "confirmedittext": "Pro editaci stránek je vyžadováno potvrzení vaší e-mailové adresy.\nNa stránce [[Special:Preferences|nastavení]] zadejte a nechte potvrdit svou e-mailovou adresu.",
        "nosuchsectiontitle": "Sekce nenalezena",
        "nosuchsectiontext": "Pokoušíte se editovat neexistující sekci.\nMožná byla přesunuta či smazána, zatímco jste si stránku {{GENDER:|prohlížel|prohlížela|prohlíželi}}.",
        "loginreqtitle": "Vyžadováno přihlášení",
        "loginreqlink": "přihlásit",
        "loginreqpagetext": "K prohlížení jiných stránek se musíte $1.",
-       "accmailtitle": "Heslo odesláno.",
+       "accmailtitle": "Heslo odesláno",
        "accmailtext": "Náhodně vygenerované heslo pro uživatele [[User talk:$1|$1]] bylo odesláno na $2. Po přihlášení ho bude možno změnit na [[Special:ChangePassword|stránce pro změnu hesla]].",
        "newarticle": "(Nový)",
        "newarticletext": "Následovali jste odkaz na stránku, která dosud neexistuje.\nPokud ji chcete vytvořit, začněte psát do rámečku níže (více informací najdete v [$1 nápovědě]).\nPokud jste zde omylem, stiskněte ve svém prohlížeči tlačítko <strong>Zpět</strong>.",
-       "anontalkpagetext": "----''Toto je diskusní stránka anonymního uživatele, který si dosud nevytvořil účet nebo ho nepoužívá. K&nbsp;jeho identifikaci proto musíme používat číselnou IP adresu. Takovou IP adresu může sdílet několik uživatelů. Pokud jste anonymní uživatel a&nbsp;máte za to, že jsou vám adresovány irelevantní komentáře, prosíme, [[Special:UserLogin/signup|vytvořte si účet]] nebo [[Special:UserLogin|se přihlaste]], vyhnete se tím budoucí záměně s&nbsp;jinými anonymními uživateli.''",
+       "anontalkpagetext": "----\n<em>Toto je diskusní stránka anonymního uživatele, který si dosud nevytvořil účet nebo ho nepoužívá.</em>\nK&nbsp;jeho identifikaci proto musíme používat číselnou IP adresu. Takovou IP adresu může sdílet několik uživatelů. Pokud jste anonymní uživatel a&nbsp;máte za to, že jsou vám adresovány irelevantní komentáře, prosíme, [[Special:UserLogin/signup|vytvořte si účet]] nebo [[Special:UserLogin|se přihlaste]], vyhnete se tím budoucí záměně s&nbsp;jinými anonymními uživateli.",
        "noarticletext": "Tato stránka zatím neobsahuje žádný text.\nMůžete [[Special:Search/{{PAGENAME}}|zkusit tento název vyhledat]] na jiných stránkách, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} prohlédnout si příslušné protokolovací záznamy] nebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} tuto stránku založit]</span>.",
        "noarticletext-nopermission": "Tato stránka zatím neobsahuje žádný text.\nMůžete [[Special:Search/{{PAGENAME}}|zkusit tento název vyhledat]] na jiných stránkách nebo <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} si prohlédnout příslušné protokolovací záznamy]</span>, ale na založení této stránky nemáte oprávnění.",
        "missing-revision": "Revize #$1 stránky s názvem „{{FULLPAGENAME}}“ neexistuje.\n\nToto je obvykle způsobeno tím, že jste následovali zastaralý odkaz na historickou verzi stránky, jež byla smazána.\nPodrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} knize smazaných stránek].",
-       "userpage-userdoesnotexist": "Uživatelský účet „<nowiki>$1</nowiki>“ není zaregistrován. Zkontrolujte, zda skutečně chcete vytvořit či editovat tuto stránku.",
+       "userpage-userdoesnotexist": "Uživatelský účet „$1“ není zaregistrován.\nZkontrolujte, zda skutečně chcete tuto stránku vytvořit či editovat.",
        "userpage-userdoesnotexist-view": "Uživatelský účet „$1“ není zaregistrován.",
        "blocked-notice-logextract": "Tento uživatel je momentálně zablokován.\nZde je pro přehled zobrazen nejnovější záznam z knihy zablokování:",
-       "clearyourcache": "'''Poznámka:''' Po uložení musíte smazat cache vašeho prohlížeče, jinak změny neuvidíte.\n* '''Firefox / Safari:''' Při kliknutí na ''Aktualizovat'' držte ''Shift'' nebo stiskněte ''Ctrl-F5'' nebo ''Ctrl-R'' (na Macu ''⌘-R'').\n* '''Google Chrome:''' Stiskněte ''Ctrl-Shift-R'' (na Macu ''⌘-Shift-R'').\n* '''Internet Explorer:''' Při kliknutí na ''Aktualizovat'' držte ''Ctrl'' nebo stiskněte ''Ctrl-F5''.\n* '''Opera:''' Smažte obsah cache v menu ''Nástroje → Nastavení''.",
-       "usercssyoucanpreview": "'''Tip:''' Použijte tlačítko „{{int:showpreview}}“ k testování vašeho nového CSS před uložením.",
-       "userjsyoucanpreview": "'''Tip:''' Použijte tlačítko „{{int:showpreview}}“ k testování vašeho nového JavaScriptu před uložením.",
-       "usercsspreview": "'''Pamatujte, že si prohlížíte jen náhled vašeho uživatelského CSS.'''\n'''Zatím nebylo uloženo!'''",
-       "userjspreview": "'''Pamatujte, že testujete a prohlížíte pouze náhled vašeho uživatelského JavaScriptu, dosud nebyl uložen!'''",
-       "sitecsspreview": "'''Pamatujte, že si prohlížíte jen náhled tohoto CSS.'''\n'''Zatím nebylo uloženo!'''",
-       "sitejspreview": "'''Pamatujte, že testujete a prohlížíte pouze náhled tohoto JavaScriptu.'''\n'''Dosud nebyl uložen!'''",
-       "userinvalidcssjstitle": "'''Varování:''' Vzhled „$1“ neexistuje. Nezapomeňte, že uživatelské .css a .js soubory používají malá písmena, např. {{ns:user}}:{{BASEPAGENAME}}/vector.css, nikoli {{ns:user}}:{{BASEPAGENAME}}/Vector.css.",
+       "clearyourcache": "<strong>Poznámka:</strong> Po uložení musíte smazat cache vašeho prohlížeče, jinak změny neuvidíte.\n* <strong>Firefox / Safari:</strong> Při kliknutí na <em>Aktualizovat</em> držte <em>Shift</em> nebo stiskněte <em>Ctrl-F5</em> nebo <em>Ctrl-R</em> (na Macu <em>⌘-R</em>)\n* <strong>Google Chrome:</strong> Stiskněte <em>Ctrl-Shift-R</em> (na Macu <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer:</strong> Při kliknutí na <em>Aktualizovat</em> držte <em>Ctrl</em> nebo stiskněte <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Smažte obsah cache v menu <em>Nástroje → Nastavení</em>",
+       "usercssyoucanpreview": "<strong>Tip:</strong> Použijte tlačítko „{{int:showpreview}}“ k testování vašeho nového CSS před uložením.",
+       "userjsyoucanpreview": "<strong>Tip:</strong> Použijte tlačítko „{{int:showpreview}}“ k testování vašeho nového JavaScriptu před uložením.",
+       "usercsspreview": "<strong>Pamatujte, že si prohlížíte jen náhled vašeho uživatelského CSS, jelikož dosud nebyl uložen!</strong>",
+       "userjspreview": "<strong>Pamatujte, že testujete a prohlížíte pouze náhled vašeho uživatelského JavaScriptu, jelikož dosud nebyl uložen!</strong>'",
+       "sitecsspreview": "<strong>Pamatujte, že si prohlížíte jen náhled tohoto CSS, jelikož dosud nebylo uloženo!</strong>",
+       "sitejspreview": "<strong>Pamatujte, že testujete a prohlížíte pouze náhled tohoto JavaScriptu, jelikož dosud nebyl uložen!</strong>",
+       "userinvalidcssjstitle": "<strong>Varování:</strong> Vzhled „$1“ neexistuje. Nezapomeňte, že uživatelské .css a .js soubory používají malá písmena, např. {{ns:user}}:{{BASEPAGENAME}}/vector.css, nikoli {{ns:user}}:{{BASEPAGENAME}}/Vector.css.",
        "updated": "(Změna uložena)",
-       "note": "'''Poznámka:'''&nbsp;",
-       "previewnote": "'''Pamatujte, že toto je pouze náhled.'''\nZměny zatím nebyly uloženy!",
+       "note": "<strong>Poznámka:</strong>",
+       "previewnote": "<strong>Pamatujte, že toto je pouze náhled.</strong>\nZměny dosud nebyly uloženy!",
        "continue-editing": "Přejít k editačnímu poli",
        "previewconflict": "Tento náhled ukazuje text tak, jak bude vypadat po uložení stránky.",
-       "session_fail_preview": "'''Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.\nZkuste to prosím znovu.\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.'''",
-       "session_fail_preview_html": "'''Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.'''\n\n''Jelikož má {{SITENAME}} zapnuto používání neomezeného HTML, náhled se kvůli prevenci proti útokům JavaScriptem nezobrazuje.''\n\n'''Pokud jde o zamýšlenou editaci, zkuste to prosím znovu. Pokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.'''",
-       "token_suffix_mismatch": "'''Vaše editace byla odmítnuta, protože Váš prohlížeč komolí některé znaky v editovaném textu.\nEditace byla odmítnuta, aby se zabránilo poškození textu stránky.\nToto se někdy může někdy stát, používáte-li chybující webový anonymizér.'''",
-       "edit_form_incomplete": "'''Část editačního formuláře nedorazila na server; překontrolujte úplnost změn a zkuste to znovu.'''",
+       "session_fail_preview": "<strong>Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.</strong>\nZkuste to prosím znovu.\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.",
+       "session_fail_preview_html": "<strong>Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.</strong>\n\n<em>Jelikož má {{SITENAME}} zapnuto používání neomezeného HTML, náhled se kvůli prevenci proti útokům JavaScriptem nezobrazuje.</em>\n\n<strong>Pokud jde o zamýšlenou editaci, zkuste to prosím znovu.</strong>\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.",
+       "token_suffix_mismatch": "<strong>Vaše editace byla odmítnuta, protože Váš prohlížeč komolí některé znaky v editovaném textu.</strong>\nEditace byla odmítnuta, aby se zabránilo poškození textu stránky.\nToto se někdy může stát, používáte-li chybující webový anonymizér.",
+       "edit_form_incomplete": "<strong>Část editačního formuláře nedorazila na server; překontrolujte úplnost změn a zkuste to znovu.</strong>",
        "editing": "Editace stránky $1",
        "creating": "Vytváření $1",
        "editingsection": "Editace stránky $1 (část)",
        "editingcomment": "Editace stránky $1 (nová sekce)",
        "editconflict": "Editační konflikt: $1",
-       "explainconflict": "Někdo změnil stránku po započetí vaší editace.\nVýše vidíte aktuální text stránky.\nVaše změny jsou uvedeny dole.\nMusíte sloučit své změny se stávajícím textem.\n'''Pouze''' výše uvedený text zůstane uchován po kliknutí na „{{int:savearticle}}“.",
+       "explainconflict": "Někdo změnil stránku po započetí vaší editace.\nVýše vidíte aktuální text stránky.\nVaše změny jsou uvedeny dole.\nMusíte sloučit své změny se stávajícím textem.\n<strong>Pouze</strong> výše uvedený text zůstane uchován po kliknutí na „{{int:savearticle}}“.",
        "yourtext": "Váš text",
        "storedversion": "Uložená verze",
-       "nonunicodebrowser": "'''UPOZORNĚNÍ: Váš prohlížeč není schopen pracovat se znaky Unicode. Abyste mohli tuto stránku bezpečně editovat, je použita pomůcka: všechny znaky mimo ASCII jsou zobrazeny v hexadecimálních kódech.'''",
+       "nonunicodebrowser": "<strong>UPOZORNĚNÍ: Váš prohlížeč není schopen pracovat se znaky Unicode.</strong>\nAbyste mohli tuto stránku bezpečně editovat, je použita pomůcka: všechny znaky mimo ASCII jsou v editačním poli zobrazeny v hexadecimálních kódech.",
        "editingold": "'''VAROVÁNÍ: Nyní editujete zastaralou verzi této stránky. Když ji uložíte, všechny pozdější změny se ztratí.'''",
        "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Í!'''",
        "notextmatches": "Žádná stránka s tímto textem nebyla nalezena",
        "prevn": "$1 {{PLURAL:$1|předchozí|předchozí|předchozích}}",
        "nextn": "$1 {{PLURAL:$1|následující|následující|následujících}}",
+       "prev-page": "předchozí stránka",
+       "next-page": "další stránka",
        "prevn-title": "{{PLURAL:$1|Předchozí výsledek|Předchozí $1 výsledky|Předchozích $1 výsledků}}",
        "nextn-title": "{{PLURAL:$1|Následující výsledek|Následující $1 výsledky|Následujících $1 výsledků}}",
        "shown-title": "Zobrazit $1 {{PLURAL:$1|výsledek|výsledky|výsledků}} na stránku",
        "unusedimages": "Nepoužívané soubory",
        "wantedcategories": "Chybějící kategorie",
        "wantedpages": "Chybějící stránky",
+       "wantedpages-summary": "Seznam neexistujících stránek, na které vede nejvíce odkazů, kromě stránek, na které odkazují jen přesměrování. Pro seznam neexistujících stránek, na které odkazují přesměrování, vizte stránku [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Výsledky obsahují neplatný název: $1",
        "wantedfiles": "Chybějící soubory",
        "wantedfiletext-cat": "Následující soubory se používají, ale neexistují. Soubory ze vzdálených úložišť zde mohou být uvedeny, přestože existují. Taková falešná pozitiva budou zobrazena <del>přeškrtnutě</del>. Stránky, které vkládají neexistující soubory, jsou navíc uvedeny v [[:$1]].",
        "emailccsubject": "Kopie Vaší zprávy pro uživatele $1: $2",
        "emailsent": "E-mail odeslán",
        "emailsenttext": "Váš e-mail byl odeslán.",
-       "emailuserfooter": "Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „Poslat e-mail“; odeslal ho uživatel $1 uživateli $2",
+       "emailuserfooter": "Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „{{int:emailpage}}“; {{GENDER:$1|odeslal ho uživatel|odeslala ho uživatelka}} $1 {{GENDER:$2|uživateli|uživatelce}} $2.",
        "usermessage-summary": "Doručena zpráva od systému.",
        "usermessage-editor": "Systémový poslíček",
        "watchlist": "Sledované stránky",
        "thumbnail_image-missing": "Soubor patrně chybí: $1",
        "thumbnail_image-failure-limit": "V poslední době došlo k příliš mnoha neúspěšným pokusům (nejméně $1) o vytvoření tohoto náhledu. Zkuste to později.",
        "import": "Import stránek",
-       "importinterwiki": "Import mezi wiki",
-       "import-interwiki-text": "Pro import zvolte zdrojovou wiki a název stránky. Data revizí a jména autorů budou zachována. Všechny importy se zaznamenávají do [[Special:Log/import|knihy importů]].",
+       "importinterwiki": "Import z jiné wiki",
+       "import-interwiki-text": "Zvolte zdrojovou wiki a název stránky, která se má importovat.\nZachovají se data revizí a jména autorů.\nVšechny importy z jiných wiki se zaznamenávají do [[Special:Log/import|knihy importů]].",
        "import-interwiki-sourcewiki": "Zdrojová wiki:",
        "import-interwiki-sourcepage": "Zdrojová stránka:",
        "import-interwiki-history": "Zkopírovat všechny historické verze této stránky",
        "importcantopen": "Nepodařilo se otevřít importní soubor",
        "importbadinterwiki": "Neplatný interwiki odkaz",
        "importsuccess": "Import skončil!",
-       "importnosources": "Nebyly definovány žádné zdroje pro import mezi wiki a přímé načítání historie je vypnuto.",
+       "importnosources": "Nebyly definovány žádné wiki, ze kterých by šlo importovat, a přímé načítání historie je vypnuto.",
        "importnofile": "Nebyl načten importní soubor.",
        "importuploaderrorsize": "Nepodařilo se načíst importní soubor. Soubor je větší než povolená velikost.",
        "importuploaderrorpartial": "Nepodařilo se načíst importní soubor. Soubor byl načten jen částečně.",
        "import-rootpage-nosubpage": "Ve jmenném prostoru „$1“ kořenové stránky nejsou dovoleny podstránky.",
        "importlogpage": "Kniha importů",
        "importlogpagetext": "Na této stránce se zobrazují správcovské importy stránek včetně historie editací z jiných wiki.",
-       "import-logentry-upload": "naimportoval [[$1]] načtením souboru",
        "import-logentry-upload-detail": "{{PLURAL:$1|naimportována $1 revize|naimportovány $1 revize|naimportováno $1 revizí}}",
-       "import-logentry-interwiki": "přenesl $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|naimportována $1 revize|naimportovány $1 revize|naimportováno $1 revizí}} z $2",
        "javascripttest": "Testování JavaScriptu",
        "javascripttest-pagetext-noframework": "Tato stránka je vyhrazena pro spouštění testů JavaScriptu.",
        "revdelete-uname-unhid": "odkryto uživatelské jméno",
        "revdelete-restricted": "omezení správců použito",
        "revdelete-unrestricted": "omezení správců odstraněno",
+       "logentry-block-block": "$1 {{GENDER:$2|zablokoval|zablokovala|blokuje}} {{GENDER:$4|uživatele|uživatelku}} „$3“ s časem vypršení $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|odblokoval|odblokovala|odblokovává}} {{GENDER:$4|uživatele|uživatelku}} „$3“",
+       "logentry-block-reblock": "$1 {{GENDER:$2|změnil|změnila|mění}} nastavení bloku {{GENDER:$4|uživatele|uživatelky}} „$3“ s časem vypršení $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|zablokoval|zablokovala|blokuje}} {{GENDER:$4|uživatele|uživatelku}} „$3“ s časem vypršení $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|změnil|změnila|mění}} nastavení bloku {{GENDER:$4|uživatele|uživatelky}} „$3“ s časem vypršení $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|naimportoval|naimportovala}} $3 načtením souboru",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|naimportoval|naimportovala}} $3 z jiné wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|sloučil|sloučila}} stránku $3 do $4 (revize po $5)",
        "logentry-move-move": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 bez založení přesměrování",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|deaktivoval|deaktivovala}} značku „$4“ pro uživatele a boty",
        "rightsnone": "(žádné)",
        "revdelete-summary": "shrnutí editace",
+       "feedback-adding": "Komentář se přidává na stránku…",
+       "feedback-back": "Zpět",
+       "feedback-bugcheck": "Skvělé! Jen zkontrolujte, zda se nejedná o jednu z [$1 už známých chyb].",
+       "feedback-bugnew": "Zkontroloval(a) jsem to. Chci ohlásit novou chybu.",
        "feedback-bugornote": "Pokud dokážete podrobně popsat technický problém, můžete [$1 nahlásit chybu].\nJinak můžete využít jednoduchý formulář níže. Váš komentář bude přidán na stránku „[$3 $2]“ spolu s vaším uživatelským jménem a informací o tom, jaký prohlížeč používáte.",
-       "feedback-subject": "Předmět:",
-       "feedback-message": "Zpráva:",
        "feedback-cancel": "Storno",
-       "feedback-submit": "Odeslat komentář",
-       "feedback-adding": "Komentář se přidává na stránku…",
+       "feedback-close": "Hotovo",
+       "feedback-external-bug-report-button": "Založit technický úkol",
+       "feedback-dialog-title": "Odeslat názor",
+       "feedback-dialog-intro": "Pomocí níže zobrazeného jednoduchého formuláře můžete odeslat svůj názor. Váš komentář se spolu s vaším uživatelským jménem přidá na stránku „$1“.",
+       "feedback-error-title": "Chyba",
        "feedback-error1": "Chyba: Nerozpoznaný výsledek z API",
        "feedback-error2": "Chyba: Editace se nezdařila",
        "feedback-error3": "Chyba: API nevrátilo žádnou odpověď",
+       "feedback-error4": "Chyba: Nelze napsat na uvedenou stránku pro zpětnou vazbu",
+       "feedback-message": "Zpráva:",
+       "feedback-subject": "Předmět:",
+       "feedback-submit": "Odeslat",
+       "feedback-terms": "Jsem srozuměn s tím, že informace o mém uživatelském agentu zahrnují informace o přesné verzi mého prohlížeče a operačního systému a budou zveřejněny u mého komentáře.",
        "feedback-thanks": "Děkujeme! Váš komentář byl přidán na stránku „[$2 $1]“.",
-       "feedback-close": "Hotovo",
-       "feedback-bugcheck": "Skvělé! Jen zkontrolujte, zda se nejedná o jednu z [$1 už známých chyb].",
-       "feedback-bugnew": "Zkontroloval(a) jsem to. Chci ohlásit novou chybu.",
+       "feedback-thanks-title": "Děkujeme!",
+       "feedback-useragent": "Uživatelský agent:",
        "searchsuggest-search": "Hledat",
        "searchsuggest-containing": "obsahující…",
        "api-error-badaccess-groups": "Nemáte povoleno nahrávat soubory na tuto wiki.",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''zakázaný''')",
        "mediastatistics": "Statistika souborů",
        "mediastatistics-summary": "Statistika o typech načtených souborů. Zahrnuje vždy jen nejnovější verzi souboru. Staré nebo smazané verze se nezapočítávají.",
+       "mediastatistics-nfiles": "$1 ($2 %)",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajty|$1 bajtů}} ($2; $3 %)",
        "mediastatistics-table-mimetype": "MIME typ",
        "mediastatistics-table-extensions": "Možné přípony",
        "json-error-utf8": "Poškozené znaky UTF-8, možná nesprávné kódování",
        "json-error-recursion": "Jeden či více rekurzivních odkazů v kódované hodnotě",
        "json-error-inf-or-nan": "Jedna či více hodnot NAN nebo INF v kódované hodnotě",
-       "json-error-unsupported-type": "Dodána hodnota nekódovatelného typu"
+       "json-error-unsupported-type": "Dodána hodnota nekódovatelného typu",
+       "headline-anchor-title": "Odkaz na tuto sekci",
+       "special-characters-group-latin": "Latinka",
+       "special-characters-group-latinextended": "Rozšíření latinky",
+       "special-characters-group-ipa": "Mezinárodní fonetická abeceda (IPA)",
+       "special-characters-group-symbols": "Symboly",
+       "special-characters-group-greek": "Řecká abeceda",
+       "special-characters-group-cyrillic": "Cyrilice",
+       "special-characters-group-arabic": "Arabské písmo",
+       "special-characters-group-arabicextended": "Rozšíření arabštiny",
+       "special-characters-group-persian": "Perština",
+       "special-characters-group-hebrew": "Hebrejské písmo",
+       "special-characters-group-bangla": "Bengálské písmo",
+       "special-characters-group-tamil": "Tamilština",
+       "special-characters-group-telugu": "Telugské písmo",
+       "special-characters-group-sinhala": "Sinhálské písmo",
+       "special-characters-group-gujarati": "Gudžarátské písmo",
+       "special-characters-group-devanagari": "Dévanágarí",
+       "special-characters-group-thai": "Thajština",
+       "special-characters-group-lao": "Laoština",
+       "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"
 }
index df0bddf..144fcbe 100644 (file)
@@ -5,7 +5,8 @@
                        "Omnipaedista",
                        "Svetko",
                        "Wolliger Mensch",
-                       "ОйЛ"
+                       "ОйЛ",
+                       "아라"
                ]
        },
        "tog-oldsig": "нꙑнѣшьн҄ь аѵтографъ :",
@@ -97,6 +98,7 @@
        "faqpage": "Project:Чѧстꙑ въпроси",
        "actions": "дѣиства",
        "namespaces": "имєнъ просторꙑ",
+       "navigation-heading": "плаваниѥ",
        "errorpagetitle": "блаꙁна",
        "tagline": "{{grammar:genitive|{{SITENAME}}}} страница",
        "help": "помощь",
        "userloginnocreate": "въниди",
        "logout": "ис̾ходъ",
        "userlogout": "ис̾ходъ",
+       "userlogin-noaccount": "мѣсто ти нѣстъ ли ?",
        "nologin": "мѣсто ти нѣстъ ли ? $1",
        "nologinlink": "съꙁижди си мѣсто",
        "createaccount": "съꙁижди си мѣсто",
        "accountcreated": "мѣсто сътворєно ѥстъ",
        "accountcreatedtext": "польꙃєватєльско мѣсто [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|бєсѣда]]) сътворєно бѣ",
        "loginlanguagelabel": "ѩꙁꙑкъ : $1",
+       "pt-login": "въниди",
+       "pt-login-button": "въниди",
+       "pt-createaccount": "съꙁижди си мѣсто",
        "pt-userlogout": "ис̾ходъ",
        "changepassword": "таина словєсє иꙁмѣнѥниѥ",
        "resetpass_header": "таина слова иꙁмѣнѥниѥ",
        "template-protected": "(ꙁабранєно ѥстъ)",
        "template-semiprotected": "(чѧстьно ꙁабранѥно)",
        "hiddencategories": "сꙗ страница въ {{PLURAL:$1|1 съкрꙑтѣи катигорїи|$1 съкрꙑтѣхъ катигорїѩ}} сѧ авлꙗѥтъ :",
+       "moveddeleted-notice": "сꙗ страница поничьжєна ѥстъ ⁙\nпоничьжєниꙗ и прѣимєнованиꙗ їстории си страницѧ нижѣ видѣти можєши",
        "postedit-confirmation-saved": "твоꙗ мѣна съхранѥна ѥстъ",
        "viewpagelogs": "си страницѧ їсторїѩ",
        "cur": "нꙑ҃н",
        "rightslog": "чинодатєльства їсторїꙗ",
        "action-edit": "си страницѧ исправлєниѥ",
        "nchanges": "$1 {{PLURAL:$1|мѣна|мѣнꙑ|мѣнъ}}",
+       "enhancedrc-history": "їсторїꙗ",
        "recentchanges": "послѣдьнѩ мѣнꙑ",
        "recentchanges-legend": "послѣдьн҄ь мѣнъ строи",
        "recentchanges-summary": "с҄ьдє послѣдьнѩ мѣнꙑ сѥѩ викиопꙑтьствованиꙗ видѣти можєши",
        "recentchanges-label-minor": "малаꙗ мѣна",
        "recentchanges-label-bot": "сѭ мѣноу аѵтоматъ сътворилъ",
        "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 послѣдьни дьни створѥнꙑ сѫтъ · каꙁаниѥ<br />$3",
        "diff": "ра҃ꙁн",
        "hist": "їс҃т",
        "minoreditletter": "м҃л",
        "newpageletter": "н҃в",
        "boteditletter": "а҃ѵ",
+       "rc-change-size-new": "$1 {{PLURAL:$1|баитъ|баита|баитъ}} послѣди мѣнꙑ",
        "rc-old-title": "напрьва страница створѥна ꙗко ⁖ $1 ⁖",
        "recentchangeslinked": "съвѧꙁанꙑ страницѧ",
        "recentchangeslinked-feed": "съвѧꙁанꙑ страницѧ",
        "movethispage": "си страницѧ прѣимєнованиѥ",
        "pager-newer-n": "{{PLURAL:$1|нова 1|новꙑ $1|новъ $1}}",
        "pager-older-n": "{{PLURAL:$1|давьнꙗ 1|давьни $1|давьн҄ь $1}}",
+       "booksources-search": "исканиѥ",
        "specialloguserlabel": "испльнитєл҄ь :",
        "speciallogtitlelabel": "страницѧ или польꙃєватєлꙗ имѧ :",
        "log": "їсторїѩ",
        "whatlinkshere-hidelinks": "$1 съвѧꙁи",
        "whatlinkshere-filters": "ситꙑ",
        "block": "ꙁагради польꙃєватєл҄ь",
-       "blockip": "ꙁагради польꙃєватєл҄ь",
+       "blockip": "ꙁагради {{GENDER:$1|польꙃєватєл҄ь}}",
        "blockip-legend": "ꙁагради польꙃєватєл҄ь",
        "ipaddressorusername": "IP число или польꙃєватєлꙗ имѧ :",
        "ipbreason": "какъ съмꙑслъ :",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|бєсѣда]])",
        "version": "MediaWiki обраꙁъ",
        "version-specialpages": "нарочьнꙑ страницѧ",
-       "version-version": "(обраꙁъ $1)",
+       "version-version": "($1)",
        "version-license": "MediaWiki прощєниѥ",
        "version-software-version": "обраꙁъ",
        "redirect-submit": "прѣиди",
        "logentry-move-move": "$1 {{GENDER:$2|нарєчє}} страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|нарєчє}} страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖ бєꙁ прѣнаправлєниꙗ сътворѥниꙗ",
        "logentry-newusers-create": "польꙃєватєльско мѣсто ⁖ $1 ⁖ {{GENDER:$2|сътворѥно}} ѥстъ",
+       "logentry-upload-upload": "$1 {{GENDER:$2|положишє}} $3",
        "revdelete-summary": "мѣнꙑ опьсаниѥ",
        "searchsuggest-search": "исканиѥ",
        "searchsuggest-containing": "сѥ дрьжащи···",
-       "api-error-unknownerror": "нєвѣдома блаꙁна : ⁖ $1 ⁖"
+       "api-error-unknownerror": "нєвѣдома блаꙁна : ⁖ $1 ⁖",
+       "special-characters-group-latin": "латиньска аꙁъбоукꙑ",
+       "special-characters-group-latinextended": "латиньскꙑ аꙁъбоукьвє доложєниѥ",
+       "special-characters-group-ipa": "М҃ФА",
+       "special-characters-group-symbols": "сѷмволи",
+       "special-characters-group-greek": "грьчьска аꙁъбоукꙑ",
+       "special-characters-group-cyrillic": "климєнтовица / гражданьска аꙁъбоукꙑ",
+       "special-characters-group-arabic": "аравьска аꙁъбоукꙑ",
+       "special-characters-group-hebrew": "єврєиска аꙁъбоукꙑ",
+       "special-characters-group-bangla": "бангальска аꙁъбоукꙑ",
+       "special-characters-group-telugu": "тєлоужьска аꙁъбоукꙑ",
+       "special-characters-group-sinhala": "синхальска аꙁъбоукꙑ"
 }
index d4349e0..f487f84 100644 (file)
@@ -8,7 +8,8 @@
                        "Salam",
                        "Александр Сигачёв",
                        "Блокнот",
-                       "아라"
+                       "아라",
+                       "Chuvash2014"
                ]
        },
        "tog-underline": "Ссылкăсене аялтан туртса палармалла:",
        "underline-always": "Яланах",
        "underline-never": "Нихăçан та",
        "underline-default": "Браузер ĕнерлевĕсене усă курмалла",
-       "sunday": "вырсарникун",
+       "sunday": "Ð\92ырсарникун",
        "monday": "Тунтикун",
        "tuesday": "Ытларикун",
        "wednesday": "Юнкун",
        "thursday": "Кĕçнерникун",
        "friday": "Эрнекун",
-       "saturday": "шăматкун",
+       "saturday": "Шăматкун",
        "sun": "Вр",
        "mon": "Тн",
        "tue": "Ыт",
        "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|1=Категори|Категорисем}}",
-       "category_header": "«$1» категорири статьясем",
+       "january": "Ð\9aăрлач",
+       "february": "Ð\9dарăс",
+       "march": "Ð\9fуш",
+       "april": "Ð\90ка",
+       "may_long": "Ã\87у",
+       "june": "Ã\87ĕртме",
+       "july": "Утă",
+       "august": "Ã\87урла",
+       "september": "Ð\90вăн",
+       "october": "Юпа",
+       "november": "Чӳк",
+       "december": "Раштав",
+       "january-gen": "Ð\9aăрлач уйăхĕн",
+       "february-gen": "Ð\9dарăс уйăхĕн",
+       "march-gen": "Ð\9fуш уйăхĕн",
+       "april-gen": "Ð\90ка уйăхĕн",
+       "may-gen": "Ã\87у уйăхĕн",
+       "june-gen": "Ã\87ĕртме уйăхĕн",
+       "july-gen": "Утă уйăхĕн",
+       "august-gen": "Ã\87урла уйăхĕн",
+       "september-gen": "Ð\90вăн уйăхĕн",
+       "october-gen": "Юпа уйăхĕн",
+       "november-gen": "Чӳк уйăхĕн",
+       "december-gen": "Раштав уйăхĕн",
+       "jan": "Ð\9aăр",
+       "feb": "Ð\9dар",
+       "mar": "Ð\9fуш",
+       "apr": "Ð\90ка",
+       "may": "Ã\87у",
+       "jun": "Ã\87ĕр",
+       "jul": "Утă",
+       "aug": "Ã\87ур",
+       "sep": "Ð\90вн",
+       "oct": "Юпа",
+       "nov": "Чӳк",
+       "dec": "Раш",
+       "pagecategories": "{{PLURAL:$1|Категори|Категорисем}}",
+       "category_header": "\"$1\" категоринчи статьясем",
        "subcategories": "Подкатегорисем",
-       "category-media-header": "«$1» категорири файлсем",
+       "category-media-header": "\"$1\" категоринчи файлсем",
        "category-empty": "''Хальхи вăхăтра ку категори пушă.''",
-       "hidden-categories": "{{PLURAL:$1|1=Пытарнă категори|Пытарнă категорисем}}",
+       "hidden-categories": "{{PLURAL:$1|Пытарнă категори|Пытарнă категорисем}}",
        "hidden-category-category": "Пытарнă категорисем",
        "category-subcat-count": "{{PLURAL:$2|Ку категоринче çак айри категори пур.|$2-ран(-рен,-тан,-тен) {{PLURAL:$1|$1 айри категорине кăтартнă|$1 айри категорине кăтартнă|$1 айри категорине кăтартнă}}.}}",
        "category-subcat-count-limited": "Ку категоринче {{PLURAL:$1|$1 айри категори|$1 айри категори|$1 айри категори}}.",
        "newwindow": "(çĕнĕ чӳречере)",
        "cancel": "Пăрахăçла",
        "moredotdotdot": "Малалла…",
-       "mypage": "Ð\9cан Ñ\81траница",
+       "mypage": "Страница",
        "mytalk": "Сӳтсе явни",
        "anontalk": "Çак IP-адреса сӳтсе явни",
        "navigation": "Меню",
        "and": "&#32;тата",
-       "qbfind": "ШÑ\8bÑ\80ав",
-       "qbbrowse": "Ð\9aÑ\83Ñ\80Ä\83м",
+       "qbfind": "ШÑ\8bÑ\80ани",
+       "qbbrowse": "Ð\9fÄ\83Ñ\85",
        "qbedit": "Тӳрлет",
        "qbpageoptions": "Страница ĕнерлевĕсем",
        "qbmyoptions": "Сирĕн ĕнĕрлевсем",
        "faq": "ЫйХу",
        "faqpage": "Project:ЫйХу",
+       "variants": "Вариантсем",
        "errorpagetitle": "Йăнăш",
        "returnto": "$1 страницăна таврăн.",
        "tagline": "{{GRAMMAR:genitive|{{SITENAME}}}}ри материал",
        "help": "Пулăшу",
-       "search": "Шырасси",
-       "searchbutton": "Шырасси",
+       "search": "Шырамалли",
+       "searchbutton": "Шырамалли",
        "go": "Куç",
        "searcharticle": "Куç",
-       "history": "Ð\98Ñ\81Ñ\82оÑ\80и",
+       "history": "СÑ\82Ñ\80аниÑ\86ин Ð¸Ñ\81Ñ\82оÑ\80ийÄ\95",
        "history_short": "Истори",
        "updatedmarker": "эпĕ юлашки хут кĕнĕ хыççăн çĕнелнĕ",
        "printableversion": "Пичетлемелли верси",
        "permalink": "Яланхи вырăн",
        "print": "Пичетле",
-       "edit": "Тӳрлетӳ",
+       "view": "Пăх",
+       "edit": "Тӳрлет",
        "create": "Çĕннине ту",
        "editthispage": "Страницăна тӳрлетесси",
        "create-this-page": "Ку страницăна хатĕрле",
        "toolbox": "Хатĕрсем",
        "userpage": "Хутшăнакан страницине пăх",
        "projectpage": "Проект страницине пăх",
-       "imagepage": "Ӳкерчĕк страницине пăх",
+       "imagepage": "Файл страницине пăх",
        "mediawikipage": "Пĕлтерӳ страницине кăтарт",
        "templatepage": "Шаблонăн страницине пăх",
        "viewhelppage": "Справка страницине пăх",
        "categorypage": "Категори страницине пăх",
-       "viewtalkpage": "Сӳтсе явнине тишкер",
+       "viewtalkpage": "Сӳтсе явнине пăх",
        "otherlanguages": "Урăх чĕлхесем",
        "redirectedfrom": "($1 çинчен куçарнă)",
        "redirectpagesub": "Куçаракан страница",
        "viewcount": "Ку страницăна $1 хут пăхнă.",
        "protectedpage": "Хӳтĕленĕ статья",
        "jumpto": "Куçас:",
-       "jumptonavigation": "çӳрев",
-       "jumptosearch": "Шырав",
+       "jumptonavigation": "навигаци",
+       "jumptosearch": "шырамалли",
        "aboutsite": "{{SITENAME}} çинчен",
        "aboutpage": "Project:çинчен",
        "copyright": "Ку ăшлăх $1 килĕшӳллĕн сарăлать.",
        "disclaimers": "Яваплăха тивĕçтерменни",
        "disclaimerpage": "Project:Яваплăха тивĕçтерменни",
        "edithelp": "Улшăнусене кĕртме пулăшакан пулăшу",
-       "mainpage": "Тĕп страница",
+       "mainpage": "Тĕп страницă",
        "mainpage-description": "Тĕп страницă",
        "policy-url": "Project:Йĕркесем",
        "portal": "Портал",
        "youhavenewmessagesmulti": "$1-та çĕнĕ пĕлтерӳсем пур.",
        "editsection": "тӳрлет",
        "editold": "тӳрлет",
-       "viewsourceold": "пÑ\83çламÄ\83Ñ\88 Ñ\82екÑ\81Ñ\82а пăх",
+       "viewsourceold": "кодне пăх",
        "editlink": "тӳрлет",
+       "viewsourcelink": "кодне пăх",
        "editsectionhint": "$1 пайне тӳрлет",
        "toc": "Тупмалли",
-       "showtoc": "кăтарт",
+       "showtoc": "кăтартмалла",
        "hidetoc": "кӑтартмалла мар",
        "thisisdeleted": "$1 пăхса каялла тавăрмалла-и?",
        "viewdeleted": "$1 пăхар-и?",
        "page-rss-feed": "«$1» - RSS хăю",
        "page-atom-feed": "«$1» - Atom хăю",
        "red-link-title": "$1 (хальлĕхе çырман)",
-       "nstab-main": "Статья",
+       "nstab-main": "Страницă",
        "nstab-user": "Хутшăнакан страници",
        "nstab-media": "Мультимеди",
        "nstab-special": "Ятарлă страницă",
        "nstab-image": "Файл",
        "nstab-mediawiki": "Пĕлтерӳ",
        "nstab-template": "Шаблон",
-       "nstab-help": "пулăшу",
+       "nstab-help": "Ð\9fулăшу",
        "nstab-category": "Категори",
        "nosuchaction": "Ку ĕçе тăваймастпăр",
        "nosuchactiontext": "URLта çырнă хушăва вики скрипчĕ ăнланмасть",
-       "nosuchspecialpage": "Ð\92Ä\83л Ñ\8fÑ\82лÄ\83 Ñ\8fÑ\82аÑ\80лÄ\83 страница çук",
+       "nosuchspecialpage": "Ун Ð¿ÐµÐº страница çук",
        "nospecialpagetext": "Эсир ыйтакан ятарлă страница çук. [[Special:SpecialPages|Ятарлă страницăсен списокне]] пăхăр.",
        "error": "Йăнăш",
        "databaseerror": "Пĕлĕм пуххин йăнăшĕ",
+       "databaseerror-function": "$1: функци",
        "laggedslavemode": "Асăрхăр! Страница çинче юлашки улшăнусене кăтартмасăр пултарнă.",
        "readonly": "Пĕлĕм пуххине çырассине чарса хунă",
        "enterlockreason": "Чарнин сăлтавне тата палăртнă вăхăта кăтартăр.",
        "perfcached": "Ку даннăйсене кэшран илнĕ, çавна май унта юлашки улшăнусем палăрмасăр пултараççĕ. A maximum of {{PLURAL:$1|1=one result is|$1 results are}} available in the cache.",
        "perfcachedts": "Ку даннăйсене кэшран илнĕ, юлашки хут вăл $1 вăхăтра çĕнелнĕ. A maximum of {{PLURAL:$4|1=one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "Ку страницăна хальхи вăхăтра улăштарма чарнă. Ку даннăйсене хальхи вăхăтра çĕнетме май çук.",
-       "viewsource": "Курăм",
+       "viewsource": "Кодне пăхни",
+       "viewsource-title": "$1 кодне пăхни",
        "actionthrottled": "Хăвăртлăха чакарнă",
        "actionthrottledtext": "Спампа кĕрешнине пула ку ĕçе пĕчĕк вăхăт хушшинче ытла нумай тума чарнă. Темиçе минутран тепре туса пăхма пултаратăр.",
        "protectedpagetext": "Ку страницăна тӳрлетме май çук, хӳтĕленĕ.",
        "namespaceprotected": "Сирĕн «$1» ят уçлăхĕнчи статьясене тӳрлетмелли май çук..",
        "ns-specialprotected": "«{{ns:special}}» ят уçлăхĕнчи страницăсене эсир тӳрлетейместĕр.",
        "titleprotected": "Ку ятлă страницăна хатĕрлессине [[Хутшăнакан:$1|$1]] хутшăнакан чарса хунă.\nÇак сăлтава кăтартнă: ''$2''.",
+       "exception-nologin": "Кĕмен",
        "virus-badscanner": "Ĕнерлев йăнăшĕ. Вирус сканерĕ паллă мар: ''$1''",
        "virus-scanfailed": "скенерланă чухнехи йăнăш (код $1)",
        "virus-unknownscanner": "паллă мар антивирус:",
        "logouttext": "Эсир палласа илмен хутшăнакан евĕр ĕçлетĕр.\nСайт сире ятпа мар, IP-адрес урлă пĕлет.\nЭсир анонимла, е малтанхи евĕрлĕ çĕнĕ сеанс уçса, е  урăх ятпа ĕçлеме пултаратăр.\nХăш-пĕр страницăсем эсир сайта кĕнĕ пек курăнма пултараççĕ, ăна тӳрлетмешкĕн браузер кэшне çĕнетĕр.",
-       "yourname": "Сирĕн ят",
+       "yourname": "Усă куракан ят:",
+       "userlogin-yourname": "Усă куракан ят",
        "yourpassword": "Вăрттăн сăмах:",
        "yourpasswordagain": "Вăрттăн сăмах тепре çырăр:",
        "remembermypassword": "Ку компьютер çинче мана астуса хăвармалла (for a maximum of $1 {{PLURAL:$1|1=day|days}})",
        "yourdomainname": "Сирĕн домен",
-       "login": "СайÑ\82а Ðºĕр",
+       "login": "Ð\9aÄ\95Ñ\80ĕр",
        "nav-login-createaccount": "Сайта кĕр / регистрацилен",
-       "userlogin": "Сайта кĕр",
-       "logout": "Сайтран тухас",
-       "userlogout": "Сайтран тух",
+       "userlogin": "Кĕр / аккаунт ту",
+       "userloginnocreate": "Кĕмелли",
+       "logout": "Сеансне пĕтерни",
+       "userlogout": "Тухрăр",
        "notloggedin": "Эсир сайта кĕмен",
-       "nologin": "ЭÑ\81иÑ\80 Ñ\85алÄ\95 Ñ\82е Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86иленмен-и? '''$1'''.",
+       "nologin": "Ð\90ккаÑ\83нÑ\82 Ã§Ñ\83к-и? $1.",
        "nologinlink": "Çĕнĕ хутшăнакана регистрацилесси",
-       "createaccount": "Çĕнĕ хутшăнакана регистрацилесси",
-       "gotaccount": "ЭÑ\81иÑ\80 Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86иленÑ\81е-и? '''$1'''.",
-       "gotaccountlink": "СайÑ\82а Ðºĕр",
+       "createaccount": "Аккаунт ту",
+       "gotaccount": "Ð\90ккаÑ\83нÑ\82 Ð¿Ñ\83Ñ\80-и? $1.",
+       "gotaccountlink": "Ð\9aÄ\95Ñ\80ĕр",
        "createaccountmail": "эл. почта тăрăх",
+       "createacct-realname": "Чăн-чăн ят (пулсан)",
+       "createacct-submit": "Аккаунт ту",
+       "createacct-benefit-body1": "{{PLURAL:$1|тӳрлетни|тӳрлетнисем}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|страница|страницасем}}",
        "badretype": "Эсир кăтартнă парольсем пĕр пек мар.",
        "userexists": "Эсир усă курас теекен ята йышăннă. Тархасшăн, урăх ят суйласа илĕр.",
        "loginerror": "Хутшăнакана палласа илеймерĕмĕр",
        "accountcreatedtext": "Хутшăнакансем шутне $1 ятлă çĕнĕ хутшăнакана кĕртрĕмĕр.",
        "createaccount-title": "{{SITENAME}}: хутшăнакана хушасси",
        "loginlanguagelabel": "Чĕлхе: $1",
+       "pt-login": "Кĕмелли",
+       "pt-login-button": "Кĕр",
+       "pt-createaccount": "Аккаунт тумалли",
+       "pt-userlogout": "Тухмалли",
        "changepassword": "Пароле улăштар",
-       "resetpass_header": "Ð\9fаÑ\80оле Ð¿Ä\83Ñ\80аÑ\85Ä\83çла",
-       "oldpassword": "Ð\9aивÄ\9b Ð¿Ð°Ñ\80олÑ\8c",
-       "newpassword": "Ã\87Ä\9bнÄ\9b Ð¿Ð°Ñ\80олÑ\8c",
+       "resetpass_header": "Ð\9fаÑ\80олне Ñ\83лÄ\83Ñ\88Ñ\82аÑ\80",
+       "oldpassword": "Ð\9aивÄ\95 Ð¿Ð°Ñ\80олÑ\8c:",
+       "newpassword": "Ã\87Ä\95нÄ\95 Ð¿Ð°Ñ\80олÑ\8c:",
        "resetpass_submit": "Вăрттăн сăмаха лартса сайта кĕр",
        "resetpass_forbidden": "Вăрттăн сăмаха улăштарма май çук",
        "resetpass-submit-cancel": "Пăрахăçла",
        "resetpass-temp-password": "Вăхăтлăх вăрттăн сăмах:",
+       "passwordreset-username": "Усă куракан ят:",
+       "passwordreset-domain": "Домен:",
+       "changeemail-none": "(çук)",
        "bold_sample": "Çурмахулăм текст",
        "bold_tip": "Çурмахулăм текст",
        "italic_sample": "Тайлăк текст",
        "media_tip": "Медиа-файл çине каçă",
        "sig_tip": "Сирĕн алă пусни тата вăхăт",
        "hr_tip": "Горизонтальлĕ йĕр (сахалтарах усă курăр)",
-       "summary": "Улшăнусен ăнлантарăвĕ:",
+       "summary": "Улăштарнисене ăнлантарни:",
        "subject": "Тема:",
        "minoredit": "Пĕчĕк улшăну",
        "watchthis": "Ку страницăна сăна",
        "savearticle": "Страницăна çырса хур",
        "preview": "Епле курăнĕ",
-       "showpreview": "Малтанлăхи курăну",
+       "showpreview": "Маларах пăхни",
        "showdiff": "Кĕртнĕ улшăнусем",
        "anoneditwarning": "'''Асăрхăр''': Эсир сайта хăвăр çинчен пĕлтермен, çавăнпа та ку страницăна улăштарнин журналне сирĕн IP-адреса çырса хума тивĕ.",
        "missingcommenttext": "Аяларах, тархасшăн, хăвар пĕлтерĕве çырăр.",
        "blockedtext": "'''Ку аккаунта е IP-адреса ĕçлеме чарнă.'''\n\n$1 администратор ĕçлеме чарнă. Сăлтавĕ çакă: ''«$2»''.\n\n* Чарнă вăхăт: $8\n* Çак вăхăтчен чарнă: $6\n* Çакна чарнă: $7\n\n$1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|администраторсем]] патне эсир çыру ярса меншĕн ĕçлеме чарнине сӳтсе явма пултаратăр.\n\nАсăрхар: [[Special:Preferences|хăвăрăн ĕнерлевсенче]] эл. почта адресне çирĕплетмен пулсан, е сайта кĕмен пулсан — администратор патне çыру яраймастăр. Администратор сире çыру яма чарнă пулсан — ку хутĕнче те çыру яраймăр.\n\nСирĕн IP-адрес — $3, чару идентификаторĕ — #$5. Çырусенче, тархасшăн, вĕсене пĕлтерĕр.",
        "blockednoreason": "сăлтавне пĕлтермен",
        "loginreqtitle": "Сайта кĕмелле",
-       "loginreqlink": "сайта кĕр",
+       "loginreqlink": "кĕр",
        "loginreqpagetext": "Ытти страницăсене курмашкăн сирĕн $1.",
        "accmailtitle": "Пароле леçрĕмĕр.",
        "accmailtext": "$1 вăрттăн сăмахне кунта леçрĕмĕр: $2.",
        "previewnote": "'''Ку страницăна халлĕхе çырса хуман.'''\nЭсир ку страница мĕнле пулассине кăна куратăр!",
        "previewconflict": "Çӳлти чӳречере эсир халĕ çырса хурсан текст епле курăннине куратăр.",
        "editing": "$1 тӳрлетни",
+       "creating": "$1 туни",
        "editingsection": "$1 тӳрлетни (статья пайĕ)",
        "editingcomment": "$1 тӳрлетни (кӗске анлантарӑвӗ)",
        "editconflict": "Тӳрлетнĕ вăхăтра тавлашу тухрĕ: $1",
        "copyrightwarning": "Эсир кĕртнĕ, е улăштарнă пур статьясен тексчĕсем $2 ($1 пăхăр) лизензине пăхăнаççĕ. Енчен те эсир кĕртнĕ текста пурте усă курма, тӳрлетсе улăштарма пултарнипе килĕшместĕр пулсан кунта ăна ан кĕртĕр. <br /> Çавăн пекех эсир кĕртнĕ текстăн е авторĕ, е ăна ирĕклĕ усă курма юракан çăлкуçсенчен илнине çирĕплететĕр. <br /> '''АВТОР ПРАВИСЕМПЕ ХӲТĔЛЕНĔ МАТЕРИАЛСЕНЕ АН КĔРТĔР!'''",
        "protectedpagewarning": "'''АСĂРХАТТАРНИ: ку страницăна улшăнусем кĕртессинчен хӳтĕленĕ, ăна тӳрлетме администраторсем кăна пултараççĕ.'''",
        "titleprotectedwarning": "'''Асăрхаттару. Ку страницăпа ĕçлеме чарнă, ăна хăш-пĕр хутшăнакан кăна хатерлеме пултарать.'''",
-       "templatesused": "Ку страница çинче усă курнă шаблонсем:",
+       "templatesused": "Ку страницă çинче усă курнă {{PLURAL:$1|шаблон|шаблонсем}}:",
        "templatesusedpreview": "Пăхакан страница çинче усă курнă шаблонсем:",
        "templatesusedsection": "Ку пайра усă курнă шаблонсем:",
        "template-protected": "(сыхланă)",
        "nohistory": "Ку страницăн улшăнусен журналĕ çук.",
        "currentrev": "Хальхи верси",
        "revisionasof": "$1 сăнташ",
-       "revision-info": "$1 версийĕ; $2",
+       "revision-info": "Версийĕ $1 {{GENDER:$6|$2}}$7",
        "previousrevision": "← Малтанхи сăнташ",
        "nextrevision": "Тепĕр сăнташ →",
        "currentrevisionlink": "хальхи верси çине куç",
        "last": "малт.",
        "page_first": "пĕрремĕш",
        "page_last": "юлашки",
-       "histfirst": "Пĕрремĕш",
-       "histlast": "Юлашки",
-       "historysize": "$1 байт",
+       "history-fieldset-title": "Историне пăх",
+       "histfirst": "киввисем",
+       "histlast": "çĕннисем",
+       "historysize": "({{PLURAL:$1|1 байт|$1 байт}})",
        "historyempty": "(пушă)",
-       "history-feed-title": "ТӳÑ\80леÑ\82Ó³сен историйĕ",
+       "history-feed-title": "УлÄ\83Ñ\88Ä\83нÑ\83сен историйĕ",
        "history-feed-description": "Ку страницăна викире улаштарнин историйĕ",
        "rev-deleted-comment": "(комментарине кăларса пăрахнă)",
        "rev-deleted-user": "(автор ятне хуратнă)",
        "revdelete-hide-text": "Страницăн çак верси текстне пытар",
        "revdelete-hide-comment": "Комментарине пытар",
        "revdelete-hide-user": "Автор ятне пытар",
+       "revdelete-radio-set": "Пытарнă",
+       "revdelete-radio-unset": "Курăнакан",
        "revdelete-success": "Версин курăмлăхне улăштартăмăр.",
        "pagehist": "Страница историйĕ",
        "deletedhist": "Кăларса пăрахнисен историйĕ",
        "suppressionlog": "Пытару журналĕ",
+       "history-title": "\"$1\" улшăннисен историйĕ",
        "lineno": "$1-мĕш йĕрке:",
        "editundo": "пăрахăçла",
-       "searchresults": "ТÑ\83пÑ\80Ä\83мÄ\83Ñ\80",
+       "searchresults": "ШÑ\8bÑ\80анÄ\83 Ñ\80езÑ\83лÑ\8cÑ\82аÑ\87Ä\95Ñ\81ем",
        "textmatches": "Статьясенчи текст пĕрпеклĕхĕ",
-       "prevn": "малтанхи {{PLURAL:$1|$1}}",
-       "nextn": "малалли {{PLURAL:$1|$1}}",
-       "search-result-size": "$1 ({{PLURAL:$2|1=1 сăмах|$2 сăмах}})",
-       "showingresults": "Аяларах эсир <b>#$2</b> пуçласа кăтартнă <b>$1</b> йĕркене куратăр.",
+       "prevn": "унчченхи {{PLURAL:$1|$1}}",
+       "nextn": "урăххисем {{PLURAL:$1|$1}}",
+       "viewprevnext": "Пăх ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchprofile-articles-tooltip": "$1 -ре шырани",
+       "searchprofile-images-tooltip": "Файăлсене шырани",
+       "search-result-size": "$1 ({{PLURAL:$2|1 сăмах|$2 сăмах}})",
+       "search-category": "(категори $1)",
+       "search-interwiki-caption": "Тăван проектсем",
+       "search-relatedarticle": "Çыхăнă",
+       "searchrelated": "çыхăнă",
+       "showingresults": "Аяларах эсир <strong>$2</strong> пуçласа кăтартнă <strong>$1</strong> йĕркене куратăр.",
        "powersearch-legend": "Анлă шырав",
+       "powersearch-togglenone": "Нимĕнте",
+       "search-external": "Тулти шырамалли",
        "preferences": "Ĕнерлевсем",
        "mypreferences": "Ĕнерлев",
        "prefs-edits": "Тӳрлетӳсен шучĕ:",
-       "prefs-skin": "Ð\95Ñ\80еÑ\88ленӳ",
+       "prefs-skin": "ТиÑ\80",
        "skin-preview": "Малтанхи курăну",
        "datedefault": "Палăртман чухнехи",
        "prefs-rc": "Юлашки улшăнусен страници",
        "prefs-editing": "Тӳрлетни",
        "rows": "Йěркесем",
        "columns": "Юпасем:",
-       "searchresultshead": "Шыраса тупрăмăр",
+       "searchresultshead": "Шырамалли",
        "recentchangesdays": "Çак кунсен хушшинчи юлашки улшăнусене кăтартмалла:",
        "recentchangescount": "Списокра çакăн чухлĕ тӳрлетӳ кăтартмалла:",
        "savedprefs": "Сирĕн ĕнерлевсене сыхласа хăвартăмăр",
        "timezonelegend": "Сехет поясĕ",
        "localtime": "Вырăнти вăхăт",
        "servertime": "Сервер вăхăчě",
+       "timezoneregion-africa": "Африка",
+       "timezoneregion-america": "Америка",
+       "timezoneregion-antarctica": "Антарктика",
+       "timezoneregion-arctic": "Арктика",
+       "timezoneregion-asia": "Ази",
+       "timezoneregion-australia": "Австрали",
+       "timezoneregion-europe": "Европа",
+       "prefs-searchoptions": "Шырамалли",
        "prefs-files": "Файлсем",
        "youremail": "Электронлă почта:",
-       "username": "Хутшăнакан ячĕ:",
-       "yourrealname": "Сирĕн чăн ят (*)",
+       "username": "{{GENDER:$1|Усă куракан ят}}:",
+       "prefs-registration": "Регистрацин вăхăтчĕ:",
+       "yourrealname": "Чăн-чăн ят:",
        "yourlanguage": "Интерфейс чĕлхи:",
        "yourvariant": "Чĕлхе варианчĕ",
        "yournick": "Сирĕн ят (алă пусма усă курăнĕ):",
        "email": "Эл. почта",
        "prefs-help-email": "Электронлă почта (вăл кирлисем шутне кĕмест пулин те) ытти хутшăнакансене сирĕнпе ун урлă çыхăнма май парать. Çыхăну тытнă вăхăтра ыттисем сирĕн адреса пĕлеймеççĕ.",
        "prefs-help-email-required": "Электронлă почтăн адресне кăтартмалла.",
+       "prefs-editor": "Редактор",
        "userrights": "Хутшăнакансен прависемпе ĕçлесси",
        "userrights-lookup-user": "Хутшăнакансен ушкăнĕсемпе ĕçлесси",
        "userrights-user-editname": "Хутшăнакан ятне кăтартăр:",
        "userrights-groupsmember": "Çак ушкăнсене кĕрет:",
        "userrights-reason": "Сăлтавĕ",
        "group": "Ушкăн:",
+       "group-user": "Хутшăнакансем",
        "group-autoconfirmed": "Автоподтверждённые участники",
        "group-bot": "Ботсем",
        "group-sysop": "Администраторсем",
        "group-bureaucrat": "Бюрократсем",
-       "group-suppress": "РевизоÑ\80Ñ\8b",
+       "group-suppress": "ТÄ\95Ñ\80Ä\95Ñ\81лекенÑ\81ем",
        "group-all": "(пурте)",
+       "group-user-member": "{{GENDER:$1|хутшăнакан}}",
        "group-autoconfirmed-member": "автоподтверждённый участник",
-       "group-bot-member": "бот",
-       "group-sysop-member": "администратор",
-       "group-bureaucrat-member": "бюрократ",
-       "group-suppress-member": "Ревизор",
+       "group-bot-member": "{{GENDER:$1|бот}}",
+       "group-sysop-member": "{{GENDER:$1|администратор}}",
+       "group-bureaucrat-member": "{{GENDER:$1|бюрократ}}",
+       "group-suppress-member": "{{GENDER:$1|ревизор}}",
+       "grouppage-user": "{{ns:project}}:Хутшăнакансем",
        "grouppage-autoconfirmed": "{{ns:project}}:Автоподтверждённые участники",
        "grouppage-bot": "{{ns:project}}:Ботсем",
        "grouppage-sysop": "{{ns:project}}:Администраторсем",
        "grouppage-bureaucrat": "{{ns:project}}:Бюрократсем",
-       "grouppage-suppress": "{{ns:project}}:РевизоÑ\80Ñ\8b",
+       "grouppage-suppress": "{{ns:project}}:ТÄ\95Ñ\80Ä\95Ñ\81лекенÑ\81ем",
        "rightslogtext": "Ку пользовательсен прависене улăштарниссен журналě",
+       "enhancedrc-history": "истори",
        "recentchanges": "Улшăнусем",
        "recentchanges-legend": "Çĕнĕ улшăнусен ĕнерлевĕ",
        "recentchanges-label-bot": "Ку улшăнăва бот тунă",
        "recentchanges-legend-newpage": "$1 — çĕнĕ страница",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rclistfrom": "Юлашки улшăнусене $3 $2 вăхăтран пуçласа кăтартнă",
-       "rcshowhideminor": "пĕчĕк тӳрлетӳсене $1",
+       "rcshowhideminor": "пĕчĕк тӳрлетнисене $1",
        "rcshowhidebots": "ботсене $1",
-       "rcshowhideliu": "сайта кĕнĕскерсене $1",
+       "rcshowhidebots-show": "Кăтарт",
+       "rcshowhideliu": "сайта кĕнисене $1",
        "rcshowhideanons": "ячĕсене палăртманскерсене $1",
        "rcshowhidepatr": "тĕрĕсленĕ тӳрлетӳсене $1",
-       "rcshowhidemine": "хăвăн тӳрлетӳсене $1",
+       "rcshowhidemine": "хăвăн тӳрлетнисене $1",
        "rclinks": "Юлашки $2 кун хушшинче тунă $1 улшăнусене кăтартмалла<br />$3",
        "diff": "танл.",
-       "hist": "истори",
-       "hide": "кăтартмалла мар",
-       "show": "кăтартмалла",
+       "hist": "ист",
+       "hide": "Ð\9aăтартмалла мар",
+       "show": "Ð\9aăтартмалла",
        "minoreditletter": "п",
        "newpageletter": "Ç",
        "rc_categories_any": "Кашни",
        "recentchangeslinked": "Çыхăннă улшăнусем",
        "recentchangeslinked-feed": "Çыхăннă улшăнусем",
        "recentchangeslinked-toolbox": "Çыхăннă улшăнусем",
-       "recentchangeslinked-page": "Страница ячĕ:",
+       "recentchangeslinked-page": "Страницă ячĕ:",
        "upload": "Файла кĕртесси",
        "uploadbtn": "Файла кĕрт",
        "uploadnologin": "Эсир сайта кĕмен.",
        "uploaderror": "Файла кĕртне чухне йăнăш пулчĕ",
        "uploadlogpage": "Файлсене кĕртнине кăтартакан журнал",
        "uploadlogpagetext": "Аяларах эсир юлашкинчен кĕртнĕ файлсене куратăр.\nПур çĕрте те сервер вăхăтне (Гринвич тăрăх, UTC) кăтартнă.",
+       "filename": "Файл ячĕ",
        "filedesc": "Кĕскен ăнлантарни",
-       "fileuploadsummary": "Кĕске ăнлантару:",
+       "fileuploadsummary": "Кĕскен ăнлантарни:",
        "filestatus": "Усă курмалли майсем",
        "filesource": "Çăлкуç",
        "ignorewarning": "Асăрхаттарусене пăхмасăр файла çав-çавах çырса хумалла.",
        "upload_source_file": " (сирĕн компьютер çинчи файл)",
        "listfiles-summary": "Ку ятарлă страницăра эсир пур кĕртнĕ файлсене куратăр.\nНумай пулмасть кĕртнисем çулте вырнаçнă.\nЮпа тăррине пуссан йĕркелӳ майĕ улшăнĕ.",
        "listfiles_search_for": "Ӳкерчĕк ячĕ тăрăх шырани:",
+       "imgfile": "файл",
        "listfiles": "Ӳкерчěксен списокě",
        "listfiles_name": "Файл ячĕ",
        "listfiles_user": "Хутшăнакан",
        "unusedtemplatestext": "Ку страница çинче страницăсенче усă курман «Шаблон» ятлă ятсен уçлăхне шутне кĕрекен страницăсене куратăр.",
        "unusedtemplateswlh": "ытти каçăсем",
        "randompage": "Ăнсăртран илнě страницă",
+       "randomincategory-category": "Категори:",
        "randomredirect": "Ăнсăртран илнĕ куçару",
        "statistics": "Статистика",
        "statistics-header-users": "Хутшăнакансен статистики",
        "brokenredirects-edit": "тӳрлет",
        "brokenredirects-delete": "кăларса пăрах",
        "fewestrevisions": "Сахал тӳрлетнĕ статьясем",
-       "nbytes": "$1 {{PLURAL:$1|1=байт|байт}}",
+       "nbytes": "$1 {{PLURAL:$1|байт|байтсем}}",
+       "ncategories": "$1 {{PLURAL:$1|категори|категорисем}}",
        "nlinks": "$1 {{PLURAL:$1|1=каçă|каçă}}",
-       "nviews": "$1 хут пăхнă",
+       "nviews": "$1 {{PLURAL:$1|пăхни|пăхнисем}}",
        "specialpage-empty": "Ку страница пушă",
        "lonelypages": "Тăлăх страницăсем",
        "uncategorizedpages": "Каталогсăр страницăсем",
        "movethispage": "Ку страницăн ятне улăштар",
        "unusedcategoriestext": "Çак категори страницисем çинче ытти категорисемпе статьясем çук.",
        "notargettitle": "Тĕллевне кăтартман",
+       "pager-newer-n": "{{PLURAL:$1|çĕнĕреххисене 1|$1 çĕнĕреххисене}}",
+       "pager-older-n": "{{PLURAL:$1|кивĕреххисене 1|$1 кивĕреххисене}}",
        "booksources": "Кĕнекесен çăлкуçĕсем",
+       "booksources-search": "Туп",
        "specialloguserlabel": "Хутшăнакан:",
-       "log": "Ð\96Ñ\83Ñ\80налсем",
-       "all-logs-page": "Ð\96Ñ\83Ñ\80налсем",
-       "allpages": "Ð\9fÄ\9bÑ\82Ä\9bм страницăсем",
-       "nextpage": "ТепÄ\9bр страницă ($1)",
-       "prevpage": "Ð\9cалÑ\82анÑ\85и Ñ\81Ñ\82Ñ\80аниÑ\86а ($1)",
+       "log": "Ð\9bогсем",
+       "all-logs-page": "Ð\9fÄ\95Ñ\82Ä\95м Ð»Ð¾Ð³сем",
+       "allpages": "Ð\9fÄ\95Ñ\82Ä\95м страницăсем",
+       "nextpage": "ТепÄ\95р страницă ($1)",
+       "prevpage": "УнÑ\87Ñ\87енÑ\85и Ñ\81Ñ\82Ñ\80аниÑ\86Ä\83 ($1)",
        "allarticles": "Пĕтĕм статьясем",
        "allinnamespace": "Пĕтĕм статьясем («$1» ят уçлăхĕ)",
        "allpagessubmit": "Ту",
        "allpagesprefix": "Çак йĕрекесенчен пуçланакансен страницăсене шыра:",
        "allpagesbadtitle": "Страницăн ячĕ тĕрĕс мар. Ятĕнче е интервики, е чĕлхе префиксĕ е усă курма юраман символсем пур.",
        "allpages-bad-ns": "{{SITENAME}}-ра «$1» ят уçлăхĕ çук.",
+       "cachedspecial-refresh-now": "Юлашкине пăх.",
        "categories": "Категорисем",
        "categoriespagetext": "Викинче çак категорисем пур.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
        "special-categories-sort-count": "шучĕ тăрăх йĕркеле",
        "special-categories-sort-abc": "алфавит тăрăх йĕркеле",
        "deletedcontributions": "Тулашран тунă ӳсĕм",
+       "linksearch-ok": "Шырамалли",
        "listusers-submit": "Кăтарт",
        "listusers-noresult": "Хутшăнакансем тупăнмарĕç.",
        "listgrouprights-group": "Ушкăн",
        "emailuser": "Хутшăнакана çыру яр... (Письмо участнику)",
        "noemailtitle": "Электронлă почта адресĕ çук",
        "noemailtext": "Ку хутшăнакан электронлă адресне кăтартман е ытти хутшăнакансенчен çыру илесшĕн мар.",
+       "emailusername": "Хутшăнаканăн ячĕ:",
        "emailfrom": "Камран",
        "emailto": "Кам патне",
        "emailsubject": "Çыру теми",
        "emailsent": "Çырăва леçрĕмĕр",
        "emailsenttext": "Сирĕн электронлă çырăва леçрĕмĕр.",
        "watchlist": "Пăхса тăракан страницăсем ят-йышĕ",
-       "mywatchlist": "Ман сăнав ят-йышĕ",
+       "mywatchlist": "Сăнаса тăракан списокĕ",
+       "watchlistfor2": "$1 валли $2",
        "nowatchlist": "Эсир пăхса тăракан страницăсен списокĕ пушă.",
        "watchnologin": "Системăна хăвăр ята каламалла",
        "addedwatchtext": "«[[:$1]]» страницăна сирĕн [[Special:Watchlist|сăнав списока]] хушрăмăр. Малашне [[Special:RecentChanges|юлашки улшăнусене кăтартакан страницăра]] унпа çыхăннă улшăнусене хылăм шрифтпа курăнĕç.\nЕнчен те сирĕн ку страницăна сăнас кăмăл пĕтсен, «ан сăна» пускăч çине пусăр.",
        "watching": "Сăнамаллисем шутне хушасси…",
        "unwatching": "Сăнав ят-йышĕнчен кăларса пăрахасси…",
        "enotif_reset": "Пур страницăсене те пăхнă пек палăрт",
+       "enotif_impersonal_salutation": "{{SITENAME}} хутшăнакан",
        "enotif_anon_editor": "$1 анонимлă хутшăнакан",
        "created": "хатĕрленĕ",
        "changed": "улăштарнă",
        "reverted": "Малтанхи версине тавăрнă",
        "deletecomment": "Сăлтавĕ",
        "rollback": "Тÿрлетÿсене каялла куçарасси",
-       "rollback_short": "Каялла куçарасси",
        "rollbacklink": "каялла тавăр",
        "rollbackfailed": "Каялла куçарнă çухна йăнăш тухнă",
        "protectlogpage": "Хӳтĕлев журналĕ",
        "protectcomment": "Сăлтавĕ",
        "protectexpiry": "Пĕтет:",
        "protect-level-autoconfirmed": "Статьяна çĕнĕрен регистрациленнĕ, е пачах та регистрациленменнисенчен хӳтĕле",
-       "protect-level-sysop": "Администраторсем çеç",
+       "protect-level-sysop": "Администраторсене кăна юрать",
+       "pagesize": "(байт)",
+       "restriction-edit": "Тӳрлет",
        "undelete": "Кăларса пăрахнă страницăсене пăх",
        "viewdeletedpage": "Кăларса пăрахнă страницăсене пăх",
        "undeleterevisions": "Архивра пурĕ $1 верси",
        "undelete-search-box": "Кăларса пăрахнă страницăсен хушшинчи шырав",
        "undelete-search-submit": "Шыра",
        "blanknamespace": "(Тĕп)",
-       "contributions": "Хутшăнакан ӳсĕмĕ",
-       "mycontris": "Манăн ӳсĕм",
-       "contribsub2": "$1 ӳсĕмĕ ($2)",
+       "contributions": "{{GENDER:$1|Усă куракан}} ӳсĕмĕсем",
+       "contributions-title": "Усă куракан $1 хушни",
+       "mycontris": "Ӳсĕм",
+       "contribsub2": "{{GENDER:$3|$1}} валли ($2)",
        "uctop": " (пуçламăш)",
+       "month": "Уйăхран (тата маларах):",
+       "year": "Çултан (тата маларах):",
        "sp-contributions-blocklog": "Чарса лартнисен журналĕ",
-       "sp-contributions-talk": "Сӳтсе яв",
+       "sp-contributions-logs": "логсем",
+       "sp-contributions-talk": "сӳтсе яв",
        "sp-contributions-userrights": "Хутшăнакансен прависемпе ĕçлесси",
        "sp-contributions-search": "Тӳпе шыравĕ",
-       "sp-contributions-submit": "Шырас",
+       "sp-contributions-username": "IP адрес е усă куракан ят:",
+       "sp-contributions-submit": "Шыра",
        "whatlinkshere": "Кунта килекен каçăсем",
        "linkshere": "Çак страницăсем '''[[:$1]]''' çине илсе килеççĕ:",
        "nolinkshere": "'''[[:$1]]''' страница çине ытти страницăсенчен килме пулмасть.",
+       "whatlinkshere-prev": "{{PLURAL:$1|унчченхи|унчченхи $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|урăххи|урăххисем $1}}",
        "whatlinkshere-links": "← каçăсем",
        "whatlinkshere-filters": "Аласем",
        "blockip": "Хăтшăнакана ĕçлеме чар",
+       "ipaddressorusername": "IP адрес е усă куракан ят:",
        "ipbreason": "Сăлтавĕ",
        "ipbother": "Урăх вăхăт:",
        "ipboptions": "2 сехет:2 hours,1 кун:1 day,3 кун:3 days,1 эрне:1 week,2 эрне:2 weeks,1 уйăх:1 month,3 уйăх:3 months,6 уйăх:6 months,1 çул:1 year,яванлăха:infinite",
        "export": "Статьясен экспорчĕ",
        "export-submit": "Экспортла",
        "export-addcat": "Хуш",
+       "export-addns": "Хуш",
        "export-templates": "Шаблонсене ĕçлеттер",
        "allmessages": "Система пĕлтерĕвĕсем",
        "allmessagesname": "Пĕлтерӳ",
        "allmessagescurrent": "Хальхи текст",
+       "allmessages-filter-translate": "Куçар",
        "thumbnail-more": "Пысăклатмалли",
        "filemissing": "Файл тупăнмарĕ",
        "thumbnail_error": "Пĕчĕк ӳкерчĕке тăваймарăмăр: $1",
        "importinterwiki": "Вики хушшинчи импорт",
        "import-interwiki-submit": "Импортирла",
        "import-interwiki-namespace": "Страницăсене çак ят уçлăхне вырнаçтар:",
+       "import-upload-filename": "Файл ячĕ:",
        "importnopages": "Импортламалли страницăсем çук.",
        "importnofile": "Импортламалли файла тиемен",
        "import-noarticle": "Импортламалли страница çук!",
        "importlogpage": "Импорт журналĕ",
-       "import-logentry-upload": "«[[$1]]» — файлтан импортла",
        "tooltip-pt-userpage": "Сирĕн хутшăнакан страници",
        "tooltip-pt-mytalk": "Сирĕн канашлу страници",
        "tooltip-pt-preferences": "Сирĕн ĕнерлевсем",
        "tooltip-pt-watchlist": "Эсир пăхакан страницисем",
-       "tooltip-pt-logout": "СайÑ\82Ñ\80ан Ñ\82Ñ\83Ñ\85",
+       "tooltip-pt-logout": "СеанÑ\81не Ð¿Ä\95Ñ\82еÑ\80",
        "tooltip-ca-talk": "Статьяна сӳтсе явасси",
        "tooltip-ca-edit": "Эсир ку страницӑна тӳрлетме пултаратӑр. Тархасшӑн ҫырса хӑваричен страницӑ мӗнле пулассине пӑхӑр.",
        "tooltip-ca-addsection": "Çĕнĕ пай ту",
        "tooltip-ca-move": "Страницӑна урӑх ҫӗре куҫарасси",
        "tooltip-ca-watch": "Ку страницӑ хыҫҫӑн сӑнама пуҫласси",
        "tooltip-ca-unwatch": "Ку страницӑ хыҫҫӑн урӑх сӑнамалла мар",
-       "tooltip-search": "Шырав",
+       "tooltip-search": "Шырав {{SITENAME}}",
        "tooltip-p-logo": "Тӗп страницӑ",
        "tooltip-feed-atom": "Ку страницăн Atom куçару",
        "tooltip-ca-nstab-image": "Файлăн страници",
        "tooltip-ca-nstab-template": "Шаблонăн страници",
-       "tooltip-ca-nstab-category": "Категори страницине уç",
+       "tooltip-ca-nstab-category": "Категорин страницине пăхни",
        "tooltip-save": "Тӳрлетӳсене астуса хăвармалла",
        "tooltip-watch": "Çак страницăна пăхса тăмаллисем шутне хуш",
        "tooltip-summary": "Кĕскĕн ăнлантарса парăр",
        "others": "ыттисем",
        "creditspage": "Пархатарлăх",
        "spambot_username": "MediaWiki спамран тасатни",
+       "pageinfo-title": "\"$1\" çинчен",
+       "pageinfo-toolboxlink": "Страници çинчен",
+       "pageinfo-category-info": "Категори çинчен",
        "markaspatrolleddiff": "Тĕрĕсленĕ тесе палăрт",
        "markaspatrolledtext": "Ку статьяна тĕрĕсленĕ тесе палăртмалла",
        "markedaspatrolled": "Тĕрĕсленĕ пек палăртнă",
        "confirmemail_sent": "Çирĕплетмелли ыйтуллă çырăва ятăмăр.",
        "confirmemail_success": "Сирĕн электронлă почтăн адресне çирĕплентĕ.",
        "confirmemail_loggedin": "Сирĕн электронлă почтăн адресне çирĕплетрĕмĕр.",
-       "scarytranscludefailed": "[Шел Ñ\82е, $1 Ñ\88аблонпа Ñ\83Ñ\81Ä\83 ÐºÑ\83Ñ\80аймаÑ\80Ä\83мÄ\83Ñ\80]",
-       "scarytranscludetoolong": "[Ð\9fиÑ\82Ä\95 Ñ\88ел, URL Ñ\8bÑ\82ла Ð²Ä\83Ñ\80Ä\83м]",
+       "scarytranscludefailed": "[Шаблонпа Ã§Ñ\8bÑ\85Ä\83нни Ð¹Ä\83нÄ\83Ñ\88нÄ\83 $1]",
+       "scarytranscludetoolong": "[ЫÑ\82лаÑ\88и Ð²Ä\83Ñ\80Ä\83м URL]",
        "deletedwhileediting": "Асăрхăр: эсир тӳрлетнĕ вăхăтра ку страницăна кăларса парахнă!",
        "recreate": "Çĕнĕрен пуçла",
+       "confirm_purge_button": "OK",
+       "confirm-watch-button": "OK",
+       "confirm-unwatch-button": "OK",
+       "pipe-separator": "&#32;|&#32;",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← малтанхи страница",
        "imgmultipagenext": "тепĕр страница →",
        "imgmultigo": "Куç!",
        "autosumm-blank": "Статьяна тĕппипех кăларса пăрахнă",
        "autosumm-replace": "Страницăн ăшлăхне «$1» çине улăштарнă",
        "autoredircomment": "[[$1]] çине куçарни",
-       "autosumm-new": "Çĕнни: $1",
+       "autosumm-new": "Çĕнĕ страница \"$1\"",
        "watchlisttools-view": "Ку тӳрлетӳпе çыхăннăскерсем",
-       "version": "MediaWiki версийĕ",
+       "version": "Верси",
        "fileduplicatesearch": "Пĕр пек файлсен шыравĕ",
        "fileduplicatesearch-legend": "Дубликатсен шыравĕ",
        "fileduplicatesearch-filename": "Файл ячĕ:",
        "specialpages-group-media": "Медиа-материалсемпе тултарăшсем",
        "specialpages-group-users": "Хутшăнакансем тата правасем",
        "specialpages-group-highuse": "Нумай усă куракан страницăсем",
-       "rightsnone": "(çук)"
+       "htmlform-selectorother-other": "Урăххи",
+       "htmlform-no": "Çук",
+       "rightsnone": "(çук)",
+       "feedback-back": "Каялла",
+       "searchsuggest-search": "Шырамалли",
+       "pagelang-select-lang": "Чĕлхе суйлăр",
+       "mediastatistics-header-audio": "Аудио",
+       "mediastatistics-header-video": "Видеосем",
+       "special-characters-group-symbols": "Символсем"
 }
index 469959d..d4c32c8 100644 (file)
@@ -12,7 +12,8 @@
                        "Urhixidur",
                        "Xxglennxx",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Tanlinellu cysylltiadau:",
        "import-rootpage-nosubpage": "Nid yw'r parth \"$1\", sef parth y brif dudalen y mewnforir iddi, yn caniatau is-dudalennau.",
        "importlogpage": "Lòg mewnforio",
        "importlogpagetext": "Cofnodion mewnforio tudalennau ynghyd â'u hanes golygu oddi ar wicïau eraill, gan weinyddwyr.",
-       "import-logentry-upload": "wedi mewnforio [[$1]] trwy uwchlwytho ffeil",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}} wedi'i fewnforio",
-       "import-logentry-interwiki": "wedi symud $1 (traws-wici)",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}} wedi'i fewnforio o $2",
        "javascripttest": "Profi JavaScript",
        "javascripttest-pagetext-noframework": "Neilltuwyd y dudalen hon at gynnal profion JavaScript.",
        "version-parser-function-hooks": "Bachau ffwythiant dosrannu",
        "version-hook-name": "Enw'r bachyn",
        "version-hook-subscribedby": "Tanysgrifwyd gan",
-       "version-version": "(Fersiwn $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[dim enw]",
        "version-license": "Trwydded MediaWiki",
        "version-ext-license": "Trwydded",
        "logentry-upload-revert": "Mae $1 {{GENDER:$2|wedi uwchlwytho}} $3",
        "rightsnone": "(dim)",
        "revdelete-summary": "crynodeb golygu",
+       "feedback-adding": "Wrthi'n ychwanegu adborth i'r dudalen...",
+       "feedback-bugcheck": "Iawn! Gwnewch yn siwr yn gyntaf nag ydy hwn yn un o'r [$1 bygiau hysbys].",
+       "feedback-bugnew": "Edrychais ar y bygiau hysbys. Mae byg newydd gennyf i'w adrodd",
        "feedback-bugornote": "Os ydych yn barod i ddisgrifio problem technegol yn fanwl gallwch [$1 gyflwyno adroddiad am y bỳg]. Fel arall, gallwch ddefnyddio'r ffurflen syml isod. Fe roddir eich sylwadau ar y dudalen \"[$3 $2]\", ynghyd â'ch enw defnyddiwr ac enw'r gweinydd sydd ar waith gennych.",
-       "feedback-subject": "Gwrthrych:",
-       "feedback-message": "Neges:",
        "feedback-cancel": "Diddymer",
-       "feedback-submit": "Cyflwyner yr Adborth",
-       "feedback-adding": "Wrthi'n ychwanegu adborth i'r dudalen...",
+       "feedback-close": "Yn barod",
        "feedback-error1": "Gwall: Canlyniad anhysbys o'r API",
        "feedback-error2": "Gwall: Methodd y golygu",
        "feedback-error3": "Gwall: Dim ymateb gan yr API",
+       "feedback-message": "Neges:",
+       "feedback-subject": "Gwrthrych:",
+       "feedback-submit": "Cyflwyner",
        "feedback-thanks": "Diolch! Gosodwyd eich adborth ar y dudalen \"[$2 $1]\".",
-       "feedback-close": "Yn barod",
-       "feedback-bugcheck": "Iawn! Gwnewch yn siwr yn gyntaf nag ydy hwn yn un o'r [$1 bygiau hysbys].",
-       "feedback-bugnew": "Edrychais ar y bygiau hysbys. Mae byg newydd gennyf i'w adrodd",
        "searchsuggest-search": "Chwilio",
        "searchsuggest-containing": "yn cynnwys...",
        "api-error-badaccess-groups": "Nid oes caniatad gennych i uwchlwytho ffeiliau ar y wici hwn.",
        "json-error-depth": "Aethpwyd dros y dyfnder mwyaf a ganiateir",
        "json-error-state-mismatch": "JSON gwallus neu annilys",
        "json-error-syntax": "Gwall mewn cystrawen",
-       "json-error-utf8": "Llythrennau UTF-8 gwallus, o boib gan godio anghywir"
+       "json-error-utf8": "Llythrennau UTF-8 gwallus, o boib gan godio anghywir",
+       "special-characters-group-latin": "Lladin",
+       "special-characters-group-latinextended": "Lladin estynedig",
+       "special-characters-group-ipa": "Yr wyddor phonetig rhyngwladol (IPA)",
+       "special-characters-group-symbols": "Symbolau",
+       "special-characters-group-greek": "Groeg",
+       "special-characters-group-cyrillic": "Cyrilig",
+       "special-characters-group-arabic": "Arabeg",
+       "special-characters-group-arabicextended": "Arabeg estynedig",
+       "special-characters-group-persian": "Perseg",
+       "special-characters-group-hebrew": "Hebraeg",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamileg",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gwjarati",
+       "special-characters-group-devanagari": "Defanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Laoseg",
+       "special-characters-group-khmer": "Chmereg",
+       "special-characters-title-endash": "heiffen en",
+       "special-characters-title-emdash": "heiffen em",
+       "special-characters-title-minus": "arwydd minws"
 }
index 988f141..6f3ab07 100644 (file)
@@ -47,7 +47,9 @@
                        "Tjernobyl",
                        "Urhixidur",
                        "아라",
-                       "Thomsen"
+                       "Thomsen",
+                       "Knud Winckelmann",
+                       "Macofe"
                ]
        },
        "tog-underline": "Understreg henvisninger:",
@@ -64,6 +66,7 @@
        "tog-watchdefault": "Tilføj sider og filer, jeg redigerer, til min overvågningsliste",
        "tog-watchmoves": "Tilføj sider og filer, jeg flytter, til min overvågningsliste",
        "tog-watchdeletion": "Tilføj sider og filer, jeg sletter, til min overvågningsliste",
+       "tog-watchrollback": "Tilføj sider, hvor jeg har udført en tilbagerulning til min overvågningsliste",
        "tog-minordefault": "Markér som standard alle redigeringer som mindre",
        "tog-previewontop": "Vis forhåndsvisning over redigeringsboksen",
        "tog-previewonfirst": "Vis forhåndsvisning ved første redigering",
        "disclaimers": "Forbehold",
        "disclaimerpage": "Project:Generelle forbehold",
        "edithelp": "Hjælp til redigering",
+       "helppage-top-gethelp": "Hjælp",
        "mainpage": "Forside",
        "mainpage-description": "Forside",
        "policy-url": "Project:Politik",
        "page-rss-feed": "\"$1\" RSS-feed",
        "page-atom-feed": "\"$1\" Atom-feed",
        "red-link-title": "$1 (siden er ikke skrevet endnu)",
-       "sort-descending": "Sorter aftagende",
+       "sort-descending": "Sorter faldende",
        "sort-ascending": "Sorter stigende",
        "nstab-main": "Side",
        "nstab-user": "Brugerside",
        "content-model-text": "almindelig tekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Tomt objekt",
+       "content-json-empty-array": "Tomt array",
        "expensive-parserfunction-warning": "Advarsel: Der er for mange beregningstunge oversætter-funktionskald på denne side.\n\nDer bør være færre end {{PLURAL:$2|$2 kald}}, lige nu er der {{PLURAL:$1|$1 kald}}.",
        "expensive-parserfunction-category": "Sider med for mange beregningstunge oversætter-funktioner",
        "post-expand-template-inclusion-warning": "Advarsel: Der er tilføjet for mange skabeloner til denne side, så nogle af dem bliver ikke vist..",
        "revdelete-show-file-confirm": "Er du sikker på, at du vil vise en slettet version af filen \"<nowiki>$1</nowiki>\" fra den $2, klokken $3?",
        "revdelete-show-file-submit": "Ja",
        "logdelete-selected": "{{PLURAL:$1|Valgt logindførsel|Valgte logindførsler}}:",
+       "revdelete-text-text": "Slettede versioner vil stadig fremgå af sidehistorikken, men dele af indholdet vil ikke være offentlig tilgængeligt.",
+       "revdelete-text-others": "Andre administratorer vil fortsat have adgang til det skjulte indhold og have mulighed for at genskabe det, med mindre andre begrænsninger er sat.",
        "revdelete-confirm": "Vær venlig at bekræfte at du vil gøre dette, at du forstår konsekvenserne, og at du gør det i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].",
        "revdelete-suppress-text": "Der bør '''kun''' skjules i de følgende tilfælde:\n* Potentielt injurierende oplysninger\n* Upassende personlige oplysninger\n*: ''hjemmeadresser og -telefonnumre, CPR-numre og lign.''",
        "revdelete-legend": "Fastlægge begrænsninger for versionerne:",
        "revdelete-hide-image": "Skjul filindhold",
        "revdelete-hide-name": "Skjul handling og mål",
        "revdelete-hide-comment": "Redigeringssammendrag",
-       "revdelete-hide-user": "Brugerens brugernavn/IP-adrsse",
+       "revdelete-hide-user": "Brugerens brugernavn/IP-adresse",
        "revdelete-hide-restricted": "Skjul også informationen for administratorer",
        "revdelete-radio-same": "(ingen ændring)",
        "revdelete-radio-set": "Skjult",
        "prefs-personal": "Brugerdata",
        "prefs-rc": "Seneste ændringer",
        "prefs-watchlist": "Overvågningsliste",
+       "prefs-editwatchlist": "Rediger overvågningsliste",
+       "prefs-editwatchlist-raw": "Rediger rå overvågningsliste",
+       "prefs-editwatchlist-clear": "Ryd din overvågningsliste",
        "prefs-watchlist-days": "Antal dage der skal vises i overvågningslisten:",
        "prefs-watchlist-days-max": "Højst $1 {{PLURAL:$1|dag|dage}}",
        "prefs-watchlist-edits": "Antal redigeringer der vises i udvidet overvågningsliste:",
        "specialpage-empty": "Der er ingen resultater at vise.",
        "lonelypages": "Forældreløse sider",
        "lonelypagestext": "Følgende sider er ikke henvist til eller inkluderet på andre sider på {{SITENAME}}:",
-       "uncategorizedpages": "Ikke kategoriserede sider",
+       "uncategorizedpages": "Ikke-kategoriserede sider",
        "uncategorizedcategories": "Ikke kategoriserede kategorier",
-       "uncategorizedimages": "Ikke kategoriserede filer",
+       "uncategorizedimages": "Ikke-kategoriserede filer",
        "uncategorizedtemplates": "Ikke kategoriserede skabeloner",
        "unusedcategories": "Ubrugte kategorier",
        "unusedimages": "Ubrugte filer",
        "protect-othertime": "Anden tid:",
        "protect-othertime-op": "anden tid",
        "protect-existing-expiry": "Nugældende udløbstid: $2 $3",
+       "protect-existing-expiry-infinity": "Eksisterende udløbstid: uendelig",
        "protect-otherreason": "Anden/uddybende årsag:",
        "protect-otherreason-op": "Anden årsag",
        "protect-dropdown": "* Almindelge besyttelsesårsager\n** Gentagen hærværk\n** Gentagen spam\n** Redigeringskrig\n** Side med mange besøgende",
        "import-rootpage-nosubpage": "Navnerummet \"$1\" tillader ikke undersider af rodsiderne.",
        "importlogpage": "Importlog",
        "importlogpagetext": "Administrativ import af sider med versionshistorik fra andre Wikis.",
-       "import-logentry-upload": "[[$1]] blev importeret",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versioner}} importeret",
-       "import-logentry-interwiki": "$1 blev importeret (Transwiki)",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versioner}} importeret fra $2",
        "javascripttest": "Test af JavaScript",
        "javascripttest-pagetext-noframework": "Denne side er reserveret til at teste JavaScript.",
        "tooltip-pt-mycontris": "Liste over dine bidrag",
        "tooltip-pt-login": "Du opfordres til at logge på, men det er ikke obligatorisk.",
        "tooltip-pt-logout": "Log af",
+       "tooltip-pt-createaccount": "Du opfordres til at oprette en konto og logge på, men det er ikke obligatorisk",
        "tooltip-ca-talk": "Diskussion om indholdet på siden",
        "tooltip-ca-edit": "Du kan redigere denne side. Brug venligst forhåndsvisning før du gemmer.",
        "tooltip-ca-addsection": "Start et nyt afsnit",
        "duplicate-defaultsort": "Advarsel: Standardsorteringsnøglen \"$2\" tilsidesætter den tidligere sorteringsnøgle \"$1\".",
        "version": "Information om MediaWiki",
        "version-extensions": "Installerede udvidelser",
-       "version-skins": "Udseender",
+       "version-skins": "Installerede udseender",
        "version-specialpages": "Specialsider",
        "version-parserhooks": "Parserfunktioner",
        "version-variables": "Variabler",
        "version-parser-function-hooks": "Parserfunktioner",
        "version-hook-name": "Navn",
        "version-hook-subscribedby": "Brugt af",
-       "version-version": "(Version $1)",
+       "version-version": "($1)",
+       "version-no-ext-name": "[intet navn]",
        "version-license": "MediaWiki Licens",
        "version-ext-license": "Licens",
        "version-ext-colheader-name": "Udvidelse",
+       "version-skin-colheader-name": "Udseende",
        "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Licens",
        "version-ext-colheader-description": "Beskrivelse",
        "version-entrypoints": "URL-adresser til indgangspunkter",
        "version-entrypoints-header-entrypoint": "Indgangspunkt",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Installerede biblioteker",
+       "version-libraries-library": "Bibliotek",
+       "version-libraries-version": "Version",
        "redirect": "Omdirigering pga. fil, bruger-, side- eller udgave-ID",
        "redirect-legend": "Omstilling til en fil eller en side",
        "redirect-summary": "Denne specialside omdirigerer til en fil (hvis filnavnet er angivet), en side (hvis udgave ID'et eller side ID'et er angivet) eller en brugerside (hvis et numerisk brugernummer er angivet). Eksempler på brug: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],[[{{#Special:Redirect}}/revision/328429]] eller [[{{#Special:Redirect}}/user/101]].",
        "tags-tag": "Tagnavn",
        "tags-display-header": "Udseende på ændringslister",
        "tags-description-header": "Beskrivelse af betydning",
+       "tags-source-header": "Kilde",
        "tags-active-header": "Aktivt?",
        "tags-hitcount-header": "Taggede ændringer",
+       "tags-actions-header": "Handlinger",
        "tags-active-yes": "Ja",
        "tags-active-no": "Nej",
        "tags-edit": "redigér",
+       "tags-delete": "slet",
+       "tags-activate": "aktiver",
+       "tags-deactivate": "deaktiver",
        "tags-hitcount": "{{PLURAL:$1|en ændring|$1 ændringer}}",
        "comparepages": "Sammenlign sider",
        "compare-page1": "Side 1",
        "revdelete-uname-unhid": "brugernavnet er ikke længere skjult",
        "revdelete-restricted": "tilføjede begrænsninger for administratorer",
        "revdelete-unrestricted": "fjernede begrænsninger for administratorer",
+       "logentry-block-block": "$1 {{GENDER:$2|blokerede}} {{GENDER:$4|$3}} med en udløbstid på $5 $6",
+       "logentry-block-reblock": "$1 {{GENDER:$2|ændrede}} blokeringsindstillinger for {{GENDER:$4|$3}} med en udløbstid på $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|ændrede}} blokeringsindstillinger for {{GENDER:$4|$3}} med en udløbstid på $5 $6",
        "logentry-move-move": "$1 {{GENDER:$2|flyttede}} siden $3 til $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|flyttede}} siden $3 til $4 uden at efterlade en omdirigering",
        "logentry-move-move_redir": "$1 {{GENDER:$2|flyttede}} siden $3 til $4 hen over en omdirigering",
        "logentry-upload-revert": "$1 {{GENDER:$2|lagde}} $3 op",
        "rightsnone": "(-)",
        "revdelete-summary": "redigeringsbeskrivelse",
+       "feedback-adding": "Tilføjer kommentar til side...",
+       "feedback-bugcheck": "Skønt! Men tjek venligst, at det ikke er en af de [$1 kendte fejl].",
+       "feedback-bugnew": "Jeg har kontrolleret. Rapporter en ny fejl.",
        "feedback-bugornote": "Hvis du er klar til at beskrive et teknisk problem i detaljer, bedes du [$1 rapportere en fejl].\nEllers kan du bruge den enkle formular nedenfor. Din kommentar vil blive tilføjet siden \"[$3 $2]\" sammen med dit brugernavn og den browser, du anvender.",
-       "feedback-subject": "Emne:",
-       "feedback-message": "Besked:",
        "feedback-cancel": "Afbryd",
-       "feedback-submit": "Send kommentar",
-       "feedback-adding": "Tilføjer kommentar til side...",
+       "feedback-close": "Færdig",
        "feedback-error1": "Fejl: Ukendt resultat fra API",
        "feedback-error2": "Fejl: Redigering mislykkedes",
        "feedback-error3": "Fejl: Intet svar fra API",
+       "feedback-message": "Besked:",
+       "feedback-subject": "Emne:",
+       "feedback-submit": "Send",
        "feedback-thanks": "Tak! Dine tilbagemeldinger er blevet noteret på siden \"[$2 $1]\".",
-       "feedback-close": "Færdig",
-       "feedback-bugcheck": "Skønt! Men tjek venligst, at det ikke er en af de [$1 kendte fejl].",
-       "feedback-bugnew": "Jeg har kontrolleret. Rapporter en ny fejl.",
        "searchsuggest-search": "Søg",
        "searchsuggest-containing": "indeholder...",
        "api-error-badaccess-groups": "Du har ikke tilladelse til at overføre filer til denne wiki.",
        "mediastatistics-header-text": "Tekstformat",
        "mediastatistics-header-executable": "Kørbare filer",
        "mediastatistics-header-archive": "Komprimerede formater",
-       "json-error-syntax": "Syntaksfejl"
+       "json-error-syntax": "Syntaksfejl",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Udvidet latin",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symboler",
+       "special-characters-group-greek": "Græsk",
+       "special-characters-group-cyrillic": "Kyrillisk",
+       "special-characters-group-arabic": "Arabisk",
+       "special-characters-group-arabicextended": "Udvidet arabisk",
+       "special-characters-group-persian": "Persisk",
+       "special-characters-group-hebrew": "Hebraisk",
+       "special-characters-group-bangla": "Bengali",
+       "special-characters-group-tamil": "Tamilsk",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalesisk",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Laotisk",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "tankestreg",
+       "special-characters-title-emdash": "lang tankestreg",
+       "special-characters-title-minus": "minustegn"
 }
index 9bff753..2be71ee 100644 (file)
@@ -95,7 +95,7 @@
        "tog-watchrollback": "Seiten, bei denen ich eine Zurücksetzung durchgeführt habe, automatisch beobachten",
        "tog-minordefault": "Eigene Änderungen standardmäßig als geringfügig markieren",
        "tog-previewontop": "Vorschau oberhalb des Bearbeitungsfensters anzeigen",
-       "tog-previewonfirst": "Beim ersten Bearbeiten immer die Vorschau anzeigen",
+       "tog-previewonfirst": "Vorschau beim ersten Bearbeiten immer anzeigen",
        "tog-enotifwatchlistpages": "Bei Änderungen an beobachteten Seiten oder Dateien E-Mails senden",
        "tog-enotifusertalkpages": "Bei Änderungen an meiner Benutzer-Diskussionsseite E-Mails senden",
        "tog-enotifminoredits": "Auch bei kleinen Änderungen an Seiten und Dateien E-Mails senden",
        "disclaimers": "Impressum",
        "disclaimerpage": "Project:Impressum",
        "edithelp": "Bearbeitungshilfe",
+       "helppage-top-gethelp": "Hilfe",
        "mainpage": "Hauptseite",
        "mainpage-description": "Hauptseite",
        "policy-url": "Project:Richtlinien",
        "readonly_lag": "Die Datenbank wurde automatisch für Schreibzugriffe gesperrt, damit sich die verteilten Datenbankserver (slaves) mit dem Hauptdatenbankserver (master) abgleichen können.",
        "internalerror": "Interner Fehler",
        "internalerror_info": "Interner Fehler: $1",
+       "internalerror-fatal-exception": "Fataler Ausnahmefehler des Typs „$1“",
        "filecopyerror": "Die Datei „$1“ konnte nicht nach „$2“ kopiert werden.",
        "filerenameerror": "Die Datei „$1“ konnte nicht nach „$2“ umbenannt werden.",
        "filedeleteerror": "Die Datei „$1“ konnte nicht gelöscht werden.",
        "wrongpassword": "Das Passwort ist falsch. Bitte versuche es erneut.",
        "wrongpasswordempty": "Es wurde kein Passwort eingegeben. Bitte versuche es erneut.",
        "passwordtooshort": "Passwörter müssen mindestens {{PLURAL:$1|1 Zeichen|$1 Zeichen}} lang sein.",
+       "passwordtoolong": "Passwörter können nicht länger als {{PLURAL:$1|ein|$1}} Zeichen sein.",
        "password-name-match": "Dein Passwort muss sich von deinem Benutzernamen unterscheiden.",
        "password-login-forbidden": "Die Verwendung dieses Benutzernamens und Passwortes ist nicht erlaubt.",
        "mailmypassword": "Passwort zurücksetzen",
        "showpreview": "Vorschau zeigen",
        "showdiff": "Änderungen zeigen",
        "blankarticle": "<strong>Warnung:</strong> Die Seite, die du erstellst, ist leer.\nWenn du erneut auf „{{int:savearticle}}“ klickst, wird die Seite ohne Inhalt erstellt.",
-       "anoneditwarning": "<strong>Warnung:</strong> Du bist nicht angemeldet. Deine IP-Adresse wird öffentlich sichtbar, falls du Bearbeitungen durchführst. Wenn du dich <strong>[$1 anmeldest]</strong> oder <strong>[$2 ein Benutzerkonto erstellst]</strong>, werden deine Bearbeitungen zusammen mit anderen Beiträgen deinem Benutzernamen zugeordnet.",
+       "anoneditwarning": "<strong>Warnung:</strong> Du bist nicht angemeldet. Deine IP-Adresse wird öffentlich sichtbar, falls du Bearbeitungen durchführst. Sofern du dich <strong>[$1 anmeldest]</strong> oder <strong>[$2 ein Benutzerkonto erstellst]</strong>, werden deine Bearbeitungen zusammen mit anderen Beiträgen deinem Benutzernamen zugeordnet.",
        "anonpreviewwarning": "''Du bist nicht angemeldet. Beim Speichern wird deine IP-Adresse in der Versionsgeschichte aufgezeichnet.''",
        "missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
        "selfredirect": "<strong>Warnung:</strong> Du leitest auf diese Seite selbst weiter.\nDu hast vermutlich das falsche Weiterleitungsziel angegeben oder du bearbeitest die falsche Seite.\nWenn du erneut auf „{{int:savearticle}}“ klickst, wird die Weiterleitung dennoch erstellt.",
        "missingcommentheader": "'''Achtung:''' Du hast kein Betreff/Überschrift eingegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Bearbeitung ohne Überschrift gespeichert.",
        "summary-preview": "Vorschau der Zusammenfassungszeile:",
        "subject-preview": "Vorschau der Zusammenfassungszeile:",
+       "previewerrortext": "Beim Versuch, eine Vorschau deiner Änderungen anzuzeigen, ist ein Fehler aufgetreten.",
        "blockedtitle": "Benutzer ist gesperrt",
        "blockedtext": "'''Dein Benutzername oder deine IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde vom Administrator $1 durchgeführt.\nAls Grund wurde ''$2'' angegeben.\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nDu kannst die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\nDeine aktuelle IP-Adresse ist $3 und die Sperrkennung lautet $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
        "autoblockedtext": "Deine IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.\nAls Grund wurde angegeben:\n\n:''$2''\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\n\nDu kannst die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\n\nDeine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
        "newarticletext": "Du bist einem Link zu einer Seite gefolgt, die nicht vorhanden ist.\nUm diese Seite anzulegen, trage deinen Text in das untenstehende Bearbeitungsfeld ein (weitere Informationen auf der [$1 Hilfeseite]).\nSofern du fälschlicherweise hier bist, klicke auf die Schaltfläche '''Zurück''' deines Browsers.",
        "anontalkpagetext": "----''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Es wird seine IP-Adresse zur Identifizierung verwendet. IP-Adressen können von mehreren Benutzern gemeinsam verwendet werden. Wenn du mit den Kommentaren auf dieser Seite nichts anfangen kannst, richten sie sich vermutlich an einen früheren Inhaber deiner IP-Adresse und du kannst sie ignorieren. Du kannst dir auch ein [[Special:UserLogin/signup|Benutzerkonto erstellen]] oder dich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.''",
        "noarticletext": "Diese Seite enthält momentan noch keinen Text.\nDu kannst sie <span class=\"plainlinks\">[{{fullurl:{{FULLPAGENAME}}|action=edit}} bearbeiten]</span>,\nihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]]\noder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten]</span>.",
-       "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text, du bist auch nicht berechtigt diese Seite zu erstellen.\nDu kannst ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>",
+       "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text und du bist auch nicht dazu berechtigt, diese Seite zu erstellen.\nDu kannst ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>",
        "missing-revision": "Die Version $1 der Seite namens „{{FULLPAGENAME}}“ ist nicht vorhanden.\n\nDieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.\nEinzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch] einsehbar.",
        "userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.",
        "userpage-userdoesnotexist-view": "Das Benutzerkonto „$1“ ist nicht vorhanden.",
        "templatesusedsection": "{{PLURAL:$1|Die folgende Vorlage wird|Folgende Vorlagen werden}} in diesem Abschnitt verwendet:",
        "template-protected": "(schreibgeschützt)",
        "template-semiprotected": "(schreibgeschützt für unangemeldete und neue Benutzer)",
-       "hiddencategories": "Diese Seite ist Mitglied von {{PLURAL:$1|1 versteckter Kategorie|$1 versteckten Kategorien}}:",
+       "hiddencategories": "Diese Seite ist in {{PLURAL:$1|1 versteckter Kategorie|$1 versteckten Kategorien}} enthalten:",
        "edittools": "<!-- Dieser Text wird unter dem „Bearbeiten“-Formular sowie dem „Hochladen“-Formular angezeigt. -->",
        "nocreatetext": "Auf {{SITENAME}} wurde das Erstellen neuer Seiten eingeschränkt. Du kannst bestehende Seiten ändern oder dich [[Special:UserLogin|anmelden]].",
        "nocreate-loggedin": "Du hast nicht die erforderliche Berechtigung, um neue Seiten erstellen zu können.",
        "notextmatches": "Keine Übereinstimmungen mit Inhalten",
        "prevn": "{{PLURAL:$1|vorheriger|vorherige $1}}",
        "nextn": "{{PLURAL:$1|nächster|nächste $1}}",
+       "prev-page": "vorherige Seite",
+       "next-page": "nächste Seite",
        "prevn-title": "{{PLURAL:$1|Vorheriges Ergebnis|Vorherige $1 Ergebnisse}}",
        "nextn-title": "{{PLURAL:$1|Folgendes Ergebnis|Folgende $1 Ergebnisse}}",
        "shown-title": "Zeige $1 {{PLURAL:$1|Ergebnis|Ergebnisse}} pro Seite",
        "right-bot": "Behandlung als automatischer Prozess",
        "right-nominornewtalk": "Kleine Bearbeitungen an Diskussionsseiten führen zu keiner „Neue Nachrichten“-Anzeige",
        "right-apihighlimits": "Höhere Limits in API-Abfragen",
-       "right-writeapi": "Benutzung der writeAPI",
+       "right-writeapi": "Benutzung der API mit Schreibzugriff",
        "right-delete": "Seiten löschen",
        "right-bigdelete": "Seiten mit großer Versionsgeschichte löschen",
        "right-deletelogentry": "Einzelne Logbuch-Einträge löschen und wiederherstellen",
        "recentchangeslinked-feed": "Änderungen an verlinkten Seiten",
        "recentchangeslinked-toolbox": "Änderungen an verlinkten Seiten",
        "recentchangeslinked-title": "Änderungen an Seiten, die von „$1“ verlinkt sind",
-       "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. bei Kategorien an den Mitgliedern dieser Kategorie). Seiten auf deiner [[Special:Watchlist|Beobachtungsliste]] sind '''fett''' dargestellt.",
+       "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. an in dieser Kategorie enthaltenen Kategorien). Seiten auf deiner [[Special:Watchlist|Beobachtungsliste]] sind <strong>fett</strong> dargestellt.",
        "recentchangeslinked-page": "Seite:",
-       "recentchangeslinked-to": "Zeige nur Änderungen auf Seiten, die auf diese Seite verlinken",
+       "recentchangeslinked-to": "Zeige nur Änderungen an Seiten, die auf diese Seite verlinken",
        "upload": "Datei hochladen",
        "uploadbtn": "Datei hochladen",
        "reuploaddesc": "Abbrechen und zurück zur Hochladen-Seite",
        "imagelinks": "Dateiverwendung",
        "linkstoimage": "Die {{PLURAL:$1|folgende Seite verwendet|folgenden $1 Seiten verwenden}} diese Datei:",
        "linkstoimage-more": "Mehr als {{PLURAL:$1|eine Seite verlinkt|$1 Seiten verlinken}} auf diese Datei.\nDie folgende Liste zeigt nur {{PLURAL:$1|den ersten Link|die ersten $1 Links}} auf diese Datei.\nEine [[Special:WhatLinksHere/$2|vollständige Liste]] ist verfügbar.",
-       "nolinkstoimage": "Keine Seite benutzt diese Datei.",
+       "nolinkstoimage": "Diese Datei wird auf keiner Seite verwendet.",
        "morelinkstoimage": "[[Special:WhatLinksHere/$1|Weitere Links]] auf diese Datei.",
        "linkstoimage-redirect": "$1 (Dateiweiterleitung) $2",
        "duplicatesoffile": "Die {{PLURAL:$1|folgende Datei ist ein Duplikat|folgenden $1 Dateien sind Duplikate}} dieser Datei ([[Special:FileDuplicateSearch/$2|weitere Details]]):",
        "unusedimages": "Verwaiste Dateien",
        "wantedcategories": "Gewünschte Kategorien",
        "wantedpages": "Gewünschte Seiten",
+       "wantedpages-summary": "Liste nicht vorhandener Seiten mit den meisten Links auf diese Seiten, ausschließlich solche, die nur Weiterleitungen haben. Für eine Liste nicht vorhandener Seiten mit Weiterleitungen, siehe [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Ungültiger Titel im Ergebnis: $1",
        "wantedfiles": "Gewünschte Dateien",
        "wantedfiletext-cat": "Die folgenden Dateien werden verwendet, sind jedoch nicht vorhanden. Vorhandene Dateien aus fremden Repositorien können dennoch hier aufgelistet sein und werden <del>durchgestrichen</del> dargestellt. Zusätzlich werden Seiten, die nicht vorhandene Dateien enthalten, in die [[:$1]] eingeordnet.",
        "emailccsubject": "Kopie deiner Nachricht an $1: $2",
        "emailsent": "E-Mail verschickt",
        "emailsenttext": "Deine E-Mail wurde verschickt.",
-       "emailuserfooter": "Diese E-Mail wurde von {{SITENAME}}-Benutzer „$1“ an „$2“ gesendet.",
+       "emailuserfooter": "Diese E-Mail wurde von „$1“ an „$2“ durch die Funktion „{{int:emailpage}}“ bei {{SITENAME}} gesendet.",
        "usermessage-summary": "Systemnachricht gespeichert.",
        "usermessage-editor": "System-Messenger",
        "usermessage-template": "MediaWiki:Benutzernachricht",
        "delete-toobig": "Diese Seite hat mit mehr als $1 {{PLURAL:$1|Version|Versionen}} eine sehr lange Versionsgeschichte. Das Löschen solcher Seiten wurde eingeschränkt, um eine versehentliche Überlastung der Server zu verhindern.",
        "delete-warning-toobig": "Diese Seite hat mit mehr als $1 {{PLURAL:$1|Version|Versionen}} eine sehr lange Versionsgeschichte. Das Löschen kann zu Störungen im Datenbankbetrieb führen.",
        "deleteprotected": "Du kannst diese Seite nicht löschen, da sie geschützt wurde.",
-       "deleting-backlinks-warning": "'''Warnung:''' Es verweisen noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere Seiten]] auf die zu löschende Seite oder diese Seite ist noch woanders eingebunden.",
+       "deleting-backlinks-warning": "'''Warnung:''' Es verweisen noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere Seiten]] auf diese zu löschende Seite oder sie ist noch an anderer Stelle eingebunden.",
        "rollback": "Zurücksetzen der Änderungen",
        "rollbacklink": "Zurücksetzen",
        "rollbacklinkcount": "{{PLURAL:$1|Eine Version|$1 Versionen}} zurücksetzen",
        "sp-contributions-uploads": "Hochgeladene Dateien",
        "sp-contributions-logs": "Logbücher",
        "sp-contributions-talk": "Diskussion",
-       "sp-contributions-userrights": "Benutzerrechteverwaltung",
+       "sp-contributions-userrights": "Benutzerrechte­verwaltung",
        "sp-contributions-blocked-notice": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist derzeit gesperrt. Es folgt der aktuelle Eintrag aus dem Benutzersperr-Logbuch:",
        "sp-contributions-blocked-notice-anon": "Diese IP-Adresse ist zurzeit gesperrt.\nZur Information folgt der aktuelle Auszug aus dem Sperr-Logbuch:",
        "sp-contributions-search": "Suche nach Benutzerbeiträgen",
        "whatlinkshere": "Links auf diese Seite",
        "whatlinkshere-title": "Seiten, die auf „$1“ verlinken",
        "whatlinkshere-page": "Seite:",
-       "linkshere": "Die folgenden Seiten verlinken auf '''„[[:$1]]“''':",
+       "linkshere": "Die folgenden Seiten verlinken auf <strong>[[:$1]]</strong>:",
        "nolinkshere": "Keine Seite verlinkt auf '''„[[:$1]]“'''.",
        "nolinkshere-ns": "Keine Seite verlinkt auf '''„[[:$1]]“''' im gewählten Namensraum.",
        "isredirect": "Weiterleitungsseite",
        "blockipsuccesstext": "Der Benutzer / die IP-Adresse [[Special:Contributions/$1|$1]] wurde gesperrt.<br />\nZur Aufhebung der Sperre siehe die [[Special:BlockList|Liste aller aktiven Sperren]].",
        "ipb-blockingself": "Du bist gerade dabei, dich selbst zu sperren! Möchtest du das wirklich tun?",
        "ipb-confirmhideuser": "Du bist gerade dabei, einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchtest du das wirklich tun?",
-       "ipb-confirmaction": "Wenn du dir sicher bist, dass du dies wirklich tun möchtest, überprüfe bitte unten das Feld „{{int:ipb-confirm}}“.",
+       "ipb-confirmaction": "Wenn du dir sicher bist, dass du dies wirklich tun möchtest, kreuze bitte unten das Feld „{{int:ipb-confirm}}“ an.",
        "ipb-edit-dropdown": "Sperrgründe bearbeiten",
        "ipb-unblock-addr": "„$1“ freigeben",
        "ipb-unblock": "IP-Adresse/Benutzer freigeben",
        "thumbnail_image-missing": "Datei scheint fehlend zu sein: $1",
        "thumbnail_image-failure-limit": "Es wurden in letzter Zeit zu viele Versuche ($1 oder mehr) unternommen, dieses Vorschaubild zu rendern. Bitte versuche es später erneut.",
        "import": "Seiten importieren",
-       "importinterwiki": "Transwiki-Import",
-       "import-interwiki-text": "Wähle ein Wiki und eine Seite zum Importieren aus.\nDie Versionsdaten und Benutzernamen bleiben dabei erhalten.\nAlle Transwiki-Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] protokolliert.",
+       "importinterwiki": "Von einem anderen Wiki importieren",
+       "import-interwiki-text": "Wähle ein Wiki und eine Seite zum Importieren aus.\nDie Versionsdaten und Benutzernamen bleiben dabei erhalten.\nAlle Importe von anderen Wikis werden im [[Special:Log/import|Import-Logbuch]] protokolliert.",
        "import-interwiki-sourcewiki": "Quellwiki:",
        "import-interwiki-sourcepage": "Quellseite:",
        "import-interwiki-history": "Alle Versionen dieser Seite importieren",
        "importstart": "Importiere Seite …",
        "import-revision-count": "– {{PLURAL:$1|1 Version|$1 Versionen}}",
        "importnopages": "Keine Seite zum Importieren vorhanden.",
-       "imported-log-entries": "$1 {{PLURAL:$1|lLogbucheintrag|Logbucheinträge}} importiert.",
+       "imported-log-entries": "$1 {{PLURAL:$1|Logbucheintrag|Logbucheinträge}} importiert.",
        "importfailed": "Import fehlgeschlagen: $1",
        "importunknownsource": "Unbekannte Importquelle",
        "importcantopen": "Importdatei konnte nicht geöffnet werden",
        "importbadinterwiki": "Falscher Interwiki-Link",
        "importsuccess": "Import abgeschlossen.",
-       "importnosources": "Für den Transwiki-Import sind keine Quellen definiert. Das direkte Hochladen von Versionen ist gesperrt.",
+       "importnosources": "Es wurden keine Wikis angegeben, von denen importiert werden soll. Das direkte Hochladen von Versionsgeschichten ist deaktiviert.",
        "importnofile": "Es ist keine Importdatei ausgewählt worden.",
        "importuploaderrorsize": "Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei ist größer als die maximal erlaubte Dateigröße.",
        "importuploaderrorpartial": "Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei wurde nur teilweise hochgeladen.",
        "import-rootpage-nosubpage": "Im Namensraum „$1“ der Stammseite sind keine Unterseiten erlaubt.",
        "importlogpage": "Import-Logbuch",
        "importlogpagetext": "Administrativer Import von Seiten mit Versionsgeschichte von anderen Wikis.",
-       "import-logentry-upload": "importierte „[[$1]]“ von einer Datei",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versionen}} importiert",
-       "import-logentry-interwiki": "importierte „$1“ (Transwiki)",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versionen}} von $2 importiert",
        "javascripttest": "JavaScript-Test",
        "javascripttest-pagetext-noframework": "Diese Seite ist JavaSkript-Tests vorbehalten.",
        "tooltip-pt-preferences": "Eigene Einstellungen",
        "tooltip-pt-watchlist": "Liste der beobachteten Seiten",
        "tooltip-pt-mycontris": "Liste eigener Beiträge",
-       "tooltip-pt-login": "Sich anzumelden wird zwar gerne gesehen, ist aber keine Pflicht.",
+       "tooltip-pt-login": "Sich anzumelden wird gerne gesehen, ist jedoch nicht zwingend erforderlich.",
        "tooltip-pt-logout": "Abmelden",
-       "tooltip-pt-createaccount": "Du wirst ermuntert, ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht verpflichtend.",
+       "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": "Seite bearbeiten. Bitte vor dem Speichern die Vorschaufunktion benutzen.",
+       "tooltip-ca-edit": "Du kannst diese Seite bearbeiten. Bitte nutze die Vorschaufunktion vor dem Speichern.",
        "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",
        "tooltip-n-mainpage-description": "Hauptseite besuchen",
        "tooltip-n-portal": "Über das Projekt, was du tun kannst, wo was zu finden ist",
        "tooltip-n-currentevents": "Hintergrundinformationen zu aktuellen Ereignissen",
-       "tooltip-n-recentchanges": "Liste der letzten Änderungen in {{SITENAME}}",
+       "tooltip-n-recentchanges": "Liste der letzten Änderungen in diesem Wiki",
        "tooltip-n-randompage": "Zufällige Seite aufrufen",
        "tooltip-n-help": "Hilfeseite anzeigen",
        "tooltip-t-whatlinkshere": "Liste aller Seiten, die hierher verlinken",
        "tooltip-t-recentchangeslinked": "Letzte Änderungen an Seiten, die von hier verlinkt sind",
        "tooltip-feed-rss": "RSS-Feed dieser Seite",
        "tooltip-feed-atom": "Atom-Feed dieser Seite",
-       "tooltip-t-contributions": "Liste der Beiträge von diesem Benutzer ansehen",
+       "tooltip-t-contributions": "Liste der Beiträge dieses Benutzers ansehen",
        "tooltip-t-emailuser": "Eine E-Mail an diesen Benutzer senden",
        "tooltip-t-info": "Weitere Informationen über diese Seite",
        "tooltip-t-upload": "Dateien hochladen",
        "spam_reverting": "Letzte Version ohne Links zu $1 wiederhergestellt.",
        "spam_blanking": "Alle Versionen mit einem Link zu $1 wurden bereinigt.",
        "spam_deleting": "Alle Versionen mit einem Link zu $1 wurden gelöscht.",
-       "simpleantispam-label": "Spamschutzprüfung.\nHier '''NICHTS''' eintragen!",
+       "simpleantispam-label": "Spamschutzprüfung.\nHier <strong>NICHTS</strong> eintragen!",
        "pageinfo-title": "Informationen zu „$1“",
        "pageinfo-not-current": "Diese Information kann leider nicht für alte Versionen zur Verfügung gestellt werden.",
        "pageinfo-header-basic": "Basisinformationen",
        "pageinfo-hidden-categories": "Versteckte {{PLURAL:$1|Kategorie|Kategorien}} ($1)",
        "pageinfo-templates": "Eingebundene {{PLURAL:$1|Vorlage|Vorlagen}} ($1)",
        "pageinfo-transclusions": "Eingebunden in {{PLURAL:$1|1 Seite|$1 Seiten}}",
-       "pageinfo-toolboxlink": "Seiteninformationen",
+       "pageinfo-toolboxlink": "Seiten­informationen",
        "pageinfo-redirectsto": "Weiterleitungen nach",
        "pageinfo-redirectsto-info": "Information",
        "pageinfo-contentpage": "Gezählt als eine Inhaltsseite",
        "file-info": "Dateigröße: $1, MIME-Typ: $2",
        "file-info-size": "$1 × $2 Pixel, Dateigröße: $3, MIME-Typ: $4",
        "file-info-size-pages": "$1 × $2 Pixel, Dateigröße: $3, MIME-Typ: $4, $5 {{PLURAL:$5|Seite| Seiten}}",
-       "file-nohires": "Keine höhere Auflösung vorhanden.",
+       "file-nohires": "Es ist keine höhere Auflösung vorhanden.",
        "svg-long-desc": "SVG-Datei, Basisgröße: $1 × $2 Pixel, Dateigröße: $3",
        "svg-long-desc-animated": "Animierte SVG-Datei, Basisgröße $1 × $2 Pixel, Dateigröße: $3",
        "svg-long-error": "Ungültige SVG-Datei: $1",
        "fileduplicatesearch-noresults": "Es wurde keine Datei namens „$1“ gefunden.",
        "specialpages": "Spezialseiten",
        "specialpages-note-top": "Legende",
-       "specialpages-note": "* Normale Spezialseiten.\n* <span class=\"mw-specialpagerestricted\">Spezialseiten mit beschränktem Zugang.</span>",
+       "specialpages-note": "* Reguläre Spezialseiten\n* <span class=\"mw-specialpagerestricted\">Zugriffsbeschränkte Spezialseiten</span>",
        "specialpages-group-maintenance": "Wartungslisten",
        "specialpages-group-other": "Andere Spezialseiten",
        "specialpages-group-login": "Benutzerkonto",
        "revdelete-uname-unhid": "Benutzername freigegeben",
        "revdelete-restricted": "Einschränkungen gelten auch für Administratoren",
        "revdelete-unrestricted": "Einschränkungen für Administratoren aufgehoben",
+       "logentry-block-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} für eine Dauer von $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|hat}} die Sperre von {{GENDER:$4|$3}} aufgehoben",
+       "logentry-block-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|importierte}} $3 durch das Hochladen einer Datei",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|importierte}} $3 aus einem anderen Wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|vereinigte}} $3 in die Seite „$4“ (Versionen bis zum $5)",
        "logentry-move-move": "$1 {{GENDER:$2|verschob}} die Seite $3 nach $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|verschob}} die Seite $3 nach $4, ohne dabei eine Weiterleitung anzulegen",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|deaktivierte}} die Markierung „$4“ zur Verwendung durch Benutzer und Bots",
        "rightsnone": "(–)",
        "revdelete-summary": "Zusammenfassungskommentar",
+       "feedback-adding": "Rückmeldung wird zur Seite hinzugefügt …",
+       "feedback-back": "Zurück",
+       "feedback-bugcheck": "Super! Bitte überprüfe noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.",
+       "feedback-bugnew": "Ich habe es überprüft. Den neuen Fehler melden.",
        "feedback-bugornote": "Sofern du detailliert ein technisches Problem beschreiben möchtest, melde bitte [$1 einen Fehler].\nAnderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kommentar wird, zusammen mit deinem Benutzernamen und der Version des von dir verwendeten Webbrowsers sowie Betriebssystems, auf der Seite „[$3 $2]“ hinzugefügt.",
-       "feedback-subject": "Betreff:",
-       "feedback-message": "Nachricht:",
        "feedback-cancel": "Abbrechen",
-       "feedback-submit": "Rückmeldung senden",
-       "feedback-adding": "Rückmeldung wird zur Seite hinzugefügt …",
+       "feedback-close": "Erledigt",
+       "feedback-external-bug-report-button": "Eine technische Aufgabe einreichen",
+       "feedback-dialog-title": "Rückmeldung senden",
+       "feedback-dialog-intro": "Du kannst das einfache Formular unten verwenden, um deine Rückmeldung einzureichen. Dein Kommentar wird zusammen mit deinem Benutzernamen zur Seite „$1“ hinzugefügt.",
+       "feedback-error-title": "Fehler",
        "feedback-error1": "Fehler: Unbekanntes Ergebnis der API",
        "feedback-error2": "Fehler: Bearbeitung gescheitert",
        "feedback-error3": "Fehler: Keine Antwort von der API",
+       "feedback-error4": "Fehler: Der Beitrag konnte nicht unter dem angegebenen Rückmeldungstitel gespeichert werden",
+       "feedback-message": "Nachricht:",
+       "feedback-subject": "Betreff:",
+       "feedback-submit": "Senden",
+       "feedback-terms": "Ich akzeptiere, dass mein User Agent Informationen über meinen Browser und meine Betriebssystemversion enthält, die zusammen mit meiner Rückmeldung veröffentlicht werden.",
+       "feedback-termsofuse": "Ich erlaube das Übermitteln der Rückmeldung in Übereinstimmung mit den Nutzungsbedingungen.",
        "feedback-thanks": "Vielen Dank. Deine Rückmeldung wurde auf der Seite „[$2 $1]“ gespeichert.",
-       "feedback-close": "Erledigt",
-       "feedback-bugcheck": "Super! Bitte überprüfe noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.",
-       "feedback-bugnew": "Ich habe es überprüft. Den neuen Fehler melden.",
+       "feedback-thanks-title": "Danke!",
+       "feedback-useragent": "User Agent:",
        "searchsuggest-search": "Suchen",
        "searchsuggest-containing": "enthält …",
        "api-error-badaccess-groups": "Du hast nicht die Berechtigung Dateien in dieses Wiki hochzuladen.",
        "log-name-pagelang": "Sprachenänderungs-Logbuch",
        "log-description-pagelang": "Dies ist ein Logbuch mit Änderungen an Seitensprachen.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|änderte}} die Seitensprache für $3 von $4 nach $5.",
-       "default-skin-not-found": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\nDie folgende(n) Benutzeroberfläche(n) scheinen vorhanden zu sein:\n\n$2\n\nSiehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].\n\n; Sofern du MediaWiki gerade installiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* eines der Repositorien aus <code>mediawiki/skins/*</code> mit Hilfe von Git in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation klonst,\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n\n; Sofern du MediaWiki gerade aktualisiert hast\n: Bei MediaWiki 1.24 und neuere Versionen werden die installierten Benutzeroberflächen nicht mehr automatisch aktiviert (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die folgenden Zeilen in die Datei <code>LocalSettings.php</code> einfügen, um alle derzeit installierten Benutzeroberflächen zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade die Datei <code>LocalSettings.php</code> geändert hast\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
+       "default-skin-not-found": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\n{{PLURAL:$4|Die folgende Benutzeroberfläche scheint|Die folgenden Benutzeroberflächen scheinen}} vorhanden zu sein:\n\n$2\n\nSiehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].\n\n; Sofern du MediaWiki gerade installiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* eines der Repositorien aus <code>mediawiki/skins/*</code> mit Hilfe von Git in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation klonst,\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n\n; Sofern du MediaWiki gerade aktualisiert hast\n: Bei MediaWiki 1.24 und neueren Versionen werden die installierten Benutzeroberflächen nicht mehr automatisch aktiviert (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die {{PLURAL:$5|folgende Zeile|folgenden Zeilen}} in die Datei <code>LocalSettings.php</code> einfügen, um {{PLURAL:$5|die derzeit installierte Benutzeroberfläche|alle derzeit installierten Benutzeroberflächen}} zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade die Datei <code>LocalSettings.php</code> geändert hast\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
        "default-skin-not-found-no-skins": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\nDu hast keine Benutzeroberfläche installiert.\n\n; Sofern du MediaWiki gerade installiert oder aktualisiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten, da MediaWiki 1.24 und neuere Versionen keine Benutzeroberflächen im Hauptrepositorium enthalten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* eines der Repositorien aus <code>mediawiki/skins/*</code> mit Hilfe von Git in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation klonst,\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n: Siehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiviert)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''deaktiviert''')",
        "json-error-utf8": "Fehlerhafte UTF-8-Zeichen, vermutlich falsch kodiert",
        "json-error-recursion": "Eine oder mehrere zu kodierende rekursive Referenzen im Wert",
        "json-error-inf-or-nan": "Eine oder mehrere zu kodierende NAN- oder INF-Werte im Wert",
-       "json-error-unsupported-type": "Ein Wert eines Typs, der nicht kodiert werden kann, wurde angegeben"
+       "json-error-unsupported-type": "Ein Wert eines Typs, der nicht kodiert werden kann, wurde angegeben",
+       "headline-anchor-title": "Link zu diesem Abschnitt",
+       "special-characters-group-latin": "Lateinisch",
+       "special-characters-group-latinextended": "Lateinisch, erweitert",
+       "special-characters-group-ipa": "Internationales Phonetisches Alphabet (IPA)",
+       "special-characters-group-symbols": "Symbole",
+       "special-characters-group-greek": "Griechisch",
+       "special-characters-group-cyrillic": "Kyrillisch",
+       "special-characters-group-arabic": "Arabisch",
+       "special-characters-group-arabicextended": "Arabisch, erweitert",
+       "special-characters-group-persian": "Persisch",
+       "special-characters-group-hebrew": "Hebräisch",
+       "special-characters-group-bangla": "Bengalisch",
+       "special-characters-group-tamil": "Tamilisch",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singhalesisch",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thailändisch",
+       "special-characters-group-lao": "Laotisch",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "Halbgeviertstrich",
+       "special-characters-title-emdash": "Geviertstrich",
+       "special-characters-title-minus": "Minus"
 }
index 7320c0c..e4f40e8 100644 (file)
@@ -20,7 +20,8 @@
                        "Geitost",
                        "Microchip08",
                        "아라",
-                       "Calak"
+                       "Calak",
+                       "Macofe"
                ]
        },
        "tog-underline": "Bınê gırey de xete bance:",
        "hidetoc": "bınımne",
        "collapsible-collapse": "Kılm ke",
        "collapsible-expand": "Hera ke",
-       "thisisdeleted": "Bıvêne ya zi $1 peyser bia?",
+       "thisisdeleted": "Bıvêne ya zi $1 peyser biya?",
        "viewdeleted": "$1 bıvêne?",
        "restorelink": "{{PLURAL:$1|jew vurnayış besteriya|$1 vurnayışi besteriyaye}}",
        "feedlinks": "Warikerdış:",
        "sort-ascending": "Rêzkerdışo zêdiyaye",
        "nstab-main": "Wesiqe",
        "nstab-user": "Pela karberi",
-       "nstab-media": "Pera Medya",
+       "nstab-media": "Pela medya",
        "nstab-special": "Pela xase",
        "nstab-project": "Pela procey",
        "nstab-image": "Dosya",
        "readonly": "database kılit biyo",
        "enterlockreason": "Database kılit biyo",
        "readonlytext": "Qey pawıtış ri yew sebeb vace. Texmini yew tarix vace şıma key pawıtış wedarneni:  $1",
-       "missing-article": "Banqa, pela be namê \"$1\" $2 ke gunê bıbo, nêdiye.\n\nEna belki seba yew vurnayışo kıhan ya zi tarixê gırê yew pele esteriya.\n\nEke wına niyo, belki ''software''i de yew xeta esta.\nKerem kerê, naye be namey ''URL''i yew [[Special:ListUsers/sysop|karber]]i ra vacê.",
+       "missing-article": "Banqa, pela be nameyê \"$1\" $2 ke gani bıbo, nêdiye.\n\nEna belki seba yew vurnayışo kıhan ya zi tarixê gıreyê yew pele esteriya.\n\nEke wına niyo, belki ''software'' de yew xeta esta.\nKerem kerên, naye be nameyê ''URL''yi yew [[Special:ListUsers/sysop|karber]]i ra vacên.",
        "missingarticle-rev": "(rewizyon#: $1)",
        "missingarticle-diff": "(Ferq: $1, $2)",
        "readonly_lag": "Daegeh (database) otomatikmen kılit bi, sureo ke  daegehê bınêni resay daegehê serêni.",
        "wrongpasswordempty": "Parola tola, venga. tekrar bınuse.",
        "passwordtooshort": "Paroley gani tewr senık be {{PLURAL:$1|1 karakter|$1 karakteran}} derg bê.",
        "password-name-match": "Parola u nameyê şıma gani zeypê (seypê) nêbo.",
-       "password-login-forbidden": "No namey karberi u parola karkerdışê cı  kerdo xırab.",
+       "password-login-forbidden": "Nameyê nê karberi û gurenayışê parola biyo qedeğen.",
        "mailmypassword": "Parola reset ke",
        "passwordremindertitle": "Qandê {{SITENAME}}'i idareten parolaya newiye",
        "passwordremindertext": "Yew ten (muhtemelen, şıma na aderesê IP ra $1 ) {{SITENAME}} ($4) newe yew parola waşt. \"$2\" no name ri emanet yew parola vıraziya \"$3\". Eke na şıma waşta, hesabê xo akere u newe yew parola bıvıraze. Muddetê parolayê şıma yo emanet {{PLURAL:$5|1 roc|$5 roci}}.\n\nEke vurnayişê parolayi, şıma nêwaşt ya zi parolayê şıma ameyo şıma vir u şıma hini qayil nşye parolayê xo bıvurni; no mesaj peygoş kere u bıewne gureyê xo.",
        "summary-preview": "Verqaytê xulasa:",
        "subject-preview": "Verqaytê mewzu/sernuştey:",
        "blockedtitle": "Karber blokekerdeo",
-       "blockedtext": "'''No namey karberi ya ki no adresê IP blokekerdeo.'''\n\nVıraştoğê blokey: $1\nSebebê blokey: ''$2''.\n\n* Sıftekerdena blokey: $8\n* Qediyayışê blokey: $6\n* Blokebiyae: $7\n\nŞıma şenê  $1 de ya ki  yewna [[{{MediaWiki:Grouppage-sysop}}|administrator]]i de irtıbat kewê ke na mesela sero werênê, cemaet vırazê. \nŞıma nêşenê xısusiyetê \"karberi rê e-posta bırışe\" bıgureynê/bıxebetnê heta ke [[Special:Preferences|Tercihanê hesabi]] de jû e-postawa ke vêrena, beli biye u şıam gureynayışê cı ra mehrum nêbiyê.\nIP adresê şımao nıkaên $3o u numrey bloki #$5.\nŞıma rê zehmet, eke kewnê ra dıme, teferruatanê corênan not kerên.",
+       "blockedtext": "<strong>No nameyê karberi ya zi na adresa IP blokekerdeya.</strong>\n\nVıraştoğê blokeyi: $1\nSebebê blokeyi: <em>$2</em>.\n\n* Sıftekerdena blokeyi: $8\n* Qediyayışê blokeyi: $6\n* Blokebiyaye: $7\n\nŞıma şenê  $1 de ya zi  yewna [[{{MediaWiki:Grouppage-sysop}}|administrator]]i de irtıbat kewê ke na mesela sero werênê, cemaet vırazê. \nŞıma nêşenê xısusiyetê \"karberi rê e-posta bırışe\" bıgureynê/bıxebetnê heta ke [[Special:Preferences|Tercihanê hesabi]] de yew e-posteyo ke vêreno, beli bi û şıma gureynayışê cı ra mehrum nêbiyê.\nIP adresa şımaya nıkayêne $3o û numreyê bloki #$5.\nŞıma rê zehmet, eke kewnê ra dıme, teferruatanê corênan not kerên.",
        "autoblockedtext": "IP adresê şıma otomotikmen kerda kılit, çıkı $1 verniya nê hesabi grota.\nSebebê cı zi:\n\n:''$2''\n\n* Dest pê kerdışê verni grotışi: $8\n* Qedyayişê verni grotışi: $6\n* Qayile ke bloqe bıbo: $7\n\nŞıma qayile qey weri kewtışê na mesela,  $1 ya na [[{{MediaWiki:Grouppage-sysop}}|serkaran ra]] yewi ra şenê irtibat kewê.\n\nNot, [[Special:Preferences|Tercihê karberi]] eke şıma yew e-postayo raşt nênuşt se şıma nêşenê na xususiyet ra \"karber rê e-posta bırışê\" istifade bıkeri.\n\nIP adresiya şıma yo nıkayên $3 u ID şıma yo ke musade nêdaye #$5. Eke şıma yew tehqiqat vırazeni malumatê corênan xo vira mekerê.",
        "blockednoreason": "sebeb nidaniyo",
        "whitelistedittext": "Qandê vurnayış kerdışi rê $1.",
        "rev-deleted-comment": "(Timarkerdışe enay hewadeyayo)",
        "rev-deleted-user": "(nameyê karberi esteriyo)",
        "rev-deleted-event": "(fealiyetê cıkewtışi esteriyo)",
-       "rev-deleted-user-contribs": "[namey karberi ya zi adresa IPy esteriya - vurnayış iştırakan ra nımniyo]",
+       "rev-deleted-user-contribs": "[nameyê karberi ya zi adresa IPy esteriya - vurnayış iştırakan ra nımniyo]",
        "rev-deleted-text-permission": "Çımraviyarnayışê ena pele '''esteriyo'''.\nBeno ke [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] de teferruat esto.",
        "rev-deleted-text-unhide": "Çımra viyarnayışê ena pele '''besterêno'''.\nBeno ke [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} besternayış] de teferruat esto.\nŞıma be idarekerina xo ra şenê hewna [$1 nê çımra viyarnayışi bıvinê], eke wazenê dewam kerê.",
        "rev-suppressed-text-unhide": "Çımra viyarnayışê ena pele '''Degusneyayo'''.\nBeno ke [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} degustış] de teferruat esto.\nŞıma be idarekerina xo ra şenê hewna [$1 nê çımraviyarnayışi bıvênê], eke wazenê dewam kerê.",
        "rev-suppressed-diff-view": "Jew timarkerdışê ena versiyon '''Ploxneyış'' biyo.\nÎdarekarî eşkeno ena dif bivîne; belki tiya de [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ploxnayış] de teferruat esto.",
        "rev-delundel": "bımocne/bınımne",
        "rev-showdeleted": "bımocne",
-       "revisiondelete": "Bestere/çımraviyarnayışan peyser bia",
+       "revisiondelete": "Çımraviyarnayışan bestere/peyser biya",
        "revdelete-nooldid-title": "Çımraviyarnayışo waşte nêvêreno",
        "revdelete-nooldid-text": "Şıma vıraştışê nê fonksiyoni rê ya yew çımraviyarnayışo waşte diyar nêkerdo, çımraviyarnayışo diyarkerde çıniyo, ya ki şıma wazenê ke çımraviyarnayışê nıkayêni bınımnê.",
        "revdelete-no-file": "Dosya diyarkerdiye çıniya.",
        "right-move-rootuserpages": "Pelanê kaberiê rıstımi bere",
        "right-movefile": "Dosyan bere",
        "right-suppressredirect": "Wexto ke pelan benê, pelanê çımey ra neql mevıraze",
-       "right-upload": "Dosya bar bıke",
+       "right-upload": "Dosyeyan bar ke",
        "right-reupload": "Dosyeyê ke estê, inan serde bınuse",
        "right-reupload-own": "Dosyeyê ke to bar kerdi, inan sero bınuse",
        "right-reupload-shared": "Dosyeyê ke ambarê medyao barekerde de, inan mehelli wedare",
-       "right-upload_by_url": "Yew URL ra dosyan bar bıke",
+       "right-upload_by_url": "Yew URL ra dosyeyan bar ke",
        "right-purge": "Virê sita seba yew pele bêdestur bestere.",
        "right-autoconfirmed": "Perê ke nême kılit biyê, inan bıvurne",
        "right-bot": "Zey yew kardê otomotiki kar bıvin",
        "right-deletedhistory": "Qeydanê tarixanê esterıteyan de qayt ke, bê nuştey inan",
        "right-deletedtext": "Mabênê newede vurnayışanê esterıtiyan de qaytê nuştey esterıtey u vurnayışan ke",
        "right-browsearchive": "Pelanê esterıteyan bıgeyre",
-       "right-undelete": "Jû pela esterıtiye peyser bia",
+       "right-undelete": "Yew pela esterıtiye peyser biya",
        "right-suppressrevision": "İdarekeran ra miyanki, newede vurnayışan de qayt ke u newede vıraze",
        "right-viewsuppressed": "İdarekeran ra miyanki newede vurnayışan de qayt ke",
        "right-suppressionlog": "Rocekanê xasan bıvêne",
        "right-markbotedits": "Vurnayışanê peyd ameyan, vurnayışê boti deye nışan kerê",
        "right-noratelimit": "Sinoranê xızi (rate limit) ra tesir nêbi",
        "right-import": "Pelan wikiyanê binan ra bia",
-       "right-importupload": "Pelî dosya bar kerdişî ra import bike",
+       "right-importupload": "Barkerdışê yew dosya ra zerre ke",
        "right-patrol": "Vurnayîşanê karberê binî nîşan bike ke patrol biyê",
        "right-autopatrol": "Vurnayîşanê xo otomatik nîşan bike ke patrol biyê",
        "right-patrolmarks": "Vurnayîşanê peniyî nîşan patrol biyê bivîne",
        "action-upload": "ena dosya bar ke",
        "action-reupload": "dosyayê ke database de esto ser ey binuse",
        "action-reupload-shared": "dosyayê ki ho embarê medyayî de esto ser ay binusne",
-       "action-upload_by_url": "Ena dosya yew URL ra bar bike",
+       "action-upload_by_url": "na dosya yew URL ra bar ke",
        "action-writeapi": "ser nuşte API gure bike",
        "action-delete": "ena pele bestere",
        "action-deleterevision": "nê çımraviyarnayışi bestere",
        "filereuploadsummary": "Vurnayîşê dosyayî:",
        "filestatus": "Weziyetê heqa telifi:",
        "filesource": "Çıme:",
-       "ignorewarning": "Îkazi kebul meke u dosya reyna bar bike",
+       "ignorewarning": "İqazi qebul meke û dosya reyna bar ke",
        "ignorewarnings": "Îkazi kebul meke",
        "minlength1": "Nameyanê dosyayî de gani bî ezamî yew herf est biyê.",
        "illegalfilename": "\"$1\" no nameyê dosya de tayê karakteri nêşuxulyenî. newe ra tesel bıkerê",
        "filename-prefix-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# Syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment\n#   * Every non-blank line is a prefix for typical file names assigned automatically by digital cameras\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # some mobile phones\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- leave this line exactly as it is -->",
        "upload-success-subj": "bar biyo",
        "upload-success-msg": "[$2] barkerdışê şıma qebul bı. Barkerdışê şımayo itado: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problem bar bike",
+       "upload-failure-subj": "Problem bar ke",
        "upload-failure-msg": "[$1] delal: $2 ra barkerdıştê şıman ra jew xelat vıcyayo.",
        "upload-warning-subj": "İqazê barkerdışi",
        "upload-warning-msg": "Barkerdış dê [$2] de xırabey vıcyê. Xırabi timar kerdışi re  peyser şırê  [[Special:Upload/stash/$1|heruna barkerdışi]].",
        "sharedupload-desc-edit": "Na dosya $1 proceyan dê binandı ke şeno bıgurweyno.\nŞıma qayılê ke malumatê cı bıvurnê se şıre [pela da $2 ].",
        "sharedupload-desc-create": "Na dosya $1 proceyan dê binandı ke şeno bıgurweyno.\nŞıma qayılê ke malumatê cı bıvurnê se şıre [pela da $2 ].",
        "filepage-nofile": "Ena name de dosya çin o.",
-       "filepage-nofile-link": "Ena name de dosya çin o. Feqet ti eşkeno [$1 bar bike].",
+       "filepage-nofile-link": "Ebe nê name ra dosya çıniya, labelê tı şena [$1 ey kerê].",
        "uploadnewversion-linktext": "Versiyonê newiyerê ena dosya bar ke",
        "shared-repo-from": "$1 ra",
        "shared-repo": "yew embarê repositoryî",
        "delete-toobig": "no pel, pê $1 {{PLURAL:$1|tene vuriyayiş|tene vuriyayiş}}i wayirê yew tarixo kehen o.\nqey hewna nêşiyayişi wina pelani u {{SITENAME}}nêxerebnayişê keyepeli yew hed niyaya ro.",
        "delete-warning-toobig": "no pel wayirê tarixê vurnayiş ê derg o, $1 {{PLURAL:$1|revizyonê|revizyonê}} seri de.\nhewn a kerdışê ıney {{SITENAME}} şuxul bıne gırano;\nbı diqqet dewam kerê.",
        "rollback": "vurnayişan tepiya bıger",
-       "rollbacklink": "peyser bia",
+       "rollbacklink": "peyser biya",
        "rollbacklinkcount": "$1 {{PLURAL:$1|vurnayış|vurnayışi}} peyd gıroti",
        "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|vurnayış|vuranyışi}} tewr peyd gırot",
        "rollbackfailed": "Peyserardış nêbi",
        "undeleterevision-missing": "revizyonê nemeqbul u vindbiyayeyi.\nRevizyoni ya hewn a biyê ya arşiw ra veciyayê ya zi cıresayişê şımayi şaş o.",
        "undelete-nodiff": "revizyonê verıni nidiya",
        "undeletebtn": "Timar bike",
-       "undeletelink": "bıvêne/peyser bia",
+       "undeletelink": "bıvêne/peyser biya",
        "undeleteviewlink": "bıvin",
        "undeleteinvert": "Weçinıtışi açarne",
        "undeletecomment": "Sebeb:",
        "movesubpagetext": "{{PLURAL:$1|pelê bınıni yê|pelê bınıni yê}} no $1 peli cer de yo.",
        "movenosubpage": "pelê bınıni yê no peli çino.",
        "movereason": "Sebeb:",
-       "revertmove": "peyser bia",
+       "revertmove": "peyser biya",
        "delete_and_move": "Bestere û bere",
        "delete_and_move_text": "==gani hewn a bıbıo/bıesteriyo==\n\n\" no [[:$1]]\" name de yew pel ca ra esto. şıma wazeni pê hewn a kerdışê ey peli vurnayişê nameyi bıkeri?",
        "delete_and_move_confirm": "Eya, na pele bestere",
        "import-noarticle": "Pel çino ke împort bike!",
        "import-nonewrevisions": "Qet versiyoni nêardi (nê pêro ya vera biyê ya zi qandê xeteyan ra nayinan sera xıl diyayo).",
        "xml-error-string": "$1 çizgi de $2 col $3 (bit $4): $5",
-       "import-upload": "Dosyayê XML bar bike",
+       "import-upload": "Dosyaya XML bar ke",
        "import-token-mismatch": "vindibiyayişê ma'lumatê hesabi. kerem kerê newe ra tesel/cereb bıkerê.",
        "import-invalid-interwiki": "Ena wiki ra azere kerdış nêbeno.",
        "import-error-edit": "Pela \" $1 \" qandê vurnayışi aya nêgêrêna çıkı cı rê icazet nêdeyayo.",
        "import-rootpage-nosubpage": "Qan de bınnaman reçe de \"$1\" re mısade nedano.",
        "importlogpage": "Defterê seyırio idxal",
        "importlogpagetext": "wiki yo ke nişane biyo tera kırıştışê zerredayişi nêbeno.",
-       "import-logentry-upload": "dosyayê bar kerdişî ra [[$1]] împort biyo",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}",
-       "import-logentry-interwiki": "$1 transwiki biyo",
        "import-logentry-interwiki-detail": "$2 ra $1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}",
        "javascripttest": "Cerebnayışê JavaScripti",
        "javascripttest-pagetext-noframework": "Na pela testanê JavaScripta gurweynayışi re abıryaya.",
        "tooltip-t-permalink": "Gırêyo daimi be ena versiyonê pele",
        "tooltip-ca-nstab-main": "Perra muhtevay bıvin",
        "tooltip-ca-nstab-user": "Pela karberi bıvêne",
-       "tooltip-ca-nstab-media": "Pera medya bıvin",
+       "tooltip-ca-nstab-media": "Pela medya bıvêne",
        "tooltip-ca-nstab-special": "Na yew pela xasa, şıma nêşenê sero vurnayış bıkerê",
        "tooltip-ca-nstab-project": "Pela procey bıvêne",
        "tooltip-ca-nstab-image": "Pera dosyayer bıvin",
        "tooltip-watchlistedit-raw-submit": "Lista seyrkerdışi newe ke",
        "tooltip-recreate": "pel hewn a bışiyo zi tepiya biya",
        "tooltip-upload": "Sergen de bari be",
-       "tooltip-rollback": "\"Peyser bia\" be yew tık pela iştıraq(an)ê peyên|i(an) peyser ano.",
+       "tooltip-rollback": "\"Peyser biya\" be yew tık pela iştıraqanê peyênan peyser ano",
        "tooltip-undo": "\"Undo\" ena vurnayışê newi iptal kena u vurnayışê verni a kena.\nTı eşkeno yew sebeb bınus.",
        "tooltip-preferences-save": "Terciha qeyd ke",
        "tooltip-summary": "Yew xulasaya kilm binuse",
        "metadata-fields": "Resımê meydanê metadataê ke na pele de benê lista, pela resımmocnaene de ke tabloê metadata gına waro, gureniyenê.\nÊ bini zey sayekerdoğan nımiyenê.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "metadata-langitem": "'''$2:''' $1",
        "metadata-langitem-default": "$1",
-       "exif-imagewidth": "Herayey",
+       "exif-imagewidth": "Herayiye",
        "exif-imagelength": "Berziye",
        "exif-bitspersample": "yew parçe de biti",
        "exif-compression": "Planê kompresyoni",
        "exif-ycbcrpositioning-1": "Wertekerdış",
        "exif-ycbcrpositioning-2": "Wayırê-site",
        "exif-dc-contributor": "İştıraqkeri",
-       "exif-dc-coverage": "Heruna yana wextin grotışa medya",
+       "exif-dc-coverage": "Hal ya zi demê xozerrenayışê medya",
        "exif-dc-date": "Tarix(i)",
        "exif-dc-publisher": "Hesrekar",
        "exif-dc-relation": "Medyay cı",
        "exif-dc-rights": "Heqi",
-       "exif-dc-source": "Medyaya çımey",
+       "exif-dc-source": "Medyaya çımeyi",
        "exif-dc-type": "Babeta medyay",
        "exif-rating-rejected": "Red ke",
        "exif-isospeedratings-overflow": "65535 ra gırdo",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Script path]",
        "redirect": "Serşıkıtena dosya, karberi, pele ya ki revizyonê kamiya dosya",
        "redirect-legend": "Hetenayışa dosya yana pela",
-       "redirect-summary": "Na pela xase to hetê jû dosya (namey dosya daeyo), jû pele (kamiya revizyoni ya ki pele daiya) ya ki jû pela karberi (kamiya karberia reqemkiye daiya) ser şıknena. Gurenayış: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ya ki  [[{{#Special:Redirect}}/user/101]].",
+       "redirect-summary": "Na pela xase to hetê yew dosya (nameyê dosya dayeyo), yew pele (kamiya revizyoni ya zi pele dayiya) ya zi yew pela karberi (kamiya karberiya reqemkiye dayiya) ser şıknena. Gurenayış: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ya zi  [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Şo",
        "redirect-lookup": "Bewni",
        "redirect-value": "Erc:",
        "specialpages-group-other": "Pelê xasiyê bini",
        "specialpages-group-login": "Cı kewe / hesab vıraze",
        "specialpages-group-changes": "Vurnayişê peni u logan",
-       "specialpages-group-media": "Raporê medya u bar kerdîşî",
+       "specialpages-group-media": "Raporê medya û barkerdışi",
        "specialpages-group-users": "Karber u heqqî",
        "specialpages-group-highuse": "Peleyê ke vêşi karênê",
        "specialpages-group-pages": "Listeyê pelan",
        "compare-title-not-exists": "Sernameyo ke şımayê vanê mewcud niyo.",
        "compare-revision-not-exists": "Revizyono ke şımaye vanê mewcud niyo.",
        "dberr-problems": "Mayê muxulêm! Ena sita dı newke xırabiya teknik esta.",
-       "dberr-again": "Yew di dekika vinder u hin bar bike.",
+       "dberr-again": "Dı-rê deqiqeyi vınde û heni bar ke.",
        "dberr-info": "(Erzmelumati ra xızmetkari nêreseno: $1)",
        "dberr-info-hidden": "(Ardendé erz malumatiya gredayışo nébeno)",
        "dberr-usegoogle": "Ti eşkeno hem zi ser Google de bigêre.",
        "logentry-rights-autopromote": "$1 otomatikmen $4 ra $5 {{GENDER:$2|terfi bi}}",
        "rightsnone": "(çıniyo)",
        "revdelete-summary": "kılmvatışê vuriyayişi",
+       "feedback-adding": "Pela rê peyxeberdar defêno...",
+       "feedback-bugcheck": "Harika! Sadece [xırabina ke $1 ] çınyayışê cı kontrol keno.",
+       "feedback-bugnew": "Mı qontrol ke. Xetaya newi xeber ke",
        "feedback-bugornote": "Jew mersela teferruato teknik esta şıma reca malumatê şıma hazıro se [ $1  jew xırab rapor] bıvinê.Zewbi zi, formê cerê xo rê şenê karfiyê. Vatışê xo pela da \"[ $3  $2 ]\", namey karber dê xoya piya u wasteriya karfiye.",
-       "feedback-subject": "Mewzu:",
-       "feedback-message": "Mesac:",
        "feedback-cancel": "Bıtexelne",
-       "feedback-submit": "Peyxeberdar Bırşe",
-       "feedback-adding": "Pela rê peyxeberdar defêno...",
+       "feedback-close": "Biya star",
        "feedback-error1": "Xeta: API ra neticey ne vıcyay",
        "feedback-error2": "Xeta: Timar kerdış nebı",
        "feedback-error3": "Xeta: API ra cewab çıno",
+       "feedback-message": "Mesac:",
+       "feedback-subject": "Mewzu:",
+       "feedback-submit": "Bırışe",
        "feedback-thanks": "Teşekkur kemê! Vatışê şıma pela da \"[$2 $1]\" esta.",
-       "feedback-close": "Biya star",
-       "feedback-bugcheck": "Harika! Sadece [xırabina ke $1 ] çınyayışê cı kontrol keno.",
-       "feedback-bugnew": "Mı qontrol ke. Xetaya newi xeber ke",
        "searchsuggest-search": "Cı geyre",
        "searchsuggest-containing": "Estên...",
        "api-error-badaccess-groups": "Ena wiki de dosya barkerdışi rê mısade nêdeyêno.",
        "api-error-file-too-large": "Dosyaye ke şıma rışta zaf gırda.",
        "api-error-filename-tooshort": "Namayê dosyayi zaf kilm a.",
        "api-error-filetype-banned": "Tipê ena dosya qedexe biya.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|Dosya qebul ne vinena|dosya qebul ne vinena|Ena babeta dosya qebul ne vinena}}. Eke cırê izin deyayo se {{PLURAL:$3|Babatan dosyayan|babeta dosyayan}} de $2 bıvin.",
+       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|babetê dosyayo destûrın niyo|babetên dosyeyanê destûrınan niyê}}. {{PLURAL:$3|Babetê dosyayo destûrın|Babetên dosyeyanê destûrınan}}   $2.",
        "api-error-filetype-missing": "Derganiya dosya kemiya",
        "api-error-hookaborted": "Vurnayişê tu ke to cerbna pê yew çengal ra terkneya.",
        "api-error-http": "Xırabiya zerreki:Wasteriya irtabet bırya.",
        "expand_templates_remove_nowiki": "neticeyan de etiketê <nowiki> yan çap bıker",
        "expand_templates_generate_xml": "Dara XML arêdayoği bımocne",
        "expand_templates_generate_rawhtml": "Xam HTML'i bıvin",
-       "expand_templates_preview": "Verqayt"
+       "expand_templates_preview": "Verqayt",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "latinkiya hêrabiyaye",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Semboli",
+       "special-characters-group-greek": "Yunan",
+       "special-characters-group-cyrillic": "Kiril",
+       "special-characters-group-arabic": "Erebki",
+       "special-characters-group-arabicextended": "Erebkiya Heraye",
+       "special-characters-group-persian": "Fariski",
+       "special-characters-group-hebrew": "İbraniki",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhalaki",
+       "special-characters-group-gujarati": "Gujaratki",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "tira kılme",
+       "special-characters-title-emdash": "tira derge",
+       "special-characters-title-minus": "işaretê kemiye"
 }
index e079cf5..295db5a 100644 (file)
@@ -17,7 +17,8 @@
                        "Tlustulimu",
                        "Tlustulimu Nepl1",
                        "아라",
-                       "TMg"
+                       "TMg",
+                       "Macofe"
                ]
        },
        "tog-underline": "Wótkaze pódšmarnuś:",
        "unusedimages": "Njewužywane dataje",
        "wantedcategories": "Póžedane kategorije",
        "wantedpages": "Póžedane boki",
+       "wantedpages-summary": "Toś ten specialny bok nalicujo wšykne boki, kótarež hyšći njeeksistěruju, na kótarež ale wót eksistěrujucych bokow se wótkazuju.",
        "wantedpages-badtitle": "Njepłaśiwy titel we wuslědku: $1",
        "wantedfiles": "Póžedane dataje",
        "wantedfiletext-cat": "Slědujuce dataje se wužywaju, ale njeeksistěruja. Dataje z cuzych repozitoriumow daju se nalicyś, lěcrownož eksistěruju. Take wopacne pozitiwy su <del>pśešmarnjone</del>. Mimo togo se boki w [[:$1]] nalicyju, kótarež dataje zasajźuju, kótarež njeeksistěruju.",
        "delete-warning-toobig": "Toś ten bok ma z wěcej ako $1 {{PLURAL:$1|wersiju|wersijomaj|wersijami|wersijami}} dłujke stawizny. Jich wulašowanje móžo źěło datoweje banki na {{SITENAME}} kazyś;\npóstupujśo z glědanim.",
        "deleting-backlinks-warning": "'''Warnowanje:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druge boki]] wótkazuju k bokoju abo bok jo hynźi zapśěgnjony, kótaryž coš wulašowaś.",
        "rollback": "Wobźěłanja slědk wześ",
-       "rollback_short": "anulěrowaś",
        "rollbacklink": "anulěrowaś",
        "rollbacklinkcount": "$1 {{PLURAL:$1|změnu|změnje|změny|změnow}} slědk wześ",
        "rollbacklinkcount-morethan": "wěcej ako $1 {{PLURAL:$1|změnu|změnje|změny|změnow}} slědk wześ",
        "import-rootpage-nosubpage": "Mjenjowy rum \"$1\" kórjenjowego boka njedowólujo pódboki.",
        "importlogpage": "Log-lisćinu importěrowaś",
        "importlogpagetext": "Administratiwne importěrowanje bokow ze stawiznami z drugich wikijow.",
-       "import-logentry-upload": "jo se [[$1]]  pśez nagrawańske nagraśe importěrowała.",
        "import-logentry-upload-detail": "{{PLURAL:$1|$1 wersija|$1 wersiji|$1 wersije}}",
-       "import-logentry-interwiki": "Dataja $1 jo se importěrowała (transwiki).",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|$1 wersija|$1 wersiji|$1 wersije}} wót $2",
        "javascripttest": "JavaScriptowy test",
-       "javascripttest-title": "Testy $1 se pśewjeduju",
        "javascripttest-pagetext-noframework": "Toś ten bok jo pśewjedowanjeju javascriptowych testow pśewóstajony.",
        "javascripttest-pagetext-unknownframework": "Njeznaty wobłuk \"$1\".",
        "javascripttest-pagetext-frameworks": "Pšosym wubjeŕ jaden ze slědujucych testowańskich wobłukow: $1",
        "javascripttest-pagetext-skins": "Wubjeŕ drastwu za pśewjeźenje testow:",
        "javascripttest-qunit-intro": "Glědaj [$1 testowańsku dokumentaciju] na mediawiki.org.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
        "tooltip-pt-userpage": "Twój wužywarski bok",
        "tooltip-pt-anonuserpage": "Wužywarski bok za IP-adresu, z kótarejuž bok wobźěłajoš",
        "tooltip-pt-mytalk": "Twój diskusijny bok",
        "iranian-calendar-m11": "Bahman",
        "iranian-calendar-m12": "Esfand",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskusija]])",
-       "unknown_extension_tag": "Njeznaty tag rozšyrjenja „$1“",
        "duplicate-defaultsort": "Glědaj: Standardny sortěrowański kluc (DEFAULT SORT KEY) \"$2\" pśepišo pjerwjej wužyty kluc \"$1\".",
        "version": "Wersija",
        "version-extensions": "Instalowane rozšyrjenja",
        "specialpages-group-wiki": "Daty a rědy",
        "specialpages-group-redirects": "Dalej pósrědnjajuce boki",
        "specialpages-group-spam": "Spamowe rědy",
+       "specialpages-group-developer": "Rědy wuwiwarjow",
        "blankpage": "Prozny bok",
        "intentionallyblankpage": "Toś ten bok jo z wótglědom prozny.",
        "external_image_whitelist": " #Wóstaj toś tu smužku rowno tak jo<pre>\n#Zapódaj fragmenty regularnych wurazow (jano źěl mjazy //) dołojce\n#Toś te budu se pśirunowaś z URL ekseternych wobrazow\n#Te, kótarež makaju se, zwobraznuju se ako wobraze, howac pokažo se jano wótkaz k wobrazoju\n#Ze smužkami, kótarež zachopiju se z #, wobchadaju ako z komentarami\n#To njeźiwa na wjelikopisanje\n\n#Staj wše fragmenty regularnych wurazow nad smužku. Wóstaj toś tu smužku rowno tak jo</pre>",
        "logentry-rights-autopromote": "$1 jo se awtomatiski wót $4 do $5 {{GENDER:$2|pśirědował|pśirědowała}}",
        "rightsnone": "(nic)",
        "revdelete-summary": "Zespominanje wobźěłanja",
+       "feedback-adding": "Komentar pśidawa se bokoju...",
+       "feedback-bugcheck": "Wjelicnje! Pśekontrolěruj jano, lěc to njejo jadna z [$1 znatych zmólkow].",
+       "feedback-bugnew": "Som pśekontrolěrował. Nowu zmólku k wěsći daś",
        "feedback-bugornote": "Jolic sy zwólny, techniski problem nadrobnje wopisaś, [$1 daj pšosym zmólku k wěsći].\nHować móžoš slědujucy jadnory formular wužywaś. Twój komentar pśidajo se bokoju \"[$3 $2]\", z twójim wužywarskim mjenim a z wobglědowakom, kótaryž wužywaš.",
-       "feedback-subject": "Tema:",
-       "feedback-message": "Powěsć:",
        "feedback-cancel": "Pśetergnuś",
-       "feedback-submit": "Komentar wótpósłaś",
-       "feedback-adding": "Komentar pśidawa se bokoju...",
+       "feedback-close": "Dokóńcony",
        "feedback-error1": "Zmólka: Njepóznaty wuslědk wót API",
        "feedback-error2": "Zmólka: Wobźěłanje njejo se raźiło",
        "feedback-error3": "Zmólka: Žedne wótegrono wót API",
+       "feedback-message": "Powěsć:",
+       "feedback-subject": "Tema:",
+       "feedback-submit": "Wótpósłaś",
        "feedback-thanks": "Źěkujomy se! Twój komentar jo se k bokoju \"[$2 $1]\" pósłał.",
-       "feedback-close": "Dokóńcony",
-       "feedback-bugcheck": "Wjelicnje! Pśekontrolěruj jano, lěc to njejo jadna z [$1 znatych zmólkow].",
-       "feedback-bugnew": "Som pśekontrolěrował. Nowu zmólku k wěsći daś",
        "searchsuggest-search": "Pytaś",
        "searchsuggest-containing": "wopśimujo...",
        "api-error-badaccess-groups": "Njamaš pšawo dataje do toś togo wikija nagraś.",
        "expand_templates_remove_nowiki": "Toflicki <nowiki> we wuslědku pódtłocyś",
        "expand_templates_generate_xml": "Parsowański bom XML pokazaś",
        "expand_templates_generate_rawhtml": "Gropny HTML pokazaś",
-       "expand_templates_preview": "Pśeglěd"
+       "expand_templates_preview": "Pśeglěd",
+       "special-characters-group-latin": "Łatyńske",
+       "special-characters-group-latinextended": "Łatyńske rozšyrjone",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symbole",
+       "special-characters-group-greek": "Grichiske",
+       "special-characters-group-cyrillic": "Kyriliske",
+       "special-characters-group-arabic": "Arabiske",
+       "special-characters-group-arabicextended": "Rozšyrjona arabšćina",
+       "special-characters-group-persian": "Persiske",
+       "special-characters-group-hebrew": "Hebrejske",
+       "special-characters-group-bangla": "Bengalšćina",
+       "special-characters-group-tamil": "Tamilšćina",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalezišćina",
+       "special-characters-group-gujarati": "Guźarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "thailandšćina",
+       "special-characters-group-lao": "Laošćina",
+       "special-characters-group-khmer": "Khmeršćina",
+       "special-characters-title-endash": "krotka lažaca smužka",
+       "special-characters-title-emdash": "dłujka lažaca smužka",
+       "special-characters-title-minus": "minusowe znamuško"
 }
index d67a809..0187afb 100644 (file)
@@ -95,7 +95,7 @@
        "december-gen": "Dicèmber",
        "jan": "Znê",
        "feb": "Fer",
-       "mar": "Mêr",
+       "mar": "Mêrz",
        "apr": "Avr",
        "may": "Mâg",
        "jun": "Zóg",
        "disclaimers": "Avertèinsi",
        "disclaimerpage": "Project:Avertèinsi generêli",
        "edithelp": "Léber dal spiegasiòun",
+       "helppage-top-gethelp": "Ajót",
        "mainpage": "Préma pàgina",
        "mainpage-description": "Pàgina principêla",
        "policy-url": "Project:Léni 'd cundòta",
        "readonly_lag": "Al databêş l'é stê bluchê in avtomàtich per permèter a i terminêl cun al databêş schiêv ed mètres in pâs cun al master",
        "internalerror": "Erōr intêren",
        "internalerror_info": "Erōr intêren: $1",
+       "internalerror-fatal-exception": "Erōr ch' an pōl mìa èser corèt dal gener \"$1\"",
        "filecopyerror": "An n'é mìa pusébil cupiêr al file \"$1\" in \"$2\".",
        "filerenameerror": "An n'é mìa pusébil cambiêr al nòm ed \"$1\" in \"$2\".",
        "filedeleteerror": "An n'é mìa pusébil scanşlêr al file \"$1\".",
        "createaccount": "Fà la tó inscrisiòun",
        "gotaccount": "Gh'èt bèle un ingrès? $1",
        "gotaccountlink": "Và dèinter",
-       "userlogin-resetlink": "T'ét scurdê j elemèint p'r al tó ingrès?",
+       "userlogin-resetlink": "T'ét e-scurdê la cêva p'r al tó ingrès?",
        "userlogin-resetpassword-link": "T' ét scurdê la cêva 'd ingrès?",
        "userlogin-helplink2": "Ajót per l'ingrès",
        "userlogin-loggedin": "T'ét bèle coleghê {{GENDER:$1|$1}}. \nDrōva al mōdul ché sòta cme un êter utèint.",
        "wrongpassword": "La cêv 'd ingrès e-scréta an n'é mìa giósta. Tōrna a pruvêr.",
        "wrongpasswordempty": "An n'é mìa stê scrét nisóna cêva 'd ingrès. Tōrna pruvêr.",
        "passwordtooshort": "La cêva 'd ingrès la dēv avèir almēno {{PLURAL:$1|1 carâter|$1 carâter}}",
+       "passwordtoolong": "La cêva 'd ingrès la 'n pōl mìa avèir pió 'd {{PLURAL:$1|1 carâter|$1 carâter}}",
        "password-name-match": "La cêva 'd ingrès l'an dēv mìa èser cumpâgn al nòm utèint.",
        "password-login-forbidden": "L'ûş de sté nòm e cêva 'd ingrès l'é stê pruibî.",
        "mailmypassword": "Tōrna mèter la cêva 'd ingrès",
        "missingcommentheader": "'''Atensiòun:''' an n'é mìa stê precişê al mutîv/al tétol de sté mudéfica. S'es tōrna a clichêr insém a \"{{int:savearticle}}\" la mudéfica la gnirà salvêda sèinsa tétol.",
        "summary-preview": "Guêrda préma sûnt:",
        "subject-preview": "Guêrda préma argumèint/tétol:",
+       "previewerrortext": "A gh'é stê 'n erōr mèinter a s'é serchê ed guardêr al lavōr préma 'd salvêrel.",
        "blockedtitle": "Utèint bluchê",
        "blockedtext": " '''Al tō nòm utèint o indirés IP l'é stê bluchê.'''\n\nAl blôch l'é stê fât da $1. Al mutîv dal blôch l'é còst:  ''$2''.\n\n*Inési dal blôch: $8\n*Scadèinsa dal blôch: $6\n*Intervâl ed blôch: $7\n\nS' ét vō, l'é pusébil mètres in cuntât cun $1 o 'n êter [[{{MediaWiki:Grouppage-sysop}}|aministradōr]] per discóter dal blôch.\n\nGuêrda che la funsiòun 'Scrév a l'utèint' an n'é mìa in ôvra s' an n'é mìa stê registrtê un indirés ed pôsta eletrônica vâlid int al tō [[Special:Preferences| preferèinsi]] o se sté funsiòun l'é stêda bluchêda. L'indirés IP 'd adèsa l'é $3, al nóme ID dal blôch l'é #$5. T'é perghê ed precişêr tót j elemèint ed préma per ògni dmânda de spiegasiòun",
        "autoblockedtext": "Cl'indirés IP ché l'è stê bluchê in avtomâtich perché spartî cun 'n êter utèint, bluchê ânca ló da $1. Al mutîv dal blôch l'é còst:\n\n''$2''\n \n*Inési dal blôch: $8 \n*Scadèinsa dal blôch: $6 \n*Intervâl ed blôch: $7\n \nS' ét vō, l'é pusébil mètres in cuntât cun $1 o 'n êter [[{{MediaWiki:Grouppage-sysop}}|aministradōr]] per dmandêr spiegasiòun insém al blôch. Guêrda che la funsiòun 'Scrév a l'utèint' an n'é mìa in ôvra s' an n'é mìa stê registrtê un indirés ed pôsta eletrônica vâlid int al tō [[Special:Preferences| preferèinsi]] e, in tót al manēri, se int al tachêr al blôch, sté funsiòun l'é stêda bluchêda. L'indirés IP 'd adèsa l'é $3, al nóme ID dal blôch l'é #$5. T'é perghê ed precişêr tót j elemèint ed préma per ògni dmânda de spiegasiòun",
        "notextmatches": "Nisóna relasiòun int al tèst dal pàgini",
        "prevn": "{{PLURAL:$1|còl préma|quî préma $1}}",
        "nextn": "{{PLURAL:$1|al seguèint|i seguèint $1}}",
+       "prev-page": "pàgina 'd préma",
+       "next-page": "pàgina dôp",
        "prevn-title": "{{PLURAL:$1|Al rişultêt ed préma|$1 i rişultêt ed préma}}",
        "nextn-title": "{{PLURAL:$1|Al rişultêt ed préma|$1 i rişultêt ed préma}}",
        "shown-title": "Fà vèder {{PLURAL:$1|un rişultêt|$1 di rişultêt}}",
        "prefs-rc": "Ûltmi mudéfichi",
        "prefs-watchlist": "Tgnîr sòt ôc",
        "prefs-editwatchlist": "Mudéfica la lésta 'd qui da tgnîr sòt ôc",
+       "prefs-editwatchlist-label": "Mudéfica dal pàgini ed la lésta ch' a' s tîn sòt ôc:",
+       "prefs-editwatchlist-edit": "Guêrda e tó via i tétol int la lésta ch'ét tîn sòt ôc",
        "prefs-editwatchlist-raw": "Mudéfica la lésta in furmê tèst",
+       "prefs-editwatchlist-clear": "Scanşèla la tó lésta di tgnû 'd ôc",
        "prefs-watchlist-days": "Nómer ed dé da fêr vèder int i tgnû 'd ôc specêl:",
        "prefs-watchlist-days-max": "Mâsim $1 {{PLURAL:$1|dé}}",
        "prefs-watchlist-edits": "Nómer 'd mudéfichi da fêr vèder cun al funsiòun pió şvilupêdi:",
        "right-override-export-depth": "Pôrta fōra al pàgini cun insèm al pàgini coleghêdi per 'na larghèsa ed 5",
        "right-sendemail": "Spidés pôsta eletrônica a êter utèint",
        "right-passwordreset": "A vèd i mesâg 'd arnōv ed la cêva 'ed ingrès",
+       "right-managechangetags": "Fà e tó via i [[Special:Tags|tag]] dal databêş",
        "newuserlogpage": "Utèint nōv",
        "newuserlogpagetext": "Ché sòt a gh' é la lésta di nōv utèint.",
        "rightslog": "Diré ed j utèint",
        "action-viewmyprivateinfo": "guêrda al tō infurmasiòun personêli",
        "action-editmyprivateinfo": "mudéfica al tō infurmasiòun personêli",
        "action-editcontentmodel": "câmbia al mudèl dèinter a 'na pàgina",
+       "action-managechangetags": "fà e tó via i tag dal databêş",
        "nchanges": "$1\n{{PLURAL:$1|mudéfica|mudéfichi}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|da l'ûltma vîşita}}",
        "enhancedrc-history": "stòria",
        "tmp-write-error": "Erōr de scritûra dal file pruvişôri.",
        "large-file": "A 's arcmânda d' andêr d'ed sōver la larghèsa ed $1 per ógni file; còst l'é grôs $2.",
        "largefileserver": "Al file al và fōra dal j amzûri permési da l'impustasiòun dal prugrâma.",
+       "emptyfile": "Al file apèina carghê al sèmbra vōd. \nCòst al pré èser duvû a un erōr int al nòm dal file. Verifichêr ch'es vōl dabòun carghêr cól file ché.",
+       "windows-nonascii-filename": "Cla wiki ché l'an permèt mìa i nòm di file cun i carâter specêl.",
+       "fileexists": "Un file cun cól nòm ché al gh'é bèle. Verifichêr préma <strong>[[:$1]]</strong> s' an s'é mìa sicûr ed vrèir scrévregh inséma. \n[[$1|thumb]]",
+       "filepageexists": "La pàgina de spiegasiòun de sté file l'é bèle stêda fâta a l'indirés <strong>[[:$1]]</strong>, anca s' an gh'é mìa incòra un file cun sté nòm. La spiegasiòun ed l'elemèint mésa da carghêr l'an gnirà mìa fâta vèder inséma la pàgina de spiegasiòun. Per fêr in môd che l'elemèint a 's vèda inséma la pàgina de spiegasiòun, a srà necesâri mudifichêrla a mân. [[$1|thumb]]",
+       "fileexists-extension": "Un file cun l'istès nòm al ghé bèle: [[$2|thumb]]\n*Nòm dal file carghê: <strong>[[:$1]]</strong>\n*Nòm dal file che gh'é: <strong>[[:$2]]</strong>  \nVōt fōrsi siēlier un nòm pió carateréstich?",
+       "fileexists-thumbnail-yes": "Al file carghê al sèmbra èsere 'na miniadûra ''(thumbnail)''. [[$1|thumb]] Verifichêr, per cunfròunt, al file <strong>[[:$1]]</strong>. Se 's trâta ed l'istèsa figûra, int al j amzûri uriginêli, an n'é mìa necesâri carghêr êtri miniadûri.",
+       "file-thumbnail-no": "Al nòm dal file al cumincia cun <strong>$1</strong>; la sèmbra dòunca èser 'na miniadûra ''(thumbnail)''. Se 's gh'à la figûra int la qualitê uriginêla, as prèiga 'd carghêrla. In chêş contrâri, as prèiga 'd cambiêr al nòm dal file.",
+       "fileexists-forbidden": "Un file cun un nòm cumpâgn al gh'é bèle e an 's pōl mìa scrévregh inséma. Tunêr indrē e cambiêr al nòm cun al nòm ch'es vōl carghêr al file. [[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "Un file cun un nòm cumpâgn al gh'é bèle int l'archévi dal risórsi multimediêli spartîdi. S' es vōl incòra carghêr al file, tunêr indrē e cambiêr al nòm cun al nòm ch'es vōl carghêr al file. [[File:$1|thumb|center|$1]]",
+       "file-exists-duplicate": "Cōl file ché l'é 'na côpia {{PLURAL:$1|dal segvèint|di segvèint}} file:",
+       "file-deleted-duplicate": "Un file cumpâgn a còst ([[:$1]]) l'é stê scanşlê tèimp fa. Verifichêr la stôria dal scanşladûri préma 'd carghêrel incòra ed nōv.",
+       "file-deleted-duplicate-notitle": "Un file cumpâgn a còst l'é stê scanşlê tèimp fa, e al tétol l'é stê tôt via. Dmânda a quelchidûn  ch' al gh'à la pusibilitê ed vèdeer i file scanşlê 'd verifichêr la situasiòun préma 'd andêr avânti cun al carghêrel incòra 'd nōv.",
+       "uploadwarning": "Avîş che s'é drē carghêr",
+       "uploadwarning-text": "Per piaşèir câmbia ché sòta la spiegasiòun dal file e prōv' incòra.",
+       "savefile": "Sêlva 'l file",
+       "uploaddisabled": "La cârga dal file l'é bluchêda.",
+       "copyuploaddisabled": "La cârga per mèz  'd URL l'é blucêda.",
+       "uploaddisabledtext": "La cârga di file an n'é mìa atîva.",
+       "php-uploaddisabledtext": "La cârga dal file cun PHP l'é bluchêda. Cuntròla che 'l file_uploads al sìa bèin impustê.",
+       "uploadscripted": "Cól file ché al gh'à un côdis o di script, che prén èser mìa capî bèin da un navigadōr internèt.",
+       "uploadscriptednamespace": "Cól file SVG ché al gh'à un namespace '$1' mìa permés.",
+       "uploadinvalidxml": "Al côdis XML int al file al pōl mìa èser lavurê bèin.",
+       "uploadvirus": "Cól fil ché al ghè un 'virus'! Particulêr: $1",
+       "uploadjava": "Cól file ché l'é un file ZIP che 'l gh'à dèinter un file .class Java. Carghêr i file Java an n'é mìa permés, perché pōlen schivşêr i lémit ed sicurèsa.",
+       "upload-source": "File 'd urégin",
+       "sourcefilename": "Nòm dal file 'd urégin:",
+       "sourceurl": "URL 'd urégin:",
+       "destfilename": "Nòm dal file in dó 'l gh'à d'andêr:",
+       "upload-maxfilesize": "Grandèsa mâsima dal file:$1",
+       "upload-description": "Spiegasiòun dal file",
+       "upload-options": "Siēlti per carghêr",
+       "watchthisupload": "Zûnta a i tgnu  'd ôc",
+       "filewasdeleted": "Un file cun cól nòm ché l'é bèle stê carghê e scanşlê tèimp indrē. Verifichêr la stôria dal $1 préma 'd carghêrel incòra.",
+       "filename-bad-prefix": "Al nòm dal file che s'é drē carghêr al cumîncia cun <strong>\"$1\"</strong>, ch'l'é un nòm genèrich cumpâgn a quî dê in avtomâtich dal mâchini fotogrâfichi digitêli. As prèiga ed sernîr un nòm pió precîş p'r al fîle.",
+       "upload-success-subj": "Carghê cun sucès",
+       "upload-success-msg": "La cârga da [$2] l'é andêda bèin. Al file a's pōl catêr ché: [[:{{ns:file}}:$1]]",
+       "upload-failure-subj": "A gh'é un problēma carghêr",
+       "upload-failure-msg": " A s'é verifiche un problēma cun la cârga da [$2]:\n\n\n$1",
+       "upload-warning-subj": "Avîş che s'é drē carghêr",
+       "upload-warning-msg": "A gh'é stê un problēma mèinter 's carghêva da [$2]. A ' spōl turnêr al [[Special:Upload/stash/$1|form di upload]] per justêr al problēma.",
+       "upload-proto-error": "Protocôl şbagliê",
+       "upload-proto-error-text": "Per carghêr da terminêl luntân druvêr URL che cumîncen cun code>http://</code> opór <code>ftp://</code>.",
+       "upload-file-error": "Erōr intêren",
+       "upload-file-error-text": "É sucès un erōr intêren mèinter a s' ēra drê fêr un file pruvişôri inséma 'l servèint. Cuntatêr un [[Special:ListUsers/sysop|aministradōr]].",
+       "upload-misc-error": "Erōr in cârga mia cgnusû",
        "license": "Licèinsa:",
        "license-header": "Licèinsa",
        "nolicense": "Nisóna licèinsa sgnêda",
        "htmlform-reset": "Scanşèla 'l mudéfichi",
        "htmlform-selectorother-other": "Êter",
        "rightsnone": "(nisûn)",
-       "feedback-subject": "Argomèint:",
+       "feedback-cancel": "Scanşela",
        "feedback-message": "Mesâg",
-       "feedback-cancel": "Scanşela"
+       "feedback-subject": "Argomèint:"
 }
index 56936bb..78c64a3 100644 (file)
@@ -40,7 +40,8 @@
                        "Calak",
                        "Auslaender",
                        "Milicevic01",
-                       "Ah3kal"
+                       "Ah3kal",
+                       "Macofe"
                ]
        },
        "tog-underline": "Υπογράμμιση συνδέσμων:",
        "uploaderror": "Σφάλμα στο ανέβασμα αρχείου",
        "upload-recreate-warning": "'''Προειδοποίηση: Ένα αρχείο με αυτό το όνομα έχει διαγραφεί ή μετακινηθεί.'''\n\nΤο αρχείο διαγραφών και μετακινήσεων για αυτή τη σελίδα παρέχεται εδώ για διευκόλυνση:",
        "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>''' (χρήση μίας εκδοχής 200 pixel σε πλάτος σε ένα κουτάκι στο αριστερό περιθώριο με περιγραφή 'alt text')\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' (άμεση σύνδεση με το αρχείο χωρίς εμφάνιση του ίδιου του αρχείου)",
-       "upload-permitted": "Επιτρεπτοί τύποι αρχείων: $1.",
-       "upload-preferred": "Τύποι αρχείων που προτιμούνται: $1.",
-       "upload-prohibited": "Απαγορευμένοι τύποι αρχείου: $1.",
+       "upload-permitted": "{{PLURAL:$2|Επιτρεπτός τύπος αρχείων|Επιτρεπτοί τύποι αρχείων}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Τύπος αρχείων που προτιμάται|Τύποι αρχείων που προτιμούνται}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Απαγορευμένος τύπος αρχείων|Απαγορευμένοι τύποι αρχείων}}: $1.",
        "uploadlogpage": "Αρχείο καταγραφών ανεβάσματος αρχείων",
        "uploadlogpagetext": "Παρακάτω είναι ο κατάλογος με τις πιο πρόσφατες αποθηκεύσεις αρχείων. Επισκεφθείτε τον [[Special:NewFiles|πίνακα νέων αρχείων]] για μία πιο οπτική επισκόπηση.",
        "filename": "Όνομα αρχείου",
        "deleteprotected": "Δεν μπορείτε να διαγράψετε αυτή τη σελίδα επειδή είναι προστατευόμενη.",
        "deleting-backlinks-warning": "\"'Προσοχή:\"' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Άλλες σελίδες]] συνδέουν ή ενσωματώνουν τη σελίδα που πρόκειται να διαγράψετε.",
        "rollback": "Επαναφορά επεξεργασιών",
-       "rollback_short": "Επαναφορά",
        "rollbacklink": "αναστροφή",
        "rollbacklinkcount": "Επαναφορά $1 {{PLURAL:$1|επεξεργασίας|επεξεργασιών}}",
        "rollbacklinkcount-morethan": "επαναφορά περισσότερων από $1 {{PLURAL:$1|επεξεργασία|επεξεργασίες}}",
        "thumbnail_gd-library": "Ατελής ενεργοποίηση της βιβλιοθήκης GD: αγνοούμενη λειτουργία $1",
        "thumbnail_image-missing": "Το αρχείο φαίνεται να λείπει: $1",
        "import": "Εισαγωγή σελίδων",
-       "importinterwiki": "Εισαγωγή από άλλο Wiki",
-       "import-interwiki-text": "Î\95Ï\80ιλέξÏ\84ε Î­Î½Î± wiki ÎºÎ±Î¹ Ï\84ίÏ\84λο Ï\83ελίδαÏ\82 Î³Î¹Î± Ï\84ην ÎµÎ¹Ï\83αγÏ\89γή.\nÎ\9fι Î·Î¼ÎµÏ\81ομηνίεÏ\82 Ï\84Ï\89ν Î±Î½Î±Î¸ÎµÏ\89Ï\81ήÏ\83εÏ\89ν ÎºÎ±Î¹ Ï\84α Î¿Î½Ï\8cμαÏ\84α Ï\84Ï\89ν Ï\83Ï\85νÏ\84ακÏ\84Ï\8eν Î¸Î± Î´Î¹Î±Ï\84ηÏ\81ηθοÏ\8dν.\nÎ\8cλεÏ\82 Î¿Î¹ ÎµÎ½Î­Ï\81γειεÏ\82 ÎµÎ¹Ï\83αγÏ\89γήÏ\82 Î¼ÎµÏ\84αξÏ\8d wiki καταγράφονται στο [[Special:Log/import|αρχείο καταγραφής εισαγωγών]].",
+       "importinterwiki": "Εισαγωγή από άλλο wiki",
+       "import-interwiki-text": "Î\95Ï\80ιλέξÏ\84ε Î­Î½Î± wiki ÎºÎ±Î¹ Ï\84ίÏ\84λο Ï\83ελίδαÏ\82 Î³Î¹Î± Ï\84ην ÎµÎ¹Ï\83αγÏ\89γή.\nÎ\9fι Î·Î¼ÎµÏ\81ομηνίεÏ\82 Ï\84Ï\89ν Î±Î½Î±Î¸ÎµÏ\89Ï\81ήÏ\83εÏ\89ν ÎºÎ±Î¹ Ï\84α Î¿Î½Ï\8cμαÏ\84α Ï\84Ï\89ν Ï\83Ï\85νÏ\84ακÏ\84Ï\8eν Î¸Î± Î´Î¹Î±Ï\84ηÏ\81ηθοÏ\8dν.\nÎ\8cλεÏ\82 Î¿Î¹ ÎµÎ½Î­Ï\81γειεÏ\82 ÎµÎ¹Ï\83αγÏ\89γήÏ\82 Î±Ï\80Ï\8c Î¬Î»Î»Î± wiki καταγράφονται στο [[Special:Log/import|αρχείο καταγραφής εισαγωγών]].",
        "import-interwiki-sourcewiki": "Πηγαίο wiki:",
        "import-interwiki-sourcepage": "Πηγαία σελίδα:",
        "import-interwiki-history": "Αντιγραφή όλων των εκδόσεων του ιστορικού για αυτή τη σελίδα",
        "importcantopen": "Το αρχείο εισαγωγής δεν ήταν δυνατόν να ανοιχθεί",
        "importbadinterwiki": "Εσφαλμένος διαγλωσσικός σύνδεσμος",
        "importsuccess": "Η εισαγωγή πέτυχε!",
-       "importnosources": "Δεν έχουν καθοριστεί πηγές για την εισαγωγή από άλλο Wiki και η απευθείας φόρτωση στο ιστορικό έχει απενεργοποιηθεί.",
+       "importnosources": "Δεν έχουν καθοριστεί wiki από τα οποία μπορεί να γίνει εισαγωγή και η απευθείας φόρτωση στο ιστορικό έχει απενεργοποιηθεί.",
        "importnofile": "Δεν επιφορτώθηκε κανένα αρχείο εισαγωγής.",
        "importuploaderrorsize": "Το ανέβασμα του αρχείου εισαγωγής απέτυχε. Το μέγεθος του αρχείου ξεπερνά το επιτρεπόμενο όριο.",
        "importuploaderrorpartial": "Το ανέβασμα του αρχείου εισαγωγής απέτυχε. Το αρχείο ανέβηκε μόνο εν μέρει.",
        "import-rootpage-invalid": "Η δεδομένη ριζική σελίδα είναι μη έγκυρος τίτλος",
        "importlogpage": "Αρχείο καταγραφής εισαγωγών",
        "importlogpagetext": "Διαχειριστικές εισαγωγές σελίδων με ιστορικό επεξεργασίας από άλλα wiki.",
-       "import-logentry-upload": "εισάχθηκε η σελίδα [[$1]] με επιφόρτωση αρχείου",
        "import-logentry-upload-detail": "{{PLURAL:$1|Εισήχθη $1 αναθεώρηση|Εισήχθησαν $1 αναθεωρήσεις}}",
-       "import-logentry-interwiki": "η σελίδα $1 εισάχθηκε μεταξύ wiki",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Εισήχθη $1 αναθεώρηση|Εισήχθησαν $1 αναθεωρήσεις}} από $2",
        "javascripttest": "Δοκιμή JavaScript",
        "javascripttest-pagetext-noframework": "Αυτή η σελίδα είναι δεσμευμένη για την εκτέλεση δοκιμών σε JavaScript.",
        "tooltip-pt-mycontris": "Κατάλογος των συνεισφορών σας",
        "tooltip-pt-login": "Σας ενθαρρύνουμε να συνδεθείτε&middot; ωστόσο δεν είναι υποχρεωτικό",
        "tooltip-pt-logout": "Έξοδος",
+       "tooltip-pt-createaccount": "Σας ενθαρρύνουμε να δημιουργήσετε ένα λογαριασμό και να συνδεθείτε· ωστόσο, δεν είναι υποχρεωτικό",
        "tooltip-ca-talk": "Συζήτηση για τη σελίδα περιεχομένου",
        "tooltip-ca-edit": "Μπορείτε να επεξεργαστείτε αυτή τη σελίδα. Παρακαλούμε χρησιμοποιήστε το κουμπί προεπισκόπησης πριν την αποθήκευση.",
        "tooltip-ca-addsection": "Ξεκίνημα νέας ενότητας",
        "version-parser-function-hooks": "Άγκιστρα συναρτήσεων του συντακτικού αναλυτή",
        "version-hook-name": "Όνομα άγκιστρου",
        "version-hook-subscribedby": "Υπογεγραμμένο από",
-       "version-version": "(Έκδοση $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[χωρίς όνομα]",
        "version-license": "Άδεια MediaWiki",
        "version-ext-license": "Άδεια χρήσης",
        "compare-revision-not-exists": "Η αναθεώρηση που καθορίσατε δεν υπάρχει.",
        "dberr-problems": "Λυπούμαστε! Αυτός ο ιστότοπος αντιμετωπίζει τεχνικές δυσκολίες.",
        "dberr-again": "Δοκιμάστε να περιμενένετε λίγα λεπτά και να ανανεώσετε.",
-       "dberr-info": "(Î\94εν Î¼Ï\80οÏ\81εί Î½Î± ÎµÏ\80ικοινÏ\89νήÏ\83ει Î¼Îµ Ï\84ον ÎµÎ¾Ï\85Ï\80ηÏ\81εÏ\84ηÏ\84ή Ï\84ηÏ\82 Î²Î¬Ï\83ηÏ\82 δεδομένων: $1)",
-       "dberr-info-hidden": "(Δεν είναι δυνατή η επικοινωνία με τον εξυπηρετητή της βάσης δεδομένων)",
+       "dberr-info": "(Î\94εν ÎµÎ¯Î½Î±Î¹ Î´Ï\85ναÏ\84ή Î· Ï\80Ï\81Ï\8cÏ\83βαÏ\83η Ï\83Ï\84η Î²Î¬Ï\83η δεδομένων: $1)",
+       "dberr-info-hidden": "(Δεν είναι δυνατή η πρόσβαση στη βάση δεδομένων)",
        "dberr-usegoogle": "Μπορείτε να δοκιμάσετε να ψάξετε στο Google εν τω μεταξύ.",
        "dberr-outofdate": "Σημειώστε ότι οι ενδείξεις τους περί του περιεχομένου μας ενδέχεται να μην είναι ενημερωμένες.",
        "dberr-cachederror": "Το ακόλουθο είναι ένα αντίγραφο από την μνήμη της σελίδας που ζητήσατε και ενδέχεται να μην είναι ενημερωμένο.",
        "logentry-upload-revert": "{{GENDER:$2|Ο|Η}} $1 ανέβασε το $3",
        "rightsnone": "(κανένα)",
        "revdelete-summary": "επεξεργασία σύνοψης",
+       "feedback-adding": "Προσθήκη σχολίων στην σελίδα...",
+       "feedback-bugcheck": "Ωραία! Ελέγξτε μόνο ότι δεν είναι ήδη ένα από τα [$1 γνωστά σφάλματα].",
+       "feedback-bugnew": "Έλεγξα. Αναφέρετε ένα νέο σφάλμα",
        "feedback-bugornote": "Εάν είστε έτοιμοι να περιγράψετε ένα τεχνικό πρόβλημα λεπτομερώς παρακαλούμε [$1  κάντε μια αναφορά σφάλματος].\nΔιαφορετικά, μπορείτε να χρησιμοποιήσετε την παρακάτω απλή φόρμα. Το σχόλιό σας θα προστεθεί στη σελίδα \"[$3  $2]\", μαζί με το όνομα χρήστη σας.",
-       "feedback-subject": "Θέμα:",
-       "feedback-message": "Μήνυμα:",
        "feedback-cancel": "Ακύρωση",
-       "feedback-submit": "Υποβολή σχολίων",
-       "feedback-adding": "Προσθήκη σχολίων στην σελίδα...",
+       "feedback-close": "Ολοκληρώθηκε",
        "feedback-error1": "Σφάλμα: Μη αναγνωρίσιμο αποτέλεσμα από το API",
        "feedback-error2": "Σφάλμα: Η επεξεργασία απέτυχε",
        "feedback-error3": "Σφάλμα: Καμία απάντηση από το API",
+       "feedback-message": "Μήνυμα:",
+       "feedback-subject": "Θέμα:",
+       "feedback-submit": "Υποβολή",
        "feedback-thanks": "Ευχαριστούμε! Τα σχόλιά σας έχουν καταχωρηθεί στη σελίδα \"[$2 $1]\".",
-       "feedback-close": "Ολοκληρώθηκε",
-       "feedback-bugcheck": "Ωραία! Ελέγξτε μόνο ότι δεν είναι ήδη ένα από τα [$1 γνωστά σφάλματα].",
-       "feedback-bugnew": "Έλεγξα. Αναφέρετε ένα νέο σφάλμα",
        "searchsuggest-search": "Αναζήτηση",
        "searchsuggest-containing": "περιέχει...",
        "api-error-badaccess-groups": "Δεν επιτρέπεται να ανεβάσετε αρχεία σε αυτό το wiki.",
        "json-error-syntax": "Συντακτικό λάθος",
        "json-error-recursion": "Μία ή περισσότερες αναδρομικές αναφορές στην προς κωδικοποίηση τιμή.",
        "json-error-inf-or-nan": "Μία ή περισσότερες τιμές NAN ή INF στην προς κωδικοποίηση τιμή.",
-       "json-error-unsupported-type": "Δόθηκε τιμή τύπου που δεν μπορεί να κωδικοποιηθεί."
+       "json-error-unsupported-type": "Δόθηκε τιμή τύπου που δεν μπορεί να κωδικοποιηθεί.",
+       "special-characters-group-latin": "Λατινικό",
+       "special-characters-group-latinextended": "Προέκταση του λατινικού",
+       "special-characters-group-ipa": "ΔΦΑ",
+       "special-characters-group-symbols": "Σύμβολα",
+       "special-characters-group-greek": "Ελληνικό",
+       "special-characters-group-cyrillic": "Κυριλλικό",
+       "special-characters-group-arabic": "Αραβικό",
+       "special-characters-group-arabicextended": "Arabic extended",
+       "special-characters-group-persian": "Περσικό",
+       "special-characters-group-hebrew": "Εβραϊκό",
+       "special-characters-group-bangla": "Μπενγκάλι",
+       "special-characters-group-tamil": "Ταμίλ",
+       "special-characters-group-telugu": "Τελούγκου",
+       "special-characters-group-sinhala": "Σινχάλα",
+       "special-characters-group-gujarati": "Γκουχαράτι",
+       "special-characters-group-devanagari": "Ντεβαναγκάρι",
+       "special-characters-group-thai": "ταϊλανδικά",
+       "special-characters-group-lao": "λαοτινά",
+       "special-characters-group-khmer": "καμποτζιανά",
+       "special-characters-title-endash": "παύλα",
+       "special-characters-title-emdash": "διπλή παύλα",
+       "special-characters-title-minus": "σύμβολο πλην"
 }
index cff74b4..e511502 100644 (file)
        "edithelp": "Editing help",
        "edithelppage": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages",
        "helppage": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents",
+       "helppage-top-gethelp": "Help",
        "mainpage": "Main Page",
        "mainpage-description": "Main page",
        "policy-url": "Project:Policy",
        "readonly_lag": "The database has been automatically locked while the slave database servers catch up to the master",
        "internalerror": "Internal error",
        "internalerror_info": "Internal error: $1",
+       "internalerror-fatal-exception": "Fatal exception of type \"$1\"",
        "filecopyerror": "Could not copy file \"$1\" to \"$2\".",
        "filerenameerror": "Could not rename file \"$1\" to \"$2\".",
        "filedeleteerror": "Could not delete file \"$1\".",
        "wrongpassword": "Incorrect password entered.\nPlease try again.",
        "wrongpasswordempty": "Password entered was blank.\nPlease try again.",
        "passwordtooshort": "Passwords must be at least {{PLURAL:$1|1 character|$1 characters}}.",
+       "passwordtoolong": "Passwords cannot be longer than {{PLURAL:$1|1 character|$1 characters}}.",
        "password-name-match": "Your password must be different from your username.",
        "password-login-forbidden": "The use of this username and password has been forbidden.",
        "mailmypassword": "Reset password",
        "missingcommentheader": "<strong>Reminder:</strong> You have not provided a subject/headline for this comment.\nIf you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
        "summary-preview": "Summary preview:",
        "subject-preview": "Subject/headline preview:",
+       "previewerrortext": "An error occurred while attempting to preview your changes.",
        "blockedtitle": "User is blocked",
        "blockedtext": "<strong>Your username or IP address has been blocked.</strong>\n\nThe block was made by $1.\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.\nYou cannot use the \"email this user\" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
        "autoblockedtext": "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.\nThe reason given is:\n\n:<em>$2</em>\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou may contact $1 or one of the other [[{{MediaWiki:Grouppage-sysop}}|administrators]] to discuss the block.\n\nNote that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.\n\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
        "editingsection": "Editing $1 (section)",
        "editingcomment": "Editing $1 (new section)",
        "editconflict": "Edit conflict: $1",
+       "editnotice-notext": "-",
        "explainconflict": "Someone else has changed this page since you started editing it.\nThe upper text area contains the page text as it currently exists.\nYour changes are shown in the lower text area.\nYou will have to merge your changes into the existing text.\n<strong>Only</strong> the text in the upper text area will be saved when you press \"{{int:savearticle}}\".",
        "yourtext": "Your text",
        "storedversion": "Stored revision",
        "notextmatches": "No page text matches",
        "prevn": "previous {{PLURAL:$1|$1}}",
        "nextn": "next {{PLURAL:$1|$1}}",
+       "prev-page": "previous page",
+       "next-page": "next page",
        "prevn-title": "Previous $1 {{PLURAL:$1|result|results}}",
        "nextn-title": "Next $1 {{PLURAL:$1|result|results}}",
        "shown-title": "Show $1 {{PLURAL:$1|result|results}} per page",
        "wantedcategories": "Wanted categories",
        "wantedcategories-summary": "",
        "wantedpages": "Wanted pages",
-       "wantedpages-summary": "",
+       "wantedpages-summary": "List of non-existing pages with the most links to them, excluding pages which only have redirects linking to them. For a list of non-existent pages that have redirects linking to them, see [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Invalid title in result set: $1",
        "wantedfiles": "Wanted files",
        "wantedfiles-summary": "",
        "emailccsubject": "Copy of your message to $1: $2",
        "emailsent": "Email sent",
        "emailsenttext": "Your email message has been sent.",
-       "emailuserfooter": "This email was sent by $1 to $2 by the \"Email user\" function at {{SITENAME}}.",
+       "emailuserfooter": "This email was sent by $1 to $2 by the \"{{int:emailpage}}\" function at {{SITENAME}}.",
        "usermessage-summary": "Leaving system message.",
        "usermessage-editor": "System messenger",
        "usermessage-template": "MediaWiki:UserMessage",
        "thumbnail_image-failure-limit": "There have been too many recent failed attempts ($1 or more) to render this thumbnail. Please try again later.",
        "import": "Import pages",
        "import-summary": "",
-       "importinterwiki": "Transwiki import",
-       "import-interwiki-text": "Select a wiki and page title to import.\nRevision dates and editors' names will be preserved.\nAll transwiki import actions are logged at the [[Special:Log/import|import log]].",
+       "importinterwiki": "Import from another wiki",
+       "import-interwiki-text": "Select a wiki and page title to import.\nRevision dates and editors' names will be preserved.\nAll imports from other wikis are logged at the [[Special:Log/import|import log]].",
        "import-interwiki-sourcewiki": "Source wiki:",
        "import-interwiki-sourcepage": "Source page:",
        "import-interwiki-history": "Copy all history revisions for this page",
        "importcantopen": "Could not open import file",
        "importbadinterwiki": "Bad interwiki link",
        "importsuccess": "Import finished!",
-       "importnosources": "No transwiki import sources have been defined and direct history uploads are disabled.",
+       "importnosources": "No wikis from which to import have been defined and direct history uploads are disabled.",
        "importnofile": "No import file was uploaded.",
        "importuploaderrorsize": "Upload of import file failed.\nThe file is bigger than the allowed upload size.",
        "importuploaderrorpartial": "Upload of import file failed.\nThe file was only partially uploaded.",
        "revdelete-uname-unhid": "username unhidden",
        "revdelete-restricted": "applied restrictions to administrators",
        "revdelete-unrestricted": "removed restrictions for administrators",
+       "logentry-block-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiry time of $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|unblocked}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiry time of $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiry time of $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiry time of $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|imported}} $3 by file upload",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|imported}} $3 from another wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|merged}} $3 into $4 (revisions up to $5)",
        "logentry-move-move": "$1 {{GENDER:$2|moved}} page $3 to $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|moved}} page $3 to $4 without leaving a redirect",
        "newuserlog-autocreate-entry": "Account created automatically",
        "rightslogentry": "changed group membership for $1 from $2 to $3",
        "rightslogentry-autopromote": "was automatically promoted from $2 to $3",
+       "feedback-adding": "Adding feedback to page...",
+       "feedback-back": "Back",
+       "feedback-bugcheck": "Great! Just check that it is not already one of the [$1 known bugs].",
+       "feedback-bugnew": "I checked. Report a new bug",
        "feedback-bugornote": "If you are ready to describe a technical problem in detail please [$1 report a bug].\nOtherwise, you can use the easy form below. Your comment will be added to the page \"[$3 $2]\", along with your username.",
-       "feedback-subject": "Subject:",
-       "feedback-message": "Message:",
        "feedback-cancel": "Cancel",
-       "feedback-submit": "Submit Feedback",
-       "feedback-adding": "Adding feedback to page...",
+       "feedback-close": "Done",
+       "feedback-external-bug-report-button": "File a technical task",
+       "feedback-dialog-title": "Submit feedback",
+       "feedback-dialog-intro": "You can use the easy form below to submit your feedback. Your comment will be added to the page \"$1\", along with your username.",
+       "feedback-error-title": "Error",
        "feedback-error1": "Error: Unrecognized result from API",
        "feedback-error2": "Error: Edit failed",
        "feedback-error3": "Error: No response from API",
+       "feedback-error4": "Error: Unable to post to given feedback title",
+       "feedback-message": "Message:",
+       "feedback-subject": "Subject:",
+       "feedback-submit": "Submit",
+       "feedback-terms": "I understand that my user agent information includes information about my exact browser and operating system version and will be shared publicly alongside my feedback.",
+       "feedback-termsofuse": "I agree to provide feedback in accordance with the Terms of Use.",
        "feedback-thanks": "Thanks! Your feedback has been posted to the page \"[$2 $1]\".",
-       "feedback-close": "Done",
-       "feedback-bugcheck": "Great! Just check that it is not already one of the [$1 known bugs].",
-       "feedback-bugnew": "I checked. Report a new bug",
+       "feedback-thanks-title": "Thank you!",
+       "feedback-useragent": "User agent:",
        "searchsuggest-search": "Search",
        "searchsuggest-containing": "containing...",
        "api-error-badaccess-groups": "You are not permitted to upload files to this wiki.",
        "log-name-pagelang": "Change language log",
        "log-description-pagelang": "This is a log of changes in page languages.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|changed}} page language for $3 from $4 to $5.",
-       "default-skin-not-found": "Whoops! The default skin for your wiki, defined in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYour installation seems to include the following skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable 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 lines into <code>LocalSettings.php</code> to enable all currently installed 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": "Whoops! The default skin for your wiki, defined in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is not available.\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>\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": "Whoops! The default skin for your wiki, defined in <code>$wgDefaultSkin</code> as <code>$1</code>, is not available.\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:* 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. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.\n",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enabled)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabled''')",
        "json-error-utf8": "Malformed UTF-8 characters, possibly incorrectly encoded",
        "json-error-recursion": "One or more recursive references in the value to be encoded",
        "json-error-inf-or-nan": "One or more NAN or INF values in the value to be encoded",
-       "json-error-unsupported-type": "A value of a type that cannot be encoded was given"
+       "json-error-unsupported-type": "A value of a type that cannot be encoded was given",
+       "headline-anchor-title": "Link to this section",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin extended",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symbols",
+       "special-characters-group-greek": "Greek",
+       "special-characters-group-cyrillic": "Cyrillic",
+       "special-characters-group-arabic": "Arabic",
+       "special-characters-group-arabicextended": "Arabic extended",
+       "special-characters-group-persian": "Persian",
+       "special-characters-group-hebrew": "Hebrew",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "en dash",
+       "special-characters-title-emdash": "em dash",
+       "special-characters-title-minus": "minus sign"
 }
index bdc98d2..3759bc8 100644 (file)
        "anoneditwarning": "<strong>Averto:</strong> Vi ne estas ensalutinta.\nVia IP-adreso enregistriĝos en la redakta historio de tiu ĉi paĝo. Se vi <strong>[$1 ensalutas]</strong> aŭ <strong>[$2 kreas konton]</strong>, viaj redaktoj estos atribuitaj al via salutnomo, kune kun aliaj bonaĵoj.",
        "anonpreviewwarning": "''Vi ne estas ensalutita. La konservo de la paĝo registros vian IP-adreson en redakta historio de ĉi tiu paĝo.''",
        "missingsummary": "'''Rememorigilo:''' Vi ne provizis redaktan resumon. Se vi alklakos denove la konservan butonon, via redaktaĵo estos konservita sen resumo.",
+       "selfredirect": "<strong>Atentigo:</strong> Ve alidirektas tiun ĉi paĝon al ĝi mem. Vi eble volas difini alian celan paĝon aŭ vi volas redakti alian paĝon.\nSe vi denove klakos al \"{{int:savearticle}}\", la alidirektilo estos ĉiuokaze kreita.",
        "missingcommenttext": "Bonvolu entajpi komenton malsupre.",
        "missingcommentheader": "'''Atenton:''' Vi ne provizis temon aŭ subtitolon por ĉi tiu komento.\nSe vi klakos \"Konservi\" denove, via redakto estos konservita sen ĝi.",
        "summary-preview": "Resuma antaŭrigardo:",
        "prefs-personal": "Profilo de uzanto",
        "prefs-rc": "Lastaj ŝanĝoj",
        "prefs-watchlist": "Atentaro",
+       "prefs-editwatchlist": "Redakti atentaron",
+       "prefs-editwatchlist-label": "Redakti erojn de via atentaro:",
+       "prefs-editwatchlist-edit": "Montri kaj forigi erojn de vi atentaro",
+       "prefs-editwatchlist-raw": "Redakti krudan atentaron",
+       "prefs-editwatchlist-clear": "Malplenigi vian atentaron",
        "prefs-watchlist-days": "Kiom da tagoj montriĝu en la atentaro:",
        "prefs-watchlist-days-max": "Maksimume  $1 {{PLURAL:$1|tago|tagoj}}",
        "prefs-watchlist-edits": "Maksimuma nombro de ŝanĝoj montrendaj en ekspandita atentaro:",
        "right-protect": "Ŝanĝi protektniveloj kaj redakti protektitajn paĝojn",
        "right-editprotected": "Redakti protektitajn paĝojn (sen kaskada protektado)",
        "right-editsemiprotected": "Redakti paĝojn protektitajn kiel \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Redakti paĝan enhavmodelon",
        "right-editinterface": "Redakti la uzantointerfacon",
        "right-editusercssjs": "Redaktu CSS- kaj JS-dosierojn de aliaj uzantoj",
        "right-editusercss": "Redaktu CSS-dosierojn de aliaj uzantoj",
        "right-override-export-depth": "Eksporti paĝojn inkluzivante ligitajn paĝojn ĝis profundeco de 5",
        "right-sendemail": "Sendi retpoŝton al aliaj uzantoj",
        "right-passwordreset": "Vidi retpoŝtojn de pasvorta restarado.",
+       "right-managechangetags": "Kreado kaj forigado de [[Special:Tags|etikedoj]] de datumbazo",
        "newuserlogpage": "Protokolo de uzanto-kreado",
        "newuserlogpagetext": "Jen protokolo de lastaj kreadoj de uzantoj.",
        "rightslog": "Protokolo de uzanto-rajtoj",
        "action-viewmywatchlist": "vidi vian atento-liston",
        "action-viewmyprivateinfo": "vidi viajn privatajn informojn",
        "action-editmyprivateinfo": "redakti viajn privatajn informojn",
+       "action-editcontentmodel": "redakti paĝan enhavmodelon",
+       "action-managechangetags": "krei kaj forigi etikedojn de datumbazo",
        "nchanges": "$1 {{PLURAL:$1|ŝanĝo|ŝanĝoj}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ekde lasta vizito}}",
        "enhancedrc-history": "historio",
        "trackingcategories-msg": "Kategorio pri kontrolado",
        "trackingcategories-name": "Nomo de mesaĝo",
        "trackingcategories-desc": "Kriterio por inkluzivi kategorion",
+       "broken-file-category-desc": "La paĝo enhavas malvalidan ligilon al dosiero (ligilo por uzi dosieron kvankam la dosiero ne ekzistas).",
        "trackingcategories-nodesc": "Neniu priskribo estas disponebla.",
        "trackingcategories-disabled": "Kategorio estas malaktivigita",
        "mailnologin": "Neniu alsendota adreso",
        "ipboptions": "2 horoj:2 hours,1 tago:1 day,3 tagoj:3 days,1 semajno:1 week,2 semajnoj:2 weeks,1 monato:1 month,3 monatoj:3 months,6 monatoj:6 months,1 jaro:1 year,porĉiam:infinite",
        "ipbhidename": "Kaŝi salutnomon de redaktoj kaj listoj",
        "ipbwatchuser": "Atenti la paĝojn por uzanto kaj diskuto de ĉi tiu uzanto.",
-       "ipb-disableusertalk": "Preventi ĉi tiun uzanton de redaktante ties propran diskuto-paĝon kiam forbarita",
+       "ipb-disableusertalk": "Preventi ĉi tiun uzanton redakti sian diskuto-paĝon, dum li estas forbarita",
        "ipb-change-block": "Reforbari la uzanton kun ĉi tiuj preferoj",
        "ipb-confirm": "Konfirmi forbaron",
        "badipaddress": "Neniu uzanto, aŭ la IP-adreso estas misformita.",
        "blockipsuccesssub": "Forbaro sukcesis.",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] estas forbarita. <br />\nVidu la [[Special:BlockList|liston de forbaroj]] por kontroli.",
        "ipb-blockingself": "Vi preskaŭ forbaros vin mem! Ĉu vi certas ke vi volas fari ĉi tiel?",
-       "ipb-confirmhideuser": "Vi preskaŭ forbaras uzanto kun \"kaŝi uzanton\" ŝalta. Ĉi tiu kaŝi la nomon de uzanto en ĉiuj listoj ka protokoloj. Ĉu vi certas ke vi volas fari ĉi tiel?",
+       "ipb-confirmhideuser": "Vi preskaŭ forbaras uzanton kun ŝaltita modo \"kaŝi uzanton\". Ĉi tio kaŝos la nomon de uzanto en ĉiuj listoj kaj protokoloj. Ĉu vi certas, ke vi volas fari ĉi tion?",
        "ipb-edit-dropdown": "Redakti kialojn por forbaro.",
        "ipb-unblock-addr": "Restarigi $1",
        "ipb-unblock": "Malforbari salutnomon aŭ IP-adreson",
        "ipb_already_blocked": "\"$1\" estas jam forbarita",
        "ipb-needreblock": "$1 estas jam forbarita. Ĉu vi volas ŝanĝi la opciojn?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Alia forbaro|Aliaj forbaroj}}",
-       "unblock-hideuser": "Vi ne povas malforbari ĉi tiun uzanton, pro ties salutnomo estis kaŝita.",
+       "unblock-hideuser": "Vi ne povas malforbari ĉi tiun uzanton, ĉar ties salutnomo estis kaŝita.",
        "ipb_cant_unblock": "Eraro: Forbar-identigo $1 ne estas trovita. Ĝi eble estis jam malforbarita.",
        "ipb_blocked_as_range": "Eraro: La IP-adreso $1 ne estas forbarita rekte kaj ne povas esti malforbarita. Tamen ĝi estas forbarita kiel parto de la intervalo $2, kiu ne povas esti malforbarita.",
        "ip_range_invalid": "Malvalida IP-adresa intervalo.",
        "import-rootpage-nosubpage": "La nomspaco \"$1\" de la radikopaĝo ne permesas subpaĝoj.",
        "importlogpage": "Protokolo de importaĵoj",
        "importlogpagetext": "Administrantecaj importoj de paĝoj kun redakto-historio de aliaj vikioj.",
-       "import-logentry-upload": "importita [[$1]] de dosiera alŝuto",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizio importita|revizioj importitaj}}",
-       "import-logentry-interwiki": "transvikiigita $1",
        "import-logentry-interwiki-detail": "Importis $1 {{PLURAL:$1|revizion|reviziojn}} de $2",
        "javascripttest": "Ĝavoskripta testado",
        "javascripttest-pagetext-noframework": "Ĉi tiu paĝo estas konservita por funkciigi testojn de JavaScript.",
        "logentry-upload-revert": "$1 {{GENDER:$2|alŝutis}} $3",
        "rightsnone": "(nenia)",
        "revdelete-summary": "redaktoresumon",
+       "feedback-adding": "Aldonanta respondon al la paĝo...",
+       "feedback-bugcheck": "Bonega! Nur konfirmu ke ĝi ne jam ekzistas inter la [$1 konataj cimoj].",
+       "feedback-bugnew": "Mi konfirmis. Raportu novan cimon.",
        "feedback-bugornote": "Se vi pretas priskribi teknikan problemon detale, bonvolu [$1 raporti cimon].\nAŭ vi povas uzi la facilan formularon sube. Via komento estos aldonita al la paĝo \"[$3 $2]\", kune kun via salutnomo kaj uzita retumilo.",
-       "feedback-subject": "Temo:",
-       "feedback-message": "Mesaĝo:",
        "feedback-cancel": "Nuligi",
-       "feedback-submit": "Sendi Mesaĝon",
-       "feedback-adding": "Aldonanta respondon al la paĝo...",
+       "feedback-close": "Farita",
        "feedback-error1": "Eraro: Nerekonita rezulto de API",
        "feedback-error2": "Eraro: La redakto malsukcesis",
        "feedback-error3": "Eraro: Neniu respondo de API",
+       "feedback-message": "Mesaĝo:",
+       "feedback-subject": "Temo:",
+       "feedback-submit": "Sendi Mesaĝon",
        "feedback-thanks": "Dankon! Via opinio-esprimo estis afiŝita al la paĝo \"[$2 $1]\".",
-       "feedback-close": "Farita",
-       "feedback-bugcheck": "Bonega! Nur konfirmu ke ĝi ne jam ekzistas inter la [$1 konataj cimoj].",
-       "feedback-bugnew": "Mi konfirmis. Raportu novan cimon.",
        "searchsuggest-search": "Serĉi",
        "searchsuggest-containing": "enhavas...",
        "api-error-badaccess-groups": "Vi ne havas permeson alŝuti dosierojn al tiu ĉi vikio.",
        "mediastatistics-header-text": "Tekstaj",
        "mediastatistics-header-executable": "Plenumeblaj dosieroj",
        "json-error-state-mismatch": "JSON estas malvalida aŭ malformigita",
-       "json-error-syntax": "Sintaksa eraro"
+       "json-error-syntax": "Sintaksa eraro",
+       "special-characters-group-latin": "Latina",
+       "special-characters-group-latinextended": "Latina etendita",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simboloj",
+       "special-characters-group-greek": "Greka",
+       "special-characters-group-cyrillic": "Cirila",
+       "special-characters-group-arabic": "Araba",
+       "special-characters-group-arabicextended": "araba etendite",
+       "special-characters-group-persian": "persa",
+       "special-characters-group-hebrew": "Hebrea",
+       "special-characters-group-bangla": "Bengala",
+       "special-characters-group-tamil": "Tamila",
+       "special-characters-group-telugu": "Telegua",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Guĝarata",
+       "special-characters-group-devanagari": "Nagario",
+       "special-characters-group-thai": "Taja",
+       "special-characters-group-lao": "laŭa",
+       "special-characters-group-khmer": "kmera",
+       "special-characters-title-endash": "mallonga streketo",
+       "special-characters-title-emdash": "longa streketo",
+       "special-characters-title-minus": "minus-signo"
 }
index fe1b750..2d1aaf9 100644 (file)
                        "Jonathan rrr",
                        "Paynekiller92",
                        "Kroji",
-                       "JasterTDC"
+                       "JasterTDC",
+                       "Laurenslimb",
+                       "Tusca"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "category-empty": "<em>Esta categoría no contiene ninguna página o archivo.</em>",
        "hidden-categories": "{{PLURAL:$1|Categoría oculta|Categorías ocultas}}",
        "hidden-category-category": "Categorías ocultas",
-       "category-subcat-count": "{{PLURAL:$2|Esta categoría solo contiene la siguiente subcategoría.|{{PLURAL:$1|La siguiente subcategoría pertenece|Las siguientes $1 subcategorías pertenecen}} a esta categoría, de un total de $2.}}",
+       "category-subcat-count": "{{PLURAL:$2|Esta categoría solo contiene la siguiente subcategoría.|Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}, de un total de $2.}}",
        "category-subcat-count-limited": "Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}.",
        "category-article-count": "{{PLURAL:$2|Esta categoría incluye solamente la siguiente página.|{{PLURAL:$1|La siguiente página pertenece|Las siguientes $1 páginas pertenecen}} a esta categoría, de un total de $2.}}",
        "category-article-count-limited": "{{PLURAL:$1|La siguiente página pertenece|Las siguientes $1 páginas pertenecen}} a esta categoría.",
        "disclaimers": "Aviso legal",
        "disclaimerpage": "Project:Limitación general de responsabilidad",
        "edithelp": "Ayuda de edición",
+       "helppage-top-gethelp": "Ayuda",
        "mainpage": "Página principal",
        "mainpage-description": "Página principal",
        "policy-url": "Project:Políticas",
        "readonly_lag": "La base de datos se ha bloqueado automáticamente mientras sus servidores esclavos se sincronizan con el maestro.",
        "internalerror": "Error interno",
        "internalerror_info": "Error interno: $1",
+       "internalerror-fatal-exception": "Excepción grave de tipo \"$1\"",
        "filecopyerror": "No se ha podido copiar el archivo «$1» a «$2».",
        "filerenameerror": "No se ha podido renombrar el archivo «$1» a «$2».",
        "filedeleteerror": "No se ha podido borrar el archivo «$1».",
        "wrongpassword": "La contraseña indicada es incorrecta.\nInténtalo de nuevo.",
        "wrongpasswordempty": "No has escrito una contraseña.\nInténtalo de nuevo.",
        "passwordtooshort": "Las contraseñas deben tener al menos {{PLURAL:$1|1 carácter|$1 caracteres}}.",
+       "passwordtoolong": "Las contraseñas no deben tener más de {{PLURAL:$1|1 carácter|$1 caracteres}}.",
        "password-name-match": "Tu contraseña debe ser diferente de tu nombre de usuario.",
        "password-login-forbidden": "El uso de este nombre de usuario y contraseña han sido prohibidos.",
        "mailmypassword": "Restablecer la contraseña",
        "missingcommentheader": "<strong>Atención:</strong> No has escrito un asunto/encabezado para este comentario.\nSi haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
        "summary-preview": "Previsualización del resumen:",
        "subject-preview": "Previsualización del asunto/encabezado:",
+       "previewerrortext": "Se ha producido un error al intentar la vista previa de los cambios.",
        "blockedtitle": "El usuario está bloqueado",
        "blockedtext": "<strong>Tu nombre de usuario o dirección IP ha sido bloqueada.</strong>\n\nEl bloqueo fue hecho por $1.\nLa razón dada es <em>$2</em>.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar a $1 u otro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir el bloqueo.\nNo puedes utilizar la función «enviar correo electrónico a este usuario»  a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nPor favor incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
        "autoblockedtext": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por otro usuario, que resultó bloqueado por $1.\nLa explicación proporcionada es la siguiente:\n\n:<em>$2</em>\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\n\nTen en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y la función no haya sido también bloqueada.\n\nTu actual dirección IP es $3, y el identificador del bloqueo es #$5.\nPor favor, incluye todos los datos aquí mostrados en cualquier consulta que hagas al respecto.",
        "newarticle": "(Nuevo)",
        "newarticletext": "Has seguido un enlace a una página que aún no existe.\nPara crear esta página, escribe en el cuadro que aparece a continuación. Para más información, consulta la [$1 página de ayuda].\nSi llegaste aquí por error, vuelve a la página anterior.",
        "anontalkpagetext": "---- ''Esta es la página de discusión de un usuario anónimo que aún no ha creado una cuenta, o no la usa. Por lo tanto, tenemos que usar su dirección IP para identificarlo. Puede que varios usuarios compartan una misma dirección IP. Si eres un usuario anónimo y crees que se han dirigido a ti con comentarios improcedentes, por favor [[Special:UserLogin/signup|crea una cuenta]] o, si ya la tienes, [[Special:UserLogin|identifícate]] para evitar confusiones futuras con otros usuarios anónimos.''",
-       "noarticletext": "En este momento no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar el título de esta página]] en otras páginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.",
+       "noarticletext": "En este momento no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar el título de esta página]] en otras páginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.",
        "noarticletext-nopermission": "Actualmente no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar este título de página]] en otras páginas, o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados]</span>, pero no tienes permiso para crear esta página.",
        "missing-revision": "La revisión n.º $1 de la página «{{FULLPAGENAME}}» no existe.\n\nEsto suele ocurrir cuando se sigue un enlace de historial obsoleto que apunta a una página ya borrada.\nPuedes encontrar detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
        "userpage-userdoesnotexist": "El usuario «$1» no está registrado. Por favor, asegúrate de que realmente quieres crear o editar esta página.",
        "page_last": "últimas",
        "histlegend": "Selección de diferencias: marca las casillas correspondientes a las versiones a comparar y pulsa Intro o el botón de abajo.<br />\nLeyenda: <strong>(act)</strong> = diferencias con la versión actual,\n<strong>(ant)</strong> = diferencias con la versión anterior, <strong>m</strong> = edición menor",
        "history-fieldset-title": "Buscar en el historial",
-       "history-show-deleted": "Solo ediciones ocultadas",
+       "history-show-deleted": "Solo eliminadas",
        "histfirst": "primeras",
        "histlast": "últimas",
        "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
        "notextmatches": "No hay resultados por texto de página",
        "prevn": "$1 {{PLURAL:$1|anterior|anteriores}}",
        "nextn": "{{PLURAL:$1|$1}} siguientes",
+       "prev-page": "página anterior",
+       "next-page": "página siguiente",
        "prevn-title": "$1 {{PLURAL:$1|resultado anterior|resultados anteriores}}",
        "nextn-title": "$1 {{PLURAL:$1|resultado siguiente|resultados siguientes}}",
        "shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página",
        "prefs-editwatchlist-edit": "Ver y quitar los títulos de tu lista de seguimiento",
        "prefs-editwatchlist-raw": "Editar tu lista de seguimiento en modo texto",
        "prefs-editwatchlist-clear": "Limpiar tu lista de seguimiento",
-       "prefs-watchlist-days": "Número de días a mostrar en la lista de seguimiento:",
+       "prefs-watchlist-days": "Número de días que mostrar en la lista de seguimiento:",
        "prefs-watchlist-days-max": "Máximo $1 {{PLURAL:$1|día|días}}",
-       "prefs-watchlist-edits": "Número máximo de ediciones a mostrar en la lista expandida:",
+       "prefs-watchlist-edits": "Número máximo de ediciones que mostrar en la lista expandida:",
        "prefs-watchlist-edits-max": "Cantidad máxima: 1000",
        "prefs-watchlist-token": "Clave de lista de seguimiento:",
        "prefs-misc": "Miscelánea",
        "prefs-email": "Opciones de correo electrónico",
        "prefs-rendering": "Apariencia",
        "saveprefs": "Guardar",
-       "restoreprefs": "Restaurar la configuración predeterminada",
+       "restoreprefs": "Restaurar la configuración predeterminada (en todas las secciones)",
        "prefs-editing": "Edición",
        "rows": "Filas:",
        "columns": "Columnas:",
        "searchresultshead": "Búsquedas",
        "stub-threshold": "Límite para cambiar a formato de <a href=\"#\" class=\"stub\">enlace a esbozo</a> (en bytes):",
        "stub-threshold-disabled": "Desactivado",
-       "recentchangesdays": "Días que mostrar en Cambios recientes:",
-       "recentchangesdays-max": "(máximo {{PLURAL:$1|un día|$1 días}})",
+       "recentchangesdays": "Días que mostrar en los cambios recientes:",
+       "recentchangesdays-max": "Máximo {{PLURAL:$1|un día|$1 días}}",
        "recentchangescount": "N.º de ediciones que mostrar de manera predeterminada:",
-       "prefs-help-recentchangescount": "Esto incluye cambios recientes, historiales de página, y registros.",
+       "prefs-help-recentchangescount": "Esto incluye cambios recientes, historiales de páginas y registros.",
        "prefs-help-watchlist-token2": "Esta es la clave secreta del canal de suscripción de tu lista de seguimiento.\nCualquier persona que la conozca podría leer tu lista, así que no la compartas.\n[[Special:ResetTokens|Pulsa aquí si necesitas restablecerla]].",
        "savedprefs": "Se han guardado tus preferencias.",
        "timezonelegend": "Huso horario:",
        "prefswarning-warning": "Has hecho cambios en tus preferencias que todavía no se han guardado. Si sales de esta página sin pulsar en «$1» no se actualizarán las preferencias.",
        "prefs-tabs-navigation-hint": "Sugerencia: Puede utilizar las teclas de flecha izquierda y derecha para navegar entre las pestañas de la lista de pestañas.",
        "email-address-validity-valid": "La dirección de correo electrónico parece ser válida",
-       "email-address-validity-invalid": "Introduce una dirección de correo válida",
+       "email-address-validity-invalid": "Escribe una dirección de correo electrónico válida",
        "userrights": "Gestión de permisos de usuario",
        "userrights-lookup-user": "Configurar grupos de usuarios",
        "userrights-user-editname": "Escribe un nombre de usuario:",
        "userrights-groupsmember-auto": "Miembro implícito de:",
        "userrights-groups-help": "Puedes modificar los grupos a los que pertenece {{GENDER:$1|este usuario|esta usuaria}}:\n* Un recuadro marcado significa que {{GENDER:$1|el usuario|la usuaria}} está en ese grupo.\n* Un recuadro no marcado significa que {{GENDER:$1|el usuario|la usuaria}} no está en ese grupo.\n* Un * indica que no podrás eliminar el grupo una vez que lo agregues, o viceversa.",
        "userrights-reason": "Motivo:",
-       "userrights-no-interwiki": "No tienes permiso para editar los grupos a los que pertenece un usuario en otros wikis.",
+       "userrights-no-interwiki": "No tienes permiso para editar permisos de usuario en otros wikis.",
        "userrights-nodatabase": "La base de datos $1 no existe o no es local.",
        "userrights-nologin": "Debes [[Special:UserLogin|iniciar sesión]] con una cuenta de administrador para poder editar los grupos de los usuarios.",
        "userrights-notallowed": "No tienes permiso para añadir o quitar permisos de usuario.",
        "group-all": "(todos)",
        "group-user-member": "{{GENDER:$1|usuario|usuaria}}",
        "group-autoconfirmed-member": "{{GENDER:$1|usuario autoconfirmado|usuaria autoconfirmada}}",
-       "group-bot-member": "bot",
+       "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|administrador|administradora}}",
-       "group-bureaucrat-member": "burócrata",
+       "group-bureaucrat-member": "{{GENDER:$1|burócrata}}",
        "group-suppress-member": "{{GENDER:$1|supresor|supresora}}",
        "grouppage-user": "{{ns:project}}:Usuarios",
        "grouppage-autoconfirmed": "{{ns:project}}:Usuarios autoconfirmados",
        "right-writeapi": "Hacer uso de la API de escritura",
        "right-delete": "Borrar páginas",
        "right-bigdelete": "Borrar páginas con historiales grandes",
-       "right-deletelogentry": "Borrar y recuperar entradas de registro específicas",
+       "right-deletelogentry": "Borrar y restaurar entradas de registro específicas",
        "right-deleterevision": "Borrar y restaurar revisiones específicas de páginas",
        "right-deletedhistory": "Ver el historial de páginas borradas sin su texto asociado",
        "right-deletedtext": "Ver texto borrado y los cambios entre revisiones borradas",
        "right-editusercss": "Editar las páginas de CSS de otros usuarios",
        "right-edituserjs": "Editar las páginas de JavaScript de otros usuarios",
        "right-editmyusercss": "Editar tus páginas de CSS",
-       "right-editmyuserjs": "Editar tus páginas de JavaScript",
+       "right-editmyuserjs": "Editar tus archivos JavaScript",
        "right-viewmywatchlist": "Ver tu lista de seguimiento",
-       "right-editmywatchlist": "Editar tu lista de seguimiento. Algunas acciones seguirán agregando páginas aún sin este derecho.",
+       "right-editmywatchlist": "Editar tu lista de seguimiento. Algunas acciones seguirán agregando páginas aun sin este permiso.",
        "right-viewmyprivateinfo": "Ver tu información privada (ej. correo electrónico, nombre real)",
        "right-editmyprivateinfo": "Editar tu información privada (ej: correo electrónico, nombre real)",
        "right-editmyoptions": "Editar tus preferencias",
        "right-autopatrol": "Tener automáticamente marcadas como verificadas las ediciones propias",
        "right-patrolmarks": "Ver las marcas de verificación de cambios recientes",
        "right-unwatchedpages": "Ver una lista de páginas no vigiladas",
-       "right-mergehistory": "Fusionar historiales",
+       "right-mergehistory": "Fusionar historiales de páginas",
        "right-userrights": "Modificar todos los permisos de usuario",
        "right-userrights-interwiki": "Modificar los permisos de usuario en otros wikis",
        "right-siteadmin": "Bloquear y desbloquear la base de datos",
        "right-managechangetags": "Crear y eliminar [[Special:Tags|etiquetas]] en la base de datos",
        "newuserlogpage": "Registro de creación de usuarios",
        "newuserlogpagetext": "Este es un registro de creación de usuarios.",
-       "rightslog": "Cambios de perfil de usuario",
+       "rightslog": "Registro de permisos de usuario",
        "rightslogtext": "Este es un registro de cambios en los permisos de usuarios.",
        "action-read": "leer esta página",
        "action-edit": "modificar esta página",
        "action-movefile": "trasladar este archivo",
        "action-upload": "subir este archivo",
        "action-reupload": "reemplazar este archivo existente",
-       "action-reupload-shared": "reemplazar este archivo existente en un depósito compartido",
-       "action-upload_by_url": "subir este archivo desde una dirección URL",
+       "action-reupload-shared": "reemplazar este archivo existente en un repositorio compartido",
+       "action-upload_by_url": "subir este archivo desde una URL",
        "action-writeapi": "utilizar la API de escritura",
        "action-delete": "borrar esta página",
        "action-deleterevision": "borrar esta revisión",
        "recentchanges-legend-heading": "'''Leyenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (véase también la [[Special:NewPages|lista de páginas nuevas]])",
        "rcnotefrom": "Debajo aparece{{PLURAL:$5| el cambio|n los cambios}} desde <strong>$3, $4</strong> (se muestran hasta <strong>$1</strong>).",
-       "rclistfrom": "Mostrar nuevos cambios desde $2, $3",
+       "rclistfrom": "Mostrar cambios nuevos desde las $2 del $3",
        "rcshowhideminor": "$1 ediciones menores",
        "rcshowhideminor-show": "Mostrar",
        "rcshowhideminor-hide": "Ocultar",
        "diff": "dif",
        "hist": "hist",
        "hide": "Ocultar",
-       "show": "mostrar",
+       "show": "Mostrar",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
        "recentchangeslinked-feed": "Cambios relacionados",
        "recentchangeslinked-toolbox": "Cambios relacionados",
        "recentchangeslinked-title": "Cambios relacionados con «$1»",
-       "recentchangeslinked-summary": "Esta página es una lista de los últimos cambios en las páginas enlazadas desde una página (o en las pertenecientes a una categoría). Las páginas que están en tu [[Special:Watchlist|lista de seguimiento]] aparecen en '''negrita'''.",
+       "recentchangeslinked-summary": "Esta página es una lista de los últimos cambios en las páginas enlazadas desde una página dada (o en las pertenecientes a una categoría dada). Las páginas que están en tu [[Special:Watchlist|lista de seguimiento]] aparecen en <strong>negrita</strong>.",
        "recentchangeslinked-page": "Nombre de la página:",
        "recentchangeslinked-to": "Mostrar los cambios en páginas enlazadas con la página seleccionada",
-       "upload": "Subir un archivo",
+       "upload": "Subir archivo",
        "uploadbtn": "Subir un archivo",
        "reuploaddesc": "Cancelar subida y volver al formulario de carga",
-       "upload-tryagain": "Enviar la descripción modificada",
+       "upload-tryagain": "Enviar la descripción modificada del archivo",
        "uploadnologin": "No has iniciado sesión",
        "uploadnologintext": "Tienes que $1 para subir archivos.",
        "upload_directory_missing": "El directorio de subida de archivos ($1) no existe, y el servidor no ha podido crearlo.",
        "ignorewarning": "Ignorar aviso y guardar de todos modos",
        "ignorewarnings": "Ignorar todos los avisos",
        "minlength1": "Los nombres de archivo deben tener al menos una letra.",
-       "illegalfilename": "El nombre de archivo «$1» contiene caracteres que no están permitidos en títulos de página. Por favor, renombra el archivo e intenta subirlo de nuevo.",
+       "illegalfilename": "El nombre de archivo «$1» contiene caracteres que no están permitidos en títulos de página. Cambia el nombre del archivo e intenta subirlo de nuevo.",
        "filename-toolong": "Los nombres de archivo no pueden tener más de 240 bytes.",
        "badfilename": "Se ha cambiado el nombre del archivo a «$1».",
        "filetype-mime-mismatch": "La extensión de archivo «.$1» no coincide con el tipo MIME detectado en el archivo ($2).",
        "filetype-badmime": "No se permite subir archivos de tipo MIME «$1».",
-       "filetype-bad-ie-mime": "No se puede subir este archivo porque Internet Explorer podría considerarlo como «$1», que es un tipo de archivo no admitido y potencialmente peligroso.",
+       "filetype-bad-ie-mime": "No se puede subir este archivo porque Internet Explorer podría considerarlo como «$1», que es un tipo de archivo no autorizado y potencialmente peligroso.",
        "filetype-unwanted-type": "<strong>«.$1»</strong> no está entre los tipos de archivo aconsejados.\n{{PLURAL:$3|El único tipo aconsejado es|Los tipos aconsejados son}} $2.",
        "filetype-banned-type": "{{PLURAL:$4|El tipo de archivo|Los tipos de archivo}} <strong>\".$1\"</strong> no {{PLURAL:$4|está permitido|están permitidos}}.\n{{PLURAL:$3|El único tipo de archivo permitido es|Los tipos de archivos permitidos son}} $2.",
        "filetype-missing": "El archivo no tiene extensión (como «.jpg»).",
        "filehist-deleteall": "borrar todo",
        "filehist-deleteone": "borrar",
        "filehist-revert": "revertir",
-       "filehist-current": "act",
+       "filehist-current": "actual",
        "filehist-datetime": "Fecha y hora",
        "filehist-thumb": "Miniatura",
-       "filehist-thumbtext": "Miniatura de la versión de $1",
+       "filehist-thumbtext": "Miniatura de la versión del $1",
        "filehist-nothumb": "Sin miniatura",
        "filehist-user": "Usuario",
        "filehist-dimensions": "Dimensiones",
        "duplicatesoffile": "{{PLURAL:$1|El siguiente archivo es un duplicado|Los siguientes $1 archivos son duplicados}} de éste ([[Special:FileDuplicateSearch/$2|más detalles]]):",
        "sharedupload": "Este archivo es de $1 y puede ser usado por otros proyectos.",
        "sharedupload-desc-there": "Este archivo es de $1 y puede ser usado por otros proyectos.\nPor favor mira la [$2 página de descripción del archivo] para información adicional.",
-       "sharedupload-desc-here": "Este archivo es de $1 y puede ser usado por otros proyectos.\nLa descripción en su [$2 página de descripción del archivo] está mostrada debajo.",
+       "sharedupload-desc-here": "Este archivo es de $1 y puede usarse en otros proyectos.\nLa descripción en su [$2 página de descripción del archivo] se muestra debajo.",
        "sharedupload-desc-edit": "Este archivo es de $1 y puede ser utilizado por otros proyectos.\nTal vez desee editar la descripción de su [$2  página de descripción del archivo] allí.",
        "sharedupload-desc-create": "Este archivo es de $1 y puede ser utilizado por otros proyectos.\nTal vez desee editar la descripción de su [$2 página de descripción del archivo] allí.",
        "filepage-nofile": "No existe ningún archivo con este nombre.",
        "unusedimages": "Imágenes sin uso",
        "wantedcategories": "Categorías requeridas",
        "wantedpages": "Páginas requeridas",
+       "wantedpages-summary": "Lista de páginas inexistentes con el mayor número de enlaces a ellas, excluyendo páginas con únicamente redirecciones. Para una lista de páginas con redirecciones apuntando a ellas, consulte [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Título inválido en conjunto de resultados: $1",
        "wantedfiles": "Ficheros requeridos",
        "wantedfiletext-cat": "Los siguientes archivos están en uso, pero no existen. Es posible que algunos de ellos estén almacenados en repositorios externos y se hayan incluido aquí por error; dichas entradas aparecen <del>tachadas</del>. De igual manera, las páginas que incluyen archivos inexistentes se enumeran en [[:$1]].",
        "unusedimagestext": "Los siguientes archivos existen pero no están insertados en ninguna página.\nPor favor note que otros sitios web pueden vincular a un archivo con un URL directo, y por tanto pueden ser listados aquí a pesar de estar en uso activo.",
        "unusedcategoriestext": "Las siguientes categorías han sido creadas, pero ningún artículo o categoría las utiliza.",
        "notargettitle": "No hay página objetivo",
-       "notargettext": "Especifique sobre qué página desea llevar a cabo esta acción.",
+       "notargettext": "No has especificado sobre qué página deseas llevar a cabo esta acción.",
        "nopagetitle": "No existe la página destino",
        "nopagetext": "La página destino que ha especificado no existe.",
        "pager-newer-n": "{{PLURAL:$1|1 siguiente|$1 siguientes}}",
        "prevpage": "Página anterior ($1)",
        "allpagesfrom": "Mostrar páginas que empiecen por:",
        "allpagesto": "Mostrar páginas terminadas con:",
-       "allarticles": "Todos los artículos",
+       "allarticles": "Todas las páginas",
        "allinnamespace": "Todas las páginas (espacio de nombres $1)",
        "allpagessubmit": "Mostrar",
        "allpagesprefix": "Mostrar páginas con el prefijo:",
        "emailpage": "Enviar mensaje al usuario",
        "emailpagetext": "Puedes usar el formulario de abajo para enviar un correo electrónico a {{GENDER:$1|este usuario|esta usuaria}}.\nLa dirección de correo electrónico que indicaste en [[Special:Preferences|tus preferencias de usuario]] aparecerá en el campo \"Remitente\" o \"De\" para que el destinatario pueda responderte.",
        "defemailsubject": "Correo electrónico enviado por el usuario «$1» desde {{SITENAME}}",
-       "usermaildisabled": "Correo electrónico del usuario deshabilitado",
+       "usermaildisabled": "Correo electrónico del usuario desactivado",
        "usermaildisabledtext": "No puedes enviar correos electrónicos a otros usuarios en esta wiki",
        "noemailtitle": "No hay dirección de correo electrónico",
        "noemailtext": "Este usuario no ha especificado una dirección de correo electrónico válida.",
        "protect_expiry_old": "El tiempo de expiración está en el pasado.",
        "protect-unchain-permissions": "Desbloquear opciones de protección adicionales",
        "protect-text": "Puedes ver y modificar el nivel de protección de la página '''$1'''.",
-       "protect-locked-blocked": "No puede cambiar los niveles de protección estando bloqueado. A continuación se muestran las opciones actuales de la página '''$1''':",
+       "protect-locked-blocked": "No puedes cambiar los niveles de protección estando bloqueado.\nA continuación se muestran las opciones actuales de la página <strong>$1</strong>:",
        "protect-locked-dblock": "Los niveles de protección no se pueden cambiar debido a un bloqueo activo de la base de datos.\nA continuación se muestran las opciones actuales de la página '''$1''':",
-       "protect-locked-access": "Su cuenta no tiene permiso para cambiar los niveles de protección de una página.\nA continuación se muestran las opciones actuales de la página '''$1''':",
+       "protect-locked-access": "Tu cuenta no tiene permiso para cambiar los niveles de protección de una página.\nA continuación se muestran las opciones actuales de la página <strong>$1</strong>:",
        "protect-cascadeon": "Actualmente esta página está protegida porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que tienen activada la opción de protección en cascada. Puedes cambiar el nivel de protección de esta página, pero no afectará a la protección en cascada.",
        "protect-default": "Permitir todos los usuarios",
        "protect-fallback": "Solo permitir usuarios con el permiso «$1»",
        "undeletepage": "Ver y restaurar páginas borradas",
        "undeletepagetitle": "'''Las siguientes son las revisiones borradas de [[:$1|$1]]'''.",
        "viewdeletedpage": "Ver páginas borradas",
-       "undeletepagetext": "{{PLURAL:$1|La siguiente página ha sido borrada pero aún está en el archivo y puede ser restaurada.|Las siguientes $1 páginas han sido borradas pero aún están en el archivo y pueden ser restauradas.}}\nPuede que el archivo se limpie periódicamente.",
+       "undeletepagetext": "{{PLURAL:$1|La siguiente página ha sido borrada, pero aún está en el archivo y puede ser restaurada.|Las siguientes $1 páginas han sido borradas, pero aún están en el archivo y pueden ser restauradas.}}\nPuede que el archivo se limpie periódicamente.",
        "undelete-fieldset-title": "Restaurar revisiones",
-       "undeleteextrahelp": "Para restaurar todo el historial de la página, deja todas las casillas sin seleccionar y pulsa '''''{{int:undeletebtn}}'''''. Para realizar una restauración selectiva, marca las revisiones a ser restauradas y pulsa '''''{{int:undeletebtn}}'''''.",
+       "undeleteextrahelp": "Para restaurar todo el historial de la página, deja todas las casillas sin seleccionar y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>. Para realizar una restauración selectiva, marca las revisiones que deban restaurarse y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>.",
        "undeleterevisions": "$1 {{PLURAL:$1|revisión|revisiones}} archivadas",
-       "undeletehistory": "Si restauras una página, todas sus revisiones serán restauradas al historial.\nSi una nueva página con el mismo nombre ha sido creada desde que se borró la original, las versiones restauradas aparecerán como historial anterior, y la revisión actual de la página actual no se reemplazará automáticamente.",
+       "undeletehistory": "Si restauras la página, todas sus revisiones se restaurarán en el historial.\nSi una nueva página con el mismo nombre se ha creado desde que se borró la original, las versiones restauradas aparecerán en el historial previo.",
        "undeleterevdel": "No se deshará el borrado si éste resulta en el borrado parcial de la última revisión de la página. En tal caso, desmarque o muestre las revisiones borradas más recientes. Las revisiones de archivos que no tiene permitido ver no se restaurarán.",
        "undeletehistorynoadmin": "El artículo ha sido borrado. La razón de su eliminación se indica abajo en el resumen, así como los detalles de las ediciones realizadas antes del borrado. El texto completo del artículo está disponible sólo para usuarios con permisos de administrador.",
        "undelete-revision": "Edición borrada de $1 (fechada $4, a $5) por $3:",
        "whatlinkshere": "Lo que enlaza aquí",
        "whatlinkshere-title": "Páginas que enlazan con «$1»",
        "whatlinkshere-page": "Página:",
-       "linkshere": "Las siguientes páginas enlazan a '''[[:$1]]''':",
+       "linkshere": "Las siguientes páginas enlazan a <strong>[[:$1]]</strong>:",
        "nolinkshere": "Ninguna página enlaza con '''[[:$1]]'''.",
        "nolinkshere-ns": "Ninguna página enlaza con '''[[:$1]]''' en el espacio de nombres elegido.",
        "isredirect": "página redirigida",
        "istemplate": "inclusión",
-       "isimage": "Enlace de imagen",
+       "isimage": "enlace de archivo",
        "whatlinkshere-prev": "{{PLURAL:$1|previa|previas $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|siguiente|siguientes $1}}",
        "whatlinkshere-links": "← enlaces",
        "infiniteblock": "infinito",
        "expiringblock": "expira el $1 a las $2",
        "anononlyblock": "sólo anón.",
-       "noautoblockblock": "bloqueo automático deshabilitado",
+       "noautoblockblock": "bloqueo automático desactivado",
        "createaccountblock": "creación de cuenta bloqueada",
        "emailblock": "correo electrónico bloqueado",
        "blocklist-nousertalk": "no puede editar su propia página de discusión",
        "blocklogpage": "Registro de bloqueos",
        "blocklog-showlog": "Este usuario ha sido bloqueado previamente. Debajo se provee el registro de bloqueos para mayor referencia:",
        "blocklog-showsuppresslog": "Este usuario ha sido bloqueado y ocultado. Se provee el registro de supresiones para más detalle:",
-       "blocklogentry": "bloqueó a [[$1]] $3 durante un plazo de $2",
+       "blocklogentry": "bloqueó a [[$1]] por un periodo de: $2 $3",
        "reblock-logentry": "cambió el bloqueo para  [[$1]] con una caducidad de $2 $3",
        "blocklogtext": "Esto es un registro de acciones de bloqueo y desbloqueo de usuarios.\nLas direcciones IP bloqueadas automáticamente no aparecen aquí.\nConsulta la [[Special:BlockList|lista de bloqueos]] para ver la lista de bloqueos y prohibiciones de operar en vigor.",
        "unblocklogentry": "desbloqueó a $1",
        "block-log-flags-anononly": "sólo anónimos",
        "block-log-flags-nocreate": "desactivada la creación de cuentas",
        "block-log-flags-noautoblock": "bloqueo automático desactivado",
-       "block-log-flags-noemail": "correo electrónico deshabilitado",
+       "block-log-flags-noemail": "correo electrónico desactivado",
        "block-log-flags-nousertalk": "no puede editar su propia página de discusión",
        "block-log-flags-angry-autoblock": "autobloqueo avanzado habilitado",
        "block-log-flags-hiddenname": "nombre de usuario ocultado",
        "ipb_expiry_invalid": "El tiempo de caducidad no es válido.",
        "ipb_expiry_temp": "Los bloqueos a nombres de usuario ocultos deben ser permanentes.",
        "ipb_hide_invalid": "No se puede suprimir esta cuenta; tiene más de {{PLURAL:$1|una edición|$1 ediciones}}.",
-       "ipb_already_blocked": "\"$1\" ya se encuentra bloqueado.",
+       "ipb_already_blocked": "La cuenta «$1» ya está bloqueada.",
        "ipb-needreblock": "$1 ya está bloqueado. ¿Quieres cambiar el bloqueo?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Otro bloqueo|Otros bloqueos}}",
        "unblock-hideuser": "No se puede desbloquear a este usuario, porque su nombre de usuario está oculto.",
        "immobile-target-namespace": "No se puede trasladar páginas al espacio de nombres «$1»",
        "immobile-target-namespace-iw": "Un enlace interwiki no es un destino válido para trasladar una página.",
        "immobile-source-page": "Esta página no se puede renombrar.",
-       "immobile-target-page": "No se puede trasladar a tal título.",
+       "immobile-target-page": "No se puede trasladar a ese título.",
        "bad-target-model": "El destino deseado utiliza un modelo diferente de contenido. No se puede realizar la conversión de $1 a $2.",
        "imagenocrossnamespace": "No se puede trasladar el fichero a otro espacio de nombres",
        "nonfile-cannot-move-to-file": "No es posible trasladar lo que no es un archivo al espacio de nombres de archivo",
        "allmessagesname": "Nombre",
        "allmessagesdefault": "Texto predeterminado",
        "allmessagescurrent": "Texto actual",
-       "allmessagestext": "Esta es una lista de mensajes del sistema disponibles en el espacio de nombres MediaWiki:\nPor favor visita [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir con la localización genérica MediaWiki.",
+       "allmessagestext": "Esta es una lista de mensajes del sistema disponibles en el espacio de nombres MediaWiki.\nPor favor, visita [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir a la localización genérica de MediaWiki.",
        "allmessagesnotsupportedDB": "Esta página no está disponible porque '''$wgUseDatabaseMessages''' está deshabilitado.",
        "allmessages-filter-legend": "Filtro",
        "allmessages-filter": "Filtrar por estado de personalización:",
        "thumbnail_image-missing": "El fichero parece no existir: $1",
        "thumbnail_image-failure-limit": "Ha habido muchos intentos recientes ($1 o más) para representar esta miniatura. Inténtalo de nuevo más tarde.",
        "import": "Importar páginas",
-       "importinterwiki": "Importación transwiki",
-       "import-interwiki-text": "Selecciona un wiki y un título de página para importar.\nLas fechas de revisiones y los nombres de editores se preservarán.\nTodas las importaciones transwiki se registran en el [[Special:Log/import|registro de importaciones]].",
+       "importinterwiki": "Importar desde otro wiki",
+       "import-interwiki-text": "Selecciona un wiki y un título de página para importar.\nLas fechas de revisiones y los nombres de editores se preservarán.\nTodas las importaciones de otros wikis se registran en el [[Special:Log/import|registro de importaciones]].",
        "import-interwiki-sourcewiki": "Wiki de origen:",
        "import-interwiki-sourcepage": "Página de origen:",
        "import-interwiki-history": "Copiar todas las versiones históricas para esta página",
        "importcantopen": "No se pudo importar el archivo",
        "importbadinterwiki": "Enlace interwiki anómalo",
        "importsuccess": "¡La importación se ha realizado con éxito!",
-       "importnosources": "No hay fuentes de importación transwiki y no está permitido subir directamente el historial.",
+       "importnosources": "No se definieron wikis de los cuales importar y no está permitido subir directamente el historial.",
        "importnofile": "No se subieron archivos de importación.",
        "importuploaderrorsize": "Falló la carga del archivo de importaciones.\nSu tamaño es superior al máximo permitido.",
        "importuploaderrorpartial": "Falló la subida del fichero de importación.\nSe subió sólo parcialmente.",
        "import-rootpage-nosubpage": "El espacio de nombres \"$1\" de la página raíz no permite subpáginas.",
        "importlogpage": "Registro de importaciones",
        "importlogpagetext": "Importaciones administrativas de páginas con historial desde otros wikis.",
-       "import-logentry-upload": "importó [[$1]] por subida de archivo",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisión importada|revisiones importadas}}",
-       "import-logentry-interwiki": "transwikificada $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisión importada|revisiones importadas}} desde $2",
        "javascripttest": "Pruebas de JavaScript",
        "javascripttest-pagetext-noframework": "Esta página está reservada para ejecutar pruebas de JavaScript.",
        "tooltip-pt-preferences": "Tus preferencias",
        "tooltip-pt-watchlist": "Lista de páginas cuyos cambios vigilas",
        "tooltip-pt-mycontris": "Lista de tus contribuciones",
-       "tooltip-pt-login": "Te recomendamos iniciar sesión, sin embargo no es obligatorio",
+       "tooltip-pt-login": "Te recomendamos iniciar sesión, aunque no es obligatorio",
        "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 del artículo",
+       "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-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 y sus autores",
+       "tooltip-ca-history": "Versiones anteriores de esta página",
        "tooltip-ca-protect": "Proteger esta página",
        "tooltip-ca-unprotect": "Cambiar protección de esta página",
        "tooltip-ca-delete": "Borrar esta página",
        "tooltip-ca-watch": "Añadir esta página a tu lista de seguimiento",
        "tooltip-ca-unwatch": "Borrar esta página de su lista de seguimiento",
        "tooltip-search": "Buscar en {{SITENAME}}",
-       "tooltip-search-go": "Ir al artículo con este nombre exacto si existe",
-       "tooltip-search-fulltext": "Busca este texto en las páginas",
+       "tooltip-search-go": "Ir a la página con este nombre exacto si existe",
+       "tooltip-search-fulltext": "Buscar este texto en las páginas",
        "tooltip-p-logo": "Visitar la página principal",
        "tooltip-n-mainpage": "Visitar la página principal",
        "tooltip-n-mainpage-description": "Visitar la página principal",
        "tooltip-n-portal": "Acerca del proyecto, lo que puedes hacer, dónde encontrar información",
-       "tooltip-n-currentevents": "Información de contexto sobre acontecimientos actuales",
+       "tooltip-n-currentevents": "Encuentra información de contexto sobre acontecimientos actuales",
        "tooltip-n-recentchanges": "Lista de cambios recientes en el wiki",
        "tooltip-n-randompage": "Cargar una página al azar",
        "tooltip-n-help": "El lugar para aprender",
        "tooltip-t-contributions": "Lista de contribuciones de este usuario",
        "tooltip-t-emailuser": "Enviar un mensaje de correo a este usuario",
        "tooltip-t-info": "Más información sobre esta página",
-       "tooltip-t-upload": "Subir imágenes o archivos multimedia",
+       "tooltip-t-upload": "Subir archivos",
        "tooltip-t-specialpages": "Lista de todas las páginas especiales",
        "tooltip-t-print": "Versión imprimible de esta página",
        "tooltip-t-permalink": "Enlace permanente a esta versión de la página",
-       "tooltip-ca-nstab-main": "Ver el artículo",
-       "tooltip-ca-nstab-user": "Ver la página de usuario",
+       "tooltip-ca-nstab-main": "Ver la página de contenido",
+       "tooltip-ca-nstab-user": "Ver la página del usuario",
        "tooltip-ca-nstab-media": "Ver la página de multimedia",
        "tooltip-ca-nstab-special": "Esta es una página especial, no se puede editar la página en sí",
-       "tooltip-ca-nstab-project": "Ver la página de proyecto",
-       "tooltip-ca-nstab-image": "Ver la página de la imagen",
+       "tooltip-ca-nstab-project": "Ver la página del proyecto",
+       "tooltip-ca-nstab-image": "Ver la página del archivo",
        "tooltip-ca-nstab-mediawiki": "Ver el mensaje de sistema",
        "tooltip-ca-nstab-template": "Ver la plantilla",
        "tooltip-ca-nstab-help": "Ver la página de ayuda",
        "tooltip-ca-nstab-category": "Ver la página de categoría",
        "tooltip-minoredit": "Marcar este cambio como menor",
        "tooltip-save": "Guardar los cambios",
-       "tooltip-preview": "Previsualiza los cambios realizados. ¡Por favor, hazlo antes de grabar!",
-       "tooltip-diff": "Muestra los cambios que ha introducido en el texto.",
+       "tooltip-preview": "Previsualiza tus cambios. ¡Hazlo antes de grabar!",
+       "tooltip-diff": "Mostrar los cambios que has hecho en el texto.",
        "tooltip-compareselectedversions": "Ver las diferencias entre las dos versiones seleccionadas de esta página.",
        "tooltip-watch": "Añadir esta página a tu lista de seguimiento",
        "tooltip-watchlistedit-normal-submit": "Borrar páginas",
        "tooltip-watchlistedit-raw-submit": "Actualizar lista de seguimiento",
        "tooltip-recreate": "Recupera una página que ha sido borrada",
        "tooltip-upload": "Empieza la subida",
-       "tooltip-rollback": "«Revertir» revierte todas las ediciones del último usuario con un solo clic.",
+       "tooltip-rollback": "«Revertir» revierte todas las ediciones del último usuario a esta página con un solo clic.",
        "tooltip-undo": "«Deshacer» revierte la edición seleccionada y abre la página de edición en el modo de previsualización.\nPermite añadir una razón al resumen de edición.",
        "tooltip-preferences-save": "Guardar las preferencias",
-       "tooltip-summary": "Introduce un breve resumen",
+       "tooltip-summary": "Escribe un breve resumen",
        "interlanguage-link-title": "$1 ($2)",
        "common.css": "/* El CSS colocado en esta página será aplicado a todas las apariencias */",
        "print.css": "/* Los estilos CSS colocados aquí afectarán la impresión */",
        "spam_reverting": "Revirtiendo a la última versión que no contenga enlaces a $1",
        "spam_blanking": "Todas las revisiones contienen enlaces a $1, blanqueando",
        "spam_deleting": "Todas las revisiones que contienen enlaces a $1, en proceso de eliminación",
-       "simpleantispam-label": "Comprobación anti-spam\n¡NO rellenes esto!",
+       "simpleantispam-label": "Comprobación anti-spam.\n¡<strong>NO</strong> rellenes esto!",
        "pageinfo-title": "Información de «$1»",
        "pageinfo-not-current": "Lo sentimos, no es posible mostrar esta información para las revisiones antiguas.",
        "pageinfo-header-basic": "Información básica",
        "filedeleteerror-short": "Error al borrar el archivo: $1",
        "filedeleteerror-long": "Se han producido errores mientras se borraba el archivo:\n\n$1",
        "filedelete-missing": "No se pudo borrar el archivo \"$1\" porque no existe.",
-       "filedelete-old-unregistered": "La revisión de archivo \"$1\" no está en la base de datos.",
+       "filedelete-old-unregistered": "La revisión de archivo «$1» no se encuentra en la base de datos.",
        "filedelete-current-unregistered": "El archivo «$1» no existe en la base de datos.",
        "filedelete-archive-read-only": "El servidor web no logra escribir en el directorio archivo \"$1\".",
        "previousdiff": "← Edición anterior",
        "file-info": "tamaño de archivo: $1; tipo MIME: $2",
        "file-info-size": "$1 × $2 píxeles; tamaño de archivo: $3; tipo MIME: $4",
        "file-info-size-pages": "$1 × $2 píxeles, tamaño de archivo: $3, tipo MIME: $4, $5 {{PLURAL:$5|página|páginas}}",
-       "file-nohires": "No disponible a mayor resolución.",
+       "file-nohires": "No disponible en mayor resolución.",
        "svg-long-desc": "archivo SVG, nominalmente $1 × $2 píxeles, tamaño de archivo: $3",
        "svg-long-desc-animated": "Archivo SVG animado, nominalmente de $1 × $2 píxeles, tamaño del archivo: $3",
        "svg-long-error": "Archivo SVG no válido: $1",
        "yesterday-at": "Ayer a las $1",
        "bad_image_list": "El formato es el siguiente:\n\nSolo se reconocen elementos de lista (líneas que comienzan con «*»).\nEl primer enlace de cada línea debe ser un enlace al archivo que se quiere bloquear.\nTodos los demás enlaces en la misma línea se tomarán como excepciones (es decir, páginas donde sí se puede usar el archivo).",
        "metadata": "Metadatos",
-       "metadata-help": "Este archivo contiene información adicional (metadatos), probablemente añadida por la cámara digital, el escáner o el programa usado para crearlo o digitalizarlo. Si el archivo ha sido modificado desde su estado original, pueden haberse perdido algunos detalles.",
+       "metadata-help": "Este archivo contiene información adicional, probablemente añadida por la cámara digital o el escáner usado para crearlo o digitalizarlo.\nSi el archivo ha sido modificado desde su estado original, pueden haberse perdido algunos detalles.",
        "metadata-expand": "Mostrar datos detallados",
        "metadata-collapse": "Ocultar datos detallados",
-       "metadata-fields": "Los campos de metadatos que se listan en este mensaje se mostrarán en la página de descripción de la imagen aún cuando la tabla de metadatos esté plegada.\nExisten otros campos que se mantendrán ocultos por defecto.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Los campos de metadatos listados en este mensaje se mostrarán en la página de descripción de la imagen cuando la tabla de metadatos esté plegada.\nOtros campos se mantendrán ocultos por defecto.\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": "Anchura",
        "exif-imagelength": "Altura",
        "exif-bitspersample": "Bits por componente",
        "exif-software": "Software usado",
        "exif-artist": "Autor",
        "exif-copyright": "Titular de los derechos de autor",
-       "exif-exifversion": "Versión Exif",
+       "exif-exifversion": "Versión de Exif",
        "exif-flashpixversion": "Versión admitida de Flashpix",
        "exif-colorspace": "Espacio de color",
        "exif-componentsconfiguration": "Significado de cada componente",
        "exif-gpslongitude-w": "Longitud oeste",
        "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metro|metros}} sobre el nivel del mar",
        "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metro|metros}} bajo el nivel del mar",
-       "exif-gpsstatus-a": "Medida en progreso",
+       "exif-gpsstatus-a": "Medida en proceso",
        "exif-gpsstatus-v": "Interoperabilidad de medida",
        "exif-gpsmeasuremode-2": "Medición bidimensional",
        "exif-gpsmeasuremode-3": "Medición tridimensional",
        "redirect-lookup": "Buscar:",
        "redirect-value": "Valor:",
        "redirect-user": "Id. del usuario",
-       "redirect-page": "ID de la página",
+       "redirect-page": "Identificador de la página",
        "redirect-revision": "Revisión de página",
        "redirect-file": "Nombre de fichero",
        "redirect-not-exists": "No se encontró el valor",
        "revdelete-uname-unhid": "nombre de usuario mostrado",
        "revdelete-restricted": "restricciones para administradores aplicadas",
        "revdelete-unrestricted": "restricciones para administradores eliminadas",
+       "logentry-block-block": "$1 {{GENDER:$2|bloqueó}} a {{GENDER:$4|$3}} durante un plazo de $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueó}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|cambió}} la configuración del bloqueo de {{GENDER:$4|$3}} durante un plazo de $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|bloqueó}} {{GENDER:$4|$3}} durante un plazo de $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|cambió}} la configuración del bloqueo de {{GENDER:$4|$3}} durante un plazo de $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|importó}} $3 subiendo un archivo",
+       "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 movió la página $3 a $4",
+       "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_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": "La cuenta de usuario $1 ha sido 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-autocreate": "La cuenta $1 fue creada automáticamente",
+       "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-autopromote": "$1 ha sido {{GENDER:$2|promocionado|promocionada}} automáticamente de $4 a $5",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|desactivó}} la etiqueta «$4» para evitar su uso por usuarios y bots",
        "rightsnone": "(ninguno)",
        "revdelete-summary": "resumen de edición",
+       "feedback-adding": "Añadiendo comentarios a la página...",
+       "feedback-back": "Volver",
+       "feedback-bugcheck": "¡Perfecto! Únicamente comprueba que no sea un [$1 fallo conocido].",
+       "feedback-bugnew": "Lo he comprobado. Informar de un nuevo fallo.",
        "feedback-bugornote": "Si estás preparado para describir en detalle un problema técnico, [$1 informa de un bug] por favor.\n\nEn otro caso, puedes usar el siguiente formulario. Tu comentario será añadido a la página [$3 $2], junto con tu nombre de usuario y el navegador que usas.",
-       "feedback-subject": "Asunto:",
-       "feedback-message": "Mensaje:",
        "feedback-cancel": "Cancelar",
-       "feedback-submit": "Enviar comentarios",
-       "feedback-adding": "Añadiendo comentarios a la página...",
+       "feedback-close": "Hecho",
+       "feedback-external-bug-report-button": "Enviar una tarea técnica",
+       "feedback-dialog-title": "Enviar comentarios",
+       "feedback-dialog-intro": "Puedes usar el formulario sencillo debajo para enviar tus comentarios. Ellos se agregarán a la página \"$1\", junto con tu nombre de usuario.",
+       "feedback-error-title": "Error",
        "feedback-error1": "Error: No se reconoce resultado de API",
        "feedback-error2": "Error: Falló la edición",
        "feedback-error3": "Error: No hay respuesta de la API",
+       "feedback-error4": "Error: correo no enviado por título no avalado",
+       "feedback-message": "Mensaje:",
+       "feedback-subject": "Asunto:",
+       "feedback-submit": "Enviar",
+       "feedback-terms": "Entiendo que la información de mi agente de usuario incluye información sobre la versión exacta de mi navegador y mi sistema operativo y serán compartidos públicamente junto a mis comentarios.",
+       "feedback-termsofuse": "Acepto proporcionar comentarios de acuerdo con los Términos de uso.",
        "feedback-thanks": "¡Gracias! Su comentario ha sido anotado en la página [$2  $1].",
-       "feedback-close": "Hecho",
-       "feedback-bugcheck": "¡Perfecto! Únicamente comprueba que no sea un [$1 fallo conocido].",
-       "feedback-bugnew": "Lo he comprobado. Informar de un nuevo fallo.",
+       "feedback-thanks-title": "¡Muchas gracias!",
+       "feedback-useragent": "Agente de usuario:",
        "searchsuggest-search": "Buscar",
        "searchsuggest-containing": "que contiene...",
        "api-error-badaccess-groups": "No puedes cargar archivos en este wiki.",
        "limitreport-expensivefunctioncount": "Cuenta de la funcion expansiva del analizador",
        "expandtemplates": "Expandir plantillas",
        "expand_templates_intro": "Esta página especial toma un texto wiki y expande todas sus plantillas recursivamente.\nTambién expande las funciones sintácticas como <code><nowiki>{{</nowiki>#language:…}}</code>, y variables como\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. De hecho, expande casi cualquier cosa que esté entre llaves dobles.",
-       "expand_templates_title": "Título de la página, útil para expandir {{PAGENAME}} o similares",
+       "expand_templates_title": "Título de la página, útil para expandir {{FULLPAGENAME}} o similares:",
        "expand_templates_input": "Texto a expandir:",
-       "expand_templates_output": "Resultado:",
+       "expand_templates_output": "Resultado",
        "expand_templates_xml_output": "Salida XML",
        "expand_templates_html_output": "Salida HTML en crudo",
        "expand_templates_ok": "Aceptar",
        "log-name-pagelang": "Registro de cambios en idiomas",
        "log-description-pagelang": "Este es un registro de los cambios en los idiomas de las páginas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} el idioma de la página «$3» del $4 al $5.",
-       "default-skin-not-found": "¡Vaya! La apariencia predeterminada de tu wiki, definida en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, no está disponible.\n\nLa instalación parece contener las siguientes apariencias. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configuración de apariencias] para más información sobre cómo configurar y seleccionar la apariencia predeterminada.\n\n$2\n\n; Si acabas de instalar MediaWiki:\n: Probablemente la hayas instalado desde git, o directamente desde el código fuente usando algún otro método. Es normal que ocurra esto. Intenta instalar algunas apariencias desde [https://www.mediawiki.org/wiki/Category:All_skins el directorio de apariencias de mediawiki.org] ya sea:\n:* Descargando [https://www.mediawiki.org/wiki/Download el instalador tarball], el cual contiene varias apariencias y extensiones. Puedes copiar y pegar el directorio <code>skins/</code> desde ahí.\n:* Descargando tarballs individuales de cada apariencia de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno de los repositorios en <code>mediawiki/skins/*</code> via git dentro del directorio <code dir=\"ltr\">skins/</code> de tu instalación de MediaWiki.\n: Hacer esto no debería interferir con tu repositorio git si eres un desarrollador de MediaWiki.\n\n; Si acabas de actualizar MediaWiki:\n: A partir de MediaWiki 1.24 ya no se habilitan automáticamente las apariencias instaladas (revisa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Puedes pegar las siguientes líneas en <code>LocalSettings.php</code> para habilitar todas las apariencias instaladas:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabas de modificar <code>LocalSettings.php</code>:\n: Comprueba detenidamente posibles errores tipográficos en los nombres de las apariencias.",
+       "default-skin-not-found": "¡Vaya! La apariencia predeterminada de tu wiki, definida en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, no está disponible.\n\nLa instalación parece contener las siguientes apariencias {{PLURAL:$4|skin|skins}}. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configuración de apariencias] para más información sobre cómo configurar y seleccionar la apariencia predeterminada {{PLURAL:$4|skin|it|los incumplimientos y sus cambios}}.\n\n$2\n\n; Si acabas de instalar MediaWiki:\n: Probablemente la hayas instalado desde git, o directamente desde el código fuente usando algún otro método. Es normal que ocurra esto. Intenta instalar algunas apariencias desde [https://www.mediawiki.org/wiki/Category:All_skins el directorio de apariencias de mediawiki.org] ya sea:\n:* Descargando [https://www.mediawiki.org/wiki/Download el instalador tarball], el cual contiene varias apariencias y extensiones. Puedes copiar y pegar el directorio {{PLURAL:$5|line|líneas}} <code>skins/</code> desde ahí habilitar {{PLURAL:$5|la|todas}} actualmente instalado {{PLURAL:$5|skin|skins}}.\n:* Descargando tarballs individuales de cada apariencia de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno de los repositorios en <code>mediawiki/skins/*</code> via git dentro del directorio <code dir=\"ltr\">skins/</code> de tu instalación de MediaWiki.\n: Hacer esto no debería interferir con tu repositorio git si eres un desarrollador de MediaWiki.\n\n; Si acabas de actualizar MediaWiki:\n: A partir de MediaWiki 1.24 ya no se habilitan automáticamente las apariencias instaladas (revisa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Puedes pegar las siguientes líneas en <code>LocalSettings.php</code> para habilitar todas las apariencias instaladas:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabas de modificar <code>LocalSettings.php</code>:\n: Comprueba detenidamente posibles errores tipográficos en los nombres de las apariencias.",
        "default-skin-not-found-no-skins": "¡Vaya! La apariencia predeterminada de tu wiki, definida en <code>$wgDefaultSkin</code> como <code>$1</code>, no está disponible.\n\nNo tienes apariencias instaladas.\n\n; Si has instalado o actualizado MediaWiki recientemente:\n: Probablemente has instalado desde git, o directamente desde el código fuente usando algún otro método. Esto puede ocurrir en este caso. A partir de MediaWiki 1.24 ya no se incluye ninguna apariencia en el repositorio principal. Trata de instalar algunas apariencias desde el [https://www.mediawiki.org/wiki/Category:All_skins directorio de apariencias de mediawiki.org], ya sea:\n:* Descargando el [https://www.mediawiki.org/wiki/Download instalador tarball], que viene con varias apariencias y extensiones. Puedes copiar y pegar el directorio <code>skins/</code> desde ahí.\n:* Descargando tarballs individuales de cada apariencia de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando alguno de los repositorios en <code>mediawiki/skins/*</code> usando git en el directorio <code dir=\"ltr\">skins/</code> de tu instalación de MediaWiki.\n: Hacer esto no debería interferir con tu repositorio de MediaWiki si eres un desarrollador de MediaWiki. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configuración de apariencias] para información sobre cómo habilitar las apariencias y seleccionar la predeterminada.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activado)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivado''')",
        "json-error-utf8": "Los caracteres UTF-8 tienen errores de formato; probablemente la codificación es incorrecta.",
        "json-error-recursion": "Una o más referencias recursivas en el valor por codificar",
        "json-error-inf-or-nan": "Hay uno o más valores «NAN» o «INF» en el valor que se codificará",
-       "json-error-unsupported-type": "Se proporcionó un valor en un tipo que no se puede codificar"
+       "json-error-unsupported-type": "Se proporcionó un valor en un tipo que no se puede codificar",
+       "headline-anchor-title": "Enlace a esta sección",
+       "special-characters-group-latin": "Latín",
+       "special-characters-group-latinextended": "Latín extendido",
+       "special-characters-group-ipa": "AFI",
+       "special-characters-group-symbols": "Símbolos",
+       "special-characters-group-greek": "Griego",
+       "special-characters-group-cyrillic": "Cirílico",
+       "special-characters-group-arabic": "Árabe",
+       "special-characters-group-arabicextended": "Arábico extendido",
+       "special-characters-group-persian": "Persa",
+       "special-characters-group-hebrew": "Hebreo",
+       "special-characters-group-bangla": "Bengalí",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugú",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Guyaratí",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Tailandés",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Jemer",
+       "special-characters-title-endash": "semirraya",
+       "special-characters-title-emdash": "raya",
+       "special-characters-title-minus": "signo menos"
 }
index 4aa7182..b0afd78 100644 (file)
@@ -22,7 +22,8 @@
                        "Võrok",
                        "WikedKentaur",
                        "לערי ריינהארט",
-                       "Boxmein"
+                       "Boxmein",
+                       "Roland"
                ]
        },
        "tog-underline": "Linkide allakriipsutus:",
        "copyrightpage": "{{ns:project}}:Autoriõigus",
        "currentevents": "Sündmused",
        "currentevents-url": "Project:Sündmused",
-       "disclaimers": "Hoiatused",
-       "disclaimerpage": "Project:Hoiatused",
+       "disclaimers": "Lahtiütlused",
+       "disclaimerpage": "Project:Üldine lahtiütlus",
        "edithelp": "Redigeerimisjuhend",
+       "helppage-top-gethelp": "Abi",
        "mainpage": "Esileht",
        "mainpage-description": "Esileht",
        "policy-url": "Project:Reeglid",
        "portal": "Kogukonnavärav",
        "portal-url": "Project:Kogukonnavärav",
        "privacy": "Privaatsus",
-       "privacypage": "Project:Privaatsus",
+       "privacypage": "Project:Privaatsuseeskiri",
        "badaccess": "Õigus puudub",
        "badaccess-group0": "Sul pole õigust sooritada toimingut, mida üritasid.",
        "badaccess-groups": "Tegevus, mida üritasid, on piiratud kasutajatele {{PLURAL:$2|rühmas|ühes neist rühmadest}}: $1.",
        "missing-article": "Andmebaas ei leidnud küsitud lehekülje \"$1\" $2 teksti.\n\nPõhjuseks võib olla võrdlus- või ajaloolink kustutatud leheküljele.\n\nKui tegemist ei ole nimetatud olukorraga, võib tegu olla ka süsteemi veaga.\nSellisel juhul tuleks teavitada [[Special:ListUsers/sysop|administraatorit]], edastades talle ka käesoleva lehe internetiaadressi.",
        "missingarticle-rev": "(redaktsioon: $1)",
        "missingarticle-diff": "(redaktsioonid: $1, $2)",
-       "readonly_lag": "Andmebaas on automaatselt lukustatud, seniks kuni ''slave''-andmebaasid on uuendatud.",
+       "readonly_lag": "Andmebaas on automaatselt lukustatud, seniks kuni sekundaarsed andmebaasiserverid on primaarserveriga samal järjel.",
        "internalerror": "Sisemine viga",
        "internalerror_info": "Sisemine viga: $1",
+       "internalerror-fatal-exception": "Saatuslik erandtöötluse tõrge: $1",
        "filecopyerror": "Ei saanud faili \"$1\" kopeerida nimega \"$2\".",
        "filerenameerror": "Ei saanud faili \"$1\" failiks \"$2\" ümber nimetada.",
        "filedeleteerror": "Faili nimega \"$1\" ei ole võimalik kustutada.",
        "wrongpassword": "Vale parool. Proovi uuesti.",
        "wrongpasswordempty": "Parool jäi sisestamata. Palun proovi uuesti.",
        "passwordtooshort": "Parool peab koosnema vähemalt {{PLURAL:$1|ühest|$1}} tähemärgist.",
+       "passwordtoolong": "Parool ei saa olla pikem kui {{PLURAL:$1|üks märk|$1 märk}}.",
        "password-name-match": "Parool peab kasutajanimest erinema.",
        "password-login-forbidden": "Selle kasutajanime ja parooli kasutamine on keelatud.",
        "mailmypassword": "Lähtesta parool",
        "missingcommentheader": "'''Meeldetuletus:''' Sa pole kirjutanud kommentaarile teemat ega pealkirja.\nKui klõpsad uuesti \"{{int:savearticle}}\", salvestatakse su kommentaar kummatagi.",
        "summary-preview": "Resümee eelvaade:",
        "subject-preview": "Alaosa pealkirja eelvaade:",
+       "previewerrortext": "Sinu muudatuste eelvaatluse juures esines tõrge.",
        "blockedtitle": "Kasutaja on blokeeritud",
        "blockedtext": "'''Sinu kasutajanimi või IP-aadress on blokeeritud.'''\n\nBlokeeris $1.\nTema põhjendus on järgmine: ''$2''.\n\n* Blokeeringu algus: $8\n* Blokeeringu lõpp: $6\n* Sooviti blokeerida: $7\n\nKüsimuse arutamiseks võid pöörduda kasutaja $1 või mõne teise [[{{MediaWiki:Grouppage-sysop}}|administraatori]] poole.\n\nPane tähele, et sa ei saa kasutajale teadet saata, kui sa pole kinnitanud oma [[Special:Preferences|eelistuste lehel]] kehtivat e-posti aadressi.\n\nSinu praegune IP-aadress on $3 ning blokeeringu number on #$5. Lisa need andmed kõigile järelepärimistele, mida kavatsed teha.",
        "autoblockedtext": "Sinu IP-aadress blokeeriti automaatselt, sest seda kasutas teine kasutaja, kelle $1 blokeeris.\nPõhjendus on järgmine:\n\n:''$2''\n\n* Blokeeringu algus: $8\n* Blokeeringu lõpp: $6\n* Sooviti blokeerida: $7\n\nKüsimuse arutamiseks võid pöörduda kasutaja $1 või mõne teise [[{{MediaWiki:Grouppage-sysop}}|administraatori]] poole.\n\nPane tähele, et sa ei saa teisele kasutajale teadet saata, kui sa pole kinnitanud oma [[Special:Preferences|eelistuste lehel]] kehtivat e-posti aadressi ega ole selle kasutamisest blokeeritud.\n\nSinu praegune IP-aadress on $3 ja blokeeringu number #$5. Lisa need andmed kõigile järelpärimistele, mida kavatsed teha.",
        "notextmatches": "Vasted lehekülje tekstides puuduvad.",
        "prevn": "{{PLURAL:$1|eelmine|eelmised $1}}",
        "nextn": "{{PLURAL:$1|järgmine|järgmised $1}}",
+       "prev-page": "eelmine lehekülg",
+       "next-page": "järgmine lehekülg",
        "prevn-title": "{{PLURAL:$1|Eelmine tulemus|Eelmised $1 tulemust}}",
        "nextn-title": "{{PLURAL:$1|Järgmine tulemus|Järgmised $1 tulemust}}",
        "shown-title": "Näita lehekülje kohta $1 {{PLURAL:$1|tulemus|tulemust}}",
        "unusedimages": "Kasutamata failid",
        "wantedcategories": "Kõige oodatumad kategooriad",
        "wantedpages": "Kõige oodatumad leheküljed",
+       "wantedpages-summary": "Loend puuduvatest lehekülgedest, millele viitab kõige rohkem linke, välja arvatud leheküljed, millele viitavad ainult ümbersuunamised. Puuduvad leheküljed, millele viitavad ümbersuunamised, on loetletud leheküljel [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Tulemuste seas on vigane pealkiri: $1",
        "wantedfiles": "Kõige oodatumad failid",
        "wantedfiletext-cat": "Järgmised failid puuduvad, aga on lehekülgedel kasutuses. Siin võivad olla loetletud ka välistes hoidlates asuvad failid, hoolimata sellest, et nad tegelikult olemas on. Loendi sellised valeliikmed on <del>läbi kriipsutatud</del>. Lisaks on puuduvaid faile sisaldavad leheküljed loetletud asukohas [[:$1]].",
        "ipblocklist-localblock": "Kohalik blokeering",
        "ipblocklist-otherblocks": "{{PLURAL:$1|Muu blokeering|Muud blokeeringud}}",
        "infiniteblock": "igavene",
-       "expiringblock": "aegub $1 $2",
+       "expiringblock": "aegumistähtaeg $1, $2",
        "anononlyblock": "ainult nimetuna",
        "noautoblockblock": "IP-aadressi ei blokita automaatselt",
        "createaccountblock": "kontode loomine keelatud",
        "thumbnail_image-missing": "Fail näib puuduvat: $1",
        "thumbnail_image-failure-limit": "Selle pisipildi viimistlemine on hiljuti liiga palju kordi ($1 või rohkem) ebaõnnestunud. Palun proovi hiljem uuesti.",
        "import": "Lehekülgede import",
-       "importinterwiki": "Vikidevaheline import",
-       "import-interwiki-text": "Vali importimiseks viki ja lehekülje pealkiri.\nRedigeerimisajad ja kaastööliste nimed säilitatakse.\nKõik vikidevahelised toimingud on [[Special:Log/import|impordilogis]].",
+       "importinterwiki": "Importimine teisest vikist",
+       "import-interwiki-text": "Vali importimiseks viki ja lehekülje pealkiri.\nRedigeerimisajad ja kaastööliste nimed säilitatakse.\nKõik teisest vikist importimised on [[Special:Log/import|impordilogis]].",
        "import-interwiki-sourcewiki": "Lähteviki:",
        "import-interwiki-sourcepage": "Alliklehekülg:",
        "import-interwiki-history": "Kopeeri selle lehekülje kogu ajalugu",
        "importcantopen": "Ei saa imporditavat faili avada",
        "importbadinterwiki": "Vigane vikidevaheline link",
        "importsuccess": "Importimine edukalt lõpetatud!",
-       "importnosources": "Ühtegi vikidevahelist impordiallikat pole määratletud ja otsene ajaloo üleslaadimine on keelatud.",
+       "importnosources": "Määratletud pole ühtegi vikit, kust importida, ja otsene ajaloo üleslaadimine on keelatud.",
        "importnofile": "Ühtegi imporditavat faili ei laaditud üles.",
        "importuploaderrorsize": "Üleslaaditava faili import ebaõnnestus.\nFail on lubatust suurem.",
        "importuploaderrorpartial": "Imporditava faili üleslaadimine ebaõnnestus.\nFail oli vaid osaliselt üleslaaditud.",
        "import-rootpage-nosubpage": "Juurlehekülje nimeruumis \"$1\" pole alamleheküljed lubatud.",
        "importlogpage": "Impordilogi",
        "importlogpagetext": "Importimislogi kuvab leheküljed, mille redigeerimisajalugu pärineb teistest vikidest.",
-       "import-logentry-upload": "importis faili üleslaadimisega lehekülje [[$1]]",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|redaktsioon|redaktsiooni}} imporditud",
-       "import-logentry-interwiki": "importis teisest vikist lehekülje $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|redaktsioon|redaktsiooni}} imporditud asukohast $2",
        "javascripttest": "JavaScripti katsetamine",
        "javascripttest-pagetext-noframework": "Seda lehekülge hoitakse JavaScripti katsete jaoks.",
        "patrol-log-header": "See on kontrollitud redaktsioonide logi.",
        "log-show-hide-patrol": "$1 kontrollimislogi",
        "deletedrevision": "Kustutatud vanem versioon $1",
-       "filedeleteerror-short": "Faili $1 kustutamine ebaõnnestus",
-       "filedeleteerror-long": "Faili kustutamine ebaõnnestus:\n\n$1",
+       "filedeleteerror-short": "Tõrge faili kustutamisel: $1",
+       "filedeleteerror-long": "Faili kustutamisel esines tõrkeid:\n\n$1",
        "filedelete-missing": "Faili \"$1\" ei saa kustutada, sest seda ei ole.",
        "filedelete-old-unregistered": "Etteantud failiversiooni \"$1\" pole andmebaasis.",
        "filedelete-current-unregistered": "Fail \"$1\" ei ole andmebaasis.",
        "revdelete-uname-unhid": "nähtavaks tehti kasutajanimi",
        "revdelete-restricted": "kehtestati piirangud administraatoritele",
        "revdelete-unrestricted": "eemaldati administraatoritelt piirangud",
+       "logentry-block-block": "$1 {{GENDER:$2|blokeeris}} kasutaja {{GENDER:$4|$3}}; aegumistähtaeg $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|eemaldas}} kasutaja {{GENDER:$4|$3}} blokeeringu",
+       "logentry-block-reblock": "$1 {{GENDER:$2|muutis}} kasutaja {{GENDER:$4|$3}} blokeeringut; aegumistähtaeg $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|blokeeris}} kasutaja {{GENDER:$4|$3}}; aegumistähtaeg $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|muutis}} kasutaja {{GENDER:$4|$3}} blokeeringut; aegumistähtaeg $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|importis}} lehekülje $3 faili üleslaadimise teel",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|importis}} lehekülje $3 teisest vikist",
        "logentry-merge-merge": "$1 {{GENDER:$2|liitis}} lehekülje $3 leheküljega $4 (kuni redaktsioonini $5)",
        "logentry-move-move": "$1 {{GENDER:$2|teisaldas}} lehekülje $3 pealkirja $4 alla",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|teisaldas}} lehekülje $3 pealkirja $4 alla ümbersuunamist maha jätmata",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|keelas}} märgise \"$4\" kasutamise kasutajate ja robotite jaoks",
        "rightsnone": "(puudub)",
        "revdelete-summary": "resümee",
+       "feedback-adding": "Tagasiside lisamine leheküljele...",
+       "feedback-back": "Tagasi",
+       "feedback-bugcheck": "Hästi! Kontrolli vaid, ega tegu pole juba [$1 teada oleva veaga].",
+       "feedback-bugnew": "Kontrollisin. Teata uuest veast",
        "feedback-bugornote": "Kui arvad, et oskad tehnilist probleemi üksikasjalikult kirjeldada, [$1 teata veast].\nKui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajanime ja teabega kasutatava võrgulehitsejaga kohta leheküljele \"[$3 $2]\".",
-       "feedback-subject": "Teema:",
-       "feedback-message": "Sõnum:",
        "feedback-cancel": "Loobu",
-       "feedback-submit": "Saada tagasiside",
-       "feedback-adding": "Tagasiside lisamine leheküljele...",
+       "feedback-close": "Valmis",
+       "feedback-external-bug-report-button": "Koosta tehniline tööülesanne",
+       "feedback-dialog-title": "Tagasiside saatmine",
+       "feedback-dialog-intro": "Selle lihtsa vormi abil saad tagasisidet saata. Leheküljele \"$1\" lisatakse sinu kommentaar, mille juures on sinu kasutajanimi.",
+       "feedback-error-title": "Tõrge",
        "feedback-error1": "Tõrge: Tundmatu API tulemus",
        "feedback-error2": "Tõrge: Redigeerimine ebaõnnestus",
        "feedback-error3": "Tõrge: API ei vasta",
+       "feedback-message": "Sõnum:",
+       "feedback-subject": "Teema:",
+       "feedback-submit": "Saada",
+       "feedback-terms": "Mõistan, et minu kasutajaagendi andmed sisaldavad teavet minu veebilehitseja ja operatsioonisüsteemi täpse versiooni kohta ning need andmed tehakse minu tagasiside juures avalikuks.",
+       "feedback-termsofuse": "Olen nõus andma tagasisidet vastavalt kasutustingimustele.",
        "feedback-thanks": "Aitäh! Sinu tagasiside on postitatud leheküljele \"[$2 $1]\".",
-       "feedback-close": "Valmis",
-       "feedback-bugcheck": "Hästi! Kontrolli vaid, ega tegu pole juba [$1 teada oleva veaga].",
-       "feedback-bugnew": "Kontrollisin. Teata uuest veast",
+       "feedback-thanks-title": "Aitäh!",
+       "feedback-useragent": "Kasutajaagent:",
        "searchsuggest-search": "Otsi",
        "searchsuggest-containing": "sisalduv...",
        "api-error-badaccess-groups": "Sul pole selles vikis üleslaadimisõigust.",
        "json-error-utf8": "Väärdunud UTF-8 märgid; need võivad olla valesti kodeeritud",
        "json-error-recursion": "Vähemalt üks rekursiivne viide kodeeritavas väärtuses",
        "json-error-inf-or-nan": "Vähemalt üks NAN- või INF-väärtus kodeeritavas väärtuses",
-       "json-error-unsupported-type": "Ette tuli tüüp, mille väärtust ei saa kodeerida"
+       "json-error-unsupported-type": "Ette tuli tüüp, mille väärtust ei saa kodeerida",
+       "headline-anchor-title": "Lingi selle alaosa juurde",
+       "special-characters-group-latin": "Ladina",
+       "special-characters-group-latinextended": "Ladina (laiendatud)",
+       "special-characters-group-ipa": "IPA-laiendid",
+       "special-characters-group-symbols": "Sümbolid",
+       "special-characters-group-greek": "Kreeka",
+       "special-characters-group-cyrillic": "Kirillitsa",
+       "special-characters-group-arabic": "Araabia",
+       "special-characters-group-arabicextended": "Araabia (laiendatud)",
+       "special-characters-group-persian": "Pärsia",
+       "special-characters-group-hebrew": "Heebrea",
+       "special-characters-group-bangla": "Bengali",
+       "special-characters-group-tamil": "Tamili",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singali",
+       "special-characters-group-gujarati": "Gudžarati",
+       "special-characters-group-devanagari": "Devanaagari",
+       "special-characters-group-thai": "Tai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmeeri",
+       "special-characters-title-endash": "mõttekriips",
+       "special-characters-title-emdash": "pikk mõttekriips",
+       "special-characters-title-minus": "miinusmärk"
 }
index 74baa82..3bd4085 100644 (file)
@@ -20,7 +20,9 @@
                        "පසිඳු කාවින්ද",
                        "아라",
                        "Joxemai",
-                       "Arkaitz Barnetik"
+                       "Arkaitz Barnetik",
+                       "Sator",
+                       "Macofe"
                ]
        },
        "tog-underline": "Azpimarratu loturak:",
        "otherlanguages": "Erdaretan",
        "redirectedfrom": "($1(e)tik birzuzenduta)",
        "redirectpagesub": "Birbideratze orria",
+       "redirectto": "Hona birzuzentzen du:",
        "lastmodifiedat": "Orrialdearen azken aldaketa: $2, $1.",
        "viewcount": "Orrialde hau {{PLURAL:$1|behin|$1 aldiz}} bisitatu da.",
        "protectedpage": "Babestutako orrialdea",
        "disclaimers": "Mugaketak",
        "disclaimerpage": "Project:Erantzukizunen mugaketa orokorra",
        "edithelp": "Aldaketak egiteko laguntza",
+       "helppage-top-gethelp": "Laguntza",
        "mainpage": "Azala",
        "mainpage-description": "Azala",
        "policy-url": "Project:Politikak",
        "suspicious-userlogout": "Saioa amaitzeko egin duzun eskaria ukatu da. Izan ere, ematen du eskari hori gaizki dabilen nabigatzaile edo cache proxy batek bidali duela.",
        "createacct-another-realname-tip": "Benetako izena hautazkoa da.\nEmatea erabakitzen baduzu hori erabiliko da lanaren atribuzioa egiterako garaian.",
        "pt-login": "Saioa hasi",
+       "pt-login-button": "Saioa hasi",
        "pt-createaccount": "Sortu kontua",
        "pt-userlogout": "Saioa itxi",
        "php-mail-error-unknown": "PHPren mail() funtzioan arazo ezezagun bat egon da.",
        "import-rootpage-nosubpage": "Jatorri orrialdearen «$1» izen-tarteak ez du baimentzen azpi-orrialderik.",
        "importlogpage": "Inportazio erregistroa",
        "importlogpagetext": "Beste wiki batzutatik historial eta guzti egindako orrialdeen inportazio administratiboak.",
-       "import-logentry-upload": "[[$1]] igoera bitartez inportatu da",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|berrikuspen|berrikuspen}}",
-       "import-logentry-interwiki": "$1 wiki artean mugitu da",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|berrikuspen|berrikuspen}} $2-(e)tik",
        "javascripttest": "JavaScript frogatzen",
        "javascripttest-pagetext-noframework": "Orrialde hau JavaScript frogak egiteko gordeta dago.",
        "version-parser-function-hooks": "Parser funtzio estentsioak",
        "version-hook-name": "Estentsioaren izena",
        "version-hook-subscribedby": "Hauen harpidetzarekin",
-       "version-version": "(Bertsioa $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[izenik gabe]",
        "version-license": "MediaWiki Lizentzia",
        "version-ext-license": "Lizentzia",
        "logentry-newusers-create2": "$1 wikilariak $3 erabiltzaile kontua sortu du",
        "rightsnone": "(bat ere ez)",
        "revdelete-summary": "aldaketaren laburpena",
-       "feedback-subject": "Gaia:",
-       "feedback-message": "Mezua:",
-       "feedback-cancel": "Utzi",
-       "feedback-submit": "Feedbacka bidali",
        "feedback-adding": "Orriari feedbacka gehitzen...",
+       "feedback-bugnew": "Txekeatu dut. Bug berria bidaliko",
+       "feedback-cancel": "Utzi",
+       "feedback-close": "Egina",
        "feedback-error1": "Akatsa: APIaren emaitza ez ezagunak",
        "feedback-error2": "Akatsa: Aldaketa ez da egin",
        "feedback-error3": "Akatsa: APIaren erantzunik gabe",
-       "feedback-close": "Egina",
-       "feedback-bugnew": "Txekeatu dut. Bug berria bidaliko",
+       "feedback-message": "Mezua:",
+       "feedback-subject": "Gaia:",
+       "feedback-submit": "Bidali",
        "searchsuggest-search": "Bilatu",
        "searchsuggest-containing": "edukian...",
        "api-error-badaccess-groups": "Ez duzu baimendik fitxategi hauek wiki honetara igotzeko.",
        "mediastatistics-table-count": "Fitxategi kopurua",
        "mediastatistics-header-unknown": "Ezezaguna",
        "mediastatistics-header-video": "Bideoak",
-       "json-error-syntax": "Sintaxi-errorea"
+       "json-error-syntax": "Sintaxi-errorea",
+       "special-characters-group-latin": "Latina",
+       "special-characters-group-latinextended": "Latin hedatua",
+       "special-characters-group-ipa": "NAF",
+       "special-characters-group-symbols": "Ikurrak",
+       "special-characters-group-greek": "Greziera",
+       "special-characters-group-cyrillic": "Zirilikoa",
+       "special-characters-group-arabic": "Arabiera",
+       "special-characters-group-persian": "Persiera",
+       "special-characters-group-hebrew": "Hebreera",
+       "special-characters-group-bangla": "Bangla",
+       "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"
 }
index 414ad12..427c023 100644 (file)
@@ -7,7 +7,8 @@
                        "Urhixidur",
                        "Xuacu",
                        "아라",
-                       "Babanwalia"
+                       "Babanwalia",
+                       "Henares"
                ]
        },
        "tog-underline": "Surrayal atihus:",
        "delete-edit-reasonlist": "Eital razonis del esborrau",
        "delete-warning-toobig": "Esta páhina tieni un estorial d'eicionis grandi, mas de $1 revisionis. Esborralu puei causal pobremas enas operacionis la basi e datus de {{SITENAME}}; atua con cudiau.",
        "rollback": "Revertil eicionis",
-       "rollback_short": "Revertil",
        "rollbacklink": "revertil",
        "rollbackfailed": "Marru revirtiendu",
        "cantrollback": "Nu se puei eshazel la eición; el úrtimu colabutaol es el únicu autol d´esta páhina.",
        "import-upload": "Empuntal datus XML",
        "importlogpage": "Emporteal rustrihu",
        "importlogpagetext": "Emporteacionis alministrativas de páhinas con estorial d'edicionis d'otras güiquis.",
-       "import-logentry-upload": "á emporteau [[$1]] pol empuntu d'archivu",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisión|revisionis}}",
-       "import-logentry-interwiki": "trasgüiquipeau $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisión|revisionis}} dendi $2",
        "tooltip-pt-userpage": "La mi páhina d'usuáriu",
        "tooltip-pt-anonuserpage": "La páhina d'usuáriu la IP dendi la qu'eita",
        "iranian-calendar-m10": "10 mes Jalāli",
        "iranian-calendar-m11": "11 mes Jalāli",
        "iranian-calendar-m12": "12 mes Jalāli",
-       "unknown_extension_tag": "estensión andarria: \"$1\"",
        "version": "Velsión",
        "version-extensions": "Estensionis istalás",
        "version-specialpages": "Páhinas especialis",
        "version-other": "Otru",
        "version-hook-name": "Nombri el Hook",
        "version-hook-subscribedby": "Suscritu pol",
-       "version-version": "(Velsión $1)",
+       "version-version": "($1)",
        "version-license": "Licéncia",
        "version-software": "Software istalau",
        "version-software-product": "Proutu",
        "revdelete-unrestricted": "las restricionis a los çahorilis án siu esborrás",
        "rightsnone": "(dengunu)",
        "revdelete-summary": "eital sumáriu",
+       "searchsuggest-search": "Buscal",
        "expand_templates_preview": "Previsoreal"
 }
index 475f36b..4ad8846 100644 (file)
                        "Hosseinblue",
                        "فلورانس",
                        "Saeidpourbabak",
-                       "Arash.pt"
+                       "Arash.pt",
+                       "Signal89",
+                       "Macofe",
+                       "Danialbehzadi"
                ]
        },
        "tog-underline": "خط کشیدن زیر پیوندها:",
        "tog-watchdefault": "صفحه‌ها و پرونده‌هایی که ویرایش می‌کنم به فهرست پیگیری‌هایم افزوده شود",
        "tog-watchmoves": "صفحه‌ها و پرونده‌هایی که منتقل می‌کنم به فهرست پی‌گیری‌هایم افزوده شود",
        "tog-watchdeletion": "صفحات و پرونده‌هایی که حذف می‌کنم به فهرست پی‌گیری‌هایم افزوده شود",
-       "tog-watchrollback": "اÙ\81زÙ\88دÙ\86 ØµÙ\81حاتÛ\8c Ú©Ù\87 Ù\88اگرداÙ\86Û\8c Ú©Ø±Ø¯Ù\85 Ø¨Ø±Ø§Û\8c Ù\81Ù\87رست Ù¾Û\8cÚ¯Û\8cرÛ\8câ\80\8cÙ\87اÛ\8cÙ\85",
+       "tog-watchrollback": "صÙ\81حاتÛ\8c Ú©Ù\87 Ù\88اگرداÙ\86Û\8c Ù\85Û\8câ\80\8cÚ©Ù\86Ù\85 Ø¨Ù\87 Ù\81Ù\87رست Ù¾Û\8cÚ¯Û\8cرÛ\8câ\80\8cÙ\87اÛ\8cÙ\85 Ø§Ù\81زÙ\88دÙ\87 Ø´Ù\88د",
        "tog-minordefault": "همهٔ ویرایش‌ها به طور پیش‌فرض به عنوان «جزئی» علامت بخورد",
        "tog-previewontop": "پیش‌نمایش قبل از جعبهٔ ویرایش نمایش یابد",
        "tog-previewonfirst": "پیش‌نمایش هنگام اولین ویرایش نمایش یابد",
-       "tog-enotifwatchlistpages": "اگر صفحه یا پرونده‌ای از فهرست پی‌گیری‌هایم ویرایش شد به من نامه‌ای فرستاده شود",
-       "tog-enotifusertalkpages": "هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من نامه‌ای فرستاده شود",
-       "tog-enotifminoredits": "برای تغییرات جزئی در صفحه‌ها و پرونده‌ها هم به من نامه‌ای فرستاده شود",
-       "tog-enotifrevealaddr": "نشانی رایانامهٔ من در رایانامه‌های اطلاع‌رسانی نمایش یابد",
+       "tog-enotifwatchlistpages": "اگر صفحه یا پرونده‌ای از فهرست پی‌گیری‌هایم ویرایش شد به من ایمیلی فرستاده شود",
+       "tog-enotifusertalkpages": "هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من ایمیلی فرستاده شود",
+       "tog-enotifminoredits": "برای تغییرات جزئی در صفحه‌ها و پرونده‌ها هم به من ایمیل فرستاده شود",
+       "tog-enotifrevealaddr": "آدرس ایمیل من را در ایمیل‌های اطلاع‌رسانی نمایش یابد",
        "tog-shownumberswatching": "شمار کاربران پی‌گیرندهٔ نمایش یابد",
        "tog-oldsig": "امضای کنونی:",
        "tog-fancysig": "امضا به صورت ویکی‌متن در نظر گرفته شود (بدون درج خودکار پیوند)",
@@ -79,7 +82,7 @@
        "tog-watchlisthideliu": "ویرایش‌های کاربران وارد شده به سامانه در فهرست پی‌گیری‌ها پنهان شود",
        "tog-watchlisthideanons": "ویرایش‌های کاربران ناشناس در فهرست پی‌گیری‌های من پنهان شود",
        "tog-watchlisthidepatrolled": "ویرایش‌های گشت‌خورده در فهرست پی‌گیری‌ها پنهان شود",
-       "tog-ccmeonemails": "رونوشتی از نامه‌ای که به دیگران ارسال می‌کنم برای خودم هم فرستاده شود",
+       "tog-ccmeonemails": "رونوشتی از ایمیلی که به دیگران ارسال می‌کنم برای خودم هم فرستاده شود",
        "tog-diffonly": "محتوای صفحه، زیر تفاوت نمایش داده نشود",
        "tog-showhiddencats": "رده‌های پنهان نمایش داده شود",
        "tog-norollbackdiff": "بعد از واگردانی تفاوت نشان داده نشود",
        "disclaimers": "تکذیب‌نامه‌ها",
        "disclaimerpage": "Project:تکذیب‌نامهٔ عمومی",
        "edithelp": "راهنمای ویرایش‌کردن",
+       "helppage-top-gethelp": "راهنما",
        "mainpage": "صفحهٔ اصلی",
        "mainpage-description": "صفحهٔ اصلی",
        "policy-url": "Project:سیاست‌ها",
        "readonly_lag": "پایگاه داده به طور خودکار قفل شده‌است تا نسخه‌های پشتیبان با نسخهٔ اصلی هماهنگ شوند",
        "internalerror": "خطای داخلی",
        "internalerror_info": "خطای داخلی: $1",
+       "internalerror-fatal-exception": "نوع استثنای مخرب \"$1\"",
        "filecopyerror": "نشد از پروندهٔ «$1» روی «$2» نسخه‌برداری شود.",
        "filerenameerror": "نشد پروندهٔ «$1» به «$2» تغییر نام یابد.",
        "filedeleteerror": "نشد پروندهٔ «$1» حذف شود.",
        "userlogin-resetlink": "جزئیات ورود را فراموش کرده‌اید؟",
        "userlogin-resetpassword-link": "گذرواژه‌تان را فراموش کردید؟",
        "userlogin-helplink2": "کمک با ورود",
-       "userlogin-loggedin": "شما در حال حاضر به‌عنوان {{GENDER:$1|$1}} وارد شده‌اید.\nاز فرم پایین برای ورود به‌عنوان یک کاربر دیگر استفاده کنید.",
+       "userlogin-loggedin": "شما در حال حاضر به عنوان {{GENDER:$1|$1}} وارد شده‌اید.\nاز فرم پایین برای ورود به عنوان یک کاربر دیگر استفاده کنید.",
        "userlogin-createanother": "ایجاد یک حساب کاربری دیگر",
-       "createacct-emailrequired": "نشانی رایانامه",
-       "createacct-emailoptional": "نشانی رایانامه (اختیاری)",
-       "createacct-email-ph": "نشانی رایانامه را وارد کنید",
-       "createacct-another-email-ph": "نشانی رایانامه را وارد کنید",
-       "createaccountmail": "استفاده از رمز عبور موقت تصادفی و فرستادن آن به نشانی رایانامه مشخص‌شده",
+       "createacct-emailrequired": "آدرس ایمیل",
+       "createacct-emailoptional": "آدرس ایمیل (اختیاری)",
+       "createacct-email-ph": "آدرس ایمیل خود را وارد کنید",
+       "createacct-another-email-ph": "آدرس ایمیل را وارد کنید",
+       "createaccountmail": "استفاده از رمز عبور موقت تصادفی و ارسال آن به آدرس ایمیل مشخص شده",
        "createacct-realname": "نام واقعی (اختیاری)",
        "createaccountreason": "دلیل:",
        "createacct-reason": "دلیل",
        "wrongpassword": "گذرواژه‌ای که وارد کردید نادرست است.\nلطفاً دوباره امتحان کنید.",
        "wrongpasswordempty": "گذرواژه‌ای که وارد کرده‌اید، خالی است.\nلطفاً دوباره تلاش کنید.",
        "passwordtooshort": "گذرواژه باید دست‌کم {{PLURAL:$1|۱ حرف|$1 حرف}} داشته باشد.",
+       "passwordtoolong": "گذرواژه نمی تواند حروفش بیشتر از {{PLURAL:$1|۱ حرف|$1 حرف}}  باشد.",
        "password-name-match": "گذرواژهٔ شما باید با نام کاربری شما تفاوت داشته باشد.",
        "password-login-forbidden": "استفاده از این نام کاربری و گذرواژه ممنوع است.",
        "mailmypassword": "بازنشانی گذرواژه",
        "passwordremindertitle": "یادآور گذرواژهٔ {{SITENAME}}",
        "passwordremindertext": "یک نفر (احتمالاً خود شما، با نشانی آی‌پی $1) گذرواژهٔ جدیدی برای حساب کاربری شما در {{SITENAME}} درخواست کرده‌است ($4). \nیک گذرواژهٔ موقت برای کاربر «$2» ساخته شده و برابر با «$3» قرار داده شده‌است.\nاگر هدفتان همین بوده‌است، اکنون باید وارد سامانه شوید و گذرواژهٔ جدیدی برگزینید.\nگذرواژهٔ موقت شما ظرف {{PLURAL:$5|یک روز|$5 روز}} باطل می‌شود.\n\nاگر کس دیگری این درخواست را کرده‌است یا اینکه شما گذرواژهٔ پیشین خود را به یاد آورده‌اید و دیگر تمایلی به تغییر آن ندارید، می‌توانید این پیغام را نادیده بگیرید و همان گذرواژهٔ پیشین را به کار برید.",
-       "noemail": "هیچ نشانی رایانامه‌ای برای کاربر «$1» ثبت نشده‌است.",
-       "noemailcreate": "شما باید یک نشانی پست الکترونیکی درست فراهم کنید",
-       "passwordsent": "گذرواژه‌ای جدید به نشانی رایانامه ثبت‌شده برای «$1» فرستاده شد.\nلطفاً پس از دریافت آن دوباره به سامانه وارد شوید.",
+       "noemail": "هیچ آدرس ایمیلی برای کاربر «$1» ثبت نشده است.",
+       "noemailcreate": "شما باید یک آدرس ایمیل درست فراهم کنید",
+       "passwordsent": "گذرواژه‌ای جدید به آدرس ایمیل ثبت شده برای «$1» ارسال شد.\nلطفاً پس از دریافت آن، دوباره به سیستم وارد شوید.",
        "blocked-mailpassword": "نشانی آی‌پی شما از ویرایش بازداشته شده‌است و از این رو به منظور جلوگیری از سوءاستفاده اجازهٔ بهره‌گیری از قابلیت بازیابی گذرواژه را ندارد.",
-       "eauthentsent": "یک نامه برای تأیید نشانی رایانامه به نشانی موردنظر ارسال شد.\nقبل از اینکه نامهٔ دیگری قابل ارسال به این نشانی باشد، باید دستورهایی که در آن نامه آمده است را جهت تأیید این مساله که این نشانی متعلق به شماست، اجرا کنید.",
-       "throttled-mailpassword": "Û\8cÚ© Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ù\94 Ø¨Ø§Ø²Ù\86شاÙ\86Û\8c Ú¯Ø°Ø±Ù\88اÚ\98Ù\87 Ø¯Ø± $1 {{PLURAL:$1|ساعت|ساعت}} Ú¯Ø°Ø´ØªÙ\87 Ù\81رستادÙ\87 Ø´Ø¯Ù\87 Ø§Ø³Øª.\nبراÛ\8c Ø¬Ù\84Ù\88Ú¯Û\8cرÛ\8c Ø§Ø² Ø³Ù\88ءاستÙ\81ادÙ\87Ø\8c Ù\87ر $1 {{PLURAL:$1|ساعت|ساعت}} ØªÙ\86Ù\87ا Û\8cÚ© Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ù\94 بازنشانی گذرواژه فرستاده می‌شود.",
-       "mailerror": "خطا در فرستادن پست الکترونیکی: $1",
+       "eauthentsent": "یک ایمیل تأیید برای آدرس ایمیل به نشانی مورد نظر ارسال شد.\nقبل از اینکه ایمیل دیگری قابل ارسال به این آدرس باشد، باید دستورهایی که در آن ایمیل آمده است را جهت تأیید این مساله که این آدرس متعلق به شماست، اجرا کنید.",
+       "throttled-mailpassword": "Û\8cÚ© Ø§Û\8cÙ\85Û\8cÙ\84 Ø¨Ø§Ø²Ù\86شاÙ\86Û\8c Ú¯Ø°Ø±Ù\88اÚ\98Ù\87 Ø¯Ø± $1 {{PLURAL:$1|ساعت|ساعت}} Ú¯Ø°Ø´ØªÙ\87 Ù\81رستادÙ\87 Ø´Ø¯Ù\87 Ø§Ø³Øª.\nبراÛ\8c Ø¬Ù\84Ù\88Ú¯Û\8cرÛ\8c Ø§Ø² Ø³Ù\88ءاستÙ\81ادÙ\87Ø\8c Ù\87ر $1 {{PLURAL:$1|ساعت|ساعت}} ØªÙ\86Ù\87ا Û\8cÚ© Ø§Û\8cÙ\85Û\8cÙ\84 بازنشانی گذرواژه فرستاده می‌شود.",
+       "mailerror": "خطا در ارسال ایمیل: $1",
        "acct_creation_throttle_hit": "بازدیدکنندگان این ویکی که از نشانی آی‌پی شما استفاده می‌کنند در روز گذشته {{PLURAL:$1|یک حساب کاربری|$1 حساب کاربری}} ساخته‌اند، که بیشترین تعداد مجاز در آن بازهٔ زمانی است.\nبه همین خاطر، بازدیدکنندگانی که از این نشانی آی‌پی استفاده می‌کنند نمی‌توانند در حال حاضر حساب جدیدی بسازند.",
-       "emailauthenticated": "نشانی رایانامهٔ شما در $2 ساعت $3 تصدیق شد.",
-       "emailnotauthenticated": "نشانی رایانامهٔ شما هنوز تصدیق نشده‌است.\nبرای هیچ‌یک از ویژگی‌های زیر رایانامه ارسال نخواهد شد.",
-       "noemailprefs": "برای راه‌اندازی این قابلیت‌ها یک نشانی رایانامه مشخص کنید.",
-       "emailconfirmlink": "تأÛ\8cÛ\8cد Ù\86شاÙ\86Û\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87",
-       "invalidemailaddress": "نشانی واردشدهٔ رایانامه قابل‌قبول نیست، چرا که دارای ساختار نامعتبری است.\nلطفاً نشانی‌ای با ساختار صحیح وارد کنید و یا بخش مربوط را خالی بگذارید.",
-       "cannotchangeemail": "نشانی‌های رایانامهٔ حساب کاربری در این ویکی قابل تغییر نیست.",
-       "emaildisabled": "این وب سایت قادر به فرستادن پست الکترونیکی نیست.",
+       "emailauthenticated": "آدرس ایمیل شما در $2 ساعت $3 تأیید شده است.",
+       "emailnotauthenticated": "آدرس ایمیل شما هنوز تأیید نشده است.\nبرای هیچ‌یک از ویژگی‌های زیر، ایمیل ارسال نخواهد شد.",
+       "noemailprefs": "برای راه‌اندازی این قابلیت‌ها یک آدرس ایمیل در ترجیحات خود مشخص کنید.",
+       "emailconfirmlink": "آدرس Ø§Û\8cÙ\85Û\8cÙ\84 Ø®Ù\88د Ø±Ø§ ØªØ£Û\8cÛ\8cد Ú©Ù\86Û\8cد",
+       "invalidemailaddress": "آدرس ایمیل واردشدهٔ قابل قبول نیست، چرا که دارای ساختار نامعتبری است.\nلطفاً آدرسی با ساختار صحیح وارد کنید و یا بخش مربوط را خالی بگذارید.",
+       "cannotchangeemail": "آدرس‌های ایمیل حساب کاربری در این ویکی قابل تغییر نیست.",
+       "emaildisabled": "این وب سایت قادر به ارسال ایمیل نیست.",
        "accountcreated": "حساب کاربری ایجاد شد",
        "accountcreatedtext": "حساب کاربری برای [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|بحث]]) ایجاد شده است.",
        "createaccount-title": "ایجاد حساب کاربری در {{SITENAME}}",
-       "createaccount-text": "Û\8cÚ© Ù\86Ù\81ر Ø¨Ø±Ø§Û\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 Ø´Ù\85ا Û\8cÚ© Ø­Ø³Ø§Ø¨ Ú©Ø§Ø±Ø¨Ø±Û\8c Ø¯Ø± {{SITENAME}} Ø¨Ø§ Ù\86اÙ\85 Â«$2» Ø§Û\8cجاد Ú©Ø±Ø¯Ù\87â\80\8cاست ($4)Ø\8c Ú©Ù\87 Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 Ø¢Ù\86 Ú\86Ù\86Û\8cÙ\86 Ø§Ø³Øª: $3\nØ´Ù\85ا Ø¨Ø§Û\8cد Ø¨Ù\87 Ø³Ø§Ù\85اÙ\86Ù\87 وارد شوید تا گذرواژهٔ خود را تغییر بدهید.\n\nاگر این حساب اشتباهی ساخته شده است، این پیغام را نادیده بگیرید.",
+       "createaccount-text": "Û\8cÚ© Ù\86Ù\81ر Ø¨Ø±Ø§Û\8c Ø§Û\8cÙ\85Û\8cÙ\84 Ø´Ù\85ا Û\8cÚ© Ø­Ø³Ø§Ø¨ Ú©Ø§Ø±Ø¨Ø±Û\8c Ø¯Ø± {{SITENAME}} Ø¨Ø§ Ù\86اÙ\85 Â«$2» Ø§Û\8cجاد Ú©Ø±Ø¯Ù\87â\80\8cاست ($4)Ø\8c Ú©Ù\87 Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 Ø¢Ù\86 Ú\86Ù\86Û\8cÙ\86 Ø§Ø³Øª: $3\nØ´Ù\85ا Ø¨Ø§Û\8cد Ø¨Ù\87 Ø³Û\8cستÙ\85 وارد شوید تا گذرواژهٔ خود را تغییر بدهید.\n\nاگر این حساب اشتباهی ساخته شده است، این پیغام را نادیده بگیرید.",
        "login-throttled": "شما به تازگی چندین‌بار برای ثبت ورود تلاش کرده‌اید.\nلطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.",
        "login-abort-generic": "ورود شما ناموفق بود - خاتمهٔ ناگهانی داده شد",
        "login-migrated-generic": "حساب کاربری شما منتقل شده‌است، و نام کاربری‌تان دیگر در این ویکی وجود ندارد.",
        "pt-createaccount": "ایجاد حساب کاربری",
        "pt-userlogout": "خروج",
        "php-mail-error-unknown": "خطای ناشناخته در تابع  mail()‎ پی‌اچ‌پی",
-       "user-mail-no-addy": "تلاش برای ارسال نامه بدون یک نشانی رایانامه.",
-       "user-mail-no-body": "تÙ\84اش Ø¨Ø±Ø§Û\8c Ù\81رستادÙ\86 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 Ø¨Û\8câ\80\8cدÙ\84Û\8cÙ\84 Ú©Ù\88تاÙ\87 Û\8cا Ø®Ø§Ù\84Û\8c",
+       "user-mail-no-addy": "تلاش برای ارسال ایمیل بدون آدرس ایمیل.",
+       "user-mail-no-body": "سعÛ\8c Ú©Ø±Ø¯Û\8cد Ø§Û\8cÙ\85Û\8cÙ\84Û\8c Ø¨Ø§ Ù\85حتÙ\88اÛ\8c Ø¨Û\8câ\80\8cدÙ\84Û\8cÙ\84 Ú©Ù\88تاÙ\87 Ù\88 Û\8cا Ø®Ø§Ù\84Û\8c Ø¨Ù\81رستÛ\8cد.",
        "changepassword": "تغییر گذرواژه",
        "resetpass_announce": "شما باید برای پایان ورود به سامانه، گذرواژهٔ جدیدی را تنظیم کنید.",
        "resetpass_text": "<!-- اینجا متن اضافه کنید -->",
        "resetpass-submit-cancel": "لغو",
        "resetpass-wrong-oldpass": "گذرواژهٔ موقت یا اخیر نامعتبر.\nممکن است که شما همینک گذرواژه‌تان را با موفقیت تغییر داده باشید یا درخواست یک گذرواژهٔ موقت تازه کرده باشید.",
        "resetpass-recycled": "لطفاً رمز عبور خود را به چیز دیگری غیر از رمز عبور فعلی تنظیم کنید.",
-       "resetpass-temp-emailed": "Ø´Ù\85ا Ø¨Ø§ Û\8cÚ© Ú©Ø¯ Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 شدهٔ موقت وارد شده‌اید.\nبرای پایان ورود، شما باید رمز عبور جدیدی اینجا وارد کنید:",
+       "resetpass-temp-emailed": "Ø´Ù\85ا Ø¨Ø§ Û\8cÚ© Ú©Ø¯ Ø§Û\8cÙ\85Û\8cÙ\84 شدهٔ موقت وارد شده‌اید.\nبرای پایان ورود، شما باید رمز عبور جدیدی اینجا وارد کنید:",
        "resetpass-temp-password": "گذرواژهٔ موقت:",
        "resetpass-abort-generic": "تغییر گذرواژه به دست یکی از افزونه‌ها لغو شده است.",
        "resetpass-expired": "رمز عبور شما منقضی شده‌است. لطفاً برای ورود رمز عبور جدیدی را تنظیم کنید.",
        "resetpass-validity-soft": "گذرواهٔ شما صحیح نیست: $1\n\nلطفاً یک گذرواژهٔ تازه الآن انتخاب کنید یا بر «{{int:resetpass-submit-cancel}}» کلیک کنید که دوباره آن را بعداً انتخاب کنید.",
        "passwordreset": "بازنشانی گذرواژه",
        "passwordreset-text-one": "برای بازنشانی گذرواژه‌تان این فرم را کامل کنید.",
-       "passwordreset-text-many": "{{PLURAL:$1|براÛ\8c Ø¯Ø±Û\8cاÙ\81ت Û\8cÚ© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت Ø§Ø² Ø±Ø§Ù\87 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ø\8c Û\8cÚ©Û\8c Ø§Ø² Ø²Ù\85Û\8cنه‌ها را پر کنید.}}",
+       "passwordreset-text-many": "{{PLURAL:$1|براÛ\8c Ø¯Ø±Û\8cاÙ\81ت Û\8cÚ© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت Ø§Ø² Ø·Ø±Û\8cÙ\82 Ø§Û\8cÙ\85Û\8cÙ\84Ø\8c Û\8cÚ©Û\8c Ø§Ø² Ø®Ø§نه‌ها را پر کنید.}}",
        "passwordreset-legend": "بازنشانی گذرواژه",
        "passwordreset-disabled": "بازنشانی گذرواژه در این ویکی غیرفعال شده است.",
-       "passwordreset-emaildisabled": "Ù\88Û\8cÚ\98Ú¯Û\8câ\80\8cÙ\87اÛ\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 Ø¯Ø± Ø§Û\8cÙ\86 Ù\88Û\8cÚ©Û\8c Ù\86افعال شده‌اند.",
+       "passwordreset-emaildisabled": "Ù\82ابÙ\84Û\8cتâ\80\8cÙ\87اÛ\8c Ø§Û\8cÙ\85Û\8cÙ\84 Ø¯Ø± Ø§Û\8cÙ\86 Ù\88Û\8cÚ©Û\8c ØºÛ\8cرفعال شده‌اند.",
        "passwordreset-username": "نام کاربری:",
        "passwordreset-domain": "دامنه:",
-       "passwordreset-capture": "راÛ\8cاÙ\86اÙ\85Ù\87Ù\94 نهایی نشان داده شود؟",
-       "passwordreset-capture-help": "اگر این گزینه را علامت بزنید رایانامهٔ (حاوی گذرواژهٔ موقت) به شما نشان داده خواهد شد و برای کاربر نیز فرستاده خواهد شد.",
-       "passwordreset-email": "نشانی پست الکترونیکی:",
+       "passwordreset-capture": "اÛ\8cÙ\85Û\8cÙ\84 نهایی نشان داده شود؟",
+       "passwordreset-capture-help": "اگر این گزینه را علامت بزنید، ایمیل (حاوی گذرواژهٔ موقت) به شما نشان داده خواهد شد و برای کاربر نیز فرستاده خواهد شد.",
+       "passwordreset-email": "نشانی ایمیل:",
        "passwordreset-emailtitle": "جزئیات حساب در {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Û\8cÚ© Ù\86Ù\81ر (احتÙ\85اÙ\84اÙ\8b Ø´Ù\85اØ\8c Ø¨Ø§ Ù\86شاÙ\86Û\8c Ø¢Û\8câ\80\8cÙ¾Û\8c $1) Ø¯Ø±Ø®Ù\88است Ø¨Ø§Ø²Ù\86شاÙ\86Û\8c Ú¯Ø°Ø±Ù\88اÚ\98Ù\87â\80\8cتاÙ\86 Ø¯Ø± {{SITENAME}} ($4) Ø±Ø§ Ú©Ø±Ø¯Ù\87â\80\8cاست. {{PLURAL:$3|حساب|حسابâ\80\8cÙ\87اÛ\8c}} Ú©Ø§Ø±Ø¨Ø±Û\8c Ø²Û\8cر Ø¨Ø§ Ø§Û\8cÙ\86 Ø±Ø§Û\8cاÙ\86شاÙ\86Û\8c مرتبط هستند:\n\n$2\n\n{{PLURAL:$3|این گذرواژهٔ موقت|این گذرواژه‌های موقت}} پس از {{PLURAL:$5|یک روز|$5 روز}} باطل خواهند شد.\nشما باید هم‌اکنون ثبت ورود کنید و گذرواژه‌ای جدید برگزینید. اگر فکر می‌کنید شخص دیگری این درخواست را داده‌است یا اگر گذرواژهٔ اصلی‌تان را به یاد آوردید و دیگر نمی‌خواهید آن را تغییر دهید، می‌توانید این پیغام را نادیده بگیرید و به استفاده از گذرواژهٔ قبلی‌تان ادامه دهید.",
-       "passwordreset-emailtext-user": "کاربر $1 Ø§Ø² {{SITENAME}} Ø¯Ø±Ø®Ù\88است Ø¨Ø§Ø²Ù\86شاÙ\86Û\8c Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 Ø´Ù\85ا Ø¯Ø± {{SITENAME}} ($4) Ø±Ø§ Ú©Ø±Ø¯Ù\87 Ø§Ø³Øª. {{PLURAL:$3|حساب|حسابâ\80\8cÙ\87اÛ\8c}} Ú©Ø§Ø±Ø¨Ø±Û\8c Ø²Û\8cر Ø¨Ø§ Ø§Û\8cÙ\86 Ø±Ø§Û\8cاÙ\86شاÙ\86Û\8c مرتبط است:\n\n$2\n\n{{PLURAL:$3|این گذرواژهٔ موقت|این گذرواژه‌های موقت}} تا {{PLURAL:$5|یک روز|$5 روز}} باطل می‌شود.\nشما باید هم‌اکنون وارد شده و یک گذرواژهٔ جدید برگزینید. اگر شخص دیگری این درخواست را داده است، یا اگر گذرواژهٔ اصلی‌تان را به خاطر آوردید و دیگر نمی‌خواهید آن را تغییر دهید، می‌توانید این پیغام را نادیده بگیرید و به استفاده از گذرواژهٔ قبلی‌تان ادامه دهید.",
+       "passwordreset-emailtext-ip": "Û\8cÚ© Ù\86Ù\81ر (احتÙ\85اÙ\84اÙ\8b Ø´Ù\85اØ\8c Ø¨Ø§ Ù\86شاÙ\86Û\8c Ø¢Û\8câ\80\8cÙ¾Û\8c $1) Ø¯Ø±Ø®Ù\88است Ø¨Ø§Ø²Ù\86شاÙ\86Û\8c Ú¯Ø°Ø±Ù\88اÚ\98Ù\87â\80\8cتاÙ\86 Ø¯Ø± {{SITENAME}} ($4) Ø±Ø§ Ú©Ø±Ø¯Ù\87â\80\8cاست. {{PLURAL:$3|حساب|حسابâ\80\8cÙ\87اÛ\8c}} Ú©Ø§Ø±Ø¨Ø±Û\8c Ø²Û\8cر Ø¨Ø§ Ø§Û\8cÙ\86 Ø¢Ø¯Ø±Ø³ Ø§Û\8cÙ\85Û\8cÙ\84 مرتبط هستند:\n\n$2\n\n{{PLURAL:$3|این گذرواژهٔ موقت|این گذرواژه‌های موقت}} پس از {{PLURAL:$5|یک روز|$5 روز}} باطل خواهند شد.\nشما باید هم‌اکنون ثبت ورود کنید و گذرواژه‌ای جدید برگزینید. اگر فکر می‌کنید شخص دیگری این درخواست را داده‌است یا اگر گذرواژهٔ اصلی‌تان را به یاد آوردید و دیگر نمی‌خواهید آن را تغییر دهید، می‌توانید این پیغام را نادیده بگیرید و به استفاده از گذرواژهٔ قبلی‌تان ادامه دهید.",
+       "passwordreset-emailtext-user": "کاربر $1 Ø§Ø² {{SITENAME}} Ø¯Ø±Ø®Ù\88است Ø¨Ø§Ø²Ù\86شاÙ\86Û\8c Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 Ø´Ù\85ا Ø¯Ø± {{SITENAME}} ($4) Ø±Ø§ Ú©Ø±Ø¯Ù\87 Ø§Ø³Øª. {{PLURAL:$3|حساب|حسابâ\80\8cÙ\87اÛ\8c}} Ú©Ø§Ø±Ø¨Ø±Û\8c Ø²Û\8cر Ø¨Ø§ Ø§Û\8cÙ\86 Ø¢Ø¯Ø±Ø³ Ø§Û\8cÙ\85Û\8cÙ\84 مرتبط است:\n\n$2\n\n{{PLURAL:$3|این گذرواژهٔ موقت|این گذرواژه‌های موقت}} تا {{PLURAL:$5|یک روز|$5 روز}} باطل می‌شود.\nشما باید هم‌اکنون وارد شده و یک گذرواژهٔ جدید برگزینید. اگر شخص دیگری این درخواست را داده است، یا اگر گذرواژهٔ اصلی‌تان را به خاطر آوردید و دیگر نمی‌خواهید آن را تغییر دهید، می‌توانید این پیغام را نادیده بگیرید و به استفاده از گذرواژهٔ قبلی‌تان ادامه دهید.",
        "passwordreset-emailelement": "نام کاربری: $1\nگذرواژهٔ موقت: $2",
        "passwordreset-emailsent": "یک نامهٔ بازنشانی گذرواژه فرستاده شده‌است.",
-       "passwordreset-emailsent-capture": "Û\8cÚ© Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87Ù\94 بازنشانی که در پایین نمایش داده شده، فرستاده شده است.",
-       "passwordreset-emailerror-capture": "راÛ\8cاÙ\86اÙ\85Ù\87Ù\94 بازنشانی، که در زیر نمایش داده شده، ایجاد شد، ولی ارسال آن به {{GENDER:$2|کاربر}} موفقیت‌آمیز نبود: $1",
-       "changeemail": "تغییر نشانی رایانامه",
-       "changeemail-text": "اÛ\8cÙ\86 Ù\81رÙ\85 Ø±Ø§ ØªÚ©Ù\85Û\8cÙ\84 Ú©Ù\86Û\8cد ØªØ§ Ø¢Ø¯Ø±Ø³ Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87â\80\8cتان تغییر یابد. برای این که این تغییر را تأیید کنید لازم است گذرواژهٔ خود را وارد کنید.",
+       "passwordreset-emailsent-capture": "Û\8cÚ© Ø§Û\8cÙ\85Û\8cÙ\84 بازنشانی که در پایین نمایش داده شده، فرستاده شده است.",
+       "passwordreset-emailerror-capture": "اÛ\8cÙ\85Û\8cÙ\84 بازنشانی، که در زیر نمایش داده شده، ایجاد شد، ولی ارسال آن به {{GENDER:$2|کاربر}} موفقیت‌آمیز نبود: $1",
+       "changeemail": "تغییر آدرس ایمیل",
+       "changeemail-text": "اÛ\8cÙ\86 Ù\81رÙ\85 Ø±Ø§ ØªÚ©Ù\85Û\8cÙ\84 Ú©Ù\86Û\8cد ØªØ§ Ø¢Ø¯Ø±Ø³ Ø§Û\8cÙ\85Û\8cÙ\84تان تغییر یابد. برای این که این تغییر را تأیید کنید لازم است گذرواژهٔ خود را وارد کنید.",
        "changeemail-no-info": "برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.",
-       "changeemail-oldemail": "نشانی رایانامهٔ کنونی:",
-       "changeemail-newemail": "نشانی رایانامهٔ تازه:",
+       "changeemail-oldemail": "آدرس ایمیل کنونی:",
+       "changeemail-newemail": "آدرس ایمیل جدید:",
        "changeemail-none": "(هیچ)",
        "changeemail-password": "گذرواژهٔ {{SITENAME}} شما:",
-       "changeemail-submit": "تغÛ\8cÛ\8cر Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87",
+       "changeemail-submit": "تغÛ\8cÛ\8cر Ø§Û\8cÙ\85Û\8cÙ\84",
        "changeemail-throttled": "شما به مراتب برای ورود تلاش کرده‌اید.\nلطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.",
        "resettokens": "بازنشانی شناساننده‌ها",
        "resettokens-text": "شما می توانید شناساننده‌ها که اجازهٔ دسترسی به برخی داده‌های خصوصی مرتبط با حسابتان را می‌دهد بازنشانی کنید.\nدر صورتی باید این کار را انجام دهید که تصادقاً آن‌ها را با کسی در میان گذاشته‌اید یا به حسابتان نفوذ شده است.",
        "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توجه کنید که شما نمی‌توانید از ویژگی «فرستادن رایانامه به این کاربر» استفاده کنید مگر آنکه نشانی رایانامه معتبری در [[Special:Preferences|ترجیحات کاربری]] خودتان ثبت کرده باشید و نیز باید امکان استفاده از این ویژگی برای شما قطع نشده باشد.\nنشانی آی‌پی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.\nلطفاً تمامی جزئیات فوق را در کلیهٔ درخواست‌هایی که در این باره مطرح می‌کنید ذکر کنید.",
+       "blockedtext": "<strong>دسترسی حساب کاربری یا نشانی آی‌پی شما بسته شده‌است.</strong>\n\nاین قطع دسترسی توسط $1 انجام شده است.\nدلیل ارائه‌شده چنین است: <em>$2</em>\n\n* شروع قطع دسترسی: $8\n* پایان قطع دسترسی: $6\n* کاربری هدف قطع دسترسی: $7\n\nشما می‌توانید با $1 یا [[{{MediaWiki:Grouppage-sysop}}|مدیری]] دیگر تماس بگیرید و در این باره صحبت کنید.\nتوجه کنید که شما نمی‌توانید از قابلیت «ایمیل به این کاربر» استفاده کنید مگر آنکه آدرس ایمیل معتبری در [[Special:Preferences|ترجیحات کاربری]] خودتان ثبت کرده باشید و نیز باید امکان استفاده از این قابلیت برای شما قطع نشده باشد.\nنشانی آی‌پی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.\nلطفاً تمامی جزئیات فوق را در کلیهٔ درخواست‌هایی که در این باره مطرح می‌کنید ذکر کنید.",
+       "autoblockedtext": "دسترسی نشانی آی‌پی شما قطع شده‌است، زیرا این نشانی آی‌پی توسط کاربر دیگری استفاده شده که دسترسی او توسط $1 قطع شده‌است.\nدلیل ارائه‌شده چنین است:\n\n:''$2''\n\n* شروع قطع دسترسی: $8\n* پایان قطع دسترسی: $6\n* کاربری هدف قطع دسترسی: $7\n\nشما می‌توانید با $1 یا [[{{MediaWiki:Grouppage-sysop}}|مدیری]] دیگر تماس بگیرید و در این باره صحبت کنید.\nتوجه کنید که شما نمی‌توانید از قابلیت «ایمیل به این کاربر» استفاده کنید مگر آنکه نشانی ایمیل معتبری در [[Special:Preferences|ترجیحات کاربری]] خودتان ثبت کرده باشید و نیز باید امکان استفاده از این قابلیت برای شما قطع نشده باشد.\nنشانی آی‌پی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.\nلطفاً تمامی جزئیات فوق را در کلیهٔ درخواست‌هایی که در این باره مطرح می‌کنید ذکر کنید.",
        "blockednoreason": "دلیلی مشخص نشده‌است",
        "whitelistedittext": "برای ویرایش مقاله‌ها باید $1.",
-       "confirmedittext": "شما باید، پیش از ویرایش صفحات، نشانی رایانامهٔ خود را مشخص و تأیید کنید. لطفاً از طریق [[Special:Preferences|ترجیحات کاربر]] این کار را صورت دهید.",
+       "confirmedittext": "شما باید، پیش از ویرایش صفحات، آدرس ایمیل خود را مشخص و تأیید کنید. لطفاً از طریق [[Special:Preferences|ترجیحات کاربر]] این کار را صورت دهید.",
        "nosuchsectiontitle": "چنین بخشی پیدا نشد",
        "nosuchsectiontext": "شما تلاش کرده‌اید یک بخش در صفحه را ویرایش کنید که وجود ندارد.\nممکن است در مدتی که شما صفحه را مشاهده می‌کردید این بخش جا به جا یا حذف شده باشد.",
        "loginreqtitle": "ورود به سامانه لازم است",
        "nonunicodebrowser": "'''هشدار: مرورگر شما با استانداردهای یونیکد سازگار نیست.'''\nراه حلی به کار گرفته شده تا شما بتوانید صفحات را با امنیت ویرایش کنید: کاراکترهای غیر ASCII به صورت کدهایی در مبنای شانزده به شما نشان داده می‌شوند.",
        "editingold": "'''هشدار: شما در حال ویرایش نسخه‌ای قدیمی از این صفحه هستید.'''\nاگر ذخیره‌اش کنید، هر تغییری که پس از این نسخه انجام شده‌است از بین خواهد رفت.",
        "yourdiff": "تفاوت‌ها",
-       "copyrightwarning": "لطفاً توجه داشته باشید که فرض می‌شود کلیهٔ مشارکت‌های شما با {{SITENAME}} تحت «$2» منتشر می‌شوند (برای جزئیات بیشتر به $1 مراجعه کنید).\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شده و به دلخواه توزیع شود، اینجا نفرستیدشان.<br />\nهمچنین شما دارید به ما قول می‌دهید که خودتان این را نوشته‌اید، یا آن را از یک منبع آزاد با مالکیت عمومی یا مشابه آن برداشته‌اید.\n'''کارهای دارای حق تکثیر (copyright) را بی‌اجازه نفرستید!'''",
-       "copyrightwarning2": "لطفاً توجه داشته باشید که فرض می‌شود کلیهٔ مشارکت‌های شما با {{SITENAME}} ممکن است توسط دیگر مشارکت‌کنندگان ویرایش شوند، تغییر یابند یا حذف شوند.\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شود، اینجا نفرستیدشان.<br />\nهمچنین شما دارید به ما قول می‌دهید که خودتان این را نوشته‌اید، یا آن را از یک منبع آزاد با مالکیت عمومی یا مشابه آن برداشته‌اید (برای جزئیات بیشتر به $1 مراجعه کنید).\n'''کارهای دارای حق تکثیر (copyright) را بی‌اجازه نفرستید!'''",
+       "copyrightwarning": "لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در {{SITENAME}} منتشرشده تحت $2 در نظر گرفته‌می‌شوند (برای جزئیات بیش‌تر $1 را ببینید).\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش و توزیع شوند؛ بنابراین، آنها را اینجا ارائه نکنید.<br />\nشما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید (برای جزئیات بیش‌تر $1 را ببینید).\n<strong>کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!</strong>",
+       "copyrightwarning2": "لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در {{SITENAME}} ممکن است توسط دیگر مشارکت‌کنندگان تغییر یابند، ویرایش یا حذف شوند.\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شوند؛ بنابراین، آنها را اینجا ارائه نکنید.<br />\nشما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید ($1 را برای جزئیات بیشتر ببینید).\n<strong>کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!</strong>",
        "longpageerror": "'''خطا: متنی که ارسال کرده‌اید {{PULAR:$1|یک کیلوبایت|$1 کیلوبایت}} طول دارد. این مقدار از مقدار بیشینهٔ {{PLURAL:$2|یک کیلوبایت|$2 کیلوبایت}} بیشتر است.'''\nنمی‌توان آن را ذخیره کرد.",
        "readonlywarning": "'''هشدار: پایگاه داده برای نگهداری قفل شده‌است، به همین علت هم‌اکنون نمی‌توانید ویرایش‌هایتان را ذخیره کنید.'''\nاگر می‌خواهید متن را در یک پروندهٔ متنی کپی کنید و برای آینده ذخیره‌اش کنید.\n\nمدیری که آن را قفل کرده این توضیح را ارائه کرده‌است: $1",
        "protectedpagewarning": "'''هشدار: این صفحه قفل شده‌است تا فقط کاربران با دسترسی مدیریت بتوانند ویرایشش کنند.'''\nآخرین موارد سیاهه در زیر آمده‌است:",
        "editundo": "خنثی‌سازی",
        "diff-empty": "(بدون تفاوت)",
        "diff-multi-sameuser": "({{PLURAL:$1|یک نسخهٔ میانی|$1 نسخهٔ میانی}}ِ همین کاربر نمایش داده نشده است)",
-       "diff-multi-otherusers": "({{PLURAL:$1|Û\8cÚ© Ù\86سخÙ\87Ù\94 Ù\85تÙ\88سط|$1 Ù\86سخÙ\87â\80\8cÙ\87اÛ\8c Ù\85تÙ\88سط}} ØªÙ\88سط {{PLURAL:$2|کاربر Ø¯Û\8cگرÛ\8c|$2 Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86}} نشان داده نشده)",
-       "diff-multi-manyusers": "({{PLURAL:$1|Û\8cÚ©|$1}} Ù\88Û\8cراÛ\8cØ´ Ù\85Û\8cاÙ\86Û\8c ØªÙ\88سط Ø¨Û\8cØ´ Ø§Ø² {{PLURAL:$2|Û\8cÚ©|$2}} Ú©Ø§Ø±Ø¨Ø± Ù\86شاÙ\86 Ø¯Ø§Ø¯Ù\87 Ù\86شدÙ\87â\80\8cاست)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Û± Ù\86سخÙ\87Ù\94 Ù\85Û\8cاÙ\86Û\8c|$1 Ù\86سخÙ\87â\80\8cÙ\94 Ù\85Û\8cاÙ\86Û\8c}} Ù\88Û\8cراÛ\8cØ´ Ø´Ø¯Ù\87 ØªÙ\88سط {{PLURAL:$2|Û± Ú©Ø§Ø±Ø¨Ø±|$2 Ú©Ø§Ø±Ø¨Ø±}} نشان داده نشده)",
+       "diff-multi-manyusers": "({{PLURAL:$1|Û\8cÚ©|$1}} Ù\86سخÙ\87â\80\8cÙ\94 Ù\85Û\8cاÙ\86Û\8c Ù\88Û\8cراÛ\8cØ´ Ø´Ø¯Ù\87 ØªÙ\88سط Ø¨Û\8cØ´ Ø§Ø² {{PLURAL:$2|Û\8cÚ©|$2}} Ú©Ø§Ø±Ø¨Ø± Ù\86شاÙ\86 Ø¯Ø§Ø¯Ù\87 Ù\86شدÙ\87 است)",
        "difference-missing-revision": "{{PLURAL:$2|یک ویرایش|$2 ویرایش}}  از تفاوت نسخه‌ها ($1) {{PLURAL:$2|یافت|یافت}}  نشد.\n\nمعمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.\nمی‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.",
        "searchresults": "نتایج جستجو",
        "searchresults-title": "نتایج جستجو برای «$1»",
        "notextmatches": "متن هیچ مقاله‌ای مطابقت ندارد",
        "prevn": "{{PLURAL:$1|$1}}تای قبلی",
        "nextn": "{{PLURAL:$1|$1}}تای بعدی",
+       "prev-page": "صفحهٔ قبلی",
+       "next-page": "صفحهٔ بعدی",
        "prevn-title": "$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} قبلی",
        "nextn-title": "$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} بعدی",
        "shown-title": "نمایش $1 {{PLURAL:$1|نتیجه|نتیجه}} در هر صفحه",
        "prefs-watchlist-token": "رمز فهرست پی‌گیری:",
        "prefs-misc": "متفرقه",
        "prefs-resetpass": "تغییر گذرواژه",
-       "prefs-changeemail": "دگرش Ø¯Ø± Ù\86شاÙ\86Û\8c Ù¾Ø³Øª Ø§Ù\84کترÙ\88Ù\86Û\8cÚ©Û\8c",
-       "prefs-setemail": "کار گذاشتن نشانی پست الکترونیکی",
-       "prefs-email": "گزینه‌های پست الکترونیکی",
+       "prefs-changeemail": "تغÛ\8cÛ\8cر Ø¢Ø¯Ø±Ø³ Ø§Û\8cÙ\85Û\8cÙ\84",
+       "prefs-setemail": "تنظیم آدرس ایمیل",
+       "prefs-email": "گزینه‌های ایمیل",
        "prefs-rendering": "نمایش صفحه",
        "saveprefs": "ذخیره",
        "restoreprefs": "برگرداندن تمام تنظیمات پیش‌فرض (در تمامی قسمت‌ها)",
        "timezoneregion-europe": "اروپا",
        "timezoneregion-indian": "اقیانوس هند",
        "timezoneregion-pacific": "اقیانوس آرام",
-       "allowemail": "اÙ\85کاÙ\86 Ø¯Ø±Û\8cاÙ\81ت Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 از دیگر کاربران",
+       "allowemail": "اÙ\85کاÙ\86 Ø¯Ø±Û\8cاÙ\81ت Ø§Û\8cÙ\85Û\8cÙ\84 از دیگر کاربران",
        "prefs-searchoptions": "جستجو",
        "prefs-namespaces": "فضاهای نام",
        "default": "پیش‌فرض",
        "prefs-custom-js": "جاوااسکریپت شخصی",
        "prefs-common-css-js": "سی‌اس‌اس/جاوااسکریپت مشترک برای تمام پوسته‌ها:",
        "prefs-reset-intro": "شما می‌توانید از این صفحه برای بازگرداندن تنظیمات خود به پیش‌فرض تارنما استفاده کنید.\nاین کار بازگشت‌ناپذیر است.",
-       "prefs-emailconfirm-label": "تأÛ\8cÛ\8cد Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87:",
-       "youremail": "پست الکترونیکی:",
+       "prefs-emailconfirm-label": "تأÛ\8cÛ\8cد Ø§Û\8cÙ\85Û\8cÙ\84:",
+       "youremail": "ایمیل:",
        "username": "{{GENDER:$1|نام کاربری}}:",
        "prefs-memberingroups": "{{GENDER:$2|عضو}} {{PLURAL:$1|گروه|گروه}}:",
        "prefs-registration": "زمان ثبت‌نام:",
        "gender-male": "مرد",
        "gender-female": "زن",
        "prefs-help-gender": "انجام این تنظیم اختیاری است.\nنرم‌افزار از این مقدار برای اشارهٔ صحیح به جنسیت و ذکر شما برای دیگران با استفاده از دستور زبان درست استفاده می‌کند.\nاین اطلاعات عمومی خواهند بود.",
-       "email": "راÛ\8cاÙ\86اÙ\85Ù\87",
+       "email": "اÛ\8cÙ\85Û\8cÙ\84",
        "prefs-help-realname": "نام واقعی اختیاری است.\nاگر وارد شده است هنگام ارجاع به آثارتان و انتساب آن‌ها به شما ممکن است از نام واقعی‌تان استفاده شود.",
-       "prefs-help-email": "نشانی رایانامه اختیاری‌است، اما فرستادن گذرواژه‌ای جدید را اگر گذرواژهٔ خود را فراموش کنید ممکن می‌کند.",
-       "prefs-help-email-others": "Ø´Ù\85ا Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ø§Ù\86تخاب Ú©Ù\86Û\8cد Ú©Ù\87 Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86 Ø¨ØªÙ\88اÙ\86Ù\86د Ø§Ø² Ø·Ø±Û\8cÙ\82 Ù¾Û\8cÙ\88Ù\86دÛ\8c Ø¯Ø± ØµÙ\81Ø­Ù\87Ù\94 Ú©Ø§Ø±Ø¨Ø±Û\8c Û\8cا ØµÙ\81Ø­Ù\87Ù\94 Ø¨Ø­Ø« Ú©Ø§Ø±Ø¨Ø±Û\8câ\80\8cتاÙ\86 Ø¨Ù\87 Ø´Ù\85ا Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 Ø¨Ù\81رستÙ\86د.\nÙ\86شاÙ\86Û\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 شما زمانی که دیگران با شما تماس بگیرند فاش نمی‌شود.",
-       "prefs-help-email-required": "نشانی پست الکترونیکی نیاز است.",
+       "prefs-help-email": "آدرس ایمیل اختیاری است، اما فرستادن گذرواژه‌ای جدید را اگر گذرواژهٔ خود را فراموش کنید ممکن می‌کند.",
+       "prefs-help-email-others": "Ø´Ù\85ا Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ø§Ù\86تخاب Ú©Ù\86Û\8cد Ú©Ù\87 Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86 Ø¨ØªÙ\88اÙ\86Ù\86د Ø§Ø² Ø·Ø±Û\8cÙ\82 Ù¾Û\8cÙ\88Ù\86دÛ\8c Ø¯Ø± ØµÙ\81Ø­Ù\87Ù\94 Ú©Ø§Ø±Ø¨Ø±Û\8c Û\8cا ØµÙ\81Ø­Ù\87Ù\94 Ø¨Ø­Ø« Ú©Ø§Ø±Ø¨Ø±Û\8câ\80\8cتاÙ\86 Ø¨Ù\87 Ø´Ù\85ا Ø§Û\8cÙ\85Û\8cÙ\84 Ø§Ø±Ø³Ø§Ù\84 Ú©Ù\86Ù\86د.\nآدرس Ø§Û\8cÙ\85Û\8cÙ\84 شما زمانی که دیگران با شما تماس بگیرند فاش نمی‌شود.",
+       "prefs-help-email-required": "آدرس ایمیل اجباری است.",
        "prefs-info": "اطلاعات اولیه",
        "prefs-i18n": "بین‌المللی‌سازی",
        "prefs-signature": "امضا",
        "prefs-help-prefershttps": "تأثیر این ترجیح بعد از ورود بعدی شما اعمال خواهد شد.",
        "prefswarning-warning": "تغییراتتان به ترجیحات هنوز ذحیره نشده است.\nاگر این صفحه بدون کلیک بر «$1» ترک کنید ترجیحاتتان ذخیره نخواهد شد.",
        "prefs-tabs-navigation-hint": "نکته: شما می توانید از کلیدهای جهت‌نمای چپ و راست برای حرکت بین زبانه‌ها در فهرست زبانه‌ها استفاده کنید.",
-       "email-address-validity-valid": "نشانی رایانامه معتبر به نظر می‌رسد",
-       "email-address-validity-invalid": "نشانی رایانامهٔ معتبر وارد کنید",
+       "email-address-validity-valid": "آدرس ایمیل معتبر به نظر می‌رسد",
+       "email-address-validity-invalid": "آدرس ایمیل معتبر وارد کنید",
        "userrights": "مدیریت اختیارات کاربر",
        "userrights-lookup-user": "مدیریت گروه‌های کاربری",
        "userrights-user-editname": "یک نام کاربری وارد کنید:",
        "right-createpage": "ایجاد صفحه (در مورد صفحه‌های غیر بحث)",
        "right-createtalk": "ایجاد صفحه‌های بحث",
        "right-createaccount": "ایجاد حساب‌های کاربری",
-       "right-minoredit": "علامت‌زدن ویرایش‌ها بهعنوان جزئی",
+       "right-minoredit": "علامت‌زدن ویرایش‌ها به عنوان جزئی",
        "right-move": "انتقال صفحه",
        "right-move-subpages": "انتقال صفحات به همراه زیر‌صفحات‌شان",
        "right-move-rootuserpages": "انتقال صفحه‌های کاربری سرشاخه",
        "right-viewsuppressed": "مشاهده نسخه‌هایی که از کاربران مخفی شده‌اند",
        "right-suppressionlog": "مشاهدهٔ سیاهه‌های خصوصی",
        "right-block": "قطع دسترسی ویرایشی دیگر کاربران",
-       "right-blockemail": "Ù\82طع Ø¯Ø³ØªØ±Ø³Û\8c Ø¯Û\8cگر Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86 Ø¨Ø±Ø§Û\8c Ø§Ø±Ø³Ø§Ù\84 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87",
+       "right-blockemail": "Ù\82طع Ø¯Ø³ØªØ±Ø³Û\8c Ø¯Û\8cگر Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86 Ø¨Ø±Ø§Û\8c Ø§Ø±Ø³Ø§Ù\84 Ø§Û\8cÙ\85Û\8cÙ\84",
        "right-hideuser": "قطع دسترسی کاربر و پنهان کردن آن از دید عموم",
        "right-ipblock-exempt": "تاثیر نپذیرفتن از قطع دسترسی‌های آی‌پی، خودکار یا فاصله‌ای",
        "right-proxyunbannable": "تاثیر نپذیرفتن از قطع دسترسی خودکار پروکسی‌ها",
        "right-unblockself": "بازکردن دسترسی خود",
        "right-protect": "تغییر میزان محافظت صفحات و ویرایش صفحات محافظت‌شده آبشاری",
-       "right-editprotected": "ویرایش صفحه‌های محافظت‌شده بهعنوان «{{int:protect-level-sysop}}»",
+       "right-editprotected": "ویرایش صفحه‌های محافظت‌شده به عنوان «{{int:protect-level-sysop}}»",
        "right-editsemiprotected": "ویرایش صفحه حفاظت‌شده به عنوان \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "ویرایش مدل محتوای یک صفحه",
        "right-editinterface": "ویرایش واسط کاربری",
        "right-editmyuserjs": "پرونده‌های جاوااسکریپت کاربری خود را ویرایش کنید",
        "right-viewmywatchlist": "فهرست پیگیری‌های خود را ببینید",
        "right-editmywatchlist": "فهرست پیگیری‌های خود را ویرایش کنید. توجه داشته باشید برخی از اقدامات حتی بدون این دسترسی هم صفحات را اضافه می‌کنند.",
-       "right-viewmyprivateinfo": "دادÙ\87â\80\8cÙ\87اÛ\8c Ø®ØµÙ\88صÛ\8c Ø®Ù\88د Ø±Ø§ Ø¨Ø¨Û\8cÙ\86Û\8cد (Ù\85اÙ\86Ù\86د Ø±Ø§Û\8cاÙ\86شاÙ\86Û\8c و نام واقعی)",
-       "right-editmyprivateinfo": "دادÙ\87â\80\8cÙ\87اÛ\8c Ø®ØµÙ\88صÛ\8c Ø®Ù\88د Ø±Ø§ Ù\88Û\8cراÛ\8cØ´ Ú©Ù\86Û\8cد (Ù\85اÙ\86Ù\86د Ø±Ø§Û\8cاÙ\86شاÙ\86Û\8c و نام واقعی)",
+       "right-viewmyprivateinfo": "دادÙ\87â\80\8cÙ\87اÛ\8c Ø®ØµÙ\88صÛ\8c Ø®Ù\88د Ø±Ø§ Ø¨Ø¨Û\8cÙ\86Û\8cد (Ù\85اÙ\86Ù\86د Ø¢Ø¯Ø±Ø³ Ø§Û\8cÙ\85Û\8cÙ\84 و نام واقعی)",
+       "right-editmyprivateinfo": "دادÙ\87â\80\8cÙ\87اÛ\8c Ø®ØµÙ\88صÛ\8c Ø®Ù\88د Ø±Ø§ Ù\88Û\8cراÛ\8cØ´ Ú©Ù\86Û\8cد (Ù\85اÙ\86Ù\86د Ø¢Ø¯Ø±Ø³ Ø§Û\8cÙ\85Û\8cÙ\84 و نام واقعی)",
        "right-editmyoptions": "ترجیحات خود را ویرایش",
        "right-rollback": "واگردانی سریع ویرایش‌های آخرین کاربری که یک صفحه را ویرایش کرده‌است",
-       "right-markbotedits": "علامت‌زدن ویرایش‌های واگردانی‌شده بهعنوان ویرایش ربات",
+       "right-markbotedits": "علامت‌زدن ویرایش‌های واگردانی‌شده به عنوان ویرایش ربات",
        "right-noratelimit": "تاثیر نپذیرفتن از محدودیت سرعت",
        "right-import": "واردکردن صفحه از ویکی‌های دیگر",
        "right-importupload": "واردکردن صفحه از طریق بارگذاری پرونده",
        "right-userrights-interwiki": "ویرایش اختیارات کاربرهای ویکی‌های دیگر",
        "right-siteadmin": "قفل‌کردن و بازکردن پایگاه داده‌ها",
        "right-override-export-depth": "برون‌بری صفحه‌ها شامل صفحه‌های پیوند شده تا عمق ۵",
-       "right-sendemail": "ارساÙ\84 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 به دیگر کاربران",
+       "right-sendemail": "ارساÙ\84 Ø§Û\8cÙ\85Û\8cÙ\84 به دیگر کاربران",
        "right-passwordreset": "مشاهدهٔ نامه‌های تنظیم مجدد گذرواژه",
+       "right-managechangetags": "ایجاد و حذف [[Special:Tags|برچسب‌ها]] از پایگاه داده",
        "newuserlogpage": "سیاههٔ ایجاد کاربر",
        "newuserlogpagetext": "این سیاهه‌ای از نام‌های کاربری تازه‌ساخته‌شده است.",
        "rightslog": "سیاههٔ اختیارات کاربر",
        "action-userrights": "ویرایش همهٔ اختیارات کاربری",
        "action-userrights-interwiki": "ویرایش اختیارات کاربری کاربران یک ویکی دیگر",
        "action-siteadmin": "قفل‌کردن و بازکردن پایگاه داده‌ها",
-       "action-sendemail": "ارساÙ\84 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87",
+       "action-sendemail": "ارساÙ\84 Ø§Û\8cÙ\85Û\8cÙ\84",
        "action-editmywatchlist": "فهرست پیگیری‌های خود را ویرایش کنید",
        "action-viewmywatchlist": "فهرست پیگیری‌های خود را ببینید",
        "action-viewmyprivateinfo": "اطلاعات خصوصی خود را ببینید",
        "action-editmyprivateinfo": "اطلاعات خصوصی خود را ویرایش کنید",
        "action-editcontentmodel": "ویرایش مدل محتوای یک صفحه",
+       "action-managechangetags": "ایجاد و حذف تگ‌ها از پایگاه داده",
        "nchanges": "$1 تغییر",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|از آخرین بازدید}}",
        "enhancedrc-history": "تاریخچه",
        "badfilename": "نام پرونده به «$1» تغییر کرد.",
        "filetype-mime-mismatch": "پسوند پرونده «$1.‎» با نوع MIME آن ($2) مطابقت ندارد.",
        "filetype-badmime": "پرونده‌هایی که نوع MIME آن‌ها $1 باشد برای بارگذاری مجاز نیستند.",
-       "filetype-bad-ie-mime": "این پرونده را نمی‌توانید بارگذاری کنید زیرا اینترنت اکسپلورر آن را بهعنوان «$1» تشخیص می‌دهد، که یک نوع پروندهٔ نامجاز و احتمالاً خطرناک است.",
+       "filetype-bad-ie-mime": "این پرونده را نمی‌توانید بارگذاری کنید زیرا اینترنت اکسپلورر آن را به عنوان «$1» تشخیص می‌دهد، که یک نوع پروندهٔ نامجاز و احتمالاً خطرناک است.",
        "filetype-unwanted-type": "'''«‎.‎$1»''' یک نوع پرونده ناخواسته است.\n{{PLURAL:$3|نوع پرونده ترجیح داده شده|انواع پرونده ترجیح داده شده}} از این قرار است: $2 .",
        "filetype-banned-type": "&lrm;'''\".$1\"''' {{PLURAL:$4|یک نوع پروندهٔ نامجاز است|انواعی پروندهٔ نامجاز هستند}}.\n{{PLURAL:$3|نوع پروندهٔ مجاز|انواع پروندهٔ مجاز}} از این قرار است: $2.",
        "filetype-missing": "این پرونده پسوند (مثلاً «‎.jpg») ندارد.",
        "unusedimages": "پرونده‌های استفاده‌نشده",
        "wantedcategories": "رده‌های مورد نیاز",
        "wantedpages": "صفحه‌های مورد نیاز",
+       "wantedpages-summary": "فهرست صفحه‌های ناموجود با بیشترین پیوند به آنها، به استثنای صفحه‌هایی که فقط تغییرمسیر به آنها دارند. برای یک فهرست از صفحه‌های ناموجود که تغییرمسیر به آنها دارند، [[{{#special:BrokenRedirects}}]] را ببینید.",
        "wantedpages-badtitle": "عنوان نامجاز در مجموعهٔ نتایج: $1",
        "wantedfiles": "پرونده‌های مورد نیاز",
        "wantedfiletext-cat": "پرونده‌های زیر استفاده می‌شوند اما موجود نیستند. همچنین ممکن است پرونده‌های مخازن خارجی با وجود موجود بودن در اینجا فهرست شوند. هرگونه رتبه مثبت کاذب <del>خط خواهد خورد.</del> علاوه بر این، صفحاتی که پرونده‌هایی ناموجود را در خود جای داده‌اند در [[:$1]] فهرست شده‌اند.",
        "deletedcontributions-title": "مشارکت‌های حذف‌شده",
        "sp-deletedcontributions-contribs": "مشارکت‌ها",
        "linksearch": "جستجوی پیوندهای بیرونی",
-       "linksearch-pat": "جستجÙ\88Û\8c Ø§Ù\84Ú¯و:",
+       "linksearch-pat": "اÙ\84Ú¯Ù\88Û\8c Ø¬Ø³ØªØ¬و:",
        "linksearch-ns": "فضای نام:",
        "linksearch-ok": "جستجو",
        "linksearch-text": "نشانه‌هایی مانند «‎*.wikipedia.org» را می‌توان استفاده کرد.\nحداقل یک دامنه سطح بالا ، به عنوان مثال \"*.org\" نیاز دارد.<br />\n{{PLURAL:$2|پروتکل|پروتکل‌های}} پشتیبانی‌شده: <code>$1</code> (پیش‌فرض برای http:// در صورت مشخص نشدن پروتکل تنظیم شده‌است).",
        "trackingcategories-nodesc": "توضیحی وجود ندارد.",
        "trackingcategories-disabled": "رده غیرفعال‌شده است",
        "mailnologin": "نشانی‌ای از فرستنده موجود نیست",
-       "mailnologintext": "برای فرستادن پست الکترونیکی به کاربران دیگر باید [[Special:UserLogin|به سیستم وارد شوید]] و نشانی پست الکترونیکی معتبری در [[Special:Preferences|ترجیح‌های]] خود داشته باشید.",
-       "emailuser": "پست الکترونیکی",
-       "emailuser-title-target": "فرستادن پست الکترونیکی به {{GENDER:$1|کاربر}}",
-       "emailuser-title-notarget": "فرستادن پست الکترونیکی به کاربر",
-       "emailpage": "راÛ\8cاÙ\86اÙ\85Ù\87 به کاربر",
-       "emailpagetext": "شما می‌توانید از فرم زیر برای ارسال یک رایانامه به این {{GENDER:$1|کاربر}} استفاده کنید.\nنشانی رایانامه‌ای که در [[Special:Preferences|ترجیحات کاربریتان]] وارد کرده‌اید در نشانی فرستنده (From) نامه خواهد آمد، تا گیرنده بتواند پاسخ دهد.",
-       "defemailsubject": "پست الکترونیکی {{SITENAME}} از طرف کاربر «$1»",
-       "usermaildisabled": "راÛ\8cاÙ\86اÙ\85Ù\87Ù\94 Ú©Ø§Ø±Ø¨Ø± ØºÛ\8cرقعال است",
-       "usermaildisabledtext": "Ø´Ù\85ا Ø¯Ø± Ø§Û\8cÙ\86 Ù\88Û\8cÚ©Û\8c Ù\86Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ø¨Ù\87 Ø¯Û\8cگر Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 Ø¨Ù\81رستید",
-       "noemailtitle": "نشانی رایانامه موجود نیست",
-       "noemailtext": "این کاربر نشانی رایانامهٔ معتبری مشخص نکرده است،",
-       "nowikiemailtext": "اÛ\8cÙ\86 Ú©Ø§Ø±Ø¨Ø± Ø§Ù\86تخاب Ú©Ø±Ø¯Ù\87 Ú©Ù\87 Ø§Ø² Ø¯Û\8cگر Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 دریافت نکند.",
+       "mailnologintext": "برای ارسال ایمیل به کاربران دیگر باید [[Special:UserLogin|به سیستم وارد شوید]] و آدرس ایمیل معتبری در [[Special:Preferences|ترجیحات]] خود داشته باشید.",
+       "emailuser": "ایمیل به این کاربر",
+       "emailuser-title-target": "ارسال ایمیل به این {{GENDER:$1|کاربر}}",
+       "emailuser-title-notarget": "ارسال ایمیل به کاربر",
+       "emailpage": "اÛ\8cÙ\85Û\8cÙ\84 به کاربر",
+       "emailpagetext": "شما می‌توانید از فرم زیر برای ارسال ایمیلی به این {{GENDER:$1|کاربر}} استفاده کنید.\nنشانی ایمیلی که در [[Special:Preferences|ترجیحات کاربریتان]] وارد کرده‌اید در نشانی فرستندهٔ ایمیل خواهد آمد، تا گیرنده بتواند پاسخ دهد.",
+       "defemailsubject": "ایمیل {{SITENAME}} از طرف کاربر «$1»",
+       "usermaildisabled": "اÛ\8cÙ\85Û\8cÙ\84 Ú©Ø§Ø±Ø¨Ø± ØºÛ\8cر قعال است",
+       "usermaildisabledtext": "Ø´Ù\85ا Ø¯Ø± Ø§Û\8cÙ\86 Ù\88Û\8cÚ©Û\8c Ù\86Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ø¨Ù\87 Ø¯Û\8cگر Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86 Ø§Û\8cÙ\85Û\8cÙ\84 Ø§Ø±Ø³Ø§Ù\84 Ú©Ù\86ید",
+       "noemailtitle": "آدرس ایمیل موجود نیست",
+       "noemailtext": "این کاربر آدرس ایمیل معتبری مشخص نکرده است.",
+       "nowikiemailtext": "اÛ\8cÙ\86 Ú©Ø§Ø±Ø¨Ø± Ø§Ù\86تخاب Ú©Ø±Ø¯Ù\87 Ú©Ù\87 Ø§Ø² Ø¯Û\8cگر Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86 Ø§Û\8cÙ\85Û\8cÙ\84 دریافت نکند.",
        "emailnotarget": "نام کاربری ناموجود یا نامعتبر برای گیرنده.",
        "emailtarget": "نام کاربری دریافت‌کننده را وارد کنید",
        "emailusername": "نام کاربری:",
        "emailusernamesubmit": "ارسال",
-       "email-legend": "ارسال یک نامه به کاربر دیگر {{SITENAME}}",
+       "email-legend": "ارسال ایمیل به کاربر دیگر {{SITENAME}}",
        "emailfrom": "از:",
        "emailto": "به:",
        "emailsubject": "عنوان:",
        "emailsend": "بفرست",
        "emailccme": "رونوشت پیغام را برایم بفرست.",
        "emailccsubject": "رونوشت پیغام شما به $1: $2",
-       "emailsent": "راÛ\8cاÙ\86اÙ\85Ù\87 Ù\81رستادÙ\87 شد",
-       "emailsenttext": "پیام پست الکترونیکی شما فرستاده شد.",
-       "emailuserfooter": "این پست الکترونیکی با استفاده از ویژگی «پست الکترونیکی» {{SITENAME}} توسط $1 به $2 فرستاده شد.",
+       "emailsent": "اÛ\8cÙ\85Û\8cÙ\84 Ø§Ø±Ø³Ø§Ù\84 شد",
+       "emailsenttext": "پیام ایمیل شما فرستاده شد.",
+       "emailuserfooter": "این ایمیل با استفاده از ویژگی «ایمیل به این کاربر» {{SITENAME}} توسط $1 به $2 ارسال شد.",
        "usermessage-summary": "گذاشتن پیغام سامانه.",
        "usermessage-editor": "پیغام رسان سامانه",
        "watchlist": "فهرست پی‌گیری",
        "notanarticle": "صفحه محتوایی نیست",
        "notvisiblerev": "آخرین نسخه توسط کاربری دیگر حذف شده‌است",
        "watchlist-details": "بدون احتساب صفحه‌های جداگانهٔ بحث، {{PLURAL:$1|$1 صفحه|$1 صفحه}} در فهرست پی‌گیری‌های شما قرار {{PLURAL:$1|دارد|دارند}}.",
-       "wlheader-enotif": "آگاÙ\87â\80\8cسازÛ\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87â\80\8cاÛ\8c فعال است.",
+       "wlheader-enotif": "اÛ\8cÙ\85Û\8cÙ\84â\80\8cÙ\87اÛ\8c Ø§Ø¹Ù\84اÙ\86 فعال است.",
        "wlheader-showupdated": "صفحه‌هایی که پس از آخرین بازدید شما تغییر کرده‌اند '''پررنگ''' نمایش داده شده‌اند.",
        "wlnote": "در زیر {{PLURAL:$1|تغییری|<strong>$1</strong> تغییری}} که در {{PLURAL:$2|ساعت|<strong>$2</strong> ساعت}} گذشته انجام شده موجود است، تاریخ آخرین بازیابی: $3، $4",
        "wlshowlast": "نمایش آخرین $1 ساعت $2 روز",
        "watching": "پی‌گیری...",
        "unwatching": "توقف پی‌گیری...",
        "watcherrortext": "ایرادی در هنگام عوض کردن تنظیمات فهرست پیگیرتان برای «$1» رخ داد.",
-       "enotif_reset": "نشان‌گذاری همهٔ صفحات بهعنوان بازدیدشده",
+       "enotif_reset": "نشان‌گذاری همهٔ صفحات به عنوان بازدیدشده",
        "enotif_impersonal_salutation": "کاربر {{SITENAME}}",
        "enotif_subject_deleted": "{{SITENAME}} صفحهٔ $1 توسط {{gender:$2|$2}} حذف شد.",
        "enotif_subject_created": "{{SITENAME}} صفحهٔ $1 توسط {{gender:$2|$2}} ایجاد شده.",
        "enotif_lastvisited": "برای دیدن همهٔ تغییرات از آخرین باری که سر زده‌اید $1 را ببینید.",
        "enotif_lastdiff": "برای نمایش این تغییر $1 را ببینید.",
        "enotif_anon_editor": "کاربر ناشناس $1",
-       "enotif_body": "$WATCHINGUSERNAME Ú¯Ø±Ø§Ù\85Û\8cØ\8c\n\n$PAGEINTRO $NEWPAGE\n\n\nتÙ\88ضÛ\8cØ­ Ù\88Û\8cراستار: $PAGESUMMARY $PAGEMINOREDIT\n\nتÙ\85اس Ø¨Ø§ Ù\88Û\8cراستار:\nÙ\86اÙ\85Ù\87: $PAGEEDITOR_EMAIL\nÙ\88Û\8cÚ©Û\8c: $PAGEEDITOR_WIKI\n\nتا Ù\87Ù\86گاÙ\85Û\8c Ú©Ù\87 Ø¨Ù\87 ØµÙ\81Ø­Ù\87 Ø³Ø± Ù\86زدÙ\87â\80\8cاÛ\8cدØ\8c Ø¯Ø± ØµÙ\88رت Ø±Ø®â\80\8cدادÙ\86Ù\90 Ø§Ø­ØªÙ\85اÙ\84Û\8cÙ\90 Ù\81عاÙ\84Û\8cت Ø¨Û\8cشترØ\8c ØªØ§ Ø²Ù\85اÙ\86Û\8c Ú©Ù\87 Ø¯Ø± Ø¨Ø§ Ú©Ø§Ø±Ø¨Ø±Û\8cتاÙ\86 Ø¯Ø± Ø³Ø§Ù\85اÙ\86Ù\87 Ù\87ستÛ\8cدØ\8c Ø§Ø¹Ù\84اÙ\86Û\8cÙ\87â\80\8cاÛ\8c Ø¨Ø±Ø§Û\8c Ø´Ù\85ا Ù\81رستادÙ\87 Ù\86Ø®Ù\88اÙ\87د Ø´Ø¯.\nØ´Ù\85ا Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ø¯Ø± ØµÙ\81Ø­Ù\87Ù\94 Ù¾Û\8câ\80\8cÚ¯Û\8cرÛ\8câ\80\8cÙ\87اÛ\8c Ø®Ù\88د Ù¾Ø±Ú\86Ù\85â\80\8cÙ\87اÛ\8c Ù\85ربÙ\88Ø· Ø¨Ù\87 Ø¢Ú¯Ø§Ù\87Û\8câ\80\8cرساÙ\86Û\8c Ø±Ø§ ØµÙ\81ر Ú©Ù\86Û\8cد Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ù¾Ø±Ú\86Ù\85â\80\8cÙ\87اÛ\8c Ø¢Ú¯Ø§Ù\87Û\8câ\80\8cسازÛ\8c Ø±Ø§ Ø¨Ø§Ø²Ù\86شاÙ\86Û\8c Ú©Ù\86Û\8cد.\n\nدÙ\88ستدار Ø´Ù\85اØ\8c Ø³Ø§Ù\85اÙ\86Ù\87Ù\94 Ø¢Ú¯Ø§Ù\87Û\8câ\80\8cرساÙ\86Û\8c {{SITENAME}}\n\n--\nبراÛ\8c ØªØºÛ\8cÛ\8cر ØªÙ\86ظÛ\8cÙ\85ات Ù\81Ù\87رست Ø¢Ú¯Ø§Ù\87Û\8câ\80\8cرساÙ\86Û\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87â\80\8cاÛ\8c به {{canonicalurl:{{#special:EditWatchlist}}}} بروید.\n\nبرای تغییر تنظیمات فهرست پی‌گیری‌هایتان به {{canonicalurl:{{#special:EditWatchlist}}}} بروید.\n\nبرای حذف صفحه از فهرست پی‌گیری‌هایتان به $UNWATCHURL بروید.\n\nبازخورد و کمک بیشتر:\n$HELPPAGE",
+       "enotif_body": "$WATCHINGUSERNAME Ú¯Ø±Ø§Ù\85Û\8cØ\8c\n\n$PAGEINTRO $NEWPAGE\n\n\nتÙ\88ضÛ\8cØ­ Ù\88Û\8cراستار: $PAGESUMMARY $PAGEMINOREDIT\n\nتÙ\85اس Ø¨Ø§ Ù\88Û\8cراستار:\nÙ\86اÙ\85Ù\87: $PAGEEDITOR_EMAIL\nÙ\88Û\8cÚ©Û\8c: $PAGEEDITOR_WIKI\n\nتا Ù\87Ù\86گاÙ\85Û\8c Ú©Ù\87 Ø¨Ù\87 ØµÙ\81Ø­Ù\87 Ø³Ø± Ù\86زدÙ\87â\80\8cاÛ\8cدØ\8c Ø¯Ø± ØµÙ\88رت Ø±Ø®â\80\8cدادÙ\86Ù\90 Ø§Ø­ØªÙ\85اÙ\84Û\8cÙ\90 Ù\81عاÙ\84Û\8cت Ø¨Û\8cشترØ\8c ØªØ§ Ø²Ù\85اÙ\86Û\8c Ú©Ù\87 Ø¯Ø± Ø¨Ø§ Ú©Ø§Ø±Ø¨Ø±Û\8cتاÙ\86 Ø¯Ø± Ø³Ø§Ù\85اÙ\86Ù\87 Ù\87ستÛ\8cدØ\8c Ø§Ø¹Ù\84اÙ\86Û\8cÙ\87â\80\8cاÛ\8c Ø¨Ø±Ø§Û\8c Ø´Ù\85ا Ù\81رستادÙ\87 Ù\86Ø®Ù\88اÙ\87د Ø´Ø¯.\nØ´Ù\85ا Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ø¯Ø± ØµÙ\81Ø­Ù\87Ù\94 Ù¾Û\8câ\80\8cÚ¯Û\8cرÛ\8câ\80\8cÙ\87اÛ\8c Ø®Ù\88د Ù¾Ø±Ú\86Ù\85â\80\8cÙ\87اÛ\8c Ù\85ربÙ\88Ø· Ø¨Ù\87 Ø¢Ú¯Ø§Ù\87Û\8câ\80\8cرساÙ\86Û\8c Ø±Ø§ ØµÙ\81ر Ú©Ù\86Û\8cد Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Ù¾Ø±Ú\86Ù\85â\80\8cÙ\87اÛ\8c Ø¢Ú¯Ø§Ù\87Û\8câ\80\8cسازÛ\8c Ø±Ø§ Ø¨Ø§Ø²Ù\86شاÙ\86Û\8c Ú©Ù\86Û\8cد.\n\nدÙ\88ستدار Ø´Ù\85اØ\8c Ø³Ø§Ù\85اÙ\86Ù\87Ù\94 Ø¢Ú¯Ø§Ù\87Û\8câ\80\8cرساÙ\86Û\8c {{SITENAME}}\n\n--\nبراÛ\8c ØªØºÛ\8cÛ\8cر ØªÙ\86ظÛ\8cÙ\85ات Ù\81Ù\87رست Ø§Û\8cÙ\85Û\8cÙ\84â\80\8cÙ\87اÛ\8c Ø§Ø¹Ù\84اÙ\86 به {{canonicalurl:{{#special:EditWatchlist}}}} بروید.\n\nبرای تغییر تنظیمات فهرست پی‌گیری‌هایتان به {{canonicalurl:{{#special:EditWatchlist}}}} بروید.\n\nبرای حذف صفحه از فهرست پی‌گیری‌هایتان به $UNWATCHURL بروید.\n\nبازخورد و کمک بیشتر:\n$HELPPAGE",
        "created": "ایجاد شده",
        "changed": "تغییر یافته",
        "deletepage": "حذف صفحه",
        "ipbreason-dropdown": "*دلایل متداول قطع دسترسی\n**واردکردن اطلاعات نادرست\n**پاک‌کردن اطلاعات مفید از صفحات\n**هرزنگاری از طریق درج مکرر پیوند به وب‌گاه‌ها\n**درج چرندیات یا نوشته‌های بی‌معنا در صفحات\n**تهدید یا ارعاب دیگر کاربران\n**سوء استفاده از چند حساب کاربری\n**نام کاربری نامناسب",
        "ipb-hardblock": "جلوگیری از ویرایش کردن کاربران ثبت نام کرده از طریق این نشانی آی‌پی",
        "ipbcreateaccount": "جلوگیری از ایجاد حساب",
-       "ipbemailban": "جÙ\84Ù\88Ú¯Û\8cرÛ\8c Ø§Ø² Ø§Ø±Ø³Ø§Ù\84 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87",
+       "ipbemailban": "جÙ\84Ù\88Ú¯Û\8cرÛ\8c Ø§Ø² Ø§Ø±Ø³Ø§Ù\84 Ø§Û\8cÙ\85Û\8cÙ\84",
        "ipbenableautoblock": "بستن  خودکار آخرین نشانی آی‌پی استفاده شده توسط کاربر و نشانی‌های دیگری که از آن‌ها برای ویرایش تلاش می‌کند",
        "ipbsubmit": "این کاربر بسته شود",
        "ipbother": "زمانی دیگر",
        "anononlyblock": "فقط کاربران گمنام",
        "noautoblockblock": "بستن خودکار غیرفعال است",
        "createaccountblock": "امکان ایجاد حساب مسدود است",
-       "emailblock": "راÛ\8cاÙ\86اÙ\85Ù\87 مسدود شد",
+       "emailblock": "اÛ\8cÙ\85Û\8cÙ\84 مسدود شد",
        "blocklist-nousertalk": "نمی تواند صفحهٔ بحث خود را ویرایش کند",
        "ipblocklist-empty": "فهرست بسته‌شدن‌ها خالی‌است.",
        "ipblocklist-no-results": "دسترسی حساب کاربری یا نشانی آی‌پی مورد نظر قطع نیست.",
        "unblocklink": "باز شود",
        "change-blocklink": "تغییر قطع دسترسی",
        "contribslink": "مشارکت‌ها",
-       "emaillink": "ارساÙ\84 Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87",
+       "emaillink": "ارساÙ\84 Ø§Û\8cÙ\85Û\8cÙ\84",
        "autoblocker": "به طور خودکار بسته شد چون آی‌پی شما به تازگی توسط کاربر «[[User:$1|$1]]» استفاده شده‌است.\nدلیل قطع دسترسی $1 چنین است \"$2\"",
        "blocklogpage": "سیاههٔ بستن",
        "blocklog-showlog": "دسترسی این کاربر در گذشته بسته شده‌است.\nسیاههٔ قطع دسترسی در زیر نمایش یافته است:",
        "block-log-flags-anononly": "فقط کاربران گمنام",
        "block-log-flags-nocreate": "قابلیت ایجاد حساب غیرفعال شد",
        "block-log-flags-noautoblock": "قطع دسترسی خودکار غیرفعال شد",
-       "block-log-flags-noemail": "راÛ\8cاÙ\86اÙ\85Ù\87 مسدود شد",
+       "block-log-flags-noemail": "اÛ\8cÙ\85Û\8cÙ\84 مسدود شد",
        "block-log-flags-nousertalk": "صفحهٔ بحث خود را نمی‌تواند ویرایش کند",
        "block-log-flags-angry-autoblock": "قطع دسترسی خودکار پیشرفته فعال شد",
        "block-log-flags-hiddenname": "نام کاربری پنهان",
        "thumbnail_image-missing": "پرونده به نظر گم شده‌است: $1",
        "thumbnail_image-failure-limit": "تلاش‌های ناموفق اخیر بسیاری ($1 یا بیشتر) برای ارائهٔ این تصویر کوچک وجود داشته‌ است. لطفأ بعداً دوباره تلاش کنید.",
        "import": "درون‌ریزی صفحات",
-       "importinterwiki": "درÙ\88Ù\86â\80\8cرÛ\8cزÛ\8c ØªØ±Ø§Ù\88Û\8cÚ©Û\8c",
-       "import-interwiki-text": "یک ویکی و یک نام صفحه را انتخاب کنید تا اطلاعات از آن درون‌ریزی شود.\nتاریخ نسخه‌ها و نام ویرایش‌کنندگان ثابت خواهد ماند.\nاطلاعات مربوط به درون‌ریزی صفحات در [[Special:Log/import|سیاههٔ درون‌ریزی‌ها]] درج خواهد شد.",
+       "importinterwiki": "درÙ\88Ù\86â\80\8cرÛ\8cزÛ\8c Ø§Ø² Û\8cÚ© Ù\88Û\8cÚ©Û\8c Ø¯Û\8cگر",
+       "import-interwiki-text": "Û\8cÚ© Ù\88Û\8cÚ©Û\8c Ù\88 Û\8cÚ© Ù\86اÙ\85 ØµÙ\81Ø­Ù\87 Ø±Ø§ Ø§Ù\86تخاب Ú©Ù\86Û\8cد ØªØ§ Ø§Ø·Ù\84اعات Ø§Ø² Ø¢Ù\86 Ø¯Ø±Ù\88Ù\86â\80\8cرÛ\8cزÛ\8c Ø´Ù\88د.\nتارÛ\8cØ® Ù\86سخÙ\87â\80\8cÙ\87ا Ù\88 Ù\86اÙ\85 Ù\88Û\8cراÛ\8cØ´â\80\8cÚ©Ù\86Ù\86دگاÙ\86 Ø«Ø§Ø¨Øª Ø®Ù\88اÙ\87د Ù\85اÙ\86د.\nاطÙ\84اعات Ù\85ربÙ\88Ø· Ø¨Ù\87 Ø¯Ø±Ù\88Ù\86â\80\8cرÛ\8cزÛ\8c ØµÙ\81حات Ø§Ø² Ù\88Û\8cÚ©Û\8c Ø¯Û\8cگر Ø¯Ø± [[Special:Log/import|سÛ\8cاÙ\87Ù\87Ù\94 Ø¯Ø±Ù\88Ù\86â\80\8cرÛ\8cزÛ\8câ\80\8cÙ\87ا]] Ø¯Ø±Ø¬ Ø®Ù\88اÙ\87د Ø´Ø¯.",
        "import-interwiki-sourcewiki": "ویکی منبع:",
        "import-interwiki-sourcepage": "صفحهٔ مبدأ:",
        "import-interwiki-history": "تمام نسخه‌های تاریخچهٔ این صفحه انتقال داده شود",
        "importcantopen": "پروندهٔ درون‌ریزی صفحات باز نشد",
        "importbadinterwiki": "پیوند میان‌ویکی نادرست",
        "importsuccess": "درون‌ریزی با موفقیت انجام شد!",
-       "importnosources": "هیچ منبعی برای درون‌ریزی اطلاعات از ویکی دیگر تعریف نشده‌است.",
+       "importnosources": "هیچ منبعی برای درون‌ریزی اطلاعات از ویکی‌های دیگر تعریف نشده‌است.",
        "importnofile": "هیچ پرونده‌ای برای درون‌ریزی بارگذاری نشده‌است.",
        "importuploaderrorsize": "در بارگذاری پروندهٔ درون‌ریزی، اشکال رخ داد.\nاندازهٔ پرونده بیشتر از حداکثر اندازهٔ مجاز است.",
        "importuploaderrorpartial": "در بارگذاری پروندهٔ درون‌ریزی، اشکال رخ داد. پرونده به طور ناقص بارگذاری شده‌است.",
        "import-rootpage-nosubpage": "فضای نام  \"$1\" صفحهٔ مبنا اجازهٔ زیرصفحه نمی‌دهد.",
        "importlogpage": "سیاههٔ درون‌ریزی‌ها",
        "importlogpagetext": "درون‌ریزی صفحات به همراه تاریخچهٔ ویرایش آن‌ها از ویکی‌های دیگر.",
-       "import-logentry-upload": "[[$1]] را از طریق بارگذاری پرونده درون‌ریزی کرد",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} واردشده",
-       "import-logentry-interwiki": "$1 را تراویکی کرد",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} واردشده از $2",
        "javascripttest": "آزمایش جاوا اسکریپت",
        "javascripttest-pagetext-noframework": "این صفحه برای اجرای آزمایش‌های جاوا اسکریپت کنار گذاشته شده‌است.",
        "tooltip-feed-rss": "خبرنامه آراس‌اس برای این صفحه",
        "tooltip-feed-atom": "خبرنامهٔ اتم برای این صفحه",
        "tooltip-t-contributions": "فهرست مشارکت‌های این کاربر",
-       "tooltip-t-emailuser": "فرستادن پست الکترونیکی به این کاربر",
+       "tooltip-t-emailuser": "ارسال ایمیل به این کاربر",
        "tooltip-t-info": "اطلاعات بیشتر دربارهٔ این صفحه",
        "tooltip-t-upload": "بارگذاری تصاویر و پرونده‌های دیگر",
        "tooltip-t-specialpages": "فهرستی از همهٔ صفحه‌های ویژه",
        "exif-urgency-other": "اولویت تعریف شده توسط کاربر ($1)",
        "namespacesall": "همه",
        "monthsall": "همهٔ ماه‌ها",
-       "confirmemail": "تأیید نشانی رایانامه",
-       "confirmemail_noemail": "شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود نشانی رایانامهٔ معتبری وارد نکرده‌اید.",
-       "confirmemail_text": "این ویکی شما را ملزم به تأیید اعتبار رایانامه خود، پیش از استفاده از خدمات رایانامه در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا نامهٔ تأییدی به نشانی رایانامهٔ شما فرستاده شود. این نامه دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید (اجرا) کنید تا اعتبار نشانی رایانامهٔ شما تأیید شود.",
-       "confirmemail_pending": "یک کد تأییدی پیشتر برای شما به صورت نامه فرستاده شده‌است. اگر همین اواخر حساب خود را باز کرده‌اید شاید بد نباشد که پیش از درخواست یک کد جدید چند دقیقه درنگ کنید تا شاید نامهٔ قبلی برسد.",
+       "confirmemail": "تأیید آدرس ایمیل",
+       "confirmemail_noemail": "شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود آدرس ایمیل معتبری وارد نکرده‌اید.",
+       "confirmemail_text": "این ویکی، شما را ملزم به تأیید آدرس ایمیل خود، پیش از استفاده از خدمات ایمیل در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا ایمیلی تأییدی به آدرس ایمیل شما فرستاده شود. این ایمیل دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید کنید تا آدرس ایمیل شما تأیید شود.",
+       "confirmemail_pending": "یک کد تأییدی پیشتر برای شما به صورت ایمیل فرستاده شده است. اگر همین اواخر حساب خود را باز کرده‌اید شاید بد نباشد که پیش از درخواست یک کد جدید چند دقیقه درنگ کنید تا شاید ایمیل قبلی برسد.",
        "confirmemail_send": "پُست‌کردن یک کد تأیید",
        "confirmemail_sent": "یک نامهٔ تأییدی فرستاده شد.",
-       "confirmemail_oncreate": "یک کد تأییدی به نشانی رایانامهٔ شما فرستاده شد.\nبرای واردشدن به سامانه نیازی به این کد نیست، ولی برای راه‌اندازی امکانات وابسته به رایانامه در این ویکی به آن نیاز خواهید داشت.",
-       "confirmemail_sendfailed": "فرستادن رایانامهٔ تأییدی ممکن نشد.\nنشانی رایانامه را از نظر وجود نویسه‌های نامعتبر بررسی کنید.\n\nپاسخ سامانه ارسال رایانامه: $1",
+       "confirmemail_oncreate": "یک کد تأییدی به آدرس ایمیل شما فرستاده شد.\nبرای واردشدن به سامانه نیازی به این کد نیست، ولی برای راه‌اندازی امکانات وابسته به ایمیل در این ویکی به آن نیاز خواهید داشت.",
+       "confirmemail_sendfailed": "ارسال ایمیل تأییدی ممکن نشد.\nنشانی ایمیل را از نظر وجود نویسه‌های نامعتبر بررسی کنید.\n\nپاسخ سیستم ارسال ایمیل: $1",
        "confirmemail_invalid": "کد تأیید نامعتبر است. ممکن است که منقضی شده باشد.",
-       "confirmemail_needlogin": "برای تأیید نشانی رایانامه‌تان نیاز به $1 دارید.",
-       "confirmemail_success": "نشانی رایانامهٔ شما تأیید شده‌است.\n\nهم‌اینک می‌توانید [[Special:UserLogin|به سامانه وارد شوید]] و از ویکی لذت ببرید.",
-       "confirmemail_loggedin": "نشانی رایانامهٔ شما تأیید شد.",
-       "confirmemail_subject": "تأیید نشانی رایانامهٔ شما {{SITENAME}}",
-       "confirmemail_body": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 حساب کاربری‌ای با نام «$2» و این نشانی رایانامه در {{SITENAME}} ایجاد کرده‌است.\n\nبرای تأیید این که این حساب واقعاً متعلق به شماست و نیز برای فعال‌سازی امکانات رایانامه {{SITENAME}} پیوند زیر را در مرورگر اینترنت خود باز کنید:\n\n$3\n\nاگر شما این حساب کاربری را ثبت *نکرده‌اید*، لطفاً پیوند زیر را\nدنبال کنید تا تأیید نشانی رایانامه لغو شود:\n\n$5\n\nاین کدِ تأیید در تاریخ $4 منقضی خواهد شد.\n</div>",
-       "confirmemail_body_changed": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 نشانی رایانامه حساب «$2» در {{SITENAME}} را تغییر داده‌است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ ویژگی رایانامه در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را دنبال کنید تا تغییر رایانامه را لغو کنید:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
-       "confirmemail_body_set": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1,\nنشانی رایانامه حساب «$2» در {{SITENAME}} را به این نشانی تغییر داده‌است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ ویژگی رایانامه در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را دنبال کنید تا تغییر رایانامه را لغو کنید:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
-       "confirmemail_invalidated": "تأیید نشانی رایانامه لغو شد",
-       "invalidateemail": "لغو کردن تأیید نشانی رایانامه",
+       "confirmemail_needlogin": "لطفاً برای تأیید آدرس ایمیلتان $1.",
+       "confirmemail_success": "آدرس ایمیل شما تأیید شده‌است.\n\nاکنون می‌توانید [[Special:UserLogin|به سیستم وارد شوید]] و از ویکی لذت ببرید.",
+       "confirmemail_loggedin": "آدرس ایمیل شما تأیید شد.",
+       "confirmemail_subject": "تأیید آدرس ایمیل {{SITENAME}}",
+       "confirmemail_body": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 حساب کاربری‌ای با نام «$2» و این آدرس ایمیل در {{SITENAME}} ایجاد کرده است.\n\nبرای تأیید این که این حساب واقعاً متعلق به شماست و نیز برای فعال سازی قابلیت ایمیل {{SITENAME}} پیوند زیر را در مرورگر اینترنت خود باز کنید:\n\n$3\n\nاگر شما این حساب کاربری را ثبت *نکرده‌اید*، لطفاً پیوند زیر را\nباز کنید تا تأیید آدرس ایمیل لغو شود:\n\n$5\n\nاین کدِ تأیید در تاریخ $4 منقضی خواهد شد.",
+       "confirmemail_body_changed": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 آدرس ایمیل حساب «$2» در {{SITENAME}} را تغییر داده است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ قابلیت ایمیل در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را باز کنید تا تغییر آدرس ایمیل لغو شود:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
+       "confirmemail_body_set": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1,\nآدرس ایمیل حساب «$2» در {{SITENAME}} را به این آدرس تغییر داده‌است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ قابلیت ایمیل در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را باز تا تغییر آدرس ایمیل، لغو شود:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
+       "confirmemail_invalidated": "تأیید آدرس ایمیل لغو شد",
+       "invalidateemail": "لغو تأیید آدرس ایمیل",
        "scarytranscludedisabled": "[تراگنجانش بین‌ویکیانه فعال نیست]",
        "scarytranscludefailed": "[فراخوانی الگو برای $1 میسر نشد]",
        "scarytranscludefailed-httpstatus": "[فراخوانی الگو برای $1 میسر نشد: خطای اچ‌تی‌تی‌پی $2]",
        "watchlistedit-raw-legend": "ویرایش فهرست خام پی‌گیری‌ها",
        "watchlistedit-raw-explain": "عنوان‌های موجود در فهرست پی‌گیری‌های شما در زیر نشان داده شده‌اند، و شما می‌توانید مواردی را حذف یا اضافه کنید؛ هر مورد در یک سطر جداگانه باید قرار بگیرد.\nدر پایان، دکمهٔ «{{int:Watchlistedit-raw-submit}}» را بفشارید.\nتوجه کنید که شما می‌توانید از [[Special:EditWatchlist|ویرایشگر استاندارد فهرست پی‌گیری‌ها]] هم استفاده کنید.",
        "watchlistedit-raw-titles": "عنوان‌ها:",
-       "watchlistedit-raw-submit": "به روز رساندن پی‌گیری‌ها",
+       "watchlistedit-raw-submit": "به‌روزرسانی پی‌گیری‌ها",
        "watchlistedit-raw-done": "فهرست پی‌گیری‌های شما به روز شد.",
        "watchlistedit-raw-added": "$1 عنوان به فهرست پی‌گیری‌ها اضافه {{PLURAL:$1|شد|شدند}}:",
        "watchlistedit-raw-removed": "$1 عنوان حذف {{PLURAL:$1|شد|شدند}}:",
        "version-parser-function-hooks": "قلاب‌های عملگر تجزیه‌گر",
        "version-hook-name": "نام قلاب",
        "version-hook-subscribedby": "وارد شده توسط",
-       "version-version": "(نسخه  $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[بدون نام]",
        "version-svn-revision": "(&رلم;r$2)",
        "version-license": "اجازه‌نامهٔ مدیاویکی",
        "version-poweredby-others": "دیگران",
        "version-poweredby-translators": "مترجمان translatewiki.net",
        "version-credits-summary": "افراد زیر را به خاطر ویرایش‌هایش در [[Special:Version|مدیاویکی]] معرفی می‌نمائیم.",
-       "version-license-info": "مدیاویکی نرم‌افزاری رایگان است؛ می‌توانید آن را تحت شرایط مجوز عمومی همگانی گنو که توسط بنیاد نرم‌افزار رایگان منتشر شده‌است، بازنشر کنید؛ یا نسخهٔ ۲ از این مجوز، یا (بنا به اختیار) نسخه‌های بعدی.\n\nمدیاویکی به این امید که مفید واقع شود منتشر شده‌است، ولی بدون هیچ‌گونه ضمانتی؛ بدون ضمانت ضمنی که تجاری یا برای کار خاصی مناسب باشد. برای اطلاعات بیشتر مجوز گنو جی‌پی‌ال را مشاهده کنید.\n\nشما باید [{{SERVER}}{{SCRIPTPATH}}/COPYING یک نسخه از مجوز عمومی همگانی گنو] را همراه این برنامه دریافت کرده باشید؛ در غیر این صورت بنویسید برای Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA یا آن را [//www.gnu.org/licenses/old-licenses/gpl-2.0.html به صورت برخط بخوانید].",
+       "version-license-info": "مدیاویکی یک نرم‌افزار آزاد است. می‌توانید آن را با شرایط نگارش ۲، یا (با نظر خودتان) هر نگارش جدیدتری از پروانه جامع همگانی گنو که توسط بنیاد نرم‌افزار آزاد منتشر شده‌است، بازنشر کنید.\n\nمدیاویکی با این امید که مفید واقع شود منتشر شده‌است، ولی هیچ‌گونه ضمانتی، حتا ضمانت ضمنی تجاری یا مناسب بودن برای یک مصرف خاص را ارائه نمی‌کند. برای اطلاعات بیش‌تر، پروانه جامع همگانی گنو را مشاهده کنید.\n\nشما باید [{{SERVER}}{{SCRIPTPATH}}/COPYING یک نسخه از پروانه جامع همگانی گنو] را به همراه این برنامه دریافت کرده باشید. در غیر این صورت با Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA یا آن را [//www.gnu.org/licenses/old-licenses/gpl-2.0.html مکاتبه کرده یا آن را به صورت برخط بخوانید].",
        "version-software": "نسخهٔ نصب‌شده",
        "version-software-product": "محصول",
        "version-software-version": "نسخه",
        "tags-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-explanation": "به طور پیش‌فرض، تگ‌های تازه ایجاد شده برای استفاده کاربران و ربات‌ها در دسترس قرار می‌گیرند.",
+       "tags-create-tag-name": "نام برچسب:",
+       "tags-create-reason": "دلیل:",
+       "tags-create-submit": "ایجاد",
+       "tags-create-no-name": "نام تگ باید مشخص شود.",
+       "tags-create-invalid-chars": "نام تگ‌ها نباید حاوی کاما (<code>,</code>) یا خط مورب (<code>/</code>) باشد.",
+       "tags-create-invalid-title-chars": "نام تگ‌ها نباید شامل حروفی شود که نمی‌توان از آن‌ها در عنوان صفحات استفاده کرد.",
+       "tags-create-already-exists": "تگ \"$1\" هم‌اکنون موجود است.",
+       "tags-create-warnings-above": "در هنگام ایجاد تگ \"$1\" با {{PLURAL:$2|هشدار|هشدارهای}} زیر پیش آمد:",
+       "tags-create-warnings-below": "آیا مایل به ادامه ایجاد تگ هستید؟",
+       "tags-delete-title": "حذف برچسب",
+       "tags-delete-explanation-initial": "شما در حال حذف تگ «$1» از پایگاه داده هستید.",
+       "tags-delete-explanation-in-use": "این از {{PLURAL:$2|$2 ویرایش یا ورودی سیاهه|همهٔ $2 ویرایش و/یا ورودی سیاهه}} حذف خواهد شد با وجودی که الان تائید شده‌است.",
+       "tags-delete-explanation-warning": "این عمل <strong>غیر قابل بازگشت</strong> است، حتی توسط مدیران پایگاه داده. مطمئن باشید که این همان تگی است که می‌خواهید آن‌را حذف کنید.",
+       "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 نسخه اعمال شده است و نمی‌توان آن را حذف نمود.",
+       "tags-delete-warnings-after-delete": "برچسب \"$1\" با موفقیت حذف شد، اما با {{PLURAL:$2|خطای|خطاهای}} زیر همراه بود:",
+       "tags-activate-title": "فعال‌سازی برچسب",
+       "tags-activate-question": "شما در حال فعال‌سازی تگ «$1» هستید.",
+       "tags-activate-reason": "دلیل:",
+       "tags-activate-not-allowed": "فعال‌سازی تگ «$1» ممکن نیست.",
+       "tags-activate-not-found": "تگ «$1» وجود ندارد.",
+       "tags-activate-submit": "فعال‌سازی",
+       "tags-deactivate-title": "غیرفعال‌سازی برچسب",
+       "tags-deactivate-question": "شما در حال غیرفعال‌سازی تگ «$1» هستید.",
+       "tags-deactivate-reason": "دلیل:",
+       "tags-deactivate-not-allowed": "غیرفعال‌سازی تگ «$1» ممکن نیست.",
+       "tags-deactivate-submit": "غیرفعال‌سازی",
        "comparepages": "مقایسهٔ صفحات",
        "compare-page1": "صفحهٔ ۱",
        "compare-page2": "صفحهٔ ۲",
        "revdelete-uname-unhid": "نام کاربری را آشکار کرد",
        "revdelete-restricted": "مدیران را محدود کرد",
        "revdelete-unrestricted": "محدودیت مدیران را لغو کرد",
+       "logentry-block-block": "$1 {{GENDER:$4|$3}} را تا $5 {{GENDER:$2|بست}} $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|بازکرد}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|تنظیمات}} بستن {{GENDER:$4|$3}} را به پایان قطع دسترسی $5 $6 تغییر داد.",
+       "logentry-suppress-block": "$1 {{GENDER:$2|بسته شد}} {{GENDER:$4|$3}} با پایان قطع دسترسی در زمان $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|تنظیمات}} بستن برای  {{GENDER:$4|$3}} به پایان قطع دسترسی  $5 $6 تغییر یافت",
+       "logentry-import-upload": "$1 $3 را توسط بارگذار پرونده {{GENDER:$2|درون‌ریزی کرد}}",
+       "logentry-import-interwiki": "$1 $3 را از ویکی دیگر {{GENDER:$2|درون‌ریز کرد}}",
        "logentry-merge-merge": "$1  $3  را به  $4 {{GENDER:$2| ادغام کرد}} (نسخه تا  $5)",
        "logentry-move-move": "$1 صفحهٔ $3 را به $4 {{GENDER:$2|منتقل کرد}}",
        "logentry-move-move-noredirect": "$1 صفحهٔ $3 را بدون برجای‌گذاشتن تغییرمسیر به $4 {{GENDER:$2|منتقل کرد}}",
        "logentry-move-move_redir": "$1 صفحهٔ $3 را به $4 که تغییرمسیر بود {{GENDER:$2|منتقل کرد}}",
        "logentry-move-move_redir-noredirect": "$1 صفحهٔ $3 را بدون برجای‌گذاشتن تغییرمسیر به $4 که تغییرمسیر بود {{GENDER:$2|منتقل کرد}}",
        "logentry-patrol-patrol": "$1 نسخه $4 صفحه $3 را به عنوان گشت خورده {{GENDER:$2|علامت زد}}",
-       "logentry-patrol-patrol-auto": "$1 نسخهٔ $4 صفحهٔ $3 را به‌طور خودکار بهعنوان گشت‌خورده {{GENDER:$2|علامت زد}}",
+       "logentry-patrol-patrol-auto": "$1 نسخهٔ $4 صفحهٔ $3 را به‌طور خودکار به عنوان گشت‌خورده {{GENDER:$2|علامت زد}}",
        "logentry-newusers-newusers": "حساب کاربری $1 {{GENDER:$2|ایجاد شد}}",
        "logentry-newusers-create": "حساب کاربری $1 {{GENDER:$2|ایجاد شد}}",
        "logentry-newusers-create2": "حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}}",
-       "logentry-newusers-byemail": "حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}} و رمز عبور به‌وسیلهٔ رایانامه ارسال شد",
+       "logentry-newusers-byemail": "حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}} و رمز عبور به وسیلهٔ ایمیل ارسال شد",
        "logentry-newusers-autocreate": "حساب $1  به شکل خودکار {{GENDER:$2|ایجاد شد}}",
        "logentry-rights-rights": "$1 عضویت $3 را از گروه $4 به $5 {{GENDER:$2|تغییر داد}}",
        "logentry-rights-rights-legacy": "$1 گروه عضویت $3 را {{GENDER:$2|تغییر داد}}",
        "logentry-upload-upload": "$1 $3 را {{GENDER:$2|بارگذاری کرد}}",
        "logentry-upload-overwrite": "$1 نسخهٔ تازه‌ای از $3 را {{GENDER:$2|بارگذاری کرد}}",
        "logentry-upload-revert": "$1 {{GENDER:$2|بارگذاری کرد}} $3",
+       "log-name-managetags": "تاریخچه مدیریت تگ",
+       "log-description-managetags": "این صفحه امور مدیریتی مربوط به [[Special:Tags|برچسب‌ها]] را فهرست می‌کند. سیاهه فقط حاوی فعالیت‌هایی است که توسط یک مدیر به صورت دستی انجام شده‌اند؛ برچسب‌ها ممکن است توسط نرم‌افزار ویکی ساخته یا حذف بشوند بدون اینکه هیچ ورودی در این سیاهه ثبت گردد.",
+       "logentry-managetags-create": "$1 برچسب «$4» را {{GENDER:$2|ایجاد کرد}}",
+       "logentry-managetags-delete": "$1 برچسب را از \"$4\" {{GENDER:$2|حذف کرد}} (حذف شده از $5 {{PLURAL:$5|نسخه یا ورودی سیاهه|نسخه یا/و ورودی سیاهه}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|برچسب}} فعال شده \"$4\" برای کاربران و ربات‌ها",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|برچسب}} غیرفعال شده \"$4\" برای کاربران و ربات‌ها",
        "rightsnone": "(هیچ)",
        "revdelete-summary": "خلاصه ویرایش",
+       "feedback-adding": "افزودن بازخورد به صفحه...",
+       "feedback-back": "بازگشت",
+       "feedback-bugcheck": "عالی‌است! فقط بررسی کنید که از [$1 ایرادهای شناخته‌شده] نباشد.",
+       "feedback-bugnew": "بررسی کردم. ایرادی تازه را گزارش بده",
        "feedback-bugornote": "اگر آماده‌اید تا مشکلی فنی را با جزئیاتش شرح دهید لطفاً [$1 یک ایراد گزارش دهید]. در غیر این صورت می‌توانید از فرم سادهٔ زیر استفاده کنید. نظر شما به همراه نام کاربری و مرورگرتان به صفحهٔ «[$3 $2]» افزوده خواهد شد.",
-       "feedback-subject": "موضوع:",
-       "feedback-message": "پیغام:",
        "feedback-cancel": "لغو",
-       "feedback-submit": "ارسال بازخورد",
-       "feedback-adding": "افزودن بازخورد به صفحه...",
+       "feedback-close": "انجام شد",
+       "feedback-external-bug-report-button": "پرونده‌سازی یک عمل فنی",
+       "feedback-dialog-title": "ارسال یک بازخورد",
+       "feedback-dialog-intro": "شما می توانید از فرم زیر برای بازخورد استفاده کنید. متن شما همراه با نام کاربریتان به صفحهٔ \"$1\" افزوده خواهد شد.",
+       "feedback-error-title": "خطا",
        "feedback-error1": "خطا: پاسخ‌های ناشناخته از رابط برنامه‌نویسی نرم‌افزار",
        "feedback-error2": "خطا: شکست در ویرایش",
        "feedback-error3": "خطا: عدم پاسخ از رابط برنامه‌نویسی نرم‌افزار",
+       "feedback-message": "پیغام:",
+       "feedback-subject": "موضوع:",
+       "feedback-submit": "ارسال",
+       "feedback-terms": "من اطلاع دارم که اطلاعات یوز ایجنتم دربارهٔ مرورگر و نسخهٔ سیستم عاملی که استفاده می‌کنم، به صورت عمومی همراه با نام کاربریم به اشتراک گذاشته می‌شود.",
+       "feedback-termsofuse": "موافق با قرار دادن بازخورد بر پایهٔ شرایط استفاده هستم.",
        "feedback-thanks": "سپاس! بازخورد شما در صفحهٔ «[$1 $2]» ثبت شد.",
-       "feedback-close": "انجام شد",
-       "feedback-bugcheck": "عالی‌است! فقط بررسی کنید که از [$1 ایرادهای شناخته‌شده] نباشد.",
-       "feedback-bugnew": "بررسی کردم. ایرادی تازه را گزارش بده",
+       "feedback-thanks-title": "با تشکر!",
+       "feedback-useragent": "رابط کاربر:",
        "searchsuggest-search": "جستجو",
        "searchsuggest-containing": "صفحه‌های دربردارنده...",
        "api-error-badaccess-groups": "شما اجازهٔ بارگذاری پرونده‌ها را در این ویکی ندارید.",
        "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به نظر می‌آید نصب شما شامل پوسته‌های زیر می‌شود. [https://www.mediawiki.org/wiki/Manual:Skin_configuration راهنما: تنظیمات پوسته] را برای کسب اطلاعات در باره چگونگی فعال‌ساختن آن‌ها و انتخاب پیش‌فرض ببینید.\n\n$2\n\n; اگر اخیراً مدیاویکی را نصب کرده‌اید:\n: احتمالاً از گیت، یا به طور مستقیم از کد مبدأ که از چند متد دیگر استفاده می‌کند نصب کردید. انتظار می‌رود. چند پوسته از [https://www.mediawiki.org/wiki/Category:All_skins فهرست پوسته mediawiki.org] نصب کنید، که همراه چندین پوسته و افزونه هستند. شما می‌توانید شاخه <code>skins/</code> را از آن نسخه‌برداری کرده و بچسبانید.\n\n:* همسانه‌سازی یکی از مخازن <code>mediawiki/skins/*</code> از طریق گیت به داخل شاخه <code dir=\"ltr\">skins/</code> از نصب مدیاویکی‌تان.\n: انجام این کار با مخزن گیت‌تان تداخل نمی‌کند اگر توسعه‌دهنده مدیاویکی هستید.\n\n; اگر اخیراً مدیاویکی را ارتقاء دادید:\n: مدیاویکی ۱٫۲۴ و تازه‌تر دیگر به طور خودکار پوسته‌های نصب‌شده را فعال نمی‌کند ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery راهنما: کشف خودکار پوسته] را ببینید). شما می‌توانید خطوط زیر را به داخل <code>LocalSettings.php</code> بچسبانید تا همه پوسته‌های نصب‌شده جاری را فعال کنید:\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:اگر مدیاویکی را به‌روز یا نصب کرده‌اید:\n:ممکن است از گیت یا از کند منبع با روش های دیگر نصب کرده‌اید. انتظار می‌رود MediaWiki 1.24 یا جدیدتر در پوشهٔ اصلی هیچ پوسته‌ای نداشته باشند.\nسعی کنید تعدادی پوسته از [https://www.mediawiki.org/wiki/Category:All_skins پوشهٔ پوسته‌های مدیاویکی]، با:\n:*دانلود کردن [https://www.mediawiki.org/wiki/Download نصب‌کننده تاربال]، که با چندین پوسته و افزونه هست. شما می توانید پوستهٔ <code>skins/</code> را  از آن کپی و پیست کنید.\n:*کلون کردن یکی از <code dir=\"ltr\">mediawiki/skins/*</code> از ریپوزیتوری در پوشهٔ <code>skins/</code> مدیاویکی‌تان.\n:اگر توسعه‌دهندهٔ مدیاویکی هستید، انجام این کار نباید تعارضی با ریپوزیتوری گیت شما داشته باشد. برای اطلاعات بیشتر و فعال کردن پوسته‌ها و انتخاب آنها به عنوان پیش‌فرض [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: تنظیمات پوسته] را مشاهده کنید.",
+       "default-skin-not-found": "اوه! پوسته پیش‌فرض برای ویکی شما تعریف‌شده در <code dir=\"ltr\"<$wgDefaultSkin</code> به عنوان <code>$1</code>، در دسترس نیست.\n\nبه نظر می‌آید نصب شما شامل پوسته‌های زیر می‌شود. [https://www.mediawiki.org/wiki/Manual:Skin_configuration راهنما: تنظیمات پوسته] را برای کسب اطلاعات در باره چگونگی فعال‌ساختن آن‌ها و انتخاب پیش‌فرض ببینید.\n\n$2\n\n; اگر اخیراً مدیاویکی را نصب کرده‌اید:\n: احتمالاً از گیت، یا به طور مستقیم از کد مبدأ که از چند متد دیگر استفاده می‌کند نصب کردید. انتظار می‌رود. چند پوسته از [https://www.mediawiki.org/wiki/Category:All_skins فهرست پوسته mediawiki.org] نصب کنید، که همراه چندین پوسته و افزونه هستند. شما می‌توانید شاخه <code>skins/</code> را از آن نسخه‌برداری کرده و بچسبانید.\n\n:* همسانه‌سازی یکی از مخازن <code>mediawiki/skins/*</code> از طریق گیت به داخل شاخه <code dir=\"ltr\">skins/</code> از نصب مدیاویکی‌تان.\n: انجام این کار با مخزن گیت‌تان تداخل نمی‌کند اگر توسعه‌دهنده مدیاویکی هستید.\n\n; اگر اخیراً مدیاویکی را ارتقاء دادید:\n: مدیاویکی ۱٫۲۴ و تازه‌تر دیگر به طور خودکار پوسته‌های نصب‌شده را فعال نمی‌کند ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery راهنما: کشف خودکار پوسته] را ببینید). شما می‌توانید خطوط زیر را به داخل <code>LocalSettings.php</code> بچسبانید تا همه پوسته‌های نصب‌شده جاری را فعال کنید:\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:اگر مدیاویکی را به‌روز یا نصب کرده‌اید:\n:ممکن است از گیت یا از کند منبع با روش های دیگر نصب کرده‌اید. انتظار می‌رود MediaWiki 1.24 یا جدیدتر در پوشهٔ اصلی هیچ پوسته‌ای نداشته باشند.\nسعی کنید تعدادی پوسته از [https://www.mediawiki.org/wiki/Category:All_skins پوشهٔ پوسته‌های مدیاویکی]، با:\n:*دانلود کردن [https://www.mediawiki.org/wiki/Download نصب‌کننده تاربال]، که با چندین پوسته و افزونه هست. شما می توانید پوستهٔ <code>skins/</code> را  از آن کپی و پیست کنید.\n:*کلون کردن یکی از <code dir=\"ltr\">mediawiki/skins/*</code> از ریپوزیتوری در پوشهٔ <code>skins/</code> مدیاویکی‌تان.\n:اگر توسعه‌دهندهٔ مدیاویکی هستید، انجام این کار نباید تعارضی با ریپوزیتوری گیت شما داشته باشد. برای اطلاعات بیشتر و فعال کردن پوسته‌ها و انتخاب آنها به عنوان پیش‌فرض [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: تنظیمات پوسته] را مشاهده کنید.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (فعال)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''غیر فعال''')",
        "mediastatistics": "آمار رسانه‌ها",
        "json-error-utf8": "نویسه‌های نادرست یوتی‌اف-۸، احتمالاً نادرست کدگذاری شده است",
        "json-error-recursion": "ارجاع بازگشتی یک یا بیشتر در مقداری که کذگذاری می‌شود",
        "json-error-inf-or-nan": "مقادیر INF یا NAN یک یا بیشتر در مقداری که کدگذاری می‌شود",
-       "json-error-unsupported-type": "یک مقداری نوعی که نمی‌تواند کدگذاری شود داده شده است"
+       "json-error-unsupported-type": "یک مقداری نوعی که نمی‌تواند کدگذاری شود داده شده است",
+       "headline-anchor-title": "پیوند به این بخش",
+       "special-characters-group-latin": "لاتین",
+       "special-characters-group-latinextended": "لاتین گسترش‌یافته",
+       "special-characters-group-ipa": "آوانگاری بین‌المللی",
+       "special-characters-group-symbols": "نمادها",
+       "special-characters-group-greek": "یونانی",
+       "special-characters-group-cyrillic": "سیریلیک",
+       "special-characters-group-arabic": "عربی",
+       "special-characters-group-arabicextended": "عربی گسترش‌یافته",
+       "special-characters-group-persian": "فارسی",
+       "special-characters-group-hebrew": "عبری",
+       "special-characters-group-bangla": "بنگالی",
+       "special-characters-group-tamil": "تامیلی",
+       "special-characters-group-telugu": "تالوگو",
+       "special-characters-group-sinhala": "سینهالی",
+       "special-characters-group-gujarati": "گجراتی",
+       "special-characters-group-devanagari": "دیواناگرى",
+       "special-characters-group-thai": "تایلندی",
+       "special-characters-group-lao": "لائو",
+       "special-characters-group-khmer": "خمر",
+       "special-characters-title-endash": "خط فاصله",
+       "special-characters-title-emdash": "خط فاسله کشیده",
+       "special-characters-title-minus": "علامت منفی"
 }
index f6399b6..16ecd3e 100644 (file)
@@ -43,7 +43,8 @@
                        "MrTapsa",
                        "SMAUG",
                        "SuperPete",
-                       "McSalama"
+                       "McSalama",
+                       "Macofe"
                ]
        },
        "tog-underline": "Linkkien alleviivaus:",
        "disclaimers": "Vastuuvapaus",
        "disclaimerpage": "Project:Vastuuvapaus",
        "edithelp": "Muokkausohjeet",
+       "helppage-top-gethelp": "Ohjeet",
        "mainpage": "Etusivu",
        "mainpage-description": "Etusivu",
        "policy-url": "Project:Käytännöt",
        "readonly_lag": "Tietokanta on automaattisesti lukittu, jotta kaikki tietokantapalvelimet saisivat kaikki tuoreet muutokset",
        "internalerror": "Sisäinen virhe",
        "internalerror_info": "Sisäinen virhe: $1",
+       "internalerror-fatal-exception": "Vakava virhe, jonka tyyppi on \"$1\"",
        "filecopyerror": "Tiedostoa <b>$1</b> ei voitu kopioida tiedostoksi <b>$2</b>.",
        "filerenameerror": "Tiedostoa <b>$1</b> ei voitu nimetä uudelleen nimellä <b>$2</b>.",
        "filedeleteerror": "Tiedostoa <b>$1</b> ei voitu poistaa.",
        "wrongpassword": "Syöttämäsi salasana ei ole oikein. Ole hyvä ja yritä uudelleen.",
        "wrongpasswordempty": "Et voi antaa tyhjää salasanaa.",
        "passwordtooshort": "Salasanan täytyy olla vähintään {{PLURAL:$1|yhden merkin pituinen|$1 merkkiä pitkä}}.",
+       "passwordtoolong": "Salasanat saavat olla enintään $1 {{PLURAL:$1|merkin}} pituisia.",
        "password-name-match": "Salasanasi täytyy olla eri kuin käyttäjätunnuksesi.",
        "password-login-forbidden": "Tämän käyttäjänimen ja salasanan käyttö on estetty.",
        "mailmypassword": "Uudista salasana",
        "media_tip": "Tiedostolinkki",
        "sig_tip": "Allekirjoitus aikaleiman kanssa",
        "hr_tip": "Vaakasuora viiva",
-       "summary": "Yhteenveto",
-       "subject": "Aihe tai otsikko",
+       "summary": "Yhteenveto:",
+       "subject": "Aihe tai otsikko:",
        "minoredit": "Tämä on pieni muutos",
        "watchthis": "Tarkkaile tätä sivua",
        "savearticle": "Tallenna sivu",
        "missingcommentheader": "Et ole antanut otsikkoa kommentillesi. Napsauta ”{{int:savearticle}}”, jos et halua antaa otsikkoa.",
        "summary-preview": "Yhteenvedon esikatselu:",
        "subject-preview": "Otsikon esikatselu:",
+       "previewerrortext": "Muokkaustesi esikatselun toteuttamisessa on tapahtunut virhe.",
        "blockedtitle": "Käyttäjä on estetty",
        "blockedtext": "'''Käyttäjätunnuksesi tai IP-osoitteesi on estetty.'''\n\nEston on asettanut $1.\nSyy: '''$2'''\n\n* Eston alkamisaika: $8\n* Eston päättymisaika: $6\n* Kohde: $7\n\nVoit keskustella ylläpitäjän $1 tai toisen [[{{MediaWiki:Grouppage-sysop}}|ylläpitäjän]] kanssa estosta.\nHuomaa, ettet voi lähettää sähköpostia {{GRAMMAR:genitive|{{SITENAME}}}} kautta, ellet ole asettanut olemassa olevaa sähköpostiosoitetta [[Special:Preferences|asetuksissa]] tai jos esto on asetettu koskemaan myös sähköpostin lähettämistä.\nIP-osoitteesi on $3 ja estotunnus on #$5.\nLiitä kaikki yllä olevat tiedot mahdollisiin kyselyihisi.",
        "autoblockedtext": "IP-osoitteesi on estetty automaattisesti, koska sitä on käyttänyt toinen käyttäjä, jonka on estänyt ylläpitäjä $1.\nEston syy on:\n\n:''$2''\n\n* Eston alkamisaika: $8\n* Eston päättymisaika: $6\n* Kohde: $7\n\nVoit keskustella ylläpitäjän $1 tai toisen [[{{MediaWiki:Grouppage-sysop}}|ylläpitäjän]] kanssa estosta.\n\nHuomaa, ettet voi lähettää sähköpostia {{GRAMMAR:genitive|{{SITENAME}}}} kautta, ellet ole asettanut olemassa olevaa sähköpostiosoitetta [[Special:Preferences|asetuksissa]] tai jos esto on asetettu koskemaan myös sähköpostin lähettämistä.\n\nIP-osoitteesi on $3 ja estotunnus on #$5.\nLiitä kaikki yllä olevat tiedot mahdollisiin kyselyihisi.",
        "notextmatches": "Hakusanaa ei löytynyt sivujen teksteistä",
        "prevn": "← {{PLURAL:$1|edellinen|$1 edellistä}}",
        "nextn": "{{PLURAL:$1|seuraava|$1 seuraavaa}} →",
+       "prev-page": "edellinen sivu",
+       "next-page": "seuraava sivu",
        "prevn-title": "{{PLURAL:$1|Edellinen osuma|Edelliset $1 osumaa}}",
        "nextn-title": "{{PLURAL:$1|Seuraava osuma|Seuraavat $1 osumaa}}",
        "shown-title": "Näytä $1 {{PLURAL:$1|osuma|osumaa}} sivulla",
        "unusedimages": "Käyttämättömät tiedostot",
        "wantedcategories": "Halutut luokat",
        "wantedpages": "Halutut sivut",
+       "wantedpages-summary": "Luettelo olemattomista sivuista, joihin johtaa eniten linkkejä. Luettelossa ei kuitenkaan ole sellaisia sivuja, joihin johtaa ainoastaan uudelleenohjauksia. Jos haluat nähdä luettelon niistä olemattomista sivuista, joihin on linkki uudelleenohjauksista, katso sivua [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Virheellinen otsikko tuloksissa: $1",
        "wantedfiles": "Halutut tiedostot",
        "wantedfiletext-cat": "Seuraavia tiedostoja käytetään, mutta niitä ei ole olemassa. Ulkopuolissa mediavarastoissa olevat tiedostot voivat näkyä tällä listalla, vaikka ne ovat olemassa. Tällaiset väärät merkinnät on <del>yliviivattu</del>. Lisäksi sellaiset sivut, joihin on sisällytetty tiedostoja, jotka eivät ole olemassa, on luetteloitu [[:$1|täällä]].",
        "thumbnail_image-missing": "Tiedosto näyttää puuttuvan: $1",
        "thumbnail_image-failure-limit": "Tätä kuvaketta on yritetty tulkita epäonnistuneesti liian monta kertaa ($1 tai enemmän). Ole hyvä ja yritä myöhemmin uudelleen.",
        "import": "Tuo sivuja",
-       "importinterwiki": "Tuo sivuja muista wikeistä (transwiki import)",
-       "import-interwiki-text": "Valitse wiki ja sivun nimi tuontia varten.\nVersioiden päivämäärät ja muokkaajien nimet säilyvät ennallaan. \nKaikki wikienväliset tuontitapahtumat kirjataan [[Special:Log/import|tuontilokiin]].",
+       "importinterwiki": "Tuo sivuja toisesta wikistä",
+       "import-interwiki-text": "Valitse wiki ja sivun nimi tuontia varten.\nVersioiden päivämäärät ja muokkaajien nimet säilyvät ennallaan. \nKaikki tuonnit muista wikeistä kirjataan [[Special:Log/import|tuontilokiin]].",
        "import-interwiki-sourcewiki": "Lähdewiki:",
        "import-interwiki-sourcepage": "Lähdesivu:",
        "import-interwiki-history": "Kopioi sivun koko historia ja kaikki versiot",
        "importcantopen": "Tuontitiedoston avaus epäonnistui",
        "importbadinterwiki": "Kelpaamaton wikienvälinen linkki",
        "importsuccess": "Tuonti onnistui!",
-       "importnosources": "Wikienvälisiä tuontilähteitä ei ole määritelty ja suorat historiatallennukset on poistettu käytöstä.",
+       "importnosources": "Ei ole määritetty yhtään sellaista wikiä, josta voisi tuoda aineistoa. Tämän lisäksi sivuhistorioiden suorat tuontitallennukset on poistettu käytöstä.",
        "importnofile": "Mitään tuotavaa tiedostoa ei lähetetty.",
        "importuploaderrorsize": "Tuontitiedoston tallennus epäonnistui. Tiedosto on suurempi kuin sallittu yläraja.",
        "importuploaderrorpartial": "Tuontitiedoston tallennus epäonnistui. Tiedostosta oli lähetetty vain osa.",
        "import-rootpage-nosubpage": "Annetun perussivun nimiavaruus \"$1\" ei salli alasivuja.",
        "importlogpage": "Tuontiloki",
        "importlogpagetext": "Loki ylläpitäjien toisista wikeistä tuomista sivuista, joissa on muokkaushistoriaa.",
-       "import-logentry-upload": "toi sivun [[$1]] tiedostomuodossa",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|versio|versiota}} tuotiin",
-       "import-logentry-interwiki": "toi toisesta wikistä sivun $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versio|versiota}} tuotiin wikistä $2",
        "javascripttest": "JavaScriptin testaus",
        "javascripttest-pagetext-noframework": "Tämä sivu on varattu JavaScript-testien suorittamiseen.",
        "tags-create-warnings-above": "{{PLURAL:$2|Seuraava varoitus|Seuraavat varoitukset}} ilmenivät, kun yritettiin luoda merkkausta \"$1\":",
        "tags-create-warnings-below": "Haluatko jatkaa merkkauksen luomista?",
        "tags-delete-title": "Hävitä merkkaus pysyvästi",
-       "tags-delete-explanation-initial": "Olet juuri nyt poistamassa merkkausta \"$1\" tietokannasta.",
+       "tags-delete-explanation-initial": "Olet parhaillaan poistamassa (eli tuhoamassa pysyvästi) merkkauksen \"$1\" tietokannasta.",
        "tags-delete-explanation-in-use": "Se poistuu {{PLURAL:$2|$2 sivun versiosta tai lokimerkinnästä|kaikista $2 sivuversiosta tai lokimerkinnöistä}}, joissa se tällä hetkellä on käytössä.",
-       "tags-delete-explanation-warning": "Tämä toimenpide on <strong>peruuttamaton</strong> and <strong>poistettua merkkausta ei voida palauttaa takaisin</strong>. Siihen eivät pysty edes tietokannan ylläpito. Sinun pitää olla täysin varma, että haluat poistettavaksi juuri tämän merkkauksen.",
+       "tags-delete-explanation-warning": "Tämä toimenpide on <strong>peruuttamaton</strong> ja <strong>poistettua merkkausta ei voi palauttaa takaisin</strong>. Siihen ei pysty edes tietokannan ylläpitohenkilöstö. Sinun pitää olla täysin varma, että haluat poistettavaksi juuri tämän merkkauksen.",
        "tags-delete-explanation-active": "<stron>Merkkaus \"$1\" on edelleen käytössä ja sitä käytetään myös jatkossa.</strong>. Jos haluat merkkauksen pois käytöstä, mene sinne missä merkkaus on asetettu ja ota se pois siellä.",
        "tags-delete-reason": "Syy:",
        "tags-delete-submit": "Tuhoa tämä merkkaus peruuttamattomasti ja pysyvästi",
        "tags-activate-not-found": "Merkkausta \"$1\" ei ole olemassa.",
        "tags-activate-submit": "Aktivoi",
        "tags-deactivate-title": "Ota merkkaus pois käytöstä",
-       "tags-deactivate-question": "Olet poistamassa käytöstä merkkauksen \"$1\".",
+       "tags-deactivate-question": "Olet parhaillaan poistamassa käytöstä (eli deaktivoimassa) merkkausta \"$1\".",
        "tags-deactivate-reason": "Syy:",
        "tags-deactivate-not-allowed": "Ei ole mahdollista poistaa käytöstä merkkausta \"$1\".",
        "tags-deactivate-submit": "Poista käytöstä",
        "revdelete-uname-unhid": "käyttäjätunnus palautettu näkyviin",
        "revdelete-restricted": "asetti rajoitukset ylläpitäjille",
        "revdelete-unrestricted": "poisti rajoitukset ylläpitäjiltä",
+       "logentry-block-block": "$1 {{GENDER:$2|esti}} käyttäjän {{GENDER:$4|$3}}. Eston kesto on $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|poisti muokkauseston}} käyttäjältä {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|muutti}} eston asetuksia kohteessa {{GENDER:$4|$3}}. Eston kesto on $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|esti}} käyttäjän {{GENDER:$4|$3}}. Eston kesto on $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|muutti}} eston asetuksia kohteessa {{GENDER:$4|$3}}. Eston kesto on $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|toi}} kohteen $3 tiedostotallennuksella",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|toi}} kohteen $3 muusta wikistä",
        "logentry-merge-merge": "$1 {{GENDER:$2|yhdisti}} sivun $3 sivuun $4 (versiot $5 saakka)",
        "logentry-move-move": "$1 {{GENDER:$2|siirsi}} sivun $3 uudelle nimelle $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|siirsi}} sivun $3 uudelle nimelle $4 luomatta ohjausta",
        "log-name-managetags": "Merkkausten hallinnan loki",
        "log-description-managetags": "Tällä sivulla on luettelo tehtävistä, jotka koskevat [[Special:Tags|merkkauksia]]. Lokissa ovat vain ne toimenpiteet, jotka ylläpitäjä on suorittanut käsin. Merkkauksia voi syntyä ja poistua myös wikin ohjelmiston kautta eivätkä ne näy tässä lokissa.",
        "logentry-managetags-create": "$1 {{GENDER:$2|on luonut}} merkkauksen \"$4\"",
-       "logentry-managetags-delete": "$1 {{GENDER:$2|tuhosi}} merkkauksen \"$4\" (poistettu $5 {{PLURAL:$5|sivun versiosta tai lokimerkinnästä|sivun versiosta tai lokimerkinnästä}})",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|tuhosi}} merkkauksen \"$4\" (poistettu $5 {{PLURAL:$5|sivuversiosta tai lokimerkinnästä}})",
        "logentry-managetags-activate": "$1 {{GENDER:$2|aktivoi}} merkkauksen \"$4\" käyttäjien ja bottien käytettäväksi",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|otti pois käytöstä}} merkkauksen \"$4\" käyttäjiltä ja boteilta",
        "rightsnone": "(ei oikeuksia)",
        "revdelete-summary": "yhteenvedon",
+       "feedback-adding": "Lisätään palautetta sivulle...",
+       "feedback-back": "Takaisin",
+       "feedback-bugcheck": "Hyvä! Varmista vielä, että ohjelmointivirhettä ei löydy [$1 tunnettujen virheiden luettelosta].",
+       "feedback-bugnew": "Olen varmistanut. Ilmoitan uuden ohjelmointivirheen",
        "feedback-bugornote": "Jos voit kuvailla teknisen ongelman tarkasti – [$1 ilmoita ohjelmointivirheestä].\nMuussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi lisätään sivulle [$3 $2], ja siinä on mukana käyttäjätunnuksesi.",
-       "feedback-subject": "Otsikko",
-       "feedback-message": "Viesti",
        "feedback-cancel": "Peruuta",
-       "feedback-submit": "Lähetä palaute",
-       "feedback-adding": "Lisätään palautetta sivulle...",
+       "feedback-close": "Valmis",
+       "feedback-external-bug-report-button": "Lähetä tekninen tehtävä",
+       "feedback-dialog-title": "Lähetä palautetta",
+       "feedback-dialog-intro": "Voit käyttää tätä helppoa lomaketta palautteesi lähettämiseen. Kommenttisi lisätään sivulle \"$1\" käyttäjätunnuksesi kera.",
+       "feedback-error-title": "Virhe",
        "feedback-error1": "Virhe: Ohjelmointirajapinnan vastausta ei tunnistettu",
        "feedback-error2": "Virhe: Muokkaus epäonnistui",
        "feedback-error3": "Virhe: Ohjelmointirajapinta ei vastaa",
+       "feedback-message": "Viesti",
+       "feedback-subject": "Otsikko",
+       "feedback-submit": "Lähetä",
+       "feedback-terms": "Ymmärrän, että minua koskeva \"user agent\" -tieto sisältää tiedon siitä, mitä yksittäistä selainta ja käyttöjärjestelmää minä käytän ja että nämä tiedot tulevat näkymään julkisesti kaikille palautteeni yhteydessä.",
+       "feedback-termsofuse": "Sitoudun lähettämään palautteen käyttöehtojen määräysten mukaisesti.",
        "feedback-thanks": "Kiitos. Palautteesi on jätetty sivulle [$2 $1].",
-       "feedback-close": "Valmis",
-       "feedback-bugcheck": "Hyvä! Varmista vielä, että ohjelmointivirhettä ei löydy [$1 tunnettujen virheiden luettelosta].",
-       "feedback-bugnew": "Olen varmistanut. Ilmoitan uuden ohjelmointivirheen",
+       "feedback-thanks-title": "Kiitos!",
+       "feedback-useragent": "User agent:",
        "searchsuggest-search": "Hae",
        "searchsuggest-containing": "sisältää...",
        "api-error-badaccess-groups": "Sinulla ei ole oikeutta tallentaa tiedostoja tähän wikiin.",
        "limitreport-templateargumentsize": "Mallineen argumenttien koko<br />(template argument size)",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|tavu|tavua}}",
        "limitreport-expansiondepth": "Highest expansion depth",
-       "limitreport-expensivefunctioncount": "Vaativien parserfunktioiden määrä",
+       "limitreport-expensivefunctioncount": "Vaativien jäsenninfunktioiden lukumäärä",
        "expandtemplates": "Laajenna mallineet",
        "expand_templates_intro": "Tämä toimintosivu ottaa syötteeksi tekstiä ja laajentaa kaikki siinä olevat mallineet rekursiivisesti.\nSe myös laajentaa tuetut parserifunktiot kuten\n<code><nowiki>{{</nowiki>#language:...}}</code> ja -muuttujat kuten\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nKäytännössä se laajentaa melkein kaiken, joka on kaksoisaaltosulkeiden sisällä.",
        "expand_templates_title": "Otsikko (esimerkiksi muuttujaa {{FULLPAGENAME}} varten)",
        "json-error-utf8": "Huonosti muotoiltuja UTF-8 merkkejä; mahdollisesti koodattu virheellisesti",
        "json-error-recursion": "Joku arvossa (value) oleva rekursiivinen viite pitää vielä muuttaa koodiksi",
        "json-error-inf-or-nan": "Joku NAN- tai INF-arvo arvossa (value) pitää muuttaa koodiksi",
-       "json-error-unsupported-type": "On annettu sellainen tyypin arvo, jota ei voi muuttaa koodiksi"
+       "json-error-unsupported-type": "On annettu sellainen tyypin arvo, jota ei voi muuttaa koodiksi",
+       "headline-anchor-title": "Linkitä tähän osioon",
+       "special-characters-group-latin": "Latina",
+       "special-characters-group-latinextended": "Laajennettu latina",
+       "special-characters-group-ipa": "Kansainvälinen foneettinen kirjaimisto (IPA)",
+       "special-characters-group-symbols": "Symbolit",
+       "special-characters-group-greek": "Kreikka",
+       "special-characters-group-cyrillic": "Kyrillinen",
+       "special-characters-group-arabic": "Arabia",
+       "special-characters-group-arabicextended": "Laajennettu arabia",
+       "special-characters-group-persian": "Persia",
+       "special-characters-group-hebrew": "Heprea",
+       "special-characters-group-bangla": "Bengali",
+       "special-characters-group-tamil": "Tamili",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhali",
+       "special-characters-group-gujarati": "Gudžarati",
+       "special-characters-group-devanagari": "Devanāgarī",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "ajatusviiva",
+       "special-characters-title-emdash": "pitkä ajatusviiva",
+       "special-characters-title-minus": "miinusmerkki"
 }
index 7d02461..ce80478 100644 (file)
        "disclaimers": "Fyrivarni",
        "disclaimerpage": "Project:Generelt fyrivarni",
        "edithelp": "Rættingarhjálp",
+       "helppage-top-gethelp": "Hjálp",
        "mainpage": "Forsíða",
        "mainpage-description": "Forsíða",
        "policy-url": "Project:Handfaring av persónligum upplýsingum",
        "hidetoc": "fjal",
        "collapsible-collapse": "Samanbrot",
        "collapsible-expand": "Víðka",
+       "confirmable-confirm": "Ert {{GENDER:$1|tú}} sikkur?",
        "confirmable-yes": "Ja",
        "confirmable-no": "Nei",
        "thisisdeleted": "Sí ella endurstovna $1?",
        "notextmatches": "Ongin síðutekstur samsvarar",
        "prevn": "undanfarnu {{PLURAL:$1|$1}}",
        "nextn": "næstu {{PLURAL:$1|$1}}",
+       "next-page": "næsta síða",
        "prevn-title": "Gomul $1 {{PLURAL:$1|úrslit|úrslit}}",
        "nextn-title": "Næstu $1 {{PLURAL:$1|úrslit|úrslit}}",
        "shown-title": "Vís $1 {{PLURAL:$1|úrslit|úrslit}} á hvørjari síðu",
        "search-result-category-size": "{{PLURAL:$1|1 limur|$1 limir}} ({{PLURAL:$2|1 undirbólkur|$2 undirbólkar}}, {{PLURAL:$3|1 fíla|$3 fílur}})",
        "search-redirect": "(umstilling $1)",
        "search-section": "(sektión $1)",
+       "search-category": "(bólkur $1)",
        "search-suggest": "Meinti tú: $1",
        "search-interwiki-caption": "Líknandi verkætlanir",
        "search-interwiki-default": "Úrslit frá $1:",
        "suppress": "Yvirlit",
        "booksources": "Bókakeldur",
        "booksources-search-legend": "Leita eftir bókum",
+       "booksources-search": "Leita",
        "specialloguserlabel": "Gjørt hevur:",
        "speciallogtitlelabel": "Mál (heiti ella brúkari):",
        "log": "Gerðabøkur",
        "import-options-wrong": "{{PLURAL:$2|Ikki loyvd innstilling|Ikki loyvdar innstillingar}}: <nowiki>$1</nowiki>",
        "importlogpage": "Innflutningsloggur.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|versjón|versjónir}}",
-       "import-logentry-interwiki": "$1 varð flutt millum wikiir",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versjón|versjónir}} frá $2",
        "javascripttest": "Royndarkoyring av JavaScript",
        "javascripttest-pagetext-noframework": "Henda síðan er løgd av til at koyra JavaScript royndir.",
        "spambot_username": "MediaWiki spamm-reinsan",
        "spam_blanking": "Allar versjónir innihildu leinkjur til $1, tømir síðuna",
        "spam_deleting": "Allar versjónir innihalda leinkjur til $1, slettar",
+       "simpleantispam-label": "Anti-spam eftirlit.\nTú mást <strong>IKKI</strong> útfylla her!",
        "pageinfo-title": "Kunning um \"$1\"",
        "pageinfo-not-current": "Tað er tíverri ómøguligt at veita hesa kunning viðvíkjandi gomlum útgávum.",
        "pageinfo-header-basic": "Grundleggjandi kunning",
        "show-big-image": "Upprunafíla",
        "show-big-image-preview": "Stødd av hesi forskoðan: $1.",
        "show-big-image-other": "{{PLURAL:$2|Onnur upploysn|Aðrar upploysnir}}: $1.",
+       "show-big-image-size": "$1 × $2 pixels",
        "file-info-gif-frames": "$1 {{PLURAL:$1|ramma|rammur}}",
        "file-info-png-repeat": "spælt $1 {{PLURAL:$1|ferð|ferðir}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|ramma|rammur}}",
        "watchlisttools-view": "Vís viðkomandi broytingar",
        "watchlisttools-edit": "Vís og rætta eftirlit",
        "watchlisttools-raw": "Rætta rátt eftirlit",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|kjak]])",
        "duplicate-defaultsort": "'''Ávaring:''' Standard sorteringslykilin \"$2\" yvirtekur fyrrverandi standard sorteringslykilin \"$1\".",
        "version": "Útgáva",
        "version-skins": "Útsjóndir",
        "version-other": "Annað",
        "version-hooks": "Krókur",
        "version-hook-name": "Krókurnavn",
-       "version-version": "(Versjón $1)",
+       "version-version": "($1)",
        "version-license": "MediaWiki Lisensur",
        "version-poweredby-credits": "Henda wiki verður rikin av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "onnur",
        "compare-rev1": "Versjón 1",
        "compare-rev2": "Versjón 2",
        "compare-submit": "Samanber",
+       "logentry-newusers-create": "Brúkarakonta $1 varð {{GENDER:$2|upprættað}}",
        "rightsnone": "(ongin)",
        "revdelete-summary": "yvirlit yvir broytingar",
        "searchsuggest-search": "Leita",
index f0f0fbe..8307d73 100644 (file)
                        "Macofe",
                        "Sam",
                        "JackPotte",
-                       "Weft"
+                       "Weft",
+                       "Raulel",
+                       "Nicolapps",
+                       "Yzelf",
+                       "0x010C",
+                       "Thibaut120094",
+                       "NemesisIII"
                ]
        },
        "tog-underline": "Souligner les liens :",
        "tog-extendwatchlist": "Étendre la liste de suivi pour afficher toutes les modifications et pas uniquement les plus récentes",
        "tog-usenewrc": "Grouper les changements par page dans les modifications récentes et la liste de suivi",
        "tog-numberheadings": "Numéroter automatiquement les titres de section",
-       "tog-showtoolbar": "Afficher la barre d'outils de modification (nécessite JavaScript)",
-       "tog-editondblclick": "Modifier des pages sur double-clic (nécessite JavaScript)",
-       "tog-editsectiononrightclick": "Activer la modification de sections par clic droit sur les titres (nécessite JavaScript)",
+       "tog-showtoolbar": "Afficher la barre d'outils de modification",
+       "tog-editondblclick": "Modifier des pages sur double-clic",
+       "tog-editsectiononrightclick": "Activer la modification de sections par clic droit sur les titres",
        "tog-watchcreations": "Ajouter les pages que je crée et les fichiers que j'importe à ma liste de suivi",
        "tog-watchdefault": "Ajouter les pages et les fichiers que je modifie à ma liste de suivi",
        "tog-watchmoves": "Ajouter les pages et les fichiers que je renomme à ma liste de suivi",
        "unprotectthispage": "Changer la protection de cette page",
        "newpage": "Nouvelle page",
        "talkpage": "Discussion sur cette page",
-       "talkpagelinktext": "discuter",
+       "talkpagelinktext": "discussion",
        "specialpage": "Page spéciale",
        "personaltools": "Outils personnels",
        "articlepage": "Voir la page de contenu",
        "disclaimers": "Avertissements",
        "disclaimerpage": "Project:Avertissements généraux",
        "edithelp": "Aide",
+       "helppage-top-gethelp": "Aide",
        "mainpage": "Accueil",
        "mainpage-description": "Accueil",
        "policy-url": "Project:Règles",
        "hidetoc": "masquer",
        "collapsible-collapse": "masquer",
        "collapsible-expand": "afficher",
-       "confirmable-confirm": "Êtes-vous sûr{{GENDER:$1||e|(e)}} ?",
+       "confirmable-confirm": "Êtes-vous sûr{{GENDER:$1||e}} ?",
        "confirmable-yes": "Oui",
        "confirmable-no": "Non",
        "thisisdeleted": "Désirez-vous afficher ou restaurer $1 ?",
        "readonly_lag": "La base de données a été automatiquement verrouillée pendant que les serveurs secondaires rattrapent leur retard sur le serveur principal.",
        "internalerror": "Erreur interne",
        "internalerror_info": "Erreur interne : $1",
+       "internalerror-fatal-exception": "Erreur fatale de type « $1 »",
        "filecopyerror": "Impossible de copier le fichier « $1 » vers « $2 ».",
        "filerenameerror": "Impossible de renommer le fichier « $1 » en « $2 ».",
        "filedeleteerror": "Impossible de supprimer le fichier « $1 ».",
        "virus-badscanner": "Mauvaise configuration : scanneur de virus inconnu : ''$1''",
        "virus-scanfailed": "Échec de la recherche (code $1)",
        "virus-unknownscanner": "antivirus inconnu :",
-       "logouttext": "'''Vous êtes à présent déconnecté{{GENDER:||e|(e)}}.'''\n\nNotez que certaines pages peuvent être encore affichées comme si vous étiez toujours connecté, jusqu’à ce que vous effaciez le cache de votre navigateur.",
+       "logouttext": "'''Vous êtes à présent déconnecté{{GENDER:||e}}.'''\n\nNotez que certaines pages peuvent être encore affichées comme si vous étiez toujours connecté, jusqu’à ce que vous effaciez le cache de votre navigateur.",
        "welcomeuser": "Bienvenue, $1&nbsp;!",
        "welcomecreation-msg": "Votre compte a été créé.\nN'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAME}}]].",
        "yourname": "Nom d'utilisateur :",
        "userlogin-signwithsecure": "Utiliser une connexion sécurisée",
        "yourdomainname": "Votre domaine :",
        "password-change-forbidden": "Vous ne pouvez pas modifier les mots de passe sur ce wiki.",
-       "externaldberror": "Une erreur s'est produite avec la base de données d'authentification externe, ou bien vous n'êtes pas autorisé{{GENDER:||e|(e)}} à mettre à jour votre compte externe.",
+       "externaldberror": "Une erreur s'est produite avec la base de données d'authentification externe, ou bien vous ne pouvez pas mettre à jour votre compte externe.",
        "login": "Connexion",
        "nav-login-createaccount": "Créer un compte ou se connecter",
        "userlogin": "Créer un compte ou se connecter",
        "loginerror": "Erreur de connexion",
        "createacct-error": "Erreur lors de la création du compte",
        "createaccounterror": "Impossible de créer le compte : $1",
-       "nocookiesnew": "Le compte utilisateur a été créé, mais vous n'êtes pas connecté{{GENDER:||e|(e)}}. {{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.",
+       "nocookiesnew": "Le compte utilisateur a été créé, mais vous n'êtes pas connecté{{GENDER:||e}}. {{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.",
        "nocookieslogin": "{{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter.",
        "nocookiesfornew": "Le compte utilisateur n'a pas été créé, car nous n'avons pas pu identifier son origine.\nVérifiez que vous avez activé les cookies, rechargez la page et réessayez.",
        "noname": "Vous n'avez pas saisi un nom d'utilisateur valide.",
        "loginsuccesstitle": "Connexion réussie",
-       "loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».",
+       "loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e}} à {{SITENAME}} en tant que « $1 ».",
        "nosuchuser": "L'utilisateur « $1 » n'existe pas.\nLes noms d'utilisateurs sont sensibles à la casse.\nVérifiez l'orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].",
        "nosuchusershort": "Il n'y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l'orthographe.",
        "nouserspecified": "Vous devez saisir un nom d'utilisateur.",
        "wrongpassword": "Le mot de passe est incorrect. Veuillez essayer à nouveau.",
        "wrongpasswordempty": "Vous n'avez pas entré de mot de passe. Veuillez essayer à nouveau.",
        "passwordtooshort": "Votre mot de passe doit contenir au moins $1 caractère{{PLURAL:$1||s}}.",
+       "passwordtoolong": "Les mots de passe ne peuvent pas dépasser {{PLURAL:$1|1 caractère|$1 caractères}}.",
        "password-name-match": "Votre mot de passe doit être différent de votre nom d'utilisateur.",
        "password-login-forbidden": "L'utilisation de ce nom d'utilisateur et de ce mot de passe a été interdite.",
        "mailmypassword": "Réinitialiser le mot de passe",
        "resetpass-submit-cancel": "Annuler",
        "resetpass-wrong-oldpass": "Mot de passe actuel ou temporaire invalide.\nVous avez peut-être déjà changé votre mot de passe ou demandé un nouveau mot de passe temporaire.",
        "resetpass-recycled": "Veuillez réinitialiser votre mot de passe à quelque chose d’autre que l’actuel.",
-       "resetpass-temp-emailed": "Vous êtes connecté{{GENDER:||e|(e)}} avec un code temporaire fourni par courriel.\nPour terminer la connexion, vous devez fournir un nouveau mot de passe ici :",
+       "resetpass-temp-emailed": "Vous êtes connecté{{GENDER:||e}} avec un code temporaire fourni par courriel.\nPour terminer la connexion, vous devez fournir un nouveau mot de passe ici :",
        "resetpass-temp-password": "Mot de passe temporaire :",
        "resetpass-abort-generic": "La modification du mot de passe a été annulée par une extension.",
        "resetpass-expired": "Votre mot de passe a expiré. Veuillez en fournir un nouveau pour vous connecter.",
        "passwordreset-capture-help": "Si vous cochez cette case, le courriel (avec le mot de passe temporaire) vous sera affiché en même temps qu'il sera envoyé à l'utilisateur.",
        "passwordreset-email": "Adresse de courriel :",
        "passwordreset-emailtitle": "Détails du compte sur {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu{{GENDER:||e|(e)}} de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
-       "passwordreset-emailtext-user": "L'utilisateur $1 sur {{SITENAME}} a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu{{GENDER:||e|(e)}} de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
+       "passwordreset-emailtext-ip": "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
+       "passwordreset-emailtext-user": "L'utilisateur $1 sur {{SITENAME}} a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
        "passwordreset-emailelement": "Nom d'utilisateur : $1\nMot de passe temporaire : $2",
        "passwordreset-emailsent": "Un courriel de réinitialisation de mot de passe a été envoyé.",
        "passwordreset-emailsent-capture": "Un courriel de réinitialisation de mot de passe a été envoyé, qui est affiché ci-dessous.",
        "showdiff": "Voir les modifications",
        "blankarticle": "<strong>Attention :</strong> La page que vous créez est vide.\nSi vous cliquez de nouveau sur « {{int:savearticle}} », la page sera créée sans aucun contenu.",
        "anoneditwarning": "<strong>Attention :</strong> Vous n’êtes pas connecté. Votre adresse IP sera visible de tout le monde si vous faites des modifications. Si vous <strong>[$1 vous connectez]</strong> ou <strong>[$2 créez un compte]</strong>, vos modifications seront attribuées à votre nom d’utilisateur, entre autres avantages.",
-       "anonpreviewwarning": "''Vous n’êtes pas identifié(e). Sauvegarder enregistrera votre adresse IP dans l’historique des modifications de la page.''",
+       "anonpreviewwarning": "''Vous n’êtes pas identifié{{GENDER:||e}}. Sauvegarder enregistrera votre adresse IP dans l’historique des modifications de la page.''",
        "missingsummary": "'''Rappel :''' vous n'avez pas encore fourni le résumé de votre modification.\nSi vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publication sera faite sans nouvel avertissement.",
        "selfredirect": "<strong>Attention :</strong> Vous êtes en train de rediriger la page vers elle-même.\nVous pouvez avoir spécifié la mauvaise cible pour la redirection, ou vous modifiez peut-être la mauvaise page.\nSi vous cliquez de nouveau sur « {{int:savearticle}} », la redirection sera créée tout de même.",
        "missingcommenttext": "Veuillez entrer un commentaire ci-dessous.",
        "missingcommentheader": "'''Rappel :''' vous n'avez pas fourni de sujet ou de titre à ce commentaire.\nSi vous cliquez de nouveau sur « {{int:Savearticle}} », votre modification sera enregistrée sans titre.",
        "summary-preview": "Aperçu du résumé :",
        "subject-preview": "Prévisualisation du sujet/titre :",
+       "previewerrortext": "Une erreur s’est produite lors de la tentative de prévisualisation de vos modifications.",
        "blockedtitle": "L’utilisateur est bloqué.",
        "blockedtext": "'''Votre compte utilisateur ou votre adresse IP a été bloqué.'''\n\nLe blocage a été effectué par $1.\nLa raison invoquée est la suivante : ''$2''.\n\n* Début du blocage : $8\n* Expiration du blocage : $6\n* Compte bloqué : $7.\n\nVous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour en discuter.\nVous ne pouvez utiliser la fonction « {{MediaWiki:emailpage}} » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité n’a pas été bloquée.\nVotre adresse IP actuelle est $3 et votre identifiant de blocage est $5.\nVeuillez préciser ces indications dans toutes les requêtes que vous ferez.",
        "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.",
        "accmailtitle": "Mot de passe envoyé.",
        "accmailtext": "Un mot de passe généré aléatoirement pour [[User talk:$1|$1]] a été envoyé à $2.\nIl peut être modifié sur la page ''[[Special:ChangePassword|Changement de mot de passe]]'' après connexion.",
        "newarticle": "(Nouveau)",
-       "newarticletext": "Vous avez suivi un lien vers une page qui n’existe pas encore. \nAfin de créer cette page, entrez votre texte dans la boîte ci-après (vous pouvez consulter [$1 la page d’aide] pour plus d’informations). \nSi vous êtes arrivé{{GENDER:||e|(e)}} ici par erreur, cliquez sur le bouton '''retour''' de votre navigateur.",
+       "newarticletext": "Vous avez suivi un lien vers une page qui n’existe pas encore. \nAfin de créer cette page, entrez votre texte dans la boîte ci-après (vous pouvez consulter [$1 la page d’aide] pour plus d’informations). \nSi vous êtes arrivé{{GENDER:||e}} ici par erreur, cliquez sur le bouton '''retour''' de votre navigateur.",
        "anontalkpagetext": "---- ''Vous êtes sur la page de discussion d'un utilisateur anonyme qui n'a pas encore créé de compte ou qui n'en utilise pas. Pour cette raison, nous devons utiliser son adresse IP pour l'identifier. Une adresse IP peut être partagée par plusieurs utilisateurs. Si vous êtes un{{GENDER:||e|}} utilisat{{GENDER:|eur|rice|eur}} anonyme et si vous constatez que des commentaires qui ne vous concernent pas vous ont été adressés, vous pouvez [[Special:UserLogin/signup|créer un compte]] ou [[Special:UserLogin|vous connecter]] afin d'éviter toute confusion future avec d'autres contributeurs anonymes.''",
        "noarticletext": "Il n’y a pour l’instant aucun texte sur cette page.\nVous pouvez [[Special:Search/{{PAGENAME}}|lancer une recherche sur ce titre]] dans les autres pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechercher dans les opérations liées]\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} créer cette page]</span>.",
        "noarticletext-nopermission": "Il n'y a pour l'instant aucun texte sur cette page.\nVous pouvez [[Special:Search/{{PAGENAME}}|faire une recherche sur ce titre]] dans les autres pages,\nou <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechercher dans les journaux associés]</span>.",
        "sectioneditnotsupported-text": "La modification d'une section n'est pas prise en charge pour cette page.",
        "permissionserrors": "Erreur de permissions",
        "permissionserrorstext": "Vous n'avez pas la permission d'effectuer l'opération demandée pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
-       "permissionserrorstext-withaction": "Vous n'êtes pas autorisé{{GENDER:||e|(e)}} à $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
+       "permissionserrorstext-withaction": "Vous ne pouvez pas $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
        "recreate-moveddeleted-warn": "'''Attention : vous êtes en train de recréer une page qui a été précédemment supprimée.'''\n\nAssurez-vous qu'il est pertinent de poursuivre les modifications sur cette page. Le journal des suppressions et des déplacements est affiché ci-dessous :",
        "moveddeleted-notice": "Cette page a été supprimée. Le journal des suppressions et des déplacements est affiché ci-dessous pour référence.",
        "log-fulllog": "Voir le journal complet",
        "content-failed-to-parse": "Échec de l’analyse syntaxique du contenu de $2 pour le modèle $1: $3",
        "invalid-content-data": "Données du contenu non valides",
        "content-not-allowed-here": "Le contenu « $1 » n’est pas autorisé sur la page [[$2]]",
-       "editwarning-warning": "Quitter cette page vous fera perdre toutes les modifications que vous avez faites.\nSi vous êtes connecté{{GENDER:||e|(e)}}, vous pouvez désactiver cet avertissement dans la section « {{int:prefs-editing}} » de vos préférences.",
+       "editwarning-warning": "Quitter cette page vous fera perdre toutes les modifications que vous avez faites.\nSi vous êtes connecté{{GENDER:||e}}, vous pouvez désactiver cet avertissement dans la section « {{int:prefs-editing}} » de vos préférences.",
        "editpage-notsupportedcontentformat-title": "Format de contenu non pris en charge",
        "editpage-notsupportedcontentformat-text": "Le format de contenu $1 n'est pas pris en charge par le modèle de contenu $2 .",
        "content-model-wikitext": "wikitexte",
        "notextmatches": "Aucun texte de page ne correspond à la recherche.",
        "prevn": "{{PLURAL:$1|précédente|$1 précédentes}}",
        "nextn": "{{PLURAL:$1|suivante|$1 suivantes}}",
+       "prev-page": "page précédente",
+       "next-page": "page suivante",
        "prevn-title": "$1 {{PLURAL:$1|résultat précédent|résultats précédents}}",
        "nextn-title": "$1 {{PLURAL:$1|résultat suivant|résultats suivants}}",
        "shown-title": "Afficher $1 résultat{{PLURAL:$1||s}} par page",
        "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-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]].",
        "listusersfrom": "Afficher les utilisateurs à partir de :",
        "listusers-submit": "Lister",
        "listusers-noresult": "Aucun utilisateur trouvé. Vérifiez aussi les variantes de casse.",
-       "listusers-blocked": "(bloqué{{GENDER:$1||e|(e)}})",
+       "listusers-blocked": "(bloqué{{GENDER:$1||e}})",
        "activeusers": "Liste des utilisateurs actifs",
        "activeusers-intro": "Ceci est une liste des utilisateurs qui ont exercé une quelconque activité au cours {{PLURAL:$1|de la dernière journée|des $1 derniers jours}}.",
        "activeusers-count": "$1 {{PLURAL:$1|action|actions}} lors {{PLURAL:$3|du dernier jour|des $3 derniers jours}}",
        "emailccsubject": "Copie de votre message à $1 : $2",
        "emailsent": "Courriel envoyé",
        "emailsenttext": "Votre message a été envoyé par courriel.",
-       "emailuserfooter": "Ce courriel a été envoyé par « $1 » à « $2 » par la fonction « Envoyer un courriel à l'utilisateur » de {{SITENAME}}.",
+       "emailuserfooter": "Ce courriel a été envoyé par « $1 » à « $2 » par la fonction « {{int:emailpage}} » de {{SITENAME}}.",
        "usermessage-summary": "A laissé un message système.",
        "usermessage-editor": "Messager du système",
        "watchlist": "Liste de suivi",
        "protect_expiry_old": "La date d'expiration est déjà passée.",
        "protect-unchain-permissions": "Déverrouiller davantage d’options de protection",
        "protect-text": "Vous pouvez consulter et modifier le niveau de protection de la page '''$1'''.",
-       "protect-locked-blocked": "Vous ne pouvez pas modifier les niveaux de protection tant que vous êtes bloqué{{GENDER:||e|(e)}}.\nVoici les réglages actuels de la page '''$1''' :",
+       "protect-locked-blocked": "Vous ne pouvez pas modifier les niveaux de protection durant votre blocage.\nVoici les réglages actuels de la page '''$1''' :",
        "protect-locked-dblock": "Le niveau de protection ne peut pas être modifié car la base de données est verrouillée.\nVoici les réglages actuels de la page '''$1''' :",
        "protect-locked-access": "Vous n'avez pas les droits nécessaires pour modifier les niveaux de protection de pages.\nVoici les réglages actuels de la page '''$1''' :",
        "protect-cascadeon": "Cette page est protégée car incluse dans {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l'option « protection en cascade » activée. Vous pouvez changer le niveau de protection de cette page sans que cela n'affecte la protection en cascade.",
        "undelete-error": "Page d’erreur d’annulation",
        "undelete-error-short": "Erreur lors de la restauration du fichier : $1",
        "undelete-error-long": "Des erreurs ont été rencontrées lors de la restauration du fichier :\n\n$1",
-       "undelete-show-file-confirm": "Êtes-vous sûr{{GENDER:||e|(e)}} de vouloir visionner une version supprimée du fichier « <nowiki>$1</nowiki> » datant du $2 à $3 ?",
+       "undelete-show-file-confirm": "Êtes-vous sûr{{GENDER:||e}} de vouloir consulter une version supprimée du fichier « <nowiki>$1</nowiki> » datant du $2 à $3 ?",
        "undelete-show-file-submit": "Oui",
        "undelete-revision-row": "$1 $2 ($3) $4 — $5 $6 $7 $8 $9",
        "namespace": "Espace de noms :",
        "whatlinkshere-hideredirs": "$1 les redirections",
        "whatlinkshere-hidetrans": "$1 les inclusions",
        "whatlinkshere-hidelinks": "$1 les liens",
-       "whatlinkshere-hideimages": "$1 les fichiers liés",
+       "whatlinkshere-hideimages": "$1 les liens vers le fichier",
        "whatlinkshere-filters": "Filtres",
        "autoblockid": "Blocage automatique #$1",
        "block": "Bloquer l’utilisateur",
        "ipbcreateaccount": "Empêcher la création de compte",
        "ipbemailban": "Empêcher l'utilisateur d'envoyer des courriels",
        "ipbenableautoblock": "Bloquer automatiquement la dernière adresse IP utilisée par l'utilisateur et toutes ses IPs ultérieures qu'il pourrait essayer",
-       "ipbsubmit": "Bloquer cet utilisateur",
+       "ipbsubmit": "Bloquer",
        "ipbother": "Autre durée :",
        "ipboptions": "2 heures:2 hours,1 jour:1 day,3 jours:3 days,1 semaine:1 week,2 semaines:2 weeks,1 mois:1 month,3 mois:3 months,6 mois:6 months,1 an:1 year,indéfiniment:infinite",
        "ipbhidename": "Masquer le nom d'utilisateur des modifications et des listes",
        "ipbwatchuser": "Suivre les pages utilisateur et de discussion de cet utilisateur",
        "ipb-disableusertalk": "Empêcher l'utilisateur de modifier sa page de discussion pendant le blocage",
-       "ipb-change-block": "Bloquer à nouveau cet utilisateur avec ces paramètres",
+       "ipb-change-block": "Modifier les paramètres de blocage",
        "ipb-confirm": "Confirmer le blocage",
        "badipaddress": "Adresse IP incorrecte",
        "blockipsuccesssub": "Blocage réussi",
-       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e|}}.<br />\nConsultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e}}.<br />\nConsultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.",
        "ipb-blockingself": "Vous êtes sur le point de bloquer votre propre compte ! Êtes-vous certain{{GENDER:||e}} de vouloir faire cela ?",
-       "ipb-confirmhideuser": "Vous êtes sur le point de bloquer un utilisateur avec « cacher l'utilisateur » activé. Cela supprime le nom de l'utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr{{GENDER:||e|(e)}} de vouloir le faire ?",
+       "ipb-confirmhideuser": "Vous êtes sur le point de bloquer un utilisateur avec « cacher l'utilisateur » activé. Cela supprime le nom de l'utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr{{GENDER:||e}} de vouloir le faire ?",
        "ipb-confirmaction": "Si vous êtes sûr{{GENDER:||e|(e)}} de vraiment vouloir le faire, veuillez cocher le champ « {{int:ipb-confirm}} » en bas.",
        "ipb-edit-dropdown": "Modifier les motifs de blocage par défaut",
        "ipb-unblock-addr": "Débloquer $1",
        "sorbs_create_account_reason": "Votre adresse IP est listée comme mandataire ouvert dans le DNSBL utilisé par {{SITENAME}}.\nVous ne pouvez pas créer un compte.",
        "xffblockreason": "Une adresse IP dans l'en-tête X-Forwarded-For, soit la vôtre ou celle d'un serveur proxy que vous utilisez, a été bloquée. La raison du blocage initial est : $1",
        "cant-see-hidden-user": "L’utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N’ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
-       "ipbblocked": "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué{{GENDER:||e|}}.",
+       "ipbblocked": "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué{{GENDER:||e}}.",
        "ipbnounblockself": "Vous n'êtes pas autorisé{{GENDER:||e}} à vous débloquer vous-même",
        "lockdb": "Verrouiller la base de données",
        "unlockdb": "Déverrouiller la base de données",
        "movearticle": "Renommer la page :",
        "moveuserpage-warning": "'''Attention :''' Vous êtes sur le point de renommer une page d’utilisateur. Veuillez noter que seule la page sera renommée et que l’utilisateur '''ne''' sera '''pas''' renommé.",
        "movecategorypage-warning": "<strong>Avertissement :</strong> Vous êtes sur le point de renommer une page de catégorie. Veuillez noter que seule la page sera renommée et que toutes les pages dans l'ancienne catégorie ne seront <em>pas</em> transférées dans la nouvelle.",
-       "movenologintext": "Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e|(e)}}]] avec un compte utilisateur enregistré et d'ancienneté suffisante.",
+       "movenologintext": "Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e}}]] avec un compte utilisateur enregistré et d'ancienneté suffisante.",
        "movenotallowed": "Vous n'avez pas la permission de renommer les pages.",
        "movenotallowedfile": "Vous n'avez pas la permission de renommer les fichiers.",
        "cant-move-user-page": "Vous n’avez pas la permission de renommer les pages principales d’utilisateurs.",
        "thumbnail_image-missing": "Le fichier suivant est introuvable : $1",
        "thumbnail_image-failure-limit": "Il y a eu récemment trop de tentatives échouées ($1 ou plus) pour restituer cette vignette. Veuillez réessayer ultérieurement.",
        "import": "Importer des pages",
-       "importinterwiki": "Importation inter-wiki",
-       "import-interwiki-text": "Sélectionnez un wiki et un titre de page à importer.\nLes dates des versions et les noms des contributeurs seront préservés.\nToutes les actions d'importation inter-wiki sont consignées dans l'[[Special:Log/import|historique des importations]].",
+       "importinterwiki": "Importer à partir d'un autre wiki",
+       "import-interwiki-text": "Sélectionnez un wiki et un titre de page à importer.\nLes dates des versions et les noms des contributeurs seront préservés.\nToutes les actions d'importation à partir d'autres wikis sont consignées dans l'[[Special:Log/import|historique des importations]].",
        "import-interwiki-sourcewiki": "Wiki source :",
        "import-interwiki-sourcepage": "Page source :",
        "import-interwiki-history": "Copier toutes les versions de l’historique de cette page",
        "importcantopen": "Impossible d'ouvrir le fichier à importer",
        "importbadinterwiki": "Mauvais lien inter-wiki",
        "importsuccess": "L'importation a réussi !",
-       "importnosources": "Aucune source d'importation inter-wiki n'a été définie et l'import direct d'historiques est désactivé.",
+       "importnosources": "Aucun wiki source n'a été défini et l'import direct d'historiques est désactivé.",
        "importnofile": "Aucun fichier d'importation n'a été envoyé.",
        "importuploaderrorsize": "L'import du fichier a échoué.\nSa taille est supérieure au maximum autorisé pour l'import de fichier.",
        "importuploaderrorpartial": "L'import du fichier échoué.\nSon contenu n'a été transféré que partiellement.",
        "import-nonewrevisions": "Aucune révision importée (toutes étaient déjà présentes, ou ignorées du fait d’erreurs).",
        "xml-error-string": "$1 à la ligne $2, colonne $3 (octet $4) : $5",
        "import-upload": "Import de données XML",
-       "import-token-mismatch": "Perte des données de session. Veuillez réessayez.",
+       "import-token-mismatch": "Perte des données de session. Veuillez réessayer.",
        "import-invalid-interwiki": "Impossible d'importer depuis le wiki spécifié.",
        "import-error-edit": "La page « $1 » n’a pas été importée parce que vous n’êtes pas autorisé à la modifier.",
        "import-error-create": "La page « $1 » n’a pas été importée parce que vous n’êtes pas autorisé à la créer.",
        "import-rootpage-nosubpage": "L'espace de noms « $1 » de la page racine n'autorise pas les sous-pages.",
        "importlogpage": "Journal des importations",
        "importlogpagetext": "Importations administratives de pages d'autres wikis, avec leur historique de modification.",
-       "import-logentry-upload": "a importé [[$1]] par envoi de fichier",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|révision importée|révisions importées}}",
-       "import-logentry-interwiki": "a importé $1 d'un wiki à l'autre",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|révision importée|révisions importées}} depuis $2",
        "javascripttest": "Test de JavaScript",
        "javascripttest-pagetext-noframework": "Cette page est réservée pour l'exécution des tests JavaScript.",
        "tooltip-pt-preferences": "Vos préférences",
        "tooltip-pt-watchlist": "La liste des pages dont vous suivez les modifications",
        "tooltip-pt-mycontris": "La liste de vos contributions",
-       "tooltip-pt-login": "Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier ; ce n'est cependant pas obligatoire.",
+       "tooltip-pt-login": "Il est recommandé de vous identifier ; ce n'est cependant pas obligatoire.",
        "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-p-logo": "Page principale",
        "tooltip-n-mainpage": "Visiter la page d'accueil du site",
        "tooltip-n-mainpage-description": "Aller à l'accueil",
-       "tooltip-n-portal": "À propos du projet",
+       "tooltip-n-portal": "À propos du projet, ce que vous pouvez faire, où trouver des informations",
        "tooltip-n-currentevents": "Trouver les informations de fond sur l'actualité du moment",
        "tooltip-n-recentchanges": "Liste des modifications récentes sur le wiki",
        "tooltip-n-randompage": "Afficher une page au hasard",
        "version-parser-function-hooks": "Fonctions étendues de l'analyseur syntaxique",
        "version-hook-name": "Nom du greffon",
        "version-hook-subscribedby": "Abonnés :",
-       "version-version": "(version $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[pas de nom]",
        "version-license": "Licence MediaWiki",
        "version-ext-license": "Licence",
        "revdelete-uname-unhid": "nom d'utilisateur affiché",
        "revdelete-restricted": "restrictions appliquées aux administrateurs",
        "revdelete-unrestricted": "restrictions retirées pour les administrateurs",
+       "logentry-block-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|a débloqué}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres de blocage pour {{GENDER:$4|$3}} $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres de blocage pour {{GENDER:$4|$3}} $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|a importé}} $3 par téléchargement de fichier",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|a importé}} $3 depuis un autre wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|a fusionné}} $3 en $4 (révisions jusqu’à $5)",
        "logentry-move-move": "$1 {{GENDER:$2|a déplacé}} la page $3 vers $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a déplacé}} la page $3 vers $4 sans laisser de redirection",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|a désactivé}} la balise « $4 » pour l’usage des utilisateurs et des robots",
        "rightsnone": "(aucun)",
        "revdelete-summary": "résumé de modification",
+       "feedback-adding": "Ajout de vos commentaires à la page...",
+       "feedback-back": "Retour",
+       "feedback-bugcheck": "Formidable ! Vérifiez simplement que ce n'est pas un des [$1 bogues déjà connus].",
+       "feedback-bugnew": "J'ai vérifié. Signaler un nouveau bogue",
        "feedback-bugornote": "Si vous êtes prêt à décrire un problème technique en détail, veuillez [$1 signaler un bogue].\nSinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentaire sera ajouté à la page « [$3 $2] », avec votre nom d'utilisateur.",
-       "feedback-subject": "Objet :",
-       "feedback-message": "Message :",
        "feedback-cancel": "Annuler",
-       "feedback-submit": "Envoyer vos commentaires",
-       "feedback-adding": "Ajout de vos commentaires à la page...",
+       "feedback-close": "Fait",
+       "feedback-external-bug-report-button": "Signaler un bug technique",
+       "feedback-dialog-title": "Soumettre un commentaire",
+       "feedback-dialog-intro": "Vous pouvez utiliser le simple formulaire ci-dessous pour faire parvenir vos commentaires. Votre commentaire sera ajouté à la page « $1 », ainsi que votre nom d’utilisateur.",
+       "feedback-error-title": "Erreur",
        "feedback-error1": "Erreur : Résultat de l'IPA non reconnu",
        "feedback-error2": "Erreur : la modification a échoué",
        "feedback-error3": "Erreur : aucune réponse de l'API",
-       "feedback-thanks": "Merci ! Votre commentaire a été publié sur la page \"[$2 $1]\".",
-       "feedback-close": "Fait",
-       "feedback-bugcheck": "Formidable ! Vérifiez simplement que ce n'est pas un des [$1 bogues déjà connus].",
-       "feedback-bugnew": "J'ai vérifié. Signaler un nouveau bogue",
+       "feedback-message": "Message :",
+       "feedback-subject": "Objet :",
+       "feedback-submit": "Envoyer",
+       "feedback-terms": "Je comprends que les informations de mon agent utilisateur incluent des informations sur mon navigateur et ma version de système d’exploitation et qu’elles seront partagées publiquement avec mes commentaires.",
+       "feedback-termsofuse": "J’accepte de fournir un avis en accord avec les Conditions d’utilisation.",
+       "feedback-thanks": "Merci ! Votre commentaire a été publié sur la page « [$2 $1] ».",
+       "feedback-thanks-title": "Merci !",
+       "feedback-useragent": "Agent utilisateur :",
        "searchsuggest-search": "Rechercher",
        "searchsuggest-containing": "contenant...",
        "api-error-badaccess-groups": "Vous n'êtes pas autorisé à verser des fichiers sur ce wiki.",
        "json-error-utf8": "Caractères UTF-8 mal formés, peut-être mal encodé",
        "json-error-recursion": "Une ou plusieurs références récursives dans la valeur à encoder",
        "json-error-inf-or-nan": "Une une plusieurs valeurs NaN ou INF dans la valeur à encoder",
-       "json-error-unsupported-type": "Une valeur a été donnée dans un type ne pouvant pas être encodé"
+       "json-error-unsupported-type": "Une valeur a été donnée dans un type ne pouvant pas être encodé",
+       "headline-anchor-title": "Lien vers cette section",
+       "special-characters-group-latin": "latin",
+       "special-characters-group-latinextended": "latin étendu",
+       "special-characters-group-ipa": "API",
+       "special-characters-group-symbols": "symboles",
+       "special-characters-group-greek": "grec",
+       "special-characters-group-cyrillic": "cyrillique",
+       "special-characters-group-arabic": "arabe",
+       "special-characters-group-arabicextended": "arabe étendu",
+       "special-characters-group-persian": "persan",
+       "special-characters-group-hebrew": "hébreu",
+       "special-characters-group-bangla": "bengalî",
+       "special-characters-group-tamil": "tamoul",
+       "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-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"
 }
index 8052343..f3a43cb 100644 (file)
@@ -8,7 +8,8 @@
                        "RoyAlcatraz",
                        "Urhixidur",
                        "Zetud",
-                       "Hangmanwa7id"
+                       "Hangmanwa7id",
+                       "Stisc-14"
                ]
        },
        "tog-underline": "Souligner les liens:",
        "missingcommentheader": "'''Attention :''' Vous avez pas mis de sujet pour ce commentaire. Si vous cliquez le bouton \"Sauver\" encore, votre changement va être sauvé sans sujet.",
        "summary-preview": "Vue d'avance de la description:",
        "subject-preview": "Vue d'avance du sujet:",
+       "previewerrortext": "Une erreur est survenue pendant la tentative pour visualiser tes modifications.",
        "blockedtitle": "L'useur est bloqué",
        "blockedtext": "'''Votre compte d'useur (ou votre adresse IP) est bloqué.'''\n\nLe blocage a été fait par $1.  La raison donnée est ''$2''.\n\n* La date du blocage: $8\n* Le blocage va être ôté: $6\n* L'useur bloqué: $7\n\nVous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour discuter le blocage.  Vous pouvez pas user la fonction 'envoyer un e-mail à cet useur' hormis que vous avez une adresse e-mail confirmée dans votre [[Special:Preferences|réglage de compte]] et vous avez la permission de l'user.  Votre adresse IP est $3, et le numéro du blocage est #$5.  Mettez donc cette information dans toutes vos demandes.",
        "autoblockedtext": "Le système a bloqué votre adresse IP parce qu'alle a été usée par un autre useur qu'était bloqué par $1.\n\nLa raison donnée est: ''$2''\n\n* La date du blocage: $8\n* Le blocage va être ôté: $6\n\nVous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour discuter le blocage.\n\nNotez donc que vous pouvez pas user la fonction 'envoyer un e-mail à cet useur' hormis que vous avez une adresse e-mail confirmée dans votre [[Special:Preferences|réglage de compte]] et vous avez la permission de l'user.\n\nVotre numéro de blocage est #$5.  Mettez donc cette information dans toutes vos demandes.",
index 7adc6a3..8c196eb 100644 (file)
@@ -6,7 +6,8 @@
                        "Reedy",
                        "לערי ריינהארט",
                        "아라",
-                       "Soul Train"
+                       "Soul Train",
+                       "Macofe"
                ]
        },
        "tog-underline": "Solegnér los lims :",
        "delete-toobig": "Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprèssion de pâges d’ense est étâye rètrenta por prèvegnir des pèrturbacions emprèvues de {{SITENAME}}.",
        "delete-warning-toobig": "Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprimar pôt troblar la mârche de la bâsa de balyês de {{SITENAME}} ;\na fâre avouéc prudence.",
        "rollback": "Rèvocar los changements",
-       "rollback_short": "Rèvocar",
        "rollbacklink": "rèvocar",
        "rollbacklinkcount": "rèvocar $1 changement{{PLURAL:$1||s}}",
        "rollbacklinkcount-morethan": "rèvocar més de $1 changement{{PLURAL:$1||s}}",
        "import-options-wrong": "{{PLURAL:$2|Crouyo chouèx|Crouyos chouèx}} : <nowiki>$1</nowiki>",
        "importlogpage": "Jornal de les importacions",
        "importlogpagetext": "Importacions administratives de pâges avouéc lor historico de changements dês d’ôtros vouiquis.",
-       "import-logentry-upload": "at importâ [[$1]] per tèlèchargement de fichiér",
        "import-logentry-upload-detail": "$1 vèrsion{{PLURAL:$1||s}}",
-       "import-logentry-interwiki": "at importâ $1 per entèrvouiqui",
        "import-logentry-interwiki-detail": "$1 vèrsion{{PLURAL:$1||s}} dês $2",
        "javascripttest": "Èprôva de JavaScript",
-       "javascripttest-title": "Èprôves de $1 en cors",
        "javascripttest-qunit-intro": "Vêde la [$1 documentacion de les èprôves] dessus mediawiki.org.",
-       "javascripttest-qunit-heading": "Suita d’èprôva QUnit de JavaScript dessus MediaWiki",
        "tooltip-pt-userpage": "Voutra pâge usanciér",
        "tooltip-pt-anonuserpage": "La pâge usanciér de l’adrèce IP avouéc laquinta vos contribuâd",
        "tooltip-pt-mytalk": "Voutra pâge de discussion",
        "hebrew-calendar-m11-gen": "d’av",
        "hebrew-calendar-m12-gen": "d’èloul",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discutar]])",
-       "unknown_extension_tag": "Balisa d’èxtension « $1 » encognua",
        "duplicate-defaultsort": "'''Atencion :''' la cllâf de tri per dèfôt « $2 » ècllafe cela « $1 ».",
        "version": "Vèrsion",
        "version-extensions": "Èxtensions enstalâs",
        "version-parser-function-hooks": "Grèfons de les fonccions du parsor",
        "version-hook-name": "Nom du grèfon",
        "version-hook-subscribedby": "Soscrit per",
-       "version-version": "(Vèrsion $1)",
+       "version-version": "($1)",
        "version-svn-revision": "(v$2)",
        "version-license": "Licence",
        "version-poweredby-credits": "Ceti vouiqui fonccione grâce a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "specialpages-group-wiki": "Balyês du vouiqui et outils",
        "specialpages-group-redirects": "Pâges spèciâles redirigiês",
        "specialpages-group-spam": "Outils anti-spame",
+       "specialpages-group-developer": "Outils u dèvelopor",
        "blankpage": "Pâge voueda",
        "intentionallyblankpage": "Ceta pâge est lèssiê èxprès voueda.",
        "external_image_whitelist": "  #Lèssiéd ceta legne justo d’ense.<pre>\n#Endicâd los bocons d’èxprèssions racionèles (solament la partia endicâ entre-mié los //) ce-desot.\n#Corrèspondront avouéc los lims hipèrtèxtos de les émâges (ben liyês) de defôr.\n#Celos que corrèspondont sè montreront coment des émâges, ôtrament solament un lim de vers l’émâge serat montrâ.\n#Les legnes que començont per un # seront considèrâs coment des comentèros.\n#Ceta lista est pas sensibla a la câssa.\n\n#Betâd tôs los bocons d’èxprèssions racionèles (*RegEx*) en-dessus de ceta legne. Lèssiéd ceta legne justo d’ense.</pre>",
        "logentry-rights-autopromote": "$1 est étâ nomâ ôtomaticament de $4 a $5",
        "rightsnone": "(nion)",
        "revdelete-summary": "rèsumâ du changement",
+       "feedback-adding": "Aponsa de voutros avis a la pâge...",
+       "feedback-bugcheck": "Formidâblo ! Controlâd simplament qu’o est pas yona de les [$1 cofieries ja cognues].",
+       "feedback-bugnew": "J’é controlâ. Signalar una cofierie novèla",
        "feedback-bugornote": "Se vos éte prèst a dècrire un problèmo tècnico en dètaly, volyéd [$1 signalar una cofierie].\nÔtrament, vos pouede utilisar lo formulèro simplifiâ ce-desot. Voutron comentèro serat apondu a la pâge « [$3 $2] », avouéc voutron nom d’usanciér et lo navigator que vos utilisâd.",
-       "feedback-subject": "Sujèt :",
-       "feedback-message": "Mèssâjo :",
        "feedback-cancel": "Anular",
-       "feedback-submit": "Mandar voutron avis",
-       "feedback-adding": "Aponsa de voutros avis a la pâge...",
+       "feedback-close": "Fêt",
        "feedback-error1": "Èrror : rèsultat de l’API pas recognu",
        "feedback-error2": "Èrror : lo changement at pas reussi",
        "feedback-error3": "Èrror : gins de rèponsa de l’API",
+       "feedback-message": "Mèssâjo :",
+       "feedback-subject": "Sujèt :",
+       "feedback-submit": "Sometre",
        "feedback-thanks": "Grant-marci ! Voutron avis at étâ postâ sur la pâge « [$2 $1] ».",
-       "feedback-close": "Fêt",
-       "feedback-bugcheck": "Formidâblo ! Controlâd simplament qu’o est pas yona de les [$1 cofieries ja cognues].",
-       "feedback-bugnew": "J’é controlâ. Signalar una cofierie novèla",
        "searchsuggest-search": "Rechèrchiér",
        "searchsuggest-containing": "que contint...",
        "api-error-badaccess-groups": "Vos éte pas ôtorisâ a tèlèchargiér des fichiérs sur ceti vouiqui.",
        "expand_templates_remove_comments": "Suprimar los comentèros",
        "expand_templates_remove_nowiki": "Suprime les balises <nowiki> dens lo rèsultat",
        "expand_templates_generate_xml": "Fâre vêre l’âbro du parsor u format XML",
-       "expand_templates_preview": "Prèvisualisacion du rendu"
+       "expand_templates_preview": "Prèvisualisacion du rendu",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin ètendu",
+       "special-characters-group-ipa": "AFE (IPA)",
+       "special-characters-group-symbols": "Simbolos",
+       "special-characters-group-greek": "Grèco",
+       "special-characters-group-cyrillic": "Cirilico",
+       "special-characters-group-arabic": "Arabo",
+       "special-characters-group-arabicextended": "Arabo ètendu",
+       "special-characters-group-persian": "Pèrsan",
+       "special-characters-group-hebrew": "Hèbrèo",
+       "special-characters-group-bangla": "Bengali",
+       "special-characters-group-tamil": "Tamoul",
+       "special-characters-group-telugu": "Tèlougou",
+       "special-characters-group-sinhala": "Cingalês",
+       "special-characters-group-gujarati": "Goudjarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Tayi",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "C’mère",
+       "special-characters-title-endash": "terèt anglès",
+       "special-characters-title-emdash": "terèt èm",
+       "special-characters-title-minus": "segno muens"
 }
index 014f1e6..8c6c777 100644 (file)
        "thu": "Tö",
        "fri": "Fr",
        "sat": "Se",
-       "january": "Januar",
-       "february": "Feebruar",
+       "january": "Janewoore",
+       "february": "Febrewoore",
        "march": "Marts",
        "april": "April",
-       "may_long": "Moi",
-       "june": "Juuni",
+       "may_long": "Mei",
+       "june": "Jüüne",
        "july": "Juuli",
        "august": "August",
-       "september": "Septämber",
+       "september": "September",
        "october": "Oktoober",
-       "november": "Nomber",
-       "december": "Detsämber",
-       "january-gen": "Januar",
-       "february-gen": "Feebruar",
+       "november": "Nofember",
+       "december": "Detsember",
+       "january-gen": "Janewoore",
+       "february-gen": "Febrewoore",
        "march-gen": "Marts",
        "april-gen": "April",
-       "may-gen": "Moi",
+       "may-gen": "Mei",
        "june-gen": "Juuni",
        "july-gen": "Juuli",
        "august-gen": "August",
-       "september-gen": "Septämber",
+       "september-gen": "September",
        "october-gen": "Oktoober",
        "november-gen": "Nowämber",
-       "december-gen": "Detsämber",
+       "december-gen": "Detsember",
        "jan": "Jan.",
        "feb": "Feb.",
        "mar": "Mar.",
        "apr": "Apr.",
-       "may": "Moi",
+       "may": "Mei",
        "jun": "Jun.",
        "jul": "Jul.",
        "aug": "Aug.",
        "sep": "Sep.",
        "oct": "Okt.",
-       "nov": "Now.",
+       "nov": "Nof.",
        "dec": "Det.",
        "january-date": "$1. Janewoore",
        "february-date": "$1. Febrewoore",
        "redirectedfrom": "(Widjerfeerd faan $1)",
        "redirectpagesub": "Widjerfeerang",
        "redirectto": "Widjerfeer tu:",
-       "lastmodifiedat": "Detdiar sidj as tuleetst di $1, am a klook $2 anert wurden.",
+       "lastmodifiedat": "Detdiar sidj as tuleetst di $1, am a klook $2 feranert wurden.",
        "viewcount": "Aw jüdeer sid as  {{PLURAL:$1|iinjsen|$1 tunge}} tugram wörden.",
        "protectedpage": "Sääkerd sid",
        "jumpto": "Waksle tu:",
        "disclaimers": "Disclaimers",
        "disclaimerpage": "Project:Disclaimers",
        "edithelp": "Halep bi't bewerkin",
+       "helppage-top-gethelp": "Halep",
        "mainpage": "Hoodsidj",
        "mainpage-description": "Hoodsidj",
        "policy-url": "Project:Reegeln",
        "readonly_lag": "Det dootenbeenk as speret wurden, amdat jo ferdiald dootenbeenken (slaves) jo mä di hoodserver (master) ufglik kön.",
        "internalerror": "Süsteemfeeler",
        "internalerror_info": "Süsteemfeeler: $1",
+       "internalerror-fatal-exception": "Böös ütjnoomfeeler faan di slach \"$1\"",
        "filecopyerror": "Det datei $1 küd ei efter $2 kopiaret wurd.",
        "filerenameerror": "Det datei $1 küd ei efter $2 amnäämd wurd.",
        "filedeleteerror": "Det datei $1 küd ei stregen wurd.",
        "accmailtitle": "Paaswurd as ferschüürd wurden.",
        "accmailtext": "En tufelag iinracht paaswurd för [[User talk:$1|$1]] as tu $2 ferschüürd wurden. Det koon üüb det spezial-sidj ''[[Special:ChangePassword|Paaswurd anre]]'' feranert wurd, wan dü uunmeldet beest.",
        "newarticle": "(Nei)",
-       "newarticletext": "Dü beest en ferwisang tu en sidj fulagt, diar't noch ei jaft.\nAm det sidj iinturachten, skriiw dan tekst uun det fial för't bewerkin iin.\nÜüb det [$1 halepsidj] fanjst dü halep.\nWan dü ütj fersen heer beest, trak ianfach üüb di '''turag'''-knoop faan dan browser.",
+       "newarticletext": "Dü beest en ferwisang tu en sidj fulagt, diar't noch ei jaft.\nAm det sidj iinturachten, skriiw dan tekst uun det fial för't bewerkin iin.\nÜüb det [$1 halepsidj] fanjst dü halep.\nWan dü ütj fersen heer beest, trak ianfach üüb di <strong>turag</strong>-knoop faan dan browser.",
        "anontalkpagetext": "----''Üüb detheer sidj könst dü en ünbekäänden brüker en nooracht du. Det lääpt auer sin IP adres. IP adresen kön faan flook brükern brükt wurd. Wan dü mä detheer nooracht niks began könst, do as det ferlicht för hoker ööders mend weesen. Dü säärst niks widjer onernem. Wan dü en aanj [[Special:UserLogin/signup|brükerkonto iinrachst]] of di [[Special:UserLogin|uunmeldest]], komt sowat ei weder föör.",
        "noarticletext": "Üüb detdiar sidj stäänt noch niks.\nDü könst didiar tiitel üüb ööder sidjen [[Special:Search/{{PAGENAME}}|schük]],\n<span class=\"plainlinks\">uun [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} logbuken schük] of detdiar sidj [{{fullurl:{{FULLPAGENAME}}|action=edit}} bewerke]</span>.",
        "noarticletext-nopermission": "Üüb detdiar sidj stäänt noch niks, oober dü mutst diar uk niks iinskriiw.\nDü könst diar üüb ööder sidjen efter [[Special:Search/{{PAGENAME}}|schük]] of a <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAME}}}} logbuken uunluke].</span>",
        "group-sysop": "Administratooren",
        "group-bureaucrat": "Bürokraaten",
        "group-suppress": "Oversighter",
-       "group-all": "(Aaltumaal)",
+       "group-all": "(Aal a)",
        "group-user-member": "{{GENDER:$1|Brüker}}",
        "group-autoconfirmed-member": "{{GENDER:$1|Registriaret brüker}}",
        "group-bot-member": "{{GENDER:$1|Bot}}",
        "right-override-export-depth": "Sidjen an onersidjen bit tu en jipde faan 5 eksportiare",
        "right-sendemail": "E-mails tu ööder brükern schüür",
        "right-passwordreset": "Paaswurd faan en brüker turagsaat an det e-mail diartu uunluke",
+       "right-managechangetags": "[[Special:Tags|Markiarangen]] iinracht an uun't dootenbeenk strik",
        "newuserlogpage": "Neiuunmeldangs-logbuk",
        "newuserlogpagetext": "Detheer as en logbuk faan nei iinracht brükerkonten.",
        "rightslog": "Brükerrochten-logbuk",
        "action-viewmyprivateinfo": "din priwoot dooten uuntulukin",
        "action-editmyprivateinfo": "din priwoot dooten tu bewerkin",
        "action-editcontentmodel": "det model faan det sidj tu bewerkin",
+       "action-managechangetags": "markiarangen iinracht an uun't dootenbeenk strik",
        "nchanges": "$1 {{PLURAL:$1|feranrang|feranrangen}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sant dan leetst beschük}}",
        "enhancedrc-history": "Ferluup",
        "recentchanges": "Leetst feranrangen",
        "recentchanges-legend": "Iinstelangen för't uunwisin",
-       "recentchanges-summary": "Üüb detdiar sidj könst dü a leetst feranrangen faan't Nordfriisk Wikipedia ferfulge.",
+       "recentchanges-summary": "Üüb detdiar sidj könst dü a leetst feranrangen faan detheer Wiki-projekt ferfulge.",
        "recentchanges-noresult": "Uun di uunjiwen tidjrüm san sok feranrangen ei föörnimen wurden.",
-       "recentchanges-feed-description": "Mä didiar feed könst dü a leetst feranrangen faan't Nordfriisk Wikipedia ferfulge.",
+       "recentchanges-feed-description": "Mä didiar feed könst dü a leetst feranrangen faan detheer Wiki-projekt ferfulge.",
        "recentchanges-label-newpage": "Nei sidj uunlaanj",
        "recentchanges-label-minor": "Letj feranrang",
        "recentchanges-label-bot": "Feranrang faan en bot",
        "unusedimages": "Datein, diar ei brükt wurd",
        "wantedcategories": "Kategoriin, diar brükt wurd",
        "wantedpages": "Sidjen, diar brükt wurd",
+       "wantedpages-summary": "List faan sidjen, diar't goorei jaft, mä a miast ferwisangen, oober saner sidjen, huar bluas üüb ferwiset woort. För en list faan sidjen, diar't goorei jaft, oober mä ferwisangen luke bi [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Diar as en artiikelnööm ei tuläät uun: $1",
        "wantedfiles": "Datein, diar brükt wurd",
        "wantedfiletext-cat": "Jodiar datein wurd brükt, oober san ei diar. Datein faan ööder archiiwen wurd apfeerd, san oober <del>trochstregen</del>. An jo sidjen, diar sok datein brük, stun uun  [[:$1]].",
        "thumbnail_image-missing": "Det datei as wel ei diar: $1",
        "thumbnail_image-failure-limit": "Detdiar föörskaubil as uun a leetst tidj tufölsis ($1 of muarsis) feranert wurden. Ferschük det leeder man noch ans.",
        "import": "Sidjen importiare",
-       "importinterwiki": "Transwiki import",
-       "import-interwiki-text": "Schük en Wiki an en sidj tu importiarin ütj. A werjuunen an brükernöömer bliiw erhäälen.\nTranswiki-import-aktjuunen wurd uun't [[Special:Log/import|Import-logbuk]] fäästhäälen.",
+       "importinterwiki": "Faan en ööder Wiki importiare",
+       "import-interwiki-text": "Schük en Wiki an en sidj tu importiarin ütj. A werjuunen an brükernöömer bliiw erhäälen.\nImporten faan ööder Wikis wurd uun't [[Special:Log/import|Import-logbuk]] fäästhäälen.",
        "import-interwiki-sourcewiki": "Faan hün Wiki:",
        "import-interwiki-sourcepage": "Faan hün sidj:",
        "import-interwiki-history": "Aal a werjuunen faan det sidj importiare",
        "importcantopen": "Det import-datei küd ei eeben maaget wurd.",
        "importbadinterwiki": "Ferkiard interwiki-link",
        "importsuccess": "Import klaar!",
-       "importnosources": "För di transwiki-import san nian kwelen uunden. Dü könst werjuunen ei direkt huuchschüür.",
+       "importnosources": "För di import san nian ööder Wikis uunden. Dü könst werjuunen ei direkt huuchschüür.",
        "importnofile": "Diar as nian importdatei bestemet wurden.",
        "importuploaderrorsize": "Bi't huuchschüüren faan det importdatei as wat skiaf gingen. Det datei as tu grat.",
        "importuploaderrorpartial": "Bi't huuchschüüren faan det importdatei as wat skiaf gingen. Det datei as bluas dialwiis huuchschüürd wurden.",
        "import-rootpage-nosubpage": "Uun di nöömrüm „$1“ jaft at nian onersidjen.",
        "importlogpage": "Import-logbuk",
        "importlogpagetext": "Administratiif import faan sidjen mä aal a werjuunen faan ööder Wikis.",
-       "import-logentry-upload": "„[[$1]]“ faan en datei importiaret",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|werjuun|werjuunen}} importiaret",
-       "import-logentry-interwiki": "„$1“ mä transwiki importiaret",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|werjuun|werjuunen}} faan $2 importiaret",
        "javascripttest": "JavaScript-test",
        "javascripttest-pagetext-noframework": "Detdiar sidj as för JavaScript-tests föörsen.",
        "javascripttest-qunit-intro": "Luke efter bi [$1 test dokumentatjuun] üüb mediawiki.org",
        "tooltip-pt-userpage": "Din brükersidj",
        "tooltip-pt-anonuserpage": "Brükersidj faan det IP-adres, faan huar ütj dü werkest",
-       "tooltip-pt-mytalk": "Din diskusjuunssidj",
+       "tooltip-pt-mytalk": "Din diskuschuunssidj",
        "tooltip-pt-anontalk": "Diskuschuun auer feranrangen faan detdiar IP-adres",
        "tooltip-pt-preferences": "Min iinstelangen",
        "tooltip-pt-watchlist": "Sidjen, diar dü uun't uug behual wel",
        "tags-tag": "Kääntiaken-nööm",
        "tags-display-header": "Nööm üüb feranrangslisten",
        "tags-description-header": "Widjloftag beskriiwang",
+       "tags-source-header": "Kwel",
        "tags-active-header": "Aktiif?",
        "tags-hitcount-header": "Kääntiakent feranrangen",
+       "tags-actions-header": "Aktjuunen",
        "tags-active-yes": "Ja",
        "tags-active-no": "Naan",
+       "tags-source-extension": "Faan en ütjwidjang fäästlaanj",
+       "tags-source-manual": "Manuel faan brükern of bots iinracht",
+       "tags-source-none": "Woort ei muar brükt",
        "tags-edit": "bewerke",
+       "tags-delete": "strik",
+       "tags-activate": "aktiwiare",
+       "tags-deactivate": "de-aktiwiare",
        "tags-hitcount": "$1 {{PLURAL:$1|feranrang|feranrangen}}",
+       "tags-manage-no-permission": "Dü mutst nian feranrangsmarkiarangen bewerke.",
+       "tags-create-heading": "En nei markiarang iinracht",
+       "tags-create-explanation": "Normoolerwiis wurd nei markiarangen för't bewerkin faan brükern an bots iinracht.",
+       "tags-create-tag-name": "Markiarangsnööm:",
+       "tags-create-reason": "Grünj:",
+       "tags-create-submit": "Maage",
+       "tags-create-no-name": "Dü skel en markiarangsnööm uundu.",
+       "tags-create-invalid-chars": "Markiarangsnöömer mut nian komas (<code>,</code>) of swäärsstreger (<code>/</code>) haa.",
+       "tags-create-invalid-title-chars": "Markiarangsnöömer mut nian tiakens haa, diar uk uun sidjennöömer ei föörkem mut.",
+       "tags-create-already-exists": "Det markiarang \"$1\" jaft at al.",
+       "tags-create-warnings-above": "{{PLURAL:$2|Detdiar wäärnang as|Jodiar wäärnangen san}} apdaaget, üs det markiarang \"$1\" iinracht wurd skul:",
+       "tags-create-warnings-below": "Wel dü mä't iinrachten faan detdiar markiarang widjer maage?",
+       "tags-delete-title": "Markiarang strik",
+       "tags-delete-explanation-initial": "Dü beest diarbi, det markiarang \"$1\" uun't dootenbeenk tu striken.",
+       "tags-delete-explanation-in-use": "Hat woort faan {{PLURAL:$2|$2 werjuun of logbuk-iindrach|aal $2 werjuunen an/of logbuk-iindracher}} strgen, huar't uugenblakelk noch iindraanj as.",
+       "tags-delete-explanation-warning": "Detdiar aktjuun könst dü <strong>ei turagdrei</strong> an <strong>koon ei weder turaghaalet wurd</strong>, uk ei faan dootenbeenk-administartooren. Wees seeker, dat dü detdiar markiarang würelk strik wel.",
+       "tags-delete-explanation-active": "<strong>Det markiarang \"$1\" as noch aktiif an woort uk widjerhen iinsaat.</strong> Wan dü det ei wel, gung tu det(jo) steed(en), huar det markiarang iinracht wurden as, an strik det diar.",
+       "tags-delete-reason": "Grünj:",
+       "tags-delete-submit": "Detdiar markiarang för iiwag strik",
+       "tags-delete-not-allowed": "Markiarangen, diar faan en ütjwidjang fäästlaanj wurden san, kön ei stregen wurd, wan det diar ei mögelk maaget wurden as.",
+       "tags-delete-not-found": "Det markiarang \"$1\" jaft at ei.",
+       "tags-delete-too-many-uses": "Det markiarang \"$1\" as mä muar üs $2 {{PLURAL:$2|werjuun|werjuunen}} ferbünjen an koon ei stregen wurd.",
+       "tags-delete-warnings-after-delete": "Det markiarang \"$1\" as stregen wurden, man diar {{PLURAL:$2|as ian wäärnang|san wäärnangen}} aptreeden:",
+       "tags-activate-title": "Markiarang aktiwiare",
+       "tags-activate-question": "Dü beest diarbi, det markiarang \"$1\" tu aktiwiarin.",
+       "tags-activate-reason": "Grünj:",
+       "tags-activate-not-allowed": "Dü könst det markiarang \"$1\" ei aktiwiare.",
+       "tags-activate-not-found": "Det markiarang \"$1\" jaft at ei.",
+       "tags-activate-submit": "Aktiwiare",
+       "tags-deactivate-title": "Markiarang de-aktiwiare",
+       "tags-deactivate-question": "Dü beest diarbi, det markiarang \"$1\" tu de-aktiwiarin.",
+       "tags-deactivate-reason": "Grünj:",
+       "tags-deactivate-not-allowed": "Dü könst det markiarang \"$1\" ei de-aktiwiare.",
+       "tags-deactivate-submit": "De-aktiwiare",
        "comparepages": "Sidjen ferglik",
        "compare-page1": "Sidj 1",
        "compare-page2": "Sidj 2",
        "revdelete-uname-unhid": "brükernööm weder tu sen",
        "revdelete-restricted": "mögelkhaiden för administratooren wechnimen",
        "revdelete-unrestricted": "mögelkhaiden för administratooren ütjwidjet",
+       "logentry-block-block": "$1 {{GENDER:$2|hää}} {{GENDER:$4|$3}} speret mä en sperdüür faan $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|hää det sper}} för {{GENDER:$4|$3}} apheewen.",
+       "logentry-block-reblock": "$1 {{GENDER:$2|hää}} det sper för {{GENDER:$4|$3}} feranert mä en sperdüür faan $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|hää}} {{GENDER:$4|$3}} speret mä en sperdüür faan $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|hää}} det sper för {{GENDER:$4|$3}} feranert mä en sperdüür faan $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|hää}} $3 importiaret an en datei huuchschüürd",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|hää}} $3 faan en ööder Wiki importiaret",
        "logentry-merge-merge": "$1 {{GENDER:$2|hää}} $3 mä det sidj „$4“ (werjuunen bit tu di $5) tuupfeerd",
        "logentry-move-move": "$1 {{GENDER:$2}} hää det sidj $3 efter $4 fersköwen.",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2}} hää det sidj $3 efter $4 saner widjerfeerang fersköwen.",
        "logentry-upload-upload": "$1 {{GENDER:$2|hää}} $3 huuchschüürd",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|hää}} en nei werjuun faan $3 huuchschüürd",
        "logentry-upload-revert": "$1 {{GENDER:$2|hää}} $3 huuchschüürd",
+       "log-name-managetags": "Markiarangs-logbuk",
+       "log-description-managetags": "Üüb detdiar sidj stun apgoowen mä [[Special:Tags|markiarangen]]. Uun det logbuk stun bluas aktjuunen faan en administaraator; diar kön oober uk feranrangen faan't Wiki-software föörnimen wurd, diar ei uun detheer logbuk stun.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|hää}} det markiarang \"$4\" iinracht",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|hää}} det markiarang „$4“ stregen (faan {{PLURAL:$5|ian werjuun of ään logbuk-iindrach|$5 werjuunen an/of logbuk-iindracher}} wechnimen).",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|hää}} det markiarang \"$4\" för't bewerkin faan brükern of bots iinracht.",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|hää}} det markiarang \"$4\" för't bewerkin faan brükern of bots de-aktiwiaret.",
        "rightsnone": "(-)",
        "revdelete-summary": "tuhuupefootings-komäntoor",
+       "feedback-adding": "Komentaar woort tu det sidj skrewen ...",
+       "feedback-back": "Turag",
+       "feedback-bugcheck": "Gud! Luke noch ans efter, of det ei ferlicht en [$1 bekäänden feeler] as.",
+       "feedback-bugnew": "Haa ik efterluket. Nei feeler melde.",
        "feedback-bugornote": "Wan dü en technisk probleem beskriiw wel, wees so gud an skriiw [$1 am di feeler].\nÖöders könst dü uk det formulaar oner brük. Dan komentaar woort tuup mä dan brükernööm an det werjuun faan dan browser üüb det sidj „[$3 $2]“ skrewen.",
-       "feedback-subject": "Teemo:",
-       "feedback-message": "Mädialang:",
        "feedback-cancel": "Ufbreeg",
-       "feedback-submit": "Komentaar ufsjüür",
-       "feedback-adding": "Komentaar woort tu det sidj skrewen ...",
+       "feedback-close": "Klaar",
+       "feedback-external-bug-report-button": "En technisk apgoow iinschüür",
+       "feedback-dialog-title": "Komentaar ufsjüür",
+       "feedback-dialog-intro": "Dü könst det ianfach formulaar diar oner för dan komentaar brük. Dan komentaar komt tuup mä dan brükernööm tu det sidj „$1“.",
+       "feedback-error-title": "Diar as wat skiaf gingen",
        "feedback-error1": "Feeler: Ünbekäänd API-bööd",
        "feedback-error2": "Feeler: Bewerkin as skiaf gingen.",
        "feedback-error3": "Feeler: Nian API-oonswaar",
+       "feedback-message": "Mädialang:",
+       "feedback-subject": "Teemo:",
+       "feedback-submit": "Ufschüür",
+       "feedback-terms": "Ik haa det begreben, dat uun min brüker-informatjuunen uk informatjuunen auer man browser an min bedrifssüsteem stun an dat jo tuup mä man komentaar öfentelk diald wurd.",
+       "feedback-termsofuse": "Ik steme tu, dat man komentaar efter a brüker-reegeln uunwiset woort.",
        "feedback-thanks": "Föl soonk. Dan komentaar as üüb det sidj „[$2 $1]“ skrewen wurden.",
-       "feedback-close": "Klaar",
-       "feedback-bugcheck": "Gud! Luke noch ans efter, of det ei ferlicht en [$1 bekäänden feeler] as.",
-       "feedback-bugnew": "Haa ik efterluket. Nei feeler melde.",
+       "feedback-thanks-title": "Föl soonk!",
+       "feedback-useragent": "Brüker-agent:",
        "searchsuggest-search": "Schük",
        "searchsuggest-containing": "diar banen as ...",
        "api-error-badaccess-groups": "Dü mutst nian datein tu detdiar Wiki huuchschüür.",
        "json-error-utf8": "Ferkiard UTF-8-tiakens, ferlicht ferkiard kodiaret.",
        "json-error-recursion": "Ian of muar rekursiif referensen uun a wäärs tu kodiarin.",
        "json-error-inf-or-nan": "Ään of muar NAN of INF wäärser uun a wäärs tu kodiarin.",
-       "json-error-unsupported-type": "Diar stäänt en wäärs faan en typ, diar ei kodiaret wurd koon."
+       "json-error-unsupported-type": "Diar stäänt en wäärs faan en typ, diar ei kodiaret wurd koon.",
+       "headline-anchor-title": "Ferwisang tu detdiar kirew"
 }
index 9887e73..e4f8d1d 100644 (file)
        "duplicate-defaultsort": "'''Avîs:''' La clâf predeterminade par l'ordenament \"$2\" invalide la clâf predeterminade precedente \"$1\".",
        "version": "Version",
        "version-variables": "Variabilis",
-       "version-version": "(Version $1)",
+       "version-version": "($1)",
        "version-license": "Licence",
        "version-software-version": "Version",
        "fileduplicatesearch-filename": "Non dal file:",
index fc967f5..28daf16 100644 (file)
@@ -12,7 +12,8 @@
                        "Urhixidur",
                        "לערי ריינהארט",
                        "아라",
-                       "Robin0van0der0vliet"
+                       "Robin0van0der0vliet",
+                       "Macofe"
                ]
        },
        "tog-underline": "Keppelings ûnderstreekje:",
        "faqpage": "Project:Faak stelde fragen",
        "namespaces": "Nammeromten",
        "variants": "Farianten",
+       "navigation-heading": "Navigaasjemenu",
        "errorpagetitle": "Flater",
        "returnto": "Werom nei \"$1\".",
        "tagline": "Ut {{SITENAME}}",
        "view": "Lêze",
        "edit": "Bewurkje",
        "create": "Oanmeitsje",
+       "create-local": "Lokale beskriuwing tafoegje",
        "editthispage": "Side bewurkje",
        "create-this-page": "Dizze side oanmeitsje",
        "delete": "Wiskje",
        "subject": "Ûnderwerp/kop:",
        "minoredit": "Dit is in tekstwiziging",
        "watchthis": "Folgje dizze side",
-       "savearticle": "Fêstlizze",
+       "savearticle": "Side bewarje",
        "preview": "Oerlêze",
        "showpreview": "Earst oerlêze",
        "showdiff": "Wizigings",
        "post-expand-template-argument-category": "Siden dy't missende sjabloaneleminten befetsje",
        "parser-template-loop-warning": "Der is in lus yn sjabloanen fûn: [[$1]]",
        "parser-template-recursion-depth-warning": "De werhellingsdjipte foar sjabloanen is oer de grins ($1)",
-       "undo-success": "De feroaring kin werom set wurde. Kontrolearje de ferliking hjirûnder om wis te wêzen dat jo dit feroarje wolle en druk dan op fêstlizze om it werom setten troch te fieren.",
+       "undo-success": "De feroaring kin werom set wurde.\nKontrolearje de ferliking hjirûnder om wis te wêzen dat jo dit feroarje wolle en druk dan op bewarje om it werom setten troch te fieren.",
        "undo-failure": "De feroarings kinne net werom set wurde troch in konflikt mei oare feroarings tuskentroch.",
        "undo-norev": "De feroaring kin werom set wurde, omdat it net bestiet of is wiske.",
        "undo-summary": "Werom sette fan ferzje $1 fan [[Special:Contributions/$2|$2]] ([[User talk:$2|Oerlis]])",
        "currentrev": "Aktuele ferzje",
        "currentrev-asof": "Hjoeddeiske ferzje sûnt $1",
        "revisionasof": "Ferzje op $1",
-       "revision-info": "Ferzje op $1 fan $2",
-       "previousrevision": "← Eardere ferskillen",
+       "revision-info": "Ferzje op $1 troch {{GENDER:$6|$2}}$7",
+       "previousrevision": "← Eardere ferzje",
        "nextrevision": "Nijere ferzje→",
        "currentrevisionlink": "Rinnende ferzje",
        "cur": "no",
        "mergelog": "Gearfoegingslogboek",
        "revertmerge": "Gearfoeging ûngedien meitsje",
        "mergelogpagetext": "Hjirûnder stiet in list fan resinte gearfoegings fan ien side-skiednis nei in oaren.",
-       "history-title": "Sideskiednis fan \"$1\"",
+       "history-title": "$1: ferzjeskiednis",
        "lineno": "Rigel $1:",
        "compareselectedversions": "Ferlykje selektearre ferzjes",
        "showhideselectedversions": "Oantikke ferzjes wol/net sjen litte",
        "searchrelated": "besibbe",
        "searchall": "alle",
        "showingresults": "{{PLURAL:$1|<strong>1</strong> resultaat|<strong>$1</strong> resultaten}} fan #<strong>$2</strong> ôf.",
+       "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> fan <strong>$3</strong>|Resultaten <strong>$1 - $2</strong> fan <strong>$3</strong>}}",
        "search-nonefound": "Der binne gjin resultaten foar Jo sykopdracht.",
        "powersearch-legend": "Sykje",
        "powersearch-ns": "Sykje op nammeromten:",
        "prefs-watchlist-edits-max": "Maksimum oantal: 1000",
        "prefs-misc": "Ferskaat",
        "prefs-resetpass": "Wachtwurd feroarje",
-       "saveprefs": "Fêstlizze",
+       "prefs-email": "E-mail",
+       "prefs-rendering": "Uterlik",
+       "saveprefs": "Bewarje",
        "restoreprefs": "Tebek nei de standertynstellings",
        "prefs-editing": "Siden bewurkje",
        "rows": "Rigen",
        "prefs-help-realname": "Echte namme is net ferplicht; as jo dy opjouwe kin dy namme brûkt wurde om jo erkenning te jaan foar jo wurk.",
        "prefs-help-email": "E-mail is opsjoneel, mar makket it mûglik jo wachtwurd te stjoeren as jo it fergetten hawwe.\nJo kinne ek oaren de mûglikheid jaan kontakt mei jo op te nimmen troch in ferwizing op jo brûkers- en oerlisside, sûnder dat jo jo identiteit oer hoege te jaan.",
        "prefs-help-email-required": "Hjir is in e-mailadres foar nedich.",
+       "prefs-info": "Basisynformaasje",
+       "prefs-i18n": "Taalynstellingen",
        "prefs-signature": "Sinjatuer",
        "prefs-dateformat": "Datumopmaak",
        "prefs-timeoffset": "Tiidsferskil",
        "editusergroup": "Wizigje meidoggerrjochten",
        "editinguser": "Bewurkje meidoggerrjochten fan <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Wizigje meidoggerrjochten",
-       "saveusergroups": "Meidoggerrjochten fêstlizze",
+       "saveusergroups": "Meidoggerrjochten bewarje",
        "userrights-groupsmember": "Sit yn group:",
        "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "Jo kinne de groepen feroarje dêr't dizze brûker lid fan is.\n* In oankrúst fekje betsjut dat de brûker lid is fan 'e groep.\n* In net oankrúst fekje betsjut dat de brûker gjin lid is fan 'e groep.\n* In \"*\" betsjut dat jo in brûker net út in groep weihelje kinne nei't jo dy tafoege hawwe, of oarsom.",
        "rc_categories": "Alline kategoryen (skiede mei in \"|\")",
        "rc_categories_any": "Elk",
        "rc-change-size": "$1",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} nei de wiziging",
        "newsectionsummary": "/* $1 */ nije seksje",
        "rc-enhanced-expand": "Details werjaan",
        "rc-enhanced-hide": "Details ferskûlje",
        "fileexists-forbidden": "Der bestiet al in triem mei dizze namme.\nBied jo triem ûnder in oare namme oan.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Der bestiet al in triem mei dizze namme by de dielde triemmen.\nAs jo de triem dochs noch oanbiede wolle, gean dan werom en kies in oare namme.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Dizze triem is idintyk oan {{PLURAL:$1|de folgjende triem|de folgjende triemmen}}:",
-       "file-deleted-duplicate": "In bestân idintyk oan dit bestân ([[:$1]]) is foarhinne fuorthelle.\nRieplachtsje it fuorthel-logboek foar't jo fierder geane.",
+       "file-deleted-duplicate": "In triem idintyk oan dizze triem ([[:$1]]) is foarhinne fuorthelle.\nRieplachtsje it fuorthel-logboek foar't jo fierder geane.",
        "uploadwarning": "Oanbied-warskôging",
        "savefile": "Lis triem fêst",
        "uploaddisabled": "Sorry, op dizze tsjinner kin net oanbean wurde.",
        "listfiles-summary": "Op dizze spesjale side binne alle tafoege triemmen te besjen.\nStandert wurde de lêst tafoege triemmen boppe oan de list werjûn.\nKlikken op in kolomkop feroaret de sortearring.",
        "listfiles_search_for": "Sykje nei triem:",
        "imgfile": "triem",
-       "listfiles": "Ofbyld list",
+       "listfiles": "Triemlist",
        "listfiles_thumb": "Miniatuerôfbylding",
        "listfiles_date": "Datum",
        "listfiles_name": "Namme",
        "whatlinkshere-hideredirs": "$1 trochferwizings",
        "whatlinkshere-hidetrans": "$1 trânsklúzjes",
        "whatlinkshere-hidelinks": "$1 keppelings",
+       "whatlinkshere-filters": "Filters",
        "blockip": "Slút {{GENDER:$1|meidogger}} út",
        "blockip-legend": "Slút brûker út",
        "blockiptext": "Brûk dizze fjilden om in meidogger fan skriuwtagong út te sluten.\nDat soe allinnich fanwege fandalisme dien wurde moatte, sa't de\n[[{{MediaWiki:Policy-url}}|útslut-rie]] it oanjout.\nMeld de krekte reden! Neam bygelyks de siden dy't oantaaste waarden.",
        "export-addcattext": "Siden tafoegje fan kategory:",
        "export-addcat": "Tafoegje",
        "export-addns": "Tafoegje",
-       "export-download": "Fêstlizze as triem",
+       "export-download": "Bewarje as triem",
        "export-templates": "Tafoegje berjochten",
        "allmessages": "Alle wikiberjochten",
        "allmessagesname": "Namme",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|meidogger|meidoggers}} $1",
        "spamprotectiontext": "De side dy't jo fêstlizze woene is blokkearre troch in spam filter. Dit wurdt wierskynlik feroarsake troch in ferwizing nei in ekstern webstee.",
        "spamprotectionmatch": "De neikommende tekst hat it spam filter aktivearre: $1",
+       "pageinfo-header-basic": "Basisynformaasje",
+       "pageinfo-header-properties": "Side-eigenskippen",
        "pageinfo-redirects-value": "$1",
+       "pageinfo-toolboxlink": "Sidegegevens",
        "pageinfo-contentpage-yes": "Ja",
        "pageinfo-protect-cascading-yes": "Ja",
        "markaspatrolleddiff": "Markearje as kontroleare",
        "file-info-size-pages": "$1 × $2 pixels, triemgrutte: $3, MIME-type: $4, $5 {{PLURAL:$5|side|siden}}",
        "file-nohires": "Gjin hegere resolúsje beskikber.",
        "svg-long-desc": "SVG-triem, nominaal $1 × $2 pixels, triemgrutte: $3",
-       "show-big-image": "Hegere resolúsje",
+       "show-big-image": "Oarspronklike triem",
        "show-big-image-size": "$1 × $2 pixels",
        "newimages": "Nije ôfbylden",
        "imagelisttext": "Dit is in list fan '''$1''' {{PLURAL:$1|triem|triemen}}, op $2.",
        "metadata-collapse": "Ferskûlje útwreide details",
        "metadata-fields": "De EXIF-metadatafjilden yn dit berjocht steane op in ôfbyldingsside as de metadatatabel ynklapt is. Oare fjilden wurde ferburgen.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "metadata-langitem-default": "$1",
+       "exif-orientation": "Oriïntaasje",
        "exif-samplesperpixel": "Oantal komponinten",
        "exif-xresolution": "Horizontale resolúsje",
        "exif-yresolution": "Fertikale resolúsje",
        "exif-imagedescription": "Ofbylding titel",
        "exif-make": "Kamera makker",
+       "exif-model": "Kameramodel",
+       "exif-software": "Brûkte software",
        "exif-artist": "Auteur",
        "exif-exifversion": "Exif-ferzje",
        "exif-colorspace": "Kleurromte",
        "exif-compressedbitsperpixel": "Ofbylding kompresjemetoade",
        "exif-usercomment": "Opmerkings",
        "exif-relatedsoundfile": "Besibbe audiotriem",
+       "exif-datetimeoriginal": "Tiidstip gegevensoanmaak",
+       "exif-datetimedigitized": "Tiidstip digitalisearring",
        "exif-exposuretime-format": "$1 sek ($2)",
        "exif-fnumber-format": "f/$1",
        "exif-shutterspeedvalue": "APEX-slutertiid",
        "watchlisttools-view": "Folchlist besjen",
        "watchlisttools-edit": "Folchlist besjen en bewurkje",
        "watchlisttools-raw": "Rûge folchlist bewurkje",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|oerlis]])",
        "version": "Ferzje",
        "version-extensions": "Ynstallearre útwreidings",
        "version-specialpages": "Bysûndere siden",
        "revdelete-unrestricted": "hat beheinings foar behearders goedmakke",
        "rightsnone": "(gjin)",
        "revdelete-summary": "gearfetting bewurkje",
-       "feedback-subject": "Ûnderwerp:",
-       "feedback-message": "Berjocht:",
        "feedback-cancel": "Annulearje",
-       "feedback-submit": "Feedback ferstjoere",
        "feedback-close": "Dien",
+       "feedback-message": "Berjocht:",
+       "feedback-subject": "Ûnderwerp:",
+       "feedback-submit": "Ferstjoere",
        "searchsuggest-search": "Sykje",
        "api-error-unknown-code": "Unbekende flater: \"$1\".",
        "api-error-unknownerror": "Unbekende flater: \"$1\".",
        "pagelang-language": "Taal",
        "mediastatistics-nfiles": "$1 ($2%)",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
-       "mediastatistics-header-unknown": "Unbekend"
+       "mediastatistics-header-unknown": "Unbekend",
+       "special-characters-group-latin": "Latyn"
 }
index a269e4a..b50d4bc 100644 (file)
        "deletereasonotherlist": "Fáth eile",
        "deletereason-dropdown": "*Fáthanna coitianta scriosta\n** Iarratas ón údar\n** Sárú cóipchirt\n** Loitiméireacht",
        "rollback": "Athruithe a rolladh siar",
-       "rollback_short": "Roll siar",
        "rollbacklink": "roll siar",
        "rollbacklinkcount": "Roll siar $1 {{PLURAL:$1|athrú|athruithe}}",
        "rollbackfailed": "Theip an rolladh siar",
        "watchlisttools-raw": "Cuir do amhliosta faire in eagar",
        "version": "Leagan",
        "version-other": "Eile",
-       "version-version": "(Leagan $1)",
+       "version-version": "($1)",
        "version-license": "Ceadúnas",
        "version-software": "Bogearraí suiteáilte",
        "version-software-version": "Leagan",
        "specialpages-group-spam": "Uirlisí turscar",
        "blankpage": "Leathanach bán",
        "htmlform-selectorother-other": "Eile",
-       "feedback-message": "Teachtaireacht:",
        "feedback-cancel": "Cealaigh",
+       "feedback-message": "Teachtaireacht:",
        "searchsuggest-search": "Cuardaigh",
        "expand_templates_remove_comments": "Scrios nótaí tráchta",
        "expand_templates_preview": "Réamhamharc"
index 8cfff81..80eff46 100644 (file)
        "deletereasonotherlist": "别𠮶理由",
        "deletereason-dropdown": "*常用删除𠮶理由\n** 写𠮶人自家𠮶要求\n** 侵犯版权\n** 特试破坏",
        "rollback": "还原修改",
-       "rollback_short": "还原",
        "rollbacklink": "还原",
        "rollbackfailed": "还原失败",
        "cantrollback": "还原伓正;最末𠮶贡献人系文章𠮶唯一作者。",
        "watchlisttools-view": "眵吖相关更改",
        "watchlisttools-edit": "眵吖同到编写监视列表",
        "watchlisttools-raw": "编写原始监视列表",
-       "unknown_extension_tag": "伓认得𠮶扩展标签 \"$1\"",
        "duplicate-defaultsort": "'''警告:'''预设𠮶排序键 \"$2\" 覆蓋先头𠮶预设排序键 \"$1\"。",
        "version": "版本",
        "version-extensions": "装正𠮶插件",
        "version-parser-extensiontags": "解析器扩展标签",
        "version-hook-name": "钩子名",
        "version-hook-subscribedby": "订阅人",
-       "version-version": "(版本 $1)",
+       "version-version": "($1)",
        "version-license": "许可证",
        "version-poweredby-credits": "个只 Wiki 由 '''[https://www.mediawiki.org/ MediaWiki]''' 驱动,版权所有 © 2001-$1 $2。",
        "version-software": "装正𠮶软件",
index 6203e9d..2837d29 100644 (file)
        "deletereasonotherlist": "別嗰理由",
        "deletereason-dropdown": "*常用刪除嗰理由\n** 寫嗰人自家嗰要求\n** 侵犯版權\n** 特試破壞",
        "rollback": "還原修改",
-       "rollback_short": "還原",
        "rollbacklink": "還原",
        "rollbackfailed": "還原失敗",
        "cantrollback": "還原伓正;頂晏嗰貢獻人係文章嗰唯一作者。",
        "watchlisttools-view": "望下相關更改",
        "watchlisttools-edit": "望吖同到編寫監視列表",
        "watchlisttools-raw": "編寫原始監視列表",
-       "unknown_extension_tag": "伓認得嗰擴展標籤 \"$1\"",
        "duplicate-defaultsort": "'''警告:'''預設嗰排序鍵 \"$2\" 覆蓋先頭嗰預設排序鍵 \"$1\"。",
        "version": "版本",
        "version-extensions": "裝正嗰插件",
        "version-parser-extensiontags": "解析器擴展標籤",
        "version-hook-name": "鉤子名",
        "version-hook-subscribedby": "訂閱人",
-       "version-version": "(版本 $1)",
+       "version-version": "($1)",
        "version-license": "許可證",
        "version-poweredby-credits": "箇隻 Wiki 由 '''[https://www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
        "version-software": "裝正嗰軟件",
index e4dcacc..3969199 100644 (file)
@@ -8,7 +8,8 @@
                        "Steafan31",
                        "לערי ריינהארט",
                        "아라",
-                       "GunChleoc"
+                       "GunChleoc",
+                       "Macofe"
                ]
        },
        "tog-underline": "Fo-loidhneadh nan ceanglaichean:",
@@ -36,7 +37,7 @@
        "tog-shownumberswatching": "Nochd àireamh nan cleachdaichean a tha a' cumail sùil air",
        "tog-oldsig": "An t-earr-sgrìobhadh làithreach:",
        "tog-fancysig": "Làimhsich an t-earr-sgrìobhadh mar wikitext (gun cheangal leis fhèin)",
-       "tog-uselivepreview": "Cleachd an ro-shealladh beò (deuchainneach)",
+       "tog-uselivepreview": "Cleachd an ro-shealladh beò",
        "tog-forceeditsummary": "Cuir ceist nuair a dh'fhàgas mi gearr-chunntas an deasachaidh bàn",
        "tog-watchlisthideown": "Falaich mo mhùthaidhean fhèin air mo chlàr-faire",
        "tog-watchlisthidebots": "Falaich mùthaidhean nam bot air mo chlàr-faire",
        "pool-queuefull": "Tha ciutha nam pròiseasan làn",
        "pool-errorunknown": "Mearachd neo-aithnichte",
        "pool-servererror": "Chan eil seirbheis cunntadh nan amar ri fhaighinn ($1).",
+       "poolcounter-usage-error": "Mearachd cleachdaidh: $1",
        "aboutsite": "Mu dhèidhinn {{SITENAME}}",
        "aboutpage": "Project:Mu dhèidhinn",
        "copyright": "Tha susbaint ri làimh fo $1 mur eil an caochladh 'ga innse.",
        "disclaimers": "Aithrisean-àichidh",
        "disclaimerpage": "Project:Aithris-àichidh choitcheann",
        "edithelp": "Cobhair deasachaidh",
+       "helppage-top-gethelp": "Cobhair",
        "mainpage": "Prìomh dhuilleag",
        "mainpage-description": "Prìomh dhuilleag",
        "policy-url": "Project:Poileasaidh",
        "readonly_lag": "Chaidh an stòr-dàta a ghlasadh leis fhèin fhad 's a tha frithealaichean nan stòr-dàta tràilleach air dheireadh a' mhaighstir",
        "internalerror": "Ion-mhearachd",
        "internalerror_info": "Ion-mhearachd: $1",
+       "internalerror-fatal-exception": "Eisgeachd mharbhtach dhen t-seòrsa \"$1\"",
        "filecopyerror": "Cha b' urrainn dhuinn lethbhreac dhen fhaidhle \"$1\" a chur gu \"$2\".",
        "filerenameerror": "Cha do ghabh ainm an fhaidhle \"$1\" atharrachadh gu \"$2\".",
        "filedeleteerror": "Cha do ghabh am faidhle \"$1\" a sguabadh às.",
        "directorycreateerror": "Cha do ghabh am pasgan \"$1\" a chruthachadh.",
+       "directoryreadonlyerror": "Tha am pasgan \"$1\" ri leughadh a-mhàin.",
+       "directorynotreadableerror": "Cha ghabh am pasgan \"$1\" leughadh.",
        "filenotfound": "Cha do ghabh am faidhle \"$1\" a lorg.",
        "unexpected": "Luach ris nach robh dùil: \"$1\"=\"$2\".",
        "formerror": "Mearachd: cha do ghabh am foirm a chur a-null",
        "viewsourcetext": "'S urrainn dhut coimhead air tùs na duilleige seo 's lethbhreac a dhèanamh dheth:",
        "viewyourtext": "'S urrainn dhut coimhead air <strong>na dheasaich thu</strong> 's lethbhreac a dhèanamh dheth air an duilleag seo:",
        "protectedinterface": "Bheir an duilleag seo dhut teacsa eadar-aghaidh airson a' bhathar-bhog air an uicidh seo 's chaidh a ghlasadh gus casg a chur air mì-chleachdadh. Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
-       "editinginterface": "<strong>Rabhadh:</strong> Tha thu a' deasachadh duilleag a tha 'ga chleachdadh a chum teacsa eadar-aghaidh a sholar airson a' bhathar-bhog.\nMa dh'atharraicheas tu an duilleag seo, bidh buaidh ann air coltas na h-eadar-aghaidh mar a chì càch e air an uicidh seo.\nGus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
+       "editinginterface": "<strong>Rabhadh:</strong> Tha thu a' deasachadh duilleag a tha 'ga chleachdadh a chum teacsa eadar-aghaidh a sholar airson a' bhathar-bhog.\nMa dh'atharraicheas tu an duilleag seo, bidh buaidh ann air coltas na h-eadar-aghaidh mar a chì càch e air an uicidh seo.",
+       "translateinterface": "Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], am pròiseact eadar-theangachaidh aig MediaWiki.",
        "cascadeprotected": "Chaidh an duilleag seo a dhìon o dheasachadh a chionn 's gu bheil e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a chaidh a dhìon 's an roghainn \"mar eas\" air:\n$2",
        "namespaceprotected": "Chan eil cead agad duilleagan san ainm-spàs <strong>$1</strong> a dheasachadh.",
        "customcssprotected": "Chan eil cead agad an duilleag CSS seo a dheasachadh a chionn 's gu bheil na roghainnean pearsanta aig cleachdaiche eile innte.",
        "anoneditwarning": "<strong>Rabhadh:</strong> Chan eil thu air logadh a-steach. Chithear an seòladh IP agad gu poblach ma nì thu deasachadh sam bith. Ma nì thu <strong>[$1 logadh a-steach]</strong> no ma <strong>[$2 chruthaicheas tu cunntas]</strong>, thèid d' ainm a chur ris na dheasaich thu 's gheibh thu buannachd a bharrachd às cuideachd.",
        "anonpreviewwarning": "<em>Chan eil thu air logadh a-steach. Ma nì thu sàbhaladh, thèid an seòladh IP agad a chlàradh ann an eachdraidh deasachadh na duilleige seo.</em>",
        "missingsummary": "<strong>Cuimhnich:</strong> Cha dug thu seachad gearr-chunntas air na dh'atharraich thu.\nMa bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais gearr-chunntais.",
+       "selfredirect": "<strong>Rabhadh:</strong> Tha thu ag ath-stiùireadh duilleag dha fhèin.\nDh'fhaoidte gun do shònraich thu an t-amas cearr airson an ath-stiùiridh no gu bheil thu a' deasachadh an duilleag cearr.\nMa nì thu briogadh air \"{{int:savearticle}}\" a-rithist,m thèid an ath-stiùireadh a chruthachadh co-dhiù.",
        "missingcommenttext": "Cuir a-steach beachd gu h-ìosal.",
        "missingcommentheader": "<strong>Cuimhnich:</strong> Cha dug thu seachad cuspair/ceann airson a' bheachd seo.\nMa bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais.",
        "summary-preview": "Ro-shealladh a' ghearr-chunntais:",
        "content-model-text": "teacsa lom",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-model-json": "JSON",
+       "content-json-empty-object": "Oibseact falamh",
+       "content-json-empty-array": "Arraigh fhalamh",
+       "duplicate-args-category": "Duilleagan a chleachdas argamaidean dùblaichte ann an gairm teamplaid",
+       "duplicate-args-category-desc": "Tha gairmean teamplaid sa bheil argamaidean dùblaichte air an duilleag seo, can <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> no <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "<strong>Rabhadh:</strong> Tha cus gairmean a' pharsair cosgail san duilleag seo.\n\nBu chòir nas lugha na $2 {{PLURAL:$2|ghairm|ghairm|gairmean|gairm}} a bhith ann ach tha $1 {{PLURAL:$1|ghairm|ghairm|gairmean|gairm}} ann.",
        "expensive-parserfunction-category": "Duilleagan le cus expensive parser function calls",
        "post-expand-template-inclusion-warning": "<strong>Rabhadh:</strong> Tha meud na teamplaide ro mhòr.\nCha dèid cuid dhith a ghabhail a-steach.",
        "history-feed-empty": "Chan eil an duilleag a dh'iarr thu ann.\nDh'fhaoidte gun deach a sguabadh às an uicidh no gun deach ainm ùr a chur air.\nFeuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uicidh]]",
        "rev-deleted-comment": "(chaidh gearr-chunntas an deasachaidh a thoirt air falbh)",
        "rev-deleted-user": "(chaidh an t-ainm-cleachdaiche a thoirt air falbh)",
-       "rev-deleted-event": "(chaidh gnìomh an loga a thoirt air falbh)",
+       "rev-deleted-event": "(chaidh fiosrachadh an loga a thoirt air falbh)",
        "rev-deleted-user-contribs": "[chaidh an t-ainm-cleachdaiche no an seòladh IP a thoirt air falbh - chaidh an deasachadh fhalach o liosta na h-obrach]",
        "rev-deleted-text-permission": "Chaidh mùthadh na duilleige seo <strong>a sguabadh às</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
        "rev-suppressed-text-permission": "Chaidh mùthadh na duilleige seo <strong>a mhùchadh</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].",
        "revdelete-legend": "Suidhich cuingeachaidhean na faicsinneachd",
        "revdelete-hide-text": "Teacsa a' mhùthaidh",
        "revdelete-hide-image": "Falaich susbaint an fhaidhle",
-       "revdelete-hide-name": "Falaich an gnìomh agus an targaid",
+       "revdelete-hide-name": "Falaich an targaid agus na paramadairean",
        "revdelete-hide-comment": "Gearr-chunntas an deasachaidh",
        "revdelete-hide-user": "Ainm-cleachdaiche/seòladh IP an deasaiche",
        "revdelete-hide-restricted": "Mùch dàta o rianairean agus càch",
        "search-result-category-size": "{{PLURAL:$1|$1 bhall|$1 bhall|$1 bhuill|$1 ball}} ({{PLURAL:$2|$2 fho-roinn-seòrsa|$2 fho-roinn-seòrsa|$2 fo-roinnean-seòrsa|$2 fo-roinn-seòrsa}}, {{PLURAL:$3|$3 fhaidhle|$3 fhaidhle|$3 faidhlichean|$3 faidhle}})",
        "search-redirect": "(ag ath-sheòladh $1)",
        "search-section": "(earrann $1)",
+       "search-category": "(roinn-seòrsa $1)",
        "search-file-match": "(a' freagairt ri susbaint an fhaidhle)",
        "search-suggest": "An e na leanas a bha fa-near dhut: $1",
        "search-interwiki-caption": "Pròiseactan co-cheangailte",
        "prefs-personal": "Pròifil",
        "prefs-rc": "Mùthaidhean ùra",
        "prefs-watchlist": "An clàr-faire",
+       "prefs-editwatchlist": "Deasaich an clàr-faire",
+       "prefs-editwatchlist-label": "Deasaich na tha air a' chlàr-fhaire agad:",
+       "prefs-editwatchlist-edit": "Seall agus thoir air falbh tiotalan air a' chlàr-fhaire agad",
+       "prefs-editwatchlist-raw": "Deasaich còd a' chlàir-fhaire",
+       "prefs-editwatchlist-clear": "Glan an clàr-faire agad",
        "prefs-watchlist-days": "Co mheud latha a sheallar air a' chlàr-fhaire:",
        "prefs-watchlist-days-max": "$1 {{PLURAL:$1|latha|latha|làithean|latha}} air a' char as motha",
        "prefs-watchlist-edits": "An àireamh as motha de mhùthaidhean a thèid a shealltainn air a' chlàr-fhaire leudaichte:",
        "gender-female": "Deasaichidh i duilleagan na h-Uicipeid",
        "prefs-help-gender": "Cha leig thu leas an roghainn seo a shuidheachadh.\nCleachdaidh am bathar-bog an luach aice gus bruidhinn riut le d' ainm 's iomradh a thoirt ort gu càch leis a' ghnè ghramataigeach iomchaidh.\nBidh am fiosrachadh seo poblach.",
        "email": "Post-d:",
-       "prefs-help-realname": "Cha leig thu leas innse dè am fìor-ainm a tha ort.\nMa bheir thu seachad e, thèid seo a chleachdadh gus urram a thoirt dhut airson do chuid obrach.",
+       "prefs-help-realname": "Cha leig thu leas innse dè am fìor-ainm a tha ort.\nMa bheir thu seachad e, thèid a chleachdadh gus urram a thoirt dhut airson do chuid obrach.",
        "prefs-help-email": "Chan leig thu leas post-dealain a chur ann ach bidh feum air ma dhìochuimhnicheas tu am facal-faire agad 's ma dh'iarras tu fear ùr.",
        "prefs-help-email-others": "'S urrainn dhut leigeil le daoine eile post-dealain a chur thugad tro cheangal air duilleag a' chleachdaiche no deasbaireachd agad.\nChan fhaicear an seòladh fhèin nuair a chuireas cuideigin post-dealain thugad.",
        "prefs-help-email-required": "Tha feum air seòladh puist-d.",
        "right-protect": "Cead leibheilean an dìona atharrachadh 's duilleagan le dìon o bhith mar eas a dheasachadh",
        "right-editprotected": "Cead gus duilleagan le dìon \"{{int:protect-level-sysop}}\" a dheasachadh",
        "right-editsemiprotected": "Cead gus duilleagan le dìon \"{{int:protect-level-autoconfirmed}}\" a dheasachadh",
+       "right-editcontentmodel": "Deasaich modail susbaint duilleige",
        "right-editinterface": "Cead gus eadar-aghaidh nan cleachdaichean a dheasachadh",
        "right-editusercssjs": "Cead gus faidhlichean CSS 's JavaScript càich a dheasachadh",
        "right-editusercss": "Cead gus faidhlichean CSS càich a dheasachadh",
        "right-override-export-depth": "Cead gus duilleagan às-phortadh, a' gabhail a-seach duilleagan ceangailte suas ri doimhneachd de 5",
        "right-sendemail": "Cead gus puist-d a chur gu cleachdaichean eile",
        "right-passwordreset": "Cead gus puist-d ath-shuidheachadh nam facal-faire a shealltainn",
+       "right-managechangetags": "Cruthaich is toir air falbh [[Special:Tags|tagaichean]] on stòr-dàta",
        "newuserlogpage": "Loga cruthachadh nan cleachdaichean",
        "newuserlogpagetext": "Seo loga nan cleachdaichean a chaidh a chruthachadh.",
        "rightslog": "Loga ceadan a' chleachdaiche",
        "action-viewmywatchlist": "seall an clàr-faire agad",
        "action-viewmyprivateinfo": "seall am fiosrachadh prìobhaideach agad",
        "action-editmyprivateinfo": "deasaich am fiosrachadh prìobhaideach agad",
+       "action-editcontentmodel": "deasaich modail susbaint duilleige",
+       "action-managechangetags": "cruthaich is thoir air falbh tagaichean on stòr-dàta",
        "nchanges": "$1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}",
        "enhancedrc-since-last-visit": "$1 on tadhal mu dheireadh",
        "enhancedrc-history": "eachdraidh",
        "recentchanges": "Mùthaidhean ùra",
        "recentchanges-legend": "Roghainnean nam mùthaidhean ùra",
-       "recentchanges-summary": "Cum sùil air na mùthaidhean as ùire a nithear air an uicidh air an duilleag seo.",
+       "recentchanges-summary": "Tha an duilleag seo a’ cumail sùil air na mùthaidhean as ùire a rinneadh air an uicidh.",
        "recentchanges-noresult": "Cha fhreagair atharrachadh sam bith san ùine seo ris na cuspairean-deuchainn seo.",
        "recentchanges-feed-description": "Cum sùil air na mùthaidhean as ùire a nithear air an uicidh seo san inbhir seo.",
        "recentchanges-label-newpage": "Chruthaich thu duilleag ùr leis a sin",
        "uploaderror": "Mearachd leis an luchdadh suas",
        "upload-recreate-warning": "<strong>Rabhadh: Chaidh faidhle air a bheil an t-ainm seo a sguabadh às no a ghluasad.</strong>\n\nSeo dhut loga an sguabaidh às 's nan gluasad airson na duilleige seo:",
        "uploadtext": "Cleachd am foirm gu h-ìosal gus faidhlichean a luchdadh suas.\nGus na faidhlichean a chaidh a luchdadh suas roimhe a shealltainn no a lorg annta, rach gu [[Special:FileList|liosta nam faidhlichean air an luchdadh suas]], thèid (ath-)luchdaidhean suas a chur ri [[Special:Log/upload|loga nan luchdaidhean suas]] cuideachd 's na chaidh a sguabadh às ri [[Special:Log/delete|loga nan sguabaidhean às]].\n\nCleachd ceangal ann an aon dhe na cruthan seo gus faidhle a chur am broinn duilleige:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> gus an tionndadh slàn dhen fhaidhle a chleachdadh\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|teacsa alt]]</nowiki></code></strong> cus dreach a tha 200 piogsail a leud a chleachdadh a nochdas ann am bogsa air a' mharghan chlì le \"teacsa alt\" mar thuairisgeul\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> gus ceangal a dhèanamh ris an fhaidhle gu dìreach gun a bhith a' sealltainn an fhaidhle",
-       "upload-permitted": "Seòrsaichean faidhle a tha ceadaichte: $1.",
-       "upload-preferred": "Seòrsaichean faidhle as docha leinn: $1.",
-       "upload-prohibited": "Seòrsaichean faidhle nach eil ceadaichte: $1.",
+       "upload-permitted": "{{PLURAL:$2|1=seòrsa|seòrsaichean}} faidhle a tha ceadaichte: $1.",
+       "upload-preferred": "{{PLURAL:$2|1=seòrsa|seòrsaichean}} faidhle as docha leinn: $1.",
+       "upload-prohibited": "{{PLURAL:$2|1=seòrsa|seòrsaichean}} faidhle nach eil ceadaichte: $1.",
        "uploadlogpage": "Loga an luchdaidh suas",
        "uploadlogpagetext": "Chì thu na faidhlichean a chaidh a luchdadh suas o chionn goirid gu h-ìosal.\nSeall [[Special:NewFiles|gailearaidh nam faidhlichean ùra]] airson foir-shealladh nas lèirsinniche.",
        "filename": "Ainm-faidhle",
        "wlheader-enotif": "Tha brathan-naidheachd air a' phost-d an comas.",
        "wlheader-showupdated": "Tha clò <strong>trom</strong> air duilleagan a chaidh atharrachadh on turas mu dheireadh a thadhail thu orra.",
        "wlnote": "Chì thu gu h-ìosal {{PLURAL:$1|a' $1 mhùthadh|an $1 mhùthadh|na $1 mùthaidhean|am $1 mùthadh}} mu dheireadh san {{PLURAL:$2|$2 uair a thìde|$2 uair a thìde|$2 uairean a thìde|$2 uair a thìde}} mu dheireadh, mar a bha e $3, $4.",
-       "wlshowlast": "Seall na $1 uairean a thìde mu dheireadh $2 làithean mu dheireadh $3",
+       "wlshowlast": "Seall na $1 uairean a thìde mu dheireadh $2 làithean mu dheireadh",
        "watchlist-options": "Roghainnean mo chlàir-faire",
        "watching": "'Ga chur air a' chlàr-fhaire...",
        "unwatching": "A' toirt far a' chlàir-fhaire...",
        "deleteprotected": "Chan urrainn dhut an duilleag seo a sguabadh às on a chaidh a dìon.",
        "deleting-backlinks-warning": "'''Rabhadh:''' Tha [[Special:WhatLinksHere/{{FULLPAGENAME}}|duilleag eile]] a' ceangal ris an duilleag a tha thu airson sguabadh às no 'ga gabhail a-steach 'na h-iomradh.",
        "rollback": "Roilig atharraichean air ais",
-       "rollback_short": "Roladh air ais",
        "rollbacklink": "roilig air ais",
        "rollbacklinkcount": "roilig $1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} air ais",
        "rollbacklinkcount-morethan": "roilig barrachd air $1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} air ais",
        "import-rootpage-nosubpage": "Cha cheadaich an t-ainm-spàs \"$1\" aig an duilleag freumha fo-duilleagan.",
        "importlogpage": "Loga an ion-phortachaidh",
        "importlogpagetext": "Ion-phortachadh rianachd de dhuilleagan aig a bheil eachdraidh mhùthaidhean o uicidhean eile.",
-       "import-logentry-upload": "chaidh [[$1]] ion-phortachadh le luchdadh suas faidhle",
        "import-logentry-upload-detail": "Chaidh $1 {{PLURAL:$1|mhùthadh|mùthadh|mùthaidhean|mùthadh}} ion-phortachadh",
-       "import-logentry-interwiki": "air fhaighinn 'na thar-uicidh $1",
        "import-logentry-interwiki-detail": "Chaidh $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} ion-phortachadh o $2",
        "javascripttest": "Deuchainn air JavaScript",
-       "javascripttest-title": "A' ruith deuchainnean aig $1",
        "javascripttest-pagetext-noframework": "Tha an duilleag seo glèidhte airson deuchainnean JavaScript a ruith.",
        "javascripttest-pagetext-unknownframework": "Framework deuchainn \"$1\" neo-aithnichte.",
        "javascripttest-pagetext-frameworks": "Feuch an tagh thu aon dhe na frameworks deuchainn seo: $1",
        "javascripttest-pagetext-skins": "Tagh craiceann airson ruith nan deuchainnean:",
        "javascripttest-qunit-intro": "Faic [$1 docamaideadh nan deuchainnean] air mediawiki.org.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
        "tooltip-pt-userpage": "An duilleag phearsanta agad",
        "tooltip-pt-anonuserpage": "Duilleag a' chleachdaiche airson an t-seòlaidh IP leis a bheil thu a' deasachadh",
        "tooltip-pt-mytalk": "Duilleag do dheasbaireachd",
        "logentry-upload-revert": "Luchdaich $1 $3 suas",
        "rightsnone": "(chan eil gin)",
        "revdelete-summary": "gearr-chunntas an deasachaidh",
+       "feedback-adding": "A' cur beachd ri duilleag...",
+       "feedback-bugcheck": "Taghta! Dearbhaich nach eil e air [$1 liosta nam bugaichean air a bheil sinn eòlach] mar-thà.",
+       "feedback-bugnew": "Dhearbh mi seo. Dèan aithris air buga ur",
        "feedback-bugornote": "Ma tha fiosrachadh mionaideach agad air duilgheadas teicnigeach, feuch an dèan thu [$1 aithris air buga].\nMur eil, 's urrainn dhut am foirm furasta a chleachdadh gu h-ìosal. Thèid do bheachd a chur ris an duilleag \"[$3 $2]\" is d' ainm-cleachdaiche a chur ris.",
-       "feedback-subject": "Cuspair:",
-       "feedback-message": "Teachdaireachd:",
        "feedback-cancel": "Sguir dheth",
-       "feedback-submit": "Cuir do bheachd a-null",
-       "feedback-adding": "A' cur beachd ri duilleag...",
+       "feedback-close": "Dèanta",
        "feedback-error1": "Mearachd: Chan aithnich sinn toradh an API",
        "feedback-error2": "Mearachd: Dh'fhàillig leis an deasachadh",
        "feedback-error3": "Mearachd: Cha d' fhuair sinn freagairt on API",
+       "feedback-message": "Teachdaireachd:",
+       "feedback-subject": "Cuspair:",
+       "feedback-submit": "Cuir a-null",
        "feedback-thanks": "Mòran taing! Chaidh do bheachd a phostadh air an duilleag \"[$2 $1]\".",
-       "feedback-close": "Dèanta",
-       "feedback-bugcheck": "Taghta! Dearbhaich nach eil e air [$1 liosta nam bugaichean air a bheil sinn eòlach] mar-thà.",
-       "feedback-bugnew": "Dhearbh mi seo. Dèan aithris air buga ur",
        "searchsuggest-search": "Lorg",
        "searchsuggest-containing": "anns a bheil...",
        "api-error-badaccess-groups": "Chan eil cead agad gus faidhlichean a luchdadh suas dhan uicidh seo.",
        "mediastatistics-header-office": "Oifis",
        "mediastatistics-header-text": "Teacsa",
        "mediastatistics-header-executable": "Faidhlichean so-ghnìomhaichte",
-       "mediastatistics-header-archive": "Fòrmatan dùmhlaichte"
+       "mediastatistics-header-archive": "Fòrmatan dùmhlaichte",
+       "special-characters-group-latin": "Laideann",
+       "special-characters-group-latinextended": "Laideann leudaichte",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Siombalan",
+       "special-characters-group-greek": "Greugais",
+       "special-characters-group-cyrillic": "Cirilis",
+       "special-characters-group-arabic": "Arabais",
+       "special-characters-group-persian": "Farsaidh",
+       "special-characters-group-hebrew": "Eabhra",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati"
 }
index 8096ff6..ce318c3 100644 (file)
@@ -19,7 +19,9 @@
                        "Josep Maria 15.",
                        "Fisterraeomar",
                        "Breogan2008",
-                       "VaiPolaSombra"
+                       "VaiPolaSombra",
+                       "Macofe",
+                       "Banjo"
                ]
        },
        "tog-underline": "Subliñar as ligazóns:",
        "disclaimers": "Advertencias",
        "disclaimerpage": "Project:Advertencia xeral",
        "edithelp": "Axuda de edición",
+       "helppage-top-gethelp": "Axuda",
        "mainpage": "Portada",
        "mainpage-description": "Portada",
        "policy-url": "Project:Políticas e normas",
        "portal": "Portal da comunidade",
        "portal-url": "Project:Portal da comunidade",
-       "privacy": "Política de protección de datos",
+       "privacy": "Política de privacidade",
        "privacypage": "Project:Política de protección de datos",
        "badaccess": "Erro de permisos",
        "badaccess-group0": "Non ten os permisos necesarios para executar a acción que solicitou.",
        "readonly_lag": "A base de datos bloqueouse automaticamente mentres os servidores levan a cabo a sincronización co servidor principal",
        "internalerror": "Erro interno",
        "internalerror_info": "Erro interno: $1",
+       "internalerror-fatal-exception": "Excepción grave de tipo \"$1\"",
        "filecopyerror": "Non se puido copiar o ficheiro \"$1\" en \"$2\".",
        "filerenameerror": "Non se puido cambiar o nome do ficheiro \"$1\" a \"$2\".",
        "filedeleteerror": "Non se deu borrado o ficheiro \"$1\".",
        "wrongpassword": "O contrasinal escrito é incorrecto.\nPor favor, insira outro.",
        "wrongpasswordempty": "O campo do contrasinal estaba en branco.\nPor favor, inténteo de novo.",
        "passwordtooshort": "Os contrasinais deben conter, como mínimo, {{PLURAL:$1|1 carácter|$1 caracteres}}.",
+       "passwordtoolong": "Os contrasinais non deben ser máis longo de {{PLURAL:$1|1 carácter|$1 caracteres}}.",
        "password-name-match": "O seu contrasinal debe ser diferente do seu nome de usuario.",
        "password-login-forbidden": "O uso deste nome de usuario e contrasinal foi prohibido.",
        "mailmypassword": "Restablecer o contrasinal",
        "showpreview": "Mostrar a vista previa",
        "showdiff": "Mostrar os cambios",
        "blankarticle": "<strong>Advertencia:</strong> A páxina que está a piques de crear está baleira.\nSe preme no botón \"{{int:savearticle}}\" outra vez, a páxina crearase sen contido.",
-       "anoneditwarning": "<strong>Aviso:</strong> Non accedeu ao sistema. O seu enderezo IP será rexistado no histórico de edicións desta páxina. Se <strong>[$1 accede ao sistema]</strong> ou <strong>[$2 crea unha conta]</strong>, as súas edicións serán rexistadas co seu nome de usuario, ademais doutros beneficios.",
+       "anoneditwarning": "<strong>Aviso:</strong> Non accedeu ao sistema. O seu enderezo IP será visible se fai algunha edición. Se <strong>[$1 accede ao sistema]</strong> ou <strong>[$2 crea unha conta]</strong>, as súas edicións serán atribuídas ao seu nome de usuario e obterá outros beneficios.",
        "anonpreviewwarning": "''Non accedeu ao sistema. Se garda a páxina, o seu enderezo IP quedará rexistrado no historial de edicións.''",
        "missingsummary": "'''Aviso:''' Esqueceu incluír o texto do campo resumo.\nSe preme en \"{{int:savearticle}}\" a súa edición gardarase sen ningunha descrición da edición.",
        "selfredirect": "<strong>Atención:</strong> Está redirecionando esta páxina a ela mesma. Vostede pode ter especificado a páxina incorrecta para a redireción, ou pode que estea a editar a páxina incorrecta. Se preme \"{{int:savearticle}}\" de novo, crearase a redireción de tódolos xeitos.",
        "missingcommentheader": "'''Aviso:''' Non escribiu ningún texto no asunto/título deste comentario.\nSe preme sobre \"{{int:savearticle}}\", a súa edición gardarase sen el.",
        "summary-preview": "Vista previa do resumo:",
        "subject-preview": "Vista previa do asunto/título:",
+       "previewerrortext": "Houbo un erro ó tentar previsualizar os cambios.",
        "blockedtitle": "O usuario está bloqueado",
        "blockedtext": "'''O seu nome de usuario ou enderezo IP foi bloqueado.'''\n\nO bloqueo foi realizado por $1.\nA razón que deu foi ''$2''.\n\n* Inicio do bloqueo: $8\n* Caducidade do bloqueo: $6\n* Pretendeuse bloquear: $7\n\nPode contactar con $1 ou con calquera outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir este bloqueo.\nNon pode empregar a característica \"Enviar un correo electrónico a este usuario\" a non ser que dispoña dun enderezo electrónico válido rexistrado nas súas [[Special:Preferences|preferencias de usuario]] e que o seu uso non fose bloqueado.\nO seu enderezo IP actual é $3 e o ID do bloqueo é #$5.\nPor favor, inclúa eses datos nas consultas que faga.",
        "autoblockedtext": "O seu enderezo IP foi bloqueado automaticamente porque foi empregado por outro usuario que foi bloqueado por $1.\nA razón que deu foi a seguinte:\n\n:''$2''\n\n* Inicio do bloqueo: $8\n* Caducidade do bloqueo: $6\n* Pretendeuse bloquear: $7\n\nPode contactar con $1 ou con calquera outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir este bloqueo.\n\nTeña en conta que non pode empregar a característica \"Enviar un correo electrónico a este usuario\" a non ser que dispoña dun enderezo electrónico válido rexistrado nas súas [[Special:Preferences|preferencias de usuario]] e e que o seu uso non fose bloqueado.\n\nO seu enderezo IP actual é $3 e o ID do bloqueo é #$5.\nPor favor, inclúa eses datos nas consultas que faga.",
        "notextmatches": "Non se atopou o texto en ningunha páxina",
        "prevn": "{{PLURAL:$1|$1}} previas",
        "nextn": "{{PLURAL:$1|$1}} seguintes",
+       "prev-page": "páxina anterior",
+       "next-page": "páxina seguinte",
        "prevn-title": "{{PLURAL:$1|O resultado anterior|Os anteriores $1 resultados}}",
        "nextn-title": "{{PLURAL:$1|O seguinte resultado|Os seguintes $1 resultados}}",
        "shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por páxina",
        "right-markbotedits": "Marcar as edicións desfeitas como edicións dun bot",
        "right-noratelimit": "Non ser afectado polos límites de frecuencia",
        "right-import": "Importar páxinas doutros wikis",
-       "right-importupload": "Importar páxinas desde un ficheiro cargado",
+       "right-importupload": "Importar páxinas desde un ficheiro subido",
        "right-patrol": "Marcar edicións como patrulladas",
        "right-autopatrol": "Ter as edicións marcadas automaticamente como patrulladas",
        "right-patrolmarks": "Ver os cambios que están marcados coma patrullados",
        "unusedimages": "Imaxes sen uso",
        "wantedcategories": "Categorías requiridas",
        "wantedpages": "Páxinas requiridas",
+       "wantedpages-summary": "Lista de páxinas inexistentes con máis ligazóns cara a elas, excluíndo as páxinas que só teñen redireccións cara a elas. Para consultar a lista de páxinas inexistentes que teñen redireccións cara a elas, véxase [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Título inválido fixado nos resultados: $1",
        "wantedfiles": "Ficheiros requiridos",
        "wantedfiletext-cat": "Os seguintes ficheiros están en uso, pero non existen. É posible que aparezan ficheiros de repositoroios externos, malia que existan. Calquera falso positivo estará <del>riscado</del>. Ademais, as páxinas que inclúen ficheiros que non existen están listadas en [[:$1]].",
        "emailccsubject": "Copia da súa mensaxe para $1: $2",
        "emailsent": "Mensaxe enviada",
        "emailsenttext": "A súa mensaxe de correo electrónico foi enviada.",
-       "emailuserfooter": "Este correo electrónico foi enviado por $1 a $2 mediante a función \"Enviar un correo electrónico a este usuario\" de {{SITENAME}}.",
+       "emailuserfooter": "Este correo electrónico foi enviado por $1 a $2 mediante a función \"{{int:emailpage}}\" en {{SITENAME}}.",
        "usermessage-summary": "Mensaxe deixada polo sistema.",
        "usermessage-editor": "Editor das mensaxes do sistema",
        "watchlist": "Lista de vixilancia",
        "thumbnail_image-missing": "Parece que falta o ficheiro: $1",
        "thumbnail_image-failure-limit": "Producíronse demasiados ($1 ou máis) intentos fallidos recentes de renderizar esta miniatura. Inténteo de novo máis tarde.",
        "import": "Importar páxinas",
-       "importinterwiki": "Importación transwiki",
-       "import-interwiki-text": "Seleccione o wiki e o título da páxina que queira importar.\nAs datas das revisións e os nomes dos editores manteranse.\nTodas as accións relacionadas coa importación entre wikis poden verse no [[Special:Log/import|rexistro de importacións]].",
+       "importinterwiki": "Importar doutro wiki",
+       "import-interwiki-text": "Seleccione o wiki e o título da páxina que queira importar.\nAs datas das revisións e os nomes dos editores manteranse.\nTodas as importacións doutros wikis poden consultarse no [[Special:Log/import|rexistro de importacións]].",
        "import-interwiki-sourcewiki": "Wiki de orixe:",
        "import-interwiki-sourcepage": "Páxina de orixe:",
        "import-interwiki-history": "Copiar todas as versións que hai no historial desta páxina",
        "importcantopen": "Non se pode abrir o ficheiro importado",
        "importbadinterwiki": "Ligazón interwiki incorrecta",
        "importsuccess": "A importación rematou!",
-       "importnosources": "Non se defininiu ningunha fonte de importación transwiki e os envíos directos dos historiais están desactivados.",
+       "importnosources": "Non se defininiu ningún wiki desde o que importar e os envíos directos dos historiais están desactivados.",
        "importnofile": "Non se enviou ningún ficheiro de importación.",
        "importuploaderrorsize": "Fallou o envío do ficheiro de importación. O ficheiro é máis grande que o tamaño de envío permitido.",
        "importuploaderrorpartial": "Fallou o envío do ficheiro de importación. O ficheiro só se enviou parcialmente.",
        "import-rootpage-nosubpage": "O espazo de nomes \"$1\" da páxina raíz non permite as subpáxinas.",
        "importlogpage": "Rexistro de importacións",
        "importlogpagetext": "Importacións administrativas de páxinas procedentes doutros wikis xunto co seu historial de edicións.",
-       "import-logentry-upload": "importou \"[[$1]]\" mediante a carga dun ficheiro",
        "import-logentry-upload-detail": "{{PLURAL:$1|Importouse $1 revisión|Importáronse $1 revisións}}",
-       "import-logentry-interwiki": "importou \"$1\"",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Importouse $1 revisión|Importáronse $1 revisións}} desde $2",
        "javascripttest": "Proba de JavaScript",
        "javascripttest-pagetext-noframework": "Esta páxina está reservada para executar probas do JavaScript.",
        "tags-create-invalid-chars": "Os nomes das etiquetas non poden conter nin comas (<code>,</code>) nin barras (<code>/</code>).",
        "tags-create-invalid-title-chars": "As páxinas non deben conter caracteres que non se poidan usar nos títulos das páxinas.",
        "tags-create-already-exists": "A páxina \"$1\" xa existe.",
+       "tags-create-warnings-above": "{{PLURAL:$2|Atopouse o seguinte erro|Atopáronse os seguintes erros}} ao intentar crear a etiqueta \"$1\":",
        "tags-create-warnings-below": "Desexa continuar creando a etiqueta?",
        "tags-delete-title": "Borrar etiqueta",
        "tags-delete-explanation-initial": "Está a piques de borrar a etiqueta \"$1\" da base de datos.",
+       "tags-delete-explanation-in-use": "Ha eliminarse {{PLURAL:$2|dunha revisión ou entrada|das $2 revisións e/ou entradas}} de rexistro {{PLURAL:$2|á|ás}} que actualmente se aplica.",
        "tags-delete-explanation-warning": "Esta acción é <strong>irreversible</strong> e nin sequera os administradores da base de datos poderán desfacela. Asegúrese de que é esta a etiqueta que desexa borrar.",
        "tags-delete-explanation-active": "<strong>A etiqueta \"$1\" segue activa e continuará aplicándose no futuro.</strong> Para evitalo, vaia ao(s) lugar(es) onde se establece a aplicación desta etiqueta e desactívea alí.",
        "tags-delete-reason": "Motivo:",
        "tags-delete-submit": "Eliminar esta etiqueta irreversiblemente",
        "tags-delete-not-allowed": "As etiquetas definidas por unha extensión non se poden borrar, agás que a extensión específica o permita.",
        "tags-delete-not-found": "A páxina \"$1\" non existe.",
-       "tags-delete-too-many-uses": "A etiqueta \"$1\" aplícase a máis de $2 {{PLURAL:$2|revision|revisions}}, polo que non pode borrarse.",
+       "tags-delete-too-many-uses": "A etiqueta \"$1\" aplícase a máis de $2 {{PLURAL:$2|revisión|revisións}}; isto significa que non se pode borrar.",
+       "tags-delete-warnings-after-delete": "A etiqueta \"$1\" borrouse correctamente; con todo, {{PLURAL:$2|atopouse o seguinte erro|atopáronse os seguintes erros}}:",
        "tags-activate-title": "Activar etiqueta",
        "tags-activate-question": "Está a piques de activar a etiqueta\"$1\".",
        "tags-activate-reason": "Motivo:",
        "revdelete-uname-unhid": "descubriu o nome de usuario",
        "revdelete-restricted": "aplicou restricións aos administradores",
        "revdelete-unrestricted": "eliminou restricións aos administradores",
+       "logentry-block-block": "$1 {{GENDER:$2|bloqueou}} a {{GENDER:$4|$3}} cun tempo de duración de $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueou}} a {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|cambiou}} as configuracións do bloqueo de {{GENDER:$4|$3}} cunha caducidade de $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|bloqueou}} a {{GENDER:$4|$3}} cun tempo de duración de $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|cambiou}} as configuracións do bloqueo de {{GENDER:$4|$3}} cunha caducidade de $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|importou}} $3 por medio da carga de ficheiros",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|importou}} $3 dende outra wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|fusionou}} \"$3\" con \"$4\" (revisións ata o $5)",
        "logentry-move-move": "$1 {{GENDER:$2|moveu}} a páxina \"$3\" a \"$4\"",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|moveu}} a páxina \"$3\" a \"$4\" sen deixar unha redirección",
        "log-name-managetags": "Rexistro de xestión de etiquetas",
        "log-description-managetags": "Esta páxina contén unha lista das tarefas de xestión relacionadas con [[Special:Tags|tags]]. No rexistro figuran só aquelas accións realizadas de forma manual por un administrador; pódense crear ou borrar etiquetas por medio do software wiki sen que se engada unha nova entrada ao rexistro.",
        "logentry-managetags-create": "$1 {{GENDER:$2|created}} a etiqueta \"$4\"",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|borrou}} a etiqueta \"$4\" (eliminouse de $5 {{PLURAL:$5|revisión ou entrada de rexistro|revisións e/ou entradas de rexistro}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|activou}} a etiqueta \"$4\" para o seu uso por usuarios e bots",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|desactivou}} a etiqueta \"$4\" para impedir o seu uso por usuarios e bots",
        "rightsnone": "(ningún)",
        "revdelete-summary": "o resumo de edición",
+       "feedback-adding": "Enviando os comentarios...",
+       "feedback-back": "Volver",
+       "feedback-bugcheck": "Perfecto! Comprobe que aínda non está entre os [$1 erros coñecidos].",
+       "feedback-bugnew": "Comprobeino. Informar deste novo erro",
        "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-subject": "Asunto:",
-       "feedback-message": "Mensaxe:",
        "feedback-cancel": "Cancelar",
-       "feedback-submit": "Enviar os comentarios",
-       "feedback-adding": "Enviando os comentarios...",
+       "feedback-close": "Feito",
+       "feedback-external-bug-report-button": "Gardar unha tarefa técnica",
+       "feedback-dialog-title": "Enviar opinión",
+       "feedback-dialog-intro": "Pode usar o formulario simple de abaixo para enviar a súa opinión. O seu comentario será engadido á páxina \"$1\", xunto co seu nome de usuario.",
+       "feedback-error-title": "Erro",
        "feedback-error1": "Erro: Resultado da API non recoñecido",
        "feedback-error2": "Erro: Fallo de edición",
        "feedback-error3": "Erro: Non hai resposta da API",
+       "feedback-error4": "Erro: Non foi posible enviar o seu comentario sobre o título selecionado",
+       "feedback-message": "Mensaxe:",
+       "feedback-subject": "Asunto:",
+       "feedback-submit": "Enviar",
+       "feedback-terms": "Comprendo que a miña información inclúe datos exactos do meu navegador e versión de sistema operativo e poderá ser compartida públicamente xunto aos meus comentarios.",
+       "feedback-termsofuse": "Concordo en proporcionar as miñas opinións de acordo cos Termos de Uso.",
        "feedback-thanks": "Grazas! Os seus comentarios publicáronse na páxina \"[$2 $1]\".",
-       "feedback-close": "Feito",
-       "feedback-bugcheck": "Perfecto! Comprobe que aínda non está entre os [$1 erros coñecidos].",
-       "feedback-bugnew": "Comprobeino. Informar deste novo erro",
+       "feedback-thanks-title": "Grazas!",
+       "feedback-useragent": "Axente de usuario:",
        "searchsuggest-search": "Procurar",
        "searchsuggest-containing": "que conteña...",
        "api-error-badaccess-groups": "Non ten os permisos necesarios para cargar ficheiros neste wiki.",
        "log-name-pagelang": "Rexistro de cambios de lingua",
        "log-description-pagelang": "Este é un rexistro dos cambios na lingua das páxinas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiou}} a lingua da páxina \"$3\" do $4 ao $5.",
-       "default-skin-not-found": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nA súa instalación parece incluír os aspectos da seguinte lista. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración dos aspectos] para obter información sobre como activalos e escoller o predeterminado.\n\n$2\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki.\n\n; Se acaba de anovar MediaWiki:\n: MediaWiki 1.24 e versións posteriores xa non activan aspectos de maneira automática (lea o [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual de descubrimento automático de aspectos]). Pode pegar as seguintes liñas no seu ficheiro <code>LocalSettings.php</code> para activar todos os aspectos instalados actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se acaba de modificar <code>LocalSettings.php</code>:\n: Asegúrese de que os nomes dos aspectos están escritos correctamente.",
+       "default-skin-not-found": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nA súa instalación parece incluír {{PLURAL:$4|o seguinte aspecto|os seguintes aspectos}}. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración dos aspectos] para obter información sobre como {{PLURAL:$4|activalo|activalos}} e escoller o predeterminado.\n\n$2\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki.\n\n; Se acaba de anovar MediaWiki:\n: MediaWiki 1.24 e versións posteriores xa non activan aspectos de maneira automática (lea o [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual de descubrimento automático de aspectos]). Pode pegar {{PLURAL:$5|a seguinte liña|as seguintes liñas}} no seu ficheiro <code>LocalSettings.php</code> para activar {{PLURAL:$5|o|todos os}} {{PLURAL:$5|aspecto instalado|aspectos instalados}} actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se acaba de modificar <code>LocalSettings.php</code>:\n: Asegúrese de que os nomes dos aspectos están escritos correctamente.",
        "default-skin-not-found-no-skins": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nNon ten aspectos instalados.\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración de aspectos] para obter información sobre como activar aspectos e escoller o aspecto predeterminado.",
        "default-skin-not-found-row-enabled": "* <code>$1</code>/$2 (activada)",
        "default-skin-not-found-row-disabled": "* <code>$1</code>/$2 ('''desactivada''')",
        "json-error-utf8": "Hai caracteres UTF-8 incorrectos, trátase probablemente dun problema de codificación.",
        "json-error-recursion": "Atopáronse unha ou máis referencias recursivas no valor para codificar.",
        "json-error-inf-or-nan": "Atopáronse un ou máis valores NAN ou INF no valor para codificar.",
-       "json-error-unsupported-type": "Indicouse un valor dun tipo que non se pode codificar."
+       "json-error-unsupported-type": "Indicouse un valor dun tipo que non se pode codificar.",
+       "headline-anchor-title": "Ligazón a esta sección",
+       "special-characters-group-latin": "Latín",
+       "special-characters-group-latinextended": "Latín estendido",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Símbolos",
+       "special-characters-group-greek": "Grego",
+       "special-characters-group-cyrillic": "Cirílico",
+       "special-characters-group-arabic": "Árabe",
+       "special-characters-group-arabicextended": "Árabe estendido",
+       "special-characters-group-persian": "Persa",
+       "special-characters-group-hebrew": "Hebreo",
+       "special-characters-group-bangla": "Bengalí",
+       "special-characters-group-tamil": "Támil",
+       "special-characters-group-telugu": "Telugú",
+       "special-characters-group-sinhala": "Cingalés",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanāgarī",
+       "special-characters-group-thai": "Tailandés",
+       "special-characters-group-lao": "Laosiano",
+       "special-characters-group-khmer": "Camboxano",
+       "special-characters-title-endash": "guión",
+       "special-characters-title-emdash": "raia",
+       "special-characters-title-minus": "signo menos"
 }
index 45ed4cd..4b99ef0 100644 (file)
        "deletereason-dropdown": "*Κοιναὶ αἰτίαι διαγραφῆς\n** Αἴτησις τοῦ δημιουργοῦ\n** Παραβίασις δικαιωμάτων\n** Βαρβαρότης",
        "delete-edit-reasonlist": "Μεταγράφειν τὰς αἰτίας διαγραφῆς",
        "rollback": "Ἀναστρέφειν μεταγραφάς",
-       "rollback_short": "Ἀναστροφή",
        "rollbacklink": "ἀναστροφή",
        "rollbackfailed": "Ἀναστροφὴ μὴ ἐπιτυχής",
        "cantrollback": "Μὴ δυνατὴ ἡ ἀναστροφὴ·\nὁ ὕστατος ἐρανιστὴς ἐστὶ μόνον δημιουργὸς τῆσδε τῆς δέλτου.",
        "watchlisttools-view": "Ὁρᾶν τὰς συναφεῖς μεταβολὰς",
        "watchlisttools-edit": "Ὁρᾶν τε καὶ μεταγράφειν τὰ ἐφορωμένα",
        "watchlisttools-raw": "Μεταγράφειν τὸν πρωτογενῆ κατάλογον ἐφορωμένων",
-       "unknown_extension_tag": "Ἄγνωτον σήμαντρον ἐπεκτάσεων \"$1\"",
        "duplicate-defaultsort": "Eἴδησις: Ἡ προκαθωρισμένη κλεὶς ταξινομήσεως \"$2\" ὑπερκαλύπτει προηγουμένην προκαθωρισμένην κλεῖδα ταξινομήσεως \"$1\".",
        "version": "Ἐπανόρθωμα",
        "version-extensions": "Ἐγκατεστημέναι ἐπεκτάσεις",
        "version-parser-function-hooks": "Ἀγγύλαι ἐνεργειῶν λεξιαναλυτικοῦ προγράμματος",
        "version-hook-name": "Ὄνομα ἀγκύλης",
        "version-hook-subscribedby": "Ὑπογεγραφυῖα ὑπὸ",
-       "version-version": "(Ἔκδοσις $1)",
+       "version-version": "($1)",
        "version-license": "Ἄδεια",
        "version-poweredby-others": "ἄλλα",
        "version-software": "Ἐγκατεστημένον λογισμικόν",
        "specialpages-group-wiki": "Βικι-δεδομένα καὶ στοιχεῖα",
        "specialpages-group-redirects": "Ἀναδιευθύνειν εἰδικὰς δέλτους",
        "specialpages-group-spam": "Ἐργαλεῖα κατὰ τῶν ἀνεπιθυμήτων διαγγελιῶν",
+       "specialpages-group-developer": "Ἐργαλεῖα ἀναπτυκτῶν",
        "blankpage": "Κενὴ δέλτος",
        "intentionallyblankpage": "Ἥδε ἡ δέλτος ἀφίεται ἐσκεμμένως κενὴ οὖσα χρήσιμος ὡς σημεῖον ἀναφορᾶς, κτλ.",
        "external_image_whitelist": " #Ἄφες τήνδε τὴν γραμμὴν ὥσπερ ἐστὶν ἐν τῷ παρόντι<pre>\n#Ὰπόθες ἅπαντα τὰ τεμάχια συνήθων ἐκφράσεων (μόνον τὸ μέρος τὸ μεταξὺ τῶν //) κάτωθεν\n#Αὗται ἀντιστοιχήσασαι μετὰ τῶν URL τῶν ἐξωτέρων (hotlinked) εἰκόνων ἔσονται\n#Αἱ ἀντιστιχοῦσαι, δεικνυμέναι ἔσονται ὡς εἰκόνες· εἰ δὲ μή, εἷς μόνον σύνδεσμος πρὸς τὴν εἰκόνα δείξεται\n#Αἱ γραμμαὶ αἱ ἀρχόμεναι ἐκ τοῦ # θεωροῦνται σχόλια\n#Ὅδε ὁ κατάλογος οὐ διακρίνεται εἰς κεφαλαῖα καὶ μικρὰ γράμματα\n\n#Ὰπόθες ἅπαντα τὰ τεμάχια συνήθων ἐκφράσεων ἄνωθεν τῆσδε τῆς γραμμῆς. Ἄφες τήνδε τὴν γραμμὴν ὡς ἔστι ἐν τῷ παρόντι</pre>",
index f06d070..dd47af1 100644 (file)
@@ -18,7 +18,8 @@
                        "The Evil IP address",
                        "Urhixidur",
                        "לערי ריינהארט",
-                       "80686"
+                       "80686",
+                       "아라"
                ]
        },
        "tog-underline": "Links unterstryche",
        "version-parser-function-hooks": "Parser-Funktione",
        "version-hook-name": "Schnittstellename",
        "version-hook-subscribedby": "Ufruef vu",
-       "version-version": "(Version $1)",
+       "version-version": "($1)",
        "version-license": "Lizänz",
        "version-ext-license": "Lizänz",
        "version-ext-colheader-name": "Erwyterig",
        "logentry-rights-autopromote": "$1 isch automatisch vu $4 zue $5 zuegordnet wore",
        "rightsnone": "(keini)",
        "revdelete-summary": "Zämmefassig",
+       "feedback-adding": "Ruggmäldig wird zur Syte dezuegfiegt …",
+       "feedback-bugcheck": "Schen! Bitte iberprief no, eb s sich doderby nit um e scho [$1 bekannte Fähler] handlet.",
+       "feedback-bugnew": "Ich haa s iberprieft. Dr nej Fähler mälde.",
        "feedback-bugornote": "Wän Du detailliert e tächnisch Probläm witt bschryybe, no mäld bitte [$1 ne Fähler].\nSunscht chasch au s eifach Formular unte nutze. Dyy Kommentar wird, zämme mit Dyym Benutzername un dr Version vu Dyym Webbrowser un em Betribssyschtem, uf dr Syte „[$3 $2]“ zuegfiegt.",
-       "feedback-subject": "Beträff:",
-       "feedback-message": "Noochricht:",
        "feedback-cancel": "Abbräche",
-       "feedback-submit": "Ruggmäldig abschigge",
-       "feedback-adding": "Ruggmäldig wird zur Syte dezuegfiegt …",
+       "feedback-close": "Isch gmacht",
        "feedback-error1": "Fäälermäldig: Unbekannts Ergebniss vo de API",
        "feedback-error2": "Fääler: Bearbeitig fehlgschlo",
        "feedback-error3": "Fäälermäldig: Kei Antwort vo de API",
+       "feedback-message": "Noochricht:",
+       "feedback-subject": "Beträff:",
+       "feedback-submit": "Ruggmäldig abschigge",
        "feedback-thanks": "Dankschen. Dyy Ruckmäldig isch uf dr Syte „[$2 $1]“ gspycheret wore.",
-       "feedback-close": "Isch gmacht",
-       "feedback-bugcheck": "Schen! Bitte iberprief no, eb s sich doderby nit um e scho [$1 bekannte Fähler] handlet.",
-       "feedback-bugnew": "Ich haa s iberprieft. Dr nej Fähler mälde.",
        "searchsuggest-search": "Suechi",
        "searchsuggest-containing": "din het s …",
        "api-error-badaccess-groups": "Du derfsch keini Dateie in des Wiki uffelade.",
index 1444e99..681e60d 100644 (file)
@@ -21,7 +21,9 @@
                        "RaviC",
                        "Sushant savla",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Vyom",
+                       "Macofe"
                ]
        },
        "tog-underline": "કડીઓની નીચે લીટી (અંડરલાઇન):",
@@ -48,7 +50,7 @@
        "tog-shownumberswatching": "ધ્યાન રાખતા સભ્યોની સંખ્યા બતાવો",
        "tog-oldsig": "હાલના હસ્તાક્ષર:",
        "tog-fancysig": "હસ્તાક્ષરનો વિકિલખાણ તરીકે ઉપયોગ કરો (સ્વચાલિત કડી વગર)",
-       "tog-uselivepreview": "જીવંત પૂર્વદર્શન વાપરો (પ્રાયોગીક)",
+       "tog-uselivepreview": "જીવંત પૂર્વદર્શન વાપરો",
        "tog-forceeditsummary": "કોરો 'ફેરફાર સારાંશ' ઉમેરતા પહેલા મને ચેતવો",
        "tog-watchlisthideown": "'મારી ધ્યાનસુચી'માં મે કરેલા ફેરફારો છુપાવો",
        "tog-watchlisthidebots": "ધ્યાનસુચીમાં બોટ દ્વારા થયેલા ફેરફાર સંતાડો.",
        "otherlanguages": "અન્ય ભાષાઓમાં",
        "redirectedfrom": "($1 થી અહીં વાળેલું)",
        "redirectpagesub": "પાનું અન્યત્ર વાળો",
+       "redirectto": "દિશાનિર્દેશિત",
        "lastmodifiedat": "આ પાનામાં છેલ્લો ફેરફાર $1ના રોજ $2 વાગ્યે થયો.",
        "viewcount": "આ પાનું {{PLURAL:$1|એક|$1}} વખત જોવામાં આવ્યું છે.",
        "protectedpage": "સંરક્ષિત પાનું",
        "pool-timeout": "સમય સમાપ્ત -  સ્થગિતતા પ્રતિક્ષીત",
        "pool-queuefull": "(Pool) કતાર પૂરી ભરેલી છે",
        "pool-errorunknown": "અજ્ઞાત ત્રુટિ",
+       "poolcounter-usage-error": "વપરાશ ક્ષતિ: $1",
        "aboutsite": "{{SITENAME}} વિષે",
        "aboutpage": "Project:વિષે",
        "copyright": "અલગથી ઉલ્લેખ ન કરાયો હોય ત્યાં સુધી માહિતી $1 હેઠળ ઉપલબ્ધ છે.",
        "gotaccountlink": "પ્રવેશ કરો",
        "userlogin-resetlink": "પોતાની પ્રવેશ માહિતી ભૂલી ગયા છો?",
        "userlogin-resetpassword-link": "તમારો પાસવર્ડ ભૂલી ગયા છો?",
+       "userlogin-helplink2": "પ્રવેશ કરવા માટે મદદ",
        "userlogin-loggedin": "તમે પહેલેથી {{GENDER:$1|$1}} તરીકે પ્રવેશ કરેલો જ છે.\nબીજા સભ્ય તરીકે પ્રવેશ કરવા માટે નીચેનું ફોર્મ વાપરો.",
        "userlogin-createanother": "બીજું ખાતું બનાવો",
        "createacct-emailrequired": "ઇમેલ સરનામું",
        "preview": "પૂર્વાવલોકન",
        "showpreview": "ઝલક દર્શાવો",
        "showdiff": "ફેરફારો દર્શાવો",
-       "anoneditwarning": "'''ચેતવણી:''' તમે તમારા સભ્ય નામથી પ્રવેશ કર્યો નથી.\nઆ પાનાનાં ઇતિહાસમાં તમારૂં આઇ.પી. (IP) એડ્રેસ નોંધવામાં આવશે.",
+       "anoneditwarning": "<strong>ચેતવણી:</strong> તમે તમારા સભ્ય નામથી પ્રવેશ કર્યો નથી.\nઆ પાનાનાં ઇતિહાસમાં તમારૂં આઇ.પી. (IP) એડ્રેસ નોંધવામાં આવશે અને તમારૂં આઈ.પી. લોકો જાહેર રીતે જોઈ શકશે. માટે <strong>[$1 પ્રવેશ કરો]</strong> અથવા તમે <strong>[$2 ખાતું બનાવો]</strong> તો ફેરફારો તમારા સભ્યનામ હેઠળ થશે અને અન્ય ફાયદાઓ પણ મળશે.",
        "anonpreviewwarning": "તમે સભ્યનામથી પ્રવેશ કર્યો નથી,આ પાનું ઈતિહાસમાંતમારા IP સરનામાના નામે  સાચવવામાં આવશે",
        "missingsummary": "'''ચેતવણી:''' તમે ફેરફારનો સારંશ નથી આપ્યો.\nજો તમે \"{{int:savearticle}}\"  પર ક્લીક કરશો તો તમરો ફેરફારા સારાઁશાવગરાસાચવવામાં આવશે",
        "missingcommenttext": "કૃપા કરી નીચે ટીપ્પણી લખો.",
        "currentrev": "હાલની આવૃત્તિ",
        "currentrev-asof": "$1એ જોઈ શકાતી હાલની આવૃત્તિ",
        "revisionasof": "$1 સુધીનાં પુનરાવર્તન",
-       "revision-info": "$2 દ્વારા $1 સુધીમાં કરવામાં આવેલાં ફેરફારો",
+       "revision-info": "{{GENDER:$6|$2}}$7 દ્વારા $1 સુધીમાં કરવામાં આવેલાં ફેરફારો",
        "previousrevision": "← જુના ફેરફારો",
        "nextrevision": "આ પછીનું પુનરાવર્તન→",
        "currentrevisionlink": "વર્તમાન આવૃત્તિ",
        "rev-deleted-event": "(લોગ ક્રિયા હટાવાઈ)",
        "rev-deleted-user-contribs": "[સભ્યનામ કે IP સરનામું  હટાવી દેવાયું છે - યોગદાનામાં આ ફેરફાર અદ્રશ્ય છે]",
        "rev-deleted-text-permission": "આ પુનરાવર્તન હટાવી દેવાયું છે\nઆની વિસ્તરીત માહિતી અહીં મળશે [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-suppressed-text-permission": "આ પાનાં પરનું પુનરાવર્તન <strong>છુપાવવામાં</strong> આવ્યું છે. તેની વધુ વિગત [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} છુપાવાયેલના લોગ] પરથી મળશે.",
        "rev-deleted-text-unhide": "આ પાનાની નવી આવૃત્તિ ''હટાવી છે '''.\nવિગતો શોધી શકાય છે [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].\nતમે હજુ પણ [$1 view this revision] આ આવૃત્તિ જોવા શકો છો જો તમે આગલ વધવા  માંગો તો.",
        "rev-suppressed-text-unhide": "આ પાના ફેરફારો ''' સંતાડવામાં ''' આવ્યાં છે.\nતેની વિગતો અહીં શોધી શકાય છે [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].\nતમે હજુ પણ [$1 view this revision] આ આવૃત્તિ જોઈશકો છો જો તમે આગળ વધવા માંગો તો.",
        "rev-deleted-text-view": "આ પાનું આવૃત્તિ''ગયેલ છે '''કાઢી.\nતમે તેને જોઈ શકે છે; વિગતો શોધી શકાય છે [{{fullurl: {{# વિશેષ:}} લોગ / કાઢી | પાનું = {{FULLPAGENAMEE}}}} કાઢી નાંખવાનું લોગ].",
        "revdelete-no-file": "વર્ણવેલી ફાઈલ અસ્તિત્વમાં નથી",
        "revdelete-show-file-confirm": "શું તમને ખાત્રી છે કેતમે $2 તારીખ $3 વાગ્યા સુધીના \"<nowiki>$1</nowiki>\" ફાઇલ ના ફેરફાર જોવા માંગો છો?",
        "revdelete-show-file-submit": "હા",
+       "revdelete-selected-text": "[[:$2]]: નું {{PLURAL:$1|Selected revision|પસંદ કરાયેલ પુનરાવર્તન}}",
        "logdelete-selected": "{{PLURAL:$1|પસંદગી કરેલ લોગ ઘટના | પસંદગી કરેલ લોગ ઘટનાઓ }}:",
        "revdelete-confirm": "કૃપયા પુષ્ટિ કરો કે તમે શું કરી રહ્યા છો તેની અને તેના પરિણામોની તમને જાણ છે અને તમે આ બધું  [[{{MediaWiki:Policy-url}}|the policy]] અ6તર્ગત કરી રહ્યાં છો.",
        "revdelete-suppress-text": "બળ પૂર્વક છુપાવવું \"માત્ર\" આજ સંજોગોમાં કરી શકાશે:\n* સંભવતઃ ભયાજનક માહિતી \n* અયોગ્ય નિજી માહિતી \n*: ''ઘરનું સરનામું અને ટેલિફોન નંબર, રાષ્ટ્રીય ઓળખ ક્રમાંકો વગેરે.''",
        "revdelete-unsuppress": "સમા કરાયેલા પુનરાવર્તનો પરના પ્રતિબંધ હટાવો",
        "revdelete-log": "કારણ:",
        "revdelete-submit": "પસંદ કરેલા {{PLURAL:$1|ફેરફાર|ફેરફારો}} પર લગાડો",
-       "revdelete-success": "પà«\81નરવરà«\8dતન àª¦à«\8dરશà«\8dયતાસફળતા પૂર્વક અદ્યતન બનાવાઈ",
+       "revdelete-success": "પà«\81નરાવરà«\8dતન àª¦à«\8dરશà«\8dયતા સફળતા પૂર્વક અદ્યતન બનાવાઈ",
        "revdelete-failure": "'''પુનરાવર્તનની દ્રશ્યતા બદલીન શકાઈ:'''\n$1",
-       "logdelete-success": "'''લોગની દ્રશ્યતા સફળતાપૂર્વક ગોઠવાઈ'''",
+       "logdelete-success": "<strong>લોગની દ્રશ્યતા સફળતાપૂર્વક ગોઠવાઈ</strong>",
        "logdelete-failure": "'''લોગની દ્રશ્યતા ગોઠવી ન શકાઈ :'''\n$1",
        "revdel-restore": "દૃષ્ટિક્ષમતા બદલો",
        "pagehist": "પાનાનો ઇતિહાસ",
        "license-nopreview": "(ઝલક મોજુદ નથી)",
        "upload_source_url": "(યોગ્ય, જાહેર URL માંથી તમે પસંદ કરેલ ફાઇલ)",
        "upload_source_file": "(તમારા કોમ્પ્યુટર પરની તમે પસંદ કરેલી એક ફાઇલ)",
+       "listfiles-delete": "દૂર કરો",
        "listfiles-summary": "આ વિશિષ્ટ પાનું બધી અપલોડ કરાયેલી ફાઈલો દર્શાવે છે.",
        "listfiles_search_for": "મિડિયા નામ શોધો:",
        "imgfile": "ફાઇલ",
        "randomincategory": "શ્રેણીમાં ગમે તે પાનું",
        "randomincategory-invalidcategory": "\"$1\" એ યોગ્ય શ્રેણી નામ નથી.",
        "randomincategory-nopages": "[[:Category:$1|$1]] વર્ગમાં કોઇ પાનું નથી.",
+       "randomincategory-category": "શ્રેણી:",
        "randomredirect": "દિશાહીન  નિર્દેશન",
        "randomredirect-nopages": "નામ સ્થળ \"$1\" માં કોઇ દિશા નિર્દેશન નથી",
        "statistics": "આંકડાકીય માહિતી",
        "booksources": "પુસ્તક સ્રોત",
        "booksources-search-legend": "પુસ્તક સ્રોત શોધો",
        "booksources-isbn": "આઇએસબીએન:",
+       "booksources-search": "શોધ",
        "booksources-text": "નીચે દર્શાવેલ યાદી એ કડીઓ બતાવે છે જેઓ નવા અને જૂના પુસ્તકો  વેચે છે , અને તમે માંગેલ વસ્તુ સંબંધિ વધુ મહિતી પણ ધરાવી શકે છે.",
        "booksources-invalid-isbn": "આપેલ ISBN વૈધ નથી લાગતો; મૂળ સ્રોતને ચકાસી, ભૂલ શોધી, ખરી માહિતી આપો.",
        "specialloguserlabel": "અભિનય:",
        "delete-toobig": "આ પાનાના ફેરફારોનો ઇતિહાસ ખૂબ લાંબો છે , $1 {{PLURAL:$1|ફેરફાર|ફેરફારો}}થી પણ વધારે.\n{{SITENAME}}ને અક્સ્માતે ખોરવાતું અટકાવવા આવા પાનાને હટાવવા પર પ્રતિબંધ છે.",
        "delete-warning-toobig": "આ પાનાનો ઇતિહાસ ઘણો લાંબો છે લગભગ  $1 {{PLURAL:$1|ફેરફાર|ફેરફારો}}.\nતેને ભૂંસતા {{SITENAME}}ના માહિતીસંચને લાગતા કામકાજ પર અસર થૈ શકે છે;\nસંભાળ પૂર્વક આગળ વધો.\n\n\nDeleting it may disrupt database operations of {{SITENAME}};",
        "rollback": "ફેરફારો ઉલટાવો",
-       "rollback_short": "ઉલટાવો",
        "rollbacklink": "પાછું વાળો",
        "rollbacklinkcount": "$1 {{PLURAL:$1|ફેરફાર પાછો વાળો|ફેરફારો પાછા વાળો}}",
        "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}} કરતાં ઓછું પાછું લાવો",
        "import-error-invalid": "પાનું \"$1\" આયાત થયું નથી કારણ કે તેનું નામ આ વિકિ માટે અયોગ્ય છે.",
        "importlogpage": "આયાત માહિતિ પત્રક",
        "importlogpagetext": "અન્ય  વિકિમાંથી ઈતિહાસ સહિત પાનાની પ્રબંધકીય આયાત",
-       "import-logentry-upload": "ફાઇલ ચઢાવનાર દ્વારા [[$1]] આયાત કરાઇ",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|પુનરાવર્તન|પુનરાવર્તનો}} આયાત કરેલ છે",
-       "import-logentry-interwiki": "આંતરવિકિ  $1",
        "import-logentry-interwiki-detail": "$2 માંથી આયાત કરેલ $1 {{PLURAL:$1|પુનરાવર્તન|પુનરાવર્તનો}}",
        "javascripttest": "જાવા સ્ક્રીપ્ટ પરીક્ષણ",
        "javascripttest-pagetext-noframework": "આ પાનું જાવા સ્ક્રીપ્ટ ચલાવવા આરક્ષિત છે.",
        "tooltip-pt-mycontris": "તમારા યોગદાનની યાદી",
        "tooltip-pt-login": "આપને પ્રવેશ કરવા ભલામણ કરવામાં આવે છે, જોકે તે આવશ્યક નથી",
        "tooltip-pt-logout": "બહાર નીકળો/લૉગ આઉટ કરો",
+       "tooltip-pt-createaccount": "તમને ખાતું બનાવીને પ્રવેશ કરવા માટે આમંત્રણ છે; તેમ કરવું જોકે, જરૂરી નથી.",
        "tooltip-ca-talk": "અનુક્રમણિકાનાં પાના વિષે ચર્ચા",
        "tooltip-ca-edit": "આપ આ પાનામાં ફેરફાર કરી શકો છો, કાર્ય સુરક્ષિત કરતાં પહેલાં 'ઝલક' બટન ઉપર ક્લિક કરીને જોઇ લેશો",
        "tooltip-ca-addsection": "ચર્ચાનો નવો મુદ્દો ઉમેરો.",
        "version-parser-function-hooks": "પદચ્છેદ કાર્ય ખૂંટા",
        "version-hook-name": "ખૂંટાનું નામ્",
        "version-hook-subscribedby": "દ્વ્રારા લાભાન્વીત",
-       "version-version": "(આવૃત્તિ $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[નામ નથી]",
        "version-license": "મીડિઆવિકિ લાયસન્સ",
        "version-ext-license": "લાયસન્સ",
        "logentry-delete-restore": "$1 {{GENDER:$2|પુનઃસંગ્રહ}} પાનું $3",
        "logentry-delete-event": "$1 એ {{PLURAL:$5|લૉગ ઘટના|$5 લૉગ ઘટનાઓ}} ની દ્રશ્યતા $3 પર {{GENDER:$2|બદલેલ}} છે: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|બદલેલ}} બદલાઈ ના દૃશ્યતા {{PLURAL:$5 | સુધારણા | $5 આવૃત્તિઓ}} $3 પાનાં પર: $4",
-       "logentry-delete-event-legacy": "$1 {{GENDER:$2|બદલેલ}} બદલાઈ $3 પર લોગ ઘટનાઓ દૃશ્યતા",
+       "logentry-delete-event-legacy": "$1 એ $3 પર ફેરફારની દૃશ્યતા બદલી",
        "logentry-delete-revision-legacy": "$1 {{GENDER:$2|બદલેલ}} બદલાઈ પાનાં પર આવૃત્તિઓની દૃશ્યતા $3",
        "logentry-suppress-delete": "$1 એ $3 પાનું {{GENDER:$2|દબાવ્યું}}",
-       "logentry-suppress-event": "$1  (છાની માહિતી) {{GENDER:$2|બદલેલ}} બદલાઈ {{PLURAL:$5 | લોગ ઘટના | $5 લોગ}} ની દ્રશ્યતા $3 : $4",
+       "logentry-suppress-event": "$1  ખાનગી રીતે {{GENDER:$2|દ્વારા માહિતીની દૃશ્યતા}} $3 : $4 પર બદલાઈ {{PLURAL:$5 | લોગ ઘટના | $5 લોગ}}",
        "logentry-suppress-revision": "$1 છાની માહિતી {{GENDER:$2|બદલેલ}} બદલાઈ ના દૃશ્યતા {{PLURAL:$5 | આવૃત્તિ એ | $5 આવૃત્તિઓ}}: $4 $3 પાનાં પર",
-       "logentry-suppress-event-legacy": "$1 ગુપ્ત {{GENDER:$2|બદલેલ}} બદલો $3 પર લોગ ઘટનાઓ દૃશ્યતા",
+       "logentry-suppress-event-legacy": "$1એ ગુપ્ત રીતે $3 પર લોગ ઘટનાઓની દૃશ્યતા બદલી",
        "logentry-suppress-revision-legacy": "$1 ગુપ્ત {{GENDER:$2|બદલેલ}} બદલાઈ પાનાં પર આવૃત્તિઓની દૃશ્યતા $3",
-       "revdelete-content-hid": "સામàª\97à«\8dરà«\80 àª\9bà«\81પાયà«\87લા",
-       "revdelete-summary-hid": "ફેરફાર સાર છુપાયેલા",
+       "revdelete-content-hid": "માહિતà«\80 àª\9bà«\81પાવà«\80",
+       "revdelete-summary-hid": "ફેરફારનો સારાંશ છુપાવ્યો",
        "revdelete-uname-hid": "વપરાશકર્તા નામ છુપાયેલા",
-       "revdelete-content-unhid": "સામàª\97à«\8dરી છુપાવેલ નથીં",
-       "revdelete-summary-unhid": "ફેરફાર સાર છુપાવેલ નથીં",
+       "revdelete-content-unhid": "માહિતી છુપાવેલ નથીં",
+       "revdelete-summary-unhid": "ફેરફાર સારાંશ છુપાવેલ નથીં",
        "revdelete-uname-unhid": "વપરાશકર્તા નામ છુપાવેલ નથીં",
        "revdelete-restricted": "પ્રબઁધકોના ફેરફાર કરવા પર પ્રતિબંધ મુકાયો",
        "revdelete-unrestricted": "પ્રબંધકોના ફેરફાર કરવા પર પ્રતિબંધ હટાવાયો.",
        "logentry-newusers-autocreate": "વપરાશકર્તા ખાતું $1 આપમેળે {{GENDER:$2|બનાવવામાં આવ્યું હતું}}",
        "rightsnone": "(કંઈ નહી)",
        "revdelete-summary": "સંપાદનનો સંક્ષિપ્ત અહેવાલ",
+       "feedback-adding": "પ્રતિભાવ આ પાના પર ઉમેરાઈ રહ્યો છે.",
+       "feedback-bugcheck": "સરસ! જરા જોઈ લેશો કે આ  પહેલેથી જ હાજર [$1 known bugs] નથીને?",
+       "feedback-bugnew": "મેં તપાસ્યું.  નવી ત્રુટીની જાણ કરો.",
        "feedback-bugornote": "જો તમે તકનીકી સમસ્યા વર્ણવવા માંગતા હોય તો  કૃપયા [$1 report a bug] એ બગ અહીં નોંધાવો.\nઅન્યથા, તમે નીચે આપેલ સરળ ફોર્મ વાપરી શકો છો. તમારા સભ્ય નામ અને કયું બ્રાઉઝર વાપરો છો તેની માહિતી સાથે, તમારી ટિપ્પણીનો \"[$3 $2]\" પાનામાં સમાવેશ કરાશે.",
-       "feedback-subject": "વિષય:",
-       "feedback-message": "સંદેશ",
        "feedback-cancel": "રદ કરો",
-       "feedback-submit": "પ્રતિભાવ આપો",
-       "feedback-adding": "પ્રતિભાવ આ પાના પર ઉમેરાઈ રહ્યો છે.",
+       "feedback-close": "સંપન્ન",
        "feedback-error1": "ક્ષતિ:API તરફથી અજાણ પરિણામ",
        "feedback-error2": "ક્ષતિ:ફેરફાર નિષ્ફળ",
        "feedback-error3": "ત્રુટી: API તરફથી કોઈ પ્રત્યુત્તર નથી",
+       "feedback-message": "સંદેશ",
+       "feedback-subject": "વિષય:",
+       "feedback-submit": "જમા કરો",
        "feedback-thanks": "આભર! તમારા પ્રતિભાવને \"[$2 $1]\" પાના પર મુકાયા છે.",
-       "feedback-close": "સંપન્ન",
-       "feedback-bugcheck": "સરસ! જરા જોઈ લેશો કે આ  પહેલેથી જ હાજર [$1 known bugs] નથીને?",
-       "feedback-bugnew": "મેં તપાસ્યું.  નવી ત્રુટીની જાણ કરો.",
        "searchsuggest-search": "શોધો",
        "searchsuggest-containing": "ધરાવતી...",
        "api-error-badaccess-groups": "આ વિકિ પર ફાઈલ ચઢાવવાની પરવાનગી તમને નથી.",
        "pagelang-language": "ભાષા",
        "pagelang-select-lang": "ભાષા પસંદ કરો",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (સક્રિય)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''નિષ્ક્રિય''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''નિષ્ક્રિય''')",
+       "special-characters-group-latin": "લેટિન",
+       "special-characters-group-latinextended": "લેટિન વિસ્તૃત",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "સંજ્ઞાઓ",
+       "special-characters-group-greek": "ગ્રીક",
+       "special-characters-group-cyrillic": "સીરિલિક",
+       "special-characters-group-arabic": "અરેબિક",
+       "special-characters-group-arabicextended": "અરેબિક વિસ્તૃત",
+       "special-characters-group-persian": "પર્સિયન",
+       "special-characters-group-hebrew": "હિબ્રૂ",
+       "special-characters-group-bangla": "બાંગ્લા",
+       "special-characters-group-tamil": "તામિલ",
+       "special-characters-group-telugu": "તેલુગુ",
+       "special-characters-group-sinhala": "સિંહાલા",
+       "special-characters-group-gujarati": "ગુજરાતી",
+       "special-characters-group-devanagari": "દેવનાગરી",
+       "special-characters-group-thai": "થાઈ",
+       "special-characters-group-lao": "લાઓ",
+       "special-characters-group-khmer": "ખ્મેર"
 }
index 8bfbdbd..b972f29 100644 (file)
        "deleteotherreason": "Fa elley/tooilley:",
        "deletereasonotherlist": "Fa elley",
        "deletereason-dropdown": "*Fa scryssey cadjin\n** Aghin yn ughtar\n** Brishey choip-chiart\n** Cragheydys",
-       "rollback_short": "Aahogherys",
        "rollbacklink": "aahogher",
        "editcomment": "V'eh \"''$1''\" giare-choontys y reaghey.",
        "protectlogpage": "Lioar choadee",
        "version": "Lhieggan",
        "version-specialpages": "Duillagyn er lheh",
        "version-other": "Elley",
-       "version-version": "(Lhieggan $1)",
+       "version-version": "($1)",
        "version-license": "Kiedoonys",
        "version-software-version": "Lhieggan",
        "fileduplicatesearch-filename": "Ennym y choadan:",
index e8169dd..65176b1 100644 (file)
@@ -6,7 +6,8 @@
                        "Kolonahe",
                        "Node ue",
                        "Singularity",
-                       "Xqt"
+                       "Xqt",
+                       "Macofe"
                ]
        },
        "tog-underline": "Kahalalo i nā loulou:",
        "htmlform-yes": "ʻAe",
        "htmlform-chosen-placeholder": "Koho i kekahi koho",
        "rightsnone": "(ʻaʻohe)",
-       "feedback-subject": "Kumunui:",
-       "feedback-message": "Pūlono:",
-       "feedback-cancel": "Hoʻōki",
-       "feedback-submit": "Hoʻouna i nā Manaʻo",
        "feedback-adding": "Ke hoʻohui nei i ka manaʻo i ka ʻaoʻao...",
+       "feedback-cancel": "Hoʻōki",
        "feedback-close": "Ua pau",
+       "feedback-message": "Pūlono:",
+       "feedback-subject": "Kumunui:",
+       "feedback-submit": "Waiho",
        "searchsuggest-search": "Huli",
        "api-error-unknown-code": "Hewa ʻikeʻole: \"$1\".",
        "api-error-unknown-warning": "Akahele ʻikeʻole: \"$1\".",
index 8cf9522..9e38e25 100644 (file)
        "disclaimers": "הבהרה משפטית",
        "disclaimerpage": "Project:הבהרה משפטית",
        "edithelp": "עזרה לעריכה",
+       "helppage-top-gethelp": "עזרה",
        "mainpage": "עמוד ראשי",
        "mainpage-description": "עמוד ראשי",
        "policy-url": "Project:נהלים",
        "readonly_lag": "בסיס הנתונים ננעל אוטומטית כדי לאפשר לבסיסי הנתונים המשניים להתעדכן מהבסיס הראשי.",
        "internalerror": "שגיאה פנימית",
        "internalerror_info": "שגיאה פנימית: $1",
+       "internalerror-fatal-exception": "שגיאה חמורה מסוג \"$1\"",
        "filecopyerror": "העתקת \"$1\" ל־\"$2\" נכשלה.",
        "filerenameerror": "שינוי השם של \"$1\" ל־\"$2\" נכשל.",
        "filedeleteerror": "מחיקת \"$1\" נכשלה.",
        "viewsource": "הצגת מקור",
        "viewsource-title": "הצגת המקור של $1",
        "actionthrottled": "הפעולה הוגבלה",
-       "actionthrottledtext": "×\9b×\90×\9eצע×\99 × ×\92×\93 ×¡×¤×\90×\9d, ×§×\99×\99×\9eת ×\9e×\92×\91×\9c×\94 ×¢×\9c ×\91×\99צ×\95×¢ ×¤×¢×\95×\9c×\94 ×\96×\95 ×¤×¢×\9e×\99×\9d ×¨×\91×\95ת ×\9e×\93×\99 ×\91×\96×\9e×\9f ×§×¦×¨, ×\95×\97ר×\92ת ×\9e×\94×\9e×\92×\91×\9c×\94 ×\94×\96×\95.\nנא לנסות שוב בעוד מספר דקות.",
+       "actionthrottledtext": "×\9b×\90×\9eצע×\99 × ×\92×\93 ×¡×¤×\90×\9d, ×§×\99×\99×\9eת ×\9e×\92×\91×\9c×\94 ×¢×\9c ×\91×\99צ×\95×¢ ×¤×¢×\95×\9c×\94 ×\96×\95 ×¤×¢×\9e×\99×\9d ×¨×\91×\95ת ×\9e×\93×\99 ×\91×\96×\9e×\9f ×§×¦×¨, ×\95×\97ר×\92ת ×\9e×\94×\9e×\92×\91×\9c×\94 ×\94×\96×\90ת.\nנא לנסות שוב בעוד מספר דקות.",
        "protectedpagetext": "דף זה מוגן כדי למנוע עריכה ופעולות אחרות.",
        "viewsourcetext": "באפשרותך לצפות בטקסט המקור של הדף ולהעתיקו:",
        "viewyourtext": "באפשרותך לצפות בטקסט המקור של <strong>העריכות שלך</strong> בדף הזה ולהעתיקו:",
        "invalidtitle-knownnamespace": "כותרת בלתי־תקינה עם מרחב השם \"$2\" ושם דף \"$3\"",
        "invalidtitle-unknownnamespace": "כותרת בלתי־תקינה עם מרחב שם בלתי־ידוע מספר $1 ושם דף \"$2\"",
        "exception-nologin": "לא בחשבון",
-       "exception-nologin-text": "×\90× ×\90 ×\94×\99×\9bנס×\95 ×\9c×\97ש×\91×\95×\9f ×\9b×\93×\99 ×\9cר×\90×\95ת ×\90ת ×\94×\93×£ ×\94×\96×\94 ×\90×\95 ×\9c×\91צע ×\90ת ×\94פע×\95×\9c×\94 ×\94×\96×\95.",
-       "exception-nologin-text-manual": "× ×\93רשת $1 ×\9b×\93×\99 ×\9cר×\90×\95ת ×\90ת ×\94×\93×£ ×\94×\96×\94 ×\90×\95 ×\9c×\91צע ×\90ת ×\94פע×\95×\9c×\94 ×\94×\96×\95.",
+       "exception-nologin-text": "× ×\93רשת ×\9b× ×\99ס×\94 ×\9c×\97ש×\91×\95×\9f ×\9b×\93×\99 ×\9cר×\90×\95ת ×\90ת ×\94×\93×£ ×\94×\96×\94 ×\90×\95 ×\9c×\91צע ×\90ת ×\94פע×\95×\9c×\94 ×\94×\96×\90ת.",
+       "exception-nologin-text-manual": "× ×\93רשת $1 ×\9b×\93×\99 ×\9cר×\90×\95ת ×\90ת ×\94×\93×£ ×\94×\96×\94 ×\90×\95 ×\9c×\91צע ×\90ת ×\94פע×\95×\9c×\94 ×\94×\96×\90ת.",
        "virus-badscanner": "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''",
        "virus-scanfailed": "הסריקה נכשלה (קוד: $1)",
        "virus-unknownscanner": "אנטי־וירוס בלתי ידוע:",
        "wrongpassword": "הסיסמה שהקלדתם שגויה.\nאנא נסו שוב.",
        "wrongpasswordempty": "הסיסמה שהקלדתם ריקה.\nאנא נסו שוב.",
        "passwordtooshort": "סיסמאות חייבות להיות באורך {{PLURAL:$1|תו אחד|$1 תווים}} לפחות.",
+       "passwordtoolong": "סיסמאות אינן יכולות להיות ארוכות {{PLURAL:$1|מתו אחד|מ־$1 תווים}}.",
        "password-name-match": "סיסמתך חייבת להיות שונה משם המשתמש שלך.",
        "password-login-forbidden": "השימוש בשם המשתמש והסיסמה האלה נאסר.",
        "mailmypassword": "איפוס סיסמה",
        "eauthentsent": "דוא\"ל אימות נשלח לכתובת הדוא\"ל שצוינה.\nלפני שדברי דוא\"ל אחרים יישלחו לחשבון הזה, יהיה עליכם לפעול לפי ההוראות בדוא\"ל, כדי לאשר שהחשבון אכן שייך לכם.",
        "throttled-mailpassword": "כבר נשלח דוא\"ל לאיפוס הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.\nכדי למנוע ניצול לרעה, יכול להישלח רק דוא\"ל אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.",
        "mailerror": "שגיאה בשליחת דואר: $1",
-       "acct_creation_throttle_hit": "×\9e×\91קר×\99×\9d ×\91×\90תר ×\96×\94 ×\93ר×\9a ×\9bת×\95×\91ת ×\94Ö¾IP ×©×\9c×\9b×\9d ×\9b×\91ר ×\99צר×\95 {{PLURAL:$1|×\97ש×\91×\95×\9f ×\90×\97×\93|$1 ×\97ש×\91×\95× ×\95ת}} ×\91×\99×\95×\9d ×\94×\90×\97ר×\95×\9f. ×\96×\94×\95 ×\94×\9eקס×\99×\9e×\95×\9d ×\94×\9e×\95תר ×\91תק×\95פ×\94 ×\96×\95.\n×\9cפ×\99×\9b×\9a, ×\9e×\91קר×\99×\9d ×\93ר×\9a ×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\95 לא יכולים ליצור חשבונות נוספים ברגע זה.",
+       "acct_creation_throttle_hit": "×\9e×\91קר×\99×\9d ×\91×\90תר ×\96×\94 ×\93ר×\9a ×\9bת×\95×\91ת ×\94Ö¾IP ×©×\9c×\9b×\9d ×\9b×\91ר ×\99צר×\95 {{PLURAL:$1|×\97ש×\91×\95×\9f ×\90×\97×\93|$1 ×\97ש×\91×\95× ×\95ת}} ×\91×\99×\95×\9d ×\94×\90×\97ר×\95×\9f. ×\96×\94×\95 ×\94×\9eקס×\99×\9e×\95×\9d ×\94×\9e×\95תר ×\91תק×\95פ×\94 ×\96×\95.\n×\9cפ×\99×\9b×\9a, ×\9e×\91קר×\99×\9d ×\93ר×\9a ×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\90ת לא יכולים ליצור חשבונות נוספים ברגע זה.",
        "emailauthenticated": "כתובת הדוא\"ל שלך אומתה ב־$3, $2.",
        "emailnotauthenticated": "כתובת הדוא\"ל שלכם עדיין לא אומתה.\nלא יישלח אליכם דוא\"ל עבור אף אחת מהתכונות הבאות.",
        "noemailprefs": "יש לציין כתובת דוא\"ל בהעדפות שלך כדי שתכונות אלה יעבדו.",
        "passwordreset-capture-help": "אם תסמנו תיבה זו, הדואר האלקטרוני (יחד עם הסיסמה הזמנית) יוצג לכם במקביל לשליחתו למשתמש.",
        "passwordreset-email": "כתובת דוא\"ל:",
        "passwordreset-emailtitle": "פרטי חשבון ב{{grammar:תחילית|{{SITENAME}}}}",
-       "passwordreset-emailtext-ip": "מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש איפוס של\nהסיסמה שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}\nשייכים לכתובת הדואר האלקטרוני הזו:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
-       "passwordreset-emailtext-user": "ה{{GENDER:$1|משתמש|משתמשת}} $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} {{GENDER:$1|ביקש|ביקשה}} איפוס של הסיסמה שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}}\n($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}} לכתובת הדואר האלקטרוני הזו:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
+       "passwordreset-emailtext-ip": "מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש איפוס של\nהסיסמה שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}}\nלכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
+       "passwordreset-emailtext-user": "{{GENDER:$1|המשתמש|המשתמשת}} $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} {{GENDER:$1|ביקש|ביקשה}} איפוס של הסיסמה שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}}\n($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}} לכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
        "passwordreset-emailelement": "שם משתמש: $1\nסיסמה זמנית: $2",
        "passwordreset-emailsent": "נשלח דואר אלקטרוני לאיפוס הסיסמה.",
        "passwordreset-emailsent-capture": "נשלח דואר אלקטרוני לאיפוס הסיסמה, והוא מוצג להלן.",
        "missingcommentheader": "<strong>תזכורת:</strong> לא הזנת נושא/כותרת להודעה זו.\nלחיצה חוזרת על הכפתור \"{{int:savearticle}}\" תגרום לעריכה שלך להישמר ללא נושא/כותרת.",
        "summary-preview": "תצוגה מקדימה של התקציר:",
        "subject-preview": "תצוגה מקדימה של הנושא/הכותרת:",
+       "previewerrortext": "אירעה שגיאה בעת הניסיון להציג תצוגה מקדימה של השינויים שלך.",
        "blockedtitle": "המשתמש חסום",
        "blockedtext": "'''שם המשתמש או כתובת ה־IP שלכם נחסמו.'''\n\nהחסימה בוצעה על ידי $1. הסיבה שניתנה לכך היא '''$2'''.\n\n* תחילת החסימה: $8\n* פקיעת החסימה: $6\n* החסימה שבוצעה: $7\n\nבאפשרותכם ליצור קשר עם $1 או עם כל אחד מ[[{{MediaWiki:Grouppage-sysop}}|מפעילי המערכת]] האחרים כדי לדון על החסימה.\nאינכם יכולים להשתמש בתכונת \"שליחת דואר אלקטרוני למשתמש זה\" אם לא ציינתם כתובת דוא\"ל תקפה ב[[Special:Preferences|העדפות המשתמש שלכם]] או אם נחסמתם משליחת דוא\"ל.\nכתובת ה־IP שלכם היא $3, ומספר החסימה שלכם הוא #$5.\nאנא ציינו את כל הפרטים הללו בכל פנייה למפעילי המערכת.",
        "autoblockedtext": "כתובת ה־IP שלכם נחסמה באופן אוטומטי כיוון שמשתמש אחר, שנחסם על־ידי $1, השתמש בה.\nהסיבה שניתנה לחסימה היא:\n\n:<em>$2</em>\n\n* תחילת החסימה: $8\n* פקיעת החסימה: $6\n* החסימה שבוצעה: $7\n\nבאפשרותכם ליצור קשר עם $1 או עם כל אחד מ[[{{MediaWiki:Grouppage-sysop}}|מפעילי המערכת]] האחרים כדי לדון בחסימה.\n\nבאפשרותכם להשתמש בתכונת \"שליחת דואר אלקטרוני למשתמש זה\", אלא אם לא ציינתם כתובת דוא\"ל תקינה ב[[Special:Preferences|העדפות המשתמש שלכם]] או אם נחסמתם משליחת דוא\"ל.\n\nכתובת ה־IP שלכם היא $3, ומספר החסימה שלכם הוא #$5.\nאנא ציינו את כל הפרטים הללו בכל פנייה למפעילי המערכת.",
        "session_fail_preview_html": "'''לא ניתן לבצע את עריכתם עקב אובדן מידע הכניסה.'''\n\nכיוון שבאתר זה אפשרות השימוש ב־HTML מאופשרת, התצוגה המקדימה מוסתרת כדי למנוע התקפות JavaScript.\n\n'''אם זהו ניסיון עריכה לגיטימי, אנא נסו שוב.'''\nאם זה לא עוזר, נסו [[Special:UserLogout|לצאת מהחשבון]] ולהיכנס אליו שנית.",
        "token_suffix_mismatch": "'''עריכתך נדחתה כיוון שהדפדפן שלך מחק את תווי הפיסוק באסימון העריכה.'''\nהעריכה נדחתה כדי למנוע בעיות כאלה בטקסט של הדף.\nלעתים התקלה מתרחשת עקב שימוש בשירות פרוקסי אנונימי פגום.",
        "edit_form_incomplete": "'''כמה חלקים מטופס העריכה לא הגיעו לשרת; בדקו היטב שעריכותיכם לא נפגעו ונסו שוב.'''",
-       "editing": "עריכת $1",
+       "editing": "עריכת הדף $1",
        "creating": "יצירת הדף $1",
-       "editingsection": "עריכת $1 (פסקה)",
-       "editingcomment": "עריכת $1 (פסקה חדשה)",
+       "editingsection": "עריכת הדף $1 (פסקה)",
+       "editingcomment": "עריכת הדף $1 (פסקה חדשה)",
        "editconflict": "התנגשות עריכה: $1",
        "explainconflict": "משתמש אחר שינה את הדף מאז שהתחלתם לערוך אותו.\nחלון העריכה העליון מכיל את הטקסט בדף כפי שהוא עתה.\nהשינויים שלכם מוצגים בחלון העריכה התחתון.\nעליכם למזג את השינויים שלכם לתוך הטקסט הקיים.\n'''רק''' הטקסט בחלון העריכה העליון יישמר כשתלחצו על \"{{int:savearticle}}\".",
        "yourtext": "הטקסט שלך",
        "cascadeprotectedwarning": "'''אזהרה:''' דף זה מוגן כך שרק מפעילי מערכת יכולים לערוך אותו, כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:",
        "titleprotectedwarning": "'''אזהרה: דף זה מוגן כך שדרושות [[Special:ListGroupRights|הרשאות מסוימות]] כדי ליצור אותו.'''\nפעולת היומן האחרונה מוצגת להלן:",
        "templatesused": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בדף זה:",
-       "templatesusedpreview": "{{PLURAL:$1|ת×\91× ×\99ת ×\94×\9e×\95פ×\99×¢×\94|ת×\91× ×\99×\95ת ×\94×\9e×\95פ×\99×¢×\95ת}} ×\91תצ×\95×\92×\94 ×\94×\9eק×\93×\99×\9e×\94 ×\94×\96×\95:",
+       "templatesusedpreview": "{{PLURAL:$1|ת×\91× ×\99ת ×\94×\9e×\95פ×\99×¢×\94|ת×\91× ×\99×\95ת ×\94×\9e×\95פ×\99×¢×\95ת}} ×\91תצ×\95×\92×\94 ×\94×\9eק×\93×\99×\9e×\94 ×\94×\96×\90ת:",
        "templatesusedsection": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בפסקה זו:",
        "template-protected": "(מוגנת)",
        "template-semiprotected": "(מוגנת חלקית)",
        "undo-summary": "ביטול גרסה $1 של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]])",
        "undo-summary-username-hidden": "ביטול גרסה $1 של משתמש מוסתר",
        "cantcreateaccounttitle": "לא ניתן ליצור את החשבון",
-       "cantcreateaccount-text": "×\90פשר×\95ת ×\99צ×\99רת ×\94×\97ש×\91×\95× ×\95ת ×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\95 ('''$1''') נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
+       "cantcreateaccount-text": "×\90פשר×\95ת ×\99צ×\99רת ×\94×\97ש×\91×\95× ×\95ת ×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\90ת (<strong>$1</strong>) נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
        "cantcreateaccount-range-text": "אפשרות יצירת החשבונות מכתובות IP בתוך הטווח '''$1''', כולל כתובת ה־IP שלך ('''$4'''), נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
        "viewpagelogs": "הצגת יומנים עבור דף זה",
        "nohistory": "אין היסטוריית שינויים עבור דף זה.",
        "rev-deleted-user": "(שם המשתמש הוסר)",
        "rev-deleted-event": "(פרטים מהיומן הוסרו)",
        "rev-deleted-user-contribs": "[שם המשתמש או כתובת ה־IP הוסרו – העריכה הוסתרה מדף התרומות]",
-       "rev-deleted-text-permission": "×\92רסת ×\94×\93×£ ×\94×\96×\95 <strong>נמחקה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
-       "rev-suppressed-text-permission": "×\92רסת ×\94×\93×£ ×\94×\96×\95 <strong>הועלמה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
-       "rev-deleted-text-unhide": "×\92רסת ×\94×\93×£ ×\94×\96×\95 <strong>× ×\9e×\97ק×\94</strong>.\n× ×\99ת×\9f ×\9c×\9eצ×\95×\90 ×¤×¨×\98×\99×\9d ×¢×\9c ×\9b×\9a ×\91[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ×\99×\95×\9e×\9f ×\94×\9e×\97×\99ק×\95ת].\n×\90ת×\9d ×¢×\93×\99×\99×\9f ×\99×\9b×\95×\9c×\99×\9d [$1 ×\9cצפ×\95ת ×\91×\92רס×\94 ×\94×\96×\95] אם ברצונכם להמשיך.",
-       "rev-suppressed-text-unhide": "×\92רסת ×\94×\93×£ ×\94×\96×\95 <strong>×\94×\95×¢×\9c×\9e×\94</strong>.\n× ×\99ת×\9f ×\9c×\9eצ×\95×\90 ×¤×¨×\98×\99×\9d ×¢×\9c ×\9b×\9a ×\91[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ×\99×\95×\9e×\9f ×\94×\94×¢×\9c×\9e×\95ת].\n×\90ת×\9d ×¢×\93×\99×\99×\9f ×\99×\9b×\95×\9c×\99×\9d [$1 ×\9cצפ×\95ת ×\91×\92רס×\94 ×\94×\96×\95] אם ברצונכם להמשיך.",
-       "rev-deleted-text-view": "×\92רסת ×\94×\93×£ ×\94×\96×\95 '''× ×\9e×\97ק×\94'''.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
-       "rev-suppressed-text-view": "×\92רסת ×\94×\93×£ ×\94×\96×\95 <strong>הועלמה</strong>.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
+       "rev-deleted-text-permission": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>נמחקה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
+       "rev-suppressed-text-permission": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>הועלמה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
+       "rev-deleted-text-unhide": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>× ×\9e×\97ק×\94</strong>.\n× ×\99ת×\9f ×\9c×\9eצ×\95×\90 ×¤×¨×\98×\99×\9d ×¢×\9c ×\9b×\9a ×\91[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ×\99×\95×\9e×\9f ×\94×\9e×\97×\99ק×\95ת].\n×\90ת×\9d ×¢×\93×\99×\99×\9f ×\99×\9b×\95×\9c×\99×\9d [$1 ×\9cצפ×\95ת ×\91×\92רס×\94 ×\94×\96×\90ת] אם ברצונכם להמשיך.",
+       "rev-suppressed-text-unhide": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>×\94×\95×¢×\9c×\9e×\94</strong>.\n× ×\99ת×\9f ×\9c×\9eצ×\95×\90 ×¤×¨×\98×\99×\9d ×¢×\9c ×\9b×\9a ×\91[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ×\99×\95×\9e×\9f ×\94×\94×¢×\9c×\9e×\95ת].\n×\90ת×\9d ×¢×\93×\99×\99×\9f ×\99×\9b×\95×\9c×\99×\9d [$1 ×\9cצפ×\95ת ×\91×\92רס×\94 ×\94×\96×\90ת] אם ברצונכם להמשיך.",
+       "rev-deleted-text-view": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>× ×\9e×\97ק×\94</strong>.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
+       "rev-suppressed-text-view": "×\92רסת ×\94×\93×£ ×\94×\96×\90ת <strong>הועלמה</strong>.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
        "rev-deleted-no-diff": "אינכם יכולים לצפות בהבדלים בין הגרסאות שציינתם משום שאחת מהן '''נמחקה'''.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
        "rev-suppressed-no-diff": "אינכם יכולים לצפות בהבדלים בין הגרסאות שציינתם משום שאחת מהן '''נמחקה'''.",
        "rev-deleted-unhide-diff": "אחת מהגרסאות שביקשתם להשוות '''נמחקה'''.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].\nאתם עדיין יכולים [$1 לצפות בהבדלים בין הגרסאות] אם ברצונכם להמשיך.",
        "notextmatches": "אין דפים עם תוכן תואם",
        "prevn": "{{PLURAL:$1|הקודם|$1 הקודמים}}",
        "nextn": "{{PLURAL:$1|הבא|$1 הבאים}}",
+       "prev-page": "לעמוד הקודם",
+       "next-page": "לעמוד הבא",
        "prevn-title": "{{PLURAL:$1|התוצאה הקודמת|$1 התוצאות הקודמות}}",
        "nextn-title": "{{PLURAL:$1|התוצאה הבאה|$1 התוצאות הבאות}}",
        "shown-title": "הצגת {{PLURAL:$1|תוצאה אחת|$1 תוצאות}} בדף",
        "unusedimages": "קבצים שאינם בשימוש",
        "wantedcategories": "קטגוריות מבוקשות",
        "wantedpages": "דפים מבוקשים",
+       "wantedpages-summary": "רשימת דפים לא קיימים שמספר הקישורים אליהם הוא הגדול ביותר, למעט דפים שרק הפניות מקשרות אליהם. לרשימת דפים לא קיימים שיש הפניות המקשרות אליהם, ר' [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "כותרת בלתי תקינה ברשימת התוצאות: $1",
        "wantedfiles": "קבצים מבוקשים",
        "wantedfiletext-cat": "הקבצים הבאים נמצאים בשימוש, אך אינם קיימים. ייתכן שקבצים ממאגרים חיצוניים יהיו רשומים אף על פי שהם קיימים, אך שגיאות כאלה יהיו <del>מחוקות</del>. בנוסף, דפים שמשתמשים בקבצים שאינם קיימים רשומים בדף [[:$1]].",
        "emailccsubject": "העתק של הודעתך למשתמש $1: $2",
        "emailsent": "הדואר נשלח",
        "emailsenttext": "הודעת הדואר האלקטרוני שלך נשלחה.",
-       "emailuserfooter": "דואר זה נשלח על־ידי $1 ל{{GRAMMAR:תחילית|$2}} באמצעות פעולת \"שליחת דואר אלקטרוני למשתמש זה\" באתר {{SITENAME}}.",
+       "emailuserfooter": "דואר זה נשלח על־ידי $1 ל{{GRAMMAR:תחילית|$2}} באמצעות פעולת \"{{int:emailpage}}\" ב{{GRAMMAR:תחילית|{{SITENAME}}}}.",
        "usermessage-summary": "השארת הודעת מערכת.",
        "usermessage-editor": "שולח הודעות המערכת",
        "watchlist": "רשימת המעקב",
        "sessionfailure": "נראה שיש בעיה בחיבורכם לאתר;\nפעולתכם בוטלה כאמצעי זהירות נגד התחזות לתקשורת ממחשבכם.\nאנא חזרו לדף הקודם, העלו אותו מחדש ונסו שוב.",
        "protectlogpage": "יומן הגנות",
        "protectlogtext": "להלן רשימה של שינויי ההגנה על דפים.\nראו גם את [[Special:ProtectedPages|רשימת הדפים המוגנים]] הנוכחית.",
-       "protectedarticle": "הפעיל הגנה על [[$1]]",
-       "modifiedarticleprotection": "שינה את רמת ההגנה של \"[[$1]]\"",
-       "unprotectedarticle": "ביטל את ההגנה על [[$1]]",
+       "protectedarticle": "הפעיל הגנה על הדף \"[[$1]]\"",
+       "modifiedarticleprotection": "שינה את רמת ההגנה של הדף \"[[$1]]\"",
+       "unprotectedarticle": "ביטל את ההגנה על הדף \"[[$1]]\"",
        "movedarticleprotection": "העביר את הגדרות ההגנה מ\"[[$2]]\" ל\"[[$1]]\"",
-       "protect-title": "שינוי רמת ההגנה של \"$1\"",
-       "protect-title-notallowed": "הצגת רמת ההגנה של \"$1\"",
+       "protect-title": "שינוי רמת ההגנה של הדף \"$1\"",
+       "protect-title-notallowed": "הצגת רמת ההגנה של הדף \"$1\"",
        "prot_1movedto2": "[[$1]] הועבר לשם [[$2]]",
        "protect-badnamespace-title": "מרחב שם שבו לא ניתן להגן על דפים",
        "protect-badnamespace-text": "לא ניתן להגן על דפים במרחב שם זה.",
        "thumbnail_image-type": "סוג התמונה אינו נתמך",
        "thumbnail_gd-library": "הגדרת הספריה GD אינה שלמה: חסרה הפונקציה $1",
        "thumbnail_image-missing": "נראה שהקובץ הבא חסר: $1",
-       "thumbnail_image-failure-limit": "×\94×\99×\95 ×\9c×\90×\97ר×\95× ×\94 × ×\99ס×\99×\95× ×\95ת ×¨×\91×\99×\9d ×\9e×\93×\99 ($1 ×\90×\95 ×\99×\95תר) ×\9c×\99צ×\95ר ×\90ת ×\94ת×\9e×\95× ×\94 ×\94×\9e×\9e×\95×\96ערת ×\94×\96×\95. ×\90× ×\95 × ×¡×\95 שוב מאוחר יותר.",
+       "thumbnail_image-failure-limit": "×\94×\99×\95 ×\9c×\90×\97ר×\95× ×\94 × ×\99ס×\99×\95× ×\95ת ×¨×\91×\99×\9d ×\9e×\93×\99 ($1 ×\90×\95 ×\99×\95תר) ×\9c×\99צ×\95ר ×\90ת ×\94ת×\9e×\95× ×\94 ×\94×\9e×\9e×\95×\96ערת ×\94×\96×\90ת. × ×\90 ×\9cנס×\95ת שוב מאוחר יותר.",
        "import": "ייבוא דפים",
-       "importinterwiki": "×\99×\99×\91×\95×\90 ×\91×\99×\9fÖ¾×\90תר×\99",
-       "import-interwiki-text": "×\90× ×\90 ×\91×\97ר×\95 ×\90תר ×\95×\99ק×\99 ×\95×\9b×\95תרת ×\93×£ ×\9c×\99×\99×\91×\95×\90.\nת×\90ר×\99×\9b×\99 ×\94ער×\99×\9b×\95ת ×\95ש×\9e×\95ת ×\94×¢×\95ר×\9b×\99×\9d ×\99×\99ש×\9eר×\95.\n×\9b×\9c ×¤×¢×\95×\9c×\95ת ×\94×\99×\99×\91×\95×\90 ×\94×\91×\99×\9fÖ¾×\90תר×\99 נשמרות ב[[Special:Log/import|יומן הייבוא]].",
+       "importinterwiki": "×\99×\99×\91×\95×\90 ×\9e×\90תר ×\95×\99ק×\99 ×\90×\97ר",
+       "import-interwiki-text": "×\90× ×\90 ×\91×\97ר×\95 ×\90תר ×\95×\99ק×\99 ×\95×\9b×\95תרת ×\93×£ ×\9c×\99×\99×\91×\95×\90.\nת×\90ר×\99×\9b×\99 ×\94ער×\99×\9b×\95ת ×\95ש×\9e×\95ת ×\94×¢×\95ר×\9b×\99×\9d ×\99×\99ש×\9eר×\95.\n×\9b×\9c ×¤×¢×\95×\9c×\95ת ×\94×\99×\99×\91×\95×\90 ×\9e×\90תר×\99 ×\95×\99ק×\99 ×\90×\97ר×\99×\9d נשמרות ב[[Special:Log/import|יומן הייבוא]].",
        "import-interwiki-sourcewiki": "אתר המקור:",
        "import-interwiki-sourcepage": "דף המקור:",
        "import-interwiki-history": "העתקת כל היסטוריית העריכות של דף זה",
        "importcantopen": "פתיחת קובץ הייבוא נכשלה",
        "importbadinterwiki": "קישור בינוויקי שגוי",
        "importsuccess": "הייבוא הושלם בהצלחה!",
-       "importnosources": "×\90×\99×\9f ×\9eק×\95ר×\95ת ×\9c×\99×\99×\91×\95×\90 ×\91×\99×\9fÖ¾×\90תר×\99, ×\95×\99×\99×\91×\95×\90 ×\99ש×\99ר ×©×\9c ×\93×£ ×¢×\9d ×\94×\99ס×\98×\95ר×\99×\94 ×\90×\99× ×\95 ×\9e×\90×\95פשר ×\9b×¢ת.",
+       "importnosources": "×\9c×\90 ×\94×\95×\92×\93ר×\95 ×\90תר×\99 ×\95×\99ק×\99 ×©×\9e×\94×\9d × ×\99ת×\9f ×\9c×\99×\99×\91×\90, ×\95×\90פשר×\95ת ×\94×\94×¢×\9c×\90×\94 ×\94×\99ש×\99ר×\94 ×©×\9c ×\93×£ ×¢×\9d ×\94×\99ס×\98×\95ר×\99×\94 ×\9e×\91×\95×\98×\9cת.",
        "importnofile": "לא הועלה קובץ ייבוא.",
        "importuploaderrorsize": "העלאת קובץ הייבוא נכשלה. הקובץ היה גדול יותר מגודל ההעלאה המותר.",
        "importuploaderrorpartial": "העלאת קובץ הייבוא נכשלה. הקובץ הועלה באופן חלקי בלבד.",
        "import-rootpage-nosubpage": "מרחב השם \"$1\" של דף הבסיס אינו מאפשר דפי־משנה.",
        "importlogpage": "יומן ייבוא",
        "importlogpagetext": "ייבוא מנהלי של דפים (כולל היסטוריית העריכות שלהם) מאתרי ויקי אחרים.",
-       "import-logentry-upload": "ייבא את [[$1]] באמצעות העלאת קובץ",
        "import-logentry-upload-detail": "{{PLURAL:$1|גרסה אחת יובאה|$1 גרסאות יובאו}}",
-       "import-logentry-interwiki": "ייבא את $1 בייבוא בין־אתרי",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|גרסה אחת של הדף $2 יובאה|$1 גרסאות של הדף $2 יובאו}}",
        "javascripttest": "בדיקת JavaScript",
        "javascripttest-pagetext-noframework": "דף זה שמור להרצת בדיקות JavaScript.",
        "confirmemail_success": "כתובת הדוא\"ל שלך אושרה.\nכעת באפשרותך [[Special:UserLogin|להיכנס לחשבון שלך]] וליהנות מהאתר.",
        "confirmemail_loggedin": "כתובת הדוא\"ל שלך אושרה כעת.",
        "confirmemail_subject": "קוד אימות דוא\"ל מ{{grammar:תחילית|{{SITENAME}}}}",
-       "confirmemail_body": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\95: $1),\nרש×\9d ×\90ת ×\94×\97ש×\91×\95×\9f \"$2\" ×¢×\9d ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×\94×\96×\95 ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם *לא* אתם רשמתם את החשבון, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
-       "confirmemail_body_changed": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\95: $1),\nש×\99× ×\94 ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c ×\94×\97ש×\91×\95×\9f \"$2\" ×\9c×\9bת×\95×\91ת ×\94×\96×\95 ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל מחדש את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
-       "confirmemail_body_set": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\95: $1),\n×\94×\92×\93×\99ר ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c ×\94×\97ש×\91×\95×\9f \"$2\" ×\9c×\9bת×\95×\91ת ×\94×\96×\95 ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
+       "confirmemail_body": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\90ת: $1),\nרש×\9d ×\90ת ×\94×\97ש×\91×\95×\9f \"$2\" ×¢×\9d ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×\94×\96×\90ת ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם *לא* אתם רשמתם את החשבון, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
+       "confirmemail_body_changed": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\90ת: $1),\nש×\99× ×\94 ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c ×\94×\97ש×\91×\95×\9f \"$2\" ×\9c×\9bת×\95×\91ת ×\94×\96×\90ת ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל מחדש את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
+       "confirmemail_body_set": "×\9e×\99ש×\94×\95, ×\9bנר×\90×\94 ×\90ת×\9d (×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\96×\90ת: $1),\n×\94×\92×\93×\99ר ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c ×\94×\97ש×\91×\95×\9f \"$2\" ×\9c×\9bת×\95×\91ת ×\94×\96×\90ת ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
        "confirmemail_invalidated": "אימות כתובת הדוא\"ל בוטל",
        "invalidateemail": "ביטול האימות של כתובת הדוא\"ל",
        "scarytranscludedisabled": "[הכללת דפים בין אתרים מבוטלת]",
        "revdelete-uname-unhid": "הסתרת שם המשתמש בוטלה",
        "revdelete-restricted": "נוספו הגבלות למפעילי מערכת",
        "revdelete-unrestricted": "הוסרו הגבלות ממפעילי מערכת",
+       "logentry-block-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|שחרר|שחררה}} את החסימה של {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 באמצעות העלאת קובץ",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 מאתר ויקי אחר",
        "logentry-merge-merge": "$1 {{GENDER:$2|מיזג|מיזגה}} את $3 לתוך $4 (גרסאות עד $5)",
        "logentry-move-move": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}}",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|ביטל|ביטלה}} את הפעלת התגית \"$4\" לשימוש על־ידי משתמשים ובוטים",
        "rightsnone": "(כלום)",
        "revdelete-summary": "תקציר העריכה",
+       "feedback-adding": "הוספת משוב לדף...",
+       "feedback-back": "חזרה",
+       "feedback-bugcheck": "מצוין! נא לבדוק שזה לא אחד מה[$1 באגים הידועים].",
+       "feedback-bugnew": "בדקתי. נא לדווח כבאג חדש",
        "feedback-bugornote": "אם אתם מוכנים לתאר בעיה טכנית בפרטים, אנא [$1 דווחו באג].\nאחרת, תוכלו להשתמש בטופס הפשוט שלהלן. הערתכם תתווסף לדף \"[$3 $2]\", יחד עם שם המשתמש שלכם.",
-       "feedback-subject": "נושא:",
-       "feedback-message": "הודעה:",
        "feedback-cancel": "ביטול",
-       "feedback-submit": "שליחת משוב",
-       "feedback-adding": "הוספת משוב לדף...",
+       "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",
+       "feedback-error4": "שגיאה: לא ניתן לשלוח הודעה לכותרת המשוב המבוקשת",
+       "feedback-message": "הודעה:",
+       "feedback-subject": "נושא:",
+       "feedback-submit": "שליחה",
+       "feedback-terms": "ידוע לי שפרטי ה־user agent שלי כוללים מידע על הגרסאות המדויקות של הדפדפן ומערכת ההפעלה שלי, ושהם יפורסמו בפומבי לצד המשוב ששלחתי.",
+       "feedback-termsofuse": "מוסכם עלי ששליחת המשוב היא בהתאם לתנאי השימוש.",
        "feedback-thanks": "תודה! המשוב שלך פורסם בדף \"[$2 $1]\".",
-       "feedback-close": "סיום",
-       "feedback-bugcheck": "מצוין! נא לבדוק שזה לא אחד מה[$1 באגים הידועים].",
-       "feedback-bugnew": "בדקתי. נא לדווח כבאג חדש",
+       "feedback-thanks-title": "תודה!",
+       "feedback-useragent": "User agent:",
        "searchsuggest-search": "חיפוש",
        "searchsuggest-containing": "כולל...",
        "api-error-badaccess-groups": "אינך מורשה להעלות קבצים לאתר הוויקי הזה.",
        "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נראה שההתקנה שלכם כוללת את העיצובים הבאים. ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל אותם ולבחור את עיצוב ברירת המחדל.\n\n$2\n\n; אם כרגע התקנתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* הורדת קבצי tar של עיצובים ספציפיים מ־[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* שכפול (clone) אחד מהמאגרים ב־<code dir=\"ltr\">mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם אם אתם מפתחים של מדיה־ויקי.\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 1.24 וגרסאות חדשות יותר כבר לא מפעילות עיצובים מותקנים באופן אוטומטי (ראו [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"גילוי אוטומטי של עיצובים\" במדריך]). תוכלו להעתיק את השורות הבאות לתוך הקובץ <code>LocalSettings.php</code> כדי להפעיל את כל העיצובים המותקנים כעת:\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 \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל {{PLURAL:$4|אותו|אותם ולקבוע את בררת המחדל}}.\n\n$2\n\n; אם כרגע התקנתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* הורדת קבצי tar של עיצובים ספציפיים מ־[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* שכפול (clone) אחד מהמאגרים ב־<code dir=\"ltr\">mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם אם אתם מפתחים של מדיה־ויקי.\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 1.24 וגרסאות חדשות יותר כבר לא מפעילות עיצובים מותקנים באופן אוטומטי (ראו [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"גילוי אוטומטי של עיצובים\" במדריך]). תוכלו להעתיק את {{PLURAL:$5|השורה הבאה|השורות הבאות}} לתוך הקובץ <code>LocalSettings.php</code> כדי להפעיל את {{PLURAL:$5|העיצוב שמותקן|כל העיצובים שמותקנים}} כעת.\n\n<pre dir=\"ltr\">$3</pre>\n\n; אם כרגע שיניתם את <code>LocalSettings.php</code>:\n: בדקו שנית האם עשיתם שגיאות הקלדה בשמות העיצובים.",
        "default-skin-not-found-no-skins": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nאין לכם עיצובים מותקנים.\n\n; אם כרגע התקנתם או שדרגתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. מדיה־ויקי 1.24 וגרסאות חדשות יותר אינן כוללות עיצובים ב־git repository הראשי. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה‏‏־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* הורדת קבצי tar של עיצובים ספציפיים מ־[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* שכפול (clone) אחד ממאגרים ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־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 ('''מבוטל''')",
        "json-error-utf8": "תווי UTF-8 פגומים, ייתכן שהקידוד שגוי",
        "json-error-recursion": "הפניה רקורסיבית אחת או יותר בערך שנועד לקידוד",
        "json-error-inf-or-nan": "ערך NAN או INF אחד או יותר בערך שנועד לקידוד",
-       "json-error-unsupported-type": "ניתן ערך מסוג שלא יכול להיות מקודד"
+       "json-error-unsupported-type": "ניתן ערך מסוג שלא יכול להיות מקודד",
+       "headline-anchor-title": "קישור לפסקה זו",
+       "special-characters-group-latin": "לטיני",
+       "special-characters-group-latinextended": "לטיני מורחב",
+       "special-characters-group-ipa": "אלפבית פונטי בינלאומי (IPA)",
+       "special-characters-group-symbols": "סימנים",
+       "special-characters-group-greek": "יווני",
+       "special-characters-group-cyrillic": "קירילי",
+       "special-characters-group-arabic": "ערבי",
+       "special-characters-group-arabicextended": "ערבי מורחב",
+       "special-characters-group-persian": "פרסית",
+       "special-characters-group-hebrew": "עברית",
+       "special-characters-group-bangla": "בנגלית",
+       "special-characters-group-tamil": "טמילית",
+       "special-characters-group-telugu": "טלוגו",
+       "special-characters-group-sinhala": "סינהלה",
+       "special-characters-group-gujarati": "גוג'רטית",
+       "special-characters-group-devanagari": "דוונגארי",
+       "special-characters-group-thai": "תאית",
+       "special-characters-group-lao": "לאו",
+       "special-characters-group-khmer": "קמרית",
+       "special-characters-title-endash": "קו מפריד",
+       "special-characters-title-emdash": "קו מפריד ארוך",
+       "special-characters-title-minus": "מינוס"
 }
index f9b6f59..b0ed3d2 100644 (file)
                        "रोहित रावत",
                        "아라",
                        "संजीव कुमार",
-                       "बिप्लब आनन्द"
+                       "बिप्लब आनन्द",
+                       "Phoenix303",
+                       "Steinsplitter",
+                       "Macofe",
+                       "Ankita-ks"
                ]
        },
        "tog-underline": "कड़ियाँ अधोरेखन:",
        "disclaimers": "अस्वीकरण",
        "disclaimerpage": "Project:साधारण अस्वीकरण",
        "edithelp": "सम्पादन सहायता",
+       "helppage-top-gethelp": "सहायता",
        "mainpage": "मुखपृष्ठ",
        "mainpage-description": "मुखपृष्ठ",
        "policy-url": "Project:नीति",
        "readonly_lag": "उपमुख्य डाटाबेस सर्वर मुख्य डाटाबेस सर्वर के बराबर अद्यातानीत होने तक मुख्य डाटाबेस सर्वर लॉक हो गया है।",
        "internalerror": "आन्तरिक त्रुटि",
        "internalerror_info": "आन्तरिक त्रुटि: $1",
+       "internalerror-fatal-exception": "प्रकार की गंभीर अपवाद \"$1\"",
        "filecopyerror": "\"$1\" फ़ाइल की \"$2\" पर प्रतिलिपि नहीं बन पाई।",
        "filerenameerror": "\"$1\" फ़ाइल का नाम बदलकर \"$2\" नहीं रखा जा सका।",
        "filedeleteerror": "\"$1\" फ़ाइल को हटाया नहीं जा सका।",
        "viewyourtext": "आप इस पृष्ठ में ''अपने सम्पादन'' का स्रोत देख सकते हैं और उसकी नकल उतार सकते हैं:",
        "protectedinterface": "यह पृष्ठ इस विकी के सॉफ़्टवेयर का इंटरफ़ेस पाठ देता है, और इसे गलत प्रयोग से बचाने के लिये सुरक्षित कर दिया गया है।\nसभी विकियों के लिए अनुवाद जोड़ने या बदलने के लिए कृपया मीडियाविकि के क्षेत्रीयकरण प्रकल्प [//translatewiki.net/ translatewiki.net] का प्रयोग करें।",
        "editinginterface": "<strong>चेतावनी:</strong> आप एक ऐसे पृष्ठ को बदल रहे हैं जो सॉफ़्टवेयर का इंटरफ़ेस पाठ प्रदान करता है।\nइस पृष्ठ को बदलने से अन्य सदस्यों को प्रदर्शित इंटरफ़ेस की शक्लोसूरत में बदलाव आएगा।",
+       "translateinterface": "सभी विकियों के लिए अनुवाद जोड़ने या बदलने के लिए मीडियाविकि क्षेत्रीयकरण परियोजना [//translatewiki.net/ translatewiki.net] का प्रयोग करें।",
        "cascadeprotected": "यह पृष्ठ सुरक्षित हैं, क्योंकी यह निम्नलिखित {{PLURAL:$1|पृष्ठ|पृष्ठों}} की सुरक्षा-सीढ़ी में समाविष्ट है:\n$2",
        "namespaceprotected": "आपको '''$1''' नामस्थान में समाविष्ट पृष्ठों को बदलने की अनुमति नहीं है।",
        "customcssprotected": "आपको इस CSS पृष्ठ को संपादित करने की अनुमति नहीं है, क्योंकि इसमें अन्य सदस्य की व्यक्तिगत सेटिंग्स शामिल हैं।",
        "wrongpassword": "आपने जो कूटशब्द लिखा है वह गलत है। कृपया पुनः प्रयास करें।",
        "wrongpasswordempty": "कूटशब्द खाली है।\nपुनः यत्न करें।",
        "passwordtooshort": "आपका कूटशब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षरों}} का होना चाहिये।",
+       "passwordtoolong": "पासवर्ड {{PLURAL:$1|1 वर्ण|$1 वर्णों}} से ज़्यादा लम्बे नही हो सकते।",
        "password-name-match": "आपका कूटशब्द आपके सदस्यनाम से भिन्न होना चाहिए।",
        "password-login-forbidden": "इस सदस्यनाम और कूटशब्द का उपयोग वर्जित है।",
        "mailmypassword": "कूटशब्द पुनःस्थापित करें",
        "createaccount-text": "आपके ई-मेल पते के लिये किसी ने {{SITENAME}} ($4) पर \"$2\" सदस्य नाम से \"$3\" कूटशब्द (पासवर्ड) सहित खाता खोला है।\nआपको लॉग इन कर के अपना कूटशब्द (पासवर्ड) तुरंत बदल लेना चाहिये।\n\nयदि यह खाता गलती से खोला गया है, तो आप इस मेसेज को नज़रंदाज़ कर सकते हैं।",
        "login-throttled": "आपने हाल ही में कई बार लॉग इन करने के प्रयास किये हैं।\nपुनः प्रयास करने से पहले कृपया $1 प्रतीक्षा करें।",
        "login-abort-generic": "आपका सत्रारम्भ असफल रहा - निष्फलित",
+       "login-migrated-generic": "आपका खाता माइग्रेट हो गया है और आपका सदस्यनाम इस विकी पर अब मौजूद नहीं है।",
        "loginlanguagelabel": "भाषा: $1",
        "suspicious-userlogout": "अपका लॉग आउट करने का अनुरोध अस्वीकृत कर दिया गया है क्योंकि ऐसा प्रतीत होता है कि यह किसी खराब ब्राउज़र या कैश करने वाली प्रॉक्सी द्वारा भेजा गया था।",
        "createacct-another-realname-tip": "असली नाम देना आवश्यक नहीं है।\nयदि आप प्रदान करते हैं तो इसका प्रयोग सदस्य के योगदानों के लिये उनको श्रेय (attribution) देने के लिये किया जायेगा।",
        "preview": "झलक",
        "showpreview": "झलक दिखाएँ",
        "showdiff": "बदलाव दिखाएँ",
-       "anoneditwarning": "'''सावधान:''' आपने सत्रारंभ नहीं किया है। इस पृष्ठ के संपादन इतिहास में आपका आइ॰पी पता अंकित किया जाएगा।",
+       "blankarticle": "<strong>चेतावनी:</strong> आप एक रिक्त पृष्ठ का निर्माण कर रहे हैं।\nयदि आप \"{{int:savearticle}}\" को पुनः दबाते हैं तो पृष्ठ को बिना किसी सामग्री के निर्मित किया जाएगा।",
+       "anoneditwarning": "<strong>सावधान:</strong> आपने सत्रारंभ नहीं किया है। यदि आप सम्पादन करते हैं तो इस पृष्ठ के संपादन इतिहास में आपका आइ॰पी पता अंकित किया जाएगा। यदि आप <strong>[$1 लॉगिन]</strong> करते हैं अथवा <strong>[$2 खाता बनाते हैं]</strong> तो अन्य सुविधाओं के साथ-साथ आपके संपादनों का श्रेय आपके सदस्यनाम पर दिया जाएगा।",
        "anonpreviewwarning": "''आप लॉग्ड इन नहीं हैं। पृष्ठ सहेजने पर आपका आइ॰पी पता इस पृष्ठ के इतिहास में दर्ज किया जायेगा।''",
        "missingsummary": "'''अनुस्मारक:''' आपने संपादन सारांश नहीं दिया है।\nअगर आप दुबारा \"{{int:savearticle}}\" पर क्लिक करते हैं तो आपका संपादन बिना सारांश के संजोया जायेगा।",
+       "selfredirect": "<strong>चेतावनी:</strong> आप खुद को इस पेज पुनः निर्देशित कर रहे हैं।\nआप अनुप्रेषित के लिए गलत लक्ष्य निर्दिष्ट हो सकता है, या आप गलत पृष्ठ का संपादन किया जा सकता है।\nआप फिर से \"{{int:savearticle}}\" क्लिक करते हैं, रीडायरेक्ट वैसे भी बनाया जाएगा।",
        "missingcommenttext": "कृपया नीचे टिप्पणी दें।",
        "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अपने किसी भी प्रश्न में कृपया यह सभी जानकारी भी शामिल करें।",
        "content-model-text": "सामान्य पाठ",
        "content-model-javascript": "जावास्क्रिप्ट",
        "content-model-css": "सी॰एस॰एस",
+       "content-json-empty-object": "रिक्त ऑब्जेक्ट",
+       "content-json-empty-array": "रिक्त ऐरे",
+       "duplicate-args-category": "टेम्पलेट कॉल में डुप्लिकेट तर्क का उपयोग करते हुए पन्ने",
+       "duplicate-args-category-desc": "पेज जैसे तर्कों के डुप्लिकेट का उपयोग करने वाले टेम्पलेट कॉल, जैसे <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ओैर <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''चेतावनी:''' इस पृष्ठ पर बहुत अधिक संख्या में कीमती पार्सर फ़ंक्शनों का प्रयोग किया गया है।\n\nइनका प्रयोग $2 से कम बार होना चाहिये, इस समय प्रयोग $1 बार {{PLURAL:$1|है|हैं}}।",
        "expensive-parserfunction-category": "कीमती पार्सर फ़ंक्शनों का अत्यधिक प्रयोग कर रहे पृष्ठ",
        "post-expand-template-inclusion-warning": "'''चेतावनी:''' साँचे जुड़ने की सीमा पार हो चुकी है।\nकुछ साँचे नहीं जुड़ेंगे।",
        "parser-template-recursion-depth-warning": "साँचा पुनरावर्ती गहराई सीमा पार ($1)",
        "language-converter-depth-warning": "भाषा कन्वर्टर गहराई सीमा से बाहर गया ( $1 )",
        "node-count-exceeded-category": "पृष्ठ जिनमें नोड-संख्या सीमा पार की गई है",
-       "node-count-exceeded-category-desc": "यह à¤\89न à¤ªà¥\83षà¥\8dठà¥\8bà¤\82 à¤\95à¥\80 à¤¶à¥\8dरà¥\87णà¥\80 à¤¹à¥\88 à¤\9cिनमà¥\87à¤\82 à¤¨à¥\8bड-सà¤\82à¤\96à¥\8dया à¤¸à¥\80मा à¤ªà¤¾à¤° à¤\95à¥\80 à¤\97यà¥\80 है।",
-       "node-count-exceeded-warning": "पृष्ठ ने नोड-संख्या पार की है",
+       "node-count-exceeded-category-desc": "यह à¤ªà¥\83षà¥\8dठ à¤¨à¥\8bड-सà¤\82à¤\96à¥\8dया à¤¸à¥\80मा à¤ªà¤¾à¤° à¤\95रता है।",
+       "node-count-exceeded-warning": "पृष्ठ ने नोड संख्या पार की है",
        "expansion-depth-exceeded-category": "पृष्ठ जिनमें विस्तार गहराई पार की गई है",
        "expansion-depth-exceeded-category-desc": "यह पृष्ठ विस्तार गहराई पार करता है।",
        "expansion-depth-exceeded-warning": "पृष्ठ में विस्तार गहराई पार की गई है",
        "history-feed-empty": "अनुरोधित पृष्ठ अस्तित्व में नहीं है।\nयह पृष्ठ या तो हटाया गया है या फिर इसका नाम बदल दिया गया है।\n[[Special:Search|विकि पर खोज]] का प्रयोग करें।",
        "rev-deleted-comment": "(सम्पादन सारांश हटाया)",
        "rev-deleted-user": "(सदस्यनाम हटाया)",
-       "rev-deleted-event": "(लà¥\89à¤\97 à¤\95ारà¥\8dय हटाया)",
+       "rev-deleted-event": "(लà¥\89à¤\97 à¤µà¤¿à¤µà¤°à¤£ हटाया)",
        "rev-deleted-user-contribs": "[सदस्यनाम अथवा आइ॰पी पता छुपाया गया - सम्पादन योगदानों में से छुपाया गया]",
        "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-selected-text": "[[:$2]] {{PLURAL:$1|का|के}} चयनित अवतरण:",
        "revdelete-selected-file": "[[:$2]] {{PLURAL:$1|का|के}} चयनित फ़ाइल अवतरण:",
        "logdelete-selected": "{{PLURAL:$1|चुना हुआ|चुने हुए}} लॉग इवेंट:",
+       "revdelete-text-text": "हटाए गए अवतरण पृष्ठ इतिहास में दर्शाए जाएँगे परन्तु उनकी सामग्री सार्वजनिक रूप से नहीं देखी जा सकेगी।",
+       "revdelete-text-file": "हटाए गए फ़ाइल अवतरण फ़ाइल इतिहास में दर्शाए जायेंगे परन्तु सामग्री सार्वजनिक रूप से नहीं देखी जा सकेगी।",
+       "logdelete-text": "हटाए गए प्रवेश घटनाओं अभी भी लॉग में दिखाई देंगे, लेकिन उनकी सामग्री के कुछ हिस्सों को सार्वजनिक करने के लिए दुर्गम हो जाएगा।",
+       "revdelete-text-others": "अन्य प्रशासकों अभी भी छिपा सामग्री का उपयोग करने के लिए और अतिरिक्त प्रतिबंध सेट कर रहे हैं, जब तक यह अ-नष्ट करने में सक्षम हो जाएगा।",
        "revdelete-confirm": "पुष्टि करें कि आप यह कार्य करना चाहते हैं, आप इसका परिणाम समझते हैं, और आप ये [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार कर रहे हैं।",
        "revdelete-suppress-text": "छिपाने का प्रयोग <strong>केवल</strong> इन परिस्थितियों में होना चाहिए:\n* संभावित अपमानजनक जानकारी\n* अनुपयुक्त निजी जानकारी\n*: <em>घर के पते व दूरभाष, राष्ट्रीय पहचान क्रमांक आदि।</em>",
        "revdelete-legend": "दृश्य प्रतिबंध निश्चित करें",
        "revdelete-hide-text": "अवरतण पाठ",
        "revdelete-hide-image": "फ़ाइल का पाठ छुपाएँ",
-       "revdelete-hide-name": "à¤\95à¥\8dरिया à¤\94र à¤²à¤\95à¥\8dषà¥\8dय को छुपाएँ",
+       "revdelete-hide-name": "लà¤\95à¥\8dषà¥\8dय à¤\94र à¤ªà¥\8dराà¤\9aलà¥\8bà¤\82 को छुपाएँ",
        "revdelete-hide-comment": "संपादन सारांश",
        "revdelete-hide-user": "संपादक का सदस्यनाम/आइ॰पी॰ पता",
        "revdelete-hide-restricted": "प्रबंधक सहित सभी सदस्यों से डाटा छुपाएँ",
        "mergehistory-empty": "कोई भी अवतरण एकत्रित नहीं कर सकते।",
        "mergehistory-success": "[[:$1]] {{PLURAL:$3|का|के}} $3 अवतरण [[:$2]] में एकत्रित कर {{PLURAL:$3|दिया गया है|दिये गए हैं}}।",
        "mergehistory-fail": "इतिहास एकत्रित नहीं कर सकते, कृपया पृष्ठ और समय की पुनः जाँच करें।",
+       "mergehistory-fail-toobig": "इतिहास विलय करना संभव नहीं है क्योंकि अवतरण सीमा $1 से अधिक {{PLURAL:$1|अवतरण|अवतरणों}} को स्थानांतरित करना होगा।",
        "mergehistory-no-source": "स्रोत पृष्ठ $1 मौजूद नहीं है।",
        "mergehistory-no-destination": "लक्ष्य पृष्ठ $1 मौजूद नहीं है।",
        "mergehistory-invalid-source": "स्रोत पृष्ठ का शीर्षक वैध होना आवश्यक है।",
        "notextmatches": "किसी भी पृष्ठ में यह सामग्री नहीं मिली",
        "prevn": "पिछले {{PLURAL:$1|$1}}",
        "nextn": "अगले {{PLURAL:$1|$1}}",
+       "prev-page": "पिछला पृष्ठ",
+       "next-page": "अगला पृष्ठ",
        "prevn-title": "{{PLURAL:$1|पिछला|पिछले}} $1 परिणाम",
        "nextn-title": "{{PLURAL:$1|अगला|अगले}} $1 परिणाम",
        "shown-title": "हर पृष्ठ पर $1 {{PLURAL:$1|परिणाम}} दिखाएँ",
        "search-result-category-size": "{{PLURAL:$1|$1 सदस्य}} ({{PLURAL:$2|$2 उपश्रेणी|$2 उपश्रेणियाँ}}, {{PLURAL:$3|$3 सञ्चिका|$3 सञ्चिकाएँ}})",
        "search-redirect": "($1 से पुनर्निर्देशित)",
        "search-section": "(अनुभाग $1)",
+       "search-category": "(श्रेणी $1)",
        "search-file-match": "(फ़ाइल सामग्री से मेल खाता है)",
        "search-suggest": "कहीं आपका मतलब $1 तो नहीं था?",
        "search-interwiki-caption": "अन्य प्रकल्प",
        "searchrelated": "सम्बंधित",
        "searchall": "सभी",
        "showingresults": "नीचे क्रमांक '''$2''' से प्रारंभ कर के अधिकतम '''$1''' परिणाम {{PLURAL:$1|दिखाया गया है|दिखाए गए हैं}}।",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> में से <strong>$1</strong> परिणाम|<strong>$3</strong> में से परिणाम <strong>$1 - $2</strong>}}",
        "search-nonefound": "आपकी खोज से मेल खाते कोई परिणाम नहीं मिले।",
        "powersearch-legend": "उन्नत खोज",
        "powersearch-ns": "नामस्थानों में खोजें:",
        "powersearch-togglelabel": "चुनें:",
        "powersearch-toggleall": "सभी",
        "powersearch-togglenone": "कोई भी नहीं",
+       "powersearch-remember": "चुनाव को भविष्य की खोजों के लिए याद रखें",
        "search-external": "बाहरी खोज",
        "searchdisabled": "{{SITENAME}} पर खोज अक्षम है।\nआप गूगल से खोज कर सकते हैं।\nध्यान रखें कि उनकी {{SITENAME}} सामग्री की सूची पुरानी हो सकती है।",
        "search-error": "खोजते समय निम्न त्रुटि उत्पन्न हुई है: $1",
        "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": "बढ़ाई हुई ध्यानसूची में दिखाने हेतु अधिकतम बदलाव:",
        "gender-female": "मैं सम्पादन करती हूँ।",
        "prefs-help-gender": "यह जानकारी देना वैकल्पिक है।\nयह सॉफ़्टवेयर में लिंग के आधार पर आपके लिए सही संबोधन हेतु प्रयुक्त होता है।\nयह जानकारी सार्वजनिक होगी।",
        "email": "ई-मेल",
-       "prefs-help-realname": "à¤\86पà¤\95ा à¤\85सलà¥\80 à¤¨à¤¾à¤® à¤¦à¥\87ना à¤\86वशà¥\8dयà¤\95 à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88।\nयदि à¤\86प à¤ªà¥\8dरदान à¤\95रतà¥\87 à¤¹à¥\88à¤\82 à¤¤à¥\8b à¤\87सà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97 à¤\86पà¤\95à¥\87 à¤¯à¥\8bà¤\97दानà¥\8bà¤\82 à¤\95à¥\87 à¤²à¤¿à¤¯à¥\87 à¤\86पà¤\95à¥\8b à¤¶à¥\8dरà¥\87य (attribution) à¤¦à¥\87नà¥\87 à¤\95à¥\87 à¤²à¤¿à¤¯à¥\87 à¤\95िया à¤\9cायà¥\87à¤\97ा।",
+       "prefs-help-realname": "असली नाम देना आवश्यक नहीं है।\nयदि आप प्रदान करते हैं तो इसका प्रयोग आपके योगदानों के लिये आपको श्रेय (attribution) देने के लिये किया जायेगा।",
        "prefs-help-email": "ई-मेल पता वैकल्पिक है, पर यदि आप अपना कूटशब्द भूल जाएँ तो इसके ज़रिए रीसेट किया जा सकता है।",
        "prefs-help-email-others": "आप अपनी पहचान उजागर किए बिना अन्य सदस्यों को अपने सदस्य या वार्ता पृष्ठ के द्वारा स्वयं से सम्पर्क करने दे सकते हैं।",
        "prefs-help-email-required": "ई-मेल पता आवश्यक है।",
        "prefs-tokenwatchlist": "टोकन",
        "prefs-diffs": "अंतर",
        "prefs-help-prefershttps": "यह वरीयता आपके अगले लॉगिन पर प्रभावी होगी।",
+       "prefswarning-warning": "आपने अपनी वरीयताओं में एैसे परिवर्तन किए हैं जिन्हे अभी तक संचित नहीं किया गया है। अगर अाप \"$1\" पर बिना क्लिक किये इस पृष्ठ को छोड़ देते हैं तो अापकी वरीयताओं का अद्यतन नहीं किया जाएगा।",
        "prefs-tabs-navigation-hint": "सुझाव: आप टैब्स सूची में टैब्स के बीच आवागमन करने के लिए बाएँ और दाएँ तीर कुंजियों का उपयोग कर सकते हैं।",
        "email-address-validity-valid": "ई-मेल पता वैध प्रतीत होता है",
        "email-address-validity-invalid": "एक वैध ई-मेल पता प्रविष्ट करें",
        "right-deletedtext": "हटाया गया पाठ और हटाए गए अवतरणों के बीच अंतर देखें",
        "right-browsearchive": "हटाए गए पृष्ठ खोजें",
        "right-undelete": "पृष्ठ पुनर्स्थापित करें",
-       "right-suppressrevision": "प्रबंधकों से छुपे हुए अवतरण देखें और पुनर्स्थापित करें",
+       "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": "अन्य सदस्यों के सी॰एस॰एस और जावास्क्रिप्ट पृष्ठ सम्पादित करें",
        "right-editusercss": "अन्य सदस्यों के सी॰एस॰एस पृष्ठ सम्पादित करें",
        "right-override-export-depth": "पृष्ठ निर्यात करें, पाँच स्तर की गहराई तक जुड़े हुए पृष्ठों समेत",
        "right-sendemail": "अन्य सदस्यों को ई-मेल भेजें",
        "right-passwordreset": "कूटशब्द रीसेट ई-मेल देखें",
+       "right-managechangetags": "डेटाबेस से [[Special:Tags|चिप्पियाँ]] बनायें और हटायें",
        "newuserlogpage": "सदस्य खाता निर्माण लॉग",
        "newuserlogpagetext": "यह सदस्य खातों के निर्माण का लॉग है।",
        "rightslog": "सदस्य अधिकार लॉग",
        "action-viewmywatchlist": "अपनी ध्यानसूची देखने",
        "action-viewmyprivateinfo": "अपनी व्यक्तिगत जानकारी देखने",
        "action-editmyprivateinfo": "अपनी व्यक्तिगत जानकारी बदलने",
+       "action-editcontentmodel": "एक पेज की सामग्री मॉडल को संपादित।",
+       "action-managechangetags": "डेटाबेस से चिप्पि बनायें और हटायें",
        "nchanges": "$1 {{PLURAL:$1|बदलाव}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|अंतिम बार देखने के बाद से}}",
        "enhancedrc-history": "इतिहास",
        "recentchanges-label-plusminus": "पृष्ठ आकार इस बाइट संख्या से बदला",
        "recentchanges-legend-heading": "'''कुंजी:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नए पन्नों की सूची]] को भी देखें)",
-       "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) हुए बदलाव दर्शाए गये हैं।",
+       "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) {{PLURAL:$5|हुआ बदलाव दर्शाया गया है|हुए बदलाव दर्शाए गये हैं}}।",
        "rclistfrom": "$3 $2 से नये बदलाव दिखाएँ",
        "rcshowhideminor": "छोटे बदलाव $1",
        "rcshowhideminor-show": "दिखाएँ",
        "uploaderror": "अपलोड त्रुटि",
        "upload-recreate-warning": "'''चेतावनी: उस नाम की फ़ाइल हटाई या स्थानान्तरित की जा चुकी है।'''\n\nइस पृष्ठ के हटाने और स्थानान्तरण के लॉग यहाँ सन्दर्भ के लिए दिये हैं:",
        "uploadtext": "फ़ाइल अपलोड करने के लिए नीचे दिए फ़ॉर्म का प्रयोग करें।\n[[Special:FileList|अपलोड की गई फ़ाइलों की सूची]] से आप पहले पहले अपलोड की गई फ़ाइलों को देख सकते हैं और उनमें खोज सकते हैं। दोबारा अपलोड की गई फ़ाइलों को [[Special:Log/upload|अपलोड सूची]] में देखें, और मिटाई फ़ाइलों के लिए [[Special:Log/delete|हटाने की सूची]] देखें।\n\nकिसी पृष्ठ में फ़ाइल का प्रयोग करने के लिए नीचे दिए गये उदाहरणों के अनुसार कड़ियाँ बनाएँ।\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' फ़ाइल का पूरा आकार प्रयोग करने के लिये\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' पृष्ठ में बाईं ओर फ़ाइल का 200 पिक्सेल चौड़ा अवतरण \"alt text\" विवरण के साथ एक बक्से में प्रयोग करने के लिये\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' बिना फ़ाइल का प्रयोग किये केवल उसकी कड़ी जोड़ने के लिये",
-       "upload-permitted": "अनुमतित फ़ाइल प्रकार: $1।",
-       "upload-preferred": "पसंदीदा फ़ाइल प्रकार: $1।",
-       "upload-prohibited": "प्रतिबंधिक फ़ाइल प्रकार: $1।",
+       "upload-permitted": "अनुमतित फ़ाइल  {{PLURAL:$2|प्रकार}}: $1।",
+       "upload-preferred": "पसंदीदा फ़ाइल {{PLURAL:$2|प्रकार}}: $1।",
+       "upload-prohibited": "प्रतिबंधिक फ़ाइल {{PLURAL:$2|प्रकार}}: $1।",
        "uploadlogpage": "अपलोड लॉग",
        "uploadlogpagetext": "नीचे हाल ही में अपलोड की गई फ़ाइलों की सूची है।\nकृपया और द्रैश्यिक विवरण के लिए [[Special:NewFiles|नई फ़ाइलों की गैलरी]] देखें।",
        "filename": "फ़ाइल का नाम",
        "nolicense": "कुछ भी नहीं चुना",
        "licenses-edit": "लाइसेंस विकल्प सम्पादन",
        "license-nopreview": "(झलक उपलब्ध नहीं है)",
-       "upload_source_url": " (एक वैध, सभी जगहों से उपलब्ध यू॰आर॰एल)",
-       "upload_source_file": " (आपके कम्प्यूटर से फ़ाइल)",
+       "upload_source_url": "(आपकी चुनी फ़ाइल एक वैध, सार्वजनिक रूप से उपलब्ध यू॰आर॰एल से)",
+       "upload_source_file": "(आपके कम्प्यूटर से चुनी आपकी फ़ाइल)",
        "listfiles-delete": "हटाएँ",
        "listfiles-summary": "यह विशेष पृष्ठ सभी अपलोड की गई फ़ाइलें दर्शाता है।",
        "listfiles_search_for": "मीडिया नाम के लिये खोजें:",
        "download": "डाउनलोड",
        "unwatchedpages": "ध्यान न दिये हुए पृष्ठ",
        "listredirects": "पुनर्निर्देशनों की सूची",
+       "listduplicatedfiles": "डुप्लिकेट के साथ फाइलों की सूची।",
+       "listduplicatedfiles-summary": "यह एैसे फ़ाइलों की सूची है जिनका नवीनतम संस्करण दूसरे फ़ाइलों के नवीनतम संस्करण की प्रतिलिपि हैं। सिर्फ़ स्थानीय फ़ाइलों को विचारा गया है।",
        "unusedtemplates": "अप्रयुक्त साँचे",
        "unusedtemplatestext": "इस पृष्ठ पर {{ns:template}} नामस्थान वाले वे सभी पृष्ठ इंगित है जो किसी अन्य पृष्ठ में शामिल नहीं हैं।\nइन्हें हटाने के पहले इन साँचों की और कड़ियाँ जाँच लें।",
        "unusedtemplateswlh": "अन्य कड़ियाँ",
        "randomincategory-invalidcategory": "\"$1\" एक मान्य श्रेणी नाम नहीं है।",
        "randomincategory-nopages": "[[:Category:$1|$1]] श्रेणी में कोई पृष्ठ नहीं हैं।",
        "randomincategory-category": "श्रेणी:",
+       "randomincategory-legend": "श्रेणी में यादृच्छिक पृष्ठ",
        "randomredirect": "किसी एक पुनर्निर्देशन पर जाएँ",
        "randomredirect-nopages": "नामस्थान \"$1\" में कोई पुनर्निर्देशन नहीं हैं।",
        "statistics": "आँकड़े",
        "pageswithprop-submit": "खोजें",
        "doubleredirects": "दुगुने पुनर्निर्देश",
        "doubleredirectstext": "यह पृष्ठ उन पृष्ठों की सूची देता है जो अन्य पुनर्निर्देशित पृष्ठों की ओर पुनर्निर्देशित हैं।\nहर कतार में पहले और दूसरे पुनर्निर्देशन की कड़ियाँ, तथा दूसरे पुनर्निर्देशन का लक्ष्य भी है, आमतौर पर यही \"वास्तविक\" लक्ष्यित पृष्ठ होगा, और पहला पुनर्देशन वास्तव में इसी को लक्ष्यित होना चाहिए।\n<del>काटी गई</del> प्रविष्टियाँ सुलझा दी गई हैं।",
-       "double-redirect-fixed-move": "[[$1]] की जगह बदली जा चुकी है।\nअब यह [[$2]] की ओर पुनर्निर्देशित होता है।",
-       "double-redirect-fixed-maintenance": "[[$1]] à¤¸à¥\87 [[$2]] à¤\95à¥\8b à¤¦à¥\81à¤\97à¥\81नà¥\87 à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87श à¤\95à¥\8b ठीक कर रहा है।",
-       "double-redirect-fixer": "पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन मिस्त्री",
+       "double-redirect-fixed-move": "[[$1]] की जगह बदली जा चुकी है।\nअब यह स्वतः [[$2]] की ओर पुनर्प्रेषित होता है।",
+       "double-redirect-fixed-maintenance": "[[$1]] à¤¸à¥\87 [[$2]] à¤\95à¥\8b à¤¦à¥\81à¤\97à¥\81नà¥\87 à¤ªà¥\81नरà¥\8dपà¥\8dरà¥\87षण à¤\95à¥\8b à¤°à¤\96रà¤\96ाव à¤\95ारà¥\8dय à¤®à¥\87à¤\82 à¤¸à¥\8dवतà¤\83 ठीक कर रहा है।",
+       "double-redirect-fixer": "पà¥\81नरà¥\8dपà¥\8dरà¥\87षण मिस्त्री",
        "brokenredirects": "टूटे हुए पुनर्निर्देशन पृष्ठ",
        "brokenredirectstext": "निम्नोक्त पुनर्निर्देशन नामौजूद पृष्ठों की ओर ले जाते हैं:",
        "brokenredirects-edit": "संपादित करें",
        "wantedfiles": "वांछित फ़ाइलें",
        "wantedfiletext-cat": "निम्न फ़ाइलें प्रयुक्त हैं पर मौजूद नहीं हैं। बाहरी भंडारों की फ़ाइलें मौजूद होने के बावजूद सूची में हो सकती हैं। ऐसी कोई भी गलत प्रविष्टियाँ <del>काटी हुई</del> होंगी। साथ ही, जो पृष्ठ ऐसी फ़ाइलों का प्रयोग करते हैं जो मौजूद नहीं हैं, उनकी सूची [[:$1]] में है।",
        "wantedfiletext-nocat": "निम्न फ़ाइलें प्रयुक्त हैं पर मौजूद नहीं हैं। बाहरी भंडारों की फ़ाइलें मौजूद होने के बावजूद सूची में हो सकती हैं। ऐसी कोई भी गलत प्रविष्टियाँ <del>काटी हुई</del> होंगी।",
+       "wantedfiletext-nocat-noforeign": "निम्न फ़ाइलों को इस्तेमाल कर रहे हैं, लेकिन मौजूद नहीं है।",
        "wantedtemplates": "वांछित साँचे",
        "mostlinked": "सर्वाधिक से जुड़े हुए पृष्ठ",
        "mostlinkedcategories": "सर्वाधिक से जुड़ी हुई श्रेणियाँ",
        "listusers": "सदस्यसूची",
        "listusers-editsonly": "केवल संपादन कर चुके सदस्य दिखाएँ",
        "listusers-creationsort": "निर्माण तिथि के आधार पर क्रमांकन करें",
+       "listusers-desc": "अवरोही क्रम में क्रमबद्ध करें",
        "usereditcount": "$1 {{PLURAL:$1|सम्पादन}}",
        "usercreated": "$1 को $2 बजे बनाया गया, सदस्यनाम $3 है",
        "newpages": "नए पृष्ठ",
        "listgrouprights-addgroup-self-all": "अपने खाते में सभी समूह शामिल करें",
        "listgrouprights-removegroup-self-all": "अपने खाते से सभी समूह हटाएँ",
        "listgrouprights-namespaceprotection-namespace": "नामस्थान",
+       "trackingcategories": "चिह्नित श्रेणियाँ",
+       "trackingcategories-msg": "चिह्नित श्रेणी",
+       "trackingcategories-name": "संदेश नाम",
+       "trackingcategories-desc": "श्रेणी शामिल किए जाने के मानदंड",
        "trackingcategories-nodesc": "कोई वर्णन उपलब्ध नहीं।",
+       "trackingcategories-disabled": "श्रेणी अक्षम करी गयी है",
        "mailnologin": "पाने वाले का एड्रेस दिया नहीं",
        "mailnologintext": "अन्य सदस्यों को इ-मेल भेजने के लिये [[Special:UserLogin|लॉग इन]] करना आवश्यक है और आपकी [[Special:Preferences|वरीयताओं]] में वैध ई-मेल पता होना आवश्यक है।",
        "emailuser": "इस सदस्य को ई-मेल भेजें",
        "mywatchlist": "ध्यानसूची",
        "watchlistfor2": "$1 $2 के लिए",
        "nowatchlist": "आपकी ध्यानसूची में कोई भी पृष्ठ नहीं हैं।",
-       "watchlistanontext": "अपनी ध्यानसूची में मौजूद पृष्ठ देखने या फिर संपादित करने के लिये कॄपया $1 करें।",
+       "watchlistanontext": "अपनी ध्यानसूची में मौजूद पृष्ठ देखने या फिर संपादित करने के लिये कॄपया लॉग इन करें।",
        "watchnologin": "लॉग इन नहीं किया है",
        "addwatch": "ध्यानसूची में जोड़ें",
        "addedwatchtext": "आपकी [[Special:Watchlist|ध्यानसूची]] में \"[[:$1]]\" पृष्ठ जोड़ दिया गया है।\nभविष्य में इस पृष्ठ तथा इसके वार्ता पृष्ठ में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे।",
        "watchlist-details": "वार्ता पृष्ठों के अलावा {{PLURAL:$1|$1 पृष्ठ}} आपकी ध्यानसूची में हैं।",
        "wlheader-enotif": "ई-मेल नोटिफ़िकेशन सक्षम हैं।",
        "wlheader-showupdated": "पृष्ठ जो आपके द्वारा देखे जाने के बाद बदले गये हैं '''बोल्ड''' दिखेंगे।",
-       "wlnote": "$3 को $4 बजे तक पिछले '''$2''' {{PLURAL:$2|घंटे|घंटों}} में {{PLURAL:$1|हुआ एक|हुए '''$1'''}} परिवर्तन निम्न {{PLURAL:$1|है|हैं}}।",
+       "wlnote": "$3 को $4 बजे तक पिछले <strong>$2</strong> {{PLURAL:$2|घंटे|घंटों}} में {{PLURAL:$1|हुआ एक|हुए <strong>$1</strong>}} परिवर्तन निम्न {{PLURAL:$1|है|हैं}}।",
        "wlshowlast": "पिछले $1 घंटे $2 दिन  देखें",
        "watchlist-options": "ध्यानसूची विकल्प",
        "watching": "ध्यान दे रहे हैं...",
        "exbeforeblank": "खाली करने से पहले पाठ था: '$1'",
        "delete-confirm": "\"$1\" को हटाएँ",
        "delete-legend": "हटाएँ",
-       "historywarning": "''' चेतावनी: ''' आप जो पृष्ठ हटाने जा रहे हैं उसके इतिहास में लगभग $1 {{PLURAL:$1|अवतरण}} हैं:",
+       "historywarning": "<strong>चेतावनी:<strong> आप जो पृष्ठ हटाने जा रहे हैं उसके इतिहास में $1 {{PLURAL:$1|अवतरण}} हैं:",
        "confirmdeletetext": "आप एक पृष्ठ को उसके सभी अवतरणों सहित हटाने जा रहे हैं।\nजाँच लें कि आप ये करना चाहते हैं, आप इसके पर्निआमों से अवगत हैं, और आप ये [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार कर रहे हैं।",
        "actioncomplete": "कार्य पूर्ण",
        "actionfailed": "क्रिया विफल",
        "protect-othertime": "अन्य समय:",
        "protect-othertime-op": "अन्य समय",
        "protect-existing-expiry": "मौजूदा सुरक्षा सम्पात होने का समय: $3, $2",
+       "protect-existing-expiry-infinity": "मौजुदा समाप्ति समय: अनंत",
        "protect-otherreason": "अन्य/अतिरिक्त कारण:",
        "protect-otherreason-op": "अन्य कारण",
        "protect-dropdown": "*सुरक्षा के आम कारण\n**अत्यधिक बर्बरता \n**अत्यधिक स्पैम\n**अफलदायी सम्पादन युद्ध\n**अधिक यातायात वाला पृष्ठ",
        "autoblockid": "स्वतः अवरोध #$1",
        "block": "उपयोक्ता को अवरोधित करें।",
        "unblock": "उपयोक्ता पर अवरोधण हटाएँ",
-       "blockip": "अवरोधित करें",
+       "blockip": "{{GENDER:$1|सदस्य|सदस्या}} अवरोधित करें",
        "blockip-legend": "सदस्य को ब्लॉक करें",
        "blockiptext": "विशिष्ठ IP पते अथवा सदस्य नाम को लिखने के अधिकार से बाध्य करने के लिए निम्न पत्र का प्रयोग करें।\nयह सिर्फ बर्बरता को रोकने के लिए ही किया जाना चाहिए, और [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार ही करना चाहिए।\nनीचे विशिष्ठ कारण भी लिखें (उदाहरण के लिए, सटीक पृष्ठों को दर्शाते हुए, जिनमें बर्बरता की गई हो)।",
        "ipaddressorusername": "आईपी एड्रेस या सदस्यनाम:",
        "ipb-unblock-addr": "$1 को अनब्लॉक करें",
        "ipb-unblock": "सदस्य अथवा आईपी एड्रेस को अनब्लॉक करें",
        "ipb-blocklist": "सद्य ब्लॉक देखें",
-       "ipb-blocklist-contribs": "$1 के लिए योगदान",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} के लिए योगदान",
        "unblockip": "सदस्य को अनब्लॉक करें",
        "unblockiptext": "पहले ब्लॉक किये हुए आईपी एड्रेस या सदस्यनाम को अनब्लॉक करने के लिये नीचे दिया गया फार्म भरें।",
        "ipusubmit": "यह अवरोध हटाएँ",
        "thumbnail_gd-library": "अवैध जीडी लाइब्रेरी जमाव: कार्यसमूह $1 मौजूद नहीं है",
        "thumbnail_image-missing": "लगता है संचिका नामौजूद है: $1",
        "import": "पृष्ठ इम्पोर्ट करें",
-       "importinterwiki": "ट्रान्सविकि आयात",
-       "import-interwiki-text": "आयात करने के लिये एक विकि और एक पृष्ठ चुनें।\nअवतरण दिनांक और संपादक नाम ज्यों-के-त्यों रखे जाएँगे।\nसभी ट्रान्सविकि आयात क्रियाएँ [[Special:Log/import|आयात लॉग]] में डाली जाती हैं।",
+       "importinterwiki": "किसी और विकि से आयात करे",
+       "import-interwiki-text": "आयात करने के लिये एक विकि और एक पृष्ठ चुनें।\nअवतरण दिनांक और संपादक नाम ज्यों-के-त्यों रखे जाएँगे।\nअन्य विकि से सभी आयात [[Special:Log/import|आयात लॉग]] में डाली जाती हैं।",
+       "import-interwiki-sourcewiki": "स्रोत विकि:",
+       "import-interwiki-sourcepage": "स्रोत पृष्ठ:",
        "import-interwiki-history": "इस पृष्ठ के सभी इतिहास अवतरण कॉपी करें",
        "import-interwiki-templates": "सभी साँचे शामिल करें",
        "import-interwiki-submit": "आयात",
        "import-upload": "XML डाटा अपलोड करें",
        "import-token-mismatch": "सत्र सामग्री खो गई है। \nकृपया पुनः प्रयास करें।",
        "import-invalid-interwiki": "इस विकि से आयात नहीं हो सकता है।",
-       "import-error-edit": "पृष्ठ \" $1 \" आयातित नहीं किया जासकता है क्योंकि आपको उसे संपादित करने की अनुमति नहीं हैं।",
-       "import-error-create": "पृष्ठ \" $1 \" आयातित नहीं है क्योंकि आपको उसे बनाने की अनुमति नहीं हैं।",
+       "import-error-edit": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि आपको उसे संपादित करने की अनुमति नहीं हैं।",
+       "import-error-create": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि आपको उसे बनाने की अनुमति नहीं हैं।",
        "import-error-interwiki": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि इसका नाम अंतरविकी कड़ियाँ बनाने के लिए आरक्षित है।",
        "import-error-special": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि यह एक ऐसे विशेष नामस्थान के अंतर्गत आता है जिसमें पृष्ठ नहीं बनाए जा सकते हैं।",
-       "import-error-invalid": "पà¥\83षà¥\8dठ \"$1\" à¤\86यात à¤¨à¤¹à¥\80à¤\82 à¤\95िया à¤\97या à¤¹à¥\88 à¤\95à¥\8dयà¥\8bà¤\82à¤\95ि à¤\87सà¤\95ा à¤¨à¤¾à¤® अमान्य है।",
+       "import-error-invalid": "पà¥\83षà¥\8dठ \"$1\" à¤\86यात à¤¨à¤¹à¥\80à¤\82 à¤\95िया à¤\97या à¤¹à¥\88 à¤\95à¥\8dयà¥\8bà¤\82à¤\95ि à¤\87सà¤\95ा à¤\86यात à¤ªà¤¶à¥\8dà¤\9aात à¤\9cà¥\8b à¤¨à¤¾à¤® à¤¹à¥\8bता à¤µà¤¹ à¤\87स à¤µà¤¿à¤\95à¥\80 à¤ªà¤° अमान्य है।",
        "import-options-wrong": "गलत {{PLURAL:$2|विकल्प}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "दिया गया उपसर्ग पृष्ठ शीर्षक अमान्य है।",
        "import-rootpage-nosubpage": "दिए गए उपसर्ग पृष्ठ \"$1\" के नामस्थान में उप-पृष्ठ नहीं बनाए जा सकते।",
        "importlogpage": "आयात सूची",
        "importlogpagetext": "अन्य विकियों से प्रबन्धकों द्वारा किए गए सम्पादन इतिहास के साथ होने वाले पृष्ठों का आयात।",
-       "import-logentry-upload": "सञ्चिका अपलोड करके [[$1]] का आयात किया",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|अवतरण|अवतरण}}",
-       "import-logentry-interwiki": "ट्रान्सविकि कर दिया $1",
-       "import-logentry-interwiki-detail": "$2 से $1 {{PLURAL:$1|अवतरण|अवतरण}}",
+       "import-logentry-upload-detail": "$1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}",
+       "import-logentry-interwiki-detail": "$2 से $1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}",
        "javascripttest": "जावास्क्रिप्ट परीक्षण",
        "javascripttest-pagetext-noframework": "यह पृष्ठ जावास्क्रिप्ट परीक्षण चलाने के लिए है।",
        "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"",
        "tooltip-pt-mycontris": "आपके योगदानों की सूची",
        "tooltip-pt-login": "आपको सत्रारम्भ करने के लिए प्रोत्साहित किया जाता है; लेकिन यह अनिवार्य नहीं है",
        "tooltip-pt-logout": "सत्रांत",
+       "tooltip-pt-createaccount": "हमारा सुझाव है की आप खाता बनाएँ और लॉगिन करें, परन्तु यह अनिवार्य नहीं है",
        "tooltip-ca-talk": "सामग्री पृष्ठ के बारे में वार्तालाप",
        "tooltip-ca-edit": "आप यह पृष्ठ बदल सकते हैं।\nकृपया बदलाव संजोने से पहले झलक देखें।",
        "tooltip-ca-addsection": "नया विभाग आरम्भ करें",
        "tooltip-ca-unwatch": "यह पृष्ठ अपने ध्यानसूचीसे हटाएं",
        "tooltip-search": "{{SITENAME}} में खोजें",
        "tooltip-search-go": "अगर इस शीर्षक का पृष्ठ हैं तो उसपर चलें",
-       "tooltip-search-fulltext": "à¤\87स à¤µà¤¾à¤\95à¥\8dयाà¤\82श à¤\95à¥\8b à¤ªà¤¨à¥\8dनों में खोजें",
-       "tooltip-p-logo": "मुख पृष्ठ",
+       "tooltip-search-fulltext": "à¤\87स à¤ªà¤¾à¤  à¤\95à¥\8b à¤ªà¥\83षà¥\8dठों में खोजें",
+       "tooltip-p-logo": "मुख पृष्ठ पर जाएँ",
        "tooltip-n-mainpage": "मुखपृष्ठ पर जाएँ",
        "tooltip-n-mainpage-description": "मुखपृष्ठ पर जाएँ",
        "tooltip-n-portal": "परियोजना के बारे में, आप क्या कर सकतें हैं, सहायता कहाँ से लें",
        "tooltip-feed-atom": "इस पृष्ठ की अणु फ़ीड",
        "tooltip-t-contributions": "इस सदस्यके योगदानकी सूची देखियें",
        "tooltip-t-emailuser": "इस सदस्य को इमेल भेजें",
-       "tooltip-t-upload": "सà¤\82à¤\9aिà¤\95ा à¤\9aढ़ाà¤\8fà¤\81",
+       "tooltip-t-upload": "फ़ाà¤\87ल à¤\85पलà¥\8bड à¤\95रà¥\87à¤\82",
        "tooltip-t-specialpages": "सभी विशेष पृष्ठों की सूची",
        "tooltip-t-print": "इस पृष्ठका छपानेलायक अवतरण",
        "tooltip-t-permalink": "पृष्ठ के इस संस्करण की स्थायी कड़ी",
        "autosumm-replace": "पृष्ठ को '$1' से बदल रहा है।",
        "autoredircomment": "[[$1]] को अनुप्रेषित",
        "autosumm-new": "'$1' के साथ नया पृष्ठ बनाया",
+       "autosumm-newblank": "रिक्त पृष्ठ बनाया",
        "size-bytes": "$1 B",
        "size-kilobytes": "$1 KB",
        "size-megabytes": "$1 MB",
        "watchlistedit-raw-done": "आपकी ध्यानसूची अपडेट कर दी गई हैं",
        "watchlistedit-raw-added": "{{PLURAL:$1|1शीर्षक|$1 शीर्षक}} बढा दिये:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1शीर्षक|$1 शीर्षक}} हटा दिये:",
+       "watchlistedit-clear-title": "ध्यानसूची खाली की",
+       "watchlistedit-clear-legend": "ध्यानसूची खाली करें",
+       "watchlistedit-clear-explain": "आपकी ध्यानसूची से सभी पृष्ठ हटा दिये जायेंगे",
+       "watchlistedit-clear-titles": "खिताब:",
+       "watchlistedit-clear-done": "आपकी ध्यानसूची खाली कर दी गयी है।",
+       "watchlistedit-clear-removed": "$1 पृष्ठ{{PLURAL:$1|हटाया गया|हटाये गए}}:",
+       "watchlistedit-too-many": "यहाँ दर्शाने के लिए अत्यधिक पृष्ठ हैं।",
+       "watchlisttools-clear": "ध्यानसूची खाली करें",
        "watchlisttools-view": "आधारित बदलाव देखें",
        "watchlisttools-edit": "ध्यानसूची देखें एवं संपादित करें",
        "watchlisttools-raw": "रॉ ध्यानसूची देखें एवं संपादित करें",
        "version-hook-name": "हूक नाम",
        "version-hook-subscribedby": "ने सदस्यत्व लिया",
        "version-version": "($1)",
+       "version-no-ext-name": "[कोई नाम नहीं]",
        "version-license": "मीडियाविकि अनुज्ञापत्र",
        "version-ext-license": "लाइसेंस",
        "version-ext-colheader-name": "एक्सटेंशन",
+       "version-skin-colheader-name": "त्वचा",
        "version-ext-colheader-version": "संस्करण",
        "version-ext-colheader-license": "लाइसेंस",
        "version-ext-colheader-description": "विवरण",
        "version-poweredby-credits": "यह विकि  '''[https://www.mediawiki.org/ MediaWiki]''' द्वारा संचालित है, कॉपीराइट © 2001 - $1  $2 ।",
        "version-poweredby-others": "अन्य",
        "version-poweredby-translators": "translatewiki.net अनुवादक",
+       "version-credits-summary": "हम निम्न व्यक्तियों द्वारा [[Special:Version|मीडियाविकि]] में किये गए योगदानों को सराहते हैं।",
        "version-software": "इन्स्टॉल की हुई प्रणाली",
        "version-software-product": "प्रोडक्ट",
        "version-software-version": "अवतरण",
+       "version-entrypoints": "प्रवेश बिंदु यू॰आर॰एल",
+       "version-entrypoints-header-entrypoint": "प्रवेश बिंदु",
        "version-entrypoints-header-url": "यू॰आर॰एल",
+       "version-libraries": "स्थापित लाइब्रेरी",
+       "version-libraries-library": "लाइब्रेरी",
+       "version-libraries-version": "संस्करण",
+       "redirect-legend": "फ़ाइल अथवा पृष्ठ को पुनर्प्रेषण",
+       "redirect-summary": "यह विशेष पृष्ठ फ़ाइलनाम प्रदान करने पर फ़ाइल नाम को, पृष्ठ आइ॰दी अथवा अवतरण आइ॰दी देने पर पृष्ठ को, और सदस्य आइ॰दी देने पर सदस्य पृष्ठ को पुनर्प्रेषित करता है। उदाहरण: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], या [[{{#Special:Redirect}}/user/101]]।",
        "redirect-submit": "जायें",
        "redirect-lookup": "ढूँढें:",
        "redirect-value": "मूल्य:",
        "redirect-user": "सदस्य आई॰डी",
+       "redirect-page": "पृष्ठ आइ॰डी",
        "redirect-revision": "पृष्ठ अवतरण संख्या",
        "redirect-file": "फ़ाइल नाम",
+       "redirect-not-exists": "यह मान प्राप्त नहीं हुआ",
        "fileduplicatesearch": "फ़ाईल द्विरावृत्ति खोजें",
        "fileduplicatesearch-summary": "हैश वैल्यू के अनुसार फ़ाईल की द्विरावृत्ति खोजें।",
        "fileduplicatesearch-legend": "द्विरावृत्ति के लिये खोजें",
        "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-submit": "बनाएँ",
+       "tags-create-no-name": "आपको एक चिप्पि का नाम निर्दिष्ट करना चाहिए।",
+       "tags-delete-title": "चिप्पि हटायें",
+       "tags-delete-reason": "कारण:",
+       "tags-activate-reason": "कारण:",
+       "tags-activate-submit": "सक्रिय करें",
+       "tags-deactivate-reason": "कारण:",
+       "tags-deactivate-submit": "निष्क्रिय करें",
        "comparepages": "पृष्ठों की तुलना करें",
        "compare-page1": "पृष्ठ १",
        "compare-page2": "पृष्ठ २",
        "compare-revision-not-exists": "आपके द्वारा निर्दिष्ट संशोधन मौजूद नहीं है।",
        "dberr-problems": "क्षमा करें! इस जालस्थल को कुछ तकनीकी परेशानियों का सामना करना पड़ रहा है।",
        "dberr-again": "कुछ मिनट रुकने के बाद फिर से चढ़ाएँ।",
-       "dberr-info": "(à¤\86à¤\81à¤\95ड़ाà¤\95à¥\8bष à¤¸à¥\87वà¤\95 à¤¸à¥\87 à¤¸à¤\82परà¥\8dà¤\95 à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\8b à¤ªà¤¾ à¤°à¤¹à¤¾:$1)",
-       "dberr-info-hidden": "(डाà¤\9fाबà¥\87स à¤¸à¤°à¥\8dवर à¤¸à¥\87 à¤¸à¤\82परà¥\8dà¤\95 à¤¨à¤¹à¥\80à¤\82 à¤\95िया à¤\9cा à¤¸à¤\95ा)",
+       "dberr-info": "(डाà¤\9fाबà¥\87स à¤¸à¥\87 à¤¸à¤\82परà¥\8dà¤\95 à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\8b à¤ªà¤¾ à¤°à¤¹à¤¾: $1)",
+       "dberr-info-hidden": "(डाटाबेस से संपर्क नहीं किया जा सका)",
        "dberr-usegoogle": "इस बीच आप गूगल से खोज करने की कोशिश कर सकते हैं।",
        "dberr-outofdate": "ध्यान दे, हो सकता है कि हमारी सामग्री से संबंधित उनकी सूची बासी हो।",
        "dberr-cachederror": "यह अनुरोधित पन्ने की संचित प्रति है, हो सकता है यह ताज़ी न हो।",
        "htmlform-no": "नहीं",
        "htmlform-yes": "हाँ",
        "htmlform-chosen-placeholder": "एक विकल्प चुनें",
+       "htmlform-cloner-create": "अधिक जोड़ें",
+       "htmlform-cloner-delete": "हटाएँ",
        "sqlite-has-fts": "$1 पूर्ण पाठ खोज समर्थन के साथ",
        "sqlite-no-fts": "$1पूर्ण-पाठ खोज समर्थन के बिना",
        "logentry-delete-delete": "$1 ने पृष्ठ $3 {{GENDER:$2|हटा}} दिया",
        "logentry-rights-rights": "$1 ने $3 के सदस्य समूह $4 से बदलकर $5 {{GENDER:$2|किये}}",
        "logentry-rights-rights-legacy": "$1 ने $3 के सदस्य समूह {{GENDER:$2|बदले}}",
        "logentry-rights-autopromote": "$1 के सदस्य समूह स्वतः $4 से बदलकर $5 {{GENDER:$2|किये}} गए",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ने}} $3 अपलोड किया",
        "rightsnone": "(कोई नहीं)",
        "revdelete-summary": "संपादन सारांश",
+       "feedback-adding": "पृष्ठ पर प्रतिक्रिया जोड़ना ...",
+       "feedback-bugcheck": "शानदार! जांच ले कहीं ये [ $1 known bugs] पहले से ही न हो ।",
+       "feedback-bugnew": "मैं जाँच कीया। एक नया बग रिपोर्ट करें",
        "feedback-bugornote": "यदि आप किसी तकनीकी परेशानी को विस्तार से समझाने के लिये तैयार हैं तो कृपया [$1 बग फ़ाइल करें]।\nयदि नहीं, तो आप नीचे दिये सरल फ़ॉर्म का प्रयोग कर सकते हैं। आपकी टिप्पणी आपके सदस्य नाम और आपके ब्राउज़र के नाम के सहित \"[$3 $2]\" पृष्ठ में जोड़ दी जाएगी।",
-       "feedback-subject": "विषय:",
-       "feedback-message": "संदेश:",
        "feedback-cancel": "रद्द करें",
-       "feedback-submit": "प्रतिक्रिया भेजें",
-       "feedback-adding": "पृष्ठ पर प्रतिक्रिया जोड़ना ...",
+       "feedback-close": "हो गया",
        "feedback-error1": "त्रुटि: न पहचाना गया परिणाम एपीआई से",
        "feedback-error2": "त्रुटि: संपादन विफल रहा है",
        "feedback-error3": "त्रुटि: एपीआई से कोई प्रतिक्रिया नहीं",
+       "feedback-message": "संदेश:",
+       "feedback-subject": "विषय:",
+       "feedback-submit": "जमा करें",
        "feedback-thanks": "धन्यवाद! आपकी प्रतिक्रिया पृष्ठ में नियुक्त किया गया है \"[ $2  $1 ]\"।",
-       "feedback-close": "हो गया",
-       "feedback-bugcheck": "शानदार! जांच ले कहीं ये [ $1 known bugs] पहले से ही न हो ।",
-       "feedback-bugnew": "मैं जाँच कीया। एक नया बग रिपोर्ट करें",
        "searchsuggest-search": "खोज",
        "searchsuggest-containing": "...से युक्त",
        "api-error-badaccess-groups": "आपको इस विकि के लिए फ़ाइलें अपलोड करने की अनुमति नहीं है.",
        "expand_templates_remove_comments": "टिप्पणी हटायें",
        "expand_templates_remove_nowiki": "परिणाम में <nowiki> टैग हटाएँ",
        "expand_templates_generate_xml": "XML का पार्स (parse) वृक्ष दर्शायें",
-       "expand_templates_preview": "झलक"
+       "expand_templates_preview": "झलक",
+       "pagelanguage": "पृष्ठ भाषा चुनाव",
+       "pagelang-name": "पृष्ठ",
+       "pagelang-language": "भाषा",
+       "pagelang-use-default": "डिफ़ॉल्ट भाषा का प्रयोग करें",
+       "pagelang-select-lang": "भाषा चुनें",
+       "right-pagelang": "पृष्ठ भाषा बदलें",
+       "action-pagelang": "पृष्ठ भाषा बदलने",
+       "log-name-pagelang": "पृष्ठ भाषा बदलाव लॉग",
+       "log-description-pagelang": "यह पृष्ठ भाषाओं में परिवर्तन का लॉग है।",
+       "mediastatistics-table-count": "फ़ाइलों की संख्या",
+       "mediastatistics-header-unknown": "अज्ञात",
+       "mediastatistics-header-bitmap": "बिटमैप चित्र",
+       "mediastatistics-header-audio": "ऑडियो",
+       "mediastatistics-header-video": "विडियो",
+       "mediastatistics-header-office": "ऑफ़िस",
+       "mediastatistics-header-text": "पाठ",
+       "json-error-syntax": "सिन्टॅक्स त्रुटि",
+       "headline-anchor-title": "इस अनुभाग की कड़ी",
+       "special-characters-group-latin": "लाटिन",
+       "special-characters-group-latinextended": "लाटिन विस्तारित",
+       "special-characters-group-ipa": "आइपीए",
+       "special-characters-group-symbols": "प्रतीक",
+       "special-characters-group-greek": "ग्रीक",
+       "special-characters-group-cyrillic": "सिरिलिक",
+       "special-characters-group-arabic": "अरबी",
+       "special-characters-group-arabicextended": "अरबी विस्तारित",
+       "special-characters-group-persian": "फार्सी",
+       "special-characters-group-hebrew": "हिब्रू",
+       "special-characters-group-bangla": "बांग्ला",
+       "special-characters-group-tamil": "तमिल",
+       "special-characters-group-telugu": "तेलूगू",
+       "special-characters-group-sinhala": "सिंहल",
+       "special-characters-group-gujarati": "गुजराती",
+       "special-characters-group-devanagari": "देवनागरी",
+       "special-characters-group-thai": "थाई",
+       "special-characters-group-lao": "लाओ",
+       "special-characters-group-khmer": "खमेर"
 }
index 4fd9066..4e3590d 100644 (file)
@@ -11,7 +11,9 @@
                        "Thakurji",
                        "아라",
                        "Soul Train",
-                       "Filipinayzd"
+                       "Filipinayzd",
+                       "SNN95",
+                       "Macofe"
                ]
        },
        "tog-underline": "Jorr ke niche line khicho:",
        "readonly_lag": "Database apne se band hoi gais hai jab tak ki duusra database, khaas database ke sanghe kaam nai kare lage.",
        "internalerror": "Bhitri galti",
        "internalerror_info": "Bhitri galti: $1",
+       "internalerror-fatal-exception": "Fatal exception of type \"$1\"",
        "filecopyerror": "File \"$1\" ke \"$2\" pe copy nai kare sakaa.",
        "filerenameerror": "File \"$1\" ke naam badal ke \"$2\" nai kare sakaa.",
        "filedeleteerror": "File \"$1\" ke nai mitae sakaa.",
        "unusedimages": "Bina use bhae files",
        "wantedcategories": "Maange waala vibhag",
        "wantedpages": "Jaruri panna",
+       "wantedpages-summary": "List of non-existing pages with the most links to them, excluding pages which only have redirects linking to them. For a list of non-existent pages that have redirects linking to them, see [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Result set me kharaa title hai: $1",
        "wantedfiles": "Maange waala files",
        "wantedfiletext-cat": "Niche likha gais file ke kaam me lawa gais hae lekin ii Wikipedia me nai hae. Ii Wikipedia me file rahe par bhi foreign repositories ke file ke list karaa jaae sake hae. Aisan koi galat positives ke <del>mitae dewa jaai</del>. Aur, uu panna jon ki non-existent files ke embed kare hae ke [[:$1]] me list karaa gais hae.",
        "thumbnail_image-missing": "Ii naam ke file nai hae: $1",
        "thumbnail_image-failure-limit": "Ii thumbnail ke render kare ke bahut dher unsuccessful kosis ($1 or more) rahaa. Meharbaani kar ke baad me fir kosis karna.",
        "import": "Panna ke import karo",
-       "importinterwiki": "Transwiki se ayaat",
-       "import-interwiki-text": "Ek wiki aur panna ke title ke select karo.\nBadalo ke tarik aur badle waala sadasya ke naam wahii rakam rahii.\nSab transwiki import actions ke [[Special:Log/import|import log]] pe log karaa jaawe hai.",
+       "importinterwiki": "Duusra wiki se ayaat",
+       "import-interwiki-text": "Ek wiki aur panna ke title ke, import kare ke khatir, select karo.\nBadalo ke tarik aur badle waala sadasya ke naam wahii rakam rahii.\nSab transwiki import actions ke [[Special:Log/import|import log]] pe log karaa jaawe hai.",
        "import-interwiki-sourcewiki": "Source wiki:",
        "import-interwiki-sourcepage": "Source panna:",
        "import-interwiki-history": "Ii panna ke sab badlao ke itihaas ke copy karo",
        "importcantopen": "Import file ke khole nai sakaa",
        "importbadinterwiki": "Kharaab interwiki jorr",
        "importsuccess": "Import khalaas hoe gais hai!",
-       "importnosources": "Koi interwiki import source ke define nai karaa gais hai aur direct itihass ke upload ke rok dewa gais hai.",
+       "importnosources": "Koi interwiki import source ke define nai karaa gais hai aur directory itihass ke upload ke rok dewa gais hai.",
        "importnofile": "Koi import file ke upload nai karaa gais hai.",
        "importuploaderrorsize": "Import file ke upload nai kare sakaa hai.\nIi file ke size allowed upload size se barraa hai.",
        "importuploaderrorpartial": "Import file ke upload nai kare sakaa hai.\nIi file ke khaali thora hissa ke upload karaa gais hai.",
        "import-rootpage-nosubpage": "Root panna ke namespace \"$1\" sub panna ke nai allow kare hae.",
        "importlogpage": "Suchi ke import karo",
        "importlogpagetext": "Duusra wiki se panna aur badlao ke itihaas ke administrative imports.",
-       "import-logentry-upload": "file upload se [[$1]] ke import karaa gais hai",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|badlao|badlao}} import karaa gais hae",
-       "import-logentry-interwiki": "transwikied $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|badlao|badlao}} $2 se import karaa gais hae",
        "javascripttest": "JavaScript ke testing",
        "javascripttest-pagetext-noframework": "Ii panna ke JavaScript test ke kare ke khatir reserve karaa gais hae.",
        "logentry-merge-merge": "$1 {{GENDER:$2|merged}} $3 into $4 (revisions up to $5)",
        "logentry-move-move": "$1 {{GENDER:$2|moved}} panna $3 se $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|moved}} panna $3 se $4 without leaving a redirect",
-       "logentry-move-move_redir": "$1 {{GENDER:$2|moved}} panna $3 se $4 over redirect",
-       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|moved}} panna $3 se $4 over a redirect without leaving a redirect",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|memindahkan}} laman $3 kepada $4 menggunakan lencongan",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|memindahkan}} laman $3 kepada $4 melalui lencongan tanpa meninggalkan perlencongan",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|marked}} revision $4 panna $3 ke patrol karaa gais hae",
        "logentry-patrol-patrol-auto": "$1 automatically {{GENDER:$2|marked}} revision $4 panna $3 ke patrol karis hae",
        "logentry-newusers-newusers": "Sadasya $1 ke account  {{GENDER:$2|created}} ke banawa gais hae",
        "logentry-upload-revert": "$1 {{GENDER:$2|upload karaa gais hae}} $3",
        "rightsnone": "(koi nai hai)",
        "revdelete-summary": "summary ke badlo",
+       "feedback-adding": "Panna me subject jorra jaawe hae...",
+       "feedback-bugcheck": "Julum! Khaali ii check karna ki ii ek pahile se jaana waala bugs me se nai hae [$1 known bugs].",
+       "feedback-bugnew": "Ham karaa hae. Nawaa bug ke report karo",
        "feedback-bugornote": "Agar aap ek technical problem ke detail me describe kare mangtaa hae tab meharbaani kar ke [$1 report a bug].\n\nNai to, aap niche ke sahaj form ke kaam me laae saktaa hae. Aap ke comment ke, aap ke naam ke saathe, panna \"[$3 $2]\" me jorra jaai.",
-       "feedback-subject": "Subject:",
-       "feedback-message": "Sandes:",
        "feedback-cancel": "Cancel karo",
-       "feedback-submit": "Feedback do",
-       "feedback-adding": "Panna me subject jorra jaawe hae...",
+       "feedback-close": "Kar dewa gais hae",
        "feedback-error1": "Error: Unrecognized result from API",
        "feedback-error2": "Error: Edit fail hoi gais hae",
        "feedback-error3": "Error: API se koi response nai mila",
+       "feedback-message": "Sandes:",
+       "feedback-subject": "Subject:",
+       "feedback-submit": "Submit karo",
        "feedback-thanks": "Dhanyabaad! Aap ke feedback ke panna \"[$2 $1]\" me post karaa gais hae.",
-       "feedback-close": "Kar dewa gais hae",
-       "feedback-bugcheck": "Julum! Khaali ii check karna ki ii ek pahile se jaana waala bugs me se nai hae [$1 known bugs].",
-       "feedback-bugnew": "Ham karaa hae. Nawaa bug ke report karo",
        "searchsuggest-search": "Khojo",
        "searchsuggest-containing": "isme hae.....",
        "api-error-badaccess-groups": "Aap ke ii wiki me file upload kare ke ijajat nai hae.",
index 0741423..fc7aa3a 100644 (file)
@@ -27,7 +27,8 @@
                        "Tivek",
                        "Treecko",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Podcrtane poveznice",
@@ -55,7 +56,7 @@
        "tog-shownumberswatching": "Prikaži broj suradnika koji prate stranicu (u nedavnim izmjenama, popisu praćenja i samim člancima)",
        "tog-oldsig": "Pregled postojećeg potpisa:",
        "tog-fancysig": "Običan potpis kao wikitekst (bez automatske poveznice)",
-       "tog-uselivepreview": "Uključi trenutačni pretpregled (zahtijeva JavaScript) (eksperimentalno)",
+       "tog-uselivepreview": "Uključi trenutačni pretpregled",
        "tog-forceeditsummary": "Podsjeti me ako sažetak uređivanja ostavljam praznim",
        "tog-watchlisthideown": "Sakrij moja uređivanja s popisa praćenja",
        "tog-watchlisthidebots": "Sakrij uređivanja botova s popisa praćenja",
        "disclaimers": "Odricanje od odgovornosti",
        "disclaimerpage": "Project:General_disclaimer",
        "edithelp": "Kako uređivati stranicu",
+       "helppage-top-gethelp": "Pomoć",
        "mainpage": "Glavna stranica",
        "mainpage-description": "Glavna stranica",
        "policy-url": "Project:Pravila",
        "filerenameerror": "Ne mogu preimenovati datoteku \"$1\" u \"$2\".",
        "filedeleteerror": "Ne mogu obrisati datoteku \"$1\".",
        "directorycreateerror": "Nije moguće kreirati direktorij \"$1\".",
+       "directoryreadonlyerror": "Direktorij \"$1\" je samo za čitanje.",
+       "directorynotreadableerror": "Direktorij \"$1\" ne može se pročitati.",
        "filenotfound": "Datoteka \"$1\" nije nađena.",
        "unexpected": "Neočekivana vrijednost: \"$1\"=\"$2\".",
        "formerror": "Pogreška: Ne mogu poslati podatke",
        "viewsourcetext": "Možete pogledati i kopirati izvorni sadržaj ove stranice:",
        "viewyourtext": "Možete vidjeti i kopirati tekst '''vaših uređivanja''' na ovoj stranici:",
        "protectedinterface": "Ova stranica je zaštićena od izmjena jer sadrži tekst MediaWiki softvera.\nAko želite prevesti neprevedenu poruku ili popraviti prijevod neke druge poruke za sve MediaWiki wikije, posjetite [//translatewiki.net/  translatewiki.net], projekt za lokalizaciju MediaWiki softvera.",
-       "editinginterface": "'''Upozorenje:''' Uređujete stranicu koja se rabi za prikaz teksta u sučelju softvera. Promjene učinjene na ovoj stranici će se odraziti na izgled korisničkog sučelja kod drugih suradnika. Za prijevod, razmotrite uporabu [//translatewiki.net/wiki/Main_Page?setlang=hr translatewiki.net], projekta lokalizacije MedijeWiki.",
+       "editinginterface": "<strong>Upozorenje:</strong> Uređujete stranicu koja se rabi za prikaz teksta u sučelju softvera. Promjene učinjene na ovoj stranici odrazit će se na izgled korisničkog sučelja kod drugih suradnika na ovoj wiki.",
        "translateinterface": "Za dodavanje ili promjenu prijevoda za sve wikije koristite [//translatewiki.net/ translatewiki.net], projekt za lokalizaciju MediaWikija.",
        "cascadeprotected": "Ova je stranica zaključana za uređivanja jer je uključena u {{PLURAL:$1|slijedeću stranicu|slijedeće stranice}}, koje su zaštićene \"prenosivom zaštitom\":\n$2",
        "namespaceprotected": "Ne možete uređivati stranice u imenskom prostoru '''$1'''.",
        "invalidtitle-knownnamespace": "Neispravan naziv imenskog prostora \"$2\" i teksta \"$3\"",
        "invalidtitle-unknownnamespace": "Neispravan naziv imenskog prostora broj $1 i teksta \"$2\"",
        "exception-nologin": "Niste prijavljeni",
-       "exception-nologin-text": "Ova stranica ili aktivnost zahtijeva da budete prijavljeni na ovom wikiju.",
+       "exception-nologin-text": "Molimo prijavite se ako želite pristup ovoj stranici ili djelovanje.",
+       "exception-nologin-text-manual": "Molimo $1 ako želite pristup ovoj stranici ili djelovanje.",
        "virus-badscanner": "Loša konfiguracija: nepoznati skener za viruse: ''$1''",
        "virus-scanfailed": "skeniranje neuspješno (kod $1)",
        "virus-unknownscanner": "nepoznati antivirus:",
        "gotaccountlink": "Prijavite se",
        "userlogin-resetlink": "Zaboravili ste detalje vaše prijave?",
        "userlogin-resetpassword-link": "Zaboravili ste zaporku?",
+       "userlogin-helplink2": "Pomoć pri prijavi",
        "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nRabite donji obrazac da biste se prijavili kao drugi suradnik.",
        "userlogin-createanother": "Stvori još jedan račun",
        "createacct-emailrequired": "Adresa e-pošte",
        "preview": "Pregled kako će stranica izgledati",
        "showpreview": "Prikaži kako će izgledati",
        "showdiff": "Prikaži promjene",
-       "anoneditwarning": "'''Upozorenje:''' Niste prijavljeni pod suradničkim imenom. Vaša IP adresa bit će zabilježena u popisu izmjena ove stranice.",
+       "blankarticle": "<strong>Upozorenje:</strong> Stvorili ste stranicu koja je prazna.\nAko iznova pritisnete na \"{{int:savearticle}}\", stranica će biti stvorena bez ikakvog sadržaja.",
+       "anoneditwarning": "<strong>Upozorenje:</strong> niste prijavljeni. Ako napravite uređivanje, Vaša IP adresa će biti javno vidljiva. Ako se <strong>[$1 prijavite]</strong> ili <strong>[$2 stvorite račun]</strong>, Vaša uređivanja će biti pridružena suradničkom imenu, zajedno s ostalim pogodnostima.",
        "anonpreviewwarning": "''Niste prijavljeni. Spremanjem će Vaše IP adrese ostati zabilježene u starim izmjenama ove stranice.''",
        "missingsummary": "'''Podsjetnik:''' Niste unijeli sažetak promjena. Ako ponovno kliknete na \"Sačuvaj stranicu\", Vaše će promjene biti snimljene bez sažetka.",
+       "selfredirect": "<strong>Upozorenje:</strong> Stvarate preusmjeravanje na isti članak.\nMožda ste izabrali pogrješnu odredišnu stranicu za preusmjeravanje ili uređujete pogrješnu stranicu.\nAko pritisnete na \"{{int:savearticle}}\" još jednom, preusmjeravanje će svejedno biti stvoreno.",
        "missingcommenttext": "Molim unesite sažetak.",
        "missingcommentheader": "'''Podsjetnik:''' Niste napisali sažetak ovog komentara. Ako ponovno kliknete \"{{int:savearticle}}\", Vaš će komentar biti snimljen bez sažetka.",
        "summary-preview": "Pregled sažetka:",
        "content-failed-to-parse": "Obrada (''parsiranje'') formata $2 za model $1 nije uspjela: $3",
        "invalid-content-data": "Nevaljani sadržaj",
        "content-not-allowed-here": "Sadržaj napisan u obliku \"$1\"-a nije dozvoljen na stranici [[$2]]",
-       "editwarning-warning": "Napuštanje ove stranice može uzrokovati gubitak svake izmjene koju ste napravili.\nMožete onemogućiti ovo upozorenje u odjeljku \"{{int:prefs-editing}}\" Vaših postavki.",
+       "editwarning-warning": "Napuštanje ove stranice može uzrokovati gubitak svake izmjene koju ste napravili.\nAko ste prijavljeni, možete onemogućiti ovo upozorenje u odjeljku \"{{int:prefs-editing}}\" Vaših postavki.",
        "content-model-wikitext": "wikitekst",
        "content-model-text": "obični tekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Prazan objekt",
+       "content-json-empty-array": "Prazno polje",
        "expensive-parserfunction-warning": "Upozorenje: Ova stranica sadrži previše opterećujućih poziva parserskih funkcija\n\nTrebala bi imati manje od $2 {{PLURAL:$2|poziva|poziva}}, sada ima {{PLURAL:$1|$1 poziv|$1 poziva}}.",
        "expensive-parserfunction-category": "Stranice s previše poziva opterećujućih parserskih funkcija",
        "post-expand-template-inclusion-warning": "Upozorenje: Veličina uključenih predložaka je prevelika.\nNeki predlošci neće biti uključeni.",
        "undo-success": "Izmjena je uklonjena (tekst u okviru ispod ne sadrži posljednju izmjenu). Molim sačuvajte stranicu (provjerite sažetak).",
        "undo-failure": "Ova izmjena ne može biti uklonjena zbog postojanja međuinačica.",
        "undo-norev": "Izmjena nije mogla biti uklonjena jer ne postoji ili je obrisana.",
+       "undo-nochange": "Čini se da je uređivanje već otkazano.",
        "undo-summary": "uklanjanje izmjene $1 {{GENDER:$2|suradnika|suradnice}} [[Posebno:Doprinosi/$2|$2]] ([[Razgovor sa suradnikom:$2|razgovor]])",
        "cantcreateaccounttitle": "Nije moguće stvoriti suradnički račun",
        "cantcreateaccount-text": "Otvaranje suradničkog računa ove IP adrese ('''$1''') blokirao/la je [[User:$3|$3]].\n\nRazlog koji je dao/la $3 je ''$2''",
        "logdelete-selected": "{{PLURAL:$1|Odabrani zapis u evidenciji|Odabrani zapisi u evidenciji}}:",
        "revdelete-text-text": "Izbrisane izmjene će i dalje biti vidljive u povijesti stranice, ali dijelovi sadržaja neće biti vidljivi javno.",
        "logdelete-text": "Izbrisane izmjene i dalje će biti vidljive u evidencijama, ali dijelovi njihova sadržaja biti će nedostupni za javnost.",
-       "revdelete-text-others": "Ostali administratori na projektu {{SITENAME}} će moći vidjeti i vratiti izbrisani sadržaj na isti način, osim ako nisu postavljena dodatna ograničenja.",
+       "revdelete-text-others": "Ostali administratori na projektu moći će pristupiti izbrisanom sadržaju i vratiti ga, osim ako nisu postavljena dodatna ograničenja.",
        "revdelete-confirm": "Molimo potvrdite da namjeravate ovo učiniti, da razumijete posljedice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
-       "revdelete-suppress-text": "Sklanjanje uređivanja treba raditi '''iznimno''' u slijedećih par slučajeva:\n* Privatne informacije neprilične javnom mediju tipa\n*: ''kućna adresa i broj telefona, JMBG ili OIB, itd.''",
+       "revdelete-suppress-text": "Sklanjanje uređivanja treba raditi <strong>iznimno</strong> u sljedećih par slučajeva:\n* moguće klevetničke informacije\n* neprikladne osobne informacije \n*: <em>kućna adresa i broj telefona, JMBG ili OIB, itd.</em>",
        "revdelete-legend": "Postavi ograničenja na izmjenu:",
        "revdelete-hide-text": "Sakrij tekst izmjene",
        "revdelete-hide-image": "Sakrij sadržaj datoteke (sakrij sliku)",
        "revdelete-hide-user": "Sakrij suradnikovo ime/IP adresu",
        "revdelete-hide-restricted": "Postavi ograničenja i za administratore kao i za ostale suradnike",
        "revdelete-radio-same": "(ne mijenjaj)",
-       "revdelete-radio-set": "Da",
-       "revdelete-radio-unset": "Ne",
+       "revdelete-radio-set": "Skriven",
+       "revdelete-radio-unset": "Vidljivo",
        "revdelete-suppress": "Sakrij podatke od administratora i ostalih suradnika",
        "revdelete-unsuppress": "Ukloni ograničenja na vraćenim izmjenama",
        "revdelete-log": "Razlog:",
        "searchall": "sve",
        "showingresults": "Dolje {{PLURAL:$1|je prikazan '''$1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}}, počevši od '''$2'''.",
        "showingresultsinrange": "Dolje {{PLURAL:$1|je prikazan '''$1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}}, u rasponu od '''$2''' do '''$3'''.",
+       "search-showingresults": "{{PLURAL:$4|Rezultat <strong>$1</strong> od <strong>$3</strong>|Rezultati <strong>$1 - $2</strong> od <strong>$3</strong>}}",
        "search-nonefound": "Ne postoje rezultati koji se podudaraju s upitom.",
        "powersearch-legend": "Napredno pretraživanje",
        "powersearch-ns": "Traži u imenskom prostoru:",
        "preferences": "Postavke",
        "mypreferences": "Moje postavke",
        "prefs-edits": "Broj uređivanja:",
+       "prefsnologintext2": "Molimo Vas prijavite se da biste promijenili postavke.",
        "prefs-skin": "Izgled",
        "skin-preview": "Pregled",
        "datedefault": "Nemoj postaviti",
        "prefs-personal": "Podaci o suradniku",
        "prefs-rc": "Nedavne promjene i kratki članci",
        "prefs-watchlist": "Praćene stranice",
+       "prefs-editwatchlist": "Uredi popis praćenja",
+       "prefs-editwatchlist-label": "Uredi stavke na popisu praćenja:",
+       "prefs-editwatchlist-edit": "vidi i ukloni stavke s popisa praćenja",
+       "prefs-editwatchlist-raw": "uredi popis praćenih stranica u okviru za uređivanje",
+       "prefs-editwatchlist-clear": "očisti popis praćenja",
        "prefs-watchlist-days": "Broj dana koji će se prikazati na popisu praćenja:",
        "prefs-watchlist-days-max": "Najviše $1 {{PLURAL:$1|dan|dana}}",
        "prefs-watchlist-edits": "Broj uređivanja koji će se prikazati na proširenom popisu praćenja:",
        "gender-female": "Ženski",
        "prefs-help-gender": "Mogućnost softvera da ispravno oslovljava razlikujući spol. Ovaj će podatak biti javan.",
        "email": "Adresa elektroničke pošte *",
-       "prefs-help-realname": "Pravo ime nije obvezno. Ako ga navedete, bit će korišteno za pravnu atribuciju Vaših doprinosa.",
+       "prefs-help-realname": "Pravo ime nije obvezno. Ako ga navedete, može biti rabljeno za pripisivanje Vaših doprinosa.",
        "prefs-help-email": "E-mail adresa nije obvezna, ali je potrebna za obnovu lozinke u slučaju da ju zaboravite.",
        "prefs-help-email-others": "Također možete odabrati da vas ostali kontaktiraju preko vaše suradničke ili stranice za razgovor bez javnog otkrivanja vašeg identiteta.",
        "prefs-help-email-required": "Potrebno je navesti adresu e-pošte (e-mail).",
        "prefs-displaywatchlist": "Mogućnosti prikaza",
        "prefs-diffs": "razl",
        "prefs-help-prefershttps": "Ova mogućnost će stupiti na snagu kod sljedeće prijave.",
+       "prefswarning-warning": "Napravili ste promjene u Vašim postavkama koje još nisu snimljene.\nAko napustite ovu stranicu bez pritiska na \"$1\", postavke neće biti ažurirane.",
+       "prefs-tabs-navigation-hint": "Savjet: možete rabiti tipke sa strjelicama lijevo i desno za prebacivanje između kartica na popisu kartica.",
        "email-address-validity-valid": "Adresa e-pošte pokazuje se ispravnom",
        "email-address-validity-invalid": "Unesite valjanu adresu e-pošte",
        "userrights": "Upravljanje suradničkim pravima",
        "userrights-notallowed": "Vaš trenutačni suradnički račun nema ovlasti mijenjanja suradničkih prava.",
        "userrights-changeable-col": "Skupine koje možete promijeniti",
        "userrights-unchangeable-col": "Skupine koje ne možete promijeniti",
+       "userrights-conflict": "Sukob promjene suradničkih prava! Molimo provjerite i potvrdite svoje promjene.",
+       "userrights-removed-self": "Uspješno ste uklonili svoja vlastita prava. Kao takvi, više niste u mogućnosti pristupiti ovoj stranici.",
        "group": "Skupina:",
        "group-user": "Suradnici",
        "group-autoconfirmed": "automatski potvrđeni suradnici",
        "action-createpage": "stvaranje stranica",
        "action-createtalk": "stvaranje stranica za razgovor",
        "action-createaccount": "stvaranje ovog suradničkog računa",
+       "action-history": "Vidi povijest uređivanja ove stranice",
        "action-minoredit": "označavanje ove izmjene kao manju",
        "action-move": "premještanje ove stranice",
        "action-move-subpages": "premještanje ove stranice, i njenih podstranica",
        "uploaderror": "Pogreška kod postavljanja",
        "upload-recreate-warning": "'''Upozorenje: datoteka s tim imenom je izbrisana ili premještena.'''\n\nEvidencije brisanja i premještanja prikazane su ovdje:",
        "uploadtext": "Ovaj obrazac služi za postavljanje datoteka.\nZa pregledavanje i pretraživanje već postavljenih datoteka vidi [[Special:FileList|popis postavljenih datoteka]], (ponovljena) postavljanja su također u [[Special:Log/upload|popisu postavljanja]], a brisanja u [[Special:Log/delete|popisu brisanja]].\n\nDa biste na stranicu stavili datoteku, koristite poveznice tipa\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.jpg]]</nowiki></code>''' za punu verziju datoteke\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.png|200px|mini|left|popratni tekst]]</nowiki></code>''' za datoteku širine 200 px u okviru s 'popratnim tekstom' kao opisom\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datoteka.ogg]]</nowiki></code>''' za direktno povezivanje na datoteku bez njenog prikazivanja",
-       "upload-permitted": "Dopušteni tipovi datoteka: $1.",
-       "upload-preferred": "Poželjni tipovi datoteka: $1.",
-       "upload-prohibited": "Zabranjeni tipovi datoteka: $1.",
+       "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",
        "uploadlogpagetext": "Dolje je popis nedavno postavljenih slika.",
        "filename": "Ime datoteke",
        "windows-nonascii-filename": "Ovaj wiki ne podržava imena datoteka s posebnim znakovima.",
        "fileexists": "Datoteka s ovim imenom već postoji, pogledajte <strong>[[:$1]]</strong> ako niste sigurni želite li je uistinu promijeniti.\n[[$1|thumb]]",
        "filepageexists": "Opis stranice za ovu datoteku je već napravljen ovdje <strong>[[:$1]]</strong>, ali datoteka sa ovim nazivom trenutno ne postoji.\nSažetak koji ste naveli neće se pojaviti na stranici opisa.\nDa bi se Vaš opis ovdje našao, potrebno je da ga ručno uredite.\n[[$1|thumb]]",
-       "fileexists-extension": "Već postoji datoteka sa sličnim imenom: [[$2|thumb]]\n* Ime datoteke koju postavljate: <strong>[[:$1]]</strong>\n* Ime postojeće datoteke: <strong>[[:$2]]</strong>\nMolimo da izaberete drugo ime.",
+       "fileexists-extension": "Već postoji datoteka sa sličnim imenom: [[$2|thumb]]\n* Ime datoteke koju postavljate: <strong>[[:$1]]</strong>\n* Ime postojeće datoteke: <strong>[[:$2]]</strong>\nŽelite li možda izabrati više različito ime?",
        "fileexists-thumbnail-yes": "Datoteka je najvjerojatnije slika u smanjenoj veličini ''(thumbnail)''. [[$1|thumb]]\nMolimo provjerite datoteku <strong>[[:$1]]</strong>.\nUkoliko je ta datoteka ista kao i ova koju ste upravo pokušali snimiti, samo u višoj rezoluciji, nije nužno snimanje smanjenje slike ''(thumbnaila)'', prikazivanje smanjene slike iz izvornika radi se softverski.",
        "file-thumbnail-no": "Ime datoteke počinje s <strong>$1</strong>.\nČini se da je to slika smanjene veličine ''(minijatura)''.\nUkoliko imate ovu sliku u punoj razlučljivosti (rezoluciji) postavite tu sliku, u protivnom, molimo promijenite ime datoteke.",
        "fileexists-forbidden": "Datoteka s ovim imenom već postoji i ne može biti presnimljena.\nAko i dalje želite postaviti svoju datoteku, molimo vratite se i odaberite novo ime. [[File:$1|thumb|center|$1]]",
        "license": "Licencija:",
        "license-header": "Licencija",
        "nolicense": "Ništa nije odabrano",
+       "licenses-edit": "Uredi izbor licencija",
        "license-nopreview": "(Prikaz nije moguć)",
-       "upload_source_url": " (valjani, javno dostupni URL)",
-       "upload_source_file": "(datoteka na Vašem računalu)",
+       "upload_source_url": " (izabrali ste datoteku s valjanog, javno dostupnog URL-a)",
+       "upload_source_file": "(izabrali ste datoteku s Vašeg računala)",
+       "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:",
        "imgfile": "datoteka",
        "unusedtemplateswlh": "druge poveznice",
        "randompage": "Slučajna stranica",
        "randompage-nopages": "Nema stranica u {{PLURAL:$2|imenskom prostoru|imenskim prostorima}}: $1.",
+       "randomincategory": "Slučajna stranica u kategoriji",
+       "randomincategory-invalidcategory": "\"$1\" nije valjano ime kategorije.",
+       "randomincategory-category": "Kategorija:",
+       "randomincategory-legend": "Slučajna stranica u kategoriji",
        "randomredirect": "Slučajno preusmjeravanje",
        "randomredirect-nopages": "Nema preusmjeravanja u imenskom prostoru \"$1\".",
        "statistics": "Statistika",
        "protectedpages-indef": "Samo neograničene zaštite",
        "protectedpages-cascade": "Samo prenosiva zaštita",
        "protectedpagesempty": "Nema zaštićenih stranica koje ispunjavaju uvjete koje ste postavili.",
+       "protectedpages-page": "Stranica",
+       "protectedpages-expiry": "Istječe",
+       "protectedpages-params": "Stupanj zaštite",
+       "protectedpages-reason": "Razlog",
        "protectedtitles": "Zaštićeni naslovi",
        "protectedtitlesempty": "Nijedan naslov nije trenutačno zaštićen s tim parametrima.",
        "listusers": "Popis suradnika",
        "listgrouprights-removegroup-self": "Ukloni {{PLURAL:$2|skupinu|skupine}} iz vlastitog računa: $1",
        "listgrouprights-addgroup-self-all": "Dodaj sve skupine vlastitom računu",
        "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",
        "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.",
        "mywatchlist": "Moj popis praćenja",
        "watchlistfor2": "Za $1 $2",
        "nowatchlist": "Na Vašem popisu praćenja nema nijednog članka.",
-       "watchlistanontext": "Molimo Vas $1 kako biste mogli vidjeti ili uređivati Vaš popis praćenih stranica.",
+       "watchlistanontext": "Molimo Vas prijavite se kako biste mogli vidjeti ili uređivati Vaš popis praćenih stranica.",
        "watchnologin": "Niste prijavljeni",
        "addwatch": "Dodaj u popis praćenja",
        "addedwatchtext": "Stranica \"[[:$1]]\" je dodana na Vaš [[Special:Watchlist|popis praćenja]].\nPromjene na toj stranici i njenoj stranici za razgovor bit će prikazane na popisu praćenja.",
+       "addedwatchtext-short": "Stranica \"$1\" dodana je Vašem popisu praćenja.",
        "removewatch": "Ukloni s popisa praćenja",
        "removedwatchtext": "Stranica \"[[:$1]]\" je uklonjena s [[Special:Watchlist|Vašeg popisa praćenja]].",
+       "removedwatchtext-short": "Stranica \"$1\" uklonjena je s Vašeg popisa praćenja.",
        "watch": "Prati",
        "watchthispage": "Prati ovu stranicu",
        "unwatch": "Prekini praćenje",
        "watchlist-details": "{{PLURAL:$1|$1 stranica se nalazi|$1 stranice se nalaze|$1 stranica se nalazi}} na popisu praćenja, ne brojeći stranice za razgovor.",
        "wlheader-enotif": "Uključeno je izvješćivanje e-poštom.",
        "wlheader-showupdated": "Stranice koje su promijenjene od Vašeg posljednjeg posjeta prikazane su '''podebljano'''.",
-       "wlnote": "Ovdje {{PLURAL:$1|je posljednja $1 promjena|su posljednje $1 promjene|je posljednjih $1 promjena}} u {{PLURAL:$2|posljednjem '''$2''' satu|posljednja '''$2''' sata|posljednjih '''$2''' sati}}, od $3, $4.",
+       "wlnote": "Ovdje {{PLURAL:$1|je posljednja $1 promjena|su posljednje $1 promjene|je posljednjih $1 promjena}} u {{PLURAL:$2|posljednjem <strong>$2</strong> satu|posljednja '''$2''' sata|posljednjih <strong>$2</strong> sati}}, od $3, $4.",
        "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
        "watchlist-options": "Izbornik popisa praćenja",
        "watching": "Pratim...",
        "exbeforeblank": "sadržaj prije brisanja je bio: '$1'",
        "delete-confirm": "Obriši \"$1\"",
        "delete-legend": "Izbriši",
-       "historywarning": "'''Upozorenje''': stranica koju želite izbrisati ima starije izmjene s približno $1 {{PLURAL:$1|inačicom|inačice|inačica}}:",
+       "historywarning": "<strong>Upozorenje:</strong> stranica koju želite izbrisati ima starije izmjene s $1 {{PLURAL:$1|inačicom|inačice|inačica}}:",
        "confirmdeletetext": "Zauvijek ćete izbrisati stranicu ili sliku zajedno s prijašnjim inačicama.\nMolim potvrdite svoju namjeru, da razumijete posljedice i da ovo radite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
        "actioncomplete": "Zahvat završen",
        "actionfailed": "Radnja nije uspjela",
        "delete-edit-reasonlist": "Uredi razloge brisanja",
        "delete-toobig": "Ova stranica ima veliku povijest uređivanja, preko $1 {{PLURAL:$1|promjene|promjena}}. Brisanje takvih stranica je ograničeno da se onemoguće slučajni problemi u radu {{SITENAME}}.",
        "delete-warning-toobig": "Ova stranica ima veliku povijest uređivanja, preko $1 {{PLURAL:$1|promjene|promjena}}. Brisanje može poremetiti bazu podataka {{SITENAME}}; postupajte s oprezom.",
+       "deleteprotected": "Ne možete obrisati ovu stranicu jer je zaštićena.",
        "deleting-backlinks-warning": "'''Upozorenje:''' brišete stranicu koja je uključena u druge ili druge stranice povezuju na nju.",
        "rollback": "Ukloni posljednju promjenu",
        "rollbacklink": "ukloni",
        "import-rootpage-nosubpage": "Imenski prostor \"$1\" početne stranice ne dopušta podstranice.",
        "importlogpage": "Evidencija uvoza članaka",
        "importlogpagetext": "Administrativni uvoz stranica s poviješću uređivanja s drugih wikija.",
-       "import-logentry-upload": "uvezeno [[$1]] uvozom datoteke",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}",
-       "import-logentry-interwiki": "transwiki uvezeno $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|promjena|promjene|promjena}} od $2",
        "javascripttest": "Testiranje JavaScripta",
        "javascripttest-pagetext-noframework": "Ova je stranica rezervirana za izvršavanje JavaScript testova.",
        "spam_reverting": "Vraćam na posljednju inačicu koja ne sadrži poveznice na $1",
        "spam_blanking": "Sve inačice sadrže poveznice na $1, brišem cjelokupni sadržaj",
        "spam_deleting": "Sve inačice sadržale su poveznice na $1, brišem cjelokupni sadržaj",
-       "simpleantispam-label": "Anti-spam provjera.\n'''Ne''' ispunjavajte ovo!",
+       "simpleantispam-label": "Anti-spam provjera.\n<strong>NE</strong> ispunjavajte ovo!",
        "pageinfo-title": "Podatci o stranici \"$1\"",
        "pageinfo-not-current": "Nema podataka o uređivanju za najstarija uređivanja stranice.",
        "pageinfo-header-basic": "Osnovni podatci",
        "hours-ago": "prije $1 {{PLURAL:$1|sat|sata|sati}}",
        "minutes-ago": "prije $1 {{PLURAL:$1|minute|minuta}}",
        "seconds-ago": "prije $1 {{PLURAL:$1|sekunde|sekundi}}",
+       "monday-at": "u ponedjeljak u $1",
+       "tuesday-at": "u utorak u $1",
+       "wednesday-at": "u srijedu u $1",
+       "thursday-at": "u četvrtak u $1",
+       "friday-at": "u petak u $1",
+       "saturday-at": "u subotu u $1",
+       "sunday-at": "u nedjelju u $1",
+       "yesterday-at": "Jučer u $1",
        "bad_image_list": "Rabi se sljedeći format:\n\nSamo retci koji počinju sa zvjezdicom su prikazani. Prva poveznica u retku mora biti poveznica na nevaljanu sliku.\nSvaka sljedeća poveznica u istom retku je izuzetak, npr. kod stranica gdje se slike pojavljuju ''inline''.",
        "variantname-sr-ec": "ćirilica",
        "variantname-sr-el": "latinica",
        "confirm-watch-top": "Dodajte ovu stranicu na Vaš popis praćenih stranica",
        "confirm-unwatch-button": "U redu",
        "confirm-unwatch-top": "Ukloni ovu stranicu s popisa praćenja?",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← prethodna slika",
        "imgmultipagenext": "sljedeća slika →",
        "imgmultigo": "Kreni!",
        "imgmultigoto": "Idi na stranicu $1",
+       "img-lang-default": "(zadani jezik)",
+       "img-lang-go": "Idi",
        "ascending_abbrev": "rast",
        "descending_abbrev": "pad",
        "table_pager_next": "Sljedeća stranica",
        "watchlistedit-raw-done": "Vaš popis praćenja je snimljen.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 stranica je dodana|$1 stranice su dodane}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 stranica je uklonjena|$1 stranice su ukonjene}}:",
+       "watchlistedit-clear-title": "Očišćen popis praćenja",
+       "watchlistedit-clear-legend": "Obriši popis praćenja",
+       "watchlistedit-clear-explain": "Sve stavke s popisa praćenja će biti izbrisane",
+       "watchlistedit-clear-titles": "Imena stranica:",
+       "watchlistedit-clear-submit": "Izbriši popis praćenja (ovo je nepovratno!)",
+       "watchlistedit-clear-done": "Vaš je popis praćenja obrisan.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 je stranica uklonjena|$1 su stranice ukonjene}}:",
+       "watchlisttools-clear": "Obriši popis praćenja",
        "watchlisttools-view": "Pregled promjena praćenih stranica",
        "watchlisttools-edit": "Pregled i uređivanje praćenih stranica",
        "watchlisttools-raw": "Uređivanje praćenih stranica u okviru za uređivanje",
        "duplicate-defaultsort": "'''Upozorenje:''' Razvrstavanje po \"$2\" poništava ranije razvrstavanje po \"$1\".",
        "version": "Inačica softvera",
        "version-extensions": "Instalirana proširenja",
-       "version-skins": "Izgledi",
+       "version-skins": "Postavljeni izgledi",
        "version-specialpages": "Posebne stranice",
        "version-parserhooks": "Kuke parsera",
        "version-variables": "Varijable",
        "version-parser-function-hooks": "Kuke funkcija parsera",
        "version-hook-name": "Ime kuke",
        "version-hook-subscribedby": "Pretplaćeno od",
-       "version-version": "(Inačica $1)",
+       "version-version": "($1)",
        "version-license": "Licenca",
        "version-ext-license": "Licenca",
+       "version-ext-colheader-name": "Dodatak",
+       "version-skin-colheader-name": "Izgled",
        "version-ext-colheader-version": "Verzija",
        "version-ext-colheader-license": "Licenca",
        "version-ext-colheader-description": "Opis",
        "version-ext-colheader-credits": "Autori",
+       "version-license-title": "Licencija za $1",
+       "version-license-not-found": "Za ovaj dodatak nema detaljnih informacija o licenciji.",
        "version-poweredby-credits": "Ovaj wiki pogoni '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava © 2001-$1 $2.",
        "version-poweredby-others": "ostali",
        "version-credits-summary": "Željeli bismo zahvaliti sljedećim suradnicima na njihovom doprinosu [[Special:Version|MediaWikiju]].",
        "version-entrypoints": "URL adresa instalacije",
        "version-entrypoints-header-entrypoint": "Početna adresa",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Instalirane biblioteke",
+       "version-libraries-version": "Inačica",
        "redirect-submit": "Idi",
        "redirect-value": "Vrijednost:",
        "redirect-user": "ID suradnika",
        "tags-active-yes": "Da",
        "tags-active-no": "Ne",
        "tags-edit": "uredi",
+       "tags-delete": "izbriši",
+       "tags-activate": "pokreni",
+       "tags-deactivate": "isključi",
        "tags-hitcount": "$1 {{PLURAL:$1|promjena|promjene|promjena}}",
+       "tags-manage-no-permission": "Nemate pravo upravljati promjenama oznaka.",
+       "tags-create-heading": "Stvori novu oznaku",
+       "tags-create-tag-name": "Naziv oznake:",
+       "tags-create-reason": "Razlog:",
+       "tags-create-submit": "Stvori",
+       "tags-create-no-name": "Morate navesti ime oznake.",
+       "tags-create-already-exists": "Oznaka \"$1\" već postoji.",
+       "tags-create-warnings-below": "Želite li nastaviti stvaranje oznake?",
+       "tags-delete-title": "Izbriši oznaku",
+       "tags-delete-reason": "Razlog:",
+       "tags-delete-not-found": "Oznaka \"$1\" ne postoji.",
+       "tags-activate-title": "Pokreni oznaku",
+       "tags-activate-reason": "Razlog:",
+       "tags-activate-not-allowed": "Nije moguće pokrenuti oznaku \"$1\".",
+       "tags-activate-not-found": "Oznaka \"$1\" ne postoji.",
+       "tags-activate-submit": "Pokreni",
+       "tags-deactivate-title": "Isključi oznaku",
+       "tags-deactivate-question": "Isključit ćete oznaku \"$1\".",
+       "tags-deactivate-reason": "Razlog:",
+       "tags-deactivate-not-allowed": "Nije moguće isključiti oznaku \"$1\".",
+       "tags-deactivate-submit": "Isključi",
        "comparepages": "Usporedite stranice",
        "compare-page1": "Stranica 1",
        "compare-page2": "Stranica 2",
        "compare-revision-not-exists": "Navedena izmjena stranice ne postoji.",
        "dberr-problems": "Ispričavamo se! Ova stranica ima tehničkih poteškoća.",
        "dberr-again": "Pričekajte nekoliko minuta i ponovno učitajte.",
-       "dberr-info": "(Ne mogu se spojiti na poslužitelj baze: $1)",
-       "dberr-info-hidden": "(Ne mogu se spojiti na poslužitelj baze)",
+       "dberr-info": "(Ne mogu pristupiti bazi podataka: $1)",
+       "dberr-info-hidden": "(Ne mogu pristupiti bazi podataka)",
        "dberr-usegoogle": "U međuvremenu pokušajte tražiti putem Googlea.",
        "dberr-outofdate": "Imajte na umu da su njihova kazala našeg sadržaja možda zastarjela.",
        "dberr-cachederror": "Sljedeće je dohvaćena kopija tražene stranice, te možda nije ažurirana.",
        "htmlform-no": "Ne",
        "htmlform-yes": "Da",
        "htmlform-chosen-placeholder": "Odaberite opciju",
+       "htmlform-cloner-create": "Dodaj još",
+       "htmlform-cloner-delete": "Ukloni",
+       "htmlform-cloner-required": "Potrebna je barem jedna vrijednost.",
        "sqlite-has-fts": "$1 s podrškom pretraživanja cijelog teksta",
        "sqlite-no-fts": "$1 bez podrške pretraživanja cijelog teksta",
        "logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
        "logentry-upload-revert": "$1 је {{GENDER:$2|postavio|postavila}} $3",
        "rightsnone": "(suradnik)",
        "revdelete-summary": "sažetak",
+       "feedback-adding": "Dodajem povratne informacije na stranicu...",
+       "feedback-back": "Natrag",
+       "feedback-bugcheck": "Izvrsno! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
+       "feedback-bugnew": "Provjereno. Prijavi novi \"bug\"",
        "feedback-bugornote": "Ako ste spremni detaljno opisati tehnički problem molimo [$1 prijavite \"bug\"].\nInače, možete ispuniti jednostavan obrazac u nastavku. Vaš komentar biti će dodan na stranicu \"[$3 $2]\", zajedno s vašim suradničkim imenom i imenom internetskog preglednika koji rabite.",
-       "feedback-subject": "Tema:",
-       "feedback-message": "Poruka:",
        "feedback-cancel": "Odustani",
-       "feedback-submit": "Pošaljite povratnu informaciju",
-       "feedback-adding": "Dodajem povratne informacije na stranicu...",
+       "feedback-close": "Gotovo",
+       "feedback-error-title": "Pogrješka",
        "feedback-error1": "Pogreška: Neprepoznati rezultat od API funkcije",
        "feedback-error2": "Pogreška: Uređivanje nije uspjelo",
        "feedback-error3": "Pogreška: Nema odgovora od API funkcije",
+       "feedback-message": "Poruka:",
+       "feedback-subject": "Tema:",
+       "feedback-submit": "Predaj",
        "feedback-thanks": "Hvala! Vaš odgovor je snimljen na stranicu \"[$2 $1]\".",
-       "feedback-close": "Gotovo",
-       "feedback-bugcheck": "Izvrsno! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
-       "feedback-bugnew": "Provjereno. Prijavi novi \"bug\"",
+       "feedback-thanks-title": "Hvala!",
        "searchsuggest-search": "Traži",
        "searchsuggest-containing": "sadrži....",
        "api-error-badaccess-groups": "Nemate ovlasti za postavljanje datoteka na ovu wiki.",
        "expand_templates_generate_xml": "Prikaži XML stablo",
        "expand_templates_preview": "Vidi kako će izgledati",
        "mediastatistics": "Statistika datoteka",
-       "mediastatistics-summary": "Slijede statistike postavljenih datoteka koje pokazuju zadnju inačicu datoteke. Starije ili izbrisane inačice nisu prikazane."
+       "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-latin": "latinica",
+       "special-characters-group-latinextended": "proširena latinica",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "simboli",
+       "special-characters-group-greek": "grčki",
+       "special-characters-group-cyrillic": "ćirilica",
+       "special-characters-group-arabic": "arapski",
+       "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"
 }
index 96b3d92..ea835c9 100644 (file)
@@ -12,7 +12,8 @@
                        "Tlustulimu",
                        "לערי ריינהארט",
                        "아라",
-                       "Mikławš"
+                       "Mikławš",
+                       "Macofe"
                ]
        },
        "tog-underline": "Wotkazy podšmórnić:",
@@ -39,7 +40,7 @@
        "tog-shownumberswatching": "Ličbu wobkedźbowacych wužiwarjow pokazać",
        "tog-oldsig": "Eksistowaca signatura:",
        "tog-fancysig": "Ze signaturu kaž z wikitekstom wobchadźeć  (bjez awtomatiskeho wotkaza)",
-       "tog-uselivepreview": "Live-přehlad wužiwać (eksperimentalny)",
+       "tog-uselivepreview": "Live-přehlad wužiwać",
        "tog-forceeditsummary": "Mje skedźbnić, jeli zabudu zjeće",
        "tog-watchlisthideown": "Moje změny we wobkedźbowankach schować",
        "tog-watchlisthidebots": "Změny awtomatiskich programow (botow) we wobkedźbowankach schować",
        "otherlanguages": "W druhich rěčach",
        "redirectedfrom": "(ze strony $1 sposrědkowany)",
        "redirectpagesub": "Daleposrědkowanje",
+       "redirectto": "Dale sposrědkować do:",
        "lastmodifiedat": "Strona bu posledni raz dnja $1 w $2 hodź. změnjena.",
        "viewcount": "Strona bu {{PLURAL:$1|jónu|dwójce|$1 razy|$1 razow}} wopytana.",
        "protectedpage": "Škitana strona",
        "pool-queuefull": "Poolowa čakanska rynka je połna",
        "pool-errorunknown": "Njeznaty zmylk:",
        "pool-servererror": "Poolowa ličakowa słužba k dispoziciji njesteji ($1)",
+       "poolcounter-usage-error": "Wužiwanski zmylk: $1",
        "aboutsite": "Wo {{GRAMMAR:lokatiw|{{SITENAME}}}}",
        "aboutpage": "Project:Wo",
        "copyright": "Wobsah pod $1 k dispoziciji steji, jeli njeje so hinak podało.",
        "disclaimers": "Licencne postajenja",
        "disclaimerpage": "Project:Impresum",
        "edithelp": "Pomoc za wobdźěłowanje",
+       "helppage-top-gethelp": "Pomoc",
        "mainpage": "Hłowna strona",
        "mainpage-description": "Hłowna strona",
        "policy-url": "Project:Směrnicy",
        "readonly_lag": "Datowa banka bu awtomatisce zawrjena, mjeztym zo pospytuja wotwisne serwery datowych bankow  hłowny serwer docpěć",
        "internalerror": "Znutřkowny zmylk",
        "internalerror_info": "Znutřkowny zmylk: $1",
+       "internalerror-fatal-exception": "Fatalny wuwzaćowy zmylk typa \"$1\"",
        "filecopyerror": "Njebě móžno dataju „$1” do „$2” kopěrować.",
        "filerenameerror": "Njebě móžno dataju „$1” do „$2” přemjenować.",
        "filedeleteerror": "Njebě móžno dataju „$1” wušmórnyć.",
        "directorycreateerror": "Zapis „$1“ njeda so wutworić.",
+       "directoryreadonlyerror": "Zapis \"$1\" da so jenož čitać.",
+       "directorynotreadableerror": "Zapis \"$1\" njeda so čitać.",
        "filenotfound": "Njebě móžno dataju „$1” namakać.",
        "unexpected": "Njewočakowana hódnota: \"$1\"=\"$2\".",
        "formerror": "Zmylk: Njebě móžno formular wotesłać.",
        "viewsourcetext": "Móžeš sej žórłowy tekst tuteje strony wobhladać a jón kopěrować:",
        "viewyourtext": "Móžeš sej žórłowy tekst '''swojich změnow''' wobhladać a do slědowaceje strony kopěrować:",
        "protectedinterface": "Tuta strona wobsahuje tekst za wužiwarski powjerch softwary na tutym wikiju a je škitana, zo by so znjewužiwanje zadźěwało.\nZo by přełožki za wšě wikije přidał abo změnił, wužij prošu [//translatewiki.net/ translatewiki.net], projekt MediaWiki za lokalizaciju.",
-       "editinginterface": "'''Warnowanje:''' Wobdźěłuješ stronu, kotraž so wužiwa, zo by tekst za wužiwarski powjerch softwary k dispoziciji stajiła. Změny na stronje  wuskutkuja so na napohlad wužiwarskeho powjercha za druhich wužiwarjow na tutym wikiju. Zo by přełožki za wšě wikije přidał abo změnił, wužij prošu [//translatewiki.net/ translatewiki.net], projekt MediaWiki za lokalizaciju.",
+       "editinginterface": "<strong>Warnowanje:</strong> Wobdźěłuješ stronu, kotraž so wužiwa, zo by tekst za wužiwarski powjerch softwary k dispoziciji stajiła. Změny na stronje  wuskutkuja so na napohlad wužiwarskeho powjercha za druhich wužiwarjow na tutym wikiju.",
        "cascadeprotected": "Tuta strona je za wobdźěłowanje zawrjena, dokelž je w {{PLURAL:$1|slědowacej stronje|slědowacymaj stronomaj|slědowacych stronach|slědowacych stronach}} zapřijata, {{PLURAL:$1|kotraž je|kotrejž stej|kotrež su|kotrež su}} přez kaskadowu opciju {{PLURAL:$1|škitana|škitanej|škitane|škitane}}:\n$2",
        "namespaceprotected": "Nimaš dowolnosć, zo by stronu w mjenowym rumje '''$1''' wobdźěłał.",
        "customcssprotected": "Nimaš prawo, zo by tutu CSS-stronu wobdźěłał, dokelž wosobinske nastajenja druheho wužiwarja wobsahuje.",
        "preview": "Přehlad",
        "showpreview": "Přehlad pokazać",
        "showdiff": "Změny pokazać",
-       "anoneditwarning": "'''Kedźbu:''' Njejsy přizjewjeny. Twoja IP-adresa budźe so do wersijowych stawiznow strony přijimać.",
+       "anoneditwarning": "<strong>Warnowanje:</strong> Njejsy přizjewjeny. Twoja IP-adresa budźe zjawnje widźomna, hdyž něšto změniš. Jeli <strong>[$1 so přizjewiš]</strong> abo <strong>[$2 konto załožiš]</strong>, so twoje změny twojemu wužiwarskemu mjenu připokazaja, nimo druhich lěpšinow.",
        "anonpreviewwarning": "''Njejsy přizjewjeny. Składowanje přenošuje twoju IP-adresu do wobdźěłowanskeje historije tuteje strony.''",
        "missingsummary": "'''Kedźbu:''' Njejsy žane zjeće zapodał. Jeli hišće raz na \"{{int:savearticle}}\" kliknješ, budźe so twoja změna bjez njeho składować.",
        "missingcommenttext": "Prošu zapodaj komentar.",
        "parser-template-recursion-depth-warning": "Limit za rekursijnu hłubokosć předłohi překročeny ($1)",
        "language-converter-depth-warning": "Limit hłubokosće rěčneho konwertera překročena ($1)",
        "node-count-exceeded-category": "Strony, hdźež ličba sukow je překročena",
-       "node-count-exceeded-category-desc": "Kategorija za strony, hdźež ličba sukow je překročena.",
+       "node-count-exceeded-category-desc": "Tuta strona překroča maksimalnu ličbu sukow.",
        "node-count-exceeded-warning": "Strona je ličbu sukow překročiła",
        "expansion-depth-exceeded-category": "Strony, hdźež ekspansiska hłubokosć je překročena",
-       "expansion-depth-exceeded-category-desc": "To je kategorija za strony, hdźež ekspansiska hłubokosć je překročena.",
+       "expansion-depth-exceeded-category-desc": "Strona překroša maksimalnu ekspansisku hłubokosć.",
        "expansion-depth-exceeded-warning": "Strona je ekspansisku hłubokosć překročił",
        "parser-unstrip-loop-warning": "Njeskónčna sekla namakana",
        "parser-unstrip-recursion-limit": "Rekursiska hranica překročena ($1)",
        "history-feed-empty": "Strona, kotruž sy požadał, njeeksistuje. Bu snano z wikija wotstronjena abo přesunjena. Móžeš tu [[Special:Search|w {{SITENAME}}]] za stronami z podobnym titulom pytać.",
        "rev-deleted-comment": "(Zjeće wotstronjene)",
        "rev-deleted-user": "(wužiwarske mjeno wotstronjene)",
-       "rev-deleted-event": "(Protokolowa akcija bu wotstronjena)",
+       "rev-deleted-event": "(Protokolowe podrobnosće su so wotstronili)",
        "rev-deleted-user-contribs": "[wužiwarske mjeno wotstronjene abo IP-adresa wotstronjena - změna mjez přinoškami schowana]",
        "rev-deleted-text-permission": "Tuta wersija strony bu '''wušmórnjena'''.\nHlej podrobnosće w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokolu wušmórnjenjow].",
        "rev-deleted-text-unhide": "Tuta wersija strony bu '''wušmórnjena'''.\nHlej podrobnosće w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokolu wušmórnjenjow].\nMóžeš [$1 sej tutu wersiju wobhladać], jeli chceš pokročować.",
        "revdelete-text-text": "Zhašane wersije wostanu hišće we wersijowej historiji, ale dźěle jich wobsaha njebudu přistupne zjawnosći.",
        "revdelete-text-file": "Zhašane datajowe wersije wostanu w datajowej historiji, ale dźěle jich wobsaha njebudu přistupne zjawnosći.",
        "logdelete-text": "Zhašane protokolowe zapiski wostanu hišće w protokolach, ale dźěle jich wobsaha njebudu přistupne zjawnosći.",
-       "revdelete-text-others": "Druzy administratorojo na {{GRAMMAR:lokatiw|{{SITENAME}}}} móža hišće na schowany wobsah přistup měć a móža jón zaso přez samsny wužiwarski powjerch wobnowić, chibazo su přidatne wobmjezowanja.",
+       "revdelete-text-others": "Druzy administratorojo móža hišće na schowany wobsah přistup měć a jón zaso wobnowić, chibazo su přidatne wobmjezowanja.",
        "revdelete-confirm": "Prošu potwjerdź, zo chceš to činić, zo rozumiš konsekwency a zo činiš to po [[{{MediaWiki:Policy-url}}|prawidłach]].",
        "revdelete-suppress-text": "Potłóčenje dyrbjało so '''jenož''' za slědowace pady wužiwać:\n* Potencielnje křiwdźace informacije\n* Njepřihódne wosobinske informacije\n*: ''Bydlenske adresy a telefonowe čisła, čisła socialneho zawěsćenja atd.''",
        "revdelete-legend": "Wobmjezowanja za widźomnosć nastajić",
        "revdelete-hide-text": "Tekst wersije",
        "revdelete-hide-image": "Wobsah wobraza schować",
-       "revdelete-hide-name": "Akciju a cil schować",
+       "revdelete-hide-name": "Cil a parametry schować",
        "revdelete-hide-comment": "Zjeće změnow",
        "revdelete-hide-user": "Mjeno/IP-adresa wobdźěłarja",
        "revdelete-hide-restricted": "Daty wot administratorow kaž tež te druhich wužiwarjow potłóčić",
        "preferences": "Nastajenja",
        "mypreferences": "Nastajenja",
        "prefs-edits": "Ličba změnow:",
-       "prefsnologintext2": "Dyrbiš so $1, zo by wužiwarske nastajenja postajił.",
+       "prefsnologintext2": "Prošu přizjew so, zo by swoje nastajenja změnił.",
        "prefs-skin": "Drasta",
        "skin-preview": "Přehlad",
        "datedefault": "Žane nastajenje",
        "gender-female": "Wona wobdźěłuje wikistrony",
        "prefs-help-gender": "Tute podaće je opcionalne:\nSoftwara wužiwa jeho hódnotu, zo by će z pomocu wotpowědneho gramatikaliskeho roda narěčała a druhich na tebje pokazała.\nTuta informacija budźe zjawna.",
        "email": "E-mejl",
-       "prefs-help-realname": "* Woprawdźite mjeno (opcionalne): jeli so rozsudźiš to zapodać, budźe to so wužiwać, zo by tebi woprawnjenje za twoje dźěło dało.",
+       "prefs-help-realname": "Woprawdźite mjeno je opcionalne.\nJeli so rozsudźiš to zapodać, budźe to so wužiwać, zo by tebi woprawnjenje za twoje dźěło dało.",
        "prefs-help-email": "E-mejlowa adresa je opcionalna, ale zmóžnja ći nowe hesło emejlować, jeli sy swoje hesło zabył.",
        "prefs-help-email-others": "Móžeš tež druhim dowolić, so z tobu přez swoju diskusijnu stronu do zwiska stajić, bjeztoho zo dyrbiš swoju identitu přeradźić.",
        "prefs-help-email-required": "E-mejlowa adresa je trěbna.",
        "right-deletedtext": "Wušmórnjeny tekst a změny mjez wušmórnjenymi wersijemi sej wobhladać",
        "right-browsearchive": "Zhašane strony pytać",
        "right-undelete": "Strony wobnowić",
-       "right-suppressrevision": "Wersije, kotrež su před administratorami schowane, přepruwować a wobnowić",
+       "right-suppressrevision": "Specifiske wersije stronow napřećiwo wšěm wužiwarjam pokazać a schować",
        "right-viewsuppressed": "Před wužiwarjemi schowane wersije sej wobhladać",
        "right-suppressionlog": "Priwatne protokole wobhladać",
        "right-block": "Druhich wužiwarjow při wobdźěłowanju haćić",
        "recentchanges-legend-heading": "'''Legenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (hlej tež [[Special:NewPages|lisćinu nowych stronow]])",
        "recentchanges-legend-plusminus": "(''±123'')",
-       "rcnotefrom": "Deleka so změny wot <strong>$2</strong> pokazuja (hač k <strong>$1</strong>).",
+       "rcnotefrom": "Deleka so {{PLURAL:$5|změna|změnje|změny}} wot <strong>$3, $4</strong> {{PLURAL:$5|pokazuje|pokazujetej|pokazuja}} (hač k <strong>$1</strong>).",
        "rclistfrom": "Jenož změny wot $3, $2 pokazać.",
        "rcshowhideminor": "snadne změny $1",
        "rcshowhideminor-show": "pokazać",
        "uploaderror": "Zmylk při nahrawanju",
        "upload-recreate-warning": "'''Warnowanje: Dataja z tym mjenom je so zhašała abo přesunyła.'''\n\nProtokolej zhašenjow a přesunjenjow za tutu stronu stej tu k dobroćiwemu wužiwanju podatej:",
        "uploadtext": "Wužij slědowacy formular, zo by nowe dataje nahrał.\nZo by prjedy nahrate dataje wobhladał abo pytał dźi k [[Special:FileList|lisćinje nahratych datajow]], nahraća so tež w [[Special:Log/upload|protokolu nahraćow]], wušmórnjenja  [[Special:Log/delete|protokolu wušmornjenjow]] protokoluja.\n\nZo by dataju do strony zapřijał, wužij wotkaz w jednej ze slědowacych formow:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dataja.jpg]]</nowiki></code>''', zo by połnu wersiju dataje wužiwał\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dataja.png|200px|thumb|left|alternatiwny tekst]]</nowiki></code>''', zo by wobraz ze šěrokosću 200 pikselow do kašćika na lěwej kromje z alternatiwnym tekstom jako wopisanje wužiwał\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Dataja.ogg]]</nowiki></code>''' zo by direktnje k dataji wotkazał, bjeztoho zo by so dataja zwobrazniła",
-       "upload-permitted": "Dowolene datajowe typy: $1.",
-       "upload-preferred": "Preferowane datajowe typy: $1.",
-       "upload-prohibited": "Zakazane datajowe typy: $1.",
+       "upload-permitted": "{{PLURAL:$2|Dowoleny datajowy typ|Dowolenej datajowej typaj|Dowolene datajowe typy}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Preferowany datajowy typ|preferowanej datajowej typaj|Preferowane datajowe typy}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Zakazany datajowy typ|Zakazanej datajowej typaj|Zakazane datajowe typy}}: $1.",
        "uploadlogpage": "Protokol nahraćow",
        "uploadlogpagetext": "Deleka je lisćina najnowšich nahratych datajow.\nHlej [[Special:NewFiles|galeriju nowych datajow]] za wizuelny přehlad.",
        "filename": "Mjeno dataje",
        "unusedimages": "Njewužiwane dataje",
        "wantedcategories": "Požadane kategorije",
        "wantedpages": "Požadane strony",
+       "wantedpages-summary": "Tuta specialna strona naliči wšě hišće njeeksistowace strony, na kotrež eksistowace strony hižo wotkazuja.",
        "wantedpages-badtitle": "Njepłaćiwy titul we wuslědku: $1",
        "wantedfiles": "Požadane dataje",
        "wantedfiletext-cat": "Slědowace dataje so wužiwaja, ale njeeksistuju. Dataje z cuzych repozitorijow hodźa so nalistować, byrnjež eksistowali. Tajke wopačne pozitiwy su <del>přešmórnjene</del>. Nimo toho so strony w [[:$1]] nalistuja, kotrež dataje zasadźuja, kotrež njeeksistuja.",
        "trackingcategories-desc": "Kriterije za zapřijimanje kategorije",
        "noindex-category-desc": "Tuta strona so přez boćiki njeindeksuje, dokelž ma magiske słowo <code><nowiki>__NOINDEX__</nowiki></code> na sebi a je w mjenowym rumje, hdźež chorhojčka je dowolena.",
        "index-category-desc": "Strona je <code><nowiki>__INDEX__</nowiki></code> na sebi (a je w mjenowym rumje, hdźež ta chorhojčak je dowolena), a tohodla so přez boćiki indeksuje, hdźež so to normalnje njestawa.",
-       "post-expand-template-inclusion-category-desc": "Po ekspandowanju wšěch předłohow, je strona wjetša hač <code>$wgMaxArticleSize</code>, tohodla njejsu so někotre předłohi ekspandowali.",
-       "post-expand-template-argument-category-desc": "Po ekspandowanju předłohoweho argumenta (něšto w trójnych kwaklatych spinkach kaž <code>{{{přikład}}}</code>), strona je wjetša hač <code>$wgMaxArticleSize</code>.",
+       "post-expand-template-inclusion-category-desc": "Po ekspansiji wšěch předłohow je strona wjetša hač <code>$wgMaxArticleSize</code>, tohodla njejsu so někotre předłohi ekspandowali.",
+       "post-expand-template-argument-category-desc": "Po ekspandowanju předłohoweho argumenta (něšto w trójnych zhibowanych spinkach kaž <code>{{{přikład}}}</code>), strona je wjetša hač <code>$wgMaxArticleSize</code>.",
        "expensive-parserfunction-category-desc": "Přewjele naročnych parserowych funkcijow (kaž <code>#ifexist</code>) je so do strony zasadźiło. Hlej [http://www.mediawiki.org/wiki/Special:MyLanguageManual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "Kategorija je so přidała, jeli strona wobsahuje njepłaćiwy datajowy wotkaz (wotkaz za zasadźenje dataje, jeli dataja njeeksistuje).",
        "hidden-category-category-desc": "To je kategorija z <code><nowiki>__HIDDENCAT__</nowiki></code>, kotrež standardnje jeje zwobraznjenju w kašćiku kategorijowych wotkazow na stronje zadźěwa.",
        "import-rootpage-nosubpage": "Mjenowy rum \"$1\" korjenjoweje strony njedowola podstrony.",
        "importlogpage": "Protokol importow",
        "importlogpagetext": "To je lisćina importowanych stronow ze stawiznami z druhich wikijow.",
-       "import-logentry-upload": "strona [[$1]] bu přez nahraće importowana",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}}",
-       "import-logentry-interwiki": "je stronu $1 z druheho wikija přenjesł",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}} z $2 {{PLURAL:$1|importowana|importowanej|importowane|importowane}}",
        "javascripttest": "JavaScriptowy test",
        "javascripttest-pagetext-noframework": "Tuta strona je za přewjedźenje javascriptowych testow přewostajena.",
        "version-parser-function-hooks": "Parserowe funkcije",
        "version-hook-name": "Mjeno hoki",
        "version-hook-subscribedby": "Abonowany wot",
-       "version-version": "(Wersija $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[žane mjeno]",
        "version-license": "Licenca MediaWiki",
        "version-ext-license": "Licenca",
        "logentry-upload-revert": "$1 je $3 {{GENDER:$2|nahrał|nahrała}}",
        "rightsnone": "(ničo)",
        "revdelete-summary": "zjeće wobdźěłać",
+       "feedback-adding": "Komentar so stronje přidawa...",
+       "feedback-bugcheck": "Wulkotnje! Skontroluj jenož, hač to jedyn z [$1 znatych zmylkow] njeje.",
+       "feedback-bugnew": "Sym to skontrolował. Nowy zmylk zdźělić",
        "feedback-bugornote": "Jeli sy zwólniwy, techniski problem nadrobnje wopisać, [$1 zdźěl prošu zmylk].\nHewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so stronje \"[$3 $2]\", z twojim wužiwarskim mjenom a z wobhladowakom, kotryž wužiwaš.",
-       "feedback-subject": "Tema:",
-       "feedback-message": "Powěsć:",
        "feedback-cancel": "Přetorhnyć",
-       "feedback-submit": "Komentar wotpósłać",
-       "feedback-adding": "Komentar so stronje přidawa...",
+       "feedback-close": "Dokónčeny",
        "feedback-error1": "Zmylk: Njepřipóznaty wuslědk wot API",
        "feedback-error2": "Zmylk: Wobdźěłanje je so njeporadźiło",
        "feedback-error3": "Zmylk: Žana wotmołwa wot API",
+       "feedback-message": "Powěsć:",
+       "feedback-subject": "Tema:",
+       "feedback-submit": "Wotpósłać",
        "feedback-thanks": "Dźakujemy so! Twój komentar je so k stronje \"[$2 $1]\" pósłał.",
-       "feedback-close": "Dokónčeny",
-       "feedback-bugcheck": "Wulkotnje! Skontroluj jenož, hač to jedyn z [$1 znatych zmylkow] njeje.",
-       "feedback-bugnew": "Sym to skontrolował. Nowy zmylk zdźělić",
        "searchsuggest-search": "Pytać",
        "searchsuggest-containing": "wobsahuje...",
        "api-error-badaccess-groups": "Nimaš prawo dataje do tutoho wikija nahrać.",
        "log-description-pagelang": "To je protokol změnow na rěčach stronow.",
        "logentry-pagelang-pagelang": "$1 je rěč strony za $3 wot $4 do $5 {{GENDER:$2|změnił|změniła}}.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (zmóžnjeny)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''znjemóžnjeny''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''znjemóžnjeny''')",
+       "special-characters-group-latin": "Łaćonske",
+       "special-characters-group-latinextended": "Łaćonske rozšěrjene",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symbole",
+       "special-characters-group-greek": "Grjekske",
+       "special-characters-group-cyrillic": "Kyriliske",
+       "special-characters-group-arabic": "Arabske",
+       "special-characters-group-arabicextended": "Rozšěrjena arabšćina",
+       "special-characters-group-persian": "Persiske",
+       "special-characters-group-hebrew": "Hebrejske",
+       "special-characters-group-bangla": "Bengalšćina",
+       "special-characters-group-tamil": "Tamilšćina",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalezišćina",
+       "special-characters-group-gujarati": "Gudźarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thailandšćina",
+       "special-characters-group-lao": "Laošćina",
+       "special-characters-group-khmer": "Khmeršćina",
+       "special-characters-title-endash": "krótka ležaca smužka",
+       "special-characters-title-emdash": "dołha ležaca smužka",
+       "special-characters-title-minus": "minusowe znamješko"
 }
index d0843cd..5611b47 100644 (file)
@@ -37,7 +37,8 @@
                        "Csega",
                        "ViDam",
                        "Adam78",
-                       "Grin"
+                       "Grin",
+                       "Macofe"
                ]
        },
        "tog-underline": "Hivatkozások aláhúzása:",
        "disclaimers": "Jogi nyilatkozat",
        "disclaimerpage": "Project:Jogi nyilatkozat",
        "edithelp": "Szerkesztési segítség",
+       "helppage-top-gethelp": "Segítség",
        "mainpage": "Kezdőlap",
        "mainpage-description": "Kezdőlap",
        "policy-url": "Project:Irányelvek",
        "no-null-revision": "Nem sikerült új null-revíziót létrehozni a(z) „$1” lap számára.",
        "badtitle": "Hibás cím",
        "badtitletext": "A kért oldal címe érvénytelen, üres, vagy rosszul hivatkozott nyelvközi vagy wikiközi cím volt. Olyan karaktereket is tartalmazhatott, melyek címekben nem használhatók.",
-       "perfcached": "Az alábbi adatok gyorsítótárból (''cache''-ből) származnak, és ezért lehetséges, hogy nem a legfrissebb változatot mutatják. Legfeljebb {{PLURAL:$1|egy|$1 }} eredmény áll rendelkezésre a gyorsítótárban.",
+       "perfcached": "Az alábbi adatok gyorsítótárból (''cache''-ből) származnak, és ezért lehetséges, hogy nem a legfrissebb változatot mutatják. Legfeljebb $1 eredmény áll rendelkezésre a gyorsítótárban.",
        "perfcachedts": "Az alábbi adatok gyorsítótárból (''cache''-ből) származnak, legutóbbi frissítésük ideje $1. Legfeljebb {{PLURAL:$4|egy|$4}} eredmény áll rendelkezésre a gyorsítótárban.",
        "querypage-no-updates": "Az oldal frissítése jelenleg le van tiltva. Az itt szereplő adatok nem frissülnek azonnal.",
        "viewsource": "Lapforrás",
        "login-userblocked": "Ez a szerkesztő blokkolva van, a bejelentkezés nem engedélyezett.",
        "wrongpassword": "A megadott jelszó érvénytelen. Próbáld meg újra.",
        "wrongpasswordempty": "Nem adtál meg jelszót. Próbáld meg újra.",
-       "passwordtooshort": "A jelszónak legalább {{PLURAL:$1|egy|$1}} karakterből kell állnia.",
+       "passwordtooshort": "A jelszónak legalább $1 karakterből kell állnia.",
+       "passwordtoolong": "A jelszó nem lehet hosszabb $1 karakternél.",
        "password-name-match": "A jelszavadnak különböznie kell a szerkesztőnevedtől.",
        "password-login-forbidden": "Ezen felhasználónév és jelszó használata tiltott.",
        "mailmypassword": "Jelszó alaphelyzetbe állítása",
        "eauthentsent": "Egy ellenőrző e-mailt küldtünk a megadott címre. Mielőtt más leveleket kaphatnál, igazolnod kell az e-mailben írt utasításoknak megfelelően, hogy valóban a tiéd a megadott cím.",
        "throttled-mailpassword": "Már elküldtünk egy jelszóemlékeztetőt az utóbbi {{PLURAL:$1|egy|$1}} órában.\nA visszaélések elkerülése végett {{PLURAL:$1|egy|$1}} óránként csak egy jelszó-emlékeztetőt küldünk.",
        "mailerror": "Hiba történt az e-mail küldése közben: $1",
-       "acct_creation_throttle_hit": "A wiki látogatói ezt az IP-címet használva {{PLURAL:$1|egy|$1}} fiókot hoztak létre az elmúlt egy nap alatt . Ez a megengedett maximum ezen időtartam alatt, így az erről a címről látogatók jelenleg nem hozhatnak létre újabb fiókokat.",
-       "emailauthenticated": "Az e-mail címedet $2 $3-kor erősítetted meg.",
+       "acct_creation_throttle_hit": "A wiki látogatói ezt az IP-címet használva $1 fiókot hoztak létre az elmúlt egy nap alatt. Ez a megengedett maximum ezen időtartam alatt, így az erről a címről látogatók jelenleg nem hozhatnak létre újabb fiókokat.",
+       "emailauthenticated": "Az e-mail címedet $2, $3-kor erősítetted meg.",
        "emailnotauthenticated": "Az e-mail címed még <strong>nincs megerősítve</strong>. E-mailek küldése és fogadása nem engedélyezett.",
        "noemailprefs": "Az alábbi funkciók használatához meg kell adnod az e-mail címedet.",
        "emailconfirmlink": "E-mail cím megerősítése",
        "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",
        "resettokens-done": "Tokenek újragenerálva.",
        "resettokens-resetbutton": "Kijelőlt tokenek újragenerálása",
        "bold_sample": "Félkövér szöveg",
        "previewnote": "'''Ne feledd, hogy ez csak egy előnézet.''' A változtatásaid még nincsenek elmentve!",
        "continue-editing": "Szerkesztés folytatása",
        "previewconflict": "Ez az előnézet a felső szerkesztődobozban levő szöveg mentés utáni megfelelőjét mutatja.",
-       "session_fail_preview": "'''Az elveszett munkamenetadatok miatt sajnos nem tudtuk feldolgozni a szerkesztésedet.\nKérjük próbálkozz újra!\nAmennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!'''",
+       "session_fail_preview": "<strong>Az elveszett munkamenetadatok miatt sajnos nem tudtuk feldolgozni a szerkesztésedet.</strong>\nKérjük, próbálkozz újra!\nAmennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!",
        "session_fail_preview_html": "'''Az elveszett munkamenetadatok miatt nem tudtuk feldolgozni a szerkesztésedet.'''\n\n''Mivel a wikiben engedélyezett a nyers HTML-kód használata, az előnézet el van rejtve a JavaScript-alapú támadások megakadályozása céljából.''\n\n'''Ha ez egy normális szerkesztési kísérlet, akkor próbálkozz újra. Amennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!''' (a változtatásaidat mentsd el magadnak, különben elvesznek!)",
-       "token_suffix_mismatch": "'''A szerkesztésedet elutasítottuk, mert a kliensprogramod megváltoztatta a központozó karaktereket\na szerkesztési tokenben. A szerkesztés azért lett visszautasítva, hogy megelőzzük a lap szövegének sérülését.\nEz a probléma akkor fordulhat elő, ha hibás web-alapú proxyszolgáltatást használsz.'''",
+       "token_suffix_mismatch": "<strong>A szerkesztésedet elutasítottuk, mert a kliensprogramod megváltoztatta a központozó karaktereket\na szerkesztési tokenben.</strong>\nA szerkesztés azért lett visszautasítva, hogy megelőzzük a lap szövegének sérülését.\nEz a probléma akkor fordulhat elő, ha hibás web-alapú proxyszolgáltatást használsz.",
        "edit_form_incomplete": "'''A szerkesztési űrlap egyes részei nem érkeztek meg a szerverre; ellenőrizd, hogy a szerkesztés sértetlen-e, majd próbáld újra.'''",
        "editing": "$1 szerkesztése",
        "creating": "$1 létrehozása",
        "notextmatches": "Nincsenek szövegbeli egyezések",
        "prevn": "előző {{PLURAL:$1|egy|$1}}",
        "nextn": "következő {{PLURAL:$1|egy|$1}}",
+       "prev-page": "előző oldal",
+       "next-page": "következő oldal",
        "prevn-title": "Előző {{PLURAL:$1|egy|$1}} találat",
        "nextn-title": "Következő {{PLURAL:$1|egy|$1}} találat",
        "shown-title": "{{PLURAL:$1|Egy|$1}} találat laponként",
        "search-result-category-size": "$1 oldal, $2 alkategória, $3 fájl",
        "search-redirect": "(átirányítva innen: $1)",
        "search-section": "($1 szakasz)",
+       "search-category": "($1 kategória)",
        "search-file-match": "(fájl tartalma egyezik)",
        "search-suggest": "Keresési javaslat: $1",
        "search-interwiki-caption": "Társlapok",
        "searchrelated": "kapcsolódó",
        "searchall": "mind",
        "showingresults": "Lent '''{{PLURAL:$1|egy|$1}}''' találat látható, az eleje '''$2'''.",
+       "showingresultsinrange": "Lent <strong>$1</strong> találat látható ($2. – $3.)",
+       "search-showingresults": "{{PLURAL:$4|<strong>$1.</strong> a(z) <strong>$3</strong> találatból|<strong>$1–$2.</strong> a(z) <strong>$3</strong> találatból}}",
        "search-nonefound": "Nincs egyezés a megadott szöveggel.",
        "powersearch-legend": "Részletes keresés",
        "powersearch-ns": "Névterek:",
        "prefs-personal": "Felhasználói adatok",
        "prefs-rc": "Friss változtatások",
        "prefs-watchlist": "Figyelőlista",
+       "prefs-editwatchlist": "Figyelőlista szerkesztése",
        "prefs-editwatchlist-label": "A figyelőlista szerkesztése:",
        "prefs-editwatchlist-edit": "A figyelőlista megtekintése és szerkesztése",
        "prefs-editwatchlist-raw": "A nyers figyelőlista szerkesztése",
        "withoutinterwiki-submit": "Megjelenítés",
        "fewestrevisions": "Legrövidebb laptörténetű lapok",
        "nbytes": "{{PLURAL:$1|egy|$1}} bájt",
-       "ncategories": "{{PLURAL:$1|egy|$1}} kategória",
+       "ncategories": "$1 kategória",
        "ninterwikis": "{{PLURAL:$1|egy|$1}} interwiki",
        "nlinks": "{{PLURAL:$1|egy|$1}} hivatkozás",
        "nmembers": "{{PLURAL:$1|egy|$1}} elem",
        "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.",
        "wantedfiletext-nocat": "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.",
+       "wantedfiletext-nocat-noforeign": "A következő fájlok használatban vannak, de nem léteznek.",
        "wantedtemplates": "Keresett sablonok",
        "mostlinked": "Legtöbbet hivatkozott lapok",
        "mostlinkedcategories": "Legtöbbet hivatkozott kategóriák",
        "mostrevisions": "Legtöbbet szerkesztett lapok",
        "prefixindex": "Keresés előtag szerint",
        "prefixindex-namespace": "Összes lap adott előtaggal ($1 névtér)",
+       "prefixindex-strip": "Előtag eltüntetése a listában",
        "shortpages": "Rövid lapok",
        "longpages": "Hosszú lapok",
        "deadendpages": "Zsákutcalapok",
        "speciallogtitlelabel": "Cél (cím vagy felhasználó):",
        "log": "Rendszernaplók",
        "all-logs-page": "Minden nyilvános napló",
-       "alllogstext": "A(z) {{SITENAME}} naplóinak összesített listája.\nA napló típusának, a szerkesztő nevének (kis- és nagybetűérzékeny), vagy az érintett lap kiválasztásával (ez is kis- és nagybetűérzékeny) szűkítheted a találatok listáját.",
+       "alllogstext": "A(z) {{SITENAME}} naplóinak összesített listája.\nA naplótípus, a felhasználónév (kis- és nagybetűérzékeny) vagy az érintett lap kiválasztásával (ez is kis- és nagybetűérzékeny) szűkítheted a találatok listáját.",
        "logempty": "Nincs illeszkedő naplóbejegyzés.",
        "log-title-wildcard": "Így kezdődő címek keresése",
        "showhideselectedlogentries": "Kijelölt napló bejegyzések megjelenítése/elrejtése",
        "listgrouprights-removegroup-self-all": "az összes csoporból eltávolíthatja a saját fiókját",
        "listgrouprights-namespaceprotection-header": "Névtér korlátozások",
        "listgrouprights-namespaceprotection-namespace": "Névtér",
+       "listgrouprights-namespaceprotection-restrictedto": "A szerkesztéshez szükséges jogosultság(ok)",
+       "trackingcategories": "Nyomkövető kategóriák",
+       "trackingcategories-msg": "Nyomkövető kategória",
        "trackingcategories-name": "Üzenetnév",
+       "trackingcategories-desc": "Kategóriába kerülés feltétele",
+       "noindex-category-desc": "A lapot nem indexelik a keresőrobotok, mert tartalmazza a <code><nowiki>__NOINDEX__</nowiki></code> varázsszót, és egy olyan névtérben található, ahol ez engedélyezett.",
+       "index-category-desc": "A lapot akkor is indexelik a keresőrobotok, ha egyébként nem tennék, mert tartalmazza az <code><nowiki>__INDEX__</nowiki></code> varázsszót, és egy olyan névtérben található, ahol ez engedélyezett.",
+       "post-expand-template-inclusion-category-desc": "A lap mérete nagyobb a <code>$wgMaxArticleSize</code> változóban tárolt értéknél a sablonok kibontása után, így néhány sablon nem került kibontásra.",
+       "post-expand-template-argument-category-desc": "A lap nagyobb a <code>$wgMaxArticleSize</code> változóban megadott értéknél egy sablonparaméter kibontása után (valami hármas kapcsos zárójelek között, mint pl. <code>{{{1}}}</code>).",
+       "expensive-parserfunction-category-desc": "A lap túl sok költséges elemzőfüggvényt használ (mint az <code>#ifexist</code>). Lásd még a [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] lapot.",
+       "broken-file-category-desc": "A lap törött fájllinket tartalmaz (egy fájlt beillesztő link, ami nem létező fájlra mutat).",
        "trackingcategories-nodesc": "Nem található leírás.",
        "trackingcategories-disabled": "A kategória le van tiltva",
        "mailnologin": "Nincs feladó",
-       "mailnologintext": "Ahhoz hogy másoknak e-mailt küldhess, [[Special:UserLogin|be kell jelentkezned]] és meg kell adnod egy érvényes e-mail címet a [[Special:Preferences|beállításaidban]].",
+       "mailnologintext": "Ahhoz, hogy másoknak e-mailt küldhess, [[Special:UserLogin|be kell jelentkezned]] és meg kell adnod egy érvényes e-mail címet a [[Special:Preferences|beállításaidban]].",
        "emailuser": "E-mail küldése ezen szerkesztőnek",
        "emailuser-title-target": "E-mail küldése ennek a felhasználónak: $1",
        "emailuser-title-notarget": "E-mail küldése a felhasználónak",
        "mywatchlist": "Figyelőlista",
        "watchlistfor2": "$1 részére $2",
        "nowatchlist": "Nincs lap a figyelőlistádon.",
-       "watchlistanontext": "A figyelőlistád megtekintéséhez és szerkesztéséhez $1.",
+       "watchlistanontext": "Jelentkezz be a figyelőlistád megtekintéséhez és szerkesztéséhez.",
        "watchnologin": "Nem vagy bejelentkezve",
        "addwatch": "Hozzáadás a figyelőlistához",
        "addedwatchtext": "A(z) „[[:$1]]” lapot hozzáadtam a [[Special:Watchlist|figyelőlistádhoz]].\nEzután minden, a lapon vagy annak vitalapján történő változást ott fogsz látni.",
        "enotif_subject_created": "$2 létrehozta a(z) $1 {{SITENAME}} oldalt",
        "enotif_subject_moved": "$2 átmozgatta a $1 {{SITENAME}} oldalt.",
        "enotif_subject_restored": "$2 visszaállította a $1 {{SITENAME}} oldalt.",
-       "enotif_subject_changed": "$2 megváltoztatta a(z) $1 {{SITENAME}} oldalt",
+       "enotif_subject_changed": "$2 megváltoztatta a(z) $1 {{SITENAME}}-oldalt",
        "enotif_body_intro_deleted": "$2 törölte a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd $3.",
        "enotif_body_intro_created": "$2 létrehozta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
        "enotif_body_intro_moved": "$2 átmozgatta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
        "enotif_body_intro_restored": "$2 visszaállította a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
-       "enotif_body_intro_changed": "$2 megváltoztatta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
+       "enotif_body_intro_changed": "$2 megváltoztatta a $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, az aktuális verziót lásd itt: $3.",
        "enotif_lastvisited": "Lásd a $1 lapot az utolsó látogatásod óta történt változtatásokért.",
        "enotif_lastdiff": "Lásd a $1 lapot ezen változtatás megtekintéséhez.",
        "enotif_anon_editor": "$1 névtelen felhasználó",
        "revertpage-nouser": "Visszaállítottam a lap korábbi változatát (szerkesztőnév eltávolítva) szerkesztéséről [[User:$1|$1]] szerkesztésére",
        "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.",
+       "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.",
        "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",
        "undeletepagetext": "Az alábbi {{PLURAL:$1|lapot törölték, de még helyreállítható|$1 lapot törölték, de még helyreállíthatók}} az archívumból.\nAz archívumot időről időre üríthetik!",
        "undelete-fieldset-title": "Változatok helyreállítása",
        "undeleteextrahelp": "A lap teljes helyreállításához ne jelölj be egy jelölőnégyzetet sem, csak kattints a '''''{{int:undeletebtn}}''''' gombra.\nA lap részleges helyreállításához jelöld be a kívánt változatok melletti jelölőnégyzeteket, és kattints a '''''{{int:undeletebtn}}''''' gombra.",
-       "undeleterevisions": "{{PLURAL:$1|egy|$1}} változat archiválva",
+       "undeleterevisions": "$1 változat archiválva",
        "undeletehistory": "Ha helyreállítasz egy lapot, azzal visszahozod laptörténet összes változatát.\nHa lap törlése óta azonos néven már létrehoztak egy újabb lapot, a helyreállított\nváltozatok a laptörténet végére kerülnek be, a jelenlegi lapváltozat módosítása nélkül.",
        "undeleterevdel": "A törlés visszavonása nem hajtható végre, ha a legfrissebb lapváltozat részleges törlését eredményezi.\nIlyen esetekben vissza kell vonnod a legújabb törölt változatok kijelölését vagy azok elrejtését.",
        "undeletehistorynoadmin": "Ezt a szócikket törölték. A törlés okát alább az összegzésben\nláthatod, az oldalt a törlés előtt szerkesztő felhasználók részleteivel együtt. Ezeknek\na törölt változatoknak a tényleges szövege csak az adminisztrátorok számára hozzáférhető.",
        "undeleteviewlink": "megtekintés",
        "undeleteinvert": "Kijelölés megfordítása",
        "undeletecomment": "Ok:",
-       "undeletedrevisions": "{{PLURAL:$1|egy|$1}} változat helyreállítva",
+       "undeletedrevisions": "$1 változat helyreállítva",
        "undeletedrevisions-files": "{{PLURAL:$1|egy|$1}} változat és {{PLURAL:$2|egy|$2}} fájl visszaállítva",
        "undeletedfiles": "{{PLURAL:$1|egy|$1}} fájl visszaállítva",
        "cannotundelete": "Lap visszaállítása sikertelen: $1",
        "blocklog-showsuppresslog": "Ez a felhasználó korábban blokkot kapott, és a naplóbejegyzés el lett rejtve. Az elrejtési napló alább látható tájékoztatásként:",
        "blocklogentry": "„[[$1]]” blokkolva $2 időtartamra $3",
        "reblock-logentry": "megváltoztatta [[$1]] blokkjának beállításait, a blokk lejárta: $2 $3",
-       "blocklogtext": "Ez a felhasználókra helyezett blokkoknak és azok feloldásának listája. Az automatikus blokkolt IP címek nem szerepelnek a listában. Lásd még [[Special:BlockList|a jelenleg életben lévő blokkok listáját]].",
+       "blocklogtext": "Ez a felhasználókra helyezett blokkoknak és azok feloldásának listája. Az automatikusan blokkolt IP-címek nem szerepelnek a listában. Lásd még [[Special:BlockList|a jelenleg életben lévő blokkok listáját]].",
        "unblocklogentry": "„$1” blokkolása feloldva",
        "block-log-flags-anononly": "csak anonok",
        "block-log-flags-nocreate": "nem hozhat létre új fiókot",
        "thumbnail_gd-library": "A GD-könyvtár nincs megfelelően beállítva: a(z) $1 függvény hiányzik",
        "thumbnail_image-missing": "Úgy tűnik, hogy a fájl hiányzik: $1",
        "import": "Lapok importálása",
-       "importinterwiki": "Transwiki importálása",
-       "import-interwiki-text": "Válaszd ki az importálandó wikit és lapcímet.\nA változatok dátumai és a szerkesztők nevei megőrzésre kerülnek.\nValamennyi transwiki importálási művelet az [[Special:Log/import|importálási naplóban]] kerül naplózásra.",
+       "importinterwiki": "Importálás más wikiből",
+       "import-interwiki-text": "Válaszd ki az importálandó wikit és lapcímet.\nA változatok dátumai és a szerkesztők nevei megőrzésre kerülnek.\nValamennyi más wikiről való importálás az [[Special:Log/import|importálási naplóban]] kerül naplózásra.",
+       "import-interwiki-sourcewiki": "Forráswiki:",
+       "import-interwiki-sourcepage": "Forráslap:",
        "import-interwiki-history": "A lap összes előzményváltozatainak másolása",
        "import-interwiki-templates": "Az összes sablon hozzáadása",
        "import-interwiki-submit": "Importálás",
        "importcantopen": "Nem nyitható meg az importfájl",
        "importbadinterwiki": "Rossz wikiközi hivatkozás",
        "importsuccess": "Az importálás befejeződött!",
-       "importnosources": "Nincsenek transzwikiimport-források definiálva, a közvetlen laptörténet-felküldés pedig nem megengedett.",
+       "importnosources": "Nincsenek források definiálva a wikiközi importáláshoz, a közvetlen laptörténet-felküldés pedig nem megengedett.",
        "importnofile": "Nem került importfájl feltöltésre.",
        "importuploaderrorsize": "Az importálandó fájl feltöltése nem sikerült, mert nagyobb, mint a megengedett feltöltési méret.",
        "importuploaderrorpartial": "Az importálandó fájl feltöltése nem sikerült. A fájl csak részben lett feltöltve.",
        "import-options-wrong": "Rossz {{PLURAL:$2|opció|opciók}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "A megadott gyökér oldal címe érvénytelen.",
        "import-rootpage-nosubpage": "A(z) \"$1\" névtér nem engedi meg aloldalak használatát.",
-       "importlogpage": "Importnapló",
+       "importlogpage": "Importálási napló",
        "importlogpagetext": "Lapok szerkesztési előzményekkel történő adminisztratív imporálása más wikikből.",
-       "import-logentry-upload": "[[$1]] importálása fájlfeltöltéssel kész",
        "import-logentry-upload-detail": "$1 változat importálva",
-       "import-logentry-interwiki": "$1 más wikiből áthozva",
        "import-logentry-interwiki-detail": "$1 változat innen: $2",
        "javascripttest": "JavaScript tesztelés",
        "javascripttest-pagetext-noframework": "Ez az oldal JavaStript tesztek futtatására van fenntartva.",
        "tooltip-pt-mycontris": "A közreműködéseid listája",
        "tooltip-pt-login": "Bejelentkezni javasolt, de nem kötelező.",
        "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-addsection": "Új szakasz nyitása",
        "confirmemail_sent": "Kaptál egy e-mailt, melyben megtalálod a megerősítéshez szükséges kódot.",
        "confirmemail_oncreate": "A megerősítő kódot elküldtük az e-mail címedre.\nEz a kód nem szükséges a belépéshez, de meg kell adnod,\nmielőtt a wiki e-mail alapú szolgáltatásait igénybe veheted.",
        "confirmemail_sendfailed": "Nem sikerült elküldeni a megerősítő e-mailt.\nEllenőrizd, hogy nem írtál-e érvénytelen karaktert a címbe.\n\nA levelező üzenete: $1",
-       "confirmemail_invalid": "Nem megfelelő kód. A kódnak lehet, hogy lejárt a felhasználhatósági ideje.",
-       "confirmemail_needlogin": "Meg kell $1 erősíteni az e-mail címedet.",
+       "confirmemail_invalid": "Nem megfelelő kód.\nLehet, hogy a kód felhasználhatósági ideje lejárt.",
+       "confirmemail_needlogin": "{{ucfirst:$1}} az e-mail címed megerősítéséhez.",
        "confirmemail_success": "Az e-mail címed megerősítve. Most már beléphetsz a wikibe.",
        "confirmemail_loggedin": "E-mail címed megerősítve.",
        "confirmemail_subject": "{{SITENAME}} e-mail cím megerősítés",
        "watchlistedit-raw-done": "A figyelőlistád változtatásait elmentettem.",
        "watchlistedit-raw-added": "A {{PLURAL:$1|következő|következő $1}} cikket hozzáadtam a figyelőlistádhoz:",
        "watchlistedit-raw-removed": "A {{PLURAL:$1|következő|következő $1}} cikket eltávolítottam a figyelőlistádról:",
+       "watchlistedit-clear-title": "A figyelőlista kiürítése",
+       "watchlistedit-clear-legend": "Figyelőlista kiürítése",
+       "watchlistedit-clear-explain": "Minden cím el lesz távolítva a figyelőlistádról",
+       "watchlistedit-clear-submit": "Figyelőlista kiürítése (Ez végleges!)",
        "watchlisttools-clear": "A figyelőlista kiürítése",
        "watchlisttools-view": "Kapcsolódó változtatások",
        "watchlisttools-edit": "A figyelőlista megtekintése és szerkesztése",
        "version-parser-function-hooks": "Az értelmező függvényeinek hookjai",
        "version-hook-name": "Hook neve",
        "version-hook-subscribedby": "Használja",
-       "version-version": "(verzió: $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[nincs név]",
        "version-license": "MediaWiki licenc",
        "version-ext-license": "Licenc",
        "tags-tag": "Címke neve",
        "tags-display-header": "Megjelenése a listákon",
        "tags-description-header": "Teljes leírás",
+       "tags-source-header": "Forrás",
        "tags-active-header": "Aktív?",
        "tags-hitcount-header": "Címkézett változtatások",
        "tags-active-yes": "Igen",
        "tags-active-no": "Nem",
+       "tags-source-extension": "Egy kiterjesztés határozza meg",
+       "tags-source-none": "Már nincs használatban",
        "tags-edit": "szerkesztés",
        "tags-hitcount": "{{PLURAL:$1|Egy|$1}} változtatás",
+       "tags-delete-not-allowed": "A kiterjesztés által létrehozott címkék nem törölhetők, ha a kiterjesztés nem engedélyezi kifejezetten azt.",
        "comparepages": "Lapok összehasonlítása",
        "compare-page1": "1. lap",
        "compare-page2": "2. lap",
        "compare-revision-not-exists": "A megadott lapváltozat nem létezik.",
        "dberr-problems": "Sajnáljuk, de az oldallal technikai problémák vannak.",
        "dberr-again": "Várj néhány percet, majd frissítsd az oldalt.",
-       "dberr-info": "(Nem sikerült kapcsolatot létesíteni az adatbázisszerverrel: $1)",
-       "dberr-info-hidden": "(Nem sikerült kapcsolatot létesíteni az adatbázisszerverrel)",
+       "dberr-info": "(Nem sikerült kapcsolódni az adatbázishoz: $1)",
+       "dberr-info-hidden": "(Nem sikerült kapcsolódni az adatbázishoz)",
        "dberr-usegoogle": "A probléma elmúlásáig próbálhatsz keresni a Google-lel.",
        "dberr-outofdate": "Fontos tudnivaló, hogy az oldal tartalmáról készített indexeik elavultak lehetnek.",
        "dberr-cachederror": "Lenn a kért oldal gyorsítótárazott változata látható, és lehet, hogy nem teljesen friss.",
        "revdelete-uname-unhid": "szerkesztő megjelenítve",
        "revdelete-restricted": "elrejtett az adminisztrátorok elől",
        "revdelete-unrestricted": "felfedett az adminisztrátoroknak",
+       "logentry-block-block": "$1 {{GENDER:$2|blokkolta}} „{{GENDER:$4|$3}}”-t $5 időtartamra $6",
        "logentry-move-move": "$1 átnevezte a(z) $3 lapot a következő névre: $4",
        "logentry-move-move-noredirect": "$1 átnevezte a(z) $3 lapot $4 lapra átirányítás nélkül",
        "logentry-move-move_redir": "$1 átnevezte a(z) $3 lapot $4 lapra az átirányítást felülírva",
        "logentry-rights-rights": "$1 megváltoztatta $3 csoporttagságát erről: $4 erre: $5",
        "logentry-rights-rights-legacy": "$1 megváltoztatta $3 csoporttagságát",
        "logentry-rights-autopromote": "$1 automatikusan előléptetve erről: $4 erre: $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|feltöltötte}} ezt: $3",
        "rightsnone": "(semmi)",
        "revdelete-summary": "a szerkesztési összefoglalóját",
+       "feedback-adding": "Visszajelzés elmentése...",
+       "feedback-bugcheck": "Nagyszerű! Ellenőrizd, hogy ez nem egy [$1 ismert hiba].",
+       "feedback-bugnew": "Ellenőriztem. Új hiba jelentése",
        "feedback-bugornote": "Ha kész technikai problémát részletesen leírni, akkor kérjük [$1 jelents egy hibát]. Egyébként használd az alábbi űrlapot. A hozzászólásod a „[$3 $2]” laphoz kerül felvételre, a szerkesztő neveddel és böngésződ típusával együtt.",
-       "feedback-subject": "Tárgy:",
-       "feedback-message": "Üzenet:",
        "feedback-cancel": "Mégse",
-       "feedback-submit": "Visszajelzés elküldése",
-       "feedback-adding": "Visszajelzés elmentése...",
+       "feedback-close": "Kész",
        "feedback-error1": "Hiba: az API ismeretlen eredménnyel tért vissza",
        "feedback-error2": "Hiba: a szerkesztés nem sikerült",
        "feedback-error3": "Hiba: nem érkezett válasz az API-tól",
+       "feedback-message": "Üzenet:",
+       "feedback-subject": "Tárgy:",
+       "feedback-submit": "Elküldés",
        "feedback-thanks": "Köszönjük. A visszajelzésed elküldve a „[$2 $1]” laphoz.",
-       "feedback-close": "Kész",
-       "feedback-bugcheck": "Nagyszerű! Ellenőrizd, hogy ez nem egy [$1 ismert hiba].",
-       "feedback-bugnew": "Ellenőriztem. Új hiba jelentése",
        "searchsuggest-search": "Keresés",
        "searchsuggest-containing": "tartalmazza…",
        "api-error-badaccess-groups": "Nincs jogod fájlokat feltölteni erre a wikire.",
        "json-error-unknown": "Hiba volt a JSON-ban. Hiba: $1",
        "json-error-state-mismatch": "Érvénytelen vagy hibás JSON",
        "json-error-syntax": "Szintaktikai hiba",
-       "json-error-utf8": "Hibás UTF-8 karakter, esetleg helytelenül kódolt"
+       "json-error-utf8": "Hibás UTF-8 karakter, esetleg helytelenül kódolt",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Bővített latin",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Szimbólumok",
+       "special-characters-group-greek": "Görög",
+       "special-characters-group-cyrillic": "Cirill",
+       "special-characters-group-arabic": "Arab",
+       "special-characters-group-arabicextended": "Arab (bővített)",
+       "special-characters-group-persian": "Perzsa",
+       "special-characters-group-hebrew": "Héber",
+       "special-characters-group-bangla": "Bengáli",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Szingaléz",
+       "special-characters-group-gujarati": "Gudzsaráti",
+       "special-characters-group-devanagari": "Dévanágari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index 814ce04..d5d575f 100644 (file)
@@ -48,7 +48,7 @@
        "tog-fancysig": "Ստորագրությունը վիքիտեքստի տեսքով (առանց ավտոմատ հղման)",
        "tog-uselivepreview": "Օգտագործել անմիջական նախադիտում, առանց էջը վերբեռնելու (փորձնական)",
        "tog-forceeditsummary": "Նախազգուշացնել խմբագրման ամփոփումը դատարկ թողնելու դեպքում",
-       "tog-watchlisthideown": "Հսկացանկից թաքցնել իմ խմբագրումները",
+       "tog-watchlisthideown": "Թաքցնել իմ խմբագրումները հսկացանկից",
        "tog-watchlisthidebots": "Թաքցնել բոտերի խմբագրումները հսկացանկից",
        "tog-watchlisthideminor": "Թաքցնել չնչին խմբագրումները հսկացանկից",
        "tog-watchlisthideliu": "Թաքցնել մուտք գործած մասնակիցների խմբագրումները հսկացանկից",
        "gotaccountlink": "Մուտք գործեք համակարգ",
        "userlogin-resetlink": "Մոռացե՞լ եք Ձեր հաշվի տվյալները։",
        "userlogin-resetpassword-link": "Մոռացե՞լ եք գաղտնաբառը",
+       "userlogin-helplink2": "Մուտք գործելու օգնություն",
        "userlogin-createanother": "Ստեղծել այլ հաշիվ",
        "createacct-emailrequired": "Էլ–փոստի հասցե",
        "createacct-emailoptional": "Էլ–փոստի հասցե (ոչ պարտադիր)",
        "createacct-captcha": "Անվտանգության ստուգում",
        "createacct-imgcaptcha-ph": "Մուտքագրեք վերը բերված գրվածքը",
        "createacct-submit": "Ստեղծել ձեր հաշիվը",
-       "createacct-another-submit": "Ստեղծել այլ հաշիվ",
+       "createacct-another-submit": "Õ\8dÕ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ´Õ¥Õ¯ Õ¡ÕµÕ¬ Õ°Õ¡Õ·Õ«Õ¾",
        "createacct-benefit-heading": "{{SITENAME}}՝ ստեղծվում է ձեր պես մարդկանց կողմից։",
        "createacct-benefit-body1": "{{PLURAL:$1|խմբագրում}}",
        "createacct-benefit-body2": "{{PLURAL:$1|էջ}}",
        "mergehistory-reason": "Պատճառ՝",
        "revertmerge": "Անջատել",
        "history-title": "«$1» էջի փոփոխումների պատմություն",
-       "difference-title": "$1: Խմբագրումների տարբերություն",
+       "difference-title": "«$1»–ի խմբագրումների տարբերություն",
        "difference-title-multipage": "$1 և $2: Խմբագրումների տարբերություն",
        "difference-multipage": "(Էջերի տարերություն)",
        "lineno": "Տող  $1.",
        "action-deletedhistory": "Դիտել այս էջի ջնջված պատմությունը",
        "action-rollback": "արագ հետ գլորել էջը վերջին անգամ խմբագրած մասնակցի կատարած փոփոխությունները",
        "nchanges": "$1 {{PLURAL:$1|փոփոխություն|փոփոխություն}}",
+       "enhancedrc-history": "պատմություն",
        "recentchanges": "Վերջին փոփոխություններ",
        "recentchanges-legend": "Վերջին փոփոխությունների նախընտրություններ",
        "recentchanges-summary": "Հետևեք վիքիում կատարված վերջին փոփոխություններին այս էջում։",
        "filehist-dimensions": "Օբյեկտի չափը",
        "filehist-filesize": "Նիշքի չափ",
        "filehist-comment": "Մեկնաբանություն",
-       "imagelinks": "Õ\80Õ²Õ¸Ö\82Õ´Õ¶Õ¥Ö\80 Õ¶Õ«Õ·Ö\84Õ«Õ¶",
+       "imagelinks": "Õ\86Õ«Õ·Ö\84Õ« Ö\85Õ£Õ¿Õ¡Õ£Õ¸Ö\80Õ®Õ¸Ö\82Õ´",
        "linkstoimage": "Հետևյալ {{PLURAL:$1|էջը հղվում է|$1 էջերը հղվում են}} այս նիշքին՝",
        "nolinkstoimage": "Այս նիշքին հղվող էջեր չկան։",
        "sharedupload": "Այս նիշքը $1 զետեղարանից է և կարող է օգտագործվել այլ նախագծերում։",
        "uploadnewversion-linktext": "Բեռնել այս նիշքի նոր տարբերակ",
        "shared-repo-from": "$1-ից",
        "shared-repo-name-wikimediacommons": "Վիքիպահեստ",
+       "upload-disallowed-here": "Դուք չեք կարող վերագրել այս նիշքը։",
        "filerevert": "Հետ շրջել $1-ը",
        "filerevert-legend": "Հետ շրջել նիշքը",
        "filerevert-intro": "Դուք հետ եք շրջում '''[[Media:$1|$1]]''' նիշքը [$4 տարբերակի՝ $3, $2 պահով]։",
        "pager-older-n": "{{PLURAL:$1|ավելի հին 1|ավելի հին $1}}",
        "booksources": "Գրքային աղբյուրներ",
        "booksources-search-legend": "Գրքի մասին տեղեկությունների որոնում",
+       "booksources-search": "Որոնել",
        "booksources-text": "Ստորև բերված են հղումներ դեպի արտաքին կայքեր, որտեղ կգտնեք հավելյալ տեղեկություններ գրքի մասին։ Սրանց մեջ ընդգրկված են ցանցային գրախանութներ և ընդհանուր գրադարանային կատալոգներ։",
        "booksources-invalid-isbn": "Նշված ISBN համարը ըստ երևույթի սխալ է պարունակում։ Համոզվեք որ համարը մուտքագրելիս, սխալ չի պատահել։",
        "specialloguserlabel": "Մասնակից.",
        "import-upload": "Բեռնված է XML-ի դատան",
        "importlogpage": "Ներմուծման տեղեկամատյան",
        "importlogpagetext": "Ադմինիստրատորների կողմից այլ վիքիներից իրենց պատմությունների հետ էջերի ներմուծումներ։",
-       "import-logentry-upload": "ներմուծվել է «[[$1]]» նիշքի բեռնումով",
        "import-logentry-upload-detail": "$1 տարբերակ",
-       "import-logentry-interwiki": "«$1»՝ միջվիքի ներմուծմամբ",
        "import-logentry-interwiki-detail": "$1 տարբերակ $2-ից",
        "tooltip-pt-userpage": "Ձեր մասնակցի էջը",
        "tooltip-pt-anonuserpage": "Ձեր IP-հասցեի մասնակցային էջը",
        "tooltip-upload": "Սկսել բեռնումը",
        "tooltip-rollback": "Մեկ սեղմումով հետ շրջել վերջին մասնակցի կատարած բոլոր խմբագրումները",
        "tooltip-undo": "Հետ շրջել կատարված փոփոխությունը և բացել խմբագրման ձևը նախադիտման ռեժիմով՝ թույլ տալով ավելացնել հետ շրջման պատճառը։",
+       "tooltip-summary": "Մուտքագրեք հակիրճ ամփոփում",
        "common.css": "/** Այստեղ տեղադրված CSS կոդը կկիրառվի բոլոր տեսքերի վրա */",
        "common.js": "/* Այստեղ տեղադրված JavaScript կոդը կբեռնվի բոլոր մասնակիցների համար էջերի բոլոր դիմումների ժամանակ */",
        "anonymous": "{{SITENAME}}ի անանուն {{PLURAL:$1|մասնակից|մասնակիցներ}}",
        "spambot_username": "Սպամի մաքրում",
        "spam_reverting": "Հետ է շրջվում վերջին տարբերակի, որը չի պարունակում հղումներ դեպի $1",
        "spam_blanking": "Բոլոր տարբերակները պարունակում են հղումներ դեպի $1, մաքրում",
+       "simpleantispam-label": "Հակա–լցոնային ստուգում։\n<strong>Մի՛</strong> լռացրեք սա։",
        "pageinfo-title": "$1-ի տվյալներ",
        "pageinfo-not-current": "Ցավոք հին խմբագրումների համար այս տվյալները հասանելի չեն։",
        "pageinfo-header-basic": "Հիմնական տվյալներ",
        "file-info-size": "$1 × $2 փիքսել, նիշքի չափը՝ $3, MIME-տեսակը՝ $4",
        "file-nohires": "Ավելի բարձր կետաչափով տարբերակ չկա։",
        "svg-long-desc": "SVG-նիշք, անվանապես $1 × $2 փիքսել, նիշքի չափը՝ $3",
-       "show-big-image": "Լրիվ թույլատվությամբ",
+       "show-big-image": "Սկզբնական նիշք",
+       "show-big-image-preview": "Նախադիտման չափ՝ $1։",
+       "show-big-image-size": "$1 × $2 պիքսել",
        "newimages": "Նոր նիշքերի սրահ",
        "imagelisttext": "Ստորև բերված է '''$1''' {{PLURAL:$1|նիշքի}} ցանկ՝ դասավորված ըստ $2։",
        "newimages-legend": "Ֆիլտր",
        "metadata-fields": "EXIF մետատվյալների այն դաշտերը, որոնք նշված ենք այս ուղերձի մեջ, կցուցադրվեն պատկերի էջուն լռությամբ։ Այլ տվյալները լռությամբ կթաքցվեն։\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-make": "Խցիկի արտադրող",
+       "exif-model": "Խցիկի մոդել",
+       "exif-software": "Օգտագործված ծրագիր",
        "exif-artist": "Հեղինակ",
+       "exif-exifversion": "Էքսիֆի տարբերակ (Exif)",
+       "exif-colorspace": "Գունային տիրույթ",
+       "exif-datetimeoriginal": "Ստեղծման ամսաթիվ",
+       "exif-datetimedigitized": "Թվայնացման ամսաթիվ",
        "exif-flash": "Ֆլեշ տարբ.",
        "exif-languagecode": "Լեզու",
        "exif-label": "Պիտակ",
+       "exif-orientation-1": "Նորմալ",
        "exif-componentsconfiguration-0": "գոյություն չունի",
        "exif-urgency-normal": "Նորմալ ($1)",
        "exif-urgency-low": "Թույլ ($1)",
        "specialpages-group-spam": "Սպամի գործիքներ",
        "blankpage": "Դատարկ էջ",
        "intentionallyblankpage": "Այս էջը միտումնավոր դատարկ է թողված։",
+       "tag-filter": "[[Special:Tags|Պիտակների]] զտիչ՝",
        "tag-filter-submit": "Ֆիլտրել",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Պիտակ}}]]: $2)",
        "tags-source-header": "Աղբյուր",
        "tags-actions-header": "Գործողություններ",
        "tags-edit": "խմբագրել",
        "logentry-move-move_redir": "$1 տեղափոխեց էջը «$3»-ից «$4» վերահղման վրայով",
        "logentry-move-move_redir-noredirect": "$1 տեղափոխեց էջը «$3»-ից «$4» վերահղման վրայով, առանց վերահղում թողնելու",
        "logentry-newusers-newusers": "$1 մասնակիցը ստեղծեց նոր հաշիվ",
-       "logentry-newusers-create": "$1 մասնակիցը ստեղծեց նոր հաշիվ",
+       "logentry-newusers-create": "Ստեղծվեց $1 մասնակցի հաշիվ",
        "logentry-newusers-create2": "$1 Ստեղծեց նոր հաշիվ $3",
        "rightsnone": "(ոչ մի)",
-       "feedback-subject": "Թեմա.",
-       "feedback-message": "Հաղորդագրություն․",
        "feedback-cancel": "Բեկանել",
        "feedback-close": "Արված է",
+       "feedback-message": "Հաղորդագրություն․",
+       "feedback-subject": "Թեմա.",
        "searchsuggest-search": "Որոնել",
        "duration-seconds": "$1 {{PLURAL:$1|վայրկյան}}",
        "duration-minutes": "$1 {{PLURAL:$1|րոպե}}",
index 4fb7f1e..515ac00 100644 (file)
@@ -12,7 +12,8 @@
                        "Yfdyh000",
                        "לערי ריינהארט",
                        "아라",
-                       "Carlosedepaula"
+                       "Carlosedepaula",
+                       "Macofe"
                ]
        },
        "tog-underline": "Sublinear ligamines:",
        "disclaimers": "Declaration de non-responsabilitate",
        "disclaimerpage": "Project:Declaration general de non-responsabilitate",
        "edithelp": "Adjuta de modification",
+       "helppage-top-gethelp": "Adjuta",
        "mainpage": "Pagina principal",
        "mainpage-description": "Pagina principal",
        "policy-url": "Project:Politica",
        "readonly_lag": "Le base de datos ha essite automaticamente blocate durante que le servitores de base de datos secundari se synchronisa con le servitor principal.",
        "internalerror": "Error interne",
        "internalerror_info": "Error interne: $1",
+       "internalerror-fatal-exception": "Error irreversibile de typo \"$1\"",
        "filecopyerror": "Impossibile copiar file \"$1\" a \"$2\".",
        "filerenameerror": "Impossibile renominar file \"$1\" a \"$2\".",
        "filedeleteerror": "Impossibile deler file \"$1\".",
        "wrongpassword": "Le contrasigno que tu entrava es incorrecte. Per favor reprova.",
        "wrongpasswordempty": "Tu non entrava un contrasigno. Per favor reprova.",
        "passwordtooshort": "Le contrasignos debe continer al minus {{PLURAL:$1|1 character|$1 characteres}}.",
+       "passwordtoolong": "Le contrasignos non pote esser plus longe de {{PLURAL:$1|1 character|$1 characteres}}.",
        "password-name-match": "Tu contrasigno debe esser differente de tu nomine de usator.",
        "password-login-forbidden": "Le uso de iste nomine de usator e contrasigno ha essite prohibite.",
        "mailmypassword": "Reinitialisar contrasigno",
        "missingcommentheader": "'''Rememoration:''' Tu non ha specificate un subjecto/titulo pro iste commento.\nSi tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin titulo.",
        "summary-preview": "Previsualisation del summario:",
        "subject-preview": "Previsualisation del subjecto/titulo:",
+       "previewerrortext": "Un error ha occurrite durante le tentativa de previsualisar le cambiamentos.",
        "blockedtitle": "Le usator es blocate",
        "blockedtext": "'''Tu nomine de usator o adresse IP ha essite blocate.'''\n\nLe blocada esseva facite per $1.\nLe motivo presentate es ''$2''.\n\n* Initio del blocada: $8\n* Expiration del blocada: $6\n* Le blocato intendite: $7\n\nTu pote contactar $1 o un altere [[{{MediaWiki:Grouppage-sysop}}|administrator]] pro discuter le blocada.\nTu non pote usar le function 'inviar e-mail a iste usator' salvo que un adresse de e-mail valide es specificate in le\n[[Special:Preferences|preferentias de tu conto]] e que tu non ha essite blocate de usar lo.\nTu adresse IP actual es $3, e le ID del blocada es #$5.\nPer favor include tote le detalios supra specificate in omne correspondentia.",
        "autoblockedtext": "Tu adresse de IP ha essite automaticamente blocate proque un altere usator lo usava qui esseva blocate per $1.\nLe motivo presentate es:\n\n:''$2''\n\n* Initio del blocada: $8\n* Expiration del blocada: $6\n* Blocato intendite: $7\n\nTu pote contactar $1 o un del altere [[{{MediaWiki:Grouppage-sysop}}|administratores]] pro discuter le blocada.\n\nNota que tu non pote utilisar le function \"inviar e-mail a iste usator\" salvo que tu ha registrate un adresse de e-mail valide in tu [[Special:Preferences|preferentias de usator]] e que tu non ha essite blocate de usar lo.\n\nTu adresse IP actual es $3, e le ID del blocada es #$5.\nPer favor include tote le detalios supra specificate in omne correspondentia.",
        "notextmatches": "Nulle resultato in le texto de paginas",
        "prevn": "$1 {{PLURAL:$1|precedente|precedentes}}",
        "nextn": "$1 {{PLURAL:$1|sequente|sequentes}}",
+       "prev-page": "pagina precedente",
+       "next-page": "pagina sequente",
        "prevn-title": "$1 {{PLURAL:$1|resultato|resultatos}} precedente",
        "nextn-title": "$1 {{PLURAL:$1|resultato|resultatos}} sequente",
        "shown-title": "Monstrar $1 {{PLURAL:$1|resultato|resultatos}} per pagina",
        "right-override-export-depth": "Exportar paginas includente paginas ligate usque a un profunditate de 5",
        "right-sendemail": "Inviar e-mail a altere usatores",
        "right-passwordreset": "Vider le e-mails pro reinitialisar le contrasigno",
+       "right-managechangetags": "Crear e deler [[Special:Tags|etiquettas]] in le base de datos",
        "newuserlogpage": "Registro de creation de usatores",
        "newuserlogpagetext": "Isto es un registro de creation de usatores.",
        "rightslog": "Registro de derectos de usator",
        "action-viewmyprivateinfo": "vider le proprie information private",
        "action-editmyprivateinfo": "modificar le proprie information private",
        "action-editcontentmodel": "modificar le modello de contento de un pagina",
+       "action-managechangetags": "crear e deler etiquettas in le base de datos",
        "nchanges": "$1 {{PLURAL:$1|modification|modificationes}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde le ultime visita}}",
        "enhancedrc-history": "historia",
        "recentchanges": "Modificationes recente",
        "recentchanges-legend": "Optiones del modificationes recente",
-       "recentchanges-summary": "Seque le plus recente modificationes a {{SITENAME}} in iste pagina.",
+       "recentchanges-summary": "Seque le modificationes le plus recente in {{SITENAME}} in iste pagina.",
        "recentchanges-noresult": "Nulle modification facite in le periodo specificate que corresponde a iste criterios.",
        "recentchanges-feed-description": "Seque le modificationes le plus recente al wiki in iste syndication.",
        "recentchanges-label-newpage": "Iste modification creava un nove pagina",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide etiam le [[Special:NewPages|lista de nove paginas]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Ecce le {{PLURAL:$5|modification|modificationes}} a partir del <strong>$3 a $4</strong> (usque a <strong>$1</strong> entratas monstrate).",
-       "rclistfrom": "Monstrar nove modificationes a partir de $3 $2",
+       "rclistfrom": "Monstrar nove modificationes a partir del $3 a $2",
        "rcshowhideminor": "$1 modificationes minor",
        "rcshowhideminor-show": "Monstrar",
        "rcshowhideminor-hide": "Celar",
        "unusedimages": "Imagines non usate",
        "wantedcategories": "Categorias plus demandate",
        "wantedpages": "Paginas plus demandate",
+       "wantedpages-summary": "Lista de paginas non existente con le major numero de ligamines verso illos, excludente le paginas que ha solmente redirectiones que liga verso illos. Pro un lista de paginas non existente que ha redirectiones que liga verso illos, vide [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Titulo invalide in le gruppo de resultatos: $1",
        "wantedfiles": "Files desirate",
        "wantedfiletext-cat": "Le sequente files es usate ma non existe. Le files ab repositorios externe pote esser listate malgrado que illos existe. Omne tal false positivos essera <del>cancellate</del>. In addition, paginas que incorpora files que non existe es listate in [[:$1]].",
        "emailccsubject": "Copia de tu message a $1: $2",
        "emailsent": "E-mail inviate",
        "emailsenttext": "Tu message de e-mail ha essite inviate.",
-       "emailuserfooter": "Iste e-mail esseva inviate per $1 a $2 con le function \"Inviar e-mail al usator\" a {{SITENAME}}.",
+       "emailuserfooter": "Iste e-mail ha essite inviate per $1 a $2 con le function \"{{int:emailpage}}\" in {{SITENAME}}.",
        "usermessage-summary": "Lassante un message de systema.",
        "usermessage-editor": "Messagero del systema",
        "watchlist": "Observatorio",
        "undelete-error-long": "Se incontrava errores durante le restauration del file:\n\n$1",
        "undelete-show-file-confirm": "Es tu secur de voler vider un version delite del file \"<nowiki>$1</nowiki>\" del $2 a $3?",
        "undelete-show-file-submit": "Si",
-       "namespace": "Spatio de nomine:",
+       "namespace": "Spatio de nomines:",
        "invert": "Inverter selection",
        "tooltip-invert": "Marca iste quadrato pro celar le modificationes in paginas intra le spatio de nomines seligite (e le spatio de nomines associate, si tal option es seligite)",
        "tooltip-whatlinkshere-invert": "Marca iste quadrato pro celar ligamines de paginas in le spatio de nomines seligite.",
        "sp-contributions-toponly": "Monstrar solmente le versiones recente",
        "sp-contributions-newonly": "Monstrar solmente le modificationes que es creationes de pagina",
        "sp-contributions-submit": "Cercar",
-       "whatlinkshere": "Referentias a iste pagina",
+       "whatlinkshere": "Paginas ligate a iste",
        "whatlinkshere-title": "Paginas con ligamines verso $1",
        "whatlinkshere-page": "Pagina:",
        "linkshere": "Le sequente paginas contine ligamines a '''[[:$1]]''':",
        "thumbnail_image-missing": "le file pare mancar: $1",
        "thumbnail_image-failure-limit": "Il ha habite recentemente troppo de tentativas fallite ($1 o plus) de generar iste miniatura. Per favor reproba plus tarde.",
        "import": "Importar paginas",
-       "importinterwiki": "Importation transwiki",
+       "importinterwiki": "Importar ab un altere wiki",
        "import-interwiki-text": "Selige le wiki e le titulo del pagina a importar.\nLe datas del versiones e nomines del contributores essera preservate.\nTote le actiones de importation transwiki se registra in le [[Special:Log/import|registro de importationes]].",
        "import-interwiki-sourcewiki": "Wiki de origine:",
        "import-interwiki-sourcepage": "Pagina de origine:",
        "import-rootpage-nosubpage": "Le spatio de nomines \"$1\" del pagina radice non permitte subpaginas.",
        "importlogpage": "Registro de importationes",
        "importlogpagetext": "Importationes administrative de paginas con historia de modificationes desde altere wikis.",
-       "import-logentry-upload": "importava [[$1]] per incargamento de file",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versiones}} importate",
-       "import-logentry-interwiki": "importava $1 transwiki",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versiones}} importate desde $2",
        "javascripttest": "Test de JavaScript",
        "javascripttest-pagetext-noframework": "Iste pagina es reservate pro le execution de tests de JavaScript.",
        "tooltip-search": "Cercar in {{SITENAME}}",
        "tooltip-search-go": "Visitar un pagina con iste nomine exacte si existe",
        "tooltip-search-fulltext": "Cercar iste texto in le paginas",
-       "tooltip-p-logo": "Pagina principal",
+       "tooltip-p-logo": "Visitar le pagina principal",
        "tooltip-n-mainpage": "Visitar le pagina principal",
        "tooltip-n-mainpage-description": "Visitar le pagina principal",
        "tooltip-n-portal": "A proposito del projecto, que tu pote facer, ubi trovar cosas",
        "thumbsize": "Dimension del miniaturas:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pagina|paginas}}",
        "file-info": "grandor del file: $1, typo MIME: $2",
-       "file-info-size": "$1 × $2 pixel, grandor del file: $3, typo MIME: $4",
+       "file-info-size": "$1 × $2 pixels, dimension del file: $3, typo MIME: $4",
        "file-info-size-pages": "$1 × $2 pixels, dimension del file: $3, typo MIME: $4, $5 {{PLURAL:$5|pagina|paginas}}",
        "file-nohires": "Non disponibile in resolution plus alte.",
        "svg-long-desc": "File SVG, dimensiones nominal: $1 × $2 pixels, grandor del file: $3",
        "version-parser-function-hooks": "Uncinos de functiones del analysator syntactic",
        "version-hook-name": "Nomine del uncino",
        "version-hook-subscribedby": "Subscribite per",
-       "version-version": "(Version $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[sin nomine]",
        "version-license": "Licentia pro MediaWiki",
        "version-ext-license": "Licentia",
        "logentry-upload-revert": "$1 {{GENDER:$2|ha incargate}} $3",
        "rightsnone": "(nulle)",
        "revdelete-summary": "summario del modification",
+       "feedback-adding": "Le responsa es addite al pagina...",
+       "feedback-bugcheck": "Bon! Ma per favor verifica que iste falta non es [$1 jam cognoscite].",
+       "feedback-bugnew": "Si, io lo ha verificate; reportar un nove falta",
        "feedback-bugornote": "Si tu es preste a describer un problema technic in detalio, per favor [$1 reporta un falta].\nSi non, tu pote usar le formulario facile hic infra. Tu commento essera addite al pagina \"[$3 $2]\", con tu nomine de usator e le navigator del web que tu usa.",
-       "feedback-subject": "Subjecto:",
-       "feedback-message": "Message:",
        "feedback-cancel": "Cancellar",
-       "feedback-submit": "Submitter opinion",
-       "feedback-adding": "Le responsa es addite al pagina...",
+       "feedback-close": "Finite",
        "feedback-error1": "Error: Resultato del API non recognoscite",
        "feedback-error2": "Error: Modification fallite",
        "feedback-error3": "Error: Nulle responsa del API",
+       "feedback-message": "Message:",
+       "feedback-subject": "Subjecto:",
+       "feedback-submit": "Submitter",
        "feedback-thanks": "Gratias! Tu evalutation ha essite publicate in le pagina \"[$2 $1]\".",
-       "feedback-close": "Finite",
-       "feedback-bugcheck": "Bon! Ma per favor verifica que iste falta non es [$1 jam cognoscite].",
-       "feedback-bugnew": "Si, io lo ha verificate; reportar un nove falta",
        "searchsuggest-search": "Cercar",
        "searchsuggest-containing": "continente...",
        "api-error-badaccess-groups": "Tu non ha le permission de incargar files in iste wiki.",
        "json-error-utf8": "Characteres UTF-8 mal formate, possibilemente codificate incorrectemente",
        "json-error-recursion": "Il ha un o plure referentias recursive in le valor a codificar",
        "json-error-inf-or-nan": "Un o plure valores NAN o INF se trova in le valor a codificar",
-       "json-error-unsupported-type": "Un valor de un typo que non pote esser codificate ha essite date"
+       "json-error-unsupported-type": "Un valor de un typo que non pote esser codificate ha essite date",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin extendite",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symbolos",
+       "special-characters-group-greek": "Greco",
+       "special-characters-group-cyrillic": "Cyrillic",
+       "special-characters-group-arabic": "Arabe",
+       "special-characters-group-arabicextended": "Arabe extendite",
+       "special-characters-group-persian": "Persiano",
+       "special-characters-group-hebrew": "Hebreo",
+       "special-characters-group-bangla": "Bengali",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanāgarī",
+       "special-characters-group-thai": "Thailandese",
+       "special-characters-group-lao": "Laotiano",
+       "special-characters-group-khmer": "Cambodgiano",
+       "special-characters-title-minus": "signo minus"
 }
index 5c77827..0e46d5e 100644 (file)
@@ -36,7 +36,8 @@
                        "C5st4wr6ch",
                        "Raynasution",
                        "Arifin.wijaya",
-                       "Ahdan"
+                       "Ahdan",
+                       "Macofe"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
        "search": "Pencarian",
        "searchbutton": "Cari",
        "go": "Tuju ke",
-       "searcharticle": "Tuju ke",
+       "searcharticle": "Lanjut",
        "history": "Riwayat halaman",
        "history_short": "Versi terdahulu",
        "updatedmarker": "diubah sejak kunjungan terakhir saya",
        "talkpage": "Bicarakan halaman ini",
        "talkpagelinktext": "bicara",
        "specialpage": "Halaman istimewa",
-       "personaltools": "Peralatan pribadi",
+       "personaltools": "Perkakas pribadi",
        "articlepage": "Lihat halaman isi",
        "talk": "Pembicaraan",
        "views": "Tampilan",
-       "toolbox": "Peralatan",
+       "toolbox": "Perkakas",
        "userpage": "Lihat halaman pengguna",
        "projectpage": "Lihat halaman proyek",
        "imagepage": "Lihat halaman berkas",
        "redirectedfrom": "(Dialihkan dari $1)",
        "redirectpagesub": "Halaman pengalihan",
        "redirectto": "Mengalihkan ke:",
-       "lastmodifiedat": "Halaman ini terakhir diubah pada $2, $1.",
+       "lastmodifiedat": "Halaman ini terakhir diubah pada $1, pukul $2.",
        "viewcount": "Halaman ini telah diakses sebanyak {{PLURAL:$1|$1 kali}}.<br />",
        "protectedpage": "Halaman yang dilindungi",
-       "jumpto": "Langsung ke:",
+       "jumpto": "Lompat ke:",
        "jumptonavigation": "navigasi",
        "jumptosearch": "cari",
        "view-pool-error": "Maaf, server sedang sibuk pada saat ini.\nTerlalu banyak pengguna berusaha melihat halaman ini.\nTunggu sebentar sebelum Anda mencoba lagi mengakses halaman ini.\n\n$1",
        "nstab-main": "Halaman",
        "nstab-user": "Pengguna",
        "nstab-media": "Media",
-       "nstab-special": "Istimewa",
+       "nstab-special": "Halaman Istimewa",
        "nstab-project": "Proyek",
        "nstab-image": "Berkas",
        "nstab-mediawiki": "Pesan",
        "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.",
-       "perfcached": "Data berikut ini diambil dari singgahan dan mungkin bukan data mutakhir. {{PLURAL:$1||}}$1 hasil maksimal tersedia di tembolok.",
-       "perfcachedts": "Data berikut ini diambil dari singgahan dan terakhir diperbarui pada $1. Maksimal {{PLURAL:$4 hasil}} ada di singgahan.",
+       "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.",
        "viewsource": "Lihat sumber",
        "viewsource-title": "Lihat sumber untuk $1",
        "viewyourtext": "Anda dapat melihat atau menyalin sumber dari '''suntingan Anda''' ke halaman ini:",
        "protectedinterface": "Halaman ini memuat teks antarmuka untuk perangkat lunak pada wiki ini, dan dilindungi terhadap penyalahgunaan. Untuk menambah atau mengubah terjemahan pada semua wiki, harap gunakan [//translatewiki.net/ translatewiki.net], proyek pelokalan MediaWiki.",
        "editinginterface": "<strong>Peringatan:</strong> Anda menyunting suatu halaman yang digunakan untuk menyediakan teks antarmuka bagi perangkat lunak.\nPerubahan pada halaman ini akan memengaruhi tampilan pada antarmuka pengguna untuk pengguna lain pada wiki ini.",
-       "translateinterface": "Untuk menambah atau mengubah terjemahan semua wiki, mohon gunakan [//translatewiki.net/ translatewiki.net], Proyek pelokalan MediaWiki.",
+       "translateinterface": "Untuk menambah atau mengubah terjemahan semua wiki, mohon gunakan [//translatewiki.net/ translatewiki.net], proyek pelokalan MediaWiki.",
        "cascadeprotected": "Halaman ini telah dilindungi dari penyuntingan karena disertakan di {{PLURAL:$1|halaman|halaman-halaman}} berikut yang telah dilindungi dengan opsi \"runtun\":\n$2",
        "namespaceprotected": "Anda tak memiliki hak akses untuk menyunting halaman di ruang nama '''$1'''.",
        "customcssprotected": "Anda tidak memiliki izin untuk menyunting halaman CSS ini, karena berisi pengaturan pribadi pengguna lain.",
        "userlogin-loggedin": "Andan telah masuk log sebagai $1.\nGunakan formulir di bawah untuk masuk log sebagai pengguna lain.",
        "userlogin-createanother": "Buat akun lain",
        "createacct-emailrequired": "Alamat surel",
-       "createacct-emailoptional": "Alamat surel/email (dianjurkan untuk diisi)",
+       "createacct-emailoptional": "Alamat surel/email (sebaiknya diisi)",
        "createacct-email-ph": "Masukkan alamat surel Anda",
        "createacct-another-email-ph": "Masukkan alamat surel",
        "createaccountmail": "Gunakan kata sandi acak sementara dan kirimkan ke surel yang diinginkan",
        "preview": "Pratayang",
        "showpreview": "Lihat pratayang",
        "showdiff": "Lihat perubahan",
-       "blankarticle": "<strong>Peringatan:</strong> Halaman yang akan Anda buat tidak berisi apa-apa.\nJika Anda mengeklik \"{{int:savearticle}}\" sekali lagi, halaman ini akan dibuat tanpa adanya isi.",
+       "blankarticle": "<strong>Peringatan:</strong> Halaman yang akan Anda buat tidak berisi apa-apa.\nJika Anda mengklik \"{{int:savearticle}}\" sekali lagi, halaman ini akan dibuat tanpa ada isi.",
        "anoneditwarning": "<strong>Peringatan:</strong> Anda sedang tidak masuk log. Alamat IP Anda akan terlihat oleh publik jika Anda melakukan suatu perubahan. Jika Anda <strong>[$1 masuk log]</strong> atau <strong>[$2 membuat akun]</strong>, suntingan Anda akan diatribusikan kepada nama pengguna Anda, beserta berbagai keuntungan lainnya.",
        "anonpreviewwarning": "''Anda belum masuk log. Menyimpan halaman akan menyebabkan alamat IP Anda tercatat pada riwayat suntingan laman ini.''",
        "missingsummary": "'''Peringatan:''' Anda tidak memasukkan ringkasan penyuntingan. Jika Anda kembali menekan tombol Simpan, suntingan Anda akan disimpan tanpa ringkasan penyuntingan.",
-       "selfredirect": "<strong>Peringatan:</strong> Anda akan mengalihkan halaman ini balik ke halaman ini.\nAnda bisa jadi telah menuliskan tujuan pengalihan yang salah, atau telah menyunting halaman yang salah.\nJika Anda mengeklik \"{{int:savearticle}}\" sekali lagi, halaman pengalihan akan dibuat.",
+       "selfredirect": "<strong>Peringatan:</strong> Anda mengalihkan halaman ini kembali ke halaman semula.\nAnda bisa jadi telah memberikan tujuan pengalihan yang salah, atau telah menyunting halaman yang salah.\nJika Anda mengeklik \"{{int:savearticle}}\" sekali lagi, halaman pengalihan akan dibuat.",
        "missingcommenttext": "Harap masukkan komentar di bawah ini.",
        "missingcommentheader": "''Peringatan:''' Anda belum memberikan subjek atau judul untuk komentar Anda. Jika Anda kembali menekan \"{{int:savearticle}}\", suntingan Anda akan disimpan tanpa komentar tersebut.",
        "summary-preview": "Pratayang ringkasan:",
        "currentrev-asof": "Revisi terkini pada $1",
        "revisionasof": "Revisi per $1",
        "revision-info": "Revisi per $1 oleh {{GENDER:$6|$2}}$7",
-       "previousrevision": "←Revisi sebelumnya",
-       "nextrevision": "Revisi selanjutnya→",
+       "previousrevision": "← Revisi sebelumnya",
+       "nextrevision": "Revisi selanjutnya →",
        "currentrevisionlink": "Revisi terkini",
        "cur": "skr",
        "next": "selanjutnya",
        "showhideselectedversions": "Tampilkan/sembunyikan versi terpilih",
        "editundo": "balikkan",
        "diff-empty": "(Tidak ada perbedaan)",
-       "diff-multi-sameuser": "({{PLURAL:$1|Satu revisi antara|$1 revisi antara}} oleh pengguna yang sama tidak ditampilkan)",
+       "diff-multi-sameuser": "({{PLURAL:$1|$1 revisi antara}} oleh pengguna yang sama tidak ditampilkan)",
        "diff-multi-otherusers": "({{PLURAL:$1|Satu revisi antara|$1 revisi antara}} oleh {{PLURAL:$2|satu pengguna lainnya|$2 pengguna}} tidak ditampilkan)",
        "diff-multi-manyusers": "({{PLURAL:$1|Satu|$1}} revisi antara oleh lebih dari $2 {{PLURAL:$2|satu|$2}} pengguna tak ditampilkan)",
        "difference-missing-revision": "{{PLURAL:$2|Satu revisi|$2 revisi}} dari perbedaan ini ($1) {{PLURAL:$2|tidak|tidak}} ditemukan.\n\nHal ini biasanya disebabkan oleh tautan diff yang kedaluwarsa ke halaman yang sudah dihapus.\nRinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
        "nextn": "{{PLURAL:$1|$1}} selanjutnya",
        "prevn-title": "$1 {{PLURAL:$1|hasil|hasil}} sebelumnya",
        "nextn-title": "$1 {{PLURAL:$1|hasil|hasil}} selanjutnya",
-       "shown-title": "Tampilkan $1 {{PLURAL:$1|hasil|hasil}} per halaman",
+       "shown-title": "Tampilkan $1 {{PLURAL:$1|hasil}} per halaman",
        "viewprevnext": "Lihat ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "* Halaman '''[[$1]]'''",
        "searchmenu-new": "<strong>Buat halaman \"[[:$1]]\" di wiki ini!</strong> {{PLURAL:$2|0=|Lihat pula halaman yang ditemukan dari pencarian Anda.|Lihat pula hasil pencarian yang ditemukan.}}",
        "searchprofile-images-tooltip": "Pencarian berkas",
        "searchprofile-everything-tooltip": "Pencarian di seluruh situs (termasuk halaman pembicaraan)",
        "searchprofile-advanced-tooltip": "Pencarian di ruang nama tertentu",
-       "search-result-size": "$1 ({{PLURAL:$2|1 kata|$2 kata}})",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 kata}})",
        "search-result-category-size": "{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkategori|$2 subkategori}}, {{PLURAL:$3|1 berkas|$3 berkas}})",
        "search-redirect": "(pengalihan $1)",
        "search-section": "(bagian $1)",
        "searchrelated": "berkaitan",
        "searchall": "semua",
        "showingresults": "Di bawah ini ditampilkan hingga {{PLURAL:$1|'''1''' hasil|'''$1''' hasil}}, dimulai dari #'''$2'''.",
-       "showingresultsinrange": "Menampilkan sampai dengan {{PLURAL:$1|<strong>1</strong> hasil|<strong>$1</strong> hasil}} dalam jangkauan #<strong>$2</strong> sampai #<strong>$3</strong>.",
+       "showingresultsinrange": "Menampilkan sampai dengan {{PLURAL:$1|<strong>1</strong> hasil|<strong>$1</strong> hasil}} dalam rentang #<strong>$2</strong> sampai #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Hasil <strong>$1</strong> dari <strong>$3</strong>|Hasil <strong>$1 - $2</strong> dari <strong>$3</strong>}}",
        "search-nonefound": "Tidak ada hasil yang sesuai dengan kriteria.",
        "powersearch-legend": "Pencarian lanjut",
        "prefs-editwatchlist-raw": "Sunting daftar pantauan mentah",
        "prefs-editwatchlist-clear": "Kosongkan daftar pantauan",
        "prefs-watchlist-days": "Jumlah hari maksimum yang ditampilkan di daftar pantauan:",
-       "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|hari|hari}}",
+       "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|hari}}",
        "prefs-watchlist-edits": "Jumlah suntingan maksimum yang ditampilkan di daftar pantauan yang lebih lengkap:",
        "prefs-watchlist-edits-max": "Nilai maksimum: 1000",
        "prefs-watchlist-token": "Token pantauan:",
        "recentchanges-label-bot": "Suntingan ini dilakukan oleh bot",
        "recentchanges-label-unpatrolled": "Suntingan ini belum terpatroli",
        "recentchanges-label-plusminus": "Perubahan ukuran halaman dalam bita",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "'''Keterangan:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lihat pula [[Special:NewPages|daftar halaman baru]])",
        "rcnotefrom": "Di bawah ini adalah {{PLURAL:$5|perubahan}} sejak <strong>$3, $4</strong> (ditampilkan sampai <strong>$1</strong> perubahan).",
        "rclistfrom": "Perlihatkan perubahan terbaru sejak $3 $2",
        "rcshowhidebots": "$1 bot",
        "rcshowhidebots-show": "Tampilkan",
        "rcshowhidebots-hide": "Sembunyikan",
-       "rcshowhideliu": "$1 pengguna-pengguna terdaftar",
+       "rcshowhideliu": "$1 pengguna terdaftar",
        "rcshowhideliu-show": "Tampilkan",
        "rcshowhideliu-hide": "Sembunyikan",
        "rcshowhideanons": "$1 pengguna anon",
        "rc_categories": "Batasi sampai kategori (dipisah dengan \"|\")",
        "rc_categories_any": "Apa pun",
        "rc-change-size": "$1",
-       "rc-change-size-new": "$1 {{PLURAL:$1|bita|bita}} setelah perubahan",
+       "rc-change-size-new": "$1 {{PLURAL:$1|bita}} setelah perubahan",
        "newsectionsummary": "/* $1 */ bagian baru",
        "rc-enhanced-expand": "Tampilkan rincian",
        "rc-enhanced-hide": "Sembunyikan rincian",
        "recentchangeslinked-feed": "Perubahan terkait",
        "recentchangeslinked-toolbox": "Perubahan terkait",
        "recentchangeslinked-title": "Perubahan yang terkait dengan \"$1\"",
-       "recentchangeslinked-summary": "Halaman istimewa ini memberikan daftar perubahan terakhir pada halaman-halaman terkait. Halaman yang Anda pantau ditandai dengan '''cetak tebal'''.",
+       "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",
        "license": "Jenis lisensi:",
        "license-header": "Jenis lisensi",
        "nolicense": "Tidak ada yang dipilih",
-       "licenses-edit": "Sunting opsi lisensi",
+       "licenses-edit": "Sunting pilihan lisensi",
        "license-nopreview": "(Pratayang tak tersedia)",
        "upload_source_url": "(Anda pilih berkas dari URL valid yang dapat diakses publik)",
        "upload_source_file": "(Anda pilih berkas dari komputer Anda)",
        "filehist-filesize": "Besar berkas",
        "filehist-comment": "Komentar",
        "imagelinks": "Pranala berkas",
-       "linkstoimage": "{{PLURAL:$1||}}$1 halaman berikut memiliki pranala ke berkas ini:",
+       "linkstoimage": "{{PLURAL:$1|Halaman berikut}} memiliki pranala ke berkas ini:",
        "linkstoimage-more": "Lebih dari $1 {{PLURAL:$1|halaman|halaman}} memiliki pranala ke berkas ini.\nDaftar berikut menampilkan {{PLURAL:$1|halaman dengan pranala langsung|$1 halaman dengan pranala langsung}} ke berkas ini.\nJuga tersedia [[Special:WhatLinksHere/$2|daftar selengkapnya]].",
        "nolinkstoimage": "Tidak ada halaman yang memiliki pranala ke berkas ini.",
        "morelinkstoimage": "Lihat [[Special:WhatLinksHere/$1|pranala lainnya]] ke berkas ini.",
        "download": "unduh",
        "unwatchedpages": "Halaman yang tak dipantau",
        "listredirects": "Daftar pengalihan",
-       "listduplicatedfiles": "Daftar berkas yang berduplikat",
+       "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",
        "withoutinterwiki-legend": "Prefiks",
        "withoutinterwiki-submit": "Tampilkan",
        "fewestrevisions": "Halaman dengan perubahan tersedikit",
-       "nbytes": "$1 {{PLURAL:$1|bita|bita}}",
+       "nbytes": "$1 {{PLURAL:$1|bita}}",
        "ncategories": "$1 {{PLURAL:$1|kategori|kategori}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwiki}}",
        "nlinks": "$1 {{PLURAL:$1|pranala|pranala}}",
-       "nmembers": "$1 {{PLURAL:$1|isi|isi}}",
+       "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}}",
        "nopagetitle": "Halaman tujuan tidak ditemukan",
        "nopagetext": "Halaman yang Anda tuju tidak ditemukan.",
        "pager-newer-n": "{{PLURAL:$1|1 lebih baru|$1 lebih baru}}",
-       "pager-older-n": "{{PLURAL:$1|1 lebih lama|$1 lebih lama}}",
+       "pager-older-n": "{{PLURAL:$1|$1 lebih lama}}",
        "suppress": "Pengawas",
        "querypage-disabled": "Halaman istimewa ini dinonaktifkan demi alasan kinerja.",
        "apihelp": "Bantuan API",
        "emailccsubject": "Salinan pesan Anda untuk $1: $2",
        "emailsent": "Surel terkirim",
        "emailsenttext": "Surel Anda telah dikirimkan.",
-       "emailuserfooter": "Surel ini dikirimkan oleh $1 kepada $2 menggunakan fungsi \"Suratepengguna\" di {{SITENAME}}.",
+       "emailuserfooter": "Surel ini dikirimkan oleh $1 kepada $2 menggunakan fungsi \"Surel Pengguna\" di {{SITENAME}}.",
        "usermessage-summary": "Tinggalkan pesan sistem.",
        "usermessage-editor": "Penyampai pesan sistem",
        "usermessage-template": "MediaWiki:UserMessage",
        "deleting-backlinks-warning": "'''Peringatan:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Halaman lain]] mengarah atau memiliki transklusi ke halaman yang akan Anda hapus.",
        "rollback": "Kembalikan suntingan",
        "rollbacklink": "kembalikan",
-       "rollbacklinkcount": "kembalikan $1 {{PLURAL:$1|suntingan|suntingan}}",
+       "rollbacklinkcount": "kembalikan $1 {{PLURAL:$1|suntingan}}",
        "rollbacklinkcount-morethan": "kembalikan lebih dari $1 {{PLURAL:$1|suntingan|suntingan}}",
        "rollbackfailed": "Pengembalian gagal dilakukan",
        "cantrollback": "Tidak dapat membatalkan suntingan;\nkontributor terakhir adalah satu-satunya penulis halaman ini.",
        "nolinkshere": "Tidak ada halaman yang memiliki pranala ke '''[[:$1]]'''.",
        "nolinkshere-ns": "Tidak ada halaman yang memiliki pranala ke '''[[:$1]]''' pada ruang nama yang dipilih.",
        "isredirect": "halaman pengalihan",
-       "istemplate": "dengan templat",
+       "istemplate": "tranklusi",
        "isimage": "pranala berkas",
-       "whatlinkshere-prev": "$1 {{PLURAL:$1|sebelumnya|sebelumnya}}",
-       "whatlinkshere-next": "$1 {{PLURAL:$1|selanjutnya|selanjutnya}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|sebelumnya $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|selanjutnya $1}}",
        "whatlinkshere-links": "← pranala",
        "whatlinkshere-hideredirs": "$1 pengalihan",
        "whatlinkshere-hidetrans": "$1 transklusi",
        "autoblockid": "Blokir otomatis #$1",
        "block": "Blokir pengguna",
        "unblock": "Buka blokir pengguna",
-       "blockip": "Blokir pengguna",
+       "blockip": "Blokir {{GENDER:$1|pengguna}}",
        "blockip-legend": "Blokir pengguna",
        "blockiptext": "Gunakan formulir di bawah untuk memblokir akses penulisan dari sebuah alamat IP atau pengguna tertentu.\nIni hanya boleh dilakukan untuk mencegah vandalisme, dan sejalan dengan [[{{MediaWiki:Policy-url}}|kebijakan]].\nMasukkan alasan Anda di bawah (contoh, menuliskan nama halaman yang telah divandalisasi).",
        "ipaddressorusername": "Alamat IP atau nama pengguna:",
        "ipb-unblock-addr": "Hilangkan blokir $1",
        "ipb-unblock": "Hilangkan blokir seorang pengguna atau suatu alamat IP",
        "ipb-blocklist": "Lihat blokir yang diterapkan",
-       "ipb-blocklist-contribs": "Kontribusi untuk $1",
+       "ipb-blocklist-contribs": "Kontribusi untuk {{GENDER:$1|$1}}",
        "unblockip": "Hilangkan blokir terhadap alamat IP atau pengguna",
        "unblockiptext": "Gunakan formulir di bawah untuk mengembalikan kemampuan menulis sebuah alamat IP atau pengguna yang sebelumnya telah diblokir.",
        "ipusubmit": "Hilangkan blokir ini",
        "tooltip-pt-mycontris": "Daftar kontribusi Anda",
        "tooltip-pt-login": "Anda disarankan untuk masuk log, meskipun hal itu tidak diwajibkan.",
        "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-addsection": "Mulai bagian baru",
        "tooltip-ca-viewsource": "Halaman ini dilindungi. Anda hanya dapat melihat sumbernya.",
-       "tooltip-ca-history": "Revisi-revisi sebelumnya dari halaman ini.",
+       "tooltip-ca-history": "Revisi sebelumnya dari halaman ini.",
        "tooltip-ca-protect": "Lindungi halaman ini",
        "tooltip-ca-unprotect": "Ubah perlindungan halaman ini",
        "tooltip-ca-delete": "Hapus halaman ini",
        "tooltip-ca-move": "Pindahkan halaman ini",
        "tooltip-ca-watch": "Tambahkan halaman ini ke daftar pantauan Anda",
        "tooltip-ca-unwatch": "Hapus halaman ini dari daftar pantauan Anda",
-       "tooltip-search": "Cari dalam wiki ini",
+       "tooltip-search": "Cari di {{SITENAME}}",
        "tooltip-search-go": "Cari suatu halaman dengan nama yang persis seperti ini jika tersedia",
        "tooltip-search-fulltext": "Cari halaman yang memiliki teks seperti ini",
        "tooltip-p-logo": "Kunjungi Halaman Utama",
        "tooltip-feed-atom": "Umpan Atom untuk halaman ini",
        "tooltip-t-contributions": "Lihat daftar kontribusi pengguna ini",
        "tooltip-t-emailuser": "Kirimkan surel kepada pengguna ini",
-       "tooltip-t-upload": "Muatkan gambar atau berkas media",
+       "tooltip-t-upload": "Unggah berkas",
        "tooltip-t-specialpages": "Daftar semua halaman istimewa",
        "tooltip-t-print": "Versi cetak halaman ini",
        "tooltip-t-permalink": "Pranala permanen untuk revisi halaman ini",
        "tooltip-watchlistedit-raw-submit": "Perbarui daftar pantauan",
        "tooltip-recreate": "Buat ulang halaman walaupun sebenarnya telah dihapus",
        "tooltip-upload": "Mulai pemuatan",
-       "tooltip-rollback": "\"Kembalikan\" membatalkan suntingan-suntingan di halaman ini ke kontributor terakhir dalam satu kali klik.",
+       "tooltip-rollback": "\"Pengembali\" membatalkan suntingan-suntingan di halaman ini ke kontributor terakhir dalam satu kali klik.",
        "tooltip-undo": "\"Balikkan\" membatalkan revisi ini dan membuka kotak penyuntingan dengan mode pratayang. Alasan dapat ditambahkan di kotak ringkasan.",
        "tooltip-preferences-save": "Simpan preferensi",
        "tooltip-summary": "Masukkan sebuah ringkasan pendek",
        "svg-long-error": "Berkas SVG tidak sah: $1",
        "show-big-image": "Ukuran asli",
        "show-big-image-preview": "Ukuran pratayang ini: $1.",
-       "show-big-image-other": "{{PLURAL:$2|Resolusi|Resolusi}} lain: $1.",
+       "show-big-image-other": "{{PLURAL:$2|Resolusi}} lain: $1.",
        "show-big-image-size": "$1 × $2 piksel",
        "file-info-gif-looped": "melingkar",
        "file-info-gif-frames": "$1 {{PLURAL:$1||}}frame",
        "metadata-help": "Berkas ini mengandung informasi tambahan yang mungkin ditambahkan oleh kamera digital atau pemindai yang digunakan untuk membuat atau mendigitalisasi berkas. Jika berkas ini telah mengalami modifikasi, rincian yang ada mungkin tidak secara penuh merefleksikan informasi dari gambar yang sudah dimodifikasi ini.",
        "metadata-expand": "Tampilkan rincian tambahan",
        "metadata-collapse": "Sembunyikan rincian tambahan",
-       "metadata-fields": "Bidang metadata gambar yang tercantum dalam pesan ini akan dimasukkan pada tampilan halaman gambar ketika tabel metadata diciutkan.\nData lain akan disembunyikan secara bawaan.\n * make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Bidang metadata gambar yang tercantum dalam pesan ini akan dimasukkan pada tampilan halaman gambar ketika tabel metadata diciutkan.\nData lain akan disembunyikan secara bawaan.\n* pembuat\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* hak cipta\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "metadata-langitem": "'''$2:''' $1",
        "metadata-langitem-default": "$1",
        "exif-imagewidth": "Lebar",
        "version-parser-function-hooks": "Kait fungsi parser",
        "version-hook-name": "Nama kait",
        "version-hook-subscribedby": "Dilanggani oleh",
-       "version-version": "(Versi $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[tanpa nama]",
        "version-svn-revision": "(r$2)",
        "version-license": "Lisensi MediaWiki",
        "logentry-managetags-create": "$1 {{GENDER:$2|membuat}} tag \"$4\"",
        "rightsnone": "(tidak ada)",
        "revdelete-summary": "ringkasan",
+       "feedback-adding": "Menambahkan umpan balik ke halaman...",
+       "feedback-bugcheck": "Hebat! Hanya periksa bahwa itu bukan satu di antara [$1 bug yang telah dikenal].",
+       "feedback-bugnew": "Saya telah memeriksa. Laporkan bug baru",
        "feedback-bugornote": "Jika Anda sudah siap untuk mendeskripsikan masalah teknis secara rinci silakan [$1 melaporkan bug].\nJika tidak, Anda dapat menggunakan formulir mudah di bawah ini. Komentar Anda akan ditambahkan ke halaman \"[$3 $2]\", bersama dengan nama pengguna Anda dan apa browser yang Anda gunakan.",
-       "feedback-subject": "Perihal:",
-       "feedback-message": "Pesan:",
        "feedback-cancel": "Batal",
-       "feedback-submit": "Kirim Umpan Balik",
-       "feedback-adding": "Menambahkan umpan balik ke halaman...",
+       "feedback-close": "Selesai",
        "feedback-error1": "Galat: Hasil tidak dikenal dari API",
        "feedback-error2": "Galat: Penyuntingan gagal",
        "feedback-error3": "Error: API tidak merespons",
+       "feedback-message": "Pesan:",
+       "feedback-subject": "Perihal:",
+       "feedback-submit": "Kirim",
        "feedback-thanks": "Terima kasih! Umpan balik Anda telah dikirimkan ke halaman \"[$2 $1]\".",
-       "feedback-close": "Selesai",
-       "feedback-bugcheck": "Hebat! Hanya periksa bahwa itu bukan satu di antara [$1 bug yang telah dikenal].",
-       "feedback-bugnew": "Saya telah memeriksa. Laporkan bug baru",
        "searchsuggest-search": "Cari",
        "searchsuggest-containing": "berisi...",
        "api-error-badaccess-groups": "Anda tidak diizinkan mengunggah berkas ke wiki ini.",
index cd8748e..215c489 100644 (file)
        "version-parser-function-hooks": "Croces de functiones analisatores",
        "version-hook-name": "Nómine de croc",
        "version-hook-subscribedby": "Subscrit per",
-       "version-version": "(Version $1)",
+       "version-version": "($1)",
        "version-svn-revision": "(r$2)",
        "version-license": "Licentie",
        "version-software": "Software installat",
index 3aad06f..9b4dfcc 100644 (file)
        "deletecomment": "Màkà:",
        "deleteotherreason": "Màkà ihe ozor kwa:",
        "deletereasonotherlist": "Mgbághàpụtá ozor",
-       "rollback_short": "Fifié àzú",
        "rollbacklink": "fifié àzú",
        "rollbackfailed": "Fifié na àzú dàrà",
        "protectlogpage": "Ntínyé nke ncẹdolu",
        "version-hooks": "Nyazo",
        "version-hook-name": "Áhà nyazo",
        "version-hook-subscribedby": "Dọkpụrụ shì",
-       "version-version": "(Ùdị $1)",
+       "version-version": "($1)",
        "version-license": "Íwú Ǹkwé",
        "version-poweredby-others": "nke ndi ozor",
        "version-software-product": "Nfófụtá",
        "revdelete-content-hid": "ihe zọ̀nàri",
        "rightsnone": "(efù)",
        "revdelete-summary": "mmẹkotá orü",
-       "feedback-message": "Ozi:",
        "feedback-close": "Ọméchá.",
+       "feedback-message": "Ozi:",
        "searchsuggest-search": "Chọwa",
        "expand_templates_ok": "Ngwanu"
 }
index 0c2b29e..5fc0be2 100644 (file)
@@ -7,7 +7,8 @@
                        "Saluyot",
                        "Urhixidur",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Pinag-ugisan ti silpo:",
        "deleteprotected": "Saanmo a maikkat daytoy a panid gapu ta nasalaknibanen.",
        "deleting-backlinks-warning": "'''Ballaag:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Dagiti dadduma a panid]] ket naisilpo wenno nailak-am manipud ti panid a gangani nga ikkatem.",
        "rollback": "Isubli dagiti panagurnos",
-       "rollback_short": "Isubli",
        "rollbacklink": "isubli",
        "rollbacklinkcount": "agisubli ti $1 {{PLURAL:$1|nga inurnos|nga inur-urnos}}",
        "rollbacklinkcount-morethan": "agisubli ti ad-adu ngem $1 {{PLURAL:$1|nga inurnos|nga inur-urnos}}",
        "sp-contributions-logs": "dagiti listaan",
        "sp-contributions-talk": "tungtungan",
        "sp-contributions-userrights": "panagtaripato kadagiti karbengan ti agar-aramat",
-       "sp-contributions-blocked-notice": "Adama a naserraan daytoy nga agar-aramat.\nTi naudi a naikabil iti listaan ti pannakaserra ket naited dita baba para iti reperensia:",
+       "sp-contributions-blocked-notice": "Agdama a naserraan daytoy nga agar-aramat.\nTi naudi a naikabil iti listaan ti pannakaserra ket naited dita baba para iti reperensia:",
        "sp-contributions-blocked-notice-anon": "Daytoy nga IP a pagtaengan ket agdama a naserraan.\nTi naudi a naikabil iti listaan ti pannakaserra ket adda dita baba para iti reperensia:",
        "sp-contributions-search": "Agbiruk para kadagiti kontribusion",
        "sp-contributions-username": "IP a pagtaengan wenno nagan ti agar-aramat:",
        "import-logentry-interwiki": "nai-transwiki iti $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebision|dagiti rebision}} ti naala manipud ti $2",
        "javascripttest": "Panagsubok ti JavaScript",
-       "javascripttest-title": "Agpatpataray kadagiti panagsubok ti $1",
        "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-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.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
        "tooltip-pt-userpage": "Panidmo nga agar-aramat",
        "tooltip-pt-anonuserpage": "Ti panid ti agar-aramat para iti daytoy nga IP a pagtaengan a kas ur-urnosem",
        "tooltip-pt-mytalk": "Tungtungam a panid",
        "logentry-upload-revert": "Ni $1 ket {{GENDER:$2|inkargana}} ti $3",
        "rightsnone": "(awan)",
        "revdelete-summary": "Pakabuklan ti inurnos",
+       "feedback-adding": "Agnaynayon ti feedback iti panid...",
+       "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-subject": "Suheto:",
-       "feedback-message": "Mensahe:",
        "feedback-cancel": "Ukasen",
-       "feedback-submit": "Agited ti Feedback",
-       "feedback-adding": "Agnaynayon ti feedback iti panid...",
+       "feedback-close": "Nalpasen",
        "feedback-error1": "Biddut: Saan a malasin dagiti nagbanagan manipud ti API",
        "feedback-error2": "Biddut: Napaay ti panagurnos",
        "feedback-error3": "Biddut: Awan ti sungbat manipud ti API",
+       "feedback-message": "Mensahe:",
+       "feedback-subject": "Suheto:",
+       "feedback-submit": "Ited",
        "feedback-thanks": "Agyaman! Ti feedbackmo ket naipablaak iti panid \"[$2 $1]\".",
-       "feedback-close": "Nalpasen",
-       "feedback-bugcheck": "Nasayaaten! Kitaem tapno saan a dagiti adda idin a [$1 nga ammo a parparikut].",
-       "feedback-bugnew": "Kinitak. Agireporta iti baro a parikut",
        "searchsuggest-search": "Biruken",
        "searchsuggest-containing": "naglaon ti...",
        "api-error-badaccess-groups": "Saanka mapalubosan nga agikarga kadagiti papeles iti daytoy a wiki.",
index d03c816..9799b9d 100644 (file)
        "views": "БӀаргтассамаш",
        "toolbox": "ГӀирсаш",
        "userpage": "Доакъошхочун оаг|он т|а б|аргтасса",
-       "projectpage": "Хьахьоадайтама оагӀуве бӀаргтасса",
-       "imagepage": "Ð\9fаÑ\8cла Ð¾Ð°Ð³Ó\80Ñ\83в Ñ\82Ó\80а Ð±Ó\80аргтасса",
-       "mediawikipage": "Xоаман оагӀув хьахьокха",
-       "templatepage": "ЧӀабала оагӀув тӀа бӀаргтасса",
+       "projectpage": "Хьахьоадайтама оаг|oн т|а б|аргтасса",
+       "imagepage": "Ð\9bÑ\83Ñ\80даÑ\80а Ð¾Ð°Ð³|oн Ñ\82|а Ð±|аргтасса",
+       "mediawikipage": "Xоаман оаг|ув хьахьокха",
+       "templatepage": "Ч|абала оаг|oн т|а б|аргтасса",
        "viewhelppage": "Куцтохкам беха",
-       "categorypage": "Катага оагӀув тӀа бӀаргтасса",
-       "viewtalkpage": "Дувцамага бӀаргтасса",
+       "categorypage": "Катага оаг|oн т|а б|аргтасса",
+       "viewtalkpage": "Дувцамага б|аргтасса",
        "otherlanguages": "Кхыча меттаех",
-       "redirectedfrom": "($1 тӀера хьадейта да)",
-       "redirectpagesub": "ДӀа-хьа дайта оагӀув",
+       "redirectedfrom": "($1 т|aра хьадейта да)",
+       "redirectpagesub": "Д|а-хьа дайта оаг|ув",
        "redirectto": "Д|ахьожаде укх т|а:",
-       "lastmodifiedat": "Укх оагӀув тӀехьара  хувцам: $2, $1.",
+       "lastmodifiedat": "Укх оаг|oн т|ехьара  хувцам: $2, $1.",
        "viewcount": "Укх оаг|oн т|а б|аргтассаб {{PLURAL:$1|цхьааца\n|$1 times}}. {{PLURAL:$1|1=цхьазза|$1за}}.",
-       "protectedpage": "Лорама оагӀув",
-       "jumpto": "Укхаза дехьа гӀо:",
-       "jumptonavigation": "никÑ\8aÑ\82оÑ\85каÑ\80г",
-       "jumptosearch": "леха",
+       "protectedpage": "Лорама оаг|ув",
+       "jumpto": "Укхаза дехьаг|о:",
+       "jumptonavigation": "наÑ\8cкÑ\8aаÑ\82оxкаÑ\80",
+       "jumptosearch": "лaхаp",
        "pool-timeout": "ЧIегатохара сабаран ха чакхаяьннай",
        "pool-queuefull": "Хаттарий цӀа хьалдизад",
        "pool-errorunknown": "Довзаш доаца гӀалат",
        "duplicate-defaultsort": "Зем бе. Сатийна дIа-хьа хьоржама доагI \"$2\" хьалхара сатийна дIа-хьа хьоржама доагI \"$1\" хьахьоржа.",
        "version": "Доржам",
        "version-specialpages": "ГIулакхий оагIувнаш",
-       "version-version": "(Доржам $1)",
+       "version-version": "($1)",
        "version-software-version": "Доржам",
        "fileduplicatesearch-filename": "ПаьлацIи:",
        "fileduplicatesearch-submit": "Лаха",
index ac3ccfe..afc328c 100644 (file)
        "deletereasonotherlist": "Altra motivo",
        "deletereason-dropdown": "*Ordinara motivi por efaco\n** Demandita da autoro\n** Kopiyuro Violaco\n** Korupto",
        "rollback": "Retrorulez redakti",
-       "rollback_short": "Retrorular",
        "rollbacklink": "retrorulez",
        "rollbackfailed": "Retrorular ne sucesis",
        "cantrollback": "Ne esas posibla retrorular. La lasta kontributanto esas la nura autoro di ica pagino.",
        "version": "Versiono",
        "version-specialpages": "Specala pagini",
        "version-other": "Altra",
-       "version-version": "(Versiono $1)",
+       "version-version": "($1)",
        "version-license": "Licenco",
        "version-software-product": "Produkturo",
        "version-software-version": "Versiono",
index afe883f..42b2234 100644 (file)
@@ -17,7 +17,9 @@
                        "Urhixidur",
                        "Ævar Arnfjörð Bjarmason",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe",
+                       "Sveinn í Felli"
                ]
        },
        "tog-underline": "Undirstrika tengla:",
@@ -34,6 +36,7 @@
        "tog-watchdefault": "Bæta síðum og skrám sem ég breyti á vaktlistann minn",
        "tog-watchmoves": "Bæta síðum og skrám sem ég færi á vaktlistann minn",
        "tog-watchdeletion": "Bæta síðum og skrám sem ég eyði á vaktlistann minn",
+       "tog-watchrollback": "Bæta síðum þar sem ég hef tekið aftur breytingu á vaktlistann minn",
        "tog-minordefault": "Merkja allar breytingar sem minniháttar sjálfgefið",
        "tog-previewontop": "Sýna forskoðun á undan breytingarkassanum",
        "tog-previewonfirst": "Sýna forskoðun með fyrstu breytingu",
@@ -44,7 +47,7 @@
        "tog-shownumberswatching": "Sýna fjölda vaktandi notenda",
        "tog-oldsig": "Núverandi undirskrift:",
        "tog-fancysig": "Meðhöndla undirskrift sem wikimál (án sjálfvirks tengils)",
-       "tog-uselivepreview": "Nota beina forskoðun (Á tilraunastigi)",
+       "tog-uselivepreview": "Nota beina forskoðun",
        "tog-forceeditsummary": "Birta áminningu þegar breytingarágripið er tómt",
        "tog-watchlisthideown": "Ekki sýna mínar breytingar á vaktlistanum",
        "tog-watchlisthidebots": "Ekki sýna breytingar vélmenna á vaktlistanum",
        "password-login-forbidden": "Notkun þessa notendanafns og lykilorðs er ekki leyfileg.",
        "mailmypassword": "Endurstilla lykilorð",
        "passwordremindertitle": "Nýtt tímabundið aðgangsorð fyrir {{SITENAME}}",
-       "passwordremindertext": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um að fá nýtt\nlykilorð fyrir {{SITENAME}} ($4). Tímabundið lykilorð fyrir notandann „$2“\nhefur verið búið til og er núna „$3“. Ef þetta er það sem þú vildir, þarfu að skrá\nþig inn og velja nýtt lykilorð.  Þetta tímabundna lykilorð rennur út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það var ekki þú sem fórst fram á þetta, eða ef þú mannst lykilorðið þitt,\nog vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og\nhalda áfram að nota gamla lykilorðið.",
+       "passwordremindertext": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um að fá nýtt\nlykilorð fyrir {{SITENAME}} ($4). Tímabundið lykilorð fyrir notandann „$2“\nhefur verið búið til og er núna „$3“. Ef þetta er það sem þú vildir, þarfu að skrá\nþig inn og velja nýtt lykilorð.  Þetta tímabundna lykilorð rennur út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það var ekki þú sem fórst fram á þetta, eða ef þú manst lykilorðið þitt,\nog vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og\nhalda áfram að nota gamla lykilorðið.",
        "noemail": "Það er ekkert netfang skráð fyrir notandan \"$1\".",
        "noemailcreate": "Þú verður að skrá gilt netfang",
        "passwordsent": "Nýtt lykilorð var sent á netfangið sem er skráð á „$1“.\nVinsamlegast skráðu þig inn á ný þegar þú hefur móttekið það.",
        "passwordreset-capture-help": "Ef þú hakar við þennan reit verður tölvupósturinn (með tímabundna lykilorðinu) sýndur þér og einnig sendur notandanum.",
        "passwordreset-email": "Netfang:",
        "passwordreset-emailtitle": "Notendaupplýsingar á {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um \nendursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú mannst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
-       "passwordreset-emailtext-user": "Notandinn $1 á {{SITENAME}} hefur beðið um endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú mannst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
+       "passwordreset-emailtext-ip": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um \nendursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú manst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
+       "passwordreset-emailtext-user": "Notandinn $1 á {{SITENAME}} hefur beðið um endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú manst aftur lykilorðið þitt, og vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
        "passwordreset-emailelement": "Notendanafn: $1\nTímabundið lykilorð: $2",
        "passwordreset-emailsent": "Töluvpóstur til að endursetja lykilorðið hefur verið sendur.",
        "passwordreset-emailsent-capture": "Tölvupóstur til að endursetja lykilorðið hefur verið sendur í tölvupósti, sem er sýndur hér fyrir neðan.",
        "template-semiprotected": "(hálfvernduð)",
        "hiddencategories": "Þessi síða er meðlimur í $1 {{PLURAL:$1|földum flokki|földum flokkum}}:",
        "nocreatetext": "{{SITENAME}} hefur takmarkað eiginleikann að gera nýjar síður.\nÞú getur farið til baka og breytt núverandi síðum, eða [[Special:UserLogin|skráð þið inn eða búið til aðgang]].",
-       "nocreate-loggedin": "Þú hefur ekki leyfi til að skapa nýjar síður.",
+       "nocreate-loggedin": "Þú hefur ekki leyfi til að búa til nýjar síður.",
        "sectioneditnotsupported-title": "Hlutabreyting er ekki virk",
        "sectioneditnotsupported-text": "Hlutabreyting er ekki virk á þessari síðu.",
        "permissionserrors": "Leyfisvilla",
        "edit-gone-missing": "Gat ekki uppfært síðu.\nSvo virðist sem henni hafi verið eytt.",
        "edit-conflict": "Breytingaárekstur.",
        "edit-no-change": "Breyting þín var hunsuð, því engin breyting var á textanum.",
-       "postedit-confirmation-saved": "Breytingin þín var vistuð.",
+       "postedit-confirmation-saved": "Breyting þín hefur verið vistuð.",
        "edit-already-exists": "Gat ekki skapað nýja síðu.\nHún er nú þegar til.",
        "defaultmessagetext": "Sjálfgefinn skilaboða texti",
        "content-failed-to-parse": "Gat ekki þáttað $2 efni samkvæmt $1 líkani: $3",
        "lineno": "Lína $1:",
        "compareselectedversions": "Bera saman valdar útgáfur",
        "showhideselectedversions": "Sýna/fela valdar breytingar",
-       "editundo": "Taka aftur þessa breytingu",
+       "editundo": "afturkalla þessa breytingu",
        "diff-empty": "(Enginn munur)",
        "diff-multi-sameuser": "($1 {{PLURAL:$1|millibreyting ekki sýnd|millibreytingar ekki sýndar}} frá sama notandanum)",
        "diff-multi-manyusers": "($1 {{PLURAL:$1|millibreyting ekki sýnd|millibreytingar ekki sýndar}} frá fleiri en $2 {{PLURAL:$2|notanda|notendum}}.)",
        "searchall": "öllum",
        "showingresults": "Sýni <strong>$1</strong> {{PLURAL:$1|niðurstöðu|niðurstöður}} frá og með #<strong>$2</strong>.",
        "showingresultsinrange": "Sýni allt að <strong>$1</strong> {{PLURAL:$1|niðurstöðu|niðurstöður}} á bilinu <strong>$2</strong> til <strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Niðurstaða|Niðurstöður}} <strong>$1-$2</strong> af <strong>$3</strong>",
        "search-nonefound": "Engar niðurstöður pössuðu við fyrirspurnina.",
        "powersearch-legend": "Ítarlegri leit",
        "powersearch-ns": "Leita í nafnrýmum:",
        "userrights-no-interwiki": "Þú hefur ekki leyfi til að breyta notandaréttindum á öðrum wiki-síðum.",
        "userrights-nodatabase": "Gagnagrunnurinn $1 er ekki til eða ekki staðbundinn.",
        "userrights-nologin": "Þú verður að [[Special:UserLogin|innskrá]] þig á möppudýraaðgang til að geta útdeilt notandaréttindum.",
-       "userrights-notallowed": "Þú hefur ekki réttindi til að útdeila eða draga til baka notandaréttini.",
+       "userrights-notallowed": "Þú hefur ekki réttindi til að útdeila eða draga til baka notandaréttindi.",
        "userrights-changeable-col": "Hópar sem þú getur breytt",
        "userrights-unchangeable-col": "Hópar sem þú getur ekki breytt",
        "userrights-conflict": "Árekstur í að breyta notandaréttindum! Vinsamlegast skoðaðu aftur og staðfestu breytingar þínar.",
        "recentchanges-label-bot": "Þessi breyting var gerð af vélmenni",
        "recentchanges-label-unpatrolled": "Þessi breyting hefur ekki verið yfirfarin",
        "recentchanges-label-plusminus": "Stærð síðunnar breyttist um svona mörg bæti",
+       "recentchanges-legend-heading": "'''Fyrirsögn:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjá einng [[Special:NewPages|lista yfir nýjar síður]])",
        "rcnotefrom": "Að neðan {{PLURAL:$5|er breyting síðan|eru breytingar síðan}} <strong>$3, $4</strong> (allt að <strong>$1</strong> sýndar).",
        "rclistfrom": "Sýna breytingar frá og með $3 $2",
        "illegalfilename": "Skráarnafnið „$1“ inniheldur stafi sem eru ekki leyfðir í síðutitlum.\nGjörðu svo vel og endurnefndu skrána og hladdu henni inn aftur.",
        "filename-toolong": "Skráarnöfn mega ekki vera lengri en 240 bæt.",
        "badfilename": "Skáarnafninu hefur verið breytt í „$1“.",
-       "filetype-mime-mismatch": "Skráarendingin \".$1\" samræmist ekki MIME gerð skráarinnar ($2).",
+       "filetype-mime-mismatch": "Skráarendingin \".$1\" samræmist ekki MIME-gerð skrárinnar ($2).",
        "filetype-badmime": "Skrárir af MIME-gerðinni „$1“ er ekki leyfilegt að hlaða inn.",
        "filetype-bad-ie-mime": "Mistókst að hlaða inn skrá því Internet Explorer myndi uppgvötva hana sem \"$1\" sem er óheimil og mögulega hættulegt skráarsnið.",
        "filetype-unwanted-type": "'''„.$1“''' er óæskileg skráargerð.\n{{PLURAL:$3|Ákjósanleg skráargerð er|Ákjósanlegar skráargerðir eru}} $2.",
        "illegal-filename": "Þetta skráarnafn er ekki leyft.",
        "overwrite": "Óheimilt er að skrifa yfir skrá sem er þegar til.",
        "unknown-error": "Óþekkt villa kom upp.",
-       "tmp-create-error": "Gat ekki búið til tímabundna skrá.",
+       "tmp-create-error": "Gat ekki búið til bráðabirgðaskrá.",
        "tmp-write-error": "Villa við skrifun tímabundinnar skrár.",
        "large-file": "Það er mælt með að skrár séu ekki stærri en $1; þessi skrá er $2.",
        "largefileserver": "Þessi skrá er of stór. Vefþjónninn getur ekki tekið við skránni.",
        "windows-nonascii-filename": "Þessi wiki styður ekki skráarnöfn með sérstökum stöfum",
        "fileexists": "Skrá með þessu nafni er þegar til, skoðaðu <strong>[[:$1]]</strong> ef þú ert óviss um hvort þú viljir breyta henni.\n[[$1|thumb]]",
        "filepageexists": "Myndasíðan fyrir þessa síðu hefur þegar verið búin til <strong>[[:$1]]</strong>, en engin skrá er til með þessu nafni.\nLýsingin sem þú skrifaðir verður ekki birt á myndasíðunni.\nTil þess að lýsingin geti birst á síðunni, þá þarft þú að breyta síðunni sérstaklega.\n[[$1|thumb]]",
-       "fileexists-extension": "Skrá með svipuðu nafni er til: [[$2|thumb]]\n*Nafn skráarinnar sem hlaða á inn: <strong>[[:$1]]</strong>\n*Nafn skráarinnar sem er þegar til: <strong>[[:$2]]</strong>\nVilt þú kanski nota annað nafn sem er meira lýsandi fyrir skránna ?",
+       "fileexists-extension": "Skrá með svipuðu nafni er til: [[$2|thumb]]\n*Nafn skrárinnar sem hlaða á inn: <strong>[[:$1]]</strong>\n*Nafn skrárinnar sem er þegar til: <strong>[[:$2]]</strong>\nVilt þú kannski nota annað nafn sem er meira lýsandi fyrir skrána ?",
        "fileexists-thumbnail-yes": "Skráin virðist vera smámynd [[$1|thumb]]\nVinsamlegast athugaðu skránna <strong>[[:$1]]</strong>.\nEf skráin er sama myndin í upprunalegri stærð er ekki þörf á annari smámynd.",
        "file-thumbnail-no": "Skráin er líklega smámynd, því skráarnafnið byrjar á <strong>$1</strong>.\nEf skráin er í fullri upplausn haltu þá áfram að hlaða henni inn, en ef ekki breyttu þá skráarnafninu.",
        "fileexists-forbidden": "Skrá með þessu nafni er þegar til og ekki er hægt að skrifa yfir skránna.\nEf þú villt hlaða inn skránni þinni engu að síður, farðu þá til baka og veldu annað skráarnafn.\n[[File:$1|thumb|center|$1]]",
        "filename-bad-prefix": "Sráarnafnið lýsir ekki skránni, heldur var það búið til af myndavélinni, því það byrjar á '''\"$1\"'''.\nVeldu lýsandi nafn fyrir skránna og reyndu aftur.",
        "upload-success-subj": "Innhlaðning tókst",
        "upload-success-msg": "Upphlöðun frá [$2] tókst. Það er aðgengilegt hér: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Vandamál við upphleðslu skráarinnar",
+       "upload-failure-subj": "Vandamál við upphleðslu",
        "upload-failure-msg": "Upphlaðið frá [$2] mistókst:\n\n$1",
        "upload-warning-subj": "Aðvörun",
        "upload-warning-msg": "Upphal þitt [$2] mistókst. Þú getur farið aftur á [[Special:Upload/stash/$1|upphlaðsviðmótið]] og leiðrétt villuna.",
        "upload-proto-error": "Vitlaus samskiptaregla",
        "upload-proto-error-text": "Upphlöðun frá öðrum vefþjón þarfnast vefslóðar sem byrjar á <code>http://</code> eða <code>ftp://</code>.",
        "upload-file-error": "Innri villa",
-       "upload-file-error-text": "Innri villa: Gat ekki búið til tímabundna skrá á vefþjóni.\nVinsamlegast hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].",
+       "upload-file-error-text": "Innri villa: Gat ekki búið til bráðabirgðaskrá á vefþjóni.\nVinsamlegast hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].",
        "upload-misc-error": "Óþekkt innhleðsluvilla",
        "upload-misc-error-text": "Upphal þitt mistókst vegna óþekktrar villu.\nAthugaðu hvort vefslóðin sé rétt og aðgengileg og að því loknu reyndu aftur.\nEf vandamálið lagast ekki, hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].",
        "upload-too-many-redirects": "Vefslóðin inniheldur of margar tilvísanir.",
-       "upload-http-error": "HTTP villa kom upp við upphal skráarinnar: $1",
+       "upload-http-error": "HTTP villa kom upp: $1",
        "upload-copy-upload-invalid-domain": "Lokað er fyrir afritun skráa frá öðrum vefþjón á þessu vefsvæði.",
        "backend-fail-stream": "Gat ekki streymt skránni „$1“.",
-       "backend-fail-backup": "Öryggisafritun skráarinnar $1 mistókst.",
+       "backend-fail-backup": "Öryggisafritun skrárinnar $1 mistókst.",
        "backend-fail-notexists": "Skráin $1 er ekki til.",
        "backend-fail-hashes": "Gat ekki nálgast tætigildi skráanna til samanburðar.",
        "backend-fail-notsame": "Ólík skrá er þegar til á $1.",
        "backend-fail-invalidpath": "$1 er ekki gildur geymslustaður.",
        "backend-fail-delete": "Mistókst að eyða skránni $1.",
-       "backend-fail-describe": "Mistókst að breyta lýsisgögnum skráarinnar „$1“.",
+       "backend-fail-describe": "Mistókst að breyta lýsisgögnum skrárinnar „$1“.",
        "backend-fail-alreadyexists": "Skráin $1 er þegar til.",
        "backend-fail-store": "Mistókst að vista skrá $1 á $2.",
        "backend-fail-copy": "Mistókst að afrita skjal $1 á $2.",
        "backend-fail-move": "Mistókst að færa skrá $1 á $2.",
-       "backend-fail-opentemp": "Mistókst að opna tímabundna skrá.",
-       "backend-fail-writetemp": "Gat ekki skrifað í tímabundna skrá.",
+       "backend-fail-opentemp": "Mistókst að opna bráðabirgðaskrá.",
+       "backend-fail-writetemp": "Gat ekki skrifað í bráðabirgðaskrá.",
        "backend-fail-closetemp": "Mistókst að loka tímabundinni skrá.",
        "backend-fail-read": "Mistókst að lesa skrá $1.",
        "backend-fail-create": "Mistókst að skrifa skrá $1.",
        "backend-fail-synced": "Skráin $1 er í ósamkvæmu ástandi innan innri geymslubakenda",
        "backend-fail-connect": "Mistókst að tengjast gagnabankanum \"$1\".",
        "backend-fail-internal": "Óþekkt villa átti sér stað í gagnabankanum \"$1\".",
-       "backend-fail-contenttype": "Gat ekki ákvarðað innihaldgerð skráarinnar til geymslu á „$1“.",
+       "backend-fail-contenttype": "Gat ekki ákvarðað innihaldgerð skrárinnar til geymslu á „$1“.",
        "backend-fail-batchsize": "Geymslubakendinn fékk bunka af $1 {{PLURAL:$1|skráaraðgerð|skráaraðgerðum}}; mest eru leyfðar $2 {{PLURAL:$2|aðgerð|aðgerðir}}.",
        "backend-fail-usable": "Gat ekki lesið skrána „$1“ vegna ófullnægjandi aðgangsheimilda eða týndra mappa/íláta.",
        "filejournal-fail-dbconnect": "Gat ekki tengst dagbókargrunni fyrir geymslubakendann „$1“.",
        "lockmanager-fail-db-release": "Gat ekki opnað lása á gagnagrunninum $1.",
        "lockmanager-fail-svr-acquire": "Gat ekki nálgast lása á þjóninum $1.",
        "lockmanager-fail-svr-release": "Gat ekki opnað lása á þjóninum $1.",
-       "zip-file-open-error": "Mistök við opnun skráarinnar fyrir ZIP athuganir.",
+       "zip-file-open-error": "Mistök við opnun skrárinnar fyrir ZIP prófanir.",
        "zip-wrong-format": "Skráin var ekki ZIP skrá.",
-       "zip-bad": "Þessi ZIP skrá er skemmd eða ólesanleg.\nEkki var hægt að athuga öryggi skráarinnar almennilega.",
-       "zip-unsupported": "Þessi skrá er ZIP skrá sem notar möguleika sem eru ekki studdir af MediaWiki.\nEkki er hægt að athuga öryggi skráarinnar almennilega.",
+       "zip-bad": "Þessi ZIP skrá er skemmd eða ólesanleg.\nEkki var hægt að athuga öryggi skrárinnar almennilega.",
+       "zip-unsupported": "Þessi skrá er ZIP skrá sem notar möguleika sem eru ekki studdir af MediaWiki.\nEkki er hægt að athuga öryggi skrárinnar almennilega.",
        "uploadstash": "Óútgefnar skrár",
        "uploadstash-summary": "Þessi síða gefur aðgang að þeim skrám sem hafa verið hlaðið inn (eða eru í biðröð eftir því að vera hlaðið inn) en hafa ekki verið útgefnar. Þessar skrár eru eingöngu sýnilegar þeim notanda sem hlóð þeim inn.",
        "uploadstash-clear": "Tæma listann",
        "license-nopreview": "(Forskoðun ekki fáanleg)",
        "upload_source_url": "(þín valda skrá frá gildri, aðgengilegri vefslóð)",
        "upload_source_file": "(þín valda skrá frá tölvunni þinni)",
+       "listfiles-delete": "eyða",
        "listfiles-summary": "Þessi kerfissíða sýnir allar upphlaðnar skrár.",
        "listfiles_search_for": "Leita að miðilsnafni:",
        "imgfile": "skrá",
        "sharedupload": "Skrá þessi er af $1, og deilt meðal annarra verkefna og nýtist því þar.",
        "sharedupload-desc-there": "Skrá þessi er af $1, og deilt meðal annarra verkefna og nýtist því þar.\nGjörðu svo vel og sjáðu [$2 skráarsíðuna þar] fyrir fleiri upplýsingar.",
        "sharedupload-desc-here": "Skrá þessi er af $1, og deilt meðal annarra verkefna og nýtist því þar.\nHér fyrir neðan er afrit af [$2 skráarsíðunni þar].",
-       "sharedupload-desc-edit": "Þessi skrá er af $1 og gæti verið í notkun á öðrum vefkefnum.\nHentugra væri ef þú gætir breytt lýsingu skráarinnar á [$2 myndasíðu] hennar þar.",
-       "sharedupload-desc-create": "Ã\9eessi skrá er af $1 og gæti verið Ã­ notkun Ã¡ Ã¶Ã°rum vefkefnum.\nHentugra væri ef Ã¾Ãº gætir breytt lýsingu skráarinnar á [$2 myndasíðu] hennar þar.",
+       "sharedupload-desc-edit": "Þessi skrá er af $1 og gæti verið í notkun á öðrum vefkefnum.\nHentugra væri ef þú gætir breytt lýsingu skrárinnar á [$2 myndasíðu] hennar þar.",
+       "sharedupload-desc-create": "Ã\9eessi skrá er af $1 og gæti verið Ã­ notkun Ã­ Ã¶Ã°rum verkefnum.\nHentugra væri ef Ã¾Ãº gætir breytt lýsingu skrárinnar á [$2 myndasíðu] hennar þar.",
        "filepage-nofile": "Engin skrá er til með þessu nafni.",
        "filepage-nofile-link": "Engin skrá er til með þessu nafni, en þú getur [$1 hlaðið henni inn].",
        "uploadnewversion-linktext": "Hlaða inn nýrri útgáfu af þessari skrá",
        "randomincategory": "Handhófsvalin síða í flokki",
        "randomincategory-invalidcategory": "„$1“ er ekki gilt flokkarheiti",
        "randomincategory-nopages": "Það eru engar síður í flokkinum [[:Category:$1|$1]].",
+       "randomincategory-category": "Flokkur:",
+       "randomincategory-legend": "Handhófsvalin síða í flokki",
        "randomredirect": "Handahófsvalin tilvísun",
        "randomredirect-nopages": "Það eru engar tilvísanir í nafnrýminu „$1“.",
        "statistics": "Tölfræði",
        "delete-toobig": "Þessi síða hefur stóra breytingarskrá, yfir $1 {{PLURAL:$1|breyting|breytingar}}.\nÓheimilt er að eyða slíkum síðum til að valda ekki óæskilegum truflunum á {{SITENAME}}.",
        "delete-warning-toobig": "Þessi síða hefur stóra breytingarskrá, yfir $1 {{PLURAL:$1|breyting|breytingar}}.\nEyðing síðunnar gæti truflað vinnslu gangnasafns {{SITENAME}}; haltu áfram með varúð.",
        "rollback": "Taka aftur breytingar",
-       "rollback_short": "Taka aftur",
        "rollbacklink": "taka aftur",
        "rollbacklinkcount": "taka aftur $1 {{PLURAL:$1|breytingu|breytingar}}",
        "rollbacklinkcount-morethan": "taka aftur fleiri en $1 {{PLURAL:$1|breytingu|breytingar}}",
        "undelete-missing-filearchive": "Mistókst að endurvekja skjalasafn með auðkenninu $1 því það er ekki til í gagnabankanum.\nMögulega er þegar búið að endurvekja það.",
        "undelete-error": "Mistókst að endurvekja síðu.",
        "undelete-error-short": "Villa við endurvakningu skráar: $1",
-       "undelete-error-long": "Það kom upp villa við endurvakningu skráarinnar:\n\n$1",
+       "undelete-error-long": "Það kom upp villa við endurvakningu skrárinnar:\n\n$1",
        "undelete-show-file-confirm": "Ertu viss um að þú viljir sjá eydda breytingu af skránni \"<nowiki>$1</nowiki>\" frá $2 $3?",
        "undelete-show-file-submit": "Já",
        "namespace": "Nafnrými:",
        "thumbnail_error_remote": "Villumelding frá $1:\n$2",
        "djvu_page_error": "DjVu-blaðsíða er utan marka",
        "djvu_no_xml": "Mistókst að sækja XML-gögn fyrir DjVu skrá",
-       "thumbnail-temp-create": "Mistókst að búa til tímabundna smámynd.",
+       "thumbnail-temp-create": "Mistókst að búa til bráðabirgða-smámyndaskrá",
        "thumbnail-dest-create": "Gat ekki vistað smámynd á markstað",
        "thumbnail_invalid_params": "Breytur smámyndarinnar eru rangar",
        "thumbnail_dest_directory": "Mistókst að búa til niðurhals möppu",
        "importsuccess": "Innflutningi lokið!",
        "importnosources": "Engin uppspretta hefur verið valin og bein upphlöð breytingarskráa eru óvirk.",
        "importnofile": "Engri skrá var hlaðið inn.",
-       "importuploaderrorsize": "Upphlöðun skráarinnar mistókst.\nSkráin er stærri en hámarsstærð síðna segir til um.",
-       "importuploaderrorpartial": "Upphlöðun skráarinnar mistókst.\nSkráinni var eingöngu að hluta til hlaðið inn.",
-       "importuploaderrortemp": "Upphlöðun skráarinnar mistókst.\nTímabundin mappa fannst ekki.",
+       "importuploaderrorsize": "Upphleðsla skrárinnar mistókst.\nSkráin er stærri en leyfð hámarksstærð.",
+       "importuploaderrorpartial": "Upphleðsla skráarinnar mistókst.\nSkráinni var eingöngu hlaðið inn að hluta.",
+       "importuploaderrortemp": "Upphleðsla skrárinnar mistókst.\nBráðabirgðamappa fannst ekki.",
        "import-parse-failure": "Þáttunarvilla við innflutning XML skjals",
        "import-noarticle": "Engin síða til innflutnings!",
        "import-nonewrevisions": "Engar breytingar voru fluttar inn (þær voru allar annaðhvort þegar til eða sleppt vegna villna).",
        "import-rootpage-nosubpage": "Nafnrými „$1“ móðursíðunnar leyfir ekki undirsíður.",
        "importlogpage": "Innflutningsskrá",
        "importlogpagetext": "Hér er listi yfir innflutninga möppdýra á síðum ásamt breytingarskránni frá öðrum wiki.",
-       "import-logentry-upload": "flutti inn [[$1]] frá skrá",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|breyting flutt|breytingar fluttar}} inn",
-       "import-logentry-interwiki": "flutti inn $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|breyting flutt|breytingar fluttar}} inn frá $2",
        "javascripttest": "JavaScript prófun",
-       "javascripttest-title": "Keyri $1 prófun",
        "javascripttest-pagetext-noframework": "Þessi síða er frátekin fyrir JavaScript prófanir.",
        "javascripttest-pagetext-unknownframework": "Óþekktur prófunarrammi „$1“.",
        "javascripttest-pagetext-frameworks": "Veldu einn eftirtalinna prófunarramma: $1",
        "tooltip-recreate": "Endurvekja síðuna þó henni hafi verið eytt",
        "tooltip-upload": "Hefja innhleðslu",
        "tooltip-rollback": "\"taka aftur\" breytir greininni til síðasta höfundar með einum smelli",
-       "tooltip-undo": "\"Tek aftur þessa breytingu\" breytir aftur til síðustu breytingu og opnar breytinguna í forskoðun. Hægt er að bæta við ástæðu í breytingarávarpinu.",
+       "tooltip-undo": "„Afturkalla þessa breytingu“ breytir aftur til síðustu breytingu og opnar breytinguna í forskoðun. Hægt er að bæta við ástæðu í breytingarávarpinu.",
        "tooltip-preferences-save": "Vista stillingar",
        "tooltip-summary": "Bættu við stuttu ágripi",
        "common.css": "/* Allt CSS sem sett er hér mun virka á öllum þemum. */",
        "log-show-hide-patrol": "$1 Listi yfir vaktaðar síður",
        "deletedrevision": "Eyddi gamla útgáfu $1",
        "filedeleteerror-short": "Villa við eyðingu: $1",
-       "filedeleteerror-long": "Það kom upp villa við eyðingu skráarinnar: $1",
+       "filedeleteerror-long": "Það kom upp villa við eyðingu skrárinnar: $1",
        "filedelete-missing": "Skránni „$1“ er ekki hægt að eyða vegna þess að hún er ekki til.",
        "filedelete-old-unregistered": "Tilgreind útgáfa \"$1\" er ekki til í gagnabankanum.",
        "filedelete-current-unregistered": "Tilgreind skrá \"$1\" er ekki til í gagnabankanum.",
        "version-mediahandlers": "Rekill margmiðlunarskráa",
        "version-parser-extensiontags": "Þáttuð smáforrita tög",
        "version-hook-subscribedby": "Í áskrift af",
-       "version-version": "(Útgáfa $1)",
+       "version-version": "($1)",
        "version-license": "MediaWiki leyfi",
        "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",
        "tags": "Breyta virkum tögum",
        "tag-filter": "[[Special:Tags|Tag]] sía:",
        "tag-filter-submit": "Sía",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tög}}]]: $2)",
        "tags-title": "Tög",
        "tags-intro": "Á þ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",
        "htmlform-int-toohigh": "Gildið sem þú tilgreindir er stærra en hámarkið $1",
        "htmlform-required": "Þú þarft að fylla út þetta gildi.",
        "htmlform-submit": "Senda",
-       "htmlform-reset": "Taka aftur breytingu",
+       "htmlform-reset": "Afturkalla breytingar",
        "htmlform-selectorother-other": "Annað",
        "htmlform-no": "Nei",
        "htmlform-yes": "Já",
        "revdelete-uname-unhid": "notandanafn birt",
        "revdelete-restricted": "hömlur settar á stjórnendur",
        "revdelete-unrestricted": "fjarlægja hömlur á stjórnendur",
+       "logentry-suppress-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}}, rennur út eftir $5 $6",
        "logentry-move-move": "$1 {{GENDER:$2|færði}} $3 á $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|færði}} $3 á $4 án þess að skilja eftir tilvísun",
        "logentry-move-move_redir": "$1 {{GENDER:$2|færði}} $3 á $4 yfir tilvísun",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|hlóð inn}} nýrri útgáfu af $3",
        "rightsnone": "(engum)",
        "revdelete-summary": "breytingarágrip",
+       "feedback-adding": "Bæti við svörun á síðuna...",
+       "feedback-bugcheck": "Frábært! Athugaðu hvort þessi villa hafi verið [$1 tilkynnt áður].",
+       "feedback-bugnew": "Ég athugaði það. Tilkynna nýja villu.",
        "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-subject": "Fyrirsögn:",
-       "feedback-message": "Skilaboð:",
        "feedback-cancel": "Hætta við",
-       "feedback-submit": "Senda svörun",
-       "feedback-adding": "Bæti við svörun á síðuna...",
+       "feedback-close": "Búið",
        "feedback-error1": "Villa: Óþekkt útkoma frá API",
        "feedback-error2": "Villa: Breytingin mistókst",
        "feedback-error3": "Villa: Ekkert svar frá API",
+       "feedback-message": "Skilaboð:",
+       "feedback-subject": "Fyrirsögn:",
+       "feedback-submit": "Senda",
        "feedback-thanks": "Takk! Ábendingu þinni hefur verið bætt við á síðuna \"[$2 $1]\".",
-       "feedback-close": "Búið",
-       "feedback-bugcheck": "Frábært! Athugaðu hvort þessi villa hafi verið [$1 tilkynnt áður].",
-       "feedback-bugnew": "Ég athugaði það. Tilkynna nýja villu.",
        "searchsuggest-search": "Leita",
        "searchsuggest-containing": "sem innihalda ...",
        "api-error-badaccess-groups": "Þú hefur ekki leyfi til að hlaða inn skrám.",
        "api-error-nomodule": "Innri villa: Engin upphlaðs eining valin.",
        "api-error-ok-but-empty": "Innri villa: ekkert svar frá vefþjón.",
        "api-error-overwrite": "Óheimilt er að skrifa yfir skrá sem er þegar til.",
-       "api-error-stashfailed": "Innri villa: Vefþjónninn gat ekki geymt tímabundna skrá.",
+       "api-error-stashfailed": "Innri villa: Vefþjónninn gat ekki geymt bráðabirgðaskrá.",
        "api-error-publishfailed": "Innri villa: Vefþjónninn gat ekki gefið út bráðabirgðaskrá.",
        "api-error-timeout": "Vefþjónninn svaraði ekki á tilætluðum tíma.",
        "api-error-unclassified": "Óþekkt villa kom upp.",
        "json-error-state-mismatch": "Ógild eða ranglega uppsett JSON",
        "json-error-syntax": "málfræði villa",
        "json-error-utf8": "Gallaðir UTF-8 stafir, líklega vitlaust kótaðir",
-       "json-error-unsupported-type": "Gildi af gerð sem ekki er hægt að kóta var gefin."
+       "json-error-unsupported-type": "Gildi af gerð sem ekki er hægt að kóta var gefin.",
+       "special-characters-group-latin": "Latneskt",
+       "special-characters-group-latinextended": "Aukið latneskt",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Tákn",
+       "special-characters-group-greek": "Grískt",
+       "special-characters-group-cyrillic": "Kýrillískt",
+       "special-characters-group-arabic": "Arabískt",
+       "special-characters-group-arabicextended": "Aukið arabískt",
+       "special-characters-group-persian": "Persneskt",
+       "special-characters-group-hebrew": "Hebreskt",
+       "special-characters-group-bangla": "Bengalskt",
+       "special-characters-group-tamil": "Tamílska",
+       "special-characters-group-telugu": "Telúgú",
+       "special-characters-group-sinhala": "Sinhalskt",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Taílenskt",
+       "special-characters-group-lao": "Laoskt"
 }
index aa6e60b..12482b7 100644 (file)
                        "Elitre",
                        "Laurentius",
                        "Macofe",
-                       "Ricordisamoa"
+                       "Ricordisamoa",
+                       "Horcrux92",
+                       "Toadino2",
+                       "Purodha",
+                       "TecnoMaster"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "categorypage": "Visualizza la categoria",
        "viewtalkpage": "Visualizza la pagina di discussione",
        "otherlanguages": "In altre lingue",
-       "redirectedfrom": "(Reindirizzamento da '''$1''')",
+       "redirectedfrom": "(Reindirizzamento da <strong>$1</strong>)",
        "redirectpagesub": "Pagina di reindirizzamento",
        "redirectto": "Reindirizza a:",
        "lastmodifiedat": "Questa pagina è stata modificata per l'ultima volta il $1 alle $2.",
        "disclaimers": "Avvertenze",
        "disclaimerpage": "Project:Avvertenze generali",
        "edithelp": "Guida",
+       "helppage-top-gethelp": "Aiuto",
        "mainpage": "Pagina principale",
        "mainpage-description": "Pagina principale",
        "policy-url": "Project:Policy",
        "readonly_lag": "Il database è stato bloccato automaticamente per consentire ai server con i database slave di sincronizzarsi con il master",
        "internalerror": "Errore interno",
        "internalerror_info": "Errore interno: $1",
+       "internalerror-fatal-exception": "Errore irreversibile di tipo \"$1\"",
        "filecopyerror": "Impossibile copiare il file \"$1\" in \"$2\".",
        "filerenameerror": "Impossibile rinominare il file \"$1\" in \"$2\".",
        "filedeleteerror": "Impossibile cancellare il file \"$1\".",
        "cannotdelete": "Non è stato possibile cancellare la pagina o il file \"$1\".\nPotrebbe essere stato già cancellato da qualcun altro.",
        "cannotdelete-title": "Impossibile cancellare la pagina \"$1\"",
        "delete-hook-aborted": "La cancellazione è stata annullata dall'hook.\nNon è stata restituita alcuna spiegazione.",
-       "no-null-revision": "Non può essere creata una versione nulla per la pagina \"$1\"",
+       "no-null-revision": "Non è stato possibile creare una versione nulla per la pagina \"$1\"",
        "badtitle": "Titolo non corretto",
        "badtitletext": "Il titolo della pagina richiesta è vuoto, errato oppure deriva da un errore nei collegamenti interlingua o interwiki.\nPotrebbe inoltre contenere uno o più caratteri il cui uso non è ammesso nei titoli.",
        "perfcached": "I dati che seguono sono estratti da una copia ''cache'' del database, e potrebbero non essere aggiornati. Un massimo di {{PLURAL:$1|un risultato è disponibile|$1 risultati sono disponibili}} in cache.",
        "mycustomjsprotected": "Non si dispone dei permessi necessari per modificare questa pagina JavaScript.",
        "myprivateinfoprotected": "Non si dispone dei permessi necessari per modificare i propri dati personali.",
        "mypreferencesprotected": "Non si dispone dei permessi necessari per modificare le proprie preferenze.",
-       "ns-specialprotected": "Non è possibile modificare le pagine speciali.",
+       "ns-specialprotected": "Le pagine speciali non possono essere modificate.",
        "titleprotected": "La creazione di una pagina con questo titolo è stata bloccata da [[User:$1|$1]].\nLa motivazione è la seguente: ''$2''.",
        "filereadonlyerror": "Non è stato possibile modificare il file \"$1\" poiché il repository di file \"$2\" è in modalità di sola lettura.\n\nL'amministratore che lo ha bloccato ha fornito questa motivazione: \"$3\".",
        "invalidtitle-knownnamespace": "Titolo non valido con namespace \"$2\" e testo \"$3\"",
        "wrongpassword": "La password inserita non è corretta. Riprovare.",
        "wrongpasswordempty": "Non è stata inserita alcuna password. Riprovare.",
        "passwordtooshort": "Le password devono contenere almeno {{PLURAL:$1|1 carattere|$1 caratteri}}.",
+       "passwordtoolong": "La password non può contenere più di {{PLURAL:$1|1 carattere|$1 caratteri}}.",
        "password-name-match": "La password deve essere diversa dal nome utente.",
        "password-login-forbidden": "L'uso di questo nome utente e password è stato proibito.",
        "mailmypassword": "Reimposta password",
        "missingcommentheader": "'''Attenzione:''' non è stata specificato l'oggetto/l'intestazione di questo commento. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata senza intestazione.",
        "summary-preview": "Anteprima dell'oggetto:",
        "subject-preview": "Anteprima oggetto/intestazione:",
+       "previewerrortext": "C'è stato un errore mentre si è cercato di mostrare l'anteprima.",
        "blockedtitle": "Utente bloccato.",
        "blockedtext": "'''Il tuo nome utente o indirizzo IP è stato bloccato.'''\n\nIl blocco è stato imposto da $1. La motivazione del blocco è la seguente: ''$2''\n\n* Inizio del blocco: $8\n* Scadenza del blocco: $6\n* Intervallo di blocco: $7\n\nSe lo si desidera, è possibile contattare $1 o un altro [[{{MediaWiki:Grouppage-sysop}}|amministratore]] per discutere del blocco.\n\nSi noti che la funzione 'Scrivi all'utente' non è attiva se non è stato registrato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]] o se l'utilizzo di tale funzione è stato bloccato.\n\nL'indirizzo IP attuale è $3, il numero ID del blocco è #$5.\nSi prega di specificare tutti i dettagli precedenti in qualsiasi richiesta di chiarimenti.",
        "autoblockedtext": "Questo indirizzo IP è stato bloccato automaticamente perché condiviso con un altro utente, a sua volta bloccato da $1.\nLa motivazione del blocco è la seguente:\n\n:''$2''\n\n* Inizio del blocco: $8\n* Scadenza del blocco: $6\n* Intervallo di blocco: $7\n\nÈ possibile contattare $1 o un altro [[{{MediaWiki:Grouppage-sysop}}|amministratore]] per richiedere eventuali chiarimenti circa il blocco.\n\nSi noti che la funzione 'Scrivi all'utente' non è attiva se non è stato registrato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]] e, comunque, se nell'applicare il blocco, tale funzione è stata disabilitata (per la durata del blocco).\n\nL'indirizzo IP attuale è $3, il numero ID del blocco è #$5\nSi prega di specificare tutti i dettagli qui inclusi nel compilare qualsiasi richiesta di chiarimenti.",
        "nosuchsectiontitle": "Impossibile trovare la sezione",
        "nosuchsectiontext": "Si è tentato di modificare una sezione inesistente.\nPotrebbe essere stata spostata o eliminata mentre si stava visionando la pagina.",
        "loginreqtitle": "Accesso richiesto",
-       "loginreqlink": "eseguire l'accesso",
+       "loginreqlink": "effettuare l'accesso",
        "loginreqpagetext": "Per vedere altre pagine è necessario $1.",
        "accmailtitle": "Password inviata.",
        "accmailtext": "Una password generata casualmente per [[User talk:$1|$1]] è stata inviata a $2. Questa password può essere modificata nella pagina per ''[[Special:ChangePassword|cambiare la password]]'' subito dopo l'accesso.",
        "newarticle": "(Nuovo)",
-       "newarticletext": "Il collegamento appena seguito corrisponde ad una pagina non ancora esistente.\nSe vuoi creare la pagina ora, basta cominciare a scrivere il testo nella casella qui sotto (vedi la [$1 pagina di aiuto] per maggiori informazioni).\nSe il collegamento è stato aperto per errore, è sufficiente fare clic sul pulsante '''Indietro''' del proprio browser.",
+       "newarticletext": "Il collegamento appena seguito corrisponde ad una pagina non ancora esistente.\nSe vuoi creare la pagina ora, basta cominciare a scrivere il testo nella casella qui sotto (vedi la [$1 pagina di aiuto] per maggiori informazioni).\nSe il collegamento è stato aperto per errore, è sufficiente fare clic sul pulsante <strong>Indietro</strong> del proprio browser.",
        "anontalkpagetext": "----\n''Questa è la pagina di discussione di un utente anonimo, che non ha ancora creato un'utenza o comunque non la sta usando. Per identificarlo è quindi necessario usare il numero del suo indirizzo IP. Gli indirizzi IP possono però essere condivisi da più utenti. Se sei un utente anonimo e ritieni che i commenti presenti in questa pagina non si riferiscano a te, [[Special:UserLogin/signup|crea una nuova utenza]] o [[Special:UserLogin|entra con quella che già hai]] per evitare di essere confuso con altri utenti anonimi in futuro.''",
        "noarticletext": "In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati] oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificare la pagina ora]</span>.",
        "noarticletext-nopermission": "In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati]</span>, ma non hai i permessi per creare questa pagina.",
        "userpage-userdoesnotexist": "L'account \"$1\" non corrisponde a un utente registrato.\nVerificare che si intenda davvero creare o modificare questa pagina.",
        "userpage-userdoesnotexist-view": "L'account utente \"$1\" non è registrato.",
        "blocked-notice-logextract": "Questo utente è attualmente bloccato.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:",
-       "clearyourcache": "'''Nota:''' dopo aver salvato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti. \n*'''Firefox / Safari''': tenere premuto il tasto delle maiuscole e fare clic su ''Ricarica'', oppure premere ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' su Mac)\n*'''Google Chrome''': premere ''Ctrl-Shift-R'' (''⌘-Shift-R'' su un Mac)\n*'''Internet Explorer''': tenere premuto il tasto ''Ctrl'' mentre si fa clic su ''Refresh'', oppure premere ''Ctrl-F5''\n*'''Opera''': svuotare completamente la cache dal menu ''Strumenti → Preferenze''",
+       "clearyourcache": "<strong>Nota:</strong> dopo aver salvato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti. \n*<strong>Firefox / Safari:</strong> tenere premuto il tasto delle maiuscole <em>Shift</em> e fare clic su <em>Ricarica</em>, oppure premere <em>Ctrl-F5</em> o <em>Ctrl-R</em> (<em>⌘-R</em> su Mac)\n*<strong>Google Chrome:</strong> premere <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> su un Mac)\n*<strong>Internet Explorer:</strong> tenere premuto il tasto <em>Ctrl</em> e fare clic su <em>Aggiorna</em>, oppure premere <em>Ctrl-F5</em>\n*<strong>Opera:</strong> svuotare completamente la cache dal menu <em>Strumenti → Preferenze</em>",
        "usercssyoucanpreview": "'''Suggerimento:''' usa il pulsante 'Visualizza anteprima' per provare il tuo nuovo CSS prima di salvarlo.",
        "userjsyoucanpreview": "'''Suggerimento:''' usa il pulsante 'Visualizza anteprima' per provare il tuo nuovo JavaScript prima di salvarlo.",
        "usercsspreview": "'''Questa è solo un'anteprima del proprio CSS personale. Le modifiche non sono ancora state salvate!'''",
        "cantcreateaccounttitle": "Impossibile registrare un utente",
        "cantcreateaccount-text": "La registrazione è stata bloccata da [[User:$3|$3]] per questo indirizzo IP ('''$1''').\n\nLa motivazione del blocco fornita da $3 è la seguente: ''$2''",
        "cantcreateaccount-range-text": "La registrazione da indirizzi IP nell'intervallo '''$1''', che include il tuo ('''$4'''), è stata bloccata da [[User:$3|$3]].\n\nLa motivazione fornita da $3 è ''$2''",
-       "viewpagelogs": "Visualizza i log relativi a questa pagina.",
+       "viewpagelogs": "Visualizza i registri relativi a questa pagina",
        "nohistory": "Cronologia delle versioni di questa pagina non reperibile.",
        "currentrev": "Versione attuale",
        "currentrev-asof": "Versione attuale delle $1",
        "notextmatches": "Nessuna corrispondenza nel testo delle pagine",
        "prevn": "{{PLURAL:$1|precedente|precedenti $1}}",
        "nextn": "{{PLURAL:$1|successivo|successivi $1}}",
+       "prev-page": "pagina precedente",
+       "next-page": "pagina successiva",
        "prevn-title": "{{PLURAL:$1|Risultato precedente|$1 risultati precedenti}}",
        "nextn-title": "{{PLURAL:$1|Risultato successivo|$1 risultati successivi}}",
        "shown-title": "Mostra {{PLURAL:$1|un risultato|$1 risultati}} per pagina",
        "preferences": "Preferenze",
        "mypreferences": "preferenze",
        "prefs-edits": "Modifiche effettuate:",
-       "prefsnologintext2": "Per modificare le tue preferenze è necessario eseguire l'accesso.",
+       "prefsnologintext2": "Per modificare le tue preferenze è necessario effettuare l'accesso.",
        "prefs-skin": "Aspetto grafico (skin)",
        "skin-preview": "Anteprima",
        "datedefault": "Nessuna preferenza",
        "prefs-rc": "Ultime modifiche",
        "prefs-watchlist": "Osservati speciali",
        "prefs-editwatchlist": "Modifica osservati speciali",
-       "prefs-editwatchlist-label": "Modifica le voci sulla tua watchlist:",
+       "prefs-editwatchlist-label": "Modifica le pagine della tua watchlist:",
        "prefs-editwatchlist-edit": "Visualizza e rimuovi titoli sulla tua watchlist",
        "prefs-editwatchlist-raw": "Modifica la lista in formato testo",
        "prefs-editwatchlist-clear": "Cancella la tua watchlist",
        "number_of_watching_users_pageview": "[osservata da {{PLURAL:$1|un utente|$1 utenti}}]",
        "rc_categories": "Limita alle categorie (separate da \"|\")",
        "rc_categories_any": "Qualsiasi",
-       "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} dopo la modifica",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte}} dopo la modifica",
        "newsectionsummary": "/* $1 */ nuova sezione",
        "rc-enhanced-expand": "Mostra dettagli",
        "rc-enhanced-hide": "Nascondi dettagli",
        "recentchangeslinked-feed": "Modifiche correlate",
        "recentchangeslinked-toolbox": "Modifiche correlate",
        "recentchangeslinked-title": "Modifiche correlate a \"$1\"",
-       "recentchangeslinked-summary": "Questa pagina speciale mostra le modifiche più recenti alle pagine collegate da quella specificata (o contenute nella categoria specificata).\nLe pagine contenute nella propria lista degli [[Special:Watchlist|Osservati speciali]] sono evidenziate in '''grassetto'''.",
+       "recentchangeslinked-summary": "Questa pagina speciale mostra le modifiche più recenti alle pagine collegate da quella specificata (o contenute nella categoria specificata).\nLe pagine contenute nella propria lista degli [[Special:Watchlist|Osservati speciali]] sono evidenziate in <strong>grassetto</strong>.",
        "recentchangeslinked-page": "Nome della pagina:",
        "recentchangeslinked-to": "Mostra solo le modifiche alle pagine collegate a quella specificata",
        "upload": "Carica un file",
        "filehist-filesize": "Dimensione del file",
        "filehist-comment": "Commento",
        "imagelinks": "Utilizzo del file",
-       "linkstoimage": "{{PLURAL:$1|La seguente pagina contiene|Le seguenti $1 pagine contengono}} collegamenti al file:",
+       "linkstoimage": "{{PLURAL:$1|La seguente pagina contiene|Le seguenti $1 pagine contengono}} collegamenti a questo file:",
        "linkstoimage-more": "Più di $1 {{PLURAL:$1|pagina punta|pagine puntano}} a questo file.\nDi seguito sono elencate solo {{PLURAL:$1|la prima pagina che punta|le prime $1 pagine che puntano}} a questo file.\nÈ disponibile un [[Special:WhatLinksHere/$2|elenco completo]].",
        "nolinkstoimage": "Nessuna pagina contiene collegamenti al file.",
        "morelinkstoimage": "Visualizza [[Special:WhatLinksHere/$1|altri link]] a questo file.",
        "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-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]].",
        "whatlinkshere": "Puntano qui",
        "whatlinkshere-title": "Pagine che puntano a \"$1\"",
        "whatlinkshere-page": "Pagina:",
-       "linkshere": "Le seguenti pagine contengono dei collegamenti a '''[[:$1]]''':",
+       "linkshere": "Le seguenti pagine contengono dei collegamenti a <strong>[[:$1]]</strong>:",
        "nolinkshere": "Nessuna pagina contiene collegamenti che puntano a '''[[:$1]]'''.",
        "nolinkshere-ns": "Non vi sono pagine che puntano a '''[[:$1]]''' nel namespace selezionato.",
        "isredirect": "redirect",
        "istemplate": "inclusione",
-       "isimage": "collegamento a file",
+       "isimage": "collegamento al file",
        "whatlinkshere-prev": "{{PLURAL:$1|precedente|precedenti $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|successivo|successivi $1}}",
        "whatlinkshere-links": "← collegamenti",
        "thumbnail_image-missing": "Sembra essere mancante il file: $1",
        "thumbnail_image-failure-limit": "Ci sono stati recentemente troppi tentativi falliti ($1 o più) di generare questa miniatura. Riprova più tardi.",
        "import": "Importa pagine",
-       "importinterwiki": "Importazione transwiki",
-       "import-interwiki-text": "Selezionare un progetto wiki e il titolo della pagina da importare.\nLe date di pubblicazione e i nomi degli autori delle varie versioni saranno conservati.\nTutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log/import|log di importazione]].",
+       "importinterwiki": "Importazione da un altro wiki",
+       "import-interwiki-text": "Selezionare un progetto wiki e il titolo della pagina da importare.\nLe date di pubblicazione e i nomi degli autori delle varie versioni saranno conservati.\nTutte le operazioni di importazione da altri wiki sono registrate nel [[Special:Log/import|registro di importazione]].",
        "import-interwiki-sourcewiki": "Wiki di origine:",
        "import-interwiki-sourcepage": "Pagina di origine:",
        "import-interwiki-history": "Copia l'intera cronologia di questa pagina",
        "importcantopen": "Impossibile aprire il file di importazione",
        "importbadinterwiki": "Collegamento inter-wiki errato",
        "importsuccess": "Importazione riuscita.",
-       "importnosources": "Non è stata definita una fonte per l'importazione transwiki; l'importazione diretta della cronologia non è attiva.",
+       "importnosources": "Non è stata definita una fonte per l'importazione da un altro wiki e l'importazione diretta della cronologia non è attiva.",
        "importnofile": "Non è stato caricato nessun file per l'importazione.",
        "importuploaderrorsize": "Caricamento del file per l'importazione non riuscito. Il file supera le dimensioni massime consentite per l'upload.",
        "importuploaderrorpartial": "Caricamento del file per l'importazione non riuscito. Il file è stato caricato solo in parte.",
        "import-rootpage-nosubpage": "Il namespace \"$1\" della pagina principale non permette di avere sottopagine.",
        "importlogpage": "Importazioni",
        "importlogpagetext": "Di seguito sono elencate le importazioni di pagine provenienti da altre wiki, complete di cronologia.",
-       "import-logentry-upload": "ha importato [[$1]] tramite upload",
        "import-logentry-upload-detail": "{{PLURAL:$1|una versione importata|$1 versioni importate}}",
-       "import-logentry-interwiki": "ha trasferito da altra wiki la pagina $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|una versione importata|$1 versioni importate}} da $2",
        "javascripttest": "Sperimentazione JavaScript",
        "javascripttest-pagetext-noframework": "Questa pagina è riservata all'esecuzione di test di JavaScript.",
        "tooltip-pt-anonuserpage": "La pagina utente di questo indirizzo IP",
        "tooltip-pt-mytalk": "La tua pagina di discussione",
        "tooltip-pt-anontalk": "Discussioni sulle modifiche fatte da questo indirizzo IP",
-       "tooltip-pt-preferences": "Le mie preferenze",
+       "tooltip-pt-preferences": "Le tue preferenze",
        "tooltip-pt-watchlist": "La lista delle pagine che stai tenendo sotto osservazione",
-       "tooltip-pt-mycontris": "Elenco dei tuoi contributi",
-       "tooltip-pt-login": "La registrazione è consigliata, anche se non obbligatoria",
+       "tooltip-pt-mycontris": "La lista dei tuoi contributi",
+       "tooltip-pt-login": "Si consiglia di effettuare l'accesso, anche se non è obbligatorio",
        "tooltip-pt-logout": "Uscita (logout)",
-       "tooltip-pt-createaccount": "Siete incoraggiati a creare un'utenza ed accedere; tuttavia, non è obbligatorio",
+       "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-addsection": "Inizia una nuova sezione",
        "tooltip-t-recentchangeslinked": "Elenco delle ultime modifiche alle pagine collegate a questa",
        "tooltip-feed-rss": "Feed RSS per questa pagina",
        "tooltip-feed-atom": "Feed Atom per questa pagina",
-       "tooltip-t-contributions": "Lista dei contributi di questo utente",
+       "tooltip-t-contributions": "Elenco dei contributi di questo utente",
        "tooltip-t-emailuser": "Invia un messaggio email a questo utente",
        "tooltip-t-info": "Ulteriori informazioni su questa pagina",
        "tooltip-t-upload": "Carica file multimediali",
-       "tooltip-t-specialpages": "Lista di tutte le pagine speciali",
+       "tooltip-t-specialpages": "Elenco di tutte le pagine speciali",
        "tooltip-t-print": "Versione stampabile di questa pagina",
        "tooltip-t-permalink": "Collegamento permanente a questa versione della pagina",
        "tooltip-ca-nstab-main": "Vedi la voce",
        "spam_reverting": "Ripristinata l'ultima versione priva di collegamenti a $1",
        "spam_blanking": "Pagina svuotata, tutte le versioni contenevano collegamenti a $1",
        "spam_deleting": "Pagina cancellata, tutte le versioni contenevano collegamenti a $1",
-       "simpleantispam-label": "Controllo anti-spam.\n'''NON''' riempire!",
+       "simpleantispam-label": "Controllo anti-spam.\n<strong>NON</strong> compilare!",
        "pageinfo-title": "Informazioni per \"$1\"",
        "pageinfo-not-current": "Spiacente, ma è impossibile fornire quest'informazione per vecchie versioni.",
        "pageinfo-header-basic": "Informazioni di base",
        "watchlistedit-normal-explain": "Di seguito sono elencate tutte le pagine osservate.\nPer rimuovere una o più pagine dalla lista, selezionare le caselle relative e fare clic sul pulsante \"{{int:Watchlistedit-normal-submit}}\" in fondo all'elenco.\nSi noti che è anche possibile [[Special:EditWatchlist/raw|modificare la lista in formato testuale]].",
        "watchlistedit-normal-submit": "Elimina pagine",
        "watchlistedit-normal-done": "Dalla lista degli osservati speciali {{PLURAL:$1|è stata eliminata una pagina|sono state eliminate $1 pagine}}:",
-       "watchlistedit-raw-title": "Modifica degli osservati speciali in forma testuale",
-       "watchlistedit-raw-legend": "Modifica testuale osservati speciali",
+       "watchlistedit-raw-title": "Modifica degli osservati speciali in formato testo",
+       "watchlistedit-raw-legend": "Modifica la lista in formato testo",
        "watchlistedit-raw-explain": "Di seguito sono elencate tutte le pagine osservate. Per modificare la lista aggiungere o rimuovere i rispettivi titoli, uno per riga.\nUna volta terminato, fare clic su \"{{int:Watchlistedit-raw-submit}}\" in fondo all'elenco.\nSi noti che è anche possibile [[Special:EditWatchlist|modificare la lista con l'interfaccia standard]].",
        "watchlistedit-raw-titles": "Titoli:",
        "watchlistedit-raw-submit": "Aggiorna la lista",
        "tags-create-invalid-chars": "I nomi dei tag non devono contenere virgole (<code>,</code>) o barre (<code>/</code>).",
        "tags-create-invalid-title-chars": "I nomi dei tag non devono contenere caratteri che non possono essere utilizzati nei titoli delle pagine.",
        "tags-create-already-exists": "Il tag \"$1\" esiste già.",
+       "tags-create-warnings-above": "{{PLURAl:$2|È stato rilevato il seguente pericolo|Sono stati rilevati i seguenti pericoli}} mentre si cercava di creare l'etichetta \"$1\":",
        "tags-create-warnings-below": "Desideri continuare a creare il tag?",
        "tags-delete-title": "Elimina tag",
        "tags-delete-explanation-initial": "Stai per eliminare il tag \"$1\" dal database.",
+       "tags-delete-explanation-in-use": "Verrà rimossa da {{PLURAL:$2|$2 versioni o voce di registro| tutte le $2 versioni e voci di registro}} dove si trova attualmente.",
        "tags-delete-explanation-warning": "Questa azione è <strong>irreversibile</strong> e <strong>non può essere annullata</strong>, nemmeno da amministratori di database. Accertati che questo sia davvero il tag che intendi eliminare.",
+       "tags-delete-explanation-active": "<strong> L'etichetta \"$1\" è ancora attiva, e lo resterà in futuro. </strong> Perché questo smetta, vai alle voci di registro dove l'etichetta è in uso, e disattivala manualmente.",
        "tags-delete-reason": "Motivo:",
        "tags-delete-submit": "Elimina irreversibilmente questo tag",
        "tags-delete-not-allowed": "I tag definiti da un'estensione non possono essere eliminati a meno che ciò non sia specificamente permesso dall'estensione.",
        "dberr-usegoogle": "Puoi provare a cercare su Google nel frattempo.",
        "dberr-outofdate": "Nota che la loro indicizzazione dei nostri contenuti potrebbe non essere aggiornata.",
        "dberr-cachederror": "Quella che segue è una copia cache della pagina richiesta, e potrebbe non essere aggiornata.",
-       "htmlform-invalid-input": "Ci sono problemi con l'input inserito",
+       "htmlform-invalid-input": "Ci sono problemi con i dati inseriti",
        "htmlform-select-badoption": "Il valore specificato non è un'opzione valida.",
        "htmlform-int-invalid": "Il valore specificato non è un intero.",
        "htmlform-float-invalid": "Il valore specificato non è un numero.",
        "revdelete-uname-unhid": "nome utente ripristinato",
        "revdelete-restricted": "limitazioni ai soli amministratori attivate",
        "revdelete-unrestricted": "limitazioni ai soli amministratori rimosse",
+       "logentry-block-block": "$1 {{GENDER:$2|ha bloccato}} {{GENDER:$4|$3}} con una scadenza di $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|ha sbloccato}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|ha modificato}} le impostazioni del blocco per {{GENDER:$4|$3}} con una scadenza di $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|ha bloccato}} {{GENDER:$4|$3}} con una scadenza di $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|ha modificato}} le impostazioni del blocco per {{GENDER:$4|$3}} con una scadenza di $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|ha importato}} $3 tramite caricamento",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|ha importato}} $3 da un'altra wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|ha unito}} $3 in $4 (versioni fino al $5)",
        "logentry-move-move": "$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4 senza lasciare redirect",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ha caricato}} una nuova versione di $3.",
        "logentry-upload-revert": "$1 {{GENDER:$2|ha caricato}} $3",
        "log-name-managetags": "Registro gestione tag",
+       "log-description-managetags": "Questa pagina elenca le azioni di gestione relative alle [[Special:Tags|etichette]]. Il registro contiene solo le azioni effettuate manualmente da un amministratore; le etichette potrebbero essere create o cancellate dal programma wiki senza che ciò venga registrato qui.",
        "logentry-managetags-create": "$1 {{GENERE:$2|ha creato}} il tag \"$4\"",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|ha rimosso}} l'etichetta \"$4\" (da $5 {{PLURAL:$5|versione o voce di registro|versioni o voci di registro}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|ha inserito}} l'etichetta \"$4\" per l'uso da parte d'utenti e bot",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|ha disattivato}} l'etichetta \"$4\" per l'uso da parte d'utenti e bot",
        "rightsnone": "(nessuno)",
        "revdelete-summary": "oggetto della modifica",
+       "feedback-adding": "Inserimento del feedback nella pagina...",
+       "feedback-back": "Indietro",
+       "feedback-bugcheck": "Ottimo! Verifica che non sia già fra i [$1 bug conosciuti].",
+       "feedback-bugnew": "Controllo effettuato. Segnala un nuovo bug",
        "feedback-bugornote": "Se si è in grado di descrivere il problema tecnico riscontrato in maniera precisa, [$1 segnalate il bug]. In alternativa, si può usare il modulo semplificato sottostante. Il commento inserito sarà aggiunto alla pagina \"[$3 $2]\", insieme al proprio nome utente e al browser in uso.",
-       "feedback-subject": "Oggetto:",
-       "feedback-message": "Messaggio:",
        "feedback-cancel": "Annulla",
-       "feedback-submit": "Invia feedback",
-       "feedback-adding": "Inserimento del feedback nella pagina...",
+       "feedback-close": "Fatto",
+       "feedback-external-bug-report-button": "Documenta un problema tecnico",
+       "feedback-dialog-title": "Invia un feedback",
+       "feedback-dialog-intro": "Usa il modulo sottostante per inviare il tuo feedback. Il tuo commento apparirà nella pagina \"$1\", assieme al tuo nome utente.",
+       "feedback-error-title": "Errore",
        "feedback-error1": "Errore: Dalla API è arrivato un risultato non riconosciuto",
        "feedback-error2": "Errore: Non è stato possibile eseguire la modifica",
        "feedback-error3": "Errore: Nessuna risposta dalla API",
+       "feedback-error4": "Errore: non sono in grado di postare il titolo del feedback desiderato.",
+       "feedback-message": "Messaggio:",
+       "feedback-subject": "Oggetto:",
+       "feedback-submit": "Invia",
+       "feedback-terms": "Sono al corrente del fatto che le mie informazioni sull'user agent includono informazioni riguardanti il mio esatto browser e versione del sistema operativo, che saranno condivise pubblicamente, assieme al mio feedback.",
+       "feedback-termsofuse": "Accetto di fornire feedback conformemente alle Condizioni d'Uso.",
        "feedback-thanks": "Grazie! Il tuo feedback è stato pubblicato alla pagina \"[$2 $1]\".",
-       "feedback-close": "Fatto",
-       "feedback-bugcheck": "Ottimo! Verifica che non sia già fra i [$1 bug conosciuti].",
-       "feedback-bugnew": "Controllo effettuato. Segnala un nuovo bug",
+       "feedback-thanks-title": "Grazie!",
+       "feedback-useragent": "Agente utente:",
        "searchsuggest-search": "Ricerca",
        "searchsuggest-containing": "contenente...",
        "api-error-badaccess-groups": "Non sei autorizzato a caricare documenti su questa wiki.",
        "expand_templates_generate_xml": "Mostra albero sintattico XML",
        "expand_templates_generate_rawhtml": "Mostra HTML",
        "expand_templates_preview": "Anteprima",
+       "expand_templates_preview_fail_html": "<em>Dato che {{SITENAME}} ha dell'HTML grezzo attivato e c'è stata una perdita dei dati della sessione, l'anteprima è nascosta per precauzione contro gli attacchi a JavaScript.</em>\n\n<strong>Se si tratta di un normale tentativo d'anteprima, riprova.</strong> \nSe comunque non dovesse funzionare, prova ad [[Special:UserLogout|uscire]] ed a rientrare.",
+       "expand_templates_preview_fail_html_anon": "<em>Poiché {{SITENAME}} ha dell'HTML grezzo attivato e non hai effettuato l'accesso, l'anteprima è nascosta come precauzione contro gli attacchi JavaScript.</em>\n\n<strong>Se si tratta di un normale tentativo d'anteprima, [[Special:UserLogin|entra]] e riprova.</strong>",
        "pagelanguage": "Seleziona lingua della pagina",
        "pagelang-name": "Pagina",
        "pagelang-language": "Lingua",
        "json-error-utf8": "Caratteri UTF-8 non validi, possibile codifica errata",
        "json-error-recursion": "Uno o più riferimenti ricorsivi nel valore da codificare",
        "json-error-inf-or-nan": "Uno o più valori NAN o INF nel valore da codificare",
-       "json-error-unsupported-type": "È stato fornito un valore di un tipo che non può essere codificato"
+       "json-error-unsupported-type": "È stato fornito un valore di un tipo che non può essere codificato",
+       "headline-anchor-title": "Collegamento a questa sezione",
+       "special-characters-group-latin": "Latino",
+       "special-characters-group-latinextended": "Latino esteso",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simboli",
+       "special-characters-group-greek": "Greco",
+       "special-characters-group-cyrillic": "Cirillico",
+       "special-characters-group-arabic": "Arabo",
+       "special-characters-group-arabicextended": "Arabo esteso",
+       "special-characters-group-persian": "Persiano",
+       "special-characters-group-hebrew": "Ebraico",
+       "special-characters-group-bangla": "Bengalese",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalese",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thailandese",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "lineetta enne",
+       "special-characters-title-emdash": "lineetta emme",
+       "special-characters-title-minus": "segno meno"
 }
index 9c6dfb0..bee8a3b 100644 (file)
        "category-empty": "<em>このカテゴリには現在、ページやメディアが何もありません。</em>",
        "hidden-categories": "{{PLURAL:$1|隠しカテゴリ}}",
        "hidden-category-category": "隠しカテゴリ",
-       "category-subcat-count": "{{PLURAL:$2|このカテゴリには以下の下位カテゴリのみが含まれています。|このカテゴリには$2件の下位カテゴリが含まれており、そのうち以下の{{PLURAL:$1|下位カテゴリ$1件}}を表示しています。}}",
+       "category-subcat-count": "{{PLURAL:$2|このカテゴリには以下の下位カテゴリのみが含まれています。|このカテゴリには下位カテゴリ $2 件が含まれており、そのうち以下の{{PLURAL:$1| $1 件}}を表示しています。}}",
        "category-subcat-count-limited": "このカテゴリには以下の{{PLURAL:$1|下位カテゴリ|​&#32;$1件の下位カテゴリ}}が含まれています。",
        "category-article-count": "{{PLURAL:$2|このカテゴリには以下のページのみが含まれています。|このカテゴリには $2 ページが含まれており、そのうち以下の $1 ページを表示しています。}}",
        "category-article-count-limited": "現在のカテゴリには以下の{{PLURAL:$1|ページ|​&#32;$1 ページ}}が含まれています。",
        "moredotdotdot": "続き...",
        "morenotlisted": "この一覧は完全ではありません。",
        "mypage": "ページ",
-       "mytalk": "議論",
+       "mytalk": "トーク",
        "anontalk": "このIPアドレスについての議論",
        "navigation": "案内",
        "and": "&#32;と",
        "disclaimers": "免責事項",
        "disclaimerpage": "Project:免責事項",
        "edithelp": "編集の仕方",
+       "helppage-top-gethelp": "ヘルプ",
        "mainpage": "メインページ",
        "mainpage-description": "メインページ",
        "policy-url": "Project:方針",
        "readonly_lag": "データベースはスレーブのデータベースサーバーがマスターに同期するまで自動的にロックされています",
        "internalerror": "内部エラー",
        "internalerror_info": "内部エラー: $1",
+       "internalerror-fatal-exception": "種別「$1」の致命的例外",
        "filecopyerror": "ファイル「$1」を「$2」に複製できませんでした。",
        "filerenameerror": "ファイル名を「$1」から「$2」へ変更できませんでした。",
        "filedeleteerror": "ファイル「$1」を削除できませんでした。",
        "wrongpassword": "パスワードが間違っています。 \nもう一度やり直してください。",
        "wrongpasswordempty": "パスワードを空欄にはできません。\nもう一度やり直してください。",
        "passwordtooshort": "パスワードは {{PLURAL:$1|$1 文字}}以上にしてください。",
+       "passwordtoolong": "パスワードは {{PLURAL:$1|$1 文字}}以下にしてください。",
        "password-name-match": "パスワードは利用者名とは異なる必要があります。",
        "password-login-forbidden": "この利用者名とパスワードの使用は禁止されています。",
        "mailmypassword": "パスワードを再設定",
        "missingcommentheader": "<strong>注意:</strong> このコメントに対する題名/見出しが空欄です。\n「{{int:savearticle}}」ボタンをもう一度押すと、空のまま編集が保存されます。",
        "summary-preview": "要約のプレビュー:",
        "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|個人設定]]で有効なメールアドレスが登録されていない場合、またはメール送信機能の使用がブロックされている場合、「この利用者にメールを送信」の機能は使えません。\n現在ご使用中のIPアドレスは$3、このブロックIDは#$5です。\nお問い合わせの際には、上記の情報を必ず書いてください。",
        "autoblockedtext": "このIPアドレスは、$1によりブロックされた利用者によって使用されたため、自動的にブロックされています。\n理由は次の通りです。\n\n:<em>$2</em>\n\n* ブロック開始日時: $8\n* ブロック解除予定: $6\n* ブロック対象: $7\n\n$1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロックについて問い合わせることができます。\n\nただし、[[Special:Preferences|個人設定]]に正しいメールアドレスが登録されていない場合、またはメール送信がブロックされている場合、「この利用者にメールを送信」機能を使用できないことに注意してください。\n\n現在ご使用中のIPアドレスは$3 、このブロックIDは#$5です。\nお問い合わせの際は、上記の情報を必ず書いてください。",
        "difference-title": "「$1」の版間の差分",
        "difference-title-multipage": "ページ「$1」と「$2」の間の差分",
        "difference-multipage": "(ページ間の差分)",
-       "lineno": "行$1:",
+       "lineno": "$1行目:",
        "compareselectedversions": "選択した版同士を比較",
        "showhideselectedversions": "選択した版を表示/非表示",
        "editundo": "取り消し",
        "notextmatches": "どのページ本文とも一致しませんでした",
        "prevn": "前の$1件",
        "nextn": "次の$1件",
+       "prev-page": "前のページ",
+       "next-page": "次のページ",
        "prevn-title": "前の{{PLURAL:$1|$1件}}",
        "nextn-title": "次の{{PLURAL:$1|$1件}}",
        "shown-title": "ページあたり{{PLURAL:$1|$1件の結果}}を表示",
        "searchprofile-everything-tooltip": "全本文ページ (トークページを含む) 内を検索",
        "searchprofile-advanced-tooltip": "特定の名前空間内を検索",
        "search-result-size": "$1 ({{PLURAL:$2|$2 語}})",
-       "search-result-category-size": "{{PLURAL:$1|$1件}} ({{PLURAL:$2|下位カテゴリ$2件}}、{{PLURAL:$3|ファイル$3件}})",
+       "search-result-category-size": "{{PLURAL:$1|$1 件}} ({{PLURAL:$2|下位カテゴリ $2 件}}、{{PLURAL:$3|ファイル $3 件}})",
        "search-redirect": "($1からのリダイレクト)",
        "search-section": "($1の節)",
        "search-category": "(カテゴリ $1)",
        "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|日間}}",
        "right-protect": "保護レベルを変更し、カスケード保護されたページを編集",
        "right-editprotected": "「{{int:protect-level-sysop}}」の保護を設定されたページを編集",
        "right-editsemiprotected": "「{{int:protect-level-autoconfirmed}}」の保護を設定されたページを編集",
+       "right-editcontentmodel": "ページのコンテンツモデルを編集",
        "right-editinterface": "ユーザーインターフェースを編集",
        "right-editusercssjs": "他の利用者のCSSファイル/JavaScriptファイルを編集",
        "right-editusercss": "他の利用者のCSSファイルを編集",
        "right-override-export-depth": "リンク先ページを5階層まで含めて書き出す",
        "right-sendemail": "他の利用者にメールを送信",
        "right-passwordreset": "パスワード再設定メールを閲覧",
+       "right-managechangetags": "[[Special:Tags|タグ]]のデータベースにおける作成および削除",
        "newuserlogpage": "アカウント作成記録",
        "newuserlogpagetext": "以下はアカウント作成の記録です。",
        "rightslog": "利用者権限変更記録",
        "action-viewmyprivateinfo": "自分の非公開情報の閲覧",
        "action-editmyprivateinfo": "自分の非公開情報の編集",
        "action-editcontentmodel": "ページのコンテンツモデルを編集",
+       "action-managechangetags": "タグのデータベースにおける作成および削除",
        "nchanges": "$1 {{PLURAL:$1|回の変更}}",
        "enhancedrc-since-last-visit": "最終閲覧以降 $1 {{PLURAL:$1|件}}",
        "enhancedrc-history": "履歴",
        "uploaderror": "アップロードのエラー",
        "upload-recreate-warning": "<strong>警告: その名前のファイルは、以前に削除または移動されています。</strong>\n\n参考のため、このページの削除と移動の記録を以下に示します:",
        "uploadtext": "ファイルをアップロードするには、以下のフォームを使用してください。\n\n以前にアップロードされたファイルの表示と検索には[[Special:FileList|{{int:listfiles}}]]を使用してください。(再) アップロードは[[Special:Log/upload|アップロード記録]]に、削除は[[Special:Log/delete|削除記録]]にも記録されます。\n\nページにファイルを入れるには、以下の書式のリンクを使用してください:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.jpg]]</nowiki></code></strong> とすると、ファイルが完全なままで使用されます。\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.png|200px|thumb|left|代替文]]</nowiki></code></strong> とすると、200ピクセルの幅に修正された状態で、左寄せの枠内に、「代替文」が説明として使用されます。\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}:<nowiki>File.ogg]]</nowiki></code></strong> とすると、ファイルを表示せずにそのファイルに直接リンクします。",
-       "upload-permitted": "許可されているファイル形式: $1。",
-       "upload-preferred": "推奨されているファイル形式: $1。",
-       "upload-prohibited": "禁止されているファイル形式: $1。",
+       "upload-permitted": "許可されているファイル{{PLURAL:$2|形式}}: $1。",
+       "upload-preferred": "推奨されているファイル{{PLURAL:$2|形式}}: $1。",
+       "upload-prohibited": "禁止されているファイル{{PLURAL:$2|形式}}: $1。",
        "uploadlogpage": "アップロード記録",
        "uploadlogpagetext": "以下はファイルアップロードの最近の記録です。\n画像付きで見るには[[Special:NewFiles|新規ファイルの一覧]]をご覧ください。",
        "filename": "ファイル名",
        "namespace": "名前空間:",
        "invert": "選択したものを除く",
        "tooltip-invert": "選択した名前空間 (チェックを入れている場合は、関連付けられた名前空間も含む) のページの変更を非表示にするには、このボックスにチェックを入れる",
+       "tooltip-whatlinkshere-invert": "このボックスにチェックをいれると、選択した名前空間のページからのリンクは非表示になる。",
        "namespace_association": "関連付けられた名前空間も含める",
        "tooltip-namespace_association": "選択した名前空間に関連付けられたトークページ (逆にトークページの名前空間を選択した場合も同様) の名前空間も含めるには、このボックスにチェックを入れる",
        "blanknamespace": "(標準)",
        "isredirect": "転送ページ",
        "istemplate": "参照読み込み",
        "isimage": "ファイルへのリンク",
-       "whatlinkshere-prev": "{{PLURAL:$1|前|前の$1件}}",
-       "whatlinkshere-next": "{{PLURAL:$1|次|次の$1件}}",
+       "whatlinkshere-prev": "前の$1件",
+       "whatlinkshere-next": "次の$1件",
        "whatlinkshere-links": "← リンク",
        "whatlinkshere-hideredirs": "転送ページを$1",
        "whatlinkshere-hidetrans": "参照読み込みを$1",
        "thumbnail_image-missing": "ファイルが見つかりません: $1",
        "thumbnail_image-failure-limit": "このサムネイルの描画に失敗した回数($1 回以上)が上限を超えました。しばらく後でもう一度お試しください。",
        "import": "ページデータの取り込み",
-       "importinterwiki": "ウィキ間移動の取り込み",
-       "import-interwiki-text": "取り込むウィキとページ名を選択してください。\n版の日付と編集者名は保持されます。\nウィキ間移動のすべての取り込み操作は[[Special:Log/import|取り込み記録]]に記録されます。",
+       "importinterwiki": "他のウィキからの取り込み",
+       "import-interwiki-text": "取り込むウィキとページ名を選択してください。\n版の日付と編集者名は保持されます。\n他のウィキからの取り込みはすべて[[Special:Log/import|取り込み記録]]に記録されます。",
        "import-interwiki-sourcewiki": "取り込み元のウィキ:",
        "import-interwiki-sourcepage": "取り込み元のページ:",
        "import-interwiki-history": "このページのすべての版を複製する",
        "importcantopen": "取り込みファイルが開けませんでした",
        "importbadinterwiki": "ウィキ間リンクが正しくありません",
        "importsuccess": "取り込みが完了しました!",
-       "importnosources": "ウィキ間移動の取り込み元が定義されていないため、履歴の直接アップロードは無効になっています。",
+       "importnosources": "取り込み元のウィキが定義されていないため、履歴の直接アップロードは無効になっています。",
        "importnofile": "取り込みファイルはアップロードされませんでした。",
        "importuploaderrorsize": "取り込みファイルのアップロードに失敗しました。\nファイルが、アップロードできるサイズを超えています。",
        "importuploaderrorpartial": "取り込みファイルのアップロードに失敗しました。\nファイルの一部のみアップロードされました。",
        "import-rootpage-nosubpage": "ルートページの名前空間「$1」では、下位ページが許可されていません。",
        "importlogpage": "取り込み記録",
        "importlogpagetext": "管理された他のウィキから編集履歴を伴ったページ取り込みです。",
-       "import-logentry-upload": "ファイルのアップロードにより[[$1]]を取り込みました",
        "import-logentry-upload-detail": "$1{{PLURAL:$1|版}} をインポートしました",
-       "import-logentry-interwiki": "$1をウィキ間移動しました",
        "import-logentry-interwiki-detail": "$2からインポート済みの$1{{PLURAL:$1|版}}",
        "javascripttest": "JavaScript をテスト中",
        "javascripttest-pagetext-noframework": "このページは JavaScript のテストを実行するために予約されています。",
        "version-parser-function-hooks": "パーサー関数フック",
        "version-hook-name": "フック名",
        "version-hook-subscribedby": "使用個所",
-       "version-version": "(バージョン $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[名前なし]",
        "version-license": "MediaWiki のライセンス",
        "version-ext-license": "ライセンス",
        "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-explanation": "既定では、新しく作られたタグは利用者とボットによる使用が可能となります。",
+       "tags-create-tag-name": "タグ名:",
        "tags-create-reason": "理由:",
        "tags-create-submit": "作成",
+       "tags-create-no-name": "タグの名前を指定しなければなりません。",
+       "tags-create-invalid-chars": "タグ名はコンマ (<code>,</code>) やスラッシュ (<code>/</code>) を含んではなりません。",
+       "tags-create-invalid-title-chars": "タグ名はページ名として使用できない文字を含んではなりません。",
+       "tags-create-already-exists": "タグ「$1」は既に存在します。",
+       "tags-create-warnings-above": "タグ「$1」を作成しようとした際に以下の{{PLURAL:$2|警告}}にあいました:",
+       "tags-create-warnings-below": "このタグの作成を続けますか?",
        "tags-delete-title": "タグを削除",
+       "tags-delete-explanation-initial": "あなたはタグ「$1」をデータベースから削除しようとしています。",
+       "tags-delete-explanation-in-use": "現在適用されている{{PLURAL:$2|リビジョンやログ項目 $2 件}}を削除します。",
+       "tags-delete-explanation-warning": "この操作は<strong>元に戻せず</strong>、データベース管理者をもってしても<strong>取り消しは不可能</strong>です。削除するタグとして間違いがないことをもう一度しっかり確認してください。",
+       "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版に付与されており、削除できません。",
+       "tags-delete-warnings-after-delete": "タグ「$1」の削除に成功しましたが、以下の{{PLURAL:$2|警告}}が発生しました:",
+       "tags-activate-title": "タグの有効化",
+       "tags-activate-question": "タグ「$1」を有効化しようとしています。",
        "tags-activate-reason": "理由:",
+       "tags-activate-not-allowed": "タグ「$1」は有効化できません。",
+       "tags-activate-not-found": "タグ「$1」は存在しません。",
+       "tags-activate-submit": "有効化",
+       "tags-deactivate-title": "タグの無効化",
+       "tags-deactivate-question": "タグ「$1」を無効化しようとしています。",
        "tags-deactivate-reason": "理由:",
+       "tags-deactivate-not-allowed": "タグ「$1」は無効化できません。",
+       "tags-deactivate-submit": "無効化",
        "comparepages": "ページの比較",
        "compare-page1": "ページ 1",
        "compare-page2": "ページ 2",
        "revdelete-uname-unhid": "利用者名の可視化",
        "revdelete-restricted": "管理者に対する制限の適用",
        "revdelete-unrestricted": "管理者に対する制限の除去",
+       "logentry-block-block": "$1 が {{GENDER:$4|$3}} を$5で{{GENDER:$2|ブロックしました}} $6",
+       "logentry-block-unblock": "$1 が {{GENDER:$4|$3}} の{{GENDER:$2|ブロックを解除しました}}",
+       "logentry-block-reblock": "$1 が {{GENDER:$4|$3}} のブロックの期限を$5に{{GENDER:$2|変更しました}} $6",
+       "logentry-suppress-block": "$1 が {{GENDER:$4|$3}} を$5で{{GENDER:$2|ブロックしました}} $6",
+       "logentry-suppress-reblock": "$1 が {{GENDER:$4|$3}} のブロックの期限を$5に{{GENDER:$2|変更しました}} $6",
+       "logentry-import-upload": "$1 がファイルをアップロードして $3 を{{GENDER:$2|インポートしました}}",
+       "logentry-import-interwiki": "$1 が他のウィキから $3 を{{GENDER:$2|インポートしました}}",
        "logentry-merge-merge": "$1{{GENDER:$2|統合元}} と$3を$4に統合(改訂版を$5に掲載)",
        "logentry-move-move": "$1 がページ「$3」を「$4」に{{GENDER:$2|移動しました}}",
        "logentry-move-move-noredirect": "$1 がページ「$3」を「$4」に、リダイレクトを残さずに{{GENDER:$2|移動しました}}",
        "logentry-upload-upload": "$1 が $3 を {{GENDER:$2|アップロードしました}}",
        "logentry-upload-overwrite": "$1 が $3 の新しいバージョンを {{GENDER:$2|アップロードしました}}",
        "logentry-upload-revert": "$1 が $3 を {{GENDER:$2|アップロードしました}}",
+       "log-name-managetags": "タグ管理記録",
+       "log-description-managetags": "このページは[[Special:Tags|タグ]]に関係する管理タスクをリストアップしています。ログには管理者によって手動で実行された操作の記録しか記載されていません。ウィキ・ソフトウェアによって、ログを残さずにタグが作成・削除されている場合があります。",
+       "logentry-managetags-create": "$1 がタグ「$4」を{{GENDER:$2|作成しました}}",
        "rightsnone": "(なし)",
        "revdelete-summary": "編集内容の要約",
+       "feedback-adding": "ページへのフィードバックの追加...",
+       "feedback-back": "戻る",
+       "feedback-bugcheck": "Great! [$1 既出のバグ]に既に含まれていないかご確認ください。",
+       "feedback-bugnew": "チェックしました。バグを報告します。",
        "feedback-bugornote": "技術的な問題の詳細を説明する準備ができている場合は、[$1 バグ報告]をお願いします。\n準備ができていない場合は、下の簡易フォームを使用してください。あなたのコメントと利用者名が、ページ「[$3 $2]」に追加されます。",
-       "feedback-subject": "件名:",
-       "feedback-message": "メッセージ:",
        "feedback-cancel": "キャンセル",
-       "feedback-submit": "フィードバックを送信",
-       "feedback-adding": "ページへのフィードバックの追加...",
+       "feedback-close": "完了",
+       "feedback-dialog-title": "フィードバックの送信",
+       "feedback-error-title": "エラー",
        "feedback-error1": "エラー: 認識できない結果を API が返しました",
        "feedback-error2": "エラー: 編集に失敗しました",
        "feedback-error3": "エラー: API からの応答がありません",
+       "feedback-message": "メッセージ:",
+       "feedback-subject": "件名:",
+       "feedback-submit": "送信",
+       "feedback-terms": "私のユーザーエージェント情報には、使用ブラウザやオペレーティングシステムのバージョンの情報が含まれており、その情報は私が提供するフィードバックとあわせて公開されることを理解しました。",
+       "feedback-termsofuse": "利用規約に従い、フィードバックを提供することに同意します。",
        "feedback-thanks": "ありがとうございます。フィードバックを「[$2 $1]」のページに投稿しました。",
-       "feedback-close": "完了",
-       "feedback-bugcheck": "Great! [$1 既出のバグ]に既に含まれていないかご確認ください。",
-       "feedback-bugnew": "チェックしました。バグを報告します。",
+       "feedback-thanks-title": "ありがとうございます!",
+       "feedback-useragent": "ユーザーエージェント:",
        "searchsuggest-search": "検索",
        "searchsuggest-containing": "この語句を全文検索",
        "api-error-badaccess-groups": "このウィキへのファイルのアップロードが許可されていません。",
        "json-error-utf8": "UTF-8 の文字が破損しています。エンコーディングが誤っているおそれがあります",
        "json-error-recursion": "エンコードされる値に1つ以上の循環参照が含まれます",
        "json-error-inf-or-nan": "エンコードされる値に1つ以上の NAN または INF が含まれます",
-       "json-error-unsupported-type": "エンコードできない種類の値が入力されました"
+       "json-error-unsupported-type": "エンコードできない種類の値が入力されました",
+       "headline-anchor-title": "この節へのリンク",
+       "special-characters-group-latin": "ラテン文字",
+       "special-characters-group-latinextended": "ラテン文字拡張",
+       "special-characters-group-ipa": "国際音声記号",
+       "special-characters-group-symbols": "記号",
+       "special-characters-group-greek": "ギリシア文字",
+       "special-characters-group-cyrillic": "キリル文字",
+       "special-characters-group-arabic": "アラビア文字",
+       "special-characters-group-arabicextended": "アラビア文字拡張",
+       "special-characters-group-persian": "ペルシア文字",
+       "special-characters-group-hebrew": "ヘブライ文字",
+       "special-characters-group-bangla": "ベンガル文字",
+       "special-characters-group-tamil": "タミール",
+       "special-characters-group-telugu": "テルグ文字",
+       "special-characters-group-sinhala": "シンハラ文字",
+       "special-characters-group-gujarati": "グジャラート文字",
+       "special-characters-group-devanagari": "デーヴァナーガリー文字",
+       "special-characters-group-thai": "タイ文字",
+       "special-characters-group-lao": "ラオス文字",
+       "special-characters-group-khmer": "クメール文字",
+       "special-characters-title-endash": "en ダッシュ",
+       "special-characters-title-emdash": "em ダッシュ",
+       "special-characters-title-minus": "マイナス記号"
 }
index 7665ee8..ffd855f 100644 (file)
@@ -14,7 +14,8 @@
                        "Rex",
                        "StefanusRA",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Garisen ngisoré pranala:",
        "delete-warning-toobig": "Kaca iki duwé sajarah panyuntingan sing dawa, luwih saka $1 {{PLURAL:$1|révisi|révisi}}.\nMbusak kaca iki bisa ngrusak operasi basis data ing {{SITENAME}};\nkudu ngati-ati.",
        "deleting-backlinks-warning": "'''Awas:''' Kaca liyane mungkin ana sing nautake ing kaca sing arep sampeyan busak.",
        "rollback": "Mbalèkaké suntingan",
-       "rollback_short": "Balèkna",
        "rollbacklink": "balèaké",
        "rollbacklinkcount": "balèkaké $1 {{PLURAL:$1|suntingan|suntingan}}",
        "rollbacklinkcount-morethan": "balèkaké luwih saka $1 {{PLURAL:$1|suntingan|suntingan}}",
        "import-rootpage-nosubpage": "Ruang nama \"$1\" di halaman turunan tidak mengizinkan subhalaman.",
        "importlogpage": "Log impor",
        "importlogpagetext": "Impor administratif kaca-kaca mawa sajarah panyuntingan saka wiki liya.",
-       "import-logentry-upload": "ngimpor [[$1]] mawa pangunggahan berkas",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|révisi|révisi}}",
-       "import-logentry-interwiki": "wis nge-transwiki $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|révisi}} saka $2",
        "javascripttest": "Panjajalan JavaScript",
-       "javascripttest-title": "Nglakokaké pangujian $1",
        "javascripttest-pagetext-noframework": "Kaca iki disadhiyakaké kanggo nglakokaké panjajalan JavaScript.",
        "javascripttest-pagetext-unknownframework": "Rangka kerja panjajalan ora dingertèni \"$1\".",
        "javascripttest-pagetext-frameworks": "Mangga pilih sawiji saka rangka kerja panjajalan iki: $1",
        "javascripttest-pagetext-skins": "Pilih kulit kanggo nglakokaké panjajalan mawa:",
        "javascripttest-qunit-intro": "Delok [dhokumèntasi panjajalan $1] nèng mediawiki.org.",
-       "javascripttest-qunit-heading": "Rangkéan panjajalan MediaWiki JavaScript QUnit",
        "tooltip-pt-userpage": "Kaca panganggo panjenengan",
        "tooltip-pt-anonuserpage": "Kaca panganggo IP panjenengan",
        "tooltip-pt-mytalk": "Kaca wicara panjenengan",
        "watchlisttools-edit": "Tuduhna lan sunting daftar pangawasan",
        "watchlisttools-raw": "Sunting daftar pangawasan mentah",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|wicara]])",
-       "unknown_extension_tag": "Tag èkstènsi ora ditepungi \"$1\"",
        "duplicate-defaultsort": "Pènget: Kunci pilih asal (''Default sort key'') \"$2\" nggantèkaké kunci pilih asal sadurungé \"$1\".",
        "version": "Versi",
        "version-extensions": "Èkstènsi sing wis diinstalasi",
        "version-parser-function-hooks": "Canthèlan fungsi parser",
        "version-hook-name": "Jeneng canthèlan",
        "version-hook-subscribedby": "Dilanggani déning",
-       "version-version": "(Vèrsi $1)",
+       "version-version": "($1)",
        "version-license": "Lisènsi MediaWiki",
        "version-ext-license": "Lisènsi",
        "version-ext-colheader-name": "Ekstensi",
        "specialpages-group-wiki": "Data lan piranti wiki",
        "specialpages-group-redirects": "Ngalihaké kaca astamèwa",
        "specialpages-group-spam": "Piranit spam",
+       "specialpages-group-developer": "Piranti déveloper",
        "blankpage": "Kaca kosong",
        "intentionallyblankpage": "Kaca iki disengajakaké kosong",
        "external_image_whitelist": " #Umbarna larikan iki apa anané<pre>\n#Pigunakaké fragmèn èksprèsi regular (mung bagéyan ing antara //) ing ngisor\n#Fragmèn ini bakal dicocogaké karo URL saka gambar-gambar èksternal\n#Fragmèn sing cocog bakal ditampilaké minangka gambar, yèn ora mung pranala menyang gambar waé sing ditampilaké\n#Larikan sing diwiwiti nganggo # dianggep minangka komentar\n#Iki ora mbédakaké aksara gedhé/cilik\n#Dèlèhna kabèh fragmèn èksprèsi regular sadhuwuré larikan iki. Umbarna larikan iki apa anané</pre>",
        "logentry-rights-autopromote": "$1 otomatis {{GENDER:$2|dipromosikne}} saka $4 nèng $5",
        "rightsnone": "(ora ana)",
        "revdelete-summary": "ringkesan suntingan",
+       "feedback-adding": "Nambahaké lebon saran nèng kaca...",
+       "feedback-bugcheck": "Apik! Pesthèké kuwi dudu sawijining [$1 bug sing dingertèni].",
+       "feedback-bugnew": "Aku wis mriksa. Kandakaké bug anyar",
        "feedback-bugornote": "Yèn Sampéyan siap njelasaké masalah tèhnis kanthi rinci mangga [$1 laporaké bug].\nUtawa, Sampéyan bisa nganggo pormulir gampang ngisor. Tanggepan Sampéyan bakal ditambahaké nèng kaca \"[$3 $2]\", bebarengan karo jeneng panganggo Sampéyan lan pramban sing Sampéyan anggo.",
-       "feedback-subject": "Jejer:",
-       "feedback-message": "Layang:",
        "feedback-cancel": "Batal",
-       "feedback-submit": "Kirim Lebon Saran",
-       "feedback-adding": "Nambahaké lebon saran nèng kaca...",
+       "feedback-close": "Rampung",
        "feedback-error1": "Kasalahan: Asil ora dikenal saka API",
        "feedback-error2": "Kasalahan: Gagal nyunting",
        "feedback-error3": "Kasalahan: Ora ana tanggepan saka API",
+       "feedback-message": "Layang:",
+       "feedback-subject": "Jejer:",
+       "feedback-submit": "Kirim",
        "feedback-thanks": "Nuwun! Lebon saran Sampéyan wis dipasang nèng kacané \"[$2 $1]\".",
-       "feedback-close": "Rampung",
-       "feedback-bugcheck": "Apik! Pesthèké kuwi dudu sawijining [$1 bug sing dingertèni].",
-       "feedback-bugnew": "Aku wis mriksa. Kandakaké bug anyar",
        "searchsuggest-search": "Golèk",
        "searchsuggest-containing": "ngisi...",
        "api-error-badaccess-groups": "Sampéyan ora dililakaké ngunggah berkas nèng wiki iki.",
        "expand_templates_remove_nowiki": "Brèdèl tag <nowiki> nèng asilé",
        "expand_templates_generate_xml": "Tuduhna uwit parser XML",
        "expand_templates_generate_rawhtml": "Show raw HTML",
-       "expand_templates_preview": "Pratayang"
+       "expand_templates_preview": "Pratayang",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin pepak",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simbol",
+       "special-characters-group-greek": "Yunani",
+       "special-characters-group-cyrillic": "Srilik",
+       "special-characters-group-arabic": "Arab",
+       "special-characters-group-arabicextended": "Arab pepak",
+       "special-characters-group-persian": "Persia",
+       "special-characters-group-hebrew": "Ibrani",
+       "special-characters-group-bangla": "Bengali",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarat",
+       "special-characters-group-devanagari": "Dewanagari",
+       "special-characters-group-thai": "Thailand",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index c27d17c..06e5863 100644 (file)
@@ -21,7 +21,8 @@
                        "ka.wikipedia.org sysops",
                        "לערי ריינהארט",
                        "გიორგიმელა",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "ბმულების ხაზგასმა:",
@@ -38,6 +39,7 @@
        "tog-watchdefault": "დაამატე ჩემი კონტროლის სიას ჩემს მიერ რედაქტირებული გვერდები და ფაილები",
        "tog-watchmoves": "ჩასვი გვერდები და ფაილები, რომლებიც მე გადამაქვს, ჩემს კონტროლის სიაში",
        "tog-watchdeletion": "ჩასვი გვერდები და ფაილები, რომლებსაც მე ვშლი, ჩემს კონტროლის სიაში",
+       "tog-watchrollback": "დაამატე ჩემი კონტროლის სიას გვერდები, სადაც მე სწრაფი გაუქმება განვახორციელე",
        "tog-minordefault": "ყველა რედაქტირების მონიშვნა, როგორც უმნიშვნელო, უპირობოდ",
        "tog-previewontop": "წინასწარი გადახედვის ჩვენება რედაქტირების დაფამდე",
        "tog-previewonfirst": "წინასწარი ჩვენება პირველივე რედაქტირებაზე",
        "disclaimers": "პასუხისმგებლობის უარყოფა",
        "disclaimerpage": "Project:პასუხისმგებლობის უარყოფა",
        "edithelp": "დახმარება",
+       "helppage-top-gethelp": "დახმარება",
        "mainpage": "მთავარი გვერდი",
        "mainpage-description": "მთავარი გვერდი",
        "policy-url": "Project:პოლიტიკა",
        "changeemail-password": "თქვენი პაროლი პროექტში {{SITENAME}}:",
        "changeemail-submit": "ელ-ფოსტის შეცვლა",
        "changeemail-throttled": "თქვენ უკვე ძალიან ბევრჯერ სცადეთ შესვლა.\nგთხოვთ, მოიცადოთ $1, სანამ კიდევ სცდიდეთ.",
+       "resettokens": "ტოკენების ჩამოყრა",
+       "resettokens-text": "თქვენ შეგიძლიათ ჩამოყაროთ ტოკენები, რომლებიც შესაძლებლობას იძლევიან შესვლას განსაზღვრულ პირად მონაცემებში, დაკავშირებულს თქვენ ანგარიშთან აქ. \n\nთქვენ ეს აუცილებლად უნდა გააკეთოთ, თუ თქვენ ის შემთხვევით გააცანით სხვას ან თუკი თქვენი ანგარიში იქნა გატეხილი.",
+       "resettokens-legend": "ტოკენების ჩამოყრა",
        "resettokens-tokens": "ჟეტონები:",
        "resettokens-token-label": "$1 (მიმდინარე მნიშვნელობა: $2)",
+       "resettokens-watchlist-token": "ტოკენი ვებ-არხისთვის (Atom/RSS) [[Special:Watchlist|გვერდების ცვლილებები თქვენი კონტროლის სიაში]]",
+       "resettokens-resetbutton": "არჩეული ტოკენების ჩამოყრა",
        "bold_sample": "მუქი ტექსტი",
        "bold_tip": "მუქი ტექსტი",
        "italic_sample": "კურსივი",
        "searchrelated": "მიბმული",
        "searchall": "ყველა",
        "showingresults": "ქვემოთ იხილეთ <b>$1</b>-მდე შედეგი დაწყებული #<b>$2</b>-იდან.",
+       "search-showingresults": "{{PLURAL:$4|შედეგი <strong>$1</strong> დან <strong>$3</strong>|შედეგი <strong>$1 - $2</strong> დან <strong>$3</strong>}}",
        "search-nonefound": "მსგავსი მოთხოვნით გვერდი ვერ მოიძებნა.",
        "powersearch-legend": "გაფართოებული ძიება",
        "powersearch-ns": "ძიება სახელთა სივრცეებში:",
        "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": "გაფართოებულ კონტროლის სიაში საჩვენებელი ცვლილებების მაქსიმალური რაოდენობა:",
        "recentchangesdays-max": "მაქსიმუმ $1 {{PLURAL:$1|დღე}}",
        "recentchangescount": "საჩვენებელი ცვლილებების რაოდენობა:",
        "prefs-help-recentchangescount": "შეიცავს ახალ შესწორებებს, გვერდების ისტორიებს, ჟურნალებს.",
+       "prefs-help-watchlist-token2": "ეს არის საიდუმლო გასაღები თქვენი კონტროლის სიის ვებ-არხისთვის. ნებისმიერს, ვინც იცის ის, შეუძლია წაიკითხოს თქვენი კონტროლის სია, ამიტომ არ გაუზიაროთ იგი სხვებს. [[Special:ResetTokens|თქვენ შეგიძლიათ ჩამოყაროთ ის]].",
        "savedprefs": "თქვენ მიერ შერჩეული პარამეტრები დამახსოვრებულია.",
        "timezonelegend": "სასაათო სარტყელი:",
        "localtime": "ადგილობრივი დრო:",
        "protect-othertime": "სხვა დრო:",
        "protect-othertime-op": "სხვა დრო",
        "protect-existing-expiry": "დასრულების დრო: $2, $3",
+       "protect-existing-expiry-infinity": "დასრულების დრო: განუსაზღვრელი",
        "protect-otherreason": "სხვა/დამატებითი მიზეზი:",
        "protect-otherreason-op": "სხვა/დამატებითი მიზეზი",
        "protect-dropdown": "* დაცვის ტიპიური მიზეზები\n** გადაჭარბებული ვანდალიზმი\n** გადაჭარბებული სპამი\n** რედაქტირებათა ომი\n** მაღალი რისკის გვერდი",
        "movepagetalktext": "დაკავშირებული განხილვის გვერდი ავტომატურად გადავა მასთან ერთად, '''გარდა იმ შემთხვევისა, თუ''':\n*განხილვის გვერდი ახალი სათაურით და გარკვეული შინაარსით უკვე არსებობს, ან\n*თქვენ მოხსნით ნიშნულს ქვევით დაფაზე.\n\nამ შემთხვევებში, თქვენ თავად მოგიწევთ ამ გვერდის გადატანა, სურვილისამებრ.",
        "movearticle": "გვერდის გადატანა",
        "moveuserpage-warning": "'''გაფრთხილება:''' თქვენ გადაგაქვთ მომხმარებლის გვერდი. გთხოვთ გაითვალისწინეთ, რომ გადატანა შესრულდება, მომხმარებლის სახელის გადარქმევა კი ''არა''.",
+       "movecategorypage-warning": "<strong>გაფრთხილება:</strong> თქვენ გადაგაქვთ კატეგორიის გვერდი. გაითვალისწინეთ, რომ გვერდი გადავა, თუმცა მასში შემავალი გვერდები <em>დარჩება</em> ძველ კატეგორიაში. საჭირო იქნება კატეგორიის ჩასწორება სტატიებში ინდივიდუალურად.",
        "movenologintext": "თქვენ უნდა [[Special:UserLogin|წარუდგინოთ თავი]],\nსისტემას რათა გადაიტანოთ გვერდები.",
        "movenotallowed": "თქვენ არ გაქვთ გვერდების გადატანის უფლება.",
        "movenotallowedfile": "თქვენ ვერ გადაიტანთ ფაილებს.",
        "import-rootpage-nosubpage": "სახელტა სივრცეში მითითებულ ძირეულ გვერდში „$1“ ქვეგვერდები დაუშვებელია.",
        "importlogpage": "იმპორტის ჟურნალი",
        "importlogpagetext": "ადმინისტრატორთა მიერ გვერდების იმპორტირება  ცვლილებების ჩათვლით სხვა ვიკიდან.",
-       "import-logentry-upload": "„[[$1]]“ — ფაილის იმპორტი",
        "import-logentry-upload-detail": "$1 ცვლილება",
-       "import-logentry-interwiki": "„$1“ — ტრანსვიკი იმპორტი",
        "import-logentry-interwiki-detail": "$1 ცვლილება $2-დან",
        "javascripttest": "JavaScript-ის ტესტირება",
        "javascripttest-pagetext-noframework": "ეს გვერდი დარეგისტრირებულია JavaScript-ის ტესტების გასაშვებად.",
        "version-parser-function-hooks": "სინტაქსური ანალიზატორის ჰუკი",
        "version-hook-name": "ჰუკის სახელი",
        "version-hook-subscribedby": "ჩაწერილია",
-       "version-version": "(ვერსია $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[სახელის გარეშე]",
        "version-svn-revision": "(r$2)",
        "version-license": "მედიავიკის ლიცენზია",
        "logentry-upload-revert": "მომხმარებელმა $1 {{GENDER:$2|ატვირთა}} $3",
        "rightsnone": "(არცერთი)",
        "revdelete-summary": "ცვლილებების აღწერა",
+       "feedback-adding": "თქვენი შეფასების შენახვა...",
+       "feedback-bugcheck": "კარგია! გთხოვთ, კიდევ ერთხელ შეამოწმეთ, ხომ არ არის აქ რომელიმე უკვე [$1 ნაცნობი შეცდომა].",
+       "feedback-bugnew": "მე შევამოწმე. ახალი შეცდომის შეტყობინება",
        "feedback-bugornote": "თუ თქვენ მზად ხართ დეტალურად აღწეროთ ტექნიკური პრობლემა, გთხოვთ, [$1 შეგვატყობინეთ შეცდომის შესახებ].\nწინააღმდეგ შემთხვევაში თქვენ შეგიძლიათ ისარგებლოთ ამ მარტივი ფორმით. თქვენი კომენტარი დაემატება  „[$3 $2]“ გვერდზე თქვენი მომხმარებლის სახელთან და გამოყენებულ ბრაუზერთან ერთად.",
-       "feedback-subject": "თემა:",
-       "feedback-message": "შეტყობინება:",
        "feedback-cancel": "გაუქმება",
-       "feedback-submit": "შეფასების გაგზავნა",
-       "feedback-adding": "თქვენი შეფასების შენახვა...",
+       "feedback-close": "გაკეთდა",
        "feedback-error1": "შეცდომა. API-ს მოულოდნელი რეზულტატი.",
        "feedback-error2": "შეცდომა: რედაქტირება ვერ განხორციელდა",
        "feedback-error3": "შეცდომა. არ არის API-ს პასუხი .",
+       "feedback-message": "შეტყობინება:",
+       "feedback-subject": "თემა:",
+       "feedback-submit": "მიღება",
        "feedback-thanks": "გმადლობთ! თქვენი შეფასება განთავსებულია „[$2 $1]“ გვერდზე.",
-       "feedback-close": "გაკეთდა",
-       "feedback-bugcheck": "კარგია! გთხოვთ, კიდევ ერთხელ შეამოწმეთ, ხომ არ არის აქ რომელიმე უკვე [$1 ნაცნობი შეცდომა].",
-       "feedback-bugnew": "მე შევამოწმე. ახალი შეცდომის შეტყობინება",
        "searchsuggest-search": "ძიება",
        "searchsuggest-containing": "შეიცავს...",
        "api-error-badaccess-groups": "თქვენ არ გაქვთ ამ ვიკიში ფაილების ატვირთვის უფლება.",
        "log-name-pagelang": "ენის ცვლილებების ჟურნალი",
        "log-description-pagelang": "ეს არის გვერდის ენის ცვლილებების ჟურნალი",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ჩართულია)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''გამორთულია''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''გამორთულია''')",
+       "headline-anchor-title": "ბმული ამ სექციაზე",
+       "special-characters-group-latin": "ლათინური",
+       "special-characters-group-latinextended": "ლათინური გაფართოება",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "სიმბოლოები",
+       "special-characters-group-greek": "ბერძნული",
+       "special-characters-group-cyrillic": "კირილიცა",
+       "special-characters-group-arabic": "არაბული",
+       "special-characters-group-arabicextended": "არაბული გაფართოება",
+       "special-characters-group-persian": "სპარსული",
+       "special-characters-group-hebrew": "ებრაული",
+       "special-characters-group-bangla": "ბენგალური",
+       "special-characters-group-tamil": "ტამილური",
+       "special-characters-group-telugu": "ტელუგუ",
+       "special-characters-group-sinhala": "სინგალური",
+       "special-characters-group-gujarati": "გუჯარათი",
+       "special-characters-group-devanagari": "დევანაგარი",
+       "special-characters-group-thai": "ტაილანდური",
+       "special-characters-group-lao": "ლაოსური",
+       "special-characters-group-khmer": "ქჰმერული",
+       "special-characters-title-endash": "ტირე",
+       "special-characters-title-emdash": "გრძელი ტირე",
+       "special-characters-title-minus": "მინუსის ნიშანი"
 }
index a801a36..c92e9e1 100644 (file)
        "delete-warning-toobig": "Asebtar agi yesɛa amezruy axatar n ibeddilen, ugaren $1 {{PLURAL:$1|lqem|ileqman}}.\nTukksa-s tezmer ad terwi tiddit n taffa n isefka n {{SITENAME}} ;\nilaq ad seqdeceḍ s-leɛqel.",
        "deleting-backlinks-warning": "'''Ɣur-wet :''' Isebtar nniḍen sɛan azday ɣer asebtar i tebɣiḍ ad ekkeseḍ.",
        "rollback": "Semmet ibeddilen",
-       "rollback_short": "Semmet",
        "rollbacklink": "semmet",
        "rollbacklinkcount": "semmet $1 {{PLURAL:$1|abeddel|ibeddilen}}",
        "rollbacklinkcount-morethan": "semmet ugar n $1 {{PLURAL:$1|abeddel|ibeddilen}}",
        "import-logentry-interwiki": "$1 s transwiki",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|lqem|ileqman}} seg $2",
        "javascripttest": "Tarmit n JavaScript",
-       "javascripttest-title": "Asselkem n tirmitin $1",
        "javascripttest-pagetext-noframework": "Asebtar agi yeḥeṛṛ i usselkem n tirmitin JavaScript.",
        "javascripttest-pagetext-unknownframework": "Tamṣuka « $1 » warisem.",
        "javascripttest-pagetext-frameworks": "Ilaq ad xetreḍ yiwet n timṣukyin n tarmit agi : $1",
        "javascripttest-pagetext-skins": "Xter agwlim s anwa ad xeddemeḍ tarmit :",
        "javascripttest-qunit-intro": "Zeṛ [$1 tumlin n tarmit] ɣef mediawiki.org.",
-       "javascripttest-qunit-heading": "Azrar n tarmit QUnit n JavaScript ɣef MediaWiki",
        "tooltip-pt-userpage": "Asebter n umseqdac inu",
        "tooltip-pt-anonuserpage": "Asebter n wemseqdac n IP wukud tekkiḍ",
        "tooltip-pt-mytalk": "Asebter n umyannan inu",
        "version-parser-function-hooks": "Tiseɣnin yeẓẓlen n umsisleḍ n taseddast",
        "version-hook-name": "Isem n umgud",
        "version-hook-subscribedby": "Imeltaɣen :",
-       "version-version": "(lqem $1)",
+       "version-version": "($1)",
        "version-license": "Turagt MediaWiki",
        "version-ext-license": "Turagt",
        "version-ext-colheader-name": "Asiɣzef",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|yebeddel|tebeddel}} amyili ar ugraw i $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|yettwasmel|tettwasmel}} s uwurman seg $4 ar $5",
        "rightsnone": "(ulaḥedd)",
+       "feedback-adding": "Rnud iwenniten inek/inem ar usebter...",
+       "feedback-bugcheck": "D ayen igerrzen ! Senqed kan ma mačči d yiwen n [$1 inezriyen i n-sen yakan].",
+       "feedback-bugnew": "Senqedeɣ. Ɛeyyen anezri amaynut",
        "feedback-bugornote": "Ma teḥgiḍ iman-ik/im ad gelmeḍ agnu atekni i tilɣa tummidtin, [$1 ɛeyyen ɣef anezri].\nMulac, tzemreḍ ad seqdeceḍ tiferkit ddaw agi. Awennit inek/inem ad yetwernu ar usebtar « [$3 $2] », s isem-ik/im n umseqdac d iminig i tseqdeceḍ.",
-       "feedback-subject": "Asentel :",
-       "feedback-message": "Izen :",
        "feedback-cancel": "Semmewet",
-       "feedback-submit": "Ceggaɛ iwenniten",
-       "feedback-adding": "Rnud iwenniten inek/inem ar usebter...",
+       "feedback-close": "D ayen",
        "feedback-error1": "Tuccḍa : Agmuḍ n API ur yetwaɛqel ara",
        "feedback-error2": "Tuccḍa  : abeddel yexṣer",
        "feedback-error3": "Tuccḍa : Ulac tamrarut n API",
+       "feedback-message": "Izen :",
+       "feedback-subject": "Asentel :",
+       "feedback-submit": "Ceggaɛ iwenniten",
        "feedback-thanks": "Tanemmirt ! Awennit inek/inem yeffeɣ-d ɣef usebtar \"[$2 $1]\".",
-       "feedback-close": "D ayen",
-       "feedback-bugcheck": "D ayen igerrzen ! Senqed kan ma mačči d yiwen n [$1 inezriyen i n-sen yakan].",
-       "feedback-bugnew": "Senqedeɣ. Ɛeyyen anezri amaynut",
        "searchsuggest-search": "Nadi",
        "searchsuggest-containing": "yesɛan...",
        "api-error-badaccess-groups": "Ur tesɛiḍ ara turagt ad smireḍ ifuyla ɣef wiki agi.",
index dd14b35..50f6572 100644 (file)
        "rev-deleted-unhide-diff": "Çımraviarnaisunê na ferqi ra  jü '''esteriyo'''.\nBeno ke [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] de teferruat esto.\nSıma be idarekerênia ho ra şikinê hona [$1 nê ferqi bıvênê], eke wazenê dewam kerê.",
        "rev-delundel": "bıasne/wedare",
        "rev-showdeleted": "bıasne",
-       "revisiondelete": "Çımraviarnaisu bestere/peyser bia",
+       "revisiondelete": "Çımraviyarnayisu bestere/peyser biya",
        "revdelete-nooldid-title": "Çımraviarnaena waştiye nêvêrena",
        "revdelete-nooldid-text": "Sıma vırastena nê fonksiyoni rê ya jü çımraviarnaena waştiye diyar nêkerdo, çımraviarnaena diyarkerdiye çına, ya ki sıma wazenê ke çımraviarnaena nıkaêne bınımnê.",
        "revdelete-no-file": "Dosya diyarkerdiye çina.",
        "history-title": "Tarixê çımraviyarnayişê \"$1\"",
        "lineno": "Rêza $1i:",
        "compareselectedversions": "Varyantunê weçinıtun têver sane",
-       "editundo": "peyser bia",
+       "editundo": "peyser biya",
        "searchresults": "Neticê cıfeteliyaene",
        "searchresults-title": "\"$1\" rê neticê cıfeteliyaene",
        "notextmatches": "Qet zu pele de nêvêniya",
        "deletecomment": "Sebeb:",
        "deleteotherreason": "Sebebo bin/ilaweki:",
        "deletereasonotherlist": "Sebebo bin",
-       "rollbacklink": "peyser bia",
+       "rollbacklink": "peyser biya",
        "protectlogpage": "Qeydê seveknaene",
        "protectedarticle": "\"[[$1]]\" sevekna",
        "modifiedarticleprotection": "serba \"[[$1]]\" sewiya seveknaene vurriye",
        "undeletepagetitle": "'''Ni, [[:$1|$1]] be çımraviarnaunê pele ra yenê pêra'''.",
        "viewdeletedpage": "Pelunê esteriyau bıvine",
        "undelete-fieldset-title": "Çımraviarnau peyser biya",
-       "undeletebtn": "Peyser bia",
-       "undeletelink": "bıvêne/peyser bia",
+       "undeletebtn": "Peyser biya",
+       "undeletelink": "bıvêne/peyser biya",
        "undeleteviewlink": "bıvêne",
        "undeleteinvert": "Weçinıtey ters bıçarne",
        "undeletecomment": "Sebeb:",
        "block-log-flags-hiddenname": "namê karberi wedariyaeo",
        "range_block_disabled": "Qabılıyetê idarekeri be afernaena komuna têdine qapan bi.",
        "ipb_expiry_invalid": "Xêlê zeman nêvêreno.",
-       "movepagetext": "Ebe gurênaena formê cêrêni namê jü pele vurino, qeydê cıyê verêni pêro tede sonê be namê newey ser.\nNameo khan jü pela de cihetiê be namê newey cêna.\nTı şikina ita de cihetu otomatikman hetê namê oricinali ser rocane kerê.\nEke tı nêwazena otomatikman bıkerê, gunê [[Special:DoubleRedirects|cihetunê çıftu]] ya ki [[Special:BrokenRedirects|cihetunê nêvêrdeyu]] pêroine be ho duz kerê.\nHo vira meke ke be na vurnaiso ke tı kena, gurênaisê girêu be caunê rastu pêroine ra tı mesula.\n\nDiqet ke, namê newey de hora ke jü madde esto, vurnaisê namey '''nêbeno''', wa no ke thalo ya ki jü cihetiserberdiso u vurnaisê huyo verên çino. No yeno na mana ke tı şikina namê jü pele peyser bıcêrê, koti ra ke namê ae vuriyo, beno ke to ğelet kerd u zobina ki qarısê pela de bine nêbena.\n\n'''Teme!'''\nNo vurnais beno ke serba jü pela populere neticunê nêbiyau biaro meydan;\nkerem ke, verê vurnaişi neticunê biyau bia be çımu ver.",
+       "movepagetext": "Ebe gurênayena formê cêrêni namê jü pele vurino, qeydê cıyê verêni pêro tede sonê be namê newey ser.\nNamewo khan jü pela de cihetiyê be namê neweyi cêna.\nTı şikina ita de cihetu otomatikman hetê namê oricinali ser rocane kerê.\nEke tı nêwazena otomatikman bıkerê, gunê [[Special:DoubleRedirects|cihetunê çıftu]] ya ki [[Special:BrokenRedirects|cihetunê nêvêrdeyu]] pêroyine be ho duz kerê.\nHo vira meke ke be na vurnaiso ke tı kena, gurênayisê girêwu be cawunê rastu pêroyine ra tı mesula.\n\nDiqet ke, namê neweyi de hora ke jü made esto, vurnayisê nameyi <strong>nêbeno</strong>, wa no ke thalo ya ki jü cihetiserberdiso u vurnayisê huyo verên çino. No yeno na mana ke tı şikina namê jü pele peyser bıcêrê, koti ra ke namê aye vuriyo, beno ke to ğelet kerd û zobina ki qarısê pela de bine nêbena.\n\n<strong>Teme!</strong>\nNo vurnayis beno ke serba jü pela populere neticunê nêbiyawu biyaro meydan;\nkerem ke, verê vurnayişi neticunê biyawu biya be çımu ver.",
        "movepagetalktext": "Na pela hurênaişia ke tedera otomatikmen kırışina be namê newey, hama nê halu ra '''qêri''':\n*Jü pela hurênaişia pırre bınê namê newey de hora esta, ya ki\n*Qutiya bınêne to nêçinıte we.\n\nNê halu de, tı gunê pele ebe dest berê ya ki ser kerê eke wajiye.",
        "movearticle": "Pele bere:",
        "newtitle": "Ebe nameo newe:",
        "movetalk": "Pela hurênaişiê alaqedare bere",
        "movelogpage": "Qeydê berdene",
        "movereason": "Sebeb:",
-       "revertmove": "raçarnaene",
+       "revertmove": "raçarne",
        "export": "Pelu qeyd ke",
        "allmessages": "Mesacê sistemi",
        "allmessagesname": "Name",
        "tooltip-watch": "Na pele lista huya şêrkerdişi ser ke",
        "tooltip-recreate": "Na pele esterıte bo ki, nae oncia bıaferne",
        "tooltip-upload": "Dest be bar-kerdene ke",
-       "tooltip-rollback": "\"Peyser bia\" ebe jü tık pela iştırak(un)ê peyên|i(u) peyser ano.",
+       "tooltip-rollback": "\"Peyser biya\" ebe jü tık pela iştırakunê peyênu peyser ano.",
        "tooltip-undo": "\"Peyser\" ni vurnaişi peyser ano u modusê verqayt de vurnaisê formi keno ra.\nTêser-kerdena jü sebebi rê xulasa de imkan dano cı.",
        "tooltip-summary": "Xulasê da kılme cı kuye",
        "common.css": "/* CSSo ke itaro, serba çermu pêroine gurenino */",
index ac50fb7..a54f831 100644 (file)
        "delete-toobig": "بۇل بەتتە بايتاق تۇزەتۋ تارىيحى بار, $1 تۇزەتۋدەن استام.\nبۇنداي بەتتەردىڭ جويۋى {{SITENAME}} تورابىن الدەقالاي ٴۇزىپ تاستاۋىنا بوگەت سالۋ ٴۇشىن تىيىمدالعان.",
        "delete-warning-toobig": "بۇل بەتتە بايتاق تۇزەتۋ تارىيحى بار, $1 تۇزەتۋدەن استام.\nبۇنىڭ جويۋى {{SITENAME}} تورابىنداعى دەرەكقور ارەكەتتەردى ٴۇزىپ تاستاۋىن مۇمكىن;\nبۇنى ابايلاپ وتكىزىڭىز.",
        "rollback": "وڭدەمەلەردى شەگىندىرۋ",
-       "rollback_short": "شەگىندىرۋ",
        "rollbacklink": "شەگىندىرۋ",
        "rollbackfailed": "شەگىندىرۋ ٴساتسىز ٴبىتتى",
        "cantrollback": "وڭدەمە قايتارىلمادى;\nسوڭعى ۇلەسكەرى تەك وسى بەتتىڭ باستاۋشىسى بولدى.",
        "hebrew-calendar-m10-gen": "تىموزدىڭ",
        "hebrew-calendar-m11-gen": "ابتىڭ",
        "hebrew-calendar-m12-gen": "ايلولدىڭ",
-       "unknown_extension_tag": "تانىلماعان كەڭەيتپە بەلگىسى «$1»",
        "version": "جۇيە نۇسقاسى",
        "version-extensions": "ورناتىلعان كەڭەيتىمدەر",
        "version-specialpages": "ارنايى بەتتەر",
        "version-parser-function-hooks": "قۇرىلىمدىق تالداتقىش جەتەلەرىنىڭ تۇزاقتارى",
        "version-hook-name": "تۇزاق اتاۋى",
        "version-hook-subscribedby": "تۇزاق تارتقىشتارى",
-       "version-version": "(نۇسقاسى: $1)",
+       "version-version": "($1)",
        "version-license": "لىيتسەنزىيياسى",
        "version-software": "ورناتىلعان باعدارلامالىق جاساقتاما",
        "version-software-product": "ٴونىم",
index f885ba1..835797f 100644 (file)
@@ -9,7 +9,10 @@
                        "GaiJin",
                        "Kaztrans",
                        "Balnur.s",
-                       "Нұрлан Рахымжанов"
+                       "Нұрлан Рахымжанов",
+                       "아라",
+                       "Macofe",
+                       "Batyrbek.kz"
                ]
        },
        "tog-underline": "Сілтеменің астын сызу:",
        "otherlanguages": "Басқа тілдерде",
        "redirectedfrom": "($1 бетінен бағытталған)",
        "redirectpagesub": "Бағыттау беті",
+       "redirectto": "Мына бетке бағытталған:",
        "lastmodifiedat": "Бұл беттің соңғы өзгертілген кезі: $2, $1.",
        "viewcount": "Бұл бет {{PLURAL:$1|бір рет|$1 уақыт}} қатыналған.",
        "protectedpage": "Қорғалған бет",
        "disclaimers": "Жауапкершіліктен бас тарту",
        "disclaimerpage": "Project:Жауапкершіліктен бас тарту",
        "edithelp": "Өндеу анықтамасы",
+       "helppage-top-gethelp": "Анықтама",
        "mainpage": "Басты бет",
        "mainpage-description": "Басты бет",
        "policy-url": "Project:Ережелер",
        "summary-preview": "Қысқаша түйіндемесін қарап шығу:",
        "subject-preview": "Тақырыбын/бас жолын қарап шығу:",
        "blockedtitle": "Қатысушы бұғатталған",
-       "blockedtext": "<strong>Қатысушы атыңыз не IP мекенжайыңыз бұғатталған.</strong>\n\n$1 деген әкімші бұғаттаған. \nКелтірілген себебі: <em>$2</em>.\n\n* Бұғаттаудың басталғаны: $8\n* Бұғаттаудың бітетіні: $6\n* Бұғаттау нысанасы: $7\n\nОсы бұғаттауды талқылау үшін $1 не өзге [[{{MediaWiki:Grouppage-sysop}}|әкімшімен]] байланыса аласыз.\n[[Special:Preferences|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын көрсетіп және де оны пайдаланудан бұғатталмаған жағдайда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.\nАғымдық IP мекенжайыңыз: $3, бұғатау нөмірі: #$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|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын көрсетіп және де оны пайдаланудан бұғатталмаған жағдайда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.\nАғымдық IP мекенжайыңыз: $3, бұғатау нөмірі: #$5.\nСұраным жасағанда осының екеуін де кірістіруіңізді сұраймыз.",
        "autoblockedtext": "IP мекенжайыңыз автоматты бұғатталған, себебі оны басқа қатысушы пайдаланған. Оны $1 есімді әкімші бұғаттаған\n\nКелтірілген себебі: \n:<em>$2</em>\n\n* Бұғаттаудың басталғаны: $8\n* Бұғаттаудың бітетіні: $6\n* Бұғаттау нысанасы: $7\n\nОсы бұғаттауды талқылау үшін $1 не басқа [[{{MediaWiki:Grouppage-sysop}}|әкімшімен]] байланыса аласыз.\n[[Special:Preferences|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын көрсеткен болсаңыз және де оны пайдаланудан бұғатталмаған жағдайда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.\nАғымдық IP мекенжайыңыз: $3, бұғатау нөмірі: $5.\nСұраным жасағанда осының екеуін де кірістіруіңізді сұраймыз.",
        "blockednoreason": "еш себебі келтірілмеген",
        "whitelistedittext": "Беттерді өңдеу үшін $1.",
        "rcshowhideanons": "Кірмегендерді $1",
        "rcshowhideanons-show": "көрсету",
        "rcshowhideanons-hide": "жасыру",
-       "rcshowhidepatr": "Ð\97еÑ\80Ñ\82Ñ\82елген өңдемелерді $1",
+       "rcshowhidepatr": "ТекÑ\81еÑ\80Ñ\96лген өңдемелерді $1",
        "rcshowhidepatr-show": "көрсету",
        "rcshowhidepatr-hide": "жасыру",
        "rcshowhidemine": "Өңдемелерімді $1",
        "number_of_watching_users_pageview": "[бақылаған $1 қатысушы]",
        "rc_categories": "Санаттарға шектеу (\"|\" белгісімен бөліктеңіз)",
        "rc_categories_any": "Кез келген",
-       "rc-change-size-new": "Өңдеуден кейінгі көлемі: $1{{PLURAL:$1|байт|байт}}",
+       "rc-change-size-new": "Өңдеуден кейінгі көлемі: $1 {{PLURAL:$1|байт|байт}}",
        "newsectionsummary": "/* $1 */ жаңа бөлім",
        "rc-enhanced-expand": "Толық ақпаратты көрсету",
        "rc-enhanced-hide": "Толық ақпаратты жасыру",
        "undeletehistory": "Егер бетті қалпына келтірсеңіз тарихындағы барлық түзетулер де қалпына келтіріледі. Егер жоюдан соң дәл солай атауымен жаңа бет басталса қалпына келтірілген түзетулер бұрынғы өңделу тарихында көрсетіледі.",
        "undeleterevdel": "Егер бұл үстіңгі бетте аяқталса, не файл түзетуі жарым-жартылай жойылған болса, жою болдырмауы орындалмайды.\nОсындай жағдайларда, ең жаңа жойылған түзетуін алып тастауыңыз не жасыруын болдырмауыңыз жөн.",
        "undeletehistorynoadmin": "Бұл бет жойылған.\nЖою себебі алдындағы өңдеген қатысушылар егжей-тегжейлерімен бірге төмендегі қысқаша мазмұндамасында көрсетілген.\nМына жойылған түзетулерін көкейкесті мәтіні тек әкімшілерге жетімді.",
-       "undelete-revision": "$4,  $5  ÐºÐµÐ·Ñ\96ндегÑ\96 $3 Ð¶Ð¾Ð¹ған $1 дегеннің жойылған түзетуі:",
+       "undelete-revision": "$4,  $5  ÐºÐµÐ·Ñ\96ндегÑ\96 $3 Ð¶Ð°Ñ\81аған $1 дегеннің жойылған түзетуі:",
        "undeleterevision-missing": "Жарамсыз не жоғалған түзету.\nСілтемеңіз жарамсыз, не түзету қалпына келтірілген, немесе мұрағаттан аласталған болуы мүмкін.",
        "undelete-nodiff": "Еш алдыңғы түзету табылмады.",
        "undeletebtn": "Қалпына келтір!",
        "importunknownsource": "Cырттан алынатын қайнар түрі белгісіз",
        "importcantopen": "Сырттан алынатын файл ашылмайды",
        "importbadinterwiki": "Жарамсыз уики-аралық сілтеме",
-       "importsuccess": "СÑ\8bÑ\80Ñ\82Ñ\82ан Ð°Ð»у аяқталды!",
+       "importsuccess": "Ð\98мпоÑ\80Ñ\82Ñ\82ау аяқталды!",
        "importnosources": "Уики-апару үшін сырттан алынатын еш қайнар көзі анықталмаған, және тарихын тікелей қотарып беруі өшірілген.",
        "importnofile": "Сырттан алынған файл жүктелген жоқ.",
        "importuploaderrorsize": "Импортталған файлдың жүктелуі сәтсіз болды. \nФайл рұқсат етілгеннен жүктеу өлшемінен үлкенірек.",
        "import-options-wrong": "Қате {{PLURAL:$2|параметр|параметр}}: <nowiki>$1</nowiki>",
        "importlogpage": "Сырттан алу журналы",
        "importlogpagetext": "Беттерді түзету тарихымен бірге сыртқы уикилерден әкімші ретінде алу.",
-       "import-logentry-upload": "«[[$1]]» дегенді файл жүктеу арқылы сырттан алды",
        "import-logentry-upload-detail": "$1 түзету",
-       "import-logentry-interwiki": "уики-апарылған $1",
        "import-logentry-interwiki-detail": "$2 дегеннен $1 түзету",
        "javascripttest": "JavaScript сынақталуда",
        "javascripttest-qunit-intro": "[$1 сынақтау құжаттамасын]  mediawiki.org-тен қара.",
        "markedaspatrollederror": "Зерттелді деп белгіленбейді",
        "markedaspatrollederrortext": "Зерттелді деп белгілеу үшін түзетуді келтіріңіз.",
        "markedaspatrollederror-noautopatrol": "Өз жасаған өзгерістеріңізді зерттелді деп белгілей алмайсыз.",
-       "patrol-log-page": "Ð\97еÑ\80Ñ\82Ñ\82еу журналы",
-       "log-show-hide-patrol": "$1 зерттеу журналы",
+       "patrol-log-page": "ТекÑ\81еÑ\80у журналы",
+       "log-show-hide-patrol": "$1 тексеру журналы",
        "deletedrevision": "Ескі түзетуін жойды: $1",
        "filedeleteerror-short": "Файл жою қатесі: $1",
        "filedeleteerror-long": "Файлды жойғанда қателер кездесті:\n\n$1",
        "just-now": "Дәл қазір",
        "hours-ago": "$1 {{PLURAL:$1|сағат|сағат}} бұрын",
        "minutes-ago": "$1 {{PLURAL:$1|минут|минут}} бұрын",
-       "seconds-ago": "$1 {{PLURAL:$1|секунт|секунт}} бұрын",
+       "seconds-ago": "$1 {{PLURAL:$1|секунд|секунд}} бұрын",
        "bad_image_list": "Пішімі төмендегідей:\n\nТек тізім даналары (* нышанымен басталытын жолдар) есептеледі.\nЖолдың бірінші сілтемесі жарамсыз суретке сілтеу жөн.\nСол жолдағы кейінгі әрбір сілтемелер ерен болып есептеледі, мысалы жол ішіндегі кездесетін суреті бар беттер.",
        "metadata": "Қосымша мәліметтер",
        "metadata-help": "Осы файлда қосымша мәліметтер қамтылған, файл жасалуына немесе цифрлық формаға айналдырылуына дижитал (сандық) аппарат не сканер қолданылған болуы ықтимал.\nЕгер осы файл негізгі күйінен өзгертілген болса кейбір егжей-тегжейлері өзгертілген файлға лайық болмас.",
        "version-parser-function-hooks": "Құрылымдық талдатқыш жетелерінің тұзақтары",
        "version-hook-name": "Тұзақ атауы",
        "version-hook-subscribedby": "Тұзақ тартқыштары",
-       "version-version": "(Нұсқасы: $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[аты жоқ]",
        "version-license": "MediaWiki Лицензиясы",
        "version-ext-license": "Лицензия",
        "revdelete-uname-unhid": "қатысушы есімі жасырылмаған",
        "revdelete-restricted": "әкімшілерге тиымдар қолдады",
        "revdelete-unrestricted": "әкімшілерден тиымдарды аластады",
+       "logentry-block-unblock": "$1 {{GENDER:$4|$3}} деген қатысушыны {{GENDER:$2|бұғатынан босатты}}",
        "logentry-move-move": "$1 $3 бетін $4 бетіне {{GENDER:$2|жылжытты}}",
        "logentry-move-move-noredirect": "$1 $3 бетін $4 бетіне {{GENDER:$2|жылжытты}} (айдатқыш қалдырмады)",
        "logentry-move-move_redir": "$1 $3 бетін $4 деген айдатқыш үстіне {{GENDER:$2|жылжытты}}",
        "logentry-rights-rights-legacy": "$1 $3 үшін топ мүшелігін {{GENDER:$2|өзгерті}}",
        "logentry-upload-upload": "$1 $3 файлын {{GENDER:$2|жүктеді}}",
        "logentry-upload-overwrite": "$1 $3 дегеннің жаңа нұсқасын {{GENDER:$2|жүктеді}}",
+       "log-name-managetags": "Тег басқару журналы",
        "rightsnone": "(ешқандай)",
        "revdelete-summary": "өңдеменің қысқаша мазмұндамасы",
-       "feedback-subject": "Тақырып:",
-       "feedback-message": "Хабарлама:",
-       "feedback-cancel": "Болдырмау",
-       "feedback-submit": "Кері байланысты жіберу",
        "feedback-adding": "Бетке кері байланыс қосуда...",
+       "feedback-cancel": "Болдырмау",
+       "feedback-close": "Жасалды",
        "feedback-error2": "Қате: Өңдеме сәтсіздікке ұшырады",
+       "feedback-message": "Хабарлама:",
+       "feedback-subject": "Тақырып:",
+       "feedback-submit": "Жіберу",
        "feedback-thanks": "Рахмет! Сіздің кері байланысыңыз \"[$2 $1]\" бетіне қойылды.",
-       "feedback-close": "Жасалды",
        "searchsuggest-search": "Іздеу",
        "searchsuggest-containing": "қамтылуда...",
        "api-error-badaccess-groups": "Сізге бұл уикиге файл жүктеуге рұқсат етілмеген.",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Мәндемелерін аластатып?",
        "expand_templates_generate_xml": "XML өңдету бұтақтарын көрсет",
-       "expand_templates_preview": "Қарап шығу"
+       "expand_templates_preview": "Қарап шығу",
+       "headline-anchor-title": "Бұл бөлімнің уики сілтемесі",
+       "special-characters-group-latin": "Латын",
+       "special-characters-group-latinextended": "Кеңейтілген латын",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Белгілер",
+       "special-characters-group-greek": "Грек",
+       "special-characters-group-cyrillic": "Кирилл",
+       "special-characters-group-arabic": "Араб",
+       "special-characters-group-arabicextended": "Кеңейтілген араб",
+       "special-characters-group-persian": "Парсы",
+       "special-characters-group-hebrew": "Иврит",
+       "special-characters-group-bangla": "Бангла",
+       "special-characters-group-tamil": "Тамил",
+       "special-characters-group-telugu": "Телугу",
+       "special-characters-group-sinhala": "Синхала",
+       "special-characters-group-gujarati": "Гуджарати",
+       "special-characters-group-devanagari": "Девангари",
+       "special-characters-group-thai": "Тай",
+       "special-characters-group-lao": "Лао",
+       "special-characters-group-khmer": "Кхмер",
+       "special-characters-title-endash": "дефис",
+       "special-characters-title-emdash": "сызықша",
+       "special-characters-title-minus": "минус белгісі"
 }
index 2cca3e1..7e62a68 100644 (file)
        "delete-toobig": "Bul bette baýtaq tüzetw tarïxı bar, $1 tüzetwden astam.\nBundaý betterdiñ joywı {{SITENAME}} torabın äldeqalaý üzip tastawına böget salw üşin tïımdalğan.",
        "delete-warning-toobig": "Bul bette baýtaq tüzetw tarïxı bar, $1 tüzetwden astam.\nBunıñ joywı {{SITENAME}} torabındağı derekqor äreketterdi üzip tastawın mümkin;\nbunı abaýlap ötkiziñiz.",
        "rollback": "Öñdemelerdi şegindirw",
-       "rollback_short": "Şegindirw",
        "rollbacklink": "şegindirw",
        "rollbackfailed": "Şegindirw sätsiz bitti",
        "cantrollback": "Öñdeme qaýtarılmadı;\nsoñğı üleskeri tek osı bettiñ bastawşısı boldı.",
        "version-parser-function-hooks": "Qurılımdıq taldatqış jeteleriniñ tuzaqtarı",
        "version-hook-name": "Tuzaq atawı",
        "version-hook-subscribedby": "Tuzaq tartqıştarı",
-       "version-version": "(Nusqası: $1)",
+       "version-version": "($1)",
        "version-license": "Lïcenzïyası",
        "version-software": "Ornatılğan bağdarlamalıq jasaqtama",
        "version-software-product": "Önim",
index b6cd802..bbea687 100644 (file)
@@ -14,7 +14,8 @@
                        "គីមស៊្រុន",
                        "តឹក ប៊ុនលី",
                        "វ័ណថារិទ្ធ",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "គូសបន្ទាត់ក្រោម​តំណភ្ជាប់៖",
        "delete-warning-toobig": "ទំព័រនេះមានប្រវត្តិកែប្រែធំលើសពី $1 {{PLURAL:$1|កំណែ|កំណែ}}។\n\nការលុបទំព័របែបនេះចោលអាចធ្វើអោយមានការរអាក់រអួលប្រតិបត្តិការរបស់មូលដ្ឋានទិន្នន័យក្នុង{{SITENAME}}។\n\nសូមបន្តសកម្មភាពនេះដោយប្រុងប្រយ័ត្ន។",
        "deleteprotected": "អ្នកមិនអាចលុបចោលទំព័រនេះបានទេព្រោះវាត្រូវបានការពារហើយ។",
        "rollback": "មូលត្រឡប់កំណែប្រែ",
-       "rollback_short": "មូលត្រឡប់",
        "rollbacklink": "មូលត្រឡប់",
        "rollbacklinkcount": "មូលត្រឡប់ $1 {{PLURAL:$1|កំណែប្រែ|កំណែប្រែ}}",
        "rollbacklinkcount-morethan": "មូលត្រឡប់ច្រើនជាង $1 {{PLURAL:$1|កំណែប្រែ|កំណែប្រែ}}",
        "import-upload": "ផ្ទុកឡើងទិន្នន័យ XML",
        "import-invalid-interwiki": "មិន​អាច​នាំ​ចូល​ពី​វិគី​ដែល​បាន​បញ្ជាក់​។",
        "importlogpage": "កំណត់ហេតុនៃការនាំចូល",
-       "import-logentry-upload": "បាននាំចូល [[$1]] ដោយការផ្ទុកឡើង ឯកសារ",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|កំណែ}}",
-       "import-logentry-interwiki": "បាននាំចូល$1ពីវិគីផ្សេងទៀត",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|កំណែ}} ពី $2",
        "tooltip-pt-userpage": "ទំព័រអ្នកប្រើប្រាស់​របស់អ្នក​",
        "tooltip-pt-mytalk": "ទំព័រពិភាក្សា​របស់អ្នក​",
        "version-mediahandlers": "កម្មវិធី​បើក​មេឌា​ (Media handlers)",
        "version-hook-name": "ឈ្មោះ​ Hook",
        "version-hook-subscribedby": "បានជាវ ជាប្រចាំ ដោយ",
-       "version-version": "(កំណែ $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[គ្មានឈ្មោះ]",
        "version-license": "អាជ្ញាបណ្ណ​មេឌាវិគី",
        "version-ext-license": "អាជ្ញាបណ្ណ",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|ត្រូវបានតំឡើង}}សមាជិកភាពពី $4 ជា $5 ដោយស្វ័យប្រវត្តិ",
        "rightsnone": "(ទទេ)",
        "revdelete-summary": "កែប្រែចំណារពន្យល់",
-       "feedback-subject": "កម្មវត្ថុ ៖",
-       "feedback-message": "សារ​៖",
-       "feedback-cancel": "បោះបង់​",
-       "feedback-submit": "ដាក់ស្នើមតិយោបល់",
        "feedback-adding": "កំពុងបន្ថែមមតិយោបល់ទៅលើទំព័រ...",
+       "feedback-cancel": "បោះបង់​",
+       "feedback-close": "រួចរាល់",
        "feedback-error1": "បញ្ហា៖ លទ្ធផលមិនស្គាល់ពី API",
        "feedback-error2": "បញ្ហា៖ កែប្រែមិនបានសម្រេច",
        "feedback-error3": "បញ្ហា៖ គ្មានចម្លើយតបពី API",
+       "feedback-message": "សារ​៖",
+       "feedback-subject": "កម្មវត្ថុ ៖",
+       "feedback-submit": "ដាក់ស្នើ",
        "feedback-thanks": "សូមអរគុណ! មតិយោបល់របស់អ្នកត្រូវបានដាក់ផ្សាយនៅលើទំព័រ \"[$2 $1]\"។",
-       "feedback-close": "រួចរាល់",
        "searchsuggest-search": "ស្វែងរក​",
        "searchsuggest-containing": "ដែលមានពាក្យ...",
        "api-error-badaccess-groups": "អ្នកគ្មានការអនុញ្ញាតអោយផ្ទុកឯកសារឡើងទៅក្នុងវិគីនេះទេ។",
        "expand_templates_output": "លទ្ធផល",
        "expand_templates_ok": "យល់ព្រម",
        "expand_templates_remove_comments": "ដកចេញ វិចារនានា",
-       "expand_templates_preview": "បង្ហាញការមើលជាមុន"
+       "expand_templates_preview": "បង្ហាញការមើលជាមុន",
+       "special-characters-group-latin": "អក្សរឡាតាំង",
+       "special-characters-group-latinextended": "អក្សរឡាតាំងផ្សេងទៀត",
+       "special-characters-group-ipa": "អក្ខរក្រមសំលេងអន្តរជាតិ",
+       "special-characters-group-symbols": "សញ្ញា",
+       "special-characters-group-greek": "អក្សរក្រិច",
+       "special-characters-group-cyrillic": "អក្សរស៊ីរីល",
+       "special-characters-group-arabic": "អក្សរអារ៉ាប់",
+       "special-characters-group-arabicextended": "អក្សរអារ៉ាប់បន្ថែម",
+       "special-characters-group-persian": "អក្សរពែក្ស",
+       "special-characters-group-hebrew": "អក្សរហេប៊្រូ",
+       "special-characters-group-bangla": "អក្សរបេងក្លា",
+       "special-characters-group-telugu": "អក្សរតិលគ្គ",
+       "special-characters-group-sinhala": "អក្សរស៊ិនហាឡា",
+       "special-characters-group-gujarati": "អក្សរគុចរទី",
+       "special-characters-group-thai": "អក្សរថៃ",
+       "special-characters-group-lao": "អក្សរឡាវ",
+       "special-characters-group-khmer": "អក្សរខ្មែរ"
 }
index cb9be3c..cbd155a 100644 (file)
@@ -25,7 +25,7 @@
                        "아라"
                ]
        },
-       "tog-underline": "ಲಿà²\82à²\95à³\81ಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ",
+       "tog-underline": "à²\95à³\8aà²\82ಡಿಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ",
        "tog-hideminor": "ಚಿಕ್ಕಪುಟ್ಟ ಬದಲಾವಣೆಗಳನ್ನು ಅಡಗಿಸಿ",
        "tog-hidepatrolled": "ಪಹರೆಯಲ್ಲಿ ಆದ ಸಂಪಾದನೆಗಳನ್ನು ಇತ್ತೀಚೆಗಿನ ಬದಲಾವಣೆಗಳಲ್ಲಿ ಅಡಗಿಸು",
        "tog-newpageshidepatrolled": "ಪಹರೆಯಲ್ಲಿ ಆದ ಪುಟಗಳನ್ನು ಹೊಸ ಪುಟಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಅಡಗಿಸು",
        "otherlanguages": "ಇತರ ಭಾಷೆಗಳು",
        "redirectedfrom": "($1 ಇಂದ ಪುನರ್ನಿರ್ದೇಶಿತ)",
        "redirectpagesub": "ಪುನರ್ನಿರ್ದೇಶನ ಪುಟ",
+       "redirectto": "ಪುನರ್ನಿರ್ದೇಶನ ಇದಕ್ಕೆ:",
        "lastmodifiedat": "ಈ ಪುಟವನ್ನು ಕೊನೆಯಾಗಿ $2, $1 ರಂದು ಬದಲಾಯಿಸಲಾಗಿತ್ತು.",
        "viewcount": "ಈ ಪುಟವನ್ನು {{PLURAL:$1|೧ ಬಾರಿ|$1 ಬಾರಿ}} ವೀಕ್ಷಿಸಲಾಗಿದೆ.",
        "protectedpage": "ಸಂರಕ್ಷಿತ ಪುಟ",
        "currentrev": "ಈಗಿನ ತಿದ್ದುಪಡಿ",
        "currentrev-asof": "ಅತ್ಯಂತ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿ ($1)",
        "revisionasof": "$1 ದಿನದ ಆವೃತ್ತಿ",
-       "revision-info": "$2 ಅವರು $1 ಅಂದು ಸಂಪಾದನೆ ಮಾಡಿದ ನಂತರದ ಆವೃತ್ತಿ",
+       "revision-info": "ಬದಲಾವಣೆ $1 ರಂತೆ {{GENDER:$6|$2}} ಇವರಿಂದ $7",
        "previousrevision": "←ಹಿಂದಿನ ಪರಿಷ್ಕರಣೆ",
        "nextrevision": "ಮುಂದಿನ ಪರಿಷ್ಕರಣೆ",
        "currentrevisionlink": "ಈಗಿನ ಪರಿಷ್ಕರಣೆ",
        "rcshowhidebots": "ಬಾಟ್‍ಗಳನ್ನು $1",
        "rcshowhidebots-show": "ತೊರಿಸಿ",
        "rcshowhidebots-hide": "ಮರೆ ಮಾಡಿ",
-       "rcshowhideliu": "ಲಾಗ್-ಇನ್ ಆಗಿರುವ ಸದಸ್ಯರು $1",
+       "rcshowhideliu": "$1 ನೊಂದಾಯಿತ ಬಳಕೆದಾರರು",
        "rcshowhideliu-show": "ತೊರಿಸಿ",
        "rcshowhideliu-hide": "ಮರೆ ಮಾಡಿ",
        "rcshowhideanons": "ಅನಾಮಧೇಯ ಸದಸ್ಯರು $1",
        "number_of_watching_users_pageview": "[$1 ವೀಕ್ಷಿಸುತ್ತಿರುವ {{PLURAL:$1|ಸದಸ್ಯ|ಸದಸ್ಯರು}}]",
        "rc_categories": "ವರ್ಗಗಳಿಗೆ ಮಾತ್ರ ಸೀಮಿತವಾಗಿಸು (\"|\" ಇಂದ ಬೇರ್ಪಡಿಸು)",
        "rc_categories_any": "ಯಾವುದೇ",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} ಬದಲಾವಣೆಯ ನಂತರ change",
        "newsectionsummary": "/* $1 */ ಹೊಸ ವಿಭಾಗ",
        "rc-enhanced-expand": "ವಿವರಗಳನ್ನು ತೋರಿಸು (JavaScript ಬೇಕಾಗುತ್ತದೆ)",
        "rc-enhanced-hide": "ವಿವರಗಳನ್ನು ಅಡಗಿಸು",
        "suppress": "ನಿಗಾ ಇಡುವವ",
        "booksources": "ಪುಸ್ತಕಗಳ ಮೂಲ",
        "booksources-search-legend": "ಪುಸ್ತಕ ಮೂಲಗಳಿಗೆ ಹುಡುಕು",
+       "booksources-search": "ಹುಡುಕು",
        "specialloguserlabel": "ಸದಸ್ಯ:",
        "speciallogtitlelabel": "ಶೀರ್ಷಿಕೆ:",
        "log": "ದಾಖಲೆಗಳು",
        "deletereasonotherlist": "ಇತರ ಕಾರಣ",
        "deletereason-dropdown": "*ಸಾಮಾನ್ಯ ಅಳಿಸುವಿಕೆಯ ಕಾರಣಗಳು\n** ಸಂಪಾದಕರ ಕೋರಿಕೆ\n** ಕೃತಿಸ್ವಾಮ್ಯತೆಯ ಉಲ್ಲಂಘನೆ\n** Vandalism",
        "delete-edit-reasonlist": "ಅಳಿಸುವಿಕೆ ಕಾರಣಗಳನ್ನು ಸಂಪಾದಿಸು",
-       "rollback_short": "ತೊಡೆದುಹಾಕು",
        "rollbacklink": "ತೊಡೆದುಹಾಕು",
        "protectlogpage": "ಸಂರಕ್ಷಣೆ ದಿನಚರಿ",
        "protectedarticle": "\"[[$1]]\" ಸಂರಕ್ಷಿಸಲಾಗಿದೆ.",
        "import-noarticle": "ಆಮದು ಮಾಡಲು ಯಾವ ಪುಟವೂ ಇಲ್ಲ!",
        "import-nonewrevisions": "ಎಲ್ಲಾ ಬದಲಾವಣೆಗಳನ್ನೂ ಮುಂಚೆಯೆ ಆಮದು ಮಾಡಲಾಗಿದೆ.",
        "importlogpage": "ಆಮದುಗಳ ದಾಖಲೆ",
-       "import-logentry-upload": "ಫೈಲು ಅಪ್ಲೋಡ್ ಮೂಲಕ [[$1]] ಅನ್ನು ಆಮದು ಮಾಡಲಾಗಿದೆ",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಗಳು}}",
        "tooltip-pt-userpage": "ನಿಮ್ಮ ಸದಸ್ಯ ಪುಟ",
        "tooltip-pt-anonuserpage": "ನೀವು ಸಂಪಾದನೆ ಮಾಡುತ್ತಿರುವ ipಯ ಬಳಕೆದಾರ ಪುಟ",
        "tooltip-pt-mycontris": "ನಿಮ್ಮ ಕಾಣಿಕೆಗಳ ಪಟ್ಟಿ",
        "tooltip-pt-login": "ನೀವು ಲಾಗ್ ಇನ್ ಆಗಬೇಕೆಂದು ಕೋರುತ್ತೇವೆ, ಆದರೆ ಅದು ಖಡ್ಡಾಯ ಏನು ಅಲ್ಲ.",
        "tooltip-pt-logout": "ಲಾಗ್ ಔಟ್",
+       "tooltip-pt-createaccount": "ನೀವು ಹೊಸ ಖಾತೆಯನ್ನು ತೆರೆದು ಲಾಗಿನ್ ಆಗುವುದನ್ನು ಹುರಿದುಂಬಿಸುತ್ತೇವೆ; ಆದಾಗ್ಯೂ, ಇದು ಅವಶ್ಯವೇನಿಲ್ಲ",
        "tooltip-ca-talk": "ಮಾಹಿತಿ ಪುಟದ ಬಗ್ಗೆ ಚರ್ಚೆ",
        "tooltip-ca-edit": "ಈ ಪುಟವನ್ನು ನೀವು ಸಂಪಾದಿಸಬಹುದು. ಉಳಿಸುವ ಮುನ್ನ ಮುನ್ನೋಟವನ್ನು ಉಪಯೋಗಿಸಿ.",
        "tooltip-ca-addsection": "ಹೊಸ ವಿಭಾಗವನ್ನು ಪ್ರಾರಂಭಿಸಿ",
        "others": "ಇತರರು",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|ಸದಸ್ಯ|ಸದಸ್ಯರು}} $1",
        "creditspage": "ಪುಟದ ಗೌರವಗಳು",
+       "simpleantispam-label": "ಆಂಟಿ-ಸ್ಪ್ಯಾಮ್ ಪರೀಕ್ಷೆ.\nಇದನ್ನು ತುಂಬ <strong>ಬೇಡಿ</strong>!",
        "pageinfo-toolboxlink": "ಪುಟದ ಮಾಹಿತಿ",
        "pageinfo-redirectsto": "ಪುನರ್ನಿರ್ದೇಶನ:",
        "deletedrevision": "ಹಳೆ ಆವೃತ್ತಿ $1 ಅನ್ನು ಅಳಿಸಲಾಗಿದೆ",
        "file-info-size": "$1 × $2 ಚಿತ್ರಬಿಂದು, ಫೈಲಿನ ಗಾತ್ರ: $3, MIME ಪ್ರಕಾರ: $4",
        "file-nohires": "ಇದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ವಿವರವಾದ ನೋಟ ಇಲ್ಲ.",
        "svg-long-desc": "SVG ಫೈಲು, ಸುಮಾರಾಗಿ $1 × $2 ಚಿತ್ರಬಿಂದುಗಳು, ಫೈಲಿನ ಗಾತ್ರ: $3",
-       "show-big-image": "ಅತಿ ಹೆಚ್ಚು ವಿವರವಾದ ನೋಟ",
+       "show-big-image": "ಮೂಲ ಕಡತ",
+       "show-big-image-size": "$1 × $2 ಪಿಕ್ಸೆಲ್‌ಗಳು",
        "newimages": "ಹೊಸ ಫೈಲುಗಳ ಪ್ರದರ್ಶನ",
        "imagelisttext": "ಕೆಳಗೆ ಇರುವುದು '''$1''' {{PLURAL:$1|ಫೈಲಿನ|ಫೈಲುಗಳ}} ಪಟ್ಟಿ, $2 ಏರ್ಪಾಟಾಗಿದೆ.",
        "newimages-summary": "ಈ ವಿಶೇಷ ಪುಟವು ಕೊನೆಯದಾಗಿ ಅಪ್ಲೋಡ್ ಆಗಿರುವ ಫೈಲುಗಳನ್ನು ತೋರುತ್ತದೆ",
        "exif-usercomment": "ಬಳಕೆದಾರನ ಟಿಪ್ಪಣಿ",
        "exif-relatedsoundfile": "ಸಂಬಂಧಿತ ಧ್ವನಿ ಫೈಲು",
        "exif-datetimeoriginal": "ಮಾಹಿತಿ ಸೃಷ್ಟಿಯಾದ ದಿನಾಂಕ ಮತ್ತು ಕಾಲ",
+       "exif-datetimedigitized": "ಗಣಕೀಕರಣದ ದಿನಾಂಕ ಮತ್ತು ಸಮಯ",
        "exif-exposuretime-format": "$1 ಕ್ಷಣ ($2)",
        "exif-fnumber": "F ಸಂಖ್ಯೆ",
        "exif-brightnessvalue": "ಪ್ರಕಾಶತೆ",
        "exif-copyrighted": "ಕೃತಿಸ್ವಾಮ್ಯತೆಯ ಸ್ಥಿತಿ",
        "exif-copyrightowner": "ಕೃತಿಸ್ವಾಮ್ಯತೆಯನ್ನು ಹೊಂದಿರುವವರು",
        "exif-unknowndate": "ದಿನಾಂಕ ತಿಳಿದಿಲ್ಲ",
+       "exif-orientation-1": "ಸಾಧಾರಣ",
        "exif-orientation-3": "180° ತಿರುಗಿಸಲ್ಪಟ್ಟಿದೆ",
        "exif-componentsconfiguration-0": "ಅಸ್ಥಿತ್ವದಲ್ಲಿ ಇಲ್ಲ",
        "exif-meteringmode-0": "ತಿಳಿದಿಲ್ಲ",
        "watchlisttools-view": "ಸೂಚಿಸಲ್ಪಟ್ಟ ಬದಲಾವಣೆಗಳನ್ನು ವೀಕ್ಷಿಸಿ",
        "watchlisttools-edit": "ವೀಕ್ಷಣಾಪಟ್ಟಿಯನ್ನು ನೋಡು ಮತ್ತು ಸಂಪಾದಿಸು",
        "watchlisttools-raw": "ಮೂಲ ವೀಕ್ಷಣಾಪಟ್ಟಿಯನ್ನು ಸಂಪಾದಿಸು",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ಚರ್ಚೆ]])",
        "version": "ಆವೃತ್ತಿ",
        "version-specialpages": "ವಿಶೇಷ ಪುಟಗಳು",
        "version-other": "ಇತರ",
-       "version-version": "(ಆವೃತ್ತಿ $1)",
+       "version-version": "($1)",
        "version-software": "ಸಂಸ್ಥಾಪಿಸಲಾಗಿರುವ ತಂತ್ರಾಂಶ",
        "version-software-product": "ಉತ್ಪನ್ನ",
        "version-software-version": "ಆವೃತ್ತಿ",
        "specialpages-group-pages": "ಪುಟಗಳ ಪಟ್ಟಿ",
        "specialpages-group-redirects": "ವಿಶೇಷ ಪುಟಗಳನ್ನು ಪುನರ್ನಿರ್ದೇಶಿಸಲಾಗುತ್ತಿದೆ",
        "blankpage": "ಖಾಲಿ ಪುಟ",
-       "tag-filter": "[[ವಿಶà³\87ಷ:ತಳà³\81à²\95à³\81à²\97ಳà³\81|ತಳà³\81à²\95à³\81]] ಶೋಧಕ:",
+       "tag-filter": "[[ವಿಶà³\87ಷ:à²\9fà³\8dಯಾà²\97à³\8dâ\80\8cà²\97ಳà³\81|à²\9fà³\8dಯಾà²\97à³\8d]] ಶೋಧಕ:",
        "tag-filter-submit": "ಶೋಧಕ",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ಟ್ಯಾಗ್|ಟ್ಯಾಗ್‌ಗಳು}}]]: $2)",
        "tags-title": "ಅಂಕಿತಗಳು",
        "tags-tag": "ಅಂಕಿತ ನಾಮ",
        "tags-active-header": "ಸಕ್ರಿಯ?",
        "htmlform-selectorother-other": "ಇತರ",
        "htmlform-no": "ಇಲ್ಲ",
        "htmlform-yes": "ಹೌದು",
+       "logentry-delete-delete": "$1 {{GENDER:$2|ಅಳಿಸಲಾಯಿತು}} ಪುಟ $3",
        "revdelete-restricted": "ನಿರ್ವಾಹಕರಿಗೆ ನಿಬಂಧನೆಗಳನ್ನು ಅನ್ವಯಿಸಲಾಯಿತು",
        "revdelete-unrestricted": "ನಿರ್ವಾಹಕರ ನಿಬಂಧನೆಗಳನ್ನು ತೆಗೆಯಲಾಯಿತು",
+       "logentry-move-move": "$1 $3 ಪುಟವನ್ನು $4 ಕ್ಕೆ {{GENDER:$2|ಸರಿಸಿದ್ದಾರೆ}}",
+       "logentry-newusers-create": "ಬಳಕೆದಾರ ಖಾತೆ $1 ನ್ನು {{GENDER:$2|ಸೃಷ್ಟಿಸಲಾಯಿತು}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ಅಪ್ಲೋಡ್ ಮಾಡಿದ್ದಾರೆ}} $3",
        "rightsnone": "(ಯಾವೂ ಇಲ್ಲ)",
        "revdelete-summary": "ಸಂಪಾದನೆಯ ತಾತ್ಪರ್ಯ",
-       "feedback-subject": "ವಿಷಯ:",
        "feedback-message": "ಸಂದೇಶ:",
+       "feedback-subject": "ವಿಷಯ:",
+       "searchsuggest-search": "ಹುಡುಕು",
        "duration-seconds": "$1 {{PLURAL:$1|ಕ್ಷಣ|ಕ್ಷಣಗಳು}}",
        "duration-minutes": "$1 {{PLURAL:$1|ನಿಮಿಷ|ನಿಮಿಷಗಳು}}",
        "duration-hours": "$1 {{PLURAL:$1|ಘಂಟೆ|ಘಂಟೆಗಳು}}",
        "duration-decades": "$1 {{PLURAL:$1|ದಶಕ|ದಶಕಗಳು}}",
        "duration-centuries": "$1 {{PLURAL:$1|ಶತಮಾನ|ಶತಮಾನಗಳು}}",
        "duration-millennia": "$1 {{PLURAL:$1|ಸಹಸ್ರಮಾನ|ಸಹಸ್ರಮಾನಗಳು}}",
-       "expand_templates_preview": "ಮುನ್ನೋಟ"
+       "expand_templates_preview": "ಮುನ್ನೋಟ",
+       "special-characters-group-latin": "ಲ್ಯಾಟಿನ",
+       "special-characters-group-greek": "ಗ್ರೀಕ್",
+       "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 6444df3..7c18c02 100644 (file)
@@ -44,7 +44,8 @@
                        "Namoroka",
                        "양념파닭",
                        "콩가루",
-                       "Twotwo2019"
+                       "Twotwo2019",
+                       "SeoJeongHo"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "disclaimers": "면책 조항",
        "disclaimerpage": "Project:면책 조항",
        "edithelp": "편집 도움말",
+       "helppage-top-gethelp": "도움말",
        "mainpage": "대문",
        "mainpage-description": "대문",
        "policy-url": "Project:정책",
        "readonly_lag": "슬레이브 데이터베이스가 마스터 서버의 자료를 새로 고치는 중입니다. 데이터베이스가 자동으로 잠겨 있습니다.",
        "internalerror": "내부 오류",
        "internalerror_info": "내부 오류: $1",
+       "internalerror-fatal-exception": "종류 \"$1\"에서 심각한 오류",
        "filecopyerror": "\"$1\" 파일을 \"$2\"로 복사할 수 없습니다.",
        "filerenameerror": "\"$1\" 파일을 \"$2\"로 옮길 수 없습니다.",
        "filedeleteerror": "\"$1\" 파일을 삭제할 수 없습니다.",
        "virus-badscanner": "잘못된 설정: 알 수 없는 바이러스 검사기: '''$1'''",
        "virus-scanfailed": "검사 실패 (코드 $1)",
        "virus-unknownscanner": "알 수 없는 안티 바이러스:",
-       "logouttext": "<strong>ì§\80ê¸\88 ë¡\9cê·¸ì\95\84ì\9b\83í\96\88ì\8aµë\8b\88ë\8b¤.</strong>\n\në¸\8cë\9d¼ì\9a°ì \80 ìº\90ì\8b\9c를 ì§\80ì\9a°ì§\80 ì\95\8aì\9c¼ë©´ ì\9d¼ë¶\80 ë¬¸ì\84\9cì\97\90ì\84\9c ë¡\9cê·¸ì\9d¸ì\9d´ ë\90\98ì\96´ ì\9e\88ë\8a\94 ê²\83ì²\98ë\9f¼ ë³´ì\9d¼ ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤.",
+       "logouttext": "<strong>ì\9d´ì \9c ë¡\9cê·¸ì\95\84ì\9b\83í\96\88ì\8aµë\8b\88ë\8b¤.</strong>\n\në¸\8cë\9d¼ì\9a°ì \80 ìº\90ì\8b\9c를 ì§\80ì\9a¸ ë\95\8cê¹\8cì§\80 ì\9d¼ë¶\80 ë¬¸ì\84\9cì\97\90ì\84\9c ì\95\84ì§\81 ë¡\9cê·¸ì\9d¸ì\9d´ ë\90\98ì\96´ ì\9e\88ë\8a\94 ê²\83ì²\98ë\9f¼ ë³´ì\9d¼ ì\88\98 ì\9e\88ì\9d\8cì\97\90 ì\9c ì\9d\98í\95\98ì\84¸ì\9a\94.",
        "welcomeuser": "$1님, 환영합니다!",
        "welcomecreation-msg": "계정이 만들어졌습니다.\n[[Special:Preferences|{{SITENAME}} 사용자 환경 설정]]을 바꿀 수 있습니다.",
        "yourname": "사용자 이름:",
        "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이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
        "autoblockedtext": "당신의 IP 주소는 $1 사용자가 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.\n차단된 이유는 다음과 같습니다:\n\n:$2\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 \"이메일 보내기\" 기능을 사용할 수 있습니다. 또한 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n\n현재 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
        "notextmatches": "해당하는 문서 없음",
        "prevn": "이전 {{PLURAL:$1|$1개}}",
        "nextn": "다음 {{PLURAL:$1|$1개}}",
+       "prev-page": "전 페이지",
+       "next-page": "다음 페이지",
        "prevn-title": "이전 {{PLURAL:$1|결과}} $1개",
        "nextn-title": "다음 {{PLURAL:$1|결과}} $1개",
        "shown-title": "쪽마다 {{PLURAL:$1|결과}} $1개씩 보기",
        "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|일}}",
        "recentchanges-summary": "이 페이지에서 위키의 최근 바뀜을 추적합니다.",
        "recentchanges-noresult": "지정한 조건과 일치하는 주어진 기간 동안 바뀜이 없습니다.",
        "recentchanges-feed-description": "이 피드에 위키의 최근 바뀜을 추적합니다.",
-       "recentchanges-label-newpage": "새로 만든 문서",
+       "recentchanges-label-newpage": "새 문서",
        "recentchanges-label-minor": "사소한 편집",
        "recentchanges-label-bot": "봇이 수행한 편집",
        "recentchanges-label-unpatrolled": "아직 점검하지 않은 편집",
        "recentchanges-label-plusminus": "바이트로 표기된 바뀐 문서 크기",
        "recentchanges-legend-heading": "'''범례:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|새 문서 목록]]도 보세요)",
-       "recentchanges-legend-plusminus": "(''±123'')",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "아래는 <strong>$3, $4</strong>부터 시작하는 {{PLURAL:$5|바뀜이 있습니다}}. (최대 <strong>$1</strong>개가 보여집니다)",
        "rclistfrom": "$3 $2부터 시작하는 새로 바뀐 문서 보기",
        "rcshowhideminor": "사소한 편집을 $1",
        "namespace": "이름공간:",
        "invert": "선택 반전",
        "tooltip-invert": "선택한 이름공간(선택되어 있다면 관련된 이름공간도 포함)에 있는 문서의 바뀜을 숨기려면 이 상자를 선택하세요",
+       "tooltip-whatlinkshere-invert": "이 박스를 체크하여 특정 이름공간의 문서에 대한 링크를 숨깁니다.",
        "namespace_association": "관련된 이름공간",
        "tooltip-namespace_association": "선택한 이름공간과 관련된 토론이나 본문 이름공간을 포함하려면 이 상자를 선택하세요",
        "blanknamespace": "(일반)",
        "thumbnail_image-failure-limit": "여기에 이 섬네일을 렌더하는 데 최근에 너무 많이 실패한 시도($1 이상)가 있습니다.\n나중에 다시 시도하세요.",
        "import": "문서 가져오기",
        "importinterwiki": "다른 위키에서 문서 가져오기",
-       "import-interwiki-text": "문ì\84\9c를 ê°\80ì ¸ì\98¬ ì\9c\84í\82¤ë¥¼ ì\84 í\83\9dí\95\98ê³  ë¬¸ì\84\9c ì \9c목ì\9d\84 ì\9e\85ë ¥í\95´ì£¼ì\84¸ì\9a\94.\ní\8e¸ì§\91 ë\82 ì§\9cì\99\80 í\8e¸ì§\91ì\9e\90ì\9d\98 ì\9d´ë¦\84ì\9d´ ë³´ì¡´ë\90  ê²\83ì\9e\85ë\8b\88ë\8b¤.\n모ë\93  ê°\80ì ¸ì\98¤ê¸°ë\8a\94 [[Special:Log/import|ê°\80ì ¸ì\98¤ê¸° ê¸°ë¡\9d]]ì\97\90 ê¸°ë¡\9dë\90  ê²\83ì\9e\85니다.",
+       "import-interwiki-text": "문ì\84\9c를 ê°\80ì ¸ì\98¬ ì\9c\84í\82¤ë¥¼ ì\84 í\83\9dí\95\98ê³  ë¬¸ì\84\9c ì \9c목ì\9d\84 ì\9e\85ë ¥í\95´ì£¼ì\84¸ì\9a\94.\ní\8e¸ì§\91 ë\82 ì§\9cì\99\80 í\8e¸ì§\91ì\9e\90ì\9d\98 ì\9d´ë¦\84ì\9d´ ë³´ì¡´ë\90  ê²\83ì\9e\85ë\8b\88ë\8b¤.\n모ë\93  ê°\80ì ¸ì\98¤ê¸°ë\8a\94 [[Special:Log/import|ê°\80ì ¸ì\98¤ê¸° ê¸°ë¡\9d]]ì\97\90 ê¸°ë¡\9dë\90©니다.",
        "import-interwiki-sourcewiki": "원본 위키:",
        "import-interwiki-sourcepage": "원본 문서:",
        "import-interwiki-history": "이 문서의 모든 역사를 가져오기",
        "importcantopen": "파일을 열 수 없습니다.",
        "importbadinterwiki": "인터위키 링크가 잘못되었습니다.",
        "importsuccess": "가져오기 완료!",
-       "importnosources": "문서를 가져올 출처가 정의되지 않았고 문서 역사 올리기가 비활성화되었습니다.",
+       "importnosources": "문서를 가져올 출처 위키가 정의되지 않았고 문서 역사 올리기가 비활성화되었습니다.",
        "importnofile": "가져오기 파일이 올려지지 않았습니다.",
        "importuploaderrorsize": "파일 올리기를 통한 가져오기에 실패했습니다.\n파일이 허용된 크기 제한보다 큽니다.",
        "importuploaderrorpartial": "가져오기 파일을 올리는 데 실패하였습니다.\n파일이 부분적으로만 올려졌습니다.",
        "import-rootpage-nosubpage": "루트 문서의 \"$1\" 이름공간은 하위 문서를 허용하지 않습니다.",
        "importlogpage": "가져오기 기록",
        "importlogpagetext": "다른 위키에서 가져온 문서 기록입니다.",
-       "import-logentry-upload": "사용자가 파일 올리기를 통해 [[$1]] 문서를 가져왔습니다",
        "import-logentry-upload-detail": "{{PLURAL:$1|판}} $1개를 가져왔습니다",
-       "import-logentry-interwiki": "$1 문서를 다른 위키에서 가져왔습니다",
        "import-logentry-interwiki-detail": "$2에서 {{PLURAL:$1|판}} $1개를 가져왔습니다",
        "javascripttest": "자바스크립트 테스트",
        "javascripttest-pagetext-noframework": "이 문서는 자바스크립트 테스트를 실행하기 위한 용도로 할당되어 있습니다.",
        "tooltip-preferences-save": "환경 설정 저장하기",
        "tooltip-summary": "짧은 요약을 적어주세요",
        "interlanguage-link-title": "$1 – $2",
-       "common.css": "/* 이 CSS 설정은 모든 스킨에 동일하게 적용됩니다 */",
+       "common.css": "/* 이 CSS 설정은 모든 스킨에 적용됩니다 */",
        "print.css": "/* 이 CSS 설정은 인쇄 출력 화면에 적용됩니다 */",
        "noscript.css": "/* 이 CSS 설정은 자바스크립트를 비활성화한 사용자에 적용됩니다 */",
        "group-autoconfirmed.css": "/* 이 CSS 설정은 자동 인증된 사용자에만 적용됩니다 */",
        "markaspatrolleddiff": "점검한 문서로 표시",
        "markaspatrolledtext": "이 문서를 점검한 것으로 표시",
        "markedaspatrolled": "점검한 문서로 표시",
-       "markedaspatrolledtext": "[[:$1]] ë¬¸ì\84\9cì\9d\98 ì\84 í\83\9dí\95\9c í\8c\90ì\9d\84 ì\88\9cì°°í\95\9c ê²\83ì\9c¼ë¡\9c í\91\9cì\8b\9cí\95\98ì\98\80습니다.",
+       "markedaspatrolledtext": "[[:$1]] ë¬¸ì\84\9cì\9d\98 ì\84 í\83\9dí\95\9c í\8c\90ì\9d\84 ì \90ê²\80í\95\9c ê²\83ì\9c¼ë¡\9c í\91\9cì\8b\9cí\96\88습니다.",
        "rcpatroldisabled": "최근 바뀜 점검 기능 비활성화됨",
        "rcpatroldisabledtext": "최근 바뀜 점검 기능은 현재 비활성화되어 있습니다.",
        "markedaspatrollederror": "점검한 것으로 표시할 수 없습니다.",
        "exif-compression-4": "CCITT 그룹-4 팩스 인코딩",
        "exif-compression-6": "JPEG (오래됨)",
        "exif-compression-8": "수축 (Adobe)",
-       "exif-compression-32773": "PackBits (매킨토시 RLE)",
+       "exif-compression-32773": "PackBits (Macintosh RLE)",
        "exif-compression-32946": "수축 (PKZIP)",
        "exif-copyrighted-true": "저작권의 보호를 받음",
        "exif-copyrighted-false": "저작권 상태를 설정하지 않음",
        "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-explanation": "기본적으로 새로 생성된 태그는 사용자와 봇이 사용할 수 있습니다.",
+       "tags-create-tag-name": "태그 이름:",
        "tags-create-reason": "이유:",
        "tags-create-submit": "만들기",
+       "tags-create-no-name": "태그 이름을 지정해야 합니다.",
+       "tags-create-invalid-chars": "태그 이름은 콤마 (<code>,</code>)나 슬래시 (<code>/</code>)를 포함할 수 없습니다.",
+       "tags-create-invalid-title-chars": "태그 이름은 문서 제목에 사용할 수 없는 이름으로는 쓸 수 없습니다.",
+       "tags-create-already-exists": "\"$1\" 태그가 이미 존재합니다.",
+       "tags-create-warnings-above": "태그 \"$1\"을 생성하려고 하였으나 {{PLURAL:$2|오류}}가 발생하였습니다.",
+       "tags-create-warnings-below": "태그 생성을 계속하시겠습니까?",
+       "tags-delete-title": "태그 삭제",
+       "tags-delete-explanation-initial": "\"$1\" 태그를 데이터베이스에서 삭제하려고 합니다.",
+       "tags-delete-explanation-in-use": "이 태그가 적용된 {{PLURAL:$2|$2 개의 판이나 로그 기록}}에서 삭제될 것입니다.",
+       "tags-delete-explanation-warning": "이 행위는 데이터베이스 관리자도 <strong>되돌릴 수 없으며</strong> <strong>취소할 수 없습니다.</strong>. 당신이 하려고 하고 있는 행동이 맞는지 확인하십시오.",
+       "tags-delete-explanation-active": "<strong>\"$1\" 태그는 활성화되어 있으며, 미래에도 적용될 것입니다.</strong> 이러한 행동을 방지하려면, 태그가 설정되도록 적용된 곳을 찾아, 비활성화하십시오.",
+       "tags-delete-reason": "이유:",
+       "tags-delete-not-found": "\"$1\" 태그가 존재하지 않습니다.",
+       "tags-activate-not-found": "\"$1\" 태그가 존재하지 않습니다.",
+       "tags-deactivate-reason": "이유:",
        "comparepages": "문서 비교",
        "compare-page1": "첫 번째 문서",
        "compare-page2": "두 번째 문서",
        "revdelete-uname-unhid": "사용자 이름 숨김 해제됨",
        "revdelete-restricted": "관리자에게 제한을 적용함",
        "revdelete-unrestricted": "관리자에 대한 제한을 해제함",
+       "logentry-block-block": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자를 $5 $6 설정으로 차단했습니다.",
+       "logentry-block-unblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 해제했습니다.",
+       "logentry-block-reblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 $5 $6 설정으로 변경했습니다.",
+       "logentry-suppress-block": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자를 $5 $6 설정으로 차단했습니다.",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 $5 $6 설정으로 변경했습니다.",
        "logentry-merge-merge": "$1 사용자가 $3 문서를 $4 안에 {{GENDER:$2|병합했습니다}} (판은 $5까지)",
        "logentry-move-move": "$1 사용자가 $3 문서를 $4 문서로 {{GENDER:$2|옮겼습니다}}",
        "logentry-move-move-noredirect": "$1 사용자가 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 {{GENDER:$2|옮겼습니다}}",
        "logentry-upload-upload": "$1 사용자가 $3 파일을 {{GENDER:$2|올렸습니다}}",
        "logentry-upload-overwrite": "$1 사용자가 $3의 새 판을 {{GENDER:$2|올렸습니다}}",
        "logentry-upload-revert": "$1 사용자가 $3 파일을 {{GENDER:$2|올렸습니다}}",
+       "log-name-managetags": "태그 관리 기록",
+       "log-description-managetags": "이 문서는 [[Special:Tags|태그]]에 관한 관리 작업의 목록입니다. 이 기록에는 관리자가 직접 실행한 동작만이 기록되며, 위키 소프트웨어에 의해 태그가 생성 및 삭제되는 경우는 기록되지 않습니다.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 만들었습니다",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 삭제하였습니다 ($5개 {{PLURAL:$5|판 및 기록}}에서 제거되었습니다)",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 사용자나 봇이 사용하도록 활성화시켰습니다",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 사용자나 봇이 사용하지 못하도록 비활성화시켰습니다",
        "rightsnone": "(없음)",
        "revdelete-summary": "편집 요약",
+       "feedback-adding": "문서에 피드백을 올리는 중...",
+       "feedback-back": "뒤로",
+       "feedback-bugcheck": "감사합니다! 혹시 해당 사항이 [$1 기존의 버그 보고서]에 올라와 있는지 확인해주세요.",
+       "feedback-bugnew": "확인했습니다. 새로운 버그 보고서를 작성합니다.",
        "feedback-bugornote": "기술적 문제를 구체적으로 설명할 준비가 되었다면 [$1 버그를 신고]해 주세요.\n아니면 아래에 쉬운 양식을 쓸 수 있습니다. 의견은 사용자 이름과 함께 \"[$3 $2]\"에 남겨질 것입니다.",
-       "feedback-subject": "제목:",
-       "feedback-message": "내용:",
        "feedback-cancel": "취소",
-       "feedback-submit": "피드백 제출",
-       "feedback-adding": "문서에 피드백을 올리는 중...",
+       "feedback-close": "완료",
+       "feedback-dialog-title": "피드백 제출",
+       "feedback-error-title": "오류",
        "feedback-error1": "오류: API 실행 결과를 인식할 수 없음",
        "feedback-error2": "오류: 편집 실패",
        "feedback-error3": "오류: API가 응답하지 않음",
+       "feedback-message": "내용:",
+       "feedback-subject": "제목:",
+       "feedback-submit": "제출",
+       "feedback-terms": "사용자 에이전트 정보가 나의 브라우저 정보, 운영 체제 버전을 포함하며 피드백과 함께 공개적으로 공유됨을 이해합니다.",
+       "feedback-termsofuse": "이용 약관을 준수하여 피드백을 제공할 것입니다.",
        "feedback-thanks": "감사합니다! \"[$2 $1]\" 문서에 의견을 남겼습니다.",
-       "feedback-close": "완료",
-       "feedback-bugcheck": "감사합니다! 혹시 해당 사항이 [$1 기존의 버그 보고서]에 올라와 있는지 확인해주세요.",
-       "feedback-bugnew": "확인했습니다. 새로운 버그 보고서를 작성합니다.",
+       "feedback-thanks-title": "감사합니다!",
+       "feedback-useragent": "사용자 에이전트:",
        "searchsuggest-search": "검색",
        "searchsuggest-containing": "다음 문자열 포함...",
        "api-error-badaccess-groups": "이 위키에 파일을 올릴 권한이 없습니다.",
        "json-error-utf8": "잘못된 형식의 UTF-8 문자, 올바르지 않게 인코딩되어 있을 수 있습니다",
        "json-error-recursion": "인코딩할 값에 하나 이상의 재귀 참조",
        "json-error-inf-or-nan": "인코딩할 값에 하나 이상의 NAN이나 INF 값",
-       "json-error-unsupported-type": "인코딩할 수 없는 유형의 값을 받았습니다"
+       "json-error-unsupported-type": "인코딩할 수 없는 유형의 값을 받았습니다",
+       "special-characters-group-latin": "라틴 문자",
+       "special-characters-group-latinextended": "확장 라틴 문자",
+       "special-characters-group-ipa": "IPA 문자",
+       "special-characters-group-symbols": "기호",
+       "special-characters-group-greek": "그리스 문자",
+       "special-characters-group-cyrillic": "키릴 문자",
+       "special-characters-group-arabic": "아랍 문자",
+       "special-characters-group-arabicextended": "아랍어 확장",
+       "special-characters-group-persian": "페르시아어",
+       "special-characters-group-hebrew": "히브리 문자",
+       "special-characters-group-bangla": "뱅골어",
+       "special-characters-group-tamil": "타밀어",
+       "special-characters-group-telugu": "텔루구어 문자",
+       "special-characters-group-sinhala": "싱할라 문자",
+       "special-characters-group-gujarati": "구자라트 문자",
+       "special-characters-group-devanagari": "데바나가리어",
+       "special-characters-group-thai": "타이어",
+       "special-characters-group-lao": "라오어",
+       "special-characters-group-khmer": "크메르어",
+       "special-characters-title-endash": "en 대시",
+       "special-characters-title-emdash": "em 대시",
+       "special-characters-title-minus": "빼기 기호"
 }
index 141312d..2c3b40c 100644 (file)
@@ -7,7 +7,8 @@
                        "Kaganer",
                        "Reedy",
                        "Къарачайлы",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Джибериулени черт:",
@@ -34,7 +35,7 @@
        "tog-shownumberswatching": "Бетни, кёзде тургъан тизмелерине къошханланы санын кёргюз",
        "tog-oldsig": "Бусагъатдагъы къол салыннган:",
        "tog-fancysig": "Къол салыуну энчи вики-тексти (автомат джибериусюз)",
-       "tog-uselivepreview": "Терк ал къарауну хайырландыр (экспериментал халда)",
+       "tog-uselivepreview": "Терк ал къарауну хайырландыр",
        "tog-forceeditsummary": "Тюрлендириуню ачыкълау тизгини бош къалса, билдир",
        "tog-watchlisthideown": "Кёзюмде тургъан бетден мени тюрлендириулерими джашыр",
        "tog-watchlisthidebots": "Кёзюмде тургъан бетден ботланы тюрлендириулерин джашыр",
        "otherlanguages": "Башха тилледе",
        "redirectedfrom": "(«$1» бетден джиберилгенди)",
        "redirectpagesub": "Башха бетге джибериучю бет",
+       "redirectto": "Бу бетге редирект:",
        "lastmodifiedat": "Бу бетни ахыр тюрленнгени: $2, $1.",
        "viewcount": "Бу бетге {{PLURAL:$1|бир|$1}} кере киргендиле.",
        "protectedpage": "Джакъланнган бет",
        "pool-queuefull": "Соруула джыйыучу толуду",
        "pool-errorunknown": "Билинмеген халат",
        "pool-servererror": "Пул санаучу къуллукъ ишлемеди ($1).",
+       "poolcounter-usage-error": "Хайырланыу халат: $1",
        "aboutsite": "{{SITENAME}} сайтны юсюнден",
        "aboutpage": "Project:Суратлау",
        "copyright": "Ичиндегиси,  $1 лицензиягъа кёре бериледи (башха белгиленмеген эсе).",
        "hidetoc": "джашыр",
        "collapsible-collapse": "джашыр",
        "collapsible-expand": "кёргюз",
+       "confirmable-confirm": "{{GENDER:$1|Базыбмыса}}?",
+       "confirmable-yes": "Хоу",
+       "confirmable-no": "Огъай",
        "thisisdeleted": "$1 къараргъа неда къайтарыргъа (тургъузтургъа)?",
        "viewdeleted": "$1 къараймыса?",
        "restorelink": "{{PLURAL:$1|джангыз бир кетерилген тюрлендириу|$1 кетерилген тюрлендириу}}",
        "databaseerror": "Информация базада халат",
        "databaseerror-textcl": "Билгиле базада халат чыкъды.",
        "databaseerror-query": "Соруулау: $1",
+       "databaseerror-function": "Функция: $1",
        "databaseerror-error": "Халат: $1",
        "laggedslavemode": "Эс бёлюгюз! Бу бетге ахыр джангыртыула болмазгъа боллукъдула.",
        "readonly": "Информация база джабыкъды",
        "userlogin-helplink2": "Кириуде болушлукъ",
        "userlogin-createanother": "Башха аккаунт къурау",
        "createacct-emailrequired": "Электрон почтаны адреси",
-       "createacct-emailoptional": "Электрон почтаны адреси (амалсыз тюлдю)",
-       "createacct-email-ph": "Электрон почта адресигизни джазыгъыз",
+       "createacct-emailoptional": "Email адресинг (амалсыз керек тюлдю)",
+       "createacct-email-ph": "Email адресинги джаз",
        "createacct-another-email-ph": "Электрон почтаны адресин джаз",
        "createaccountmail": "Эсде болмагъанлай генерация этилген болджаллы паролну хайырландырыу эмда берилген электрон почта адресге ийиу",
        "createacct-realname": "Керти атыгъыз (ажымсыз керек тюлдю)",
        "createacct-reason": "Чурум",
        "createacct-reason-ph": "Башха тергеу джазыуну нек къураусыз",
        "createacct-captcha": "Къоркъуусузлукъну тинтиу",
-       "createacct-imgcaptcha-ph": "Башыракъда кёрюннген текстни джаз",
+       "createacct-imgcaptcha-ph": "Башыракъдагъы текстни джаз",
        "createacct-submit": "Тергеу джазыуну къура",
        "createacct-another-submit": "Энтда бир аккаунт къурау",
        "createacct-benefit-heading": "{{SITENAME}} сизнича адамла бла къуралгъанды.",
        "changeemail-text": "Сизни e-mail адресигизни тюрлендирир ючюн бу форманы толтуругъуз. Тюрлениуню бегитир ючюн паролну джазаргъа керек боллукъду.",
        "changeemail-no-info": "Бу бетни кёрюр ючюн сиз системагъа тергеу джазыуугъуз (аккаунтугъуз) бла кирирге керексиз.",
        "changeemail-oldemail": "Почтаны бусагъатдагъы адреси:",
-       "changeemail-newemail": "ЭлекÑ\82Ñ\80он Ð¿Ð¾Ñ\87Ñ\82анÑ\8b Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ð°Ð´Ñ\80еÑ\81и:",
+       "changeemail-newemail": "Ð\94жангÑ\8b email Ð°Ð´Ñ\80еÑ\81:",
        "changeemail-none": "(джокъ)",
        "changeemail-password": "«{{SITENAME}}» проектде паролугъуз:",
        "changeemail-submit": "Адресни тюрлендир",
        "preview": "Ал къарау",
        "showpreview": "Ал къарау",
        "showdiff": "Къошулгъан тюрлениуле",
-       "anoneditwarning": "'''Эс бёлюгюз''': Сиз системагъа кирмегенсиз. Сизни IP-адресигиз бу бетни тюрлениу тарихине джазыллыкъды.",
+       "anoneditwarning": "<strong>Эс бёлюгюз!</strong> Сиз системагъа кирмегенсиз. Тюрлендириу этсегиз, сизни IP-адресигиз бу бетни тюрлениу тарихине джазыллыкъды эмда ачыкъ кёрюннюкдю. Сиз <strong>[$1 кирсегиз]</strong> неда <strong>[$2 тергеу джазыу къурасагъыз]</strong>, тюрлендириулеригиз аны орнуна къошулуучу атыгъыз бла байламлы боллукъдула эмда башха онглулукъларыгъыз боллукъду.",
        "anonpreviewwarning": "''Сиз тергеу джазыуугъуз бла кирмегенсиз. Бетде тюрлениулени сакълатсагъыз, бетни тюрлениу тарихине IP-адресигиз джазыллыкъды.''",
        "missingsummary": "'''Эс бёлюгюз.'''  Тюрлениулеге къысха ачыкълау джазмагъансыз.\nСиз «Бетни сакъла» дегеннге энтда бассагъыз, тюрлениуле комментарийлесиз сакъланныкъдыла.",
        "missingcommenttext": "Тюбю бла ачыкълау джазыгъыз.",
        "sectioneditnotsupported-text": "Бу бетде бёлюмлени тюрлендирирге болмайды.",
        "permissionserrors": "Эркинликлени халаты",
        "permissionserrorstext": "Бу операцияны этерге эркинлигигиз джокъду, былайдагъы {{PLURAL:$1|1=чурум|чурумла}} ючюн:",
-       "permissionserrorstext-withaction": "«'''$2'''» этерге амалыгъыз джокъду. {{PLURAL:$1|1=Чуруму|Чурумлары}}:",
+       "permissionserrorstext-withaction": "$2 операцияны этерге амалыгъыз джокъду, былайдагъы {{PLURAL:$1|1=чурум|чурумла}} ючюн:",
        "recreate-moveddeleted-warn": "'''Эс бёлюгюз! Сиз алгъын кетерилген бетни джангыдан къураргъа излейсиз'''\n\nБетни джангыдан къураргъа кереклигине сагъыш этигиз.\nБетни кетериу бла атын тюрлендирилиуню журналы тюбюнде кёргюзюлгенди.",
        "moveddeleted-notice": "Бу бет кетерилгенди.\nХапарлашдырыу ючюн тюбюрек кетериуле бла ат тюрлендириулени журналы берилгенди.",
        "log-fulllog": "Журналгъа толулай къара",
        "currentrev": "Бусагъатдагъы версия",
        "currentrev-asof": "Бусагъатдагъы версия, $1",
        "revisionasof": "$1 версиясы",
-       "revision-info": "$2 джанындан этилген $1 версия",
+       "revision-info": "$1 датадан версия; {{GENDER:$6|$2}}$7",
        "previousrevision": "← Алдагъы",
        "nextrevision": "Эндиги →",
        "currentrevisionlink": "Бусагъатдагъы версия",
        "searchrelated": "бейламлы",
        "searchall": "бютеу",
        "showingresults": "Тюбюрек №&nbsp;<strong>$2</strong> башлаб <strong>$1</strong> {{PLURAL:$1|1=эсеб|эсебле}} {{PLURAL:$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": "Атла аламда излеу:",
        "recentchanges-label-bot": "Бу тюрлендириуню бот этгенди",
        "recentchanges-label-unpatrolled": "Бу тюрлендириу алкъын патруль этилинмегенди",
        "recentchanges-label-plusminus": "Бетни ёлчеми быллай бир байтха тюрленнгенди",
+       "recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (къарагъыз: [[Special:NewPages|джангы бетлени тизмеси]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Тюбюрекде <strong>$2</strong> башлаб (<strong>$1</strong> дери) тюрлендириуле кёрюнедиле",
        "booksources": "Китабланы чыкъгъан джерлери",
        "booksources-search-legend": "Китабны юсюнден информация излеу",
        "booksources-isbn": "ISBN:",
+       "booksources-search": "Изле",
        "booksources-text": "Бу бетде джангы эмда эски китаб сатхан башха сайтлагъа джибериулени тизмеси барды, эм излеген китабларыгъызны юсюнден кёбюрек билги билирге боллукъсуз.",
        "booksources-invalid-isbn": "Берилген ISBN джараусуз кибик кёрюнеди; оригинал къайнакъдан кёчюрюлген заманда халатланы контроль этигиз.",
        "specialloguserlabel": "Толтуруучу:",
        "delete-toobig": "Бу бетни, $1 {{PLURAL:$1|1=версияла|версияла}} бла бек узун тарихи барды.\nБыллай бетлени кетерилиую, {{SITENAME}} сайтны бузмаз ючюн чекленгенди.",
        "delete-warning-toobig": "Бу бетни уллу тюрлендириу тарихи барды, $1 {{PLURAL:$1|1=версиядан|версиядан}} артыкъ.\nБуну кетериу {{SITENAME}} ишлеулени асхатыргъа боллукъду;\nэсгере андан ары ишлегиз.",
        "rollback": "Тюрлендириулени ызына ал",
-       "rollback_short": "Ызына ал",
        "rollbacklink": "ызына къайтарыу",
        "rollbacklinkcount": "$1 {{PLURAL:$1|тюрлендириуню ызына|тюрлендириуню ызларына}} тёнгерет",
        "rollbacklinkcount-morethan": "$1 тюрлендириуден кёбню {{PLURAL:$1|ызларына}} тёнгерет",
        "import-invalid-interwiki": "Белгиленнген викиден импорт этелирча тюлдю.",
        "importlogpage": "Импортну журналы",
        "importlogpagetext": "Башха викиледен бетлени тюрлендириу тарихин администраторланы импорт этиую.",
-       "import-logentry-upload": "[[$1]] файл джюклениую бла импорт этилди",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия}}",
-       "import-logentry-interwiki": "$1 трансвикиленди",
        "import-logentry-interwiki-detail": "$2 бетден  $1 {{PLURAL:$1|версия}}",
        "javascripttest": "JavaScript тинтилиую",
-       "javascripttest-title": "$1 тинтиле турады",
        "tooltip-pt-userpage": "Къошулуучу бетигиз",
        "tooltip-pt-anonuserpage": "Сизни IP-адресигиз ючюн къошулуучу бет",
        "tooltip-pt-mytalk": "Сизни сюзюу бетигиз",
        "spambot_username": "Спамны ариулау",
        "spam_reverting": "$1 бла джибериую болмагъан ахыр версиягъа къайтылады",
        "spam_blanking": "Бютеу версияла $1 бетге джибериу тутадыла, ариуланадыла",
+       "simpleantispam-label": "Анти-спам сынау.\nМуну '''толтурМА'''!",
        "pageinfo-title": "«$1» бетни юсюнден информация",
        "pageinfo-header-basic": "Баш билгиле",
        "pageinfo-header-edits": "Тюрлениу тарих",
        "hebrew-calendar-m6-gen": "Адар",
        "hebrew-calendar-m6a-gen": "Адар I",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|сюзюу]])",
-       "unknown_extension_tag": "Къошакъны билинмеген \"$1\" теги",
        "duplicate-defaultsort": "'''Эсгериу:''' Бар саналгъан \"$2\" сыныфлама ачхыч, аллындагъы \"$1\" сыныфлама ачхычны джараусуз этеди.",
        "version": "Версия",
        "version-extensions": "Салыннган кенгертиуле",
        "version-parser-function-hooks": "Синтаксис анализаторну функцияларын тутуучула",
        "version-hook-name": "Тутуучуну аты",
        "version-hook-subscribedby": "Абонент болгъан",
-       "version-version": "(Версия $1)",
+       "version-version": "($1)",
        "version-license": "MediaWiki'ни лицензиясы",
        "version-ext-colheader-name": "Кенгериу",
        "version-ext-colheader-description": "Ачыкълау",
        "logentry-rights-rights": "$1 къошулуучу, $3 къошулуучуну членлигин $4 къауумдан $5 къауумгъа {{GENDER:$2|кёчюрдю}}",
        "logentry-rights-rights-legacy": "$1 къошулуучу, $3 къушулуучуну къауумлада членлигин {{GENDER:$2|тюрлендирди}}",
        "logentry-rights-autopromote": "$1 къошулуучу, $4 къауумдан автомат халда $5 къауумгъа {{GENDER:$2|кёчюрюлдю}}",
+       "logentry-upload-upload": "$1, $3 {{GENDER:$2|джюкледи}}",
        "rightsnone": "(джокъ)",
        "revdelete-summary": "тюрлениулени ачыкълау",
-       "feedback-subject": "Тема:",
-       "feedback-message": "Билдириу:",
        "feedback-cancel": "Ызына алыу",
-       "feedback-submit": "Оюмунгу джибер",
-       "feedback-error2": "Халат. Тюзетиу ётмеди",
        "feedback-close": "Тындырылды",
+       "feedback-error2": "Халат. Тюзетиу ётмеди",
+       "feedback-message": "Билдириу:",
+       "feedback-subject": "Тема:",
+       "feedback-submit": "Джибер",
        "searchsuggest-search": "Излеу",
        "searchsuggest-containing": "ичиндегиси…",
        "api-error-badtoken": "Ич халат: терс токен.",
        "expand_templates_remove_nowiki": "Эсебде <nowiki> теглени тый",
        "expand_templates_generate_xml": "XML'ни тинтиу терегин кёргюз",
        "expand_templates_generate_rawhtml": "HTML'ни кёргюз",
-       "expand_templates_preview": "Ал къарау"
+       "expand_templates_preview": "Ал къарау",
+       "special-characters-group-latin": "Латинча",
+       "special-characters-group-latinextended": "Кенгертилген латинча",
+       "special-characters-group-ipa": "ХАФА (IPA)",
+       "special-characters-group-symbols": "Символла",
+       "special-characters-group-greek": "Грекча",
+       "special-characters-group-cyrillic": "Кириллица",
+       "special-characters-group-arabic": "Арабча",
+       "special-characters-group-arabicextended": "Кенгерген арабча",
+       "special-characters-group-persian": "Къаджарча",
+       "special-characters-group-hebrew": "Иврит",
+       "special-characters-group-bangla": "Бенгалча",
+       "special-characters-group-tamil": "Тамил",
+       "special-characters-group-telugu": "Телугу",
+       "special-characters-group-sinhala": "Сингалча",
+       "special-characters-group-gujarati": "Гуджарати",
+       "special-characters-group-thai": "Тай",
+       "special-characters-group-lao": "Лаос",
+       "special-characters-group-khmer": "Кхмер",
+       "special-characters-title-endash": "орта тире",
+       "special-characters-title-emdash": "узун тире",
+       "special-characters-title-minus": "минус белги"
 }
index 079d75c..51acad0 100644 (file)
@@ -24,6 +24,7 @@
        "tog-watchdefault": "Donn Sigge beim Ändere automattesch för ming Oppaßlėß vörschlonn",
        "tog-watchmoves": "Donn Sigge beim Ömnänne automattesch för ming Oppaßlėß vörschlonn",
        "tog-watchdeletion": "Donn Sigge beim Fottschmiiße automattesch för ming Oppaßlėß vörschlonn",
+       "tog-watchrollback": "Donn Sigge beim schtantepee retuur Nämme vun Änderonge automattesch för ming Oppaßlėß vörschlonn",
        "tog-minordefault": "Dun all ming Änderunge jedes Mol als klein Mini-Änderunge vürschlage",
        "tog-previewontop": "Zeisch de Vör-Aanseesch övver däm Fäld för der Täx enzejävve aan.",
        "tog-previewonfirst": "Zeich de Vör-Aansich tirek för et eetste Mol beim Bearbeide aan",
        "tog-enotifusertalkpages": "Scheck mer en <i lang=\"en\">e-mail</i>, wann ming Klaaf_Sigg jeändert weed",
        "tog-enotifminoredits": "Scheck mer och en <i lang=\"en\">e-mail</i> för de klein Mini-Änderonge",
        "tog-enotifrevealaddr": "Zeich dä Andere ming E-Mail Adress aan, en de Benohrichtijunge per E-Mail",
-       "tog-shownumberswatching": "Zeich de Aanzahl Metmaacher, die op die Sigg am oppasse sin",
+       "tog-shownumberswatching": "Zeisch de Aanzahl Metmaacher, di op di Sigg am oppaßße sin",
        "tog-oldsig": "Esu&nbsp;süht&nbsp;Ding „Ongerschreff“&nbsp;us:",
        "tog-fancysig": "Donn de „Ungerschreff“ als Wiki-Tex behandelle (ohne enne automattesche Lengk)",
-       "tog-uselivepreview": "Vör-Aansesch övver AJAX zeije (noch zem Ußprobeere)",
+       "tog-uselivepreview": "Vör-Aansesch övver AJAX zeije",
        "tog-forceeditsummary": "Froch noh, wann en däm Feld „Koot zosammejefass, Quell“ beim Avspeichere nix dren steiht",
-       "tog-watchlisthideown": "Dun ming eije Änderunge <strong>nit</strong> en minger Oppassliss aanzeije",
-       "tog-watchlisthidebots": "Dun jedes Mol dä Bots ehr Änderunge <strong>nit</strong> en minger Oppassliss zeije",
+       "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",
        "category-media-header": "Dateije en dä Saachjropp „$1“",
        "category-empty": "''En dä Saachjrupp heh sin kein Sigge un kein Dateie.''",
        "hidden-categories": "Verstoche Saachjrupp{{PLURAL:$1||e|e}}",
-       "hidden-category-category": "Verstoche Saachjruppe",
+       "hidden-category-category": "Verstoche Saachjroppe",
        "category-subcat-count": "En dä Saachrupp heh {{PLURAL:$2|es ein Ungerjrupp dren:|sin $2 Ungerjruppe dren, {{PLURAL:$1|un dovun weed heh nur ein|un dovun weede $1 heh|ävver dovun weed heh keine}} aanjezeich:|sinn_er kein Ungerjruppe dren.}}",
        "category-subcat-count-limited": "En dä Saachrupp heh {{PLURAL:$1|es ein Ungerjrupp dren:|sin $1 Ungerjruppe dren:|sin kein Ungerjruppe dren.}}",
        "category-article-count": "En dä Saachjrupp heh {{PLURAL:$2|es ein Sigg dren:|sin $2 Sigge dren, {{PLURAL:$1|un dovun weed heh nur ein|un dovun weede $1 heh|ävver dovun weed heh keine}} aanjezeich:|sin kein Sigge dren.}}",
        "category-file-count": "En dä Saachrupp heh {{PLURAL:$2|es ein Datei dren:|sin $2 Dateie dren, {{PLURAL:$1|un dovun weed heh nur ein|un dovun weede $1 heh|ävver dovun weed heh kein}} aanjezeich:|es kein Datei dren.}}",
        "category-file-count-limited": "En dä Saachrupp heh {{PLURAL:$1|es ein Datei dren:|sin $1 Dateie dren:|es kein Datei dren.}}",
        "listingcontinuesabbrev": "… (wigger)",
-       "index-category": "Sigge, di de Söhkmaschine opnämme sulle",
-       "noindex-category": "Sigge, di de Söhkmaschine nit opnämme sulle",
+       "index-category": "Sigge, di de Söhkmaschihne opnämme sulle",
+       "noindex-category": "Sigge, di de Söhkmaschihne nit opnämme sulle",
        "broken-file-category": "Sigge met kappodde Lengks op Datteije",
+       "categoryviewer-pagedlinks": "$1 ↔ $2",
        "about": "Övver",
        "article": "Atikkel",
        "newwindow": "(Mäht e neu Finster op, wann Dinge Brauser dat kann)",
        "view": "Beloore",
        "view-foreign": "Op $1 beloohre",
        "edit": "Ändere",
+       "edit-local": "Aanmärkonge heh em Wikki beärbeide",
        "create": "Aanlääje",
+       "create-local": "Aanmärkonge heh em Wikki derbei donn",
        "editthispage": "De Sigg ändere",
        "create-this-page": "Neu aanläje",
        "delete": "Fottschmieße",
        "pool-timeout": "Zick zem Waade affjeloufe, diweil mer op en Sperr am Waade wohre",
        "pool-queuefull": "De Schlang zom Waade op ene freie Prozäß zom Beärbeide es vull",
        "pool-errorunknown": "Dä Fähler kenne mer nit",
+       "pool-servererror": "Dä <i lang=\"en\" xml:lang=\"en\">pool counter</i> Deens schteiht nit zor Verföhjong ($1).",
+       "poolcounter-usage-error": "Fähler beim Aanwände: $1",
        "aboutsite": "Övver {{GRAMMAR:Akkusativ|{{ucfirst:{{SITENAME}}}}}}",
        "aboutpage": "Project:Övver {{GRAMMAR:Akkusativ|{{ucfirst:{{SITENAME}}}}}}",
        "copyright": "Dä Enhald steiht unger dä Lezänz $1, ußer wann ußdröklesch jäd anders jesaad es.",
        "disclaimers": "Henwies",
        "disclaimerpage": "Project:Impressum",
        "edithelp": "Hölp för et Bearbeide",
+       "helppage-top-gethelp": "Hölp",
        "mainpage": "Haupsigg",
        "mainpage-description": "Haupsigg",
        "policy-url": "Project:Rejelle",
        "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.",
        "ok": "Jot!",
        "pagetitle": "$1 — {{SITENAME}}",
+       "backlinksubtitle": "←&nbsp;$1",
        "retrievedfrom": "Di Sigg heh stamp vun „$1“.",
        "youhavenewmessages": "Do häs $1 ($2).",
        "youhavenewmessagesfromusers": "Do häs $1 vun {{PLURAL:$3|enem|$3|keinem}} andere Metmaacher ($2)",
        "readonly_lag": "De Daatebank es för en koote Zigg automattesch jesperrt, för de Daate vun de ongerjeodente Rääschner mem Houprääschner avzejliiche.",
        "internalerror": "De Wiki-Soffwär hät ene Fähler jefunge",
        "internalerror_info": "Enne ennere Fäähler en de ẞoffwäer es opjetrodde: $1",
+       "internalerror-fatal-exception": "Ene schlemme Fähler vun dä Zoot „$1“ es opjetrodde.",
        "filecopyerror": "Kunnt de Datei „$1“ nit noh „$2“ kopeere.",
        "filerenameerror": "Kunnt de Datei „$1“ nit op „$2“ ömdäufe.",
        "filedeleteerror": "Kunnt de Datei „$1“ nit fottschmieße.",
        "directorycreateerror": "Dat Verzeichnis „$1“ kunnte mer nit aanläje.",
+       "directoryreadonlyerror": "En dat Verzeischnes „$1“ darf mer nid eren schriive.",
+       "directorynotreadableerror": "En däm Verzeischnes „$1“ kam_mer nix lässe.",
        "filenotfound": "Kunnt de Datei „$1“ nit finge.",
        "unexpected": "Domet hät keiner jerechnet: „$1“=„$2“",
        "formerror": "Dat es donevve jejange: Wor nix, met däm Fomular.",
        "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.",
-       "editinginterface": "<strong>Opjepass:</strong>\nOp dä Sigg heh schteiht Täx uß de Beehnbovverfläsch vum Wiki. Dröm es\ndi jähje et Ändere jeschöz, domet keine Meß domet jemaat weed.\nNor de Wiki-Köhbeße künne se ändere. Denk dran, heh Ändere deit et\nUssinn un de Wöht ändere, met dänne et Wiki op de Metmaacher un de\nBesöhker drop aankütt!\n\nWann De di en Ding Schprohch övversäze wellß, do jangk op\n<code lang=\"en\" xml:lang=\"en\">[//translatewiki.net/wiki/Main_Page?setlang=ksh translatewiki.net]</code>,\nwoh et MediaWiki en alle Schprohche översaz weedt.\n\nWann De weße wells, wat dä Täx heh bedügg, do häß De en Schangß, dat De op\n<code lang=\"en\" xml:lang=\"en\">//www.mediawiki.org/wiki/Manual:Interface/{{BASEPAGENAMEE}}?setlang=ksh</code>\njet doh drövver fenge kanns, udder op\n<code lang=\"en\" xml:lang=\"en\">//translatewiki.net/wiki/MediaWiki:{{BASEPAGENAMEE}}/qqq?setlang=ksh</code>",
+       "editinginterface": "<strong>Opjepass:</strong>\nOp dä Sigg heh schteiht Täx uß de Beehnbovverfläsch vum Wikki.\nDenk dran, heh Ändere deit et\nUssinn un de Wöht ändere, met dänne et Wiki 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",
        "namespaceprotected": "Do darfs Sigge em Appachtemang „$1“ nit ändere.",
        "wrongpassword": "Dat Passwood oder dä Metmaacher Name wor verkihrt. Jetz muss De et noch ens versöke.",
        "wrongpasswordempty": "Dat Passwood ka'mer nit fottlooße. Jetz muss De et noch ens versöke.",
        "passwordtooshort": "En Paßwööter {{PLURAL:$1|moß|möße|moß}} winnichstens {{PLURAL:$1|ei|$1|kei}} Zeiche, {{PLURAL:$1|Zeffer|Zeffere|Zeffere}}, udder Bochstave dren sin.",
+       "passwordtoolong": "Paßwööter künnne nit länge sin wi {{PLURAL:$1|ein|$1|Noll}} Zeische.",
        "password-name-match": "Ding Poßwoot moß anders wi Dinge Name als ene Metmaacher sin.",
        "password-login-forbidden": "Dä Zohjang met däm Metmaacher-Name un däm Paßwoot es verbodde.",
        "mailmypassword": "Lohß jonn!",
        "createaccount-text": "Einer hät Desch als Medmaacher „$2“ {{GRAMMAR:em|{{SITENAME}}}} aanjemelldt.\nDat es e Wiki, un De fengks et onger däm URL:\n $4\nDat Passwoot „$3“ hät sesch dat Wiki för Disch usjewörfelt.\nDon jlisch enlogge un donn et ändere.\n\nWann Dat all böömesch Dörver för Desch sin, da fojeß heh di\ne-mail eijfach. Wann De en däm Wikki nit metmaache wells, och.",
        "login-throttled": "Do häs zo öff, zo vill, un zo lang en de letzde Zick probeet, ennzelogge.\nWaad e Wielsche ävver $1, ih dat De et wider versöhks.",
        "login-abort-generic": "Dat Enlogge hät nit jeflup.",
+       "login-migrated-generic": "Dinge Zohjang zom Wikki es verändert woode un Dinge Metmaacher_Nahme jidd_et heh nit mieh.",
        "loginlanguagelabel": "Schprohch: $1",
        "suspicious-userlogout": "Do bes '''nit''' ußjelogg.\nEt süht us, wi wann ene kappodde Brauser udder <i lang=\"en\">proxy</i>ẞööver met Zwescheschpeischer noh däm Ußlogge jefrooch hät.",
        "createacct-another-realname-tip": "Dä reschteje Nahme kam_mer fott lohße.\n\nWann dä aanjejovve es, weet_e jebruch, öm öffentlesch de Schriiver för Beidrääsch ze nänne.",
        "media_tip": "Ene Link op en Tondatei, e Filmche, oder esu jet",
        "sig_tip": "Dinge Naame, med de Uhrzigk unn_em Dattum",
        "hr_tip": "En Querlinnich",
-       "summary": "Koot Zosammejefass, Quell:",
+       "summary": "Koot zosammejefaß, Quäll:",
        "subject": "Üvverschreff - wodröm jeiht et?",
        "minoredit": "Dat es en klein Änderung (mini)",
-       "watchthis": "Op die Sigg heh oppasse",
+       "watchthis": "Op di Sigg heh oppaßße",
        "savearticle": "De Sigg Avspeichere",
        "preview": "Vör-Ansich",
        "showpreview": "Vör-Aansich zeije",
        "showdiff": "De Ungerscheide zeije",
-       "anoneditwarning": "'''Opjepaß:''' Weil De nit enjelogg bes, weed Ding <i lang=\"en\">IP</i>-Adräß en dä Sigg ier Leß met de Versione faßjehallde wääde.",
+       "blankarticle": "<strong>Opjepaß:</strong> Di Sigg, di De jrahd aanlähje wells, es läddesch. Wann De jäz norr_ens op „{{int:savearticle}}“ jehß, weed di Sigg och ohne jät dren aanjelaat.",
+       "anoneditwarning": "'''Opjepaß:''' Weil De nit enjelogg bes, weed Ding <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräß en heh dä Sigg ier Leß met de Väsiohne faßjehallde wääde.\nWann De [$1 enlogge deihs] udder [$2 desch aanmällds], dann wääde Ding Änderonge met dingem Nahme als Metmaacher opjevöhrt.",
        "anonpreviewwarning": "''Weil De nit enjlogg bes, weed Ding <code lang=\"en\">IP</code>-Addräß zoamme met dä neue Version faßjehallde, wann de heh di Sigg avspeichere deihß.''",
        "missingsummary": "<strong>Opjepass:</strong> Do häs nix bei „{{int:summary}}“ enjejovve. Dun noch ens op „{{int:savearticle}}“ klicke, öm Ding Änderunge ohne de Zosammefassung ze Speichere. Ävver besser jiss De do jetz tirek ens jet en!",
+       "selfredirect": "<strong>Opjepaß:</strong> Do wells heh di Sigg op sesch sällver ömleide lohße.\nDat hät zwa keine rääschte Senn, ävver wann De jäz norr_enz op „{{int:savearticle}}“ klecks, weed dat esu jemaat.",
        "missingcommenttext": "Jevv en „Koot Zosammejefass, Quell“ aan!",
        "missingcommentheader": "'''Opjepass:''' Do häs kein Üvverschreff för Dinge Beidrach enjejovve. Wann De noch ens op „{{int:savearticle}}“ dröcks, weed Dinge Beidrach der ohne avjespeichert.",
        "summary-preview": "Vör-Aansich vun „Koot Zosammejefass, Quell“:",
        "subject-preview": "Vör-Aansich vun de Üvverschreff:",
+       "previewerrortext": "Ene Fähler es beim Versohch opjetrodde, de Sigg met de Änderonge aanzezeije.",
        "blockedtitle": "Dä Metmaacher es jesperrt",
        "blockedtext": "'''Dinge Metmaacher-Name oder IP Adress es vun „$1“ jesperrt woode.'''\n\nAls Jrund es enjedrage: „''$2''“\n\nDo kanns heh em Wiki immer noch lässe. Do sühß ävver di Sigg heh, wann De op rude Links klicks, neu Sigge aanlääje, udder Sigge ändere wells, denn doför bes De jäz jeschperrt.\n\nDo kanns met $1 oder enem andere [[{{MediaWiki:Grouppage-sysop}}|Wiki-Köbes]] övver dat Schpärre schwaade, wann De wells.\nDo kanns ävver nor dann „''E-Mail aan dä Metmaacher''“ aanwende, wann De ald en E-Mail Adress en Dinge [[Special:Preferences|Enstellunge]] enjedrage un freijejovve häs un wann et E-mail schecke nit metjesperrt es.\n\nDun en Ding Aanfroge nenne:\n* Dä Wiki-Köbeß, dä jesperrt hät: $1\n* Der Jrond för et Sperre: $2\n* Da wood jesperrt: $8\n* De Sperr soll loufe bes: $6\n* De Nommer vun dä Sperr: #$5\n* Ding IP-Adress is jetz: $3\n* Di Sperr es wäje odde jäje: $7\n\nDo kanns och noch en et <span class=\"plainlinks\">[{{fullurl:Special:IPBlockList|&action=search&limit=&ip=%23}}$5 Logboch met de Sperre]</span> loore.",
        "autoblockedtext": "'''Ding IP Adress es automattesch jesperrt woode.'''\n<br />\n'''Se wor vun enem Metmaacher jebruch woode, dä vun „$1“ jesperrt woode es.'''\n<br />\nAls Jrund es enjedrage: „''$2''“\n\nDo kanns heh em Wiki immer noch lesse. Do sühß ävver di Sigg heh, wann De op rude Links klicks, neu Sigge aanlääje, odder Sigge ändere wells, denn doför bes De jetz jesperrt.\n\nDo kanns met $1 oder enem andere [[{{MediaWiki:Grouppage-sysop}}|Wiki-Köbes]] övver dat Schpärre schwaade, wann De wells.\nDo kanns ävver nor dann „''e-mail aan dä Metmaacher''“ aanwende, wann De ald en e-mail Adress en Dinge [[Special:Preferences|Enstellunge]] enjedrage un freijejovve häs un wann et e-mail schecke nit metjeschperrt es.\n\nDun en Dinge Aanfrore nänne:\n* Dä Wiki-Köbeß, dä jesperrt hät: $1\n* Der Jrond för et Sperre: $2\n* Da wood jesperrt: $8\n* De Sperr soll loufe bes: $6\n* De Nommer vun dä Sperr: #$5\n* Ding IP-Adress is jetz: $3\n* Di Sperr es wäje odde jäje: $7\n\nDo kanns och noch en et <span class=\"plainlinks\">[{{fullurl:Special:IPBlockList|&action=search&limit=&ip=%23}}$5 {{int:ipblocklist}}]</span> loore.",
        "userinvalidcssjstitle": "<strong>Opjepass:</strong> Et jitt kein Ussinn met däm Name: „<strong>$1</strong>“ -\ndenk dran, dat ene Metmaacher eije Dateie för et Ussinn han kann, un dat die met kleine Buchstave\naanfange dun, alsu etwa: {{ns:user}}:Name/vector.css, un {{ns:user}}:Name/vector.js heiße.",
        "updated": "(Aanjepack)",
        "note": "'''Opjepass:'''",
-       "previewnote": "'''Heh kütt nor de Vör-Aansich — Ding Änderunge sin noch nit jesechert!'''",
+       "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-Aansich zeich dä Enhald vum bovvere Texfeld.\nEsu wööd dä Atikkel ussinn, wann De n jetz avspeichere däts.",
        "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.'''",
        "sectioneditnotsupported-text": "Afschnedde Ändere is en heh dä Sigg nit zohjelohße.",
        "permissionserrors": "Dat jeit nit, dat darfs De nit.",
        "permissionserrorstext": "Do häs nit dat Rääch, dat ze maache, {{PLURAL:$1|dä Jrund es:|de Jründe sin:|oohne Jrund.}}",
-       "permissionserrorstext-withaction": "Do häs nit dat Rääch $2, {{PLURAL:$1|dä 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ääsh, en Sigg neu aanzelääje, di doför ald ens fottjeschmeße woode wohr.\n\nBes förseschtesch un övverlääsch Der, of dat en joode Idee es, di Sigg widder opzemaache. Domet De Bescheid weiß, hee de Endrääsh em Logboch vum Sigge-Ömnänne, un em Logboch 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.",
        "log-fulllog": "Donn dat janze Logboch aanloore",
        "postedit-confirmation-saved": "Ding Änderunge sin nit faßjehallde.",
        "edit-already-exists": "Kunnt kei neu Sigg aanlääje. Di Sigg jidd_et ald.",
        "defaultmessagetext": "Dä standaadmäßije Tex",
-       "content-failed-to-parse": "Et wohr nit müjjelesch, dä Enhalld met däm <i lang=\"en\">MIME-Typ</i> $2 för en Dattei met $1 dren ze verwooschte: $3.",
+       "content-failed-to-parse": "Et wohr nit müjjelesch, dä Enhalld met däm <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Tüpp <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.",
        "content-model-text": "Eijnfache Tex",
        "content-model-javascript": "JavaSkrepp",
        "content-model-css": "CSS",
+       "content-model-json": "<i lang=\"en\" xml:lang=\"en\" title=\"JavaScript Object Notation\">JSON</i>",
+       "content-json-empty-object": "Nix dren",
+       "content-json-empty-array": "Nix dren",
+       "duplicate-args-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-category": "Sigge met zovill Opwand en Paaser-Funkßjohne",
        "post-expand-template-inclusion-warning": "Warnung: Heh in di Sigg wääde zo fill Bytes övver Schablone erin jebraat. Nit all di Schablone künne enjbonge wäde.",
        "parser-template-recursion-depth-warning": "Schablone refe sesch zo öff sellver op ($1)",
        "language-converter-depth-warning": "Zoh vill Verschachtelonge (övver $1) beim Täx-Ömwandelle vun eine Schprohch udder Schrevv en en anndere.",
        "node-count-exceeded-category": "Sigge, woh dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde es",
+       "node-count-exceeded-category-desc": "Di Sigg hät dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde.",
        "node-count-exceeded-warning": "Heh di Sigg hät dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde",
        "expansion-depth-exceeded-category": "Sigge, woh de <i lang=\"en\" xml:lang=\"en\">expansion depth</i> övverschredde es",
        "expansion-depth-exceeded-category-desc": "Dat heh es de Saachjropp för Sigge, woh de <i lang=\"en\" xml:lang=\"en\">expansion depth</i> övverschreddde es.",
        "currentrev": "Neuste Version",
        "currentrev-asof": "De neuste Version fum $2 öm $3 Uhr",
        "revisionasof": "De Version vum $2 öm $3 Uhr",
-       "revision-info": "Dat heh es de övverhollte Version $3, {{GENDER:$2|vum|vum|vum Metmaacher|vun dä|vum}} $2 aam $4 öm $5 Uhr afjeshpeichert.",
+       "revision-info": "Väsjohn $3 vum $4 öm $5 Uhr vum {{GENDER:$6|vum|vum|vum Metmaacher|vun dä|vum}} $2.$7",
        "previousrevision": "← De Version dovör zeije",
        "nextrevision": "De Version donoh zeije →",
        "currentrevisionlink": "De neuste Version",
        "history-feed-empty": "De aanjefrochte Sigg jitt et nit. Künnt sin, dat se enzwesche fottjeschmesse udder ömjenannt woode es. Kanns jo ens [[Special:Search|em Wiki söke looße]], öm de zopass, neu Sigge ze finge.",
        "rev-deleted-comment": "(„Koot Zosammejefass, Quell“ usjeblendt)",
        "rev-deleted-user": "(Metmaacher Name usjeblendt)",
-       "rev-deleted-event": "(Logboch-Enndraach fottjenomme)",
+       "rev-deleted-event": "(Eijnzelheijte vom Logboch-Enndraach fottjenomme)",
        "rev-deleted-user-contribs": "[Däm Metmaacher singe Name udder sing <i lang=\"en\">IP</i>-Addräß wood veschtoche, un heh di Änderung 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-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-deleted-text-view": "{{int:rev-deleted-text-permission}} Als ene Wiki-Köbes kanns De se ävver bekike.",
        "revdelete-text-text": "Fottjeschmeße Väsjohne blieve en dä Leß met de vörrije Väsjohne, ävver zom Deil kann de Öffentleschkeit nit mieh drop zohjriehfe.",
        "revdelete-text-file": "Fottjeschmeße Väsjohne vun Datteije blieve en dä Leß met de vörrije Väsjohne, ävver zom Deil kann de Öffentleschkeit nit mieh drop zohjriehfe.",
        "logdelete-text": "Fottjeschmeße Endrääsch en de Logbööscher blieve en dä Leß met de vörrije Väsjohne, ävver zom Deil kann de Öffentleschkeit nit mieh drop zohjriehfe.",
-       "revdelete-text-others": "De Wiki_Kööbeße künne emmer noch drop zohjriefe un künne och wider för alle seeschbaa maache, wat jäz verschtoche es, esu lang kein äxtra Beschränkonge jemaat woodte.",
+       "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-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-hide-name": "Der Förjang, un och der Enndraach uss_em Logboch, versteiche",
-       "revdelete-hide-comment": "dä Enhald vun „Koot Zosammejefass, Quell“",
+       "revdelete-hide-name": "Der Förjang un sing Parramehtere uss_em Enndraach em Logboch versteiche",
+       "revdelete-hide-comment": "dä Enhald vun „{{int:Summary}}“",
        "revdelete-hide-user": "däm Bearbeider sing <i lang=\"en\" xml:lang=\"en\"IP</i>-Adress oder Metmaacher-Name",
        "revdelete-hide-restricted": "Dun dat och för de Wiki-Köbesse esu maache wie för jede Andere",
        "revdelete-radio-same": "(lohß wi_t eß)",
        "mergehistory-empty": "Mer han kei Versione för zesammezeläje",
        "mergehistory-success": "{{PLURAL:$3|Ein Version es|$3 Versione sen|Kei Version wood}} fun „[[:$1]]“ noh „[[:$2]]“ övverdraare un domet zosamme jelaat.",
        "mergehistory-fail": "Dat Versione zesamme läje is nit müjjelisch. Don ens di Sigge un de Zigge pröfe!",
+       "mergehistory-fail-toobig": "Mieh wi {{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein Väsjohne}} wöödte zesamme jelaat. Esu vill künne mer nit, un maache mer nit.",
        "mergehistory-no-source": "En Ursprungssigg „$1“ jidd_et nit.",
        "mergehistory-no-destination": "En Zielsigg „$1“ jidd_et nit.",
        "mergehistory-invalid-source": "De Ursprungssigg ier Name moß och ene reschtijje Siggetittel sin.",
        "notextmatches": "Kein Sigg met däm Tex",
        "prevn": "de {{PLURAL:$1|ein|$1|0}} doför zeije",
        "nextn": "de {{PLURAL:$1|läzte |nächste $1|nächste 0}} zeije",
+       "prev-page": "de Sigg derföhr",
+       "next-page": "de Sigg dernoh",
        "prevn-title": "{{PLURAL:$1|Et vorijje|De $1 dovör|Es nix dovör}}",
        "nextn-title": "{{PLURAL:$1|Et näähßte|De nähßte $1|Kütt nix mieh}}",
        "shown-title": "Zeisch {{PLURAL:$1|ein|$1|nix}} pro Sigg",
        "search-result-category-size": "{{PLURAL:$1|1 Saach|$1 Saache|0 Saache}} ({{PLURAL:$2|1 Ongerjropp|$2 Ongerjroppe|0 Ongerjroppe}}, {{PLURAL:$3|1 Datei|$3 Dateie|0 Dateie}})",
        "search-redirect": "(Ömleitung $1)",
        "search-section": "(Avschnett $1)",
+       "search-category": "({{int:Category}} $1)",
        "search-file-match": "(en dä Dattei dren)",
        "search-suggest": "Häß De „$1“ jemeint?",
        "search-interwiki-caption": "Schwesterprojekte",
        "searchdisabled": "Dat Söhke hee {{GRAMMAR:en|{{SITENAME}}}} es em Momang avjeschalt.\nDat weed op dänne ẞööver ad ens jemaat, domet de Lass op inne nit ze jroß weed,\nun winnischsdens dat normale Sigge Oprofe flöck jenoch jeiht.\n\nEhr künnt esu lang övver en Söhkmaschin vun usserhalv emmer noch\nSigge us {{GRAMMAR:Dative|{{ucfirst:{{SITENAME}}}}}} finge.\nEt es nit jesaht,\ndat dänne ehr Daate topaktoell sin,\nävver et es bäßer wi jaa_nix.",
        "search-error": "An error has occurred while searching: $1",
        "preferences": "ming Enstellunge",
-       "mypreferences": "Enstellunge",
+       "mypreferences": "Enschtällonge",
        "prefs-edits": "Aanzahl Änderunge am Wiki:",
        "prefsnologintext2": "Donn ennlogge, öm Ding Enschtällonge ze verändere.",
        "prefs-skin": "Et Ussinn",
        "prefs-personal": "De Enstellunge",
        "prefs-rc": "Neuste Änderonge",
        "prefs-watchlist": "De Oppassliss",
+       "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-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-tokenwatchlist": "Schlößel",
        "prefs-diffs": "Ongerscheide un Verjliische",
        "prefs-help-prefershttps": "Di Enschtällong kütt eets zom drahre, wann De nähksde Mohl enloggs.",
+       "prefswarning-warning": "Do häs Ding Ennschtällonge verändert, ävver dat noch nit faßjehallde. De moß heh di Sigg met däm Knopp „$1“ verlohße, söns sin Ding Änderonge fott.",
        "prefs-tabs-navigation-hint": "Opjepaß: Met dä Piel-Knöppe kanns de noh rääds un lenks op de Rigger jonn un se ußsöhke.",
        "email-address-validity-valid": "De Addräß fö de <i lang=\"en\">e-mail</i> schingk en Odenung",
        "email-address-validity-invalid": "Jivv en jöltijje Addräß fö de <i lang=\"en\">e-mail</i> en",
        "right-protect": "Sigge schöze, jeschözde Sigge änndere, un der iere Schoz widder ophevve",
        "right-editprotected": "Sigge ändere, di met „{{int:protect-level-sysop}}“ jezöz sin",
        "right-editsemiprotected": "Sigge met däm Schoz „{{int:protect-level-autoconfirmed}}“ ändere",
+       "right-editcontentmodel": "et Modäll vum Ennhald vun Sigge verändere",
        "right-editinterface": "Sigge met de Texte ändere, die et Wiki kallt",
        "right-editusercssjs": "Anderlücks CSS- un JS-Dateie ändere",
        "right-editusercss": "Anderlücks CSS-Dateie ändere",
        "right-override-export-depth": "Beim Sigge Expoteere de Sigge metnämme, woh Lingks drop jon — beß fönef Schredde wigk",
        "right-sendemail": "<i lang=\"en\">e-mail</i> aan ander Metmaacher schecke",
        "right-passwordreset": "De <i lang=\"en\">e-mails</i> vum Paßwoot neu Säze aanloore",
+       "right-managechangetags": "[[Special:Tags|Kännzeijsche]] en de Dahtebangk aanlähje udder fottschmiiße",
        "newuserlogpage": "Logboch för neu Metmaachere",
        "newuserlogpagetext": "He sin de Metmaacher opjelėßß, di sesh nöü aanjemäldt han.",
        "rightslog": "Logboch för Änderunge aan Metmaacher-Räächde",
        "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-editcontentmodel": "et Modäll vum Ennhald vun Sigge ze verändere",
+       "action-managechangetags": "Kännzeijsche en de Dahtebangk aanlähje udder fottschmiiße",
        "nchanges": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderong}}",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|Ein|$1|Kein}} zigg_em läzde Aanloore",
        "enhancedrc-history": "Väsjohne",
        "recentchanges": "Neuste Änderonge",
        "recentchanges-legend": "Enstellunge",
-       "recentchanges-summary": "Op dä Sigg hee sin de neuste Änderunge am Wiki opjeliss.",
+       "recentchanges-summary": "Op dä Sigg heh sin de neuste Änderonge aam Wikki opjeleß.",
        "recentchanges-noresult": "Nit verändert en dä Zigg met de aanjejovve Beschrängkonge.",
        "recentchanges-feed-description": "Op dämm Abonnomang-Kannal (<i lang=\"en\">Feed</i>) kannze de {{int:recentchanges}} aam Wiki en Laif un en Färve metloore.",
-       "recentchanges-label-newpage": "Heh di Sigg es neu dobei jekumme met dä Änderung",
+       "recentchanges-label-newpage": "Di Sigg es neu dobei jekumme met dä Änderong",
        "recentchanges-label-minor": "Heh dat es en Mini-Änderung",
        "recentchanges-label-bot": "Di Änderung es fun enem Bot jemaat woode",
-       "recentchanges-label-unpatrolled": "Heh di Änderung es noch nit nohjeloort",
-       "recentchanges-label-plusminus": "Der Ömvang vun dä Sigg hät sesch öm di Aanzahl Bytes verändert.",
-       "recentchanges-legend-heading": "'''Lejänd:'''",
+       "recentchanges-label-unpatrolled": "Heh di Änderong es noch nit nohjelohrt",
+       "recentchanges-label-plusminus": "Der Ömvang vun dä Sigg hät sesch öm di Aanzahl <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i> verändert.",
+       "recentchanges-legend-heading": "'''Lejänd:&nbsp;'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Loor och noh de [[Special:NewPages|Leß met de neue Sigge]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Hee {{PLURAL:$5|es ein|sin bes op <strong>$1</strong>|es keine}} fun de Änderunge zick dem <strong>$3</strong> öm <strong>$4</strong> Uhr opjelėß.",
-       "rclistfrom": "Zeich de Änderunge vum $3 $2 aan",
-       "rcshowhideminor": "$1 klein Mini-Änderunge",
-       "rcshowhideminor-show": "Zeisch",
-       "rcshowhideminor-hide": "Verschteihsch",
-       "rcshowhidebots": "$1 de Bots ehr Änderunge",
-       "rcshowhidebots-show": "Zeisch",
-       "rcshowhidebots-hide": "Verschteihsch",
-       "rcshowhideliu": "De aanjemeldte Metmaacher ehr Änderunge: $1",
-       "rcshowhideliu-show": "Zeisch",
-       "rcshowhideliu-hide": "Verschteihsch",
-       "rcshowhideanons": "$1 de namenlose Metmaacher ehr Änderunge",
-       "rcshowhideanons-show": "Zeisch",
-       "rcshowhideanons-hide": "Verschteihsch",
-       "rcshowhidepatr": "$1 de nohjeluurte Änderunge",
-       "rcshowhidepatr-show": "Zeisch",
-       "rcshowhidepatr-hide": "Verschteihsch",
-       "rcshowhidemine": "$1 ming eije Änderunge",
-       "rcshowhidemine-show": "Zeisch",
-       "rcshowhidemine-hide": "Verschteihsch",
-       "rclinks": "Zeich de letzte {{int:pipe-separator}}$1{{int:pipe-separator}} Änderunge us de letzte {{int:pipe-separator}}$2{{int:pipe-separator}} Däch, un dun {{int:pipe-separator}}$3",
-       "diff": "Ungerscheid",
+       "rclistfrom": "Zeisch de Änderonge avv em $3 öm $2 Uhr aan.",
+       "rcshowhideminor": "de klein Mini-Änderonge $1",
+       "rcshowhideminor-show": "aanzeije",
+       "rcshowhideminor-hide": "verschteihsche",
+       "rcshowhidebots": "de Bots ehr Änderonge $1",
+       "rcshowhidebots-show": "aanzeije",
+       "rcshowhidebots-hide": "verschteihsche",
+       "rcshowhideliu": "de aanjemällte Metmaacher ehr Änderonge $1",
+       "rcshowhideliu-show": "aanzeije",
+       "rcshowhideliu-hide": "verschteihsche",
+       "rcshowhideanons": "de nahmelohse Metmaacher ehr Änderonge $1",
+       "rcshowhideanons-show": "aanzeije",
+       "rcshowhideanons-hide": "verschteihsche",
+       "rcshowhidepatr": "de nohjeluhrte Änderonge $1",
+       "rcshowhidepatr-show": "aanzeije",
+       "rcshowhidepatr-hide": "verschteihsche",
+       "rcshowhidemine": "ming eije Änderonge $1",
+       "rcshowhidemine-show": "aanzeije",
+       "rcshowhidemine-hide": "verschteihsche",
+       "rclinks": "Zeisch de läzde {{int:pipe-separator}}$1{{int:pipe-separator}} Änderonge us de läzde {{int:pipe-separator}}$2{{int:pipe-separator}} Däch, un dun {{int:pipe-separator}} $3.",
+       "diff": "Ongerscheid",
        "hist": "Versione",
        "hide": "Ußblände!",
        "show": "Zeije:",
        "minoreditletter": "M",
        "newpageletter": "N",
        "boteditletter": "B",
+       "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|eine|$1|kein}} Oppasser]",
        "rc_categories": "Nor de Saachjruppe (met „|“ dozwesche):",
        "rc_categories_any": "All, wat mer han",
        "recentchangeslinked": "Änderunge aan Sigge, wo heh drop jelink es",
        "recentchangeslinked-feed": "Änderunge aan Sigge, wo hee drop jelink es",
        "recentchangeslinked-toolbox": "Änderunge aan Sigge, wo hee drop jelink es",
-       "recentchangeslinked-title": "Änderunge aan Sigge, die vun „$1“ uß verlink sin",
-       "recentchangeslinked-summary": "Heh di {{int:nstab-special}} hät en Leß met Änderunge aan Sigge, di vun dä aanjejovve Sigg uß verlink sin.\nBei Saachjruppe sen et de Sigge en dä Saachjrupp.\nSigge uß Dinge [[Special:Watchlist|Opaßleß]] sin '''fett''' jeschrevve.",
-       "recentchangeslinked-page": "Dä Sigg iere Tittel:",
-       "recentchangeslinked-to": "Zeish de Änderonge fun dä Sigge, wo Lengks noh heh drop sin",
+       "recentchangeslinked-title": "Änderonge aan Sigge, di vun „$1“ uß verlengk sin",
+       "recentchangeslinked-summary": "Heh di {{int:nstab-special}} hädd en Leß met Änderonge aan Sigge, di vun dä aanjejovve Sigg uß verlengk sin.\nBei Saachjroppe sen et de Sigge en dä Saachjropp.\nSigge uß Dinge [[Special:Watchlist|Opaßleß]] sin en '''Fättschreff''' jeschrevve.",
+       "recentchangeslinked-page": "Dä Sigg ier Övverschreff:",
+       "recentchangeslinked-to": "Zeisch de Änderonge aan dä Sigge, woh Lengks op di aanjejovve Sigg drop sin",
        "upload": "Daate huhlade",
        "uploadbtn": "Huhlade!",
        "reuploaddesc": "Zeröck noh de Sigg zem Huhlade.",
        "uploaderror": "Fähler beim Huhlade",
        "upload-recreate-warning": "'''Opjepaß: En Dattei met dämm Name es ömjenannt udder fottjeschmeße woode.'''\n\nDe Logböösher vum Datteie Ömnänne un Fottschmieße saare doh drövver:",
        "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": "Nor de Dateitüpe <code>$1</code> sin zojelohße.",
-       "upload-preferred": "De bevörzochte Zoote Dateie: $1.",
-       "upload-prohibited": "Verbodde Zoote Dateie: $1.",
+       "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|} Datei{{PLURAL:$2||je|}: $1.",
        "uploadlogpage": "Logboch met de huhjelade Dateie",
        "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ä Name vun dä Datei",
        "largefileserver": "De Datei 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.",
        "windows-nonascii-filename": "Heh dat Wiki löht kein Datteiname met Sönderzeische zoh.",
-       "fileexists": "Et jitt ald en Datei met däm Name.\nWann De op „Datei avspeichere“ klicks, weed se ersetz.\nBes esu jod  un luur Der <strong>[[:$1]]</strong> aan, wann De nit 100% secher bes.\n[[$1|thumb]]",
+       "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-extension": "Mer han ald en Dattei, di bahl jenou esu heijß: [[$2|thumb]]\n* Huh am laade sim_mer: <strong>[[:$1]]</strong>\n* Ald om ßörve eß: <strong>[[:$2]]</strong>\nWels De nit leever ene andere Nahme fö di Datei ußsöhke?",
        "fileexists-thumbnail-yes": "Dat süühd uß, wi wann dat hee en Minni-Beldsche em Breefmarrke-Fommaat (''<span lang=\"en\">thumbnail</span>'') wöhr. [[$1|thumb]]\nDon ens di Dattei <strong>[[:$1]]</strong> prööfe.\nWann dat de Orjinaaljrüß es, do moß keij för dat Beld keij extra Vör-Aansich huhjelade wäde.",
        "upload-maxfilesize": "Der jrüütßte müjjelesche Ömfang för en Datei es $1.",
        "upload-description": "Övver di Datei",
        "upload-options": "Enstellunge för et Laade",
-       "watchthisupload": "Op di Datei oppasse",
+       "watchthisupload": "Op di Datei 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.",
        "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! -->",
        "license": "Lizenz:",
        "license-header": "Lizänz",
        "nolicense": "Nix usjesöhk",
+       "licenses-edit": "Donn de Lezänzbedengonge verändere udder beärbeide.",
        "license-nopreview": "(Kein Vör-Aansich ze hann)",
-       "upload_source_url": " (richtije öffentlije URL)",
-       "upload_source_file": " (en Datei op Dingem Kompjuter)",
+       "upload_source_url": "(en Dattei med ene öffentlesch zohjänglesche URL)",
+       "upload_source_file": "(en Datei op Dingem Kompjuter)",
        "listfiles-delete": "fottschmieße",
        "listfiles-summary": "Heh sin de huhjelade Dateije opjeleß.",
        "listfiles_search_for": "Sök noh däm Name vun dä Datei:",
        "filedelete-maintenance": "Datteie Fottschmiiße un widder zerök Holle jeiht jez jrad nit, mer hann Waadong.",
        "filedelete-maintenance-title": "Di Dattei künne mer nit fottschmiiße",
        "mimesearch": "Dateije övver dänne ehre <span lang=\"en\">MIME</span>-Tüp söhke",
-       "mimesearch-summary": "Op hee dä {{int:nstab-special}} könne de Dateie noh em <i lang=\"en\">MIME</i>-Tüpp ußjesöök wäde.\nMer moß immer der Medietüp un der Ongertüp aanjevve.\nZem Beispell: <code lang=\"en\">image/jpeg</code>\n— kannß donoh op dä Beschrievungssigge von de Dateie loore.",
+       "mimesearch-summary": "Op hee dä {{int:nstab-special}} könne de Dateie noh em <i lang=\"en\" xml:lang=\"en\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Tüpp ußjesöhk wähde.\nMer moß der Medijetüp un der Ongertüp aanjevve mem scheive Schtresch derzwesche, zem Bejschpell: <code xml:lang=\"en\" lang=\"en\">image/jpeg</code> udder <code xml:lang=\"en\" lang=\"en\">text/*</code> udder esu.",
        "mimetype": "MIME-Typ:",
        "download": "eronger laade",
        "unwatchedpages": "Sigge, wo keiner drop oppass",
        "statistics-users-active-desc": "Aktiv sin Metmaacher, di {{PLURAL:$1|hück un jesterre|en de läzte $1 Dääsch|hück}} jät jemaat han.",
        "pageswithprop": "Sigge med en beschtemmpte Eijeschaff",
        "pageswithprop-legend": "Sigge med en Eijeschaff",
-       "pageswithprop-text": "Heh di Sigg zeisch Sigge, di en beschtemmpte Eijeschaf han",
+       "pageswithprop-text": "Heh di Sigg zeisch Sigge, di en beschtemmpte Eijeschaff han.",
        "pageswithprop-prop": "Dä name vun dä Eijeschaff:",
        "pageswithprop-submit": "Lohß Jonn!",
+       "pageswithprop-prophidden-long": "en Eijeschaff med enem janz lange Täx als Wäät weed nit aanjezeisch ($1)",
+       "pageswithprop-prophidden-binary": "en Eijeschaff med enem benähre Wäät weed nit aanjezeisch ($1)",
        "doubleredirects": "Ömleitunge op Ömleitunge",
        "doubleredirectstext": "Hee fings De en jede Reih ene Link op de iertste un de zweite Ömleitung, donoh ene Link op de Sigg, wo de\nzweite Ömleitung hin jeiht. För jewöhnlich es dat dann och de richtije Sigg, wo de iertste Ömleitung ald hen jonn sullt.\n<del>Ußjeshtreshe</del> Reije sin ald äleedesh.\nMet däm „(Ändere)“-Link kanns De de eetste Sigg tirek aanpacke.\nTipp: Merk Der dä Tittel vun dä Sigg dovör.",
        "double-redirect-fixed-move": "Di Sigg [[$1]] es ömjenannt un längk jäz autmattesch öm op di Sigg [[$2]].",
        "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": "Hee en dä Liss es nix dren.",
+       "specialpage-empty": "Heh en dä Leß es nix dren.",
        "lonelypages": "Atikele, wo nix drop link",
        "lonelypagestext": "De Sigge hee noh sin nörjenzwoh ennjebonge un et jonn och kein Linkß drop.",
        "uncategorizedpages": "Atikele, die en kein Saachjrupp sin",
        "unusedimages": "Dateie, die nit en Sigge dren stäche",
        "wantedcategories": "Saachjruppe, die mer noch nit han, die noch jebruch wääde",
        "wantedpages": "Sigge, die mer noch nit han, die noch jebruch wääde",
+       "wantedpages-summary": "He sin Sigge opjeliss, die et noch nit jitt, wo ävver Hyperlinks vun andere Sigge drop jon. en leß met Sigge met Ömleidonge drop fengk mer op dä Sigg [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Ene onjöltijje Tittel för en Sigg: $1",
-       "wantedfiles": "Dateie, di onß noch fähle",
+       "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-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.",
        "wantedtemplates": "Schablone, die mer noch nit han, die noch jebruch wääde",
-       "mostlinked": "Atikele met de miehste Links drop",
-       "mostlinkedcategories": "Saachjruppe met de miehste Links drop",
-       "mostlinkedtemplates": "Schablone met de miehßte Lenks drop",
+       "mostlinked": "Atikele met de mihste Lenks drop",
+       "mostlinkedcategories": "Saachjroppe met de miehste Lenks drop",
+       "mostlinkedtemplates": "Sigge met de miehßte Oprohfe, di wohanders enjeföhsch wähde",
        "mostcategories": "Atikkele met de miehste Saachjruppe",
-       "mostimages": "Dateie met de miehste Links drop",
+       "mostimages": "Dateije met de mihste Lenks drop",
        "mostinterwikis": "Atikkele met de miehste Engerwikilengks",
        "mostrevisions": "Atikkele met de miehste Änderunge",
        "prefixindex": "All Sigge, dänne ehr Name met enem bestemmte Wood oder Tex aanfängk",
        "pager-older-n": "{{PLURAL:$1|vörrije|vörrije $1}}",
        "suppress": "Versteiche",
        "querypage-disabled": "Heh di Extrasigg es ußjeschalldt, domet dä Server jet winnijer ze brassele hät.",
+       "apihelp": "Hölp för de <i lang=\"en\" xml:lang=\"en\" title=\"Application Programmers Interface\">API</i>",
        "apihelp-no-such-module": "Et Moduhl „$1“ wood nit jefonge.",
        "booksources": "Böcher",
        "booksources-search-legend": "Söök noh Bezochsquelle för Bööcher",
        "speciallogtitlelabel": "Betroffe wohr: (dä Tittel vun ener Sigg udder enem Metmaacher singe Name)",
        "log": "Logböcher ehr Opzeichnunge (all)",
        "all-logs-page": "All de öffentlich Logböcher",
-       "alllogstext": "Dat hee es en jesamte Liss us all dä Logböcher {{GRAMMAR:en|{{SITENAME}}}}.\nDä Logböcher ehre Enhald ka'mer all noh de Aat, de Metmaacher,\noder de Sigge ehr Name, un esu, einzel zoteet aanluure.\nBei de Name moß mer op Jruß- un Kleinschreff aachjävve.",
+       "alllogstext": "Dat heh es en jesampte Less us all dä Logböhscher {{GRAMMAR:en|{{SITENAME}}}}.\nDä Logböhscher ehre Enhald kam_mer all noh de Aat, de Metmaacher,\noder de Sigge ehr Name, un esu, einzel zoteht aanluhre.\nBei dä Name moß mer op Jruß- un Kleinschreff aachjävve.",
        "logempty": "Mer han kein zopaß Endrähsch en däm Logbooch.",
        "log-title-wildcard": "Sök noh Titelle, di aanfange met …",
        "showhideselectedlogentries": "Ußjesöhk Endrääsch verschteische udder zeije",
        "listgrouprights-removegroup-self-all": "Kann sesch sällver uß alle Metmaacherjroppe eruß nämme",
        "listgrouprights-namespaceprotection-header": "Beschrängkonge för Appachtemangs",
        "listgrouprights-namespaceprotection-namespace": "Appachtemang",
+       "listgrouprights-namespaceprotection-restrictedto": "Rääsch(de) zom Verändere",
+       "trackingcategories": "Saachjroppe för täschnsche Saache ze verfollje.",
+       "trackingcategories-summary": "Op hee dä {{int:nstab-special}} sin Saachjroppe opjeleß, di automattesch vum Wikki jevöllt wähde. Dä iehr Nahme künne övver Veränderonge aan beschtemmpte Täxte em Appachtemang {{ns:8}} faßjelaat wäde.",
+       "trackingcategories-msg": "Saachjropp för täschnsche Saache ze verfollje.",
        "trackingcategories-name": "Dä Nohreesch udder däm Täxschtöck singe Nahme",
        "trackingcategories-desc": "Bedengonge för enjeschloße ze sin",
-       "broken-file-category-desc": "En heh dä Sigg es ene Lengk obb en Dattei, di mer nit han.",
+       "noindex-category-desc": "Di Sigg sull vun de Wäbkrauler Robots un de Söhkmaschihne nit opjenumme wähde, weil dat Zauberwoot <code><nowiki>__NOINDEX__</nowiki></code> dren schteiht un se en enem Appachemang es, woh dat zohjelohße es.",
+       "index-category-desc": "Di Sigg sull vun de Wäbkrauler Robots un de Söhkmaschihne opjenumme wähde, weil dat Zauberwoot <code><nowiki>__INDEX__</nowiki></code> dren schteiht un se en enem Appachemang es, woh dat zohjelohße es, un wat nommahlerwies nit vun de Robots dorschsöhk weed.",
+       "post-expand-template-inclusion-category-desc": "Nohdämm a paa Schablohne enjesaz woode sen, hät di Sigg mieh Dahte wi <code xml:lang=\"en\" lang=\"en\">$wgMaxArticleSize</code> zohlöhß. Et sin nit alle Oprohve vun Schablohne opjelöhß.",
+       "post-expand-template-argument-category-desc": "Di Sigg hät mieh Dahte wi <code xml:lang=\"en\" lang=\"en\">$wgMaxArticleSize</code> zohlöhß, nohdämm dä Wäät för ene Parramehter — jät met drei jeschweifte Klammere drömeröm, wi <code>{{{Dengenskersche}}}</code> — enjesaz woode es.",
+       "expensive-parserfunction-category-desc": "Di Sigg hät zoh vill düüre Befähle met Pahserfonxjuhne, för e Beijschpell esu jät, wi <code xml:lang=\"en\" lang=\"en\">#ifexist</code>. Mih doh drövver schteihd em [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Handbohch].",
+       "broken-file-category-desc": "En dä Sigge sin Lengks dren op Datteje, di mer nit han.",
+       "hidden-category-category-desc": "Di Saachjropp hät dä Befähl <code><nowiki>__HIDDENCAT__</nowiki></code> op ier Saachjroppe_Sigg schtonn. Dröm weed se schtandattmääßesch verschtoche, un nit en dä Leß met de Saachjroppe von dä Sigge aanjezeich, di dren sin.",
+       "trackingcategories-nodesc": "Heh weße mer nix drövver.",
        "trackingcategories-disabled": "Di Saachjrobb es afjeschalldt.",
        "mailnologin": "Keij E-Mail Adress",
        "mailnologintext": "Do mööts ald aanjemeldt un [[Special:UserLogin|enjelogg]] sin, un en jode E-Mail\nAdress en Dinge [[Special:Preferences|ming Enstellunge]] stonn han, öm en E-Mail aan andere Metmaacher ze\nschecke.",
        "emailccsubject": "En Kopie vun Dinger E-Mail aan $1: $2",
        "emailsent": "De <i lang=\"en\">e-mail</i> es ongerwähs",
        "emailsenttext": "Ding E-Mail es jetz lossjescheck woode.",
-       "emailuserfooter": "Hee di e-mail hät dä „$1“ an dä „$2“ jescheck, un doför {{GRAMMAR:en dative|{{SITENAME}}}} dat „{{int:emailuser}}“ jebruch.",
+       "emailuserfooter": "Hee di e-mail hät dä „$1“ an dä „$2“ jescheck, un doför {{GRAMMAR:en dative|{{SITENAME}}}} dat „{{int:emailpage}}“ jebruch.",
        "usermessage-summary": "En Nohreesch vum Wiki afjelivvert.",
        "usermessage-editor": "Name vum Metmaacher för de Täxte un Nohreshte vum Wiki ze beärbeide",
        "watchlist": "ming Oppaßleß",
        "removewatch": "Us de Oppassliss nämme",
        "removedwatchtext": "Die Sigg „[[:$1]]“ es jetz us de [[Special:Watchlist|Oppassliss]] erusjenomme.",
        "removedwatchtext-short": "De Sigg  „$1“ es uß Dinge Oppaßleß eruß jenumme.",
-       "watch": "Drop Oppasse",
-       "watchthispage": "Op die Sigg oppasse",
-       "unwatch": "Nimieh drop Oppasse",
-       "unwatchthispage": "Nit mieh op die Sigg oppasse",
+       "watch": "Drobb oppaßße",
+       "watchthispage": "Op di Sigg oppaßße",
+       "unwatch": "Nimeh drobb oppaßße",
+       "unwatchthispage": "Nit mih op di Sigg oppaßße",
        "notanarticle": "Keine Atikkel",
        "notvisiblerev": "Di Version es fottjeschmesse",
        "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>.",
        "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": "Zeich de letzte | $1 | Stunde | $2 | Dage |  | aan, dun",
+       "wlshowlast": "Zeisch de läzde $1 Schtunde, $2 Dähsch aan.",
        "watchlist-options": "Eijeschaffte fun de Oppassless",
-       "watching": "Drop oppasse…",
-       "unwatching": "Nimmieh drop oppasse",
+       "watching": "Drobb oppaßße…",
+       "unwatching": "Nimmih drobb oppaßße",
        "watcherrortext": "Ene Fähler es opjetrodde beim Ändere vun de Enshtällonge för Ding Oppaßleß för „$1“",
        "enotif_reset": "Saz all Änderonge op „Aanjeluurt“, un fäädesch.",
        "enotif_impersonal_salutation": "Metmaacher {{GRAMMAR:Genitiv vun|{{SITENAME}}}}",
        "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}}.",
-       "confirmdeletetext": "Do bes koot dovör, en Sigg för iwich fottzeschmieße. Dobei verschwind och de janze Verjangenheit vun dä Sigg us de Daatebank, met all ehr Änderunge un Metmaacher Name, un all dä Opwand, dä do dren stich. Do muss heh jetz bestätije, dat de versteihs, wat dat bedügg, un dat De weiß, wat Do do mähs.\n<strong>Dun et nor, wann dat met de [[{{MediaWiki:Policy-url}}|Rejelle]] wirklich zosamme jeiht!</strong>",
+       "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 jetz fottjeschmesse woode. Luur Der „$2“ aan, do häs De en Liss met de Neuste fottjeschmesse Sigge.",
        "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 Letzte sing Änderunge zeröcknemme",
-       "rollback_short": "Zeröcknemme",
        "rollbacklink": "All dem Letzte sing Änderunge zeröckdriehe",
        "rollbacklinkcount": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderonge}} schtantepee retuur nämme",
        "rollbacklinkcount-morethan": "{{PLURAL:$1|Mieh wi ein Änderong|Övver $1 Änderonge|Kein Änderonge}} schtantepee retuur nämme",
        "undeletebtn": "Zeröckholle!",
        "undeletelink": "aanloore odder widder zeröckholle",
        "undeleteviewlink": "aanloore",
-       "undeleteinvert": "De Ußwahl ömdrije",
+       "undeleteinvert": "De Ußwahl ömdrihje",
        "undeletecomment": "Jrond (för en et Logboch):",
        "undeletedrevisions": "{{PLURAL:$1|ein Version|$1 Versione}} zeröckjehollt",
        "undeletedrevisions-files": "Zesammejenomme {{PLURAL:$1|Ein Version|<strong>$1</strong> Versione|<strong>Kein</strong> Version}} vun {{PLURAL:$2|eine Datei|<strong>$2</strong> Dateie|<strong>nix</strong>}} zeröckjehollt",
        "undelete-error-long": "Mer wollte en Datei widder zeröckholle, ävver dobei sin_er Fääler opjefalle:\n\n$1",
        "undelete-show-file-confirm": "Wells De dä Datei „<nowiki>$1</nowiki>“ ier fottjeschmesse Version vum $2 öm $3 Uhr verhaftesch sinn?",
        "undelete-show-file-submit": "Jo",
-       "namespace": "Appachtemeng:",
-       "invert": "dun de Uswahl ömdrije",
+       "namespace": "Appachtemang:",
+       "invert": "don di Ußwahl ömdrihje",
        "tooltip-invert": "Maach e Höhksche, öm Änderonge aan Sigge en däm ußjewählte Appachtemang — un däm, wat doh zohjehööt, wann doh och e Höhksche es — nit aanzezeije, ävver doför uß all de andre Appachtemangs.",
-       "namespace_association": "mem zohjehüüreje Appachtemang",
+       "tooltip-whatlinkshere-invert": "Maach heh e Höhksche, öm de Lengks ze verschteische, di vun de Sigge en dämm usjesöhkte Appachtemang ußjonn.",
+       "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",
        "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",
        "ipbhidename": "Don däm Metmaacher singe Name versteiche, en de Leste un däm sing Änderunge.",
-       "ipbwatchuser": "Op däm Metmaacher sing Metmaachersigg un Klaafsigg oppasse",
+       "ipbwatchuser": "Op däm Metmaacher sing Metmaachersigg un Klaafsigg oppaßße",
        "ipb-disableusertalk": "Dä Metmaacher darf sing Klaafsigg nit ändere, esulang, wi hä jwesperrt es",
        "ipb-change-block": "Wigger sperre met dä neue Enstellunge",
        "ipb-confirm": "Et Sperre beshtäätejje",
        "cant-move-category-page": "Do häß nit dat Rääsch, Saachjroppesigge ömzebenänne.",
        "cant-move-to-category-page": "Do häß nit dat Rääsch, en Sigg obb en Saachjroppesigg ömzebenänne.",
        "newtitle": "op dä neue Name",
-       "move-watch": "Op die Sigg heh oppasse",
+       "move-watch": "Op di Sigg heh oppaßße",
        "movepagebtn": "Ömnenne",
        "pagemovedsub": "Dat Ömnenne hät jeflupp",
        "movepage-moved": "'''De Sigg „$1“ es jez en „$2“ ömjenannt.'''",
        "exportcuronly": "Bloß de aktuelle Version usjevve (un <strong>nit</strong> de janze ahle Versione onoch met dobei dun)",
        "exportnohistory": "----\n<strong>Opjepass:</strong> de janze Versione Exporteere es heh em Wiki avjeschalt. Schad, ävver et wör en\nzo jroße Lass för dä ẞööver.",
        "exportlistauthors": "Donn en kumpläte Lėß met dä Schriiver för en Sigg dobei",
-       "export-submit": "Loss_Jonn!",
+       "export-submit": "Lohß Jonn!",
        "export-addcattext": "Sigge dobei donn us dä Saachjrupp:",
        "export-addcat": "Dobei donn",
        "export-addnstext": "Sigge dobei donn uß dämm Appachtemang:",
        "thumbnail-temp-create": "Mer kunnte kein Zweschedattei für Minnibeldscher aanlääje.",
        "thumbnail-dest-create": "Mer kunnte kein Minnibeldscher faßhallde, woh se hen sulle.",
        "thumbnail_invalid_params": "Ene Parameter för et Breefmarke-Belldsche (<i lang=\"en\">thumbnail</i>) Maache wohr nit en Odenung",
+       "thumbnail_toobigimagearea": "Dattei met mieh wi $1",
        "thumbnail_dest_directory": "Dat Verzeichnis för dat erin ze donn kunte mer nit aanlääje.",
        "thumbnail_image-type": "Di Zoot Beld künne mer nit met ömjonn",
        "thumbnail_gd-library": "Vun dä <i lang=\"en\">GD</i> Projramm_Biplijotheek fäählt en Funkßuhn: „$1“",
        "thumbnail_image-missing": "Di Datei schingk nit doh ze sin: <code>$1</code>",
        "thumbnail_image-failure-limit": "Mieh wi {{PLURAL:$1|eine Versohch|$1 Versohche|keine Versohch}} dat Minnibelldsche ze zeije. Versöhg_et schpääder widder.",
        "import": "Sigge Emporteere",
-       "importinterwiki": "Trans Wiki Emport",
-       "import-interwiki-text": "Wähl en Wiki un en Sigg zem Emporteere us.\nEt Datum vun de Versione un de Metmaacher Name vun de Schriever wääde dobei metjenomme.\nAll de Trans Wiki Emporte wääde em [[Special:Log/import|Emport_Logboch]] fassjehallde.",
+       "importinterwiki": "Empottehre uss_enem andere Wikki",
+       "import-interwiki-text": "Wähl e Wikki un en Sigg zem Emportehre uß.\nEt Dattum vun de Väsiohne un de Metmaacher_Nahme vun de Schriever wähde dobei metjenomme.\nAll de Empochte vun andere Wikkis wähde em [[Special:Log/import|Logbohch vum Empottehre]] faßjehallde.",
+       "import-interwiki-sourcewiki": "Vum Wikki:",
+       "import-interwiki-sourcepage": "Vun dä Sigg:",
        "import-interwiki-history": "All de Versione vun dä Sigg heh kopeere",
        "import-interwiki-templates": "All Schablone metnämme",
        "import-interwiki-submit": "Huhlade!",
        "importcantopen": "Kunnt op de Datei för dä Emport nit zojriefe",
        "importbadinterwiki": "Verkihrte Interwiki Link",
        "importsuccess": "Dat Emporteere hät jeflupp!",
-       "importnosources": "Heh es kein Quell för dä Tikek-Emport vun ander Wikis enjerich.\nDat ahle Versione Huhlade es avjeschalt, un es nit müjjelich.",
+       "importnosources": "Heh es kein Wikki för_enne tiräkte Empoot enjereesch.\nÄllder Väsjohne huhzelade es nit zohjelohße.",
        "importnofile": "Et wood kein Datei huhjelade för ze Emporteere.",
        "importuploaderrorsize": "De Import-Datei huhzelade jingk scheif, weil dat Denge jrößer wi äloup es.",
        "importuploaderrorpartial": "De Import-Datei huhzelade jingk scheif, weil dat Denge nit komplett zo eng transpotteet woode es. Do fäählt jet.",
        "import-error-special": "Di Sigg „$1“ weed nit empotehrt, weil dä iehre Name en enem besöndere Appachtemang litt, woh kein Sigge dren zohjelohße sin.",
        "import-error-invalid": "Di Sigg „$1“ weed nit empotehrt, weil dä Sigg iehre Name, woh se hen empotehrt wääde sull, nit jöltesch es.",
        "import-error-unserialize": "De Väsjohn $2 vun dä Sigg „$1“ kunnt nit von serijäll ußjepack wääde. De Väsjohn sull Daate vun dä Zoot „$3“ änthallde un ußjepack „$4“ jävve.",
+       "import-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-nosubpage": "Em Appachtemang „$1“ vun dä Aanfangssig sin kein Ongersigge zohjelohße.",
        "importlogpage": "Logboch met emporteerte Sigge",
        "importlogpagetext": "Sigge met ehre Versione vun ander Wikis emporteere.",
-       "import-logentry-upload": "„[[$1]]“ emporteet fun enne huhjelade Dattei",
        "import-logentry-upload-detail": "{{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein Väsjohn}} woodt emportehrt.",
-       "import-logentry-interwiki": "hät tirek vum ander Wiki emporteet: „$1“",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein VVäsjohnersion}} woodt empottehrt vun „$2“",
        "javascripttest": " JavaSkrepte ußprobeere.",
-       "javascripttest-title": "De Prööfunge „$1“ loufe.",
        "javascripttest-pagetext-noframework": "Heh di Sigg es för JavaSkrepte ußzeprobeere.",
        "javascripttest-pagetext-unknownframework": "Dä Prööfrahme „$1“ es onbikannt.",
+       "javascripttest-pagetext-unknownaction": "„$1“ es ene onbikannte Opdracht.",
        "javascripttest-pagetext-frameworks": "Bes esu jood un söök eine vun dä Prööfömjävvonge us: $1",
        "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.",
-       "javascripttest-qunit-heading": "De Sammlong vum MediaWiki sing JavaSkrep-<i lang=\"en\">QUnit</i>-Pröövunge",
        "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-mytalk": "Dun Ding eije Klaafsigg aanzeije",
        "tooltip-pt-mycontris": "en Liss met Dinge eije Beidräch",
        "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-addsection": "Donn heh enne neue Afschnett opmaache.",
        "tooltip-feed-atom": "Dä Atom-Abonnomang-Kannal (Feed) för heh di Sigg",
        "tooltip-t-contributions": "Donn en Leß met dä Bedrähsch vun däm Medmaacher belooere",
        "tooltip-t-emailuser": "Scheck en E-Mail aan dä Metmaacher",
+       "tooltip-t-info": "Mieh Aanjahbe övver heh di Sigg",
        "tooltip-t-upload": "Dateie huhlade",
        "tooltip-t-specialpages": "Liss met de {{int:nstab-special}}e",
        "tooltip-t-print": "De Drock-Aansich för heh die Sigg",
        "tooltip-preview": "Liss de Vör-Aansich vun dä Sigg un vun Dinge Änderunge ih datte se Avspeichere deis!",
        "tooltip-diff": "Zeich Ding Änderunge am Tex aan.",
        "tooltip-compareselectedversions": "Dun de Ungerscheid zwesche dä beids usjewählde Versione zeije.",
-       "tooltip-watch": "Op die Sigg heh oppasse.",
+       "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-recreate": "En fottjeschmesse Sigg widder zeröckholle",
        "tooltip-upload": "Mem Dattei-Huhlaade loßlääje",
-       "tooltip-rollback": "Nemmp alle Änderunge zeröck, di dä Läzde jemaat hät, dä aan dä Sigg övverhoup jet jedonn hät. Deit nimmieh frore un määd ene automattesche Endraach en „{{int:Summary}}“",
+       "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-preferences-save": "Enstellunge faßhallde",
        "tooltip-summary": "Jif en koote Zesammefassung en",
        "print.css": "/* CSS heh aan dä Stell wirrek nur op et Sigge Drökke */",
        "noscript.css": "/* Dat CSS heh aan dä Stell krijje nur de Metmaacher met affjeschaldt JavaSkrepp jescheck */",
        "group-autoconfirmed.css": "/* Dat CSS heh aan dä Stell krijje nur de automattesch beshtääteshte Metmacher jescheck */",
+       "group-user.css": "/* Dat CSS heh aan dä Schtäll wirrek sesch nur op de enjeloggte Metmaacher uß */",
        "group-bot.css": "/* Dat CSS heh aan dä Stell krijje nur de Bot-Projrammee jescheck */",
        "group-sysop.css": "/* Dat CSS heh aan dä Stell krijje nur dem Wiki sing Köbeße jescheck */",
        "group-bureaucrat.css": "/* Dat CSS heh aan dä Stell krijje nur de Bürrokraate jescheck */",
        "common.js": "/* Jedes JavaScrip hee kütt för jede Metmaacher in jede Sigg erinn */",
        "group-autoconfirmed.js": "/* De JavaSkreppte fun hee krijje bloß de autemattesch beshtääteschte Metmaacher jescheck */",
+       "group-user.js": "/* De JavaSkreppte heh aan dä Schtäll wirrek sesch nur op de enjeloggte Metmaacher uß */",
        "group-bot.js": "/* De JavaSkreppte fun hee krijje bloß de Bots jescheck */",
        "group-sysop.js": "/* De JavaSkreppte fun hee krijje bloß de Wiki_Köbeße jescheck */",
        "group-bureaucrat.js": "/* De JavaSkreppte fun hee krijje bloß de Bürrokraate jescheck */",
        "pageinfo-article-id": "Dä Sigg ier Nommer en dä Daatebangk",
        "pageinfo-language": "De Schprohch vum Enhallt vun dä Sigg",
        "pageinfo-content-model": "Et Modäll för der Enhalld vun dä Sigg",
-       "pageinfo-robot-policy": "Et opnämme es för Söhkmaschiine",
+       "pageinfo-robot-policy": "Et Opnämme es för Söhkmaschihne",
        "pageinfo-robot-index": "zohjelohße",
        "pageinfo-robot-noindex": "verbodde",
-       "pageinfo-watchers": "De Aanzahl Oppaßer för di Sigg",
+       "pageinfo-watchers": "De Aanzahl Oppaßßer för di Sigg",
        "pageinfo-few-watchers": "Et jidd_er winnijer wi {{PLURAL:$1|eine|$1|keine}} Oppaßer.",
-       "pageinfo-redirects-name": "Ömleidong(e) op heh di Sigg",
-       "pageinfo-subpages-name": "Ongersigg(e) vun heh dä Sigg",
-       "pageinfo-subpages-value": "$1 (dovun {{PLURAL:$2|ein Ömleidong|$2 Ömleidonge|kein Ömleidong}} un {{PLURAL:$3|ein nomaale Sigg|$3 nomaale Sigge|kein nomaale Sigg}})",
+       "pageinfo-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-firstuser": "Aanjelaat vun",
        "pageinfo-firsttime": "Aanjelaat aam",
        "pageinfo-lastuser": "Dä läzde Schriiver",
        "exif-dc-type": "Meedije_Zoot",
        "exif-rating-rejected": "Affjelehnt",
        "exif-isospeedratings-overflow": "Övver 65535",
+       "exif-maxaperturevalue-value": "$1 <i lang=\"en\" xml:lang=\"en\" title=\"Öffnong\">APEX</i> (f/$2)",
        "exif-iimcategory-ace": "Kunß, Kultuur, Vermaache",
        "exif-iimcategory-clj": "Verbräsche, Rääsch",
        "exif-iimcategory-dis": "Onjlöck, Onfäll, Kattaßtroofe",
        "size-exabytes": "$1&nbsp;EB",
        "size-zetabytes": "$1&nbsp;ZB",
        "size-yottabytes": "$1&nbsp;YB",
+       "size-pixel": "$1&nbsp;Pixelle",
+       "size-kilopixel": "$1&nbsp;Killopixelle",
+       "size-megapixel": "$1&nbsp;Mejapixelle",
+       "size-gigapixel": "$1&nbsp;Jijapixelle",
+       "size-terapixel": "$1&nbsp;Terapixelle",
+       "size-petapixel": "$1&nbsp;Petapixelle",
+       "size-exapixel": "$1&nbsp;Exapixelle",
+       "size-zetapixel": "$1&nbsp;Zetapixelle",
+       "size-yottapixel": "$1&nbsp;Yottaixelle",
        "bitrate-bits": "$1&nbsp;bps",
        "bitrate-kilobits": "$1&nbsp;Kbps",
        "bitrate-megabits": "$1&nbsp;Mbps",
        "bitrate-exabits": "$1&nbsp;Ebps",
        "bitrate-zetabits": "$1&nbsp;Zbps",
        "bitrate-yottabits": "$1&nbsp;Ybps",
-       "lag-warn-normal": "Änderunge us de letzte {{PLURAL:$1|Sekund|$1 Sekunde|knappe Sekund}} sin en dä Leß wall noch nit opjenomme.",
-       "lag-warn-high": "Dä Datebankßööver hät jrad vill ze donn.\nÄnderunge us de letzte {{PLURAL:$1|Sekund|$1 Sekunde|knappe Sekund}} sin dröm en dä Leß heh wall noch nit opjenomme.",
+       "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-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]].",
        "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.",
        "version": "Väsjohn vun de Wiki Soffwär zeije",
        "version-extensions": "Installeete Erjänzunge un Zohsätz",
        "version-skins": "De enschtallehrte Bedeenbovverflääsche",
        "version-parser-function-hooks": "Parserfunktione",
        "version-hook-name": "De Schnettstelle ier Name",
        "version-hook-subscribedby": "Opjeroofe vun",
-       "version-version": "(Väsjohn $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[keine Nahme]",
-       "version-license": "MediaWiki sing Lėzänz",
+       "version-license": "MehdijaWikki sing Lėzänz",
        "version-ext-license": "‎Lėzänz",
        "version-ext-colheader-name": "Zohsazprojramm",
        "version-skin-colheader-name": "Et Ußsinn",
        "version-entrypoints-header-url": "<i lang=\"en\">URL</i>",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Der Pad noh de Atikele]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Der Pad noh de Skrepte]",
+       "version-libraries": "Enschtallehrte Projrammsammlonge",
+       "version-libraries-library": "Projrammsammlong",
+       "version-libraries-version": "Väsjohn",
        "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]].",
        "intentionallyblankpage": "Op dä Sigg es med Afseesh nix drop.",
        "external_image_whitelist": "# Donn aan dä Reih heh nix ändere<pre>\n# Onge künne Brochstöke fun rejolähre Ußdrök aanjejovve wäde,\n# alsu dä Deil zwesche / und /\n# Noh em Verjliische met däm URL vun ene Datei fun ußerhallef:\n# Treffer: De Datei weed jezeich odder enjebonge.\n# Söns: ene Link weed aanjezeich.\n# Wam_mer et nit ömschtällt, es Jruß- un Kleinschrevv_ejaal.\n# Reije met # am Aanfang, sen bloß Kommenta\n# Donn de Brochstöck heh noh endrare, un di Reihe bes hee nit ändere</pre>",
        "tags": "De jöltijje Makeerunge för Änderunge",
-       "tag-filter": "[[Special:Tags|Makeerunge]] ußsöke:",
+       "tag-filter": "[[Special:Tags|Makehronge]] ußsöhke:",
        "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-tag": "Dä Makeerung iere Name",
        "tags-display-header": "Kennzeiche en de Leßte met Änderunge",
        "tags-description-header": "Bedüggtening",
+       "tags-source-header": "Quäll",
        "tags-active-header": "Aktiiv?",
        "tags-hitcount-header": "Makeete Änderunge",
+       "tags-actions-header": "Akßjuhne",
        "tags-active-yes": "Joh",
        "tags-active-no": "Näh",
+       "tags-source-extension": "Övver e Zohsazprojramm faßjelaht",
+       "tags-source-manual": "Vun Hand vun Metmaachere udder vun Bots faßjelaht",
+       "tags-source-none": "Weed nit mih jebruch",
        "tags-edit": "ändere",
+       "tags-delete": "fottschmieße",
+       "tags-activate": "aanschallde",
+       "tags-deactivate": "ußschallde",
        "tags-hitcount": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderonge}}",
+       "tags-manage-no-permission": "Do häs nit et Rääsch Kännzeijsche ze verwallde.",
+       "tags-create-heading": "E neu Kännzeijsche aanlähje",
+       "tags-create-explanation": "Neu aanjelahte Kännzeijsche schtonn schtandattmähßesch för de Metmaacher un de Bots parraht.",
+       "tags-create-tag-name": "Däm Kännzeijsche singe Nahme:",
+       "tags-create-reason": "Jrond:",
+       "tags-create-submit": "Lohß Jonn!",
+       "tags-create-no-name": "Do moß der Nahme vun enem Kännzeijsche aanjävve",
+       "tags-create-invalid-chars": "En de Nahme för Kännzeijsche dörve kein Kommas (<code>,</code>) un kein scheive Schtresche (<code>/</code>) dren sin.",
+       "tags-create-invalid-title-chars": "En de Nahme för Kännzeijsche dörve kein Zeische dren sin, di em nit en de Övverschreffte vun Sigg bruche darref.",
+       "tags-create-already-exists": "Dat Kännzeijsche „$1“ jidd_et ald.",
+       "tags-create-warnings-above": "Opjepaß: Beim Kännzeijsche „$1“ aanlähje \n{{PLURAL:$2|es ene|sinner $1|es keine}} Fähler opjetrodde:",
+       "tags-create-warnings-below": "Wells De wigger maache un dat Kännzeijsche aanlähje?",
+       "tags-delete-title": "Kännzeijsche fottschmiiße",
+       "tags-delete-explanation-initial": "Do bes om bäßte Wähsch, et Kännzeijsche „$1“ us de Dahtebangk ze wärfe.",
+       "tags-delete-explanation-in-use": "Et weed vun {{PLURAL:$2|eine Väsjohn udder einem Enndrahch|alle $2 Väsjohn udder Endrähsch|keine Väsjohn udder keinem Endrahsch}} em Logbohch fott jenumme, woh dat em Momang noch dren es.",
+       "tags-delete-explanation-warning": "Dat kam_mer <strong>nit retuur</strong> maache.\nOch wä tiräk en de Dahtebangk met alle Rääschte werreke darf, kann dat nit. Alsu bes sescher, dat dat Kännzeijsche es, wat De fottschmiiße wells.",
+       "tags-delete-explanation-active": "<strong>Dat Kännzeijsche „$1“ es noch aanjeschalldt un weed wigger jebruch wähde.</strong> Öm dat ze verhendere, jangk aan dä Plaz udder all de Pläz, woh dat noch aanjeschalldt es, un donn et doh affschallde.",
+       "tags-delete-reason": "Jrond:",
+       "tags-delete-submit": "Onzeröckhollbaa fottschmiiße!",
+       "tags-delete-not-allowed": "Kännzeijsche, di övver Zohsazprojramme faßjelaat wääde, kam_mer blß fottschmiiße, wann dat Zohsazprojramm et zohlöht.",
+       "tags-delete-not-found": "E Kännzeijsche „$1“ jidd_et nit.",
+       "tags-delete-too-many-uses": "Dat Kännzeijsche „$1“ es för {{PLURAL:$2|mieh wi ein Väsjohn|övver $2 Väsjohn|kein Väsjohn}} em jebruch, dröm kam_mer et nit fottschmiiße.",
+       "tags-delete-warnings-after-delete": "Dat Kännzeijsche „$1“ es fottjeschmeße, ävver {{PLURAL:$2|ei Problem|$2 Probleme|kein Problem}} es opjevalle:",
+       "tags-activate-title": "Kännzeijsche aanschallde",
+       "tags-activate-question": "Do bes om bäßte Wähsch, et Kännzeijsche „$1“ aanzeschallde.",
+       "tags-activate-reason": "Jrond:",
+       "tags-activate-not-allowed": "Ed es nit müjjelesch, et Kännzeijsche „$1“ aanzeschallde.",
+       "tags-activate-not-found": "Dat Kännzeijsche „$1“ jidd_et nit.",
+       "tags-activate-submit": "Aktivehre",
+       "tags-deactivate-title": "Kännzeijsche afschallde",
+       "tags-deactivate-question": "Do bes om bäßte Wähsch, et Kännzeijsche „$1“ afzeschallde.",
+       "tags-deactivate-reason": "Jrond:",
+       "tags-deactivate-not-allowed": "Ed es nit müjjelesch, et Kännzeijsche „$1“ afzeschallde.",
+       "tags-deactivate-submit": "Ußschallde",
        "comparepages": "Sigge verjliesche",
        "compare-page1": "De ein Sigg",
        "compare-page2": "De ander Sigg",
        "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-info": "(Mer han kei Verbindung noh_m Datebank-ẞööver krijje künne: $1)",
-       "dberr-info-hidden": "(Mer han kei Verbindung noh_m Datebank-ẞööver krijje künne)",
+       "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.",
        "revdelete-uname-unhid": "der Name vum Metmaacher öffentlesh jemaat",
        "revdelete-restricted": ", och för de Wiki-Köbesse",
        "revdelete-unrestricted": ", och för de Wiki-Köbesse",
+       "logentry-block-block": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|dä|dat|dä Metmaacher|de|dat}} $3 för en Zigg vun $5 jeschpächt. $6",
+       "logentry-block-unblock": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|däm|däm|däm Metmaacher|dä|däm}} $3 {{GENDER:$3|sing|sing|sing|ier|sing}} sing Schpärr opjehovve.",
+       "logentry-block-reblock": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|däm|däm|däm Metmaacher|dä|däm}} $3 {{GENDER:$3|sing|sing|sing|ier|sing}} sing Schpärr för di Zigg vun $5 verändert. $6",
+       "logentry-suppress-block": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|dä|dat|dä Metmaacher|de|dat}} $3 för en Zigg vun $5 jespächt. $6",
+       "logentry-suppress-reblock": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|däm|däm|däm Metmaacher|dä|däm}} $3 {{GENDER:$3|sing|sing|sing|ier|sing}} sing Schpärr för di Zigg vun $5 verändert. $6",
+       "logentry-import-upload": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät di Sigg „$3“ huhjelahde un esu empottehrt",
+       "logentry-import-interwiki": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät di Sigg „$3“ fun enem andere Wikki empottehrt",
+       "logentry-merge-merge": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ met dä Sigg „$4“ zersamme jelaat, jenou jenumme de Väsjohne bes $5",
        "logentry-move-move": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt.",
        "logentry-move-move-noredirect": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei kein Ömleidong aanjelaat.",
        "logentry-move-move_redir": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei en ahle Ömleindongßsigg fottjeschmeße.",
        "logentry-rights-rights": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät däm Metmaacher „$3“ sing Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.",
        "logentry-rights-rights-legacy": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.",
        "logentry-rights-autopromote": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 wood automattesch vum $4 zom $5 jemaat.",
+       "logentry-upload-upload": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Dattei „$3“ huhjelahe.",
+       "logentry-upload-overwrite": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät en neue Väsjohn vun dä Dattei „$3“ huhjelahe.",
+       "logentry-upload-revert": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Dattei „$3“ huhjelahe.",
+       "log-name-managetags": "Logbohch vun de Kännzeijsche_Verwaldong",
+       "log-description-managetags": "Heh sin de Veränderonge em Zersammehang vun de [[Special:Tags|Kännzeijsche]] faßjehallde. En däm Logbohch schteiht blohß de Wikki_Köhbeße händesch jedonn han. Kännzeijsche künne och vum Wikki automattesch aanjelaat un fott jemaat wääde, un douche dann heh nit op.",
+       "logentry-managetags-create": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ aanjelaat.",
+       "logentry-managetags-delete": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ fottjeschmeße un derbei uß {{PLURAL:$5|eine Väsjohn udder einem Enndraach|$5 Väsjohne udder $5 Enndrähsch|keine Väsjohn udder keinem Enndraach}} vum Logbohch eruß jenumme.",
+       "logentry-managetags-activate": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ aanjeschalldt för de Metmaacher un de Bots.",
+       "logentry-managetags-deactivate": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ för de Metmaacher un de Bots afjeschalldt.",
        "rightsnone": "(nix)",
        "revdelete-summary": "dä Täx en „{{int:summary}}“",
+       "feedback-adding": "Ben di Röckmäldong op di Sigg aam donn&nbsp;…",
+       "feedback-back": "Retuur",
+       "feedback-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-subject": "Theema:",
-       "feedback-message": "Nohreesch:",
        "feedback-cancel": "Stopp! Avbreche!",
-       "feedback-submit": "Lohß jonn!",
-       "feedback-adding": "Ben di Röckmäldong op di Sigg aam donn&nbsp;…",
+       "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-dialog-title": "En Rökmäldong jävve",
+       "feedback-dialog-intro": "Dat Fommolaa kam_mer för en Rökmäldong bruche. Di kütt zesamme met Dingem Metmaacher_Nahme op di Sigg „$1“.",
+       "feedback-error-title": "Fähler",
        "feedback-error1": "Fähler: dat <i lang=\"en\">API</i> säät jät, wat mer nit kenne",
        "feedback-error2": "Fähler: de Sigg ze ändere es donävve jejange",
        "feedback-error3": "Fähler: dat <i lang=\"en\">API</i> joov kein Antwoot",
+       "feedback-error4": "Ene Fähler es opjetrodde.\nMer kunnte di Rökmäldong nit onger dä aanjejovve Övverschreff aflähje.",
+       "feedback-message": "Nohreesch:",
+       "feedback-subject": "Theema:",
+       "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-close": "Jedonn.",
-       "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-thanks-title": "Ene schöne Dangk och!",
+       "feedback-useragent": "Dä Brauser:",
        "searchsuggest-search": "Söhke",
        "searchsuggest-containing": "dren änthallde…",
        "api-error-badaccess-groups": "Do häs nit et Rääsch, Datteije en heh dat Wiki huhzelaade.",
        "api-error-overwrite": "En Dattei ze övverschrieve es nit zohjelohße.",
        "api-error-stashfailed": "Fähler: Dä ẞööver hät kein Datteije zweschejeschpeischert.",
        "api-error-publishfailed": "Ene Fähler es em ẞööver opjetrodde. En zweschejescheischerte Dattei kunnt nit öffentlesch jemaat wääde.",
+       "api-error-stasherror": "Ene Fähler es opjetrodd, wi mer di Dattei en der <i lang=\"en\" xml:lang=\"en\">stash</i> huh aam lahde wohre.",
+       "api-error-stashedfilenotfound": "Di Dattei wohd em <i lang=\"en\" xml:lang=\"en\">stash</i> nit jefonge, wi mer se vun doh huh lahde wullte.",
+       "api-error-stashpathinvalid": "Di Dattei wohd em <i lang=\"en\" xml:lang=\"en\">stash</i> nit jefonge, weil dä Pad do hen nit jeschtemmp hät.",
+       "api-error-stashfilestorage": "Ene Fähler es opjetrodd, wi mer di Dattei en der <i lang=\"en\" xml:lang=\"en\">stash</i> donn wullte.",
+       "api-error-stashzerolength": "Dä ẞööver kunnt di Dattei nit en der <i lang=\"en\" xml:lang=\"en\">stash</i> donn, weil en dä Dattei nix dren schtund.",
+       "api-error-stashnotloggedin": "Do moß enjelogg sin, öm en Dattei en der <i lang=\"en\" xml:lang=\"en\">stash</i> huh ze lahde.",
+       "api-error-stashwrongowner": "Di Dattei em <i lang=\"en\" xml:lang=\"en\">stash</i> woh De draan wells, jehürt Der nit.",
+       "api-error-stashnosuchfilekey": "Di Dattei em <i lang=\"en\" xml:lang=\"en\">stash</i> woh De draan wells, jidd_et nit.",
        "api-error-timeout": "Dä ẞööver hät en dä jewennde Zick nit jeantwoot.",
        "api-error-unclassified": "Ene Fähler es opjetrodde, der mer nit kenne.",
        "api-error-unknown-code": "Nit bekannte Fähler: „$1“",
        "expand_templates_generate_xml": "Och dä XML-Parser-Boum zeije",
        "expand_templates_generate_rawhtml": "Donn de Röh HTML Ußjaav aanzeije",
        "expand_templates_preview": "Vör-Aansich",
+       "expand_templates_preview_fail_html": "<em>Weil et Wiki rüh <i xml:lang=\"en\" title=\"HyperText Markup Language\" lang=\"en\">HTML</i> zohlöht un de Sezongsdahte verschött jejange sin, dom_mer de {{int:preview}} uß Vörseesch nit aanzeije, öm Aanjreffe övver JavaSkrep zevör ze kumme.</em>\n\n<strong>Wann dat heh en Ohdenong es, bes esu johd un versöhg et norr_ens.</strong>\nwann dat nix hellef, versöhg ens [[Special:UserLogout|ußzelogge]] un neu enzelogge.",
+       "expand_templates_preview_fail_html_anon": "<em>Weil et Wiki rüh <i xml:lang=\"en\" title=\"HyperText Markup Language\" lang=\"en\">HTML</i> zohlöht un Do nit ennjelogg bes, dom_mer de {{int:preview}} uß Vörseesch nit aanzeije, öm Aanjreffe övver JavaSkrep zevör ze kumme.</em>\n\n<strong>Wann dat heh en Ohdenong es, bes esu johd un donn [[Special:UserLogin|enlogge]] un versöhg et norr_ens.</strong>",
        "pagelanguage": "De Schprohch för di Sigg faßlääje",
        "pagelang-name": "Sigg",
        "pagelang-language": "De Schprohch",
        "right-pagelang": "Ener Sigg ier Schprohch tuusche",
        "action-pagelang": "Sigge ier Schprohch zu tuusche",
        "log-name-pagelang": "Logbooch vum Tuusche vun Sige iehr Schprohche",
+       "log-description-pagelang": "Dat heh es et Logbohch vun de Veränderonge aan de Schprohch vun de Sigge.",
+       "logentry-pagelang-pagelang": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Schprohch vun dä Sigg „$3“ vun $4 op $5 verändert.",
+       "default-skin-not-found": "De schtandattmähßejje Bedehnbovverfläsch <code>$1</code> för et Wikki es nit ze fenge. Se weed övver dä Enndrahch <code lang=\"en\" xml:lang=\"en\">$wgDefaultSkin</code> en dä Dattei <code lang=\"en\" xml:lang=\"en\">LocalSettings.php</code> om ẞööver faßjelaat.\n\n{{PLURAL:$4|Heh di Bedehnbovverfläsch es|Heh di Bedehnbovverfläsche sin|Kein Bedehnbovverfläsche sin}} doh:\n\n$2\n\nLohr och en et [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Handbohch övver et Enschtälle vun Bedehnbovverfläsche].\n\n*'''Falls dat heh e fresch enjereesch MehdijaWikki es:'''\n*: MehdijaWikki wood velleisch övver <i lang=\"en\" xml:lang=\"en\">Git</i> enschtallehrt, udder der Quälltäx wood tiräk obb_en ander Manier enschtallehrt. Met däm Problehm heh wohr ze rääschne. Donn winneschßdens eine vun dä Bovverfläsche uss_em [https://www.mediawiki.org/wiki/Category:All_skins Verzeischneß vun de Bedehnbovverfläsche vum MehdijaWikki] enschtallehre. Dat jeihd, endämm dat De:\n*:* einzel veröffentleschte Bovverfläsche us [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] erongerlähds un en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun dä MehdijaWikki_Enschtallazuhn holls,\n*:* winneschsdens eins vun dä Verzeischneße us <code lang=\"en\" xml:lang=\"en\">mediawiki/skins/*</code> met <i lang=\"en\" xml:lang=\"en\">Git</i> en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge MehdijaWikki_Enschtallazuhn holls,\n*:* de [https://www.mediawiki.org/wiki/Download Dattei vum MehdijaWikki] erongerlähds, woh ongerscheidlejje Bedehnbovverfläsche dren sin un Zohsäz derzoh. Uß däm Verzeischneß doh dren kam_mer Saache en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun dä MehdijaWikki_Enschtallazuhn holle.\n*: Dat sullt sesch nit met Dingem <i lang=\"en\" xml:lang=\"en\">git</i>-Verzeischneß schtühre, falls De och ene Äntweckler vum MehdijaWikki bes.\n*'''Falls dat MehdijaWikki heh jrahd obb ene neue Schtand jebraht wood:'''\n*: Bei MehdijaWikki en dä Väsjohn 1.24 un hüüter wääde de enschtallehrte Bedehnbovverfläsche nit mieh automattesch alle aanjemaat; süsch och em [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Handbohch] dernoh. Do kanns heh di {{PLURAL:$5|Reih|Reihje|kein Reihje}} en de Dattei <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">LocalSettings.php</code> eren koppehre, öm {{PLURAL:$5|di enschtallehrte Bedehnbovverfläsch|alle enschtallehrte Bedehnbovverfläsche|kein Bedehnbovverfläsch}} aanzeschallde:\n<pre lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3</pre>\n* '''Falls de jrahd aan dä Dattei <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">LocalSettings.php</code> jät geändert häs:'''\n*: Donn de Nahme vun de Bedehnbovverfläsche en dä Dattei pröhve. Se künnte verhehrt jeschrevve sin.",
+       "default-skin-not-found-no-skins": "De schtandattmähßejje Bedehnbovverfläsch <code>$1</code> för et Wikki es nit ze fenge. Se weed övver dä Enndraach <code lang=\"en\" xml:lang=\"en\">$wgDefaultSkin</code> en dä Dattei <code lang=\"en\" xml:lang=\"en\">LocalSettings.php</code> om ẞööver faßjelaat.\n\nEt sinn_er kein Bedehnbovverfläsche doh.\n\n*'''Falls dat heh e fresch enjereesch MehdijaWikki, es udder jrahd obb ene neue Schtand jebraht wood:'''\n*: MehdijaWikki wood velleisch övver <i lang=\"en\" xml:lang=\"en\">Git</i> enschtallehrt, udder der Quälltäx wood tiräk obb_en ander Manier enschtallehrt. Met däm Problehm heh wohr ze rääschne. Bei MehdijaWikki en dä Väsjohn 1.24 un hüüter sin kein Bedehnbovverfläsche mieh automattesch derbei. Donn winneschßdens eine vun dä Bovverfläsche uss_em [https://www.mediawiki.org/wiki/Category:All_skins Verzeischneß vun de Bedehnbovverfläsche] enschtallehre. Dat jeihd, endämm dat De:\n*:* winneschsdens eins vun dä Verzeischneße us <code lang=\"en\" xml:lang=\"en\">mediawiki/skins/*</code> met <i lang=\"en\" xml:lang=\"en\">Git</i> en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge MehdijaWikki_Enschtallazuhn holls,\n*:* einzel veröffentleschte Bovverfläsche us [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] erongerlähds un en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge MehdijaWikki_Enschtallazuhn holls,\n*:* de [https://www.mediawiki.org/wiki/Download Dattei vum MehdijaWikki] erongerlähds, woh ongerscheidlejje Bedehnbovverfläsche dren sin un Zohsäz derzoh. Uß däm Verzeischneß doh dren kam_mer Saache en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge vun dä MehdijaWikki_Enschtallazuhn holle.\n*: Dat sullt sesch nit met Dingem <i lang=\"en\" xml:lang=\"en\">Git</i>-Verzeischneß schtühre, falls De och ene Äntweckler vum MehdijaWikki bes. Lohr em [https://www.mediawiki.org/wiki/Manual:Skin_configuration Handbohch] dernoh, wi mer Bedehnbovverfläsche aanmääd un ene Schtandatt faßlähsch.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enjeschalldt)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ußjeschalldt''')",
+       "mediastatistics": "Schtateßteke övver de Meedije",
+       "mediastatistics-summary": "Schtatißteke övver de huhjelahde Zoote Datteije. Von de Datteije weed bloß de jeweils neuste Väsjohn jezallt. Fottjeschmeße un övverhollte Datteije wähde nit metjezallt.",
+       "mediastatistics-nfiles": "$1 ($2%)",
+       "mediastatistics-nbytes": "{{PLURAL:$1|Ei Byte|$1 Bytes|Nix}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "<i lang=\"en\" xml:lang=\"en\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Tüpp",
+       "mediastatistics-table-extensions": "Müjjelesche Datteizoote",
+       "mediastatistics-table-count": "De Aanzahl Dateije",
+       "mediastatistics-table-totalbytes": "Ömvang",
        "mediastatistics-header-unknown": "Onbikannt",
+       "mediastatistics-header-bitmap": "Belder uß Pixelle",
+       "mediastatistics-header-drawing": "Zeischnonge uß Väktohre",
+       "mediastatistics-header-audio": "Tohndatteije",
        "mediastatistics-header-video": "Viddejos",
+       "mediastatistics-header-multimedia": "Kombinehrte Meedijedatteije",
+       "mediastatistics-header-office": "Dokkemänte met Täx dren",
        "mediastatistics-header-text": "Täx",
        "mediastatistics-header-executable": "Projramme",
        "mediastatistics-header-archive": "Kumpremeerte Dahtefommahte",
        "json-warn-trailing-comma": "{{PLURAL:$1|0=Kei Komma wood|1=Ei Komma woodt|$1 Kommas woodte}} aam Ängk vum <i lang=\"en\" xml:lang=\"en\">JSON</i> fott jenumme.",
-       "json-error-unknown": "Mem <i lang=\"en\" xml:lang=\"en\">JSON</i> es jät scheif jeloufe: $1"
+       "json-error-unknown": "Mem <i lang=\"en\" xml:lang=\"en\">JSON</i> es jät scheif jeloufe: $1",
+       "json-error-depth": "Der ẞtägg eß övverjeloufe",
+       "json-error-state-mismatch": "Onjöltesch udder kapott <i lang=\"en\" lang=\"en\" xml:lang=\"en\" title=\"JavaScript Object Notation\">JSON</i>-Fommaat",
+       "json-error-ctrl-char": "Verkeht Schtührzeijsche. Künnt ene Fähler mem Kodehre sin.",
+       "json-error-syntax": "Fähler en de Syntax",
+       "json-error-utf8": "Kapodde Zeijsche em <i lang=\"en\" lang=\"en\" xml:lang=\"en\" title=\"Universal Character Set Transformation Format-8-bit\">UTF-8</i>-Fommaat. Künnt ene Fähler mem Kodehre sin.",
+       "json-error-recursion": "En däm Wäät zem Kodehre sinn_er rekursihve Bezösch dren.",
+       "json-error-inf-or-nan": "Et sinn_er Wääte <i lang=\"en\" lang=\"en\" xml:lang=\"en\" title=\"Not a Number – Kein Zahl\">NAN</i> ov <i lang=\"en\" lang=\"en\" xml:lang=\"en\" title=\"Infinity – övver alle Mohße jruhß\">INF</i> en däm Wäät zem Kodehre dren.",
+       "json-error-unsupported-type": "Et wodd ene Wäät aanjejovve vun ene Zoot, di nit ze Kodehre jeiht.",
+       "headline-anchor-title": "Lengk op heh dä Afschnett",
+       "special-characters-group-latin": "Lateinesch",
+       "special-characters-group-latinextended": "Lateinesch met Extras",
+       "special-characters-group-ipa": "IPA, et engernazjonal foneetesch Alfabeet",
+       "special-characters-group-symbols": "Symbole",
+       "special-characters-group-greek": "Jriischesch",
+       "special-characters-group-cyrillic": "Kyrillesch",
+       "special-characters-group-arabic": "Arabesch",
+       "special-characters-group-arabicextended": "Araabesch met Extras",
+       "special-characters-group-persian": "Pärsesch",
+       "special-characters-group-hebrew": "Hebräjesch",
+       "special-characters-group-bangla": "Benjaalesch",
+       "special-characters-group-tamil": "Tamiilesch",
+       "special-characters-group-telugu": "Teluuju",
+       "special-characters-group-sinhala": "Singhaleesesch",
+       "special-characters-group-gujarati": "Jujaraatesch",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thailändesch",
+       "special-characters-group-lao": "Laotesch",
+       "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"
 }
index bd25d62..609dcd8 100644 (file)
@@ -13,7 +13,8 @@
                        "Liangent",
                        "The Evil IP address",
                        "Welathêja",
-                       "아라"
+                       "아라",
+                       "Bikarhêner"
                ]
        },
        "tog-underline": "Xetekê di bin girêdanê de çêke:",
        "oct": "kew",
        "nov": "ser",
        "dec": "ber",
+       "january-date": "Rêbendan $1",
+       "february-date": "Reşemî $1",
+       "march-date": "Adar $1",
+       "april-date": "Avrêl $1",
+       "may-date": "Gulan $1",
+       "june-date": "Pûşper $1",
+       "july-date": "Tîrmeh $1",
+       "august-date": "Gelawêj $1",
+       "september-date": "Rezber $1",
+       "october-date": "Kewçêr $1",
+       "november-date": "Sermawez $1",
+       "december-date": "Berfanbar $1",
        "pagecategories": "{{PLURAL:$1|Kategorî|Kategorî}}",
        "category_header": "Gotarên di kategoriya \"$1\" de",
        "subcategories": "Binkategorî",
        "actions": "Çalakî",
        "namespaces": "Valahiya nav",
        "variants": "Variyant",
+       "navigation-heading": "Menûya navîgasyonê",
        "errorpagetitle": "Çewtî",
        "returnto": "Vegere $1.",
        "tagline": "Ji {{SITENAME}}",
        "viewhelppage": "Rûpela alîkariyê bibîne",
        "categorypage": "Li rûpela kategoriyê binêre",
        "viewtalkpage": "Li gotûbêjê binêre",
-       "otherlanguages": "Zimanên din",
+       "otherlanguages": "Bi zimanên din",
        "redirectedfrom": "(Ji $1 hate beralîkirin)",
        "redirectpagesub": "Rûpelê beralî bike",
        "lastmodifiedat": "Ev rûpel cara dawî di $2, $1 de hate guherandin.",
        "disclaimers": "Ferexetname",
        "disclaimerpage": "Project:Ferexetname",
        "edithelp": "Alîkariya guherandinê",
+       "helppage-top-gethelp": "Alîkarî",
        "mainpage": "Destpêk",
        "mainpage-description": "Destpêk",
        "policy-url": "Project:Rêgez",
        "nospecialpagetext": "<strong>Rûpela taybet a te xwestî tune ye.</strong>\n\nHemû rûpelên taybet dikarin di [[Special:SpecialPages|lîsteya rûpelên taybet]] de werin dîtin.",
        "error": "Çewtî",
        "databaseerror": "Çewtiya bingeha daneyan",
+       "databaseerror-error": "Çewtî:$1",
        "laggedslavemode": "'''Zanibe:''' Dibe ku di vê rûpelê de rojanekirinên dawî nîn bin.",
        "readonly": "Bingeha daneyan hatiye girtin",
        "enterlockreason": "Sedemeke bestinê binivîse, herwiha demeke texmînkirî ji bo vebûna bestinê binivîse!",
        "yourpassword": "Şîfre:",
        "userlogin-yourpassword": "Şîfre",
        "userlogin-yourpassword-ph": "Şîfreya xwe binivîse",
+       "createacct-yourpassword-ph": "Şîfreya xwe binivîse",
        "yourpasswordagain": "Şîfreyê dîsa binivîse:",
+       "createacct-yourpasswordagain-ph": "Şîfreyê ji nû ve têkeve",
        "remembermypassword": "Şifreya min di her têketina min de bîne bîra xwe (herî zêde $1 {{PLURAL:$1|rojekê|rojan}})",
        "userlogin-remembermypassword": "Min têketî bihêle",
        "userlogin-signwithsecure": "Girêdana parastî bikarbîne",
        "externaldberror": "Çewtiyeke bingeha daneyan heye, an jî destûra te ya rojanekirina hesabê xweyê navxweyî nîne.",
        "login": "Têkeve",
        "nav-login-createaccount": "Têkeve / hesabekî nû çêke",
-       "userlogin": "Têkeve an hesabekî nû çêke",
+       "userlogin": "Têkeve / hesabekî nû çêke",
        "userloginnocreate": "Têkeve",
        "logout": "Derkeve",
        "userlogout": "Derkeve",
        "createacct-emailoptional": "E-name",
        "createacct-email-ph": "E-nameya xwe binivîse",
        "createaccountmail": "Use a temporary random password and send it to the email address specified below",
+       "createacct-realname": "Navê te ya rast (Ko tu bixwazi bikeve, pêdivî nîne)",
        "createaccountreason": "Sedem:",
        "createacct-reason": "Sedem",
        "createacct-imgcaptcha-ph": "Nivîsa ku tu li jor dibînî binivîse",
        "createacct-submit": "Hesabê xwe biafirîne",
        "createacct-benefit-body2": "{{PLURAL:$1|rûpel}}",
        "badretype": "Her du şîfreyên ku te nivîsîn li hevdu nayên.",
-       "userexists": "Ev navî bikarhênerî berê tê bikaranîn. Xêra xwe navekî din bibe.",
+       "userexists": "Ev navî bikarhênerî berê tê bikaranîn. Xêra xwe navekî din dake.",
        "loginerror": "Çewtiya têketinê",
        "nocookiesnew": "Hesabê bikarhêner hatibû çêkirin, lê te xwe qeyd nekiriye. {{SITENAME}} ji bo qeydkirina bikarhêneran cookie'yan bikartîne. Te bikaranîna cookie'yan girtiye. Xêra xwe cookie'yan qebûl bike, piştre bi navê bikarhêner û şîfreya xwe têkeve.",
        "nocookieslogin": "Ji bo qeydkirina bikarhêneran {{SITENAME}} \"cookies\" bikartîne. Te fonksîyona \"cookies\" girtîye. Xêra xwe kerema xwe \"cookies\" gengaz bike û careke din biceribîne.",
        "notextmatches": "Di nav sernivîsan de nehat dîtin.",
        "prevn": "{{PLURAL:$1|$1}} paş",
        "nextn": "{{PLURAL:$1|$1}} pêş",
+       "prev-page": "rûpela berî vê",
+       "next-page": "rûpela pêş",
        "prevn-title": "{{PLURAL:$1|result|Encamên}} pêştir $1",
        "nextn-title": "$1 {{PLURAL:$1|encama|encamên}} pêştir",
        "shown-title": "Li her rûpelê $1 {{PLURAL:$1|encam|encaman}} nîşan bide",
        "action-userrights-interwiki": "mafê bikarhênerên li ser wîkiyên din biguherîne",
        "action-sendemail": "e-nameyan bişîne",
        "nchanges": "$1 {{PLURAL:$1|guherandinek|guherandin}}",
+       "enhancedrc-history": "dîrok",
        "recentchanges": "Guherandinên dawî",
        "recentchanges-legend": "Vebijarkên guherandinên dawî",
        "recentchanges-summary": "Guhertinên herî dawî yên wîkiyê li ser vê rûpelê bişopîne.",
-       "recentchanges-label-minor": "Ev guhertineka biçûk e",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (also see [[Special:NewPages|list of new pages]])",
+       "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-plusminus": "Qebareya vê rûpelê bi ev qas biteyan hate guherandin",
+       "recentchanges-legend-heading": "'''Ravekirina kurtenavan:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (here [[Taybet:Rûpelên_nû|lîsteya rûpelên nû]])",
        "rclistfrom": "Guherandinên ji $3 $2 şûnde nîşan bide",
        "rcshowhideminor": "Guherandinên biçûk $1",
        "rcshowhideminor-show": "nîşan bide",
        "usercreated": "di $1 de, li $2 hate çêkirin",
        "newpages": "Rûpelên nû",
        "newpages-username": "Navê bikarhêner:",
-       "ancientpages": "Gotarên kevintirîn",
+       "ancientpages": "Gotarên herî kevin",
        "move": "Navê rûpelê biguherîne",
        "movethispage": "Vê rûpelê bigerîne",
        "notargettitle": "Hedef tune",
        "pager-older-n": "{{PLURAL:$1|kevintir 1|kevintir $1}}",
        "booksources": "Çavkaniyên pirtûkan",
        "booksources-search-legend": "Li pirtûkan bigere",
+       "booksources-search": "Lêgerîn",
        "booksources-text": "Li vir listek ji lînkên rûpelên, yê pirtûkên nû ya kevin difiroşin, heye. Hên jî li vir tu dikarî înformasyonan li ser wan pirtûkan tê derxê.",
        "specialloguserlabel": "Bikarhêner:",
        "speciallogtitlelabel": "Sernav:",
        "version": "Versiyon",
        "version-specialpages": "Rûpelên taybet",
        "version-other": "yên din",
-       "version-version": " (Verzîyon $1)",
+       "version-version": "($1)",
        "version-license": "Destûr",
        "version-software-product": "Berhem",
        "version-software-version": "Guherto",
        "logentry-newusers-create": "$1 hesabekî bikarhêneriyê çêkir",
        "rightsnone": "(tune)",
        "revdelete-summary": "kurteyê biguherîne",
-       "feedback-subject": "Mijar:",
-       "feedback-message": "Peyam:",
        "feedback-cancel": "Betal bike",
        "feedback-close": "Çêbû",
+       "feedback-message": "Peyam:",
+       "feedback-subject": "Mijar:",
+       "feedback-thanks-title": "Spas!",
        "searchsuggest-search": "Lêgerîn",
        "searchsuggest-containing": "dihundirîne...",
        "expand_templates_output": "Encam",
        "expand_templates_ok": "Baş e",
-       "expand_templates_preview": "Pêşdîtin"
+       "expand_templates_preview": "Pêşdîtin",
+       "special-characters-group-latin": "Latînî",
+       "special-characters-group-latinextended": "Latînî berfirehkirî",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Sembol",
+       "special-characters-group-greek": "Yewnanî",
+       "special-characters-group-cyrillic": "Kirîlî",
+       "special-characters-group-arabic": "Erebî",
+       "special-characters-group-persian": "Farsî",
+       "special-characters-group-hebrew": "Îbranî",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-telugu": "Telûgû",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gucaratî",
+       "special-characters-group-thai": "Tay",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index cfb0f45..94f5b4b 100644 (file)
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|keskows]])",
        "version": "Versyon",
        "version-other": "Aral",
-       "version-version": "(Versyon $1)",
+       "version-version": "($1)",
        "fileduplicatesearch-filename": "Hanow an restren:",
        "fileduplicatesearch-submit": "Hwilas",
        "specialpages": "Folennow arbennek",
index 2d3df3a..0212208 100644 (file)
@@ -13,7 +13,8 @@
                        "Ztimur",
                        "Викиней",
                        "아라",
-                       "Askar Nazyrov"
+                       "Askar Nazyrov",
+                       "Macofe"
                ]
        },
        "tog-underline": "Шилтемелердин алдын сызуу:",
        "import-invalid-interwiki": "Көрсөтүлгөн уикиден импорттоого мүмкүн эмес.",
        "importlogpage": "Импорт журналы",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия}}",
-       "import-logentry-interwiki": "«$1» — уики аралык импорту",
        "javascripttest": "JavaScript'ти текшерүү",
-       "javascripttest-title": "$1 үчүн текшерүү жүргүзүлүп жатат",
        "tooltip-pt-userpage": "Колдонуучу барагыңыз",
        "tooltip-pt-mytalk": "Баарлашуу барагыңыз",
        "tooltip-pt-anontalk": "Бул IP дарекке арналган талкуулоо барагы",
        "version-specialpages": "Кызматтык барактар",
        "version-variables": "Өзгөрмөлөр",
        "version-other": "Башка",
-       "version-version": "(Версия $1)",
+       "version-version": "($1)",
        "version-license": "Лицензия",
        "version-software": "Орнотулган программалык камсыздоо",
        "version-software-product": "Продукт",
        "logentry-newusers-create2": "$1 эсеп жазуусун түздү",
        "logentry-newusers-autocreate": "Автоматтуу түрдө $1 эсеп жазуусу түзүлдү",
        "rightsnone": "(жок)",
-       "feedback-subject": "Тема:",
-       "feedback-message": "Билдирүү:",
-       "feedback-cancel": "Жокко чыгаруу",
-       "feedback-submit": "Пикир жөнөтүү",
        "feedback-adding": "Баракка пикирди кошуу…",
+       "feedback-bugnew": "Мен текшердим. Жаңы ката жөнүндө маалымдоо",
+       "feedback-cancel": "Жокко чыгаруу",
+       "feedback-close": "Даяр",
        "feedback-error1": "Ката. API'ден белгисиз натыйжа",
        "feedback-error2": "Ката: Оңдоо оңунан чыккан жок",
        "feedback-error3": "Ката: API'ден жооп жок",
-       "feedback-close": "Даяр",
-       "feedback-bugnew": "Мен текшердим. Жаңы ката жөнүндө маалымдоо",
+       "feedback-message": "Билдирүү:",
+       "feedback-subject": "Тема:",
+       "feedback-submit": "Жөнөтүү",
        "searchsuggest-search": "Издөө",
        "searchsuggest-containing": "кармагандар...",
        "api-error-badtoken": "Ички ката: анык эмес токен.",
        "mediastatistics-header-audio": "Аудио",
        "mediastatistics-header-video": "Видеолор",
        "mediastatistics-header-office": "Кеңсе",
-       "mediastatistics-header-text": "Тексттик"
+       "mediastatistics-header-text": "Тексттик",
+       "special-characters-group-latin": "Латынча",
+       "special-characters-group-latinextended": "Латынча кеңейтилген",
+       "special-characters-group-ipa": "ЭФА (IPA)",
+       "special-characters-group-symbols": "Белгилер",
+       "special-characters-group-greek": "Грек",
+       "special-characters-group-cyrillic": "Кирилик",
+       "special-characters-group-arabic": "Араб",
+       "special-characters-group-arabicextended": "Арабча кеңейтилген",
+       "special-characters-group-persian": "Перс",
+       "special-characters-group-hebrew": "Иврит",
+       "special-characters-group-bangla": "Бенгал",
+       "special-characters-group-tamil": "Тамил",
+       "special-characters-group-telugu": "Телугу",
+       "special-characters-group-sinhala": "Сингала",
+       "special-characters-group-gujarati": "Гужарати",
+       "special-characters-group-devanagari": "Деванагари",
+       "special-characters-group-thai": "Тай",
+       "special-characters-group-lao": "Лаос",
+       "special-characters-group-khmer": "Кхмер"
 }
index 0c55c6c..77734a2 100644 (file)
@@ -21,7 +21,8 @@
                        "UV",
                        "Žekřil71pl",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Lesgles"
                ]
        },
        "tog-underline": "Versores linea denotandi:",
        "tog-showtoolbar": "Affigere trabem redigentem",
        "tog-editondblclick": "Percussus duplex redactionem hortetur",
        "tog-editsectiononrightclick": "Paginarum segmenta dextero percussu in titulis redigenda",
-       "tog-watchcreations": "Paginas quas creo et fasciculos quos impono in paginarum custoditarum indicem addere",
-       "tog-watchdefault": "Paginas et fasciculos quos recenseo in paginarum custoditarum indicem addere",
-       "tog-watchmoves": "Paginas et fasciculos quos moveo in paginarum custoditarum indicem addere",
-       "tog-watchdeletion": "Paginas et fasciculos quos deleo in paginarum custoditarum indicem addere",
+       "tog-watchcreations": "Paginas quas creo et fasciculos quos impono in paginarum observatarum indicem addere",
+       "tog-watchdefault": "Paginas et fasciculos quos recenseo in paginarum observatarum indicem addere",
+       "tog-watchmoves": "Paginas et fasciculos quos moveo in paginarum observatarum indicem addere",
+       "tog-watchdeletion": "Paginas et fasciculos quos deleo in paginarum observatarum indicem addere",
        "tog-minordefault": "Notare omnes recensiones quasi minores",
        "tog-previewontop": "Monstrare praevisum ante capsam recensiti, non post ipsam",
        "tog-previewonfirst": "Praevisum monstrare recensione incipiente",
-       "tog-enotifwatchlistpages": "Mittere mihi litteras electronicas si pagina a me custodita vel fasciculus a me custoditus mutatur",
+       "tog-enotifwatchlistpages": "Mittere mihi litteras electronicas si pagina a me observata vel fasciculus a me observatus mutatur",
        "tog-enotifusertalkpages": "Mittere mihi litteras electronicas si mea disputatio mutatur",
        "tog-enotifminoredits": "Mittere mihi litteras electronicas etiam pro recensionibus minoribus",
        "tog-enotifrevealaddr": "Monstrare inscriptio mea electronica in nuntiis notificantibus",
-       "tog-shownumberswatching": "Numerum usorum custodientium monstrare",
+       "tog-shownumberswatching": "Numerum usorum observantium monstrare",
        "tog-oldsig": "Subscriptio ad tempus adhibita:",
        "tog-fancysig": "Subscriptio vicitext (sine nexu automatico)",
        "tog-uselivepreview": "Praevisum viventem adhibere (experimentalis)",
        "tog-forceeditsummary": "Si recensionem non summatim descripsero, me roga si continuare velim",
-       "tog-watchlisthideown": "Celare recensiones meas in paginarum custoditarum indice",
-       "tog-watchlisthidebots": "Celare recensiones automatarias in paginarum custoditarum indice",
-       "tog-watchlisthideminor": "Celare recensiones minores in paginarum custoditarum indice",
-       "tog-watchlisthideliu": "Celare recensiones usorum notorum in paginarum custoditarum indice",
-       "tog-watchlisthideanons": "Celare recensiones usorum ignotorum in paginarum custoditarum indice",
+       "tog-watchlisthideown": "Celare recensiones meas in paginarum observatarum indice",
+       "tog-watchlisthidebots": "Celare recensiones automatarias in paginarum observatarum indice",
+       "tog-watchlisthideminor": "Celare recensiones minores in paginarum observatarum indice",
+       "tog-watchlisthideliu": "Celare recensiones usorum notorum in paginarum observatarum indice",
+       "tog-watchlisthideanons": "Celare recensiones usorum ignotorum in paginarum observatarum indice",
        "tog-watchlisthidepatrolled": "Recensiones vigilatae paginas custoditas celare",
        "tog-ccmeonemails": "Mitte mihi transcriptiones litterarum quas ad alios usores mitto",
        "tog-diffonly": "Noli monstrare contenta paginae infra dissimilitudinem",
        "createaccount-text": "Aliquis creavit rationem pro inscriptione electronica tua apud {{grammar:accusative|{{SITENAME}}}} ($4). Nomen usoris est \"$2\" et tessera est \"$3\". Conventum aperias et statim tesseram tuam mutes.\n\nHunc nuntium ignorare potes, si nolis hac ratione uti.",
        "login-abort-generic": "Conventum aperire non contigit - Desitum",
        "loginlanguagelabel": "Lingua: $1",
+       "pt-login": "Conventum aperire",
+       "pt-login-button": "Conventum aperire",
+       "pt-createaccount": "Conventum creare",
+       "pt-userlogout": "Conventum concludere",
        "changepassword": "Tesseram mutare",
        "resetpass_header": "Tesseram rationis mutare",
        "oldpassword": "Tessera vetus:",
        "summary": "Summarium:",
        "subject": "Res/titulus:",
        "minoredit": "Haec est recensio minor",
-       "watchthis": "Custodire hanc paginam",
+       "watchthis": "Observare hanc paginam",
        "savearticle": "Servare hanc rem",
        "preview": "Praevidere",
        "showpreview": "Monstrare praevisum",
        "newarticletext": "Per nexum progressus es ad paginam quae nondum exsistit.\nNovam paginam si vis creare, in capsam infra praebitam scribe.\n(Vide [$1 paginam auxilii] si plura cognoscere vis.)\nSi hic es propter errorem, solum '''Retrorsum''' in navigatro tuo preme.",
        "anontalkpagetext": "----''Haec est pagina disputationis usoris anonymi, solum a loco IP suo noti. Memento locos IP aliquando mutaturos, et a usoribus multis fortasse adhibitos. Si es usor ignotus, et tibi querulae sine causa datae sunt, conventum [[Special:UserLogin/signup|crea]] vel [[Special:UserLogin|aperi]] ad confusionem futuram evitendam.''",
        "noarticletext": "Hac in pagina non sunt litterae.\nPotes [[Special:Search/{{PAGENAME}}|hanc rem in aliis paginis quaerere]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} acta huius paginae videre]\naut [{{fullurl:{{FULLPAGENAME}}|action=edit}} hanc paginam creare]</span>.",
+       "noarticletext-nopermission": "Hac in pagina non sunt litterae.\nPotes [[Special:Search/{{PAGENAME}}|hanc rem in aliis paginis quaerere]] aut <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} acta huius paginae videre], sed tibi non licet hanc paginam creare.",
        "userpage-userdoesnotexist": "Usor \"<nowiki>$1</nowiki>\" non est. Visne re vera hanc paginam creare vel recensere?",
        "updated": "(Novata)",
        "note": "'''Nota:'''",
        "currentrev": "Emendatio recentissima",
        "currentrev-asof": "Emendatio recentissima ex $1",
        "revisionasof": "Emendatio ex $1",
-       "revision-info": "Emendatio ex $1 ab $2",
+       "revision-info": "Emendatio ex $1 ab $2$7",
        "previousrevision": "← Emendatio senior",
        "nextrevision": "Emendatio novior →",
        "currentrevisionlink": "Emendatio currens",
        "histlegend": "Selige pro dissimilitudine: indica emendationes in botones radiales et \"intrare\" in claviatura vel \"comparatio\" imprime ut conferas.<br />\nTitulus: '''({{int:cur}})''' = dissimilis ab emendatione novissima,\n'''({{int:last}})''' = dissimilis ab emendatione proxima, '''{{int:minoreditletter}}''' = recensio minor.",
        "history-fieldset-title": "Quaerere in paginae historia",
        "history-show-deleted": "Solum recensiones deletas monstrare",
-       "histfirst": "veterrimus",
-       "histlast": "novissimus",
+       "histfirst": "veterrima",
+       "histlast": "novissima",
        "historysize": "({{PLURAL:$1|1 octetus|$1 octeti}})",
        "historyempty": "(vacua)",
        "history-feed-title": "Historia",
        "textmatches": "Textus paginarum adaequat",
        "notextmatches": "Nihil verbis quaesitis congruit",
        "prevn": "{{PLURAL:$1|$1}} superiores",
-       "nextn": "{{PLURAL:$1|$1}} proxima",
+       "nextn": "{{PLURAL:$1|$1 proxima|$1 proximae}}",
        "prevn-title": "{{PLURAL:$1|Eventus prior|Eventus priores}} $1",
        "nextn-title": "{{PLURAL:$1|Eventus proximus|Eventus proximi}} $1",
        "shown-title": "Monstrare $1 {{PLURAL:$1|eventum|eventus}} per paginam",
        "prefs-user-pages": "Paginae usoris",
        "prefs-personal": "Minutiae rationis",
        "prefs-rc": "Nuper mutata",
-       "prefs-watchlist": "Paginae custoditae",
-       "prefs-watchlist-days": "Numerus dierum displicandus in paginis tuis custoditis:",
+       "prefs-watchlist": "Paginae observatae",
+       "prefs-watchlist-days": "Numerus dierum displicandus in paginis tuis observatis:",
        "prefs-watchlist-days-max": "Numerus maximus: $1 {{PLURAL:$1|dies|dies}}",
-       "prefs-watchlist-edits": "Numerus recensionum displicandus in paginis tuis custoditis extensis:",
+       "prefs-watchlist-edits": "Numerus recensionum displicandus in paginis tuis observatis extensis:",
        "prefs-watchlist-edits-max": "Numerus maximus: 1000",
        "prefs-misc": "Misc",
        "prefs-resetpass": "Tesseram mutare",
        "right-rollback": "Cito reverti recensiones proximas usoris cuiuslibet paginae",
        "right-import": "Paginas ex vicis aliis importare",
        "right-importupload": "Paginas ex fasciculo imponendo importare",
-       "right-unwatchedpages": "Indicem paginarum non custoditarum inspicere",
+       "right-unwatchedpages": "Indicem paginarum non observatarum inspicere",
        "right-mergehistory": "Historias paginarum confundere",
        "right-userrights": "Omnes potestates usorum recensere",
        "right-userrights-interwiki": "Potestates usorum aliis in vicis recensere",
        "action-protect": "protectionem huius paginae mutare",
        "action-import": "paginas ex vico alio importare",
        "action-importupload": "paginas ex fasciculo imponendo importare",
-       "action-unwatchedpages": "indicem paginarum non custoditarum inspicere",
+       "action-unwatchedpages": "indicem paginarum non observatarum inspicere",
        "action-mergehistory": "historiam huius paginae confundere",
        "action-userrights": "omnes potestates usorum recensere",
        "action-userrights-interwiki": "potestates usorum aliis in vicis recensere",
        "action-siteadmin": "basem datorum obstruere vel deobstruere",
-       "action-editmywatchlist": "Recensere paginas custoditas",
-       "action-viewmywatchlist": "Spectare paginas custoditas",
+       "action-editmywatchlist": "indicem tuum paginarum observatarum recensere",
+       "action-viewmywatchlist": "indicem tuum paginarum observatarum inspicere",
        "nchanges": "$1 {{PLURAL:$1|mutatio|mutationes}}",
        "enhancedrc-history": "Historia",
        "recentchanges": "Nuper mutata",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "a",
-       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usor custodiens|usores custodientes}}]",
+       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usor observans|usores observantes}}]",
        "rc_categories_any": "Ulla",
+       "rc-change-size-new": "$1 {{PLURAL:$1|octetus|octeti}} post recensionem",
        "newsectionsummary": "/* $1 */ nova pars",
        "rc-enhanced-expand": "Minima monstrare",
        "rc-enhanced-hide": "Minima celare",
        "recentchangeslinked-feed": "Nuper mutata annexorum",
        "recentchangeslinked-toolbox": "Nuper mutata annexorum",
        "recentchangeslinked-title": "Nuper mutata in paginis quibus pagina \"$1\" nectit",
-       "recentchangeslinked-summary": "Ecce mutationes recentissimas commentationum quae aut paginae cuidam adnectuntur, aut in categoria quadam includuntur. Paginae a [[Special:Watchlist|te custoditae]] '''litteris pinguibus''' monstrantur.",
+       "recentchangeslinked-summary": "Ecce mutationes recentissimas commentationum quae aut paginae cuidam adnectuntur, aut in categoria quadam includuntur. Paginae a [[Special:Watchlist|te observatae]] '''litteris pinguibus''' monstrantur.",
        "recentchangeslinked-page": "Titulus paginae:",
        "recentchangeslinked-to": "Mutationes commentationum quae huic paginae adnectuntur monstrare",
        "upload": "Fasciculum imponere",
        "sourcefilename": "Fasciculi imponendi nomen:",
        "destfilename": "Nomen fasciculi petitum:",
        "upload-maxfilesize": "Maxima fasciculi magnitudo: $1",
-       "watchthisupload": "Custodire hunc fasciculum",
+       "watchthisupload": "Observare hunc fasciculum",
        "upload-success-subj": "Impositum est perfectum",
        "upload-proto-error": "Protocollum incorrectum",
        "upload-file-error": "Erratum internum",
        "emailsenttext": "Nuntium tuum missum est.",
        "emailuserfooter": "Has litteras electronicas $1 ad $2 misit per \"Litteras electronicas usori mittere\" in {{grammar:ablative|{{SITENAME}}}}.",
        "usermessage-editor": "Nuntius systematis",
-       "watchlist": "Paginae custoditae",
-       "mywatchlist": "Paginae custoditae",
+       "watchlist": "Paginae observatae",
+       "mywatchlist": "Paginae observatae",
        "watchlistfor2": "Pro $1 $2",
-       "nowatchlist": "Nullas paginas custodis.",
-       "watchlistanontext": "Necesse est $1 ad indicem paginarum custoditarum inspiciendum vel recensendum.",
+       "nowatchlist": "Sunt nullas paginas in indice tuo paginarum observatarum.",
+       "watchlistanontext": "Necesse est conventum aperire ad indicem paginarum observatarum inspiciendum vel recensendum.",
        "watchnologin": "Conventum non est apertum",
-       "addedwatchtext": "Pagina \"[[:$1]]\" in [[Special:Watchlist|paginas tuas custoditas]] addita est.\nMutationes posthac huic paginae et paginae disputationis ibi notabuntur.",
-       "removedwatchtext": "Pagina \"[[:$1]]\" ex [[Special:Watchlist|indice paginarum custoditarum]] remota est.",
-       "watch": "Custodire",
-       "watchthispage": "Custodire hanc paginam",
-       "unwatch": "Decustodire",
-       "unwatchthispage": "Abrogare custoditum",
+       "addedwatchtext": "Pagina \"[[:$1]]\" in [[Special:Watchlist|paginas tuas observatas]] addita est.\nMutationes posthac huic paginae et paginae disputationis ibi notabuntur.",
+       "removedwatchtext": "Pagina \"[[:$1]]\" ex [[Special:Watchlist|indice paginarum observatarum]] remota est.",
+       "watch": "Observare",
+       "watchthispage": "Observare hanc paginam",
+       "unwatch": "Non iam observare",
+       "unwatchthispage": "Non iam observare",
        "notanarticle": "Res non est",
        "notvisiblerev": "Emendatio deleta est",
-       "watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginae}} in indice paginarum custoditarum tuarum, sine paginis disputationis.",
+       "watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginae}} in indice paginarum observatarum tuarum, sine paginis disputationis.",
        "wlnote": "Subter {{PLURAL:$1|est mutatio proxima|sunt '''$1''' mutationes proximae}} in {{PLURAL:$2|proxima hora|proximis '''$2''' horis}} ex $4, $3.",
        "wlshowlast": "Monstrare proximas $1 horas $2 dies",
-       "watchlist-options": "Indicis paginarum custoditarum praeferentiae",
+       "watchlist-options": "Indicis paginarum observatarum praeferentiae",
        "watching": "Custodiens...",
        "unwatching": "Decustodiens...",
        "enotif_reset": "Indicare omnes paginas visitatas",
        "deletereason-dropdown": "*Causae deletionum communes\n** Spam\n** Vandalismus\n** Violatio verborum privatorum\n** Desiderium auctoris\n** Redirectio fracta",
        "delete-edit-reasonlist": "Causas deletionum recensere",
        "rollback": "Reverti mutationes",
-       "rollback_short": "Reverti",
        "rollbacklink": "reverti",
        "rollbacklinkcount": "reverti {{PLURAL:$1|unam recensionem|$1 recensiones}}",
        "rollbacklinkcount-morethan": "reverti plus quam {{PLURAL:$1|unam recensionem|$1 recensiones}}",
        "istemplate": "inclusio",
        "isimage": "nexus fasciculi",
        "whatlinkshere-prev": "{{PLURAL:$1|superior|$1 superiores}}",
-       "whatlinkshere-next": "{{PLURAL:$1|proxima|proxima $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|proxima|proximae $1}}",
        "whatlinkshere-links": "← nexus",
        "whatlinkshere-hideredirs": "$1 redirectiones",
        "whatlinkshere-hidetrans": "$1 inclusiones alia in pagina",
        "ipbsubmit": "Obstruere hunc locum",
        "ipbother": "Exitus alius:",
        "ipboptions": "2 horas:2 hours,1 diem:1 day,3 dies:3 days,1 hebdomadem:1 week,2 hebdomades:2 weeks,1 mensem:1 month,3 menses:3 months,6 menses:6 months,1 annum:1 year,infinite:infinite",
-       "ipbwatchuser": "Paginam usoris disputationisque huius usoris custodire",
+       "ipbwatchuser": "Paginam usoris disputationisque huius usoris observare",
        "ipb-change-block": "Obstructionem usoris modificare",
        "badipaddress": "Locus IP male formatus",
        "blockipsuccesssub": "Locus prospere obstructus est",
        "cant-move-user-page": "Tibi non licet paginas usorum movere (solum eorum subpaginas).",
        "cant-move-to-user-page": "Tibi non licet paginam ad paginam usoris movere (solum ad paginae usoris subpaginam).",
        "newtitle": "Ad titulum novum:",
-       "move-watch": "Hanc paginam custodire",
+       "move-watch": "Observare et titulum veterem et titulum novum",
        "movepagebtn": "Paginam movere",
        "pagemovedsub": "Pagina mota est",
        "movepage-moved": "'''\"$1\" mota est ad \"$2\"'''",
        "import-upload": "XML imponere et importare",
        "importlogpage": "Acta adportationum",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|emendatio|emendationes}}",
-       "import-logentry-interwiki": "adportavit transvici $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|emendatio|emendationes}} ex $2",
        "tooltip-pt-userpage": "Pagina usoris tua",
        "tooltip-pt-mytalk": "Pagina disputationis tua",
        "tooltip-pt-preferences": "Praeferentiae tuae",
-       "tooltip-pt-watchlist": "Paginae quas custodis ut earum mutationes facilius videas",
+       "tooltip-pt-watchlist": "Paginae quas observas ut earum mutationes facilius videas",
        "tooltip-pt-mycontris": "Index conlationum tuarum",
        "tooltip-pt-login": "Te conventum aperire hortamur, non autem requisitum",
        "tooltip-pt-logout": "Conventum concludere",
        "tooltip-ca-delete": "Delere hanc paginam",
        "tooltip-ca-undelete": "Restituere emendationes huic paginae conlatas antequam haec pagina deleta esset",
        "tooltip-ca-move": "Movere hanc paginam",
-       "tooltip-ca-watch": "Addere hanc paginam tuis paginis custoditis",
-       "tooltip-ca-unwatch": "Removere hanc paginam ex tuis paginis custoditis",
+       "tooltip-ca-watch": "Addere hanc paginam tuis paginis observatis",
+       "tooltip-ca-unwatch": "Removere hanc paginam ex tuis paginis observatis",
        "tooltip-search": "Quaerere aliquid in {{grammar:ablative|{{SITENAME}}}}",
        "tooltip-search-go": "I ad paginam cum hoc titulo exacto, si est",
        "tooltip-search-fulltext": "Hunc textum in paginis quaerere",
        "tooltip-preview": "Praevidere mutationes tuas, quaesumus hoc utere antequam servas!",
        "tooltip-diff": "Monstrare mutationes textui tuas",
        "tooltip-compareselectedversions": "Videre dissimilitudinem inter ambas emendationes selectas huius paginae",
-       "tooltip-watch": "Addere hanc paginam tuis paginis custoditis",
+       "tooltip-watch": "Addere hanc paginam tuis paginis observatis",
        "tooltip-recreate": "Recreare hanc paginam etiamsi deleta est",
        "tooltip-upload": "Incipere imponere",
        "tooltip-rollback": "\"Revertere\" omnes ultimi editoris in hac pagina recensiones statim revertit",
        "file-nohires": "Nulla maior resolutio exstat.",
        "svg-long-desc": "fasciculus SVG, nominale $1 × $2 elementa imaginalia, magnitudo fasciculi: $3",
        "show-big-image": "Resolutio completa",
+       "show-big-image-size": "$1 × $2 elementa imaginalia",
        "file-info-gif-frames": "$1 {{PLURAL:$1|replum|repla}}",
        "newimages": "Fasciculi novi",
        "imagelisttext": "Subter est index {{PLURAL:$1|'''unius''' fasciculi|'''$1''' fasciculorum}} digestus $2.",
        "size-kilobytes": "$1 chiliocteti",
        "size-megabytes": "$1 megaocteti",
        "size-gigabytes": "$1 gigaocteti",
-       "watchlistedit-normal-title": "Indicem paginarum custoditarum recensere",
+       "watchlistedit-normal-title": "Indicem paginarum observatarum recensere",
        "watchlistedit-normal-submit": "Removere titulos",
-       "watchlistedit-raw-title": "Indicem paginarum custoditarum quasi textum recensere",
-       "watchlistedit-raw-legend": "Indicem paginarum custoditarum quasi textum recensere",
+       "watchlistedit-raw-title": "Indicem paginarum observatarum quasi textum recensere",
+       "watchlistedit-raw-legend": "Indicem paginarum observatarum quasi textum recensere",
        "watchlistedit-raw-titles": "Tituli:",
-       "watchlisttools-view": "Mutationes paginarum custoditarum monstrare",
-       "watchlisttools-edit": "Indicem paginarum custoditarum inspicere vel recensere",
-       "watchlisttools-raw": "Indicem paginarum custoditarum quasi textum recensere",
+       "watchlisttools-view": "Mutationes paginarum observatarum inspicere",
+       "watchlisttools-edit": "Indicem paginarum observatarum inspicere vel recensere",
+       "watchlisttools-raw": "Indicem paginarum observatarum quasi textum recensere",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|disputatio]])",
        "version": "Versio",
        "version-specialpages": "Paginae speciales",
        "logentry-newusers-autocreate": "Ratio usoris $1 automatice creata est",
        "rightsnone": "(nullus)",
        "revdelete-summary": "summarium recensionis",
-       "feedback-message": "Nuntius:",
        "feedback-cancel": "Dimittere",
-       "feedback-error2": "Error: Recensio non additur",
        "feedback-close": "Factum",
+       "feedback-error2": "Error: Recensio non additur",
+       "feedback-message": "Nuntius:",
        "searchsuggest-search": "Quaerere",
        "searchsuggest-containing": "continens...",
        "api-error-empty-file": "Fasciculus inmissus vacuus est.",
        "api-error-illegal-filename": "Nomen fasciculi permissum non est.",
        "api-error-mustbeloggedin": "Ad fasciculos inmittendos conventum aperire necesse est.",
        "api-error-unknownerror": "Error incognitus: \"$1\".",
-       "expandtemplates": "Formulas resolvere"
+       "expandtemplates": "Formulas resolvere",
+       "special-characters-group-latin": "Latinum",
+       "special-characters-group-latinextended": "Latinum extensum",
+       "special-characters-group-ipa": "API",
+       "special-characters-group-symbols": "Symbola",
+       "special-characters-group-greek": "Graecum",
+       "special-characters-group-cyrillic": "Cyrillicum",
+       "special-characters-group-arabic": "Arabicum",
+       "special-characters-group-hebrew": "Hebraicum",
+       "special-characters-group-telugu": "Telugu"
 }
index a8ba550..15210db 100644 (file)
        "version": "Versión",
        "version-specialpages": "Pajinas espesiales",
        "version-other": "Otros",
-       "version-version": "(Versión $1)",
+       "version-version": "($1)",
        "version-ext-colheader-credits": "Otores",
        "version-poweredby-others": "otros",
        "version-software-version": "Versión",
        "htmlform-yes": "Si",
        "logentry-newusers-autocreate": "El cuento de usuario $1 fue {{GENDER:$2|kreado}} otomatikamente",
        "rightsnone": "(dinguno)",
-       "feedback-subject": "Sujeto",
-       "feedback-message": "Messaje",
        "feedback-cancel": "Anular",
+       "feedback-message": "Messaje",
+       "feedback-subject": "Sujeto",
        "searchsuggest-search": "Bushkar",
        "duration-seconds": "$1{{PLURAL:$1|segundo|segundos}}",
        "duration-minutes": "$1{{PLURAL:$1|minuto|minutos}}",
index af64e28..4319ac3 100644 (file)
        "disclaimers": "Impressum",
        "disclaimerpage": "Project:Impressum",
        "edithelp": "Hëllef beim Änneren",
+       "helppage-top-gethelp": "Hëllef",
        "mainpage": "Haaptsäit",
        "mainpage-description": "Haaptsäit",
        "policy-url": "Project:Richtlinnen",
        "readonly_lag": "D'Datebank gouf automatesch gespaart fir datt d'Zweetserveren (slaves) nees mat dem Haaptserver (master) synchron geschalt kënne ginn.",
        "internalerror": "Interne Feeler",
        "internalerror_info": "Interne Feeler: $1",
+       "internalerror-fatal-exception": "Fatale Feeler vum Typ \"$1\"",
        "filecopyerror": "De Fichier \"$1\" konnt net op \"$2\" kopéiert ginn.",
        "filerenameerror": "De Fichier \"$1\" konnt net op \"$2\" ëmbenannt ginn.",
        "filedeleteerror": "De Fichier \"$1\" konnt net geläscht ginn.",
        "wrongpassword": "Dir hutt e falscht (oder kee) Passwuert aginn. Probéiert w.e.g. nach eng Kéier.",
        "wrongpasswordempty": "D'Passwuert dat Dir aginn hutt war eidel.\nProbéiert w.e.g. nach eng Kéier.",
        "passwordtooshort": "Passwierder musse mindestens {{PLURAL:$1|1 Zeeche|$1 Zeeche}} laang sinn.",
+       "passwordtoolong": "Passwierder kënnen net méi laang wéi {{PLURAL:$1|1 Zeeche|$1 Zeeche}} sinn.",
        "password-name-match": "Äert Passwuert muss verschidde vun Ärem Benotzernumm sinn.",
        "password-login-forbidden": "D'Benotze vun dësem Benotzernumm a Passwuert gouf verbueden.",
        "mailmypassword": "Passwuert zrécksetzen",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "content-json-empty-object": "Eidelen Objet",
+       "content-json-empty-array": "Eidel Tabell",
        "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",
        "post-expand-template-inclusion-warning": "Opgepasst: D'Gréisst vun den agebonnene Schablounen ass ze grouss, e puer Schabloune kënnen net agebonne ginn.",
        "notextmatches": "Keng Iwwereneestëmmungen",
        "prevn": "vireg {{PLURAL:$1|$1}}",
        "nextn": "nächst {{PLURAL:$1|$1}}",
+       "prev-page": "vireg Säit",
+       "next-page": "nächst Säit",
        "prevn-title": "Vireg $1 {{PLURAL:$1|Resultat|Resultater}}",
        "nextn-title": "Nächst $1 {{PLURAL:$1|Resultat|Resultater}}",
        "shown-title": "$1 {{PLURAL:$1|Resultat|Resultater}} pro Säit weisen",
        "searchrelated": "a Verbindng",
        "searchall": "all",
        "showingresults": "Hei gesitt der  {{PLURAL:$1| '''1''' Resultat|'''$1''' Resultater}}, ugefaange mat #'''$2'''.",
+       "showingresultsinrange": "Hei drënner {{PLURAL:$1|<strong>gëtt 1</strong> Resultat|gi(nn) <strong>$1</strong> Resultater}} aus dem Beräich #<strong>$2</strong> bis #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Resultat <strong>$1</strong> of <strong>$3</strong>|Resultater <strong>$1 - $2</strong> vu(n) <strong>$3</strong>}}",
        "search-nonefound": "Fir Är Ufro gouf näischt fonnt.",
        "powersearch-legend": "Erweidert Sich",
        "prefs-rc": "Rezent Ännerungen",
        "prefs-watchlist": "Iwwerwaachungslëscht",
        "prefs-editwatchlist": "Iwwerwaachungslëscht änneren",
+       "prefs-editwatchlist-label": "Ännert d'Elementer op Ärer Iwwerwaachungslëscht:",
+       "prefs-editwatchlist-edit": "Titelen op Ärer Iwwerwaachungslëscht kucken an erofhuelen",
        "prefs-editwatchlist-raw": "Net-formatéiert Iwwerwaachungslëscht änneren",
        "prefs-editwatchlist-clear": "Är Iwwerwaachungslëscht eidelmaachen",
        "prefs-watchlist-days": "Zuel vun den Deeg, déi an der Iwwerwaachungslëscht ugewise solle ginn:",
        "unusedimages": "Net benotzt Fichieren",
        "wantedcategories": "Gewënscht Kategorien",
        "wantedpages": "Gewënscht Säiten",
+       "wantedpages-summary": "Lëscht vun de Säiten, déi et nach net gëtt, mat de meeschte Linken drop, ouni d'Säiten op déi nëmme Viruleedunge linken. Fir eng Lëscht vun de Säiten, déi et nach net gëtt, op déi Viruleedunge linken kuckt w.e.g. [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Net valabelen Titel am Resultat: $1",
        "wantedfiles": "Gewënscht Fichieren",
        "wantedfiletext-cat": "Dës Fichiere gi benotzt awer et gëtt se net. Fichiere aus frieme Repositorie kënnen hei gewise ginn och wann et se gëtt. All sou falsch Positiver ginn <del>duerchgestrach</del>. Zousätzlech gi Säiten an deene Fichieren dra sinn déi et net gëtt op [[:$1]] gewisen.",
+       "wantedfiletext-cat-noforeign": "Dëse Fichiere gi benotzt awer et gëtt se net. Zousätzlech ginn Säiten op deene Fichiere stinn déi et net gëtt op der Lëscht [[:$1]] gewisen.",
        "wantedfiletext-nocat": "Dës Fichiere gi benotzt existéieren awer net. Fichieren aus frieme Repertoiren kënnen trotzdeem opgelëscht ginn. All dës positiv Fichiere ginn <del>duergestrach</del>.",
        "wantedfiletext-nocat-noforeign": "Dës Fichiere gi benotzt awer et gëtt se net.",
        "wantedtemplates": "Gewënscht Schablounen",
        "thumbnail_gd-library": "D'Konfiguratioun vun der GD-Bibliothéik (GD library) ass net komplett: D'Funktioun $1 feelt",
        "thumbnail_image-missing": "De Fichier schengt ze feelen: $1",
        "import": "Säiten importéieren",
-       "importinterwiki": "Transwiki-Import",
+       "importinterwiki": "Vun enger anerer Wiki importéieren",
        "import-interwiki-text": "Sicht eng Wiki an e Säitentitel eraus fir z'importéieren.\nD'Versiounsdatumen an d'Benotzernimm bleiwen dobäi erhalen.\nAll Transwiki-Import-Aktioune ginn am [[Special:Log/import|Import-Logbuch]] protokolléiert.",
        "import-interwiki-sourcewiki": "Quellwiki:",
        "import-interwiki-sourcepage": "Originalsäit:",
        "import-rootpage-nosubpage": "Am Nummraum \"$1\" vun der Basis-Säit si keng Ënnersäiten erlaabt.",
        "importlogpage": "Lëscht vun den Säitenimporten",
        "importlogpagetext": "Administrativen Import vu Säite mam Historique vun den Ännerungen aus anere Wikien.",
-       "import-logentry-upload": "huet [[$1]] vun engem Fichier duerch Eroplueden importéiert",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|Versioun|Versiounen}} importéiert",
-       "import-logentry-interwiki": "huet $1 importéiert (Transwiki)",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Versioun|Versiounen}} importéiert vu(n) $2",
        "javascripttest": "JavaScript-Test",
        "javascripttest-pagetext-noframework": "Dës Säit ass fir Java-Script-Tester reservéiert.",
        "version-parser-function-hooks": "Parser-Funktiounen",
        "version-hook-name": "Numm vun der Klamer",
        "version-hook-subscribedby": "Opruff vum",
-       "version-version": "(Versioun $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[keen Numm]",
        "version-license": "MediaWiki-Lizenz",
        "version-ext-license": "Lizenz",
        "tags-active-yes": "Jo",
        "tags-active-no": "Neen",
        "tags-source-extension": "Duerch eng Erweiderung definéiert",
+       "tags-source-manual": "Manuell vu Benotzer a vu Botten agesat",
        "tags-source-none": "Gëtt net méi gebraucht",
        "tags-edit": "änneren",
        "tags-delete": "läschen",
        "tags-activate": "aktivéieren",
        "tags-deactivate": "desaktivéieren",
        "tags-hitcount": "$1 {{PLURAL:$1|Ännerung|Ännerungen}}",
+       "tags-create-tag-name": "Numm vun der Markéierung (Tag):",
        "tags-create-reason": "Grond:",
        "tags-create-submit": "Uleeën",
        "tags-create-already-exists": "D'Markéierung (tag) ''$1'' gëtt et schonn.",
        "tags-delete-reason": "Grond:",
        "tags-delete-not-found": "D'Markéierung (tag) ''$1'' gëtt et net.",
        "tags-activate-title": "Markéierung (tag) aktivéieren",
+       "tags-activate-question": "Dir sidd am Gaang d'Markéierung \"$1\" z'aktivéieren.",
        "tags-activate-reason": "Grond:",
+       "tags-activate-not-allowed": "Et ass net méiglech d'Markéierung \"$1\" z'aktivéieren.",
        "tags-activate-not-found": "D'Markéierung (tag) ''$1'' gëtt et net.",
        "tags-activate-submit": "Aktivéieren",
        "tags-deactivate-title": "Markéierung (tag) desaktivéieren",
+       "tags-deactivate-question": "Dir sidd am Gaang d'Markéierung \"$1\" ze desaktivéieren.",
        "tags-deactivate-reason": "Grond:",
+       "tags-deactivate-not-allowed": "Et ass net méiglech d'Markéierung \"$1\" ze desaktivéieren.",
        "tags-deactivate-submit": "Desaktivéieren",
        "comparepages": "Säite vergläichen",
        "compare-page1": "Säit 1",
        "revdelete-uname-unhid": "Benotzernumm net verstoppt",
        "revdelete-restricted": "Limitatioune fir Administrateuren ageschalt",
        "revdelete-unrestricted": "Limitatioune fir Administrateuren opgehuewen",
+       "logentry-block-unblock": "$1 {{GENDER:$2|huet}} d'Spär vum {{GENDER:$4|$3}} opgehuewen",
+       "logentry-import-interwiki": "$1 huet $3 vun enger anerer Wiki {{GENDER:$2|importéiert}}",
        "logentry-move-move": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}}",
        "logentry-move-move-noredirect": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}} ouni eng Viruleedung unzeleeën",
        "logentry-move-move_redir": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}} an derbäi gouf eng Viruleedung iwwerschriwwen",
        "logentry-upload-revert": "$1 huet $3 {{GENDER:$2|eropgelueden}}",
        "rightsnone": "(keen)",
        "revdelete-summary": "Resumé änneren",
+       "feedback-adding": "Feedback gëtt bei d'Säit derbäigesat...",
+       "feedback-back": "Zréck",
+       "feedback-bugcheck": "Super! Kuckt just no ob et net ee vun de scho [$1 bekannte Feeler] ass.",
+       "feedback-bugnew": "Ech hunn et nogekuckt. Den neie Bug mellen",
        "feedback-bugornote": "Wann Dir bereet sidd fir en technesche Problem am Detail ze beschreiwen da [$1 mellt w.e.g. e Feeler (Bug)].\nSoss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gëtt op d'Säit \"[$3 $2]\" derbäigesat, zesumme mat Ärem Benotzernumm an dem Numm vum Browser deen Dir benotzt.",
-       "feedback-subject": "Sujet:",
-       "feedback-message": "Message:",
        "feedback-cancel": "Ofbriechen",
-       "feedback-submit": "Feedback schécken",
-       "feedback-adding": "Feedback gëtt bei d'Säit derbäigesat...",
+       "feedback-close": "Fäerdeg",
+       "feedback-external-bug-report-button": "Eng technesch Aufgab notifizéieren",
+       "feedback-dialog-title": "Feedback schécken",
+       "feedback-error-title": "Feeler",
        "feedback-error1": "Feeler: Resultat vum API gouf net erkannt",
        "feedback-error2": "Feeler: D'Ännerung gouf net gespäichert",
        "feedback-error3": "Feeler: Keng Äntwert vum API",
+       "feedback-message": "Message:",
+       "feedback-subject": "Sujet:",
+       "feedback-submit": "Schécken",
        "feedback-thanks": "Merci! Äre Feedback gouf op der Säit \"[$2 $1]\" gespäichert.",
-       "feedback-close": "Fäerdeg",
-       "feedback-bugcheck": "Super! Kuckt just no ob et net ee vun de scho [$1 bekannte Feeler] ass.",
-       "feedback-bugnew": "Ech hunn et nogekuckt. Den neie Bug mellen",
+       "feedback-thanks-title": "Merci!",
        "searchsuggest-search": "Sichen",
        "searchsuggest-containing": "mat ...",
        "api-error-badaccess-groups": "Et ass Iech net erlaabt fir Fichieren op dës Wiki eropzelueden.",
        "mediastatistics-header-text": "Textuell",
        "mediastatistics-header-archive": "Kompriméiert Formater",
        "json-error-unknown": "Et gouf e Problem mam JSON. Feeler: $1",
-       "json-error-syntax": "Syntaxfeeler"
+       "json-error-state-mismatch": "JSON den net valabel ass oder Feeler huet",
+       "json-error-syntax": "Syntaxfeeler",
+       "headline-anchor-title": "Link op dësen Abschnitt",
+       "special-characters-group-latin": "Laténgesch",
+       "special-characters-group-latinextended": "Laténgesch, erweidert",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symboler",
+       "special-characters-group-greek": "Griichesch",
+       "special-characters-group-cyrillic": "Kyrillisch",
+       "special-characters-group-arabic": "Arabesch",
+       "special-characters-group-arabicextended": "Arabesch, erweidert",
+       "special-characters-group-persian": "Persesch",
+       "special-characters-group-hebrew": "Hebräisch",
+       "special-characters-group-bangla": "Bangalesch",
+       "special-characters-group-tamil": "Tamilesch",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-minus": "Minus-Zeechen"
 }
index 438934a..83aeb8a 100644 (file)
        "editconflict": "Дуьзар хъувунрин акьунар: $1",
        "yourtext": "Зи текст",
        "yourdiff": "Тафаватар",
-       "copyrightwarning": "Тавакъу ийида, фагьум ая хьи, {{SITENAME}}-диз кутунвай вири крариз $2 лицензиядин шартунал акъуднавайбур хьиз килигда. (гегьеншдиз $1-з килига). \nКвез куьне кхьенвайбур азаддаказ чкIун ва гьар са кас  патахъай дуьзар хъувун кIанзавачтIа, а кхьенвайбур иниз эцигмир.<br />\nГЬакIни, куьне тестикьзава хьи, кутазвай алавайрин автор кьун я, я тахьайтIа, куьне а алаваяр чпин къенеавайбур азад чкIунни дегишун ихтияр гузвай чешмедикай ччин къачунва.<br />\n'''АВТОРДИН ИХТИЯР ХУЬЗВАЙ МАЛУМАТАР ИХТИЯР ГАЛАЧИЗ ЭЦИГМИР!'''",
+       "copyrightwarning": "Тавакъу ийида, фагьум ая хьи, {{SITENAME}}-диз кутунвай вири крариз $2 лицензиядин шартунал акъуднавайбур хьиз килигда. (гегьеншдиз $1-з килига).\nКвез куьне кхьенвайбур азаддаказ чкӀун ва гьар са кас патахъай дуьзар хъувун кӀанзавачтӀа, а кхьенвайбур иниз эцигмир.<br />\nГьакӀни, куьне тестикьзава хьи, кутазвай алавайрин автор кьун я, я тахьайтӀа, куьне а алаваяр чпин къенеавайбур азад чкӀунни дегишун ихтияр гузвай чешмедикай ччин къачунва.<br />\n'''АВТОРДИН ИХТИЯР ХУЬЗВАЙ МАЛУМАТАР ИХТИЯР ГАЛАЧИЗ ЭЦИГМИР!'''",
        "templatesused": "И ччина кардик кутунвай {{PLURAL:$1|1=Чешне|Чешнеяр}}:",
        "templatesusedpreview": "{{PLURAL:$1|1=Шаблон|Шаблонар}},илемишзавай дуьз клигунра:",
        "template-protected": "(хвенвай)",
        "upload-options": "Ппарунин шартIар",
        "watchthisupload": "И файл гуьзетун",
        "upload-file-error": "Къенепатан гъалатӀ",
+       "backend-fail-delete": "$1 файл алудиз хьанвач.",
        "uploadstash-refresh": "Файлрин сиягь цIийи хъувун",
        "img-auth-accessdenied": "Гьахьун къадагъа авунва",
        "license": "Лицензиярун",
        "statistics-pages": "Ччинар",
        "statistics-files": "Ппарнавай файлар",
        "statistics-users-active": "Актив уртахар",
-       "brokenredirects-edit": "дегишарун",
+       "brokenredirects-edit": "дуьзар хъувун",
        "brokenredirects-delete": "алудун",
        "withoutinterwiki-submit": "Къалурун",
        "nbytes": "$1 {{PLURAL:$1|1=байт|байтар}}",
        "changed": "дегишнава",
        "deletepage": "Къакъудун хъувун",
        "confirm": "Тестикьун",
-       "delete-confirm": "Къакъудун \"$1\"",
+       "delete-confirm": "«$1» алудун",
        "delete-legend": "Къакъудун",
        "confirmdeletetext": "Квез чlуриз кlанзани чарар гьадан вири тарихар галаз.                                                                                                                         Буюр, сидикъара,куьне чlурзатlа, куьн агъавурда автlа вуч ийизатlа ва куьне ийизатlа жуьреда [[{{MediaWiki:Policy-url}}| политика]].",
        "actioncomplete": "Кар авунва",
        "dellogpage": "Алудунин журнал",
        "deletecomment": "Кар",
        "deleteotherreason": "Масса/ ва мад кар",
-       "deletereasonotherlist": "Маса фагьум",
-       "rollback_short": "КЬулухъди чIугун",
+       "deletereasonotherlist": "Маса себеб",
        "rollbacklink": "Кьулухъди чIугун",
        "sessionfailure-title": "Гьахьунин гъалатI",
        "protectlogpage": "Хуьнин журнал",
        "logentry-move-move_redir-noredirect": "$1 $3 макъаладин тӀвар, ракъурун тун тавуна ва ракъурунин винелай $4 -диз масакӀа хъувуна",
        "logentry-newusers-autocreate": "Уртахдин $1 учётдин кхьин автоматиквилели туькӀуьр хьанва",
        "rightsnone": "(садни)",
-       "feedback-subject": "Тема:",
-       "feedback-message": "Чар:",
        "feedback-cancel": "Гьич авун",
        "feedback-close": "Авунва",
+       "feedback-message": "Чар:",
+       "feedback-subject": "Тема:",
        "expand_templates_xml_output": "XML акъудун",
        "expand_templates_ok": "ОК",
        "expand_templates_remove_comments": "Баянар алудун"
index b9d66ee..17b837b 100644 (file)
        "watchlisttools-edit": "Vide e edita la lista de pajes oservada",
        "watchlisttools-raw": "Edita la lista rua de pajes oservada",
        "version": "Varia",
-       "version-version": "(Varia $1)",
+       "version-version": "($1)",
        "fileduplicatesearch-submit": "Xerca",
        "specialpages": "Pajes spesial",
        "expand_templates_ok": "Oce"
index 13620dd..b079546 100644 (file)
@@ -14,7 +14,9 @@
                        "Remember the dot",
                        "Tibor",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Robin0van0der0vliet",
+                       "Macofe"
                ]
        },
        "tog-underline": "Links óngersjtriepe",
        "cancel": "Aafbraeke",
        "moredotdotdot": "Miè...",
        "mypage": "Mien gebroekerspagina",
-       "mytalk": "Mien euverlèkpagina",
+       "mytalk": "Euverlèk",
        "anontalk": "Euverlèk veur dit IP adres",
        "navigation": "Navigatie",
        "and": "&#32;en",
        "virus-unknownscanner": "onbekeng antivirus:",
        "logouttext": "'''De bis noe aafgemeld.'''\n\nDe kèns {{SITENAME}} noe anoniem (mit vermeljing van IP-adres) gebroeke, of <span class='plainlinks'>[$1 opnuuj aanmelde]</span> ónger dezelfde of 'ne angere naam.\nMäögelik waert nog 'n deil pagina's getuind esofs te nog aangemeld bis pès te de cache van diene browser laeg maaks.",
        "yourname": "Diene gebroekersnaam",
+       "userlogin-yourname": "Gebroekersnaam",
        "yourpassword": "Die wachwaord",
+       "userlogin-yourpassword": "Wachwaord",
        "yourpasswordagain": "Wachwaord opnuuj intype",
        "remembermypassword": "Mien wachwaord onthouwe veur later sessies (hoegstens $1 {{PLURAL:$1|daag|daag}})",
        "yourdomainname": "Die domein",
        "login-abort-generic": "Doe bös neet aangemèldj - Aafgebraoke",
        "loginlanguagelabel": "Taol: $1",
        "suspicious-userlogout": "Dien verzeuk óm aaf te melde is genegeerd, ómdet 't liek esof 't verzeuk is versjik door 'ne browser of cacheproxy dae kepot is.",
+       "pt-login": "Aanmèlde",
+       "pt-login-button": "Aanmèlde",
+       "pt-userlogout": "Aafmelde",
        "php-mail-error-unknown": "Dao haet ziech 'n ónbekénde fout veurgedaon in de mail()-functie van PHP",
        "user-mail-no-addy": "Perbeerdjes 'ne mail te sjikke zónger 'n adres",
        "changepassword": "Wachwaord verangere",
        "search-external": "Extern zeuke",
        "searchdisabled": "Zeuke op {{SITENAME}} is oetgesjakeld vanweige gebrek aan servercapaciteit.\nZoelang as de servers nog neet sjterk genog zunt kins e zeuke bie Google.\nMèrk op dat hun indexe van {{SITENAME}} content e bietje gedatierd kint zien.",
        "preferences": "Veurkäöre",
-       "mypreferences": "Mien veurkäöre",
+       "mypreferences": "Veurkäöre",
        "prefs-edits": "Aantal bewèrkinge:",
        "prefs-skin": "{{SITENAME}}-uterlik",
        "skin-preview": "Veurbesjouwing",
        "action-siteadmin": "de database aaf te sloete of aope te stelle",
        "action-sendemail": "Sjik e-mails",
        "nchanges": "$1 {{PLURAL:$1|bewerking|bewerkinge}}",
+       "enhancedrc-history": "historie",
        "recentchanges": "Lètste verangeringe",
        "recentchanges-legend": "Opties veur recènte verangeringe",
        "recentchanges-summary": "Volg de recènste bewirkinge op deze wiki op dees pagina.",
        "querypage-disabled": "Dees speciaal pagina steit oet veur performanceredene.",
        "booksources": "Bookwinkele",
        "booksources-search-legend": "Zeuk informatie euver 'n book",
+       "booksources-search": "Zeuk",
        "booksources-text": "Hiej onger stuit 'n lies met koppelinge nao anger websites die nuuje of gebroekde beuk verkoupe, en die wellich meer informatie euver 't book detse zeuks höbbe:",
        "booksources-invalid-isbn": "t Ingegaeve ISBN liek neet geldig te zeen.\nControleer of se wellich n fout höbs gemaak bie de inveur.",
        "specialloguserlabel": "Oetveurder:",
        "delete-toobig": "Dees pazjena haet 'ne lange bewerkingsgesjiedenis, mieë es $1 {{PLURAL:$1|versie|versies}}. 't Wisse van dit saort pazjena's is mit rech beperk óm 't próngelök versteure van de werking van {{SITENAME}} te veurkómme.",
        "delete-warning-toobig": "Dees pazjena haet 'ne lange bewerkingsgesjiedenis, mieë es $1 {{PLURAL:$1|versie|versies}}. 't Wisse van dees pazjena kan de werking van de database van {{SITENAME}} versteure. Bön veurzichtig.",
        "rollback": "Verangering ongedaon gemaak",
-       "rollback_short": "Trökdrèjje",
        "rollbacklink": "Trökdrieje",
        "rollbackfailed": "Ongedaon make van wieziginge mislùk.",
        "cantrollback": "Trökdrejje van verangeringe neet meugelik: Dit artikel haet mer einen auteur.",
        "blanknamespace": "(hoofnaamruumde)",
        "contributions": "Biedrages per gebroeker",
        "contributions-title": "Biedrage van $1",
-       "mycontris": "Mien biedrage",
+       "mycontris": "Biedrage",
        "contribsub2": "Veur $1 ($2)",
        "nocontribs": "Gein wijzigingen gevonden die aan de gestelde criteria voldoen.",
        "uctop": "(lèste verangering)",
        "import-error-invalid": "De pagina\" \"$1\" is neet geïmporteerd omdet de naam óngeljig is.",
        "importlogpage": "Importlogbook",
        "importlogpagetext": "Administratieve import van pazjena's mit gesjiedenis van anger wiki's.",
-       "import-logentry-upload": "[[$1]] geïmporteerd via 'ne bestandjsupload",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|versie|versies}}",
-       "import-logentry-interwiki": "transwiki veur $1 geslaag",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versie|versies}} van $2",
        "javascripttest": "Tes JavaScript",
-       "javascripttest-title": "Veur tes oet veur $1",
        "javascripttest-pagetext-noframework": "Dees pagina is gerizzerveerd veur 't oetveure van JavaScriptteste.",
        "javascripttest-pagetext-unknownframework": "Ónbekèndje testframework \"$1\".",
        "javascripttest-pagetext-frameworks": "Kees ein vanne volgende tesframeworks: $1",
        "javascripttest-pagetext-skins": "Kees 'n oeterlik óm de teste op te laote loupe:",
        "javascripttest-qunit-intro": "Zuuch de [$1 tesdocumentatie] op mediawiki.org.",
-       "javascripttest-qunit-heading": "QUnit tessuite veur MediaWiki JavaScript",
        "tooltip-pt-userpage": "Dien gebroekerspagina",
        "tooltip-pt-anonuserpage": "De gebroekerspazjena veur dit IP adres",
        "tooltip-pt-mytalk": "Dien euverlèkpagina",
        "watchlisttools-edit": "Volglies bekieke en bewirke",
        "watchlisttools-raw": "Roew volglies bewirke",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|euverlègk]])",
-       "unknown_extension_tag": "Ónbekindje tag \"$1\"",
        "duplicate-defaultsort": "Waarsjuwing: De standaardsortering \"$2\" krieg veurrang veur de sortering \"$1\".",
        "version": "Versie",
        "version-extensions": "Geïnstalleerde oetbreijinge",
        "version-parser-function-hooks": "Parserfunctieheuk",
        "version-hook-name": "Hooknaam",
        "version-hook-subscribedby": "Geabonneerd door",
-       "version-version": "(Versie $1)",
+       "version-version": "($1)",
        "version-license": "Licentie",
        "version-poweredby-credits": "Deze wiki weurt aangedreve door '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "anger",
        "specialpages-group-wiki": "Wikigegaeves en -hölpmiddele",
        "specialpages-group-redirects": "Doorverwiezende speciaal pazjena's",
        "specialpages-group-spam": "Spamhölpmiddele",
+       "specialpages-group-developer": "Hölpmiddele veur óntwikkeleers",
        "blankpage": "Laeg pazjena",
        "intentionallyblankpage": "Deze pagina is bewus laeg gelaote en wurt gebroek veur benchmarks, enzovoort.",
        "external_image_whitelist": " #Laot deze regel onveranderd<pre>\n#Zèt hierónger reguliere expressiefragmente (allein 't deil det tusse de // steit)\n#Deze waere gehaaje taenge de URL's van externe (gehotlinkte) aafbeeldinge\n#Es de reguliere expressie van toegang is, wurd 'n aafbeelding weergegaeve, anges wurd allein 'n verwiezing weergegaeve\n#Regels die beginne met \"#\" waere es opmerking behanjeld\n#Regels in de witte lies zeen neet hooflettergeveulig.\n\n#Zet alle reguliere expressiefragmenten baove deze regel. Laot deze regel onveranderd</pre>",
        "logentry-newusers-autocreate": "De gebroeker $1 is autematis aangemaak",
        "rightsnone": "(gein)",
        "revdelete-summary": "samevatting bewerke",
+       "feedback-adding": "Feedback weurt aan pagina toegevoeg...",
+       "feedback-bugcheck": "Good! Kónterleer ef of 't neet al ein vanne [$1 bekèndje bugs] is.",
+       "feedback-bugnew": "Gekónterleerdj. Mèlj 'ne nuuj bug.",
        "feedback-bugornote": "Es se zewied bös óm e technisch perbleem in détail te besjrieve, [$1 rapperteer 'ne bug]. \nAnges kin se-n ouch 't einvawdig formeleer hieónger gebroeke. Dien commentaar zal waere toegeveug ane pagina \"[$3 $2]\", same mit diene gebroekersnaam enne browser dae se gebruuks.",
-       "feedback-subject": "Óngerwerp:",
-       "feedback-message": "Berich:",
        "feedback-cancel": "Braek aaf",
-       "feedback-submit": "Slaon feedback óp",
-       "feedback-adding": "Feedback weurt aan pagina toegevoeg...",
+       "feedback-close": "Gedaon",
        "feedback-error1": "Fout: ónbekind rizzeltaot vanne API",
        "feedback-error2": "Fout: bewirking mislök",
        "feedback-error3": "Fout: gein reactie vanne API",
+       "feedback-message": "Berich:",
+       "feedback-subject": "Óngerwerp:",
+       "feedback-submit": "Slaon óp",
        "feedback-thanks": "Danke! Diene feedback is oppe pagina \"[$2 $1]\" geplaats.",
-       "feedback-close": "Gedaon",
-       "feedback-bugcheck": "Good! Kónterleer ef of 't neet al ein vanne [$1 bekèndje bugs] is.",
-       "feedback-bugnew": "Gekónterleerdj. Mèlj 'ne nuuj bug.",
        "searchsuggest-search": "Zeuke",
        "searchsuggest-containing": "bevat...",
        "api-error-badaccess-groups": "Doe moogs gein bestenj uploade óp deze wiki.",
        "expand_templates_remove_comments": "Wis opmerkinge",
        "expand_templates_remove_nowiki": "Óngerdrök <nowiki>-tags in 't resultaat",
        "expand_templates_generate_xml": "XML-parserboum bekieke",
-       "expand_templates_preview": "Veurvertoeaning"
+       "expand_templates_preview": "Veurvertoeaning",
+       "special-characters-group-latin": "Letien",
+       "special-characters-group-latinextended": "Oetgebreid letien",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symbole",
+       "special-characters-group-greek": "Grieks",
+       "special-characters-group-cyrillic": "Cyrillisch",
+       "special-characters-group-arabic": "Arabisch",
+       "special-characters-group-arabicextended": "Oetgebreid Arabisch",
+       "special-characters-group-persian": "Perzisch",
+       "special-characters-group-hebrew": "Hebreeuws",
+       "special-characters-group-bangla": "Bengaals",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Teloegoe",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Goedzjarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Cambodzjaans"
 }
index d008401..df4b948 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Bonevarluri",
                        "Mogoeilor",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "هوم پیوند زیرخط دار:",
@@ -68,7 +69,7 @@
        "fri": "جمه",
        "sat": "شمه",
        "january": "جانويه",
-       "february": "فبريه",
+       "february": "فوریه",
        "march": "مارش",
        "april": "آبريل",
        "may_long": "ما",
@@ -91,8 +92,8 @@
        "october-gen": "اكتور",
        "november-gen": "نوامر",
        "december-gen": "دسامر",
-       "jan": "ژانويه",
-       "feb": "فبريه",
+       "jan": "جانویه",
+       "feb": "فوریه",
        "mar": "مارش",
        "apr": "آبريل",
        "may": "ما",
        "pagecategories": "{{PLURAL:$1|دسه|دسه يا}}",
        "category_header": "بلگيا مئن دسه \"$1\"",
        "subcategories": "زيردسه يا",
-       "category-media-header": "رسانه د دسه \"$1\"",
+       "category-media-header": "وارسگر د دسه \"$1\"",
        "category-empty": "ای دسه واقعن ده ور گرته هیژ بلگه ای یا وارسگر ای نی",
        "hidden-categories": "{{PLURAL:$1|دسته قام بيه|دسته يا قام بيه}}",
        "hidden-category-category": "دسه یا قام بیه",
        "category-subcat-count-limited": "ای دسه وا دم {{جمی:$1|زیردسه|$1زیردسه یا}} بوئه",
        "category-article-count": "{{جمی:$2|ای دسه ده ور گرته بلگه نهاییه .| {{جمی:$1| بلگه هئ|$1 بلگیا هئن}} د ای دسه, وه در $2 کل.}}",
        "category-article-count-limited": "نها {{جمی:$1|بلگه هئ|$1بلگیا هئن}} د دسه ایسنی .",
-       "category-file-count": "{{جÙ\85Û\8c:$2|اÛ\8c Ø¯Ø³Ù\87 Ù\81Ù\82Ø· Ø´Ø§Ù\85Ù\84 جانیا نهایی هئ file.| نهایی {{جمی:$1|جانیا هئ|$1 جانیایا هئن}} د ای دسه, وه در د کل $2 .}}",
+       "category-file-count": "{{جÙ\85Û\8c:$2|اÛ\8c Ø¯Ø³Ù\87 Ù\81Ù\82Ø· Ø¯ Ù\88ر Ú¯Ø±ØªÙ\87 جانیا نهایی هئ file.| نهایی {{جمی:$1|جانیا هئ|$1 جانیایا هئن}} د ای دسه, وه در د کل $2 .}}",
        "category-file-count-limited": " {{جمی:$1|[جانیا هئ|1$جانیایا هئن}}نهایی هان د دسه ایسنی.",
        "listingcontinuesabbrev": "دماله",
        "index-category": "بلگيا سيائه دار",
        "faq": "اف ای كيو",
        "faqpage": "پروجه:اف اي كيو",
        "actions": "جمشت",
-       "namespaces": "نوم جا",
-       "variants": "آلشت ونی يا",
+       "namespaces": "نوم ورگه یا",
+       "variants": "آلشتگریا",
        "navigation-heading": "منو ناوگشتن",
        "errorpagetitle": "غلط",
        "returnto": "ورگشت وه $1.",
        "viewhelppage": "ديئن بلگه هومياری",
        "categorypage": "ديئن بلگه دسه بنی",
        "viewtalkpage": "ديئن چك چنه يا",
-       "otherlanguages": "د زونيا هنی",
+       "otherlanguages": "د زونا هنی",
        "redirectedfrom": "(ورگشتن د$1)",
        "redirectpagesub": "بلگه واگردونی",
        "redirectto": "واگردونی سی:",
        "copyrightpage": "{{ان اس:پروجه}}:کپی رایت",
        "currentevents": "پيشومدل تازه باو",
        "currentevents-url": "پروجه:پيشومدل تازه باو",
-       "disclaimers": "کذو کننه یا",
-       "disclaimerpage": "پروجه:منكر بيئن كاروريا",
+       "disclaimers": "تیه پوشکاریا",
+       "disclaimerpage": "پروجه:منكر بيئن کلی",
        "edithelp": "هومياری سی ويرايشت",
+       "helppage-top-gethelp": "هومياری",
        "mainpage": "سرآسونه",
        "mainpage-description": "سرآسونه",
        "policy-url": "پروجه:خط و مش",
        "readonly_lag": "ای رسینه جا قلف بیه تا اوسه که سرور رسینه جا وه مینجاون برسه.",
        "internalerror": "خطا داخلی",
        "internalerror_info": "خطا داخلی:$1",
+       "internalerror-fatal-exception": "تی داشتن مرگدار د جور \"$1\"",
        "filecopyerror": "نبوئه جانیا $1 د $2 ورداشته بوئه",
        "filerenameerror": "نبوئه جانیا $1 د $2 نوم آلشت بوئه",
        "filedeleteerror": "نبوئه جانیا $1 پاکسا بوئه",
        "viewyourtext": "شما تونیت سرچشمه ویرایشتیا تونه ای د بلگه بوینیت و دشو ورداریت",
        "protectedinterface": "ای بلگه سی نرم افزار د ای ویکی نیسسه آماده می که، و د   .\nسی اضاف کردن یا آلشت دئن د همه ویکی یا لطفا [//translatewiki.net/ translatewiki.net] نه به کار بؤریت، ولات نشین کنی پروجه ویکی وارسگر.",
        "editinginterface": "<strong>زئنار دئن:</strong> شما داریت بلگه ای نه که سی      بیه ویرایشت می کید.",
+       "translateinterface": "سی اضاف کردن یا آلشت دئن والرسته یا د همه ویکی یا،لطف بکید[//translatewiki.net/ translatewiki.net] وه کار بئیریت، پروجه ولات دیاری کردن ویکی وارسگر",
        "cascadeprotected": "ای بلگه د ویرایشت پر و پیم بیه سی یه که {{جمی:$1|وه بلگه یه |ونو بلگه یان}} که ها دش د                 :\n$2",
        "namespaceprotected": "شما حقی سی ویرایشت بلگه یایی که هان د نومجا  <strong>$1</strong> ناریت.",
        "customcssprotected": "شما سی ویرایشت ای بلگه سی اس اس اجازه ناریت سی یه که میزونکاری دونسمنیا شخصی یه کاریار هنی ها د وه.",
        "wrongpassword": "رازینه گواردن غلط وارد بیه.\nهنی تلاش بکید",
        "wrongpasswordempty": "رازینه گواردنی که دئیت حالیه.د نؤ تلاش بکیت",
        "passwordtooshort": "رازینه گواردن با حداقل  {{PLURAL:$1|1 character|$1 characters}}          با",
+       "passwordtoolong": "رازینه گواردن نواس بیشتر د {{PLURAL:$1|1 character|$1 characters}} با.",
        "password-name-match": "رازینه گواردنتو با د نوم کاریاری فرخ داشتوه",
        "password-login-forbidden": "وه کار گرتن ای پاسوردو نوم کاریاری قدقن بیه.",
        "mailmypassword": "د نۈ وارد كردن رازینه گواردن",
        "createacct-another-realname-tip": "نوم راستکی دل به حائه.\nار شما وه نه نهااماییه بکیت، یه سی هوم نسبت دئن وه کاریار   سی کاریاش وه کار گرته بوئه.",
        "pt-login": "وا مین اومائن",
        "pt-login-button": "وا مین اومائن",
-       "pt-createaccount": "يه گل حساو راست بكيد",
+       "pt-createaccount": "يه گل حساو راس بكيد",
        "pt-userlogout": "د سامونه دراومائن",
        "php-mail-error-unknown": "خطا نادیار مین آلشت ون PHP's mail()",
        "user-mail-no-addy": "سی کل کردن انجومانامه د یه گل انجومانامه بی تیرنشون کنشتگری بیه",
        "resettokens-watchlist-token": "دیارگر سی حردنی تورگه(اتم/آر اس اس) سی [[ویجه:سیل برگ|آلشت دئن بلگه یا د سیل برگتو]]",
        "resettokens-done": "نشونه یا تازه بیه.",
        "resettokens-resetbutton": "نشونه یا انتخاو بیه تازه بوئن",
-       "bold_sample": "Ù\85تÙ\86 ØªÙ\88پر Ø¨Ù\8aه",
-       "bold_tip": "Ù\85تÙ\86 توپر بيه",
-       "italic_sample": "نوشته كج كوله",
-       "italic_tip": "نوشته كج كوله",
+       "bold_sample": "Ù\86Û\8cسسÙ\87 ØªÙ\88پر Ø¨Û\8cه",
+       "bold_tip": "Ù\86Û\8cسسÙ\87 توپر بيه",
+       "italic_sample": "نیسسه كج كوله",
+       "italic_tip": "نیسسه كج كوله",
        "link_sample": "داسون هوم پیوند",
-       "link_tip": "هوم پیوند داخلی",
+       "link_tip": "هوم پیوند مینجایی",
        "extlink_sample": "http://www.example.com داسون هوم پیوند",
        "extlink_tip": "هوم پیوند خارجی(د ویر داشتو)",
        "headline_sample": "سرخط نیسسه",
        "nowiki_sample": "د ایچه یه گل نیسسه بی شلک وارد بکید",
        "nowiki_tip": "شلک ویکی نه ندید بگر",
        "image_sample": "Example.jpg",
-       "image_tip": "جانیا محاط بيه",
+       "image_tip": "جانیا چار قر گرته",
        "media_sample": "Example.ogg",
        "media_tip": "جانیا هوم پیوند",
-       "sig_tip": "امضا شما و دیس ون وخت",
+       "sig_tip": "امضا شما وا گاتدیس",
        "hr_tip": "خط آسو ونه(سوا سوا وه کار بیئرشو)",
        "summary": "چكسته",
        "subject": "موضو/سر خط:",
        "anoneditwarning": "<strong>زئنار:</strong> شما هنی نیوماته وامین. تیرنشون آی پی شما هر گاتی که آلشتی راس بکیت سی کل خلک دیاره. ار <strong>[$1 روئیت وامین]</strong> یا <strong>[$2 یه گل حساو کاریاری راس بکیت]</strong>، ویرایشتیا شما وه نوم کاریاری خوتون دیاری می که، و وا چیا بیتر هنی.",
        "anonpreviewwarning": "<em>شما نیومائته وامین. تیرنشون آی پی شما د ویرگار ویرایشت ای بلگه اماییه بوئه.</em>",
        "missingsummary": "<strong>د ویر ونا:</strong> شما هنی یه گل چکسته ویرایشتی نها اماییه نکردیته.\nار شما د نو د ری\"{{int:savearticle}}\" بپورنیت, ویرایشت شما حالی اماییه بوئه.",
+       "selfredirect": "<strong>هشدار:</strong> شما د حال و بار آلشت دئن لا بلگه وه خوش هیئن.\nشایت دال اشتوایی سی آلشت دئن لا نه انتخاو کردیته، یا شایت بلگه نه اشتوایی ویرایشت می کیت.\n\nار ری \"{{int:savearticle}}\" دوبار بپورنیت، آلشت دئن لا دروس بوئه.",
        "missingcommenttext": "لطفن د ایچه ویر و باور بیئتو",
        "missingcommentheader": "<strong>د ویر ونا:</strong> شما هنی یه گل موضوع/سرخط سی ای ویر و باور نها اماییه نکردیته.\nار شما د نو د ری\"{{int:savearticle}}\" بپورنیت, ویرایشت شما حالی اماییه بوئه.",
        "summary-preview": "چکسته پیش سیل:",
        "subject-preview": "پیش سیل موضو سرخط",
+       "previewerrortext": "یه گل خطا د گاتی که شما میهاستیت یه گل پیش سیل د آلشتیاتو داشتوین پیش اومائه.",
        "blockedtitle": "کاریار نهاگری بیه",
        "blockedtext": "<strong>نوم کاریاری شما یا تیرنشون آی پی شما قلف بیه.</strong>\n\n\n$1 ونه قلف کرده.\nدلیل ها د ایچه<em>$2</em>.\n\nشرو د قلف بیین:$8\nآخر قلف بیین:$6\nکاریار ورتیه قلف بیه:$7\n\nشما می تونیت وا $1 یا [[{{MediaWiki:Grouppage-sysop}}|دیووندار]] هنی پیوند بئریت و سی قلف کردن چک چنه بزنیت.\nالوت د ویر داشتویت که شما نمی تونیت د خصوصیت انجومانامه کل کردن سی ای کاربر استفاده بکیت مئر  یه گل تیرنشون انجومانامه معتور د [[Special:Preferences|ترجیحیا کاریاری]] خوتو معلوم کرده بویت و باید امکان وه کار بستن وه نه داشتویتو\nتیرنشون آی پی ایسنی شما $3 ئه، و نوم دیارکن قلف کردن #$5 ئه.\nلطفا همه جزئیات نه د هر حاسته ای که داریت بوئیت.",
        "autoblockedtext": "نوم کاریاری شما یا تیرنشون آی پی شما سی یه که یه گل کاریاری هنی وه کارش بسته خودانجومن قلف بیه $1 ونه قلف کرده.\nدلیل ها د ایچه\n\n:<em>$2</em>.\n\nشرو د قلف بیین:$8\nآخر قلف بیین:$6\nکاریار ورتیه قلف بیه:$7\n\nشما می تونیت وا $1 یا [[{{MediaWiki:Grouppage-sysop}}|دیووندار]] هنی پیوند بئریت و سی قلف کردن چک چنه بزنیت.\n\nالوت د ویر داشتویت که شما نمی تونیت د خصوصیت انجومانامه کل کردن سی ای کاربر استفاده بکیت مئر  یه گل تیرنشون انجومانامه معتور د [[Special:Preferences|ترجیحیا کاریاری]] خوتو دیاری کرده بویت و باید امکان وه کار بستن وه نه داشتویت.\n\nتیرنشون آی پی ایسنی شما $3 ئه، و نوم دیارکن قلف کردن #$5 ئه.\nلطفا همه جزئیات نه د هر حاسته ای که داریت بوئیت.",
        "newarticle": "تازه",
        "newarticletext": "شما وادما هوم پیوندی هئیت که وجود ناره.\nسی راس کردن بلگه.شرو د نیسنن مئن جعوه هاری بکید(سیل[$1 ] سی دونسمنی بیشتر بکید).\nار شما سی اشتوا کردن هایئن ایچه، دگمه وادما رئتن دوارته نیئر تونه بپورنیت.",
        "anontalkpagetext": "----",
-       "noarticletext": "د ØªØ§Ø²Ù\87 Û\8cا Ø¯ Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\85تÙ\86 Ù\86Û\8c.\nØ´Ù\85ا ØªÙ\88Ù\86Û\8cد Ø¯[[Special:Search/{{PAGENAME}}|search for this page title]] بگردید د ای بلگه یا د بلگیا هنی یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}   د هنی پی جوری بوئه  logs]</span>   \n   [{{fullurl:{{FULLPAGENAME}}|action=edit}} یای ای بلگه نه ویرایشت بکیدpage]</span>.",
-       "noarticletext-nopermission": "د ØªØ§Ø²Ù\87 Û\8cا Ø¯ Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\85تÙ\86 Ù\86Û\8c.\nØ´Ù\85ا ØªÙ\88Ù\86Û\8cد Ø¯[[Special:Search/{{PAGENAME}}|search for this page title]] بگردید د ای بلگه یا د بلگیا هنی یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}   د هنی پی جوری بوئه  logs]</span>      اما شما حق ناریتو ای بلگه نه راس بکیت",
+       "noarticletext": "د ØªØ§Ø²Ù\87 Û\8cا Ø¯ Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Û\8cسسÙ\87 Ù\86Û\8c.\nØ´Ù\85ا Ù\85Û\8c ØªÙ\88Ù\86Û\8cت Ø¯[[Special:/{{PAGENAME}}|]] بگردید د ای بلگه یا د بلگیا هنی یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}   د هنی پی جوری بوئه  logs]</span>   \n   [{{fullurl:{{FULLPAGENAME}}|action=edit}} یای ای بلگه نه ویرایشت بکیدpage]</span>.",
+       "noarticletext-nopermission": "د ØªØ§Ø²Ù\87 Û\8cا Ø¯ Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Û\8cسسÙ\87 Ù\86Û\8c.\nØ´Ù\85ا Ù\85Û\8c ØªÙ\88Ù\86Û\8cت Ø¯[[Special:/{{PAGENAME}}]] بگردید د ای بلگه یا د بلگیا هنی یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}   د هنی پی جوری بوئه  logs]</span>      اما شما حق ناریتو ای بلگه نه راس بکیت",
        "missing-revision": "وانئیری #$1 د بلگه ای که نومش ونه \"{{FULLPAGENAME}}\" وجود ناره.\n\nشایت بانی جاونه وه وا یه گل ویرگار وه هنگوم نبیه که د یه گل بلگه پاکسا بیه هوم پیوند بیه بوئه.\nشایت جزئیات د   [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]  پیدا بوئن.",
        "userpage-userdoesnotexist": "حساو کاریاری\"$1\" ثوت نام نبیه.\nار میهایت ای بلگه نه بسازیتو یا ویرایشت بکیت یه گل وارسی انجوم بئیت.",
        "userpage-userdoesnotexist-view": "حساو کارور\"$1\" ثوت نبیه.",
        "sectioneditnotsupported-text": "ویرایشت بهرجایی د ای بلگه نئیش.",
        "permissionserrors": "خطا اجازه دئین",
        "permissionserrorstext": "شما حق ناریت ونه انجوم بیئت, سی{{جمی:$1|دلیل|دلیلیا}} نهایی:",
-       "permissionserrorstext-withaction": "شما سی $2 اجازه ناریت\nسی دمال کردن{{PLURAL:$1|reason|reasons}}:",
+       "permissionserrorstext-withaction": "شما سی $2 اجازه ناریت\nسی نهاگری {{PLURAL:$1|دلیل|دلیلیا}}:",
        "recreate-moveddeleted-warn": "'''زنهار شما بلگه ای که وادما پاکسا بیه هنی راس کردیته'''\nشما باید دونسه بایت که آیا هنی سی نها گرتن ویرایشت ای بلگه خوئه.\nپاکسا بیئن و جمشت سی ای بلگه سی فراغتتو آماده بیه:",
        "moveddeleted-notice": "ای بلگه پاکسا بیه.\nپاکسا بین و جمشت ای بلگه سی سرچشمه دئین آماده بیه",
        "log-fulllog": "دیئن همه پهرستنومه یا",
        "content-model-css": "سی اس اس",
        "content-json-empty-object": "سرتال حالی",
        "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-category": "بلگه یایی که واحونی پیوندگر خطا گرون فره ای ها دشو",
        "post-expand-template-inclusion-warning": "زنئار چوئه د ور گرته انازه ای یه که فره گپه.پاره ای د چوئه یا نه د ور نمیئره.",
        "viewpagelogs": "سی ای بلگه بوینتو.",
        "nohistory": "هیچ ویرگار ویرایشتی د ای بلگه نئ.",
        "currentrev": "آخرین دوواره دیئن",
-       "currentrev-asof": "آخرين دووار ديئن چی $1",
+       "currentrev-asof": "آخري وانئری چی $1",
        "revisionasof": "دوواره ديئن $1",
        "revision-info": "دوواره سیل بیه چی $1 وا $2",
        "previousrevision": "اصلاح دمايی",
-       "nextrevision": "تازه ترن دوبار دیئن",
-       "currentrevisionlink": "آخری دوواره دیئن",
+       "nextrevision": "تازه تری وانئری",
+       "currentrevisionlink": "آخری وانئری",
        "cur": "تازه باو",
        "next": "نيایی",
        "last": "دمايی",
        "lineno": "خط $1:",
        "compareselectedversions": "دوبار دیئنیایی که انتخاو بینه مقایسه بکیتو",
        "showhideselectedversions": "شلک دیئن وانیریا انتخاو بیه نه آلشت بکید",
-       "editundo": "رد كردن",
+       "editundo": "ناانجومگر کردن",
        "diff-empty": "(بی فرق)",
        "diff-multi-sameuser": "({{PLURAL:$1|یه گل نسقه مینجایی|$1 نسقه یا مینجایی}} وه دس{{PLURAL:$2|کاریاری تر|$2 کاریاریا}} نشو دئه نبیه)",
        "diff-multi-otherusers": "({{PLURAL:$1|یه گل نسقه مینجایی|$1 نسقه یا مینجایی}} وه دس{{PLURAL:$2|کاریاری تر|$2 کاریاریا}} نشو دئه نبیه)",
        "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 {{جمی:$1|نتيجه|نتيجه}} سی هر بلگه",
        "search-result-size": "$1 ({{جمی:$2|1 کلیمه|$2 کلیمه یا}})",
        "search-result-category-size": "{{جمی:$1|1 اندوم|$1 اندومیا}} ({{جمی:$2|1 زیردسه|$2 زیردسه یا}}, {{جمی:$3|1 جانیا|$3 جانیایا}}",
        "search-redirect": "(ورگشتن $1)",
-       "search-section": "(بشق $1)",
+       "search-section": "(بهرجا $1)",
        "search-category": "(دسه $1)",
        "search-file-match": "(یکی کردن مینونه جانیا)",
        "search-suggest": "منظورت يه بی:$1",
        "showingresults": "نمائشت بیشترونه {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} د هار، شرو د شماره'''$2'''.",
        "showingresultsinrange": "نمائشت بیشترونه {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} د هار، شرو د شماره'''$2''' تا شماره '''$3'''.",
        "search-showingresults": "{{PLURAL:$4|نتیجه یا<strong>$1</strong> د <strong>$3</strong>|نتیجه یا<strong>$1 - $2</strong د <strong>$3</strong>}}",
-       "search-nonefound": "هیژ نتیجه یی سی پی جست تو مطاوقت نکرده",
+       "search-nonefound": "هیژ نتیجه یی وا پی جست تو یکی نئ.",
        "powersearch-legend": "پی جوری پیشکرده",
        "powersearch-ns": "د نوم جايا نوم ديار پی جوری بک:",
        "powersearch-togglelabel": "چك كردن:",
        "searchdisabled": "مئن جوری د {{SITENAME}} کنشتگر نئ.\nموقتاً می تونیت مئن جوری Google نه بونیت وه کار.\nد ویرتو با که نتیجه یایی که د مئن جوری وا او روشت وه دست میان شایت وه روز نبان.",
        "search-error": "یه گل خطا سی اوسنی که پی جوری می کردیت اتفاق افتائه:$1",
        "preferences": "خصوصيات هنی",
-       "mypreferences": "خصوصيات هنی",
+       "mypreferences": "چیا هنی",
        "prefs-edits": "شماره ویرایشتا:",
        "prefsnologintext2": "لطف بکیت بیایت وامین و ترجیحات خوتونه آلشت بئیت.",
        "prefs-skin": "پوس",
        "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 بیشترونه {{جمی:$1|روز|روزیا}}",
        "prefs-watchlist-edits": "بیشترونه انازه آلشتیایی که د سیل برگ گپ بیه نشو دئه بیه:",
        "right-override-export-depth": "وه در دئن بلگه یایی که بلگه یا هوم پیوند بیه تا پی یا 5 ها دشو",
        "right-sendemail": "سی کاریاریا هنی انجومانامه کل بکید",
        "right-passwordreset": "رازینه گواردن انجومانامه د نو دئه بیه نه بوینیت",
+       "right-managechangetags": "راس کردن[[Special:سردیسیا|سردیسیا]] پاکسا کردن د رسینه جا",
        "newuserlogpage": "راس بیه وا کاریار",
        "newuserlogpagetext": "یه پهرستنومه راس بیئن کاریاره",
        "rightslog": "پهرستنومه حقوق کاریار",
        "action-viewmyprivateinfo": "دونسمنیا خوتونه بوینیت",
        "action-editmyprivateinfo": "دونسمنیا شصقی خوتونه ویرایشت بکید",
        "action-editcontentmodel": "ویرایشت مدل مینونه یه گل بلگه",
+       "action-managechangetags": "راس کردن و پاکسا کردن سردیسیا د رسینه جا",
        "nchanges": "$1 {{جمی:$1|آلشت|آلشتیا}}",
        "enhancedrc-since-last-visit": "$1 {{جمی:$1|د آخری دیئن}}",
        "enhancedrc-history": "ويرگار",
        "recentchanges-feed-description": "دو بیشتر آلشتیا تازباو نه د ویکی که ها د هوال حون پیگری کو.",
        "recentchanges-label-newpage": "ای ويرايشت يه بلگه تازه راس كرده",
        "recentchanges-label-minor": "يه ويرايشت كؤچكيه",
-       "recentchanges-label-bot": "ای ويرايشت نه يه بوت انجوم ديئه",
+       "recentchanges-label-bot": "ای ويرايشت نه يه بوت انجوم دئه",
        "recentchanges-label-unpatrolled": "ای ويرايشت هنی تيه واداشت نبيه",
        "recentchanges-label-plusminus": "انازه بلگه وه شمار ای بایتیا آلشت کرده.",
        "recentchanges-legend-heading": "'''میراث:'''",
        "rcshowhidebots": "$1 رواتيا یا بوتيا",
        "rcshowhidebots-show": "نشو دئن",
        "rcshowhidebots-hide": "قام کردن",
-       "rcshowhideliu": "$1 کاروريا ثوت نام کرده",
+       "rcshowhideliu": "$1 کاریاریا ثوت نام کرده",
        "rcshowhideliu-show": "نشو دئن",
        "rcshowhideliu-hide": "قام کردن",
        "rcshowhideanons": "کاریار نادیار $1",
        "rc-old-title": "ذاتا چی \"$1\" راس بیه",
        "recentchangeslinked": "آلشتیا تی یکی",
        "recentchangeslinked-feed": "آلشتیا تی یکی",
-       "recentchangeslinked-toolbox": "آلشتیا تی یکی",
+       "recentchangeslinked-toolbox": "آلشتیا ته یک",
        "recentchangeslinked-title": "آلشتیا تی یکی د $1",
        "recentchangeslinked-summary": "ای نوم گه تازه د بلگیایی که وا بلگیا ویجه هوم پیوند بینه آلشت بیه(یا سی اندومیا دسه بنی بیه)\nبلگیا یی که هان [[Special:Watchlist|your watchlist]]و گپ بینه",
        "recentchangeslinked-page": "نوم بلگه:",
        "uploaderror": "خطا د سوار کردن",
        "upload-recreate-warning": "'''زئنار: جانیایی که وه ای نومه یا پاکسا بیه یا جا وه جا بیه.'''\n\nسی رائتی، نومگه پاکساگری و جا وه جا کردن ای بلگه ها د هار:",
        "uploadtext": "دسی دئین جانیایی که  د دماتر سوار بینه روئیت وه  [[Special:FileList|نوم گه جانیایا]] . د نو سوارکردن  د [[Special:Log/upload|نوم گه سوارکردیا]] و پاکساگری جانیایا د [[Special:Log/delete|deletion log]] جاگئر موئه.\n\nنها یه که یه گل جانیانه سوار کردیت می تونیت د سه شکل هاری وه نه د بلگه یا وه کار بونیت:\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' سی به کار بسن نسقه کامل جانیا\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' سی به کار بسن یه گل نسقه 200 پیکسلی  د جانیایی که ها د مینه یه گل جعوه  که ها د لا چپ نیسسه که د وه عبارت alt text چی توضیح وه کار بسه بیه\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' سی دروس کردن یه گل هوم پیوند سرراست وه جانیا بی یه که جانیا دیاری بکه نوم بلگه هاری سی سوارکرد جانیایا تازه استفاده بکیت.",
-       "upload-permitted": "جورا جانیا مجاز:$1.",
+       "upload-permitted": "جورا جانیا مجاز:$1 .",
        "upload-preferred": "جورا جانیا مجاز:$1.",
        "upload-prohibited": "جورا جانیا مجاز:$1.",
        "uploadlogpage": "سوارکرد",
        "listfiles-delete": "پاکسا کردن",
        "listfiles-summary": "ای بلگه یا ویجه همه جانیایا سوار بیه نه نشو می ئین.",
        "listfiles_search_for": "پی جوری سی نوم رسانه:",
-       "imgfile": "فايل",
+       "imgfile": "جانیا",
        "listfiles": "نوم گه فایل",
        "listfiles_thumb": "بن کلکی",
        "listfiles_date": "تاريخ",
        "listfiles-latestversion-yes": "هری",
        "listfiles-latestversion-no": "نه",
        "file-anchor-link": "فايل",
-       "filehist": "ويرگار فايل",
+       "filehist": "ويرگار جانیا",
        "filehist-help": "ری  ويرگاريا بپورنيت تا نسقه مرتوط بونيت.",
        "filehist-deleteall": "همه نه پاکسا کو",
        "filehist-deleteone": "پاك كردن",
        "filehist-dimensions": "بعديا",
        "filehist-filesize": "انازه فایل",
        "filehist-comment": "نظر",
-       "imagelinks": "استفاده د فايل",
+       "imagelinks": "وه کار گری جانیا",
        "linkstoimage": "دمال بيه {{PLURAL:$1|ديس ونيا بلگه|$1 ديس ون بلگيا}} دای فایل:",
        "linkstoimage-more": "بیشتر د $1 بلگه د ای جانیا هوم پیوند {{PLURAL:$1|بیه|بینه}}.\nنومگه هاری تئنا {{PLURAL:$1|اولین هوم پیوند|اولین $1 هوم پیوند}} د ای بلگه نه نشو می ئه.\n[[Special:WhatLinksHere/$2|نومگه کامل]] ئم هیئش.",
-       "nolinkstoimage": "ایچه هیژ بلگه ای سی هوم پیوند بیئن وا ای فایل نی",
+       "nolinkstoimage": "ایچه هیژ بلگه ای سی هوم پیوند بیئن وا ای جانیا نی",
        "morelinkstoimage": " [[ویجه:چه هوم پیوندی ها ایچه/$1|هوم پیوندیا هنی]]سی ای جانیا نه بونیت.",
        "linkstoimage-redirect": "$1 (واگردونی جانیا) $2",
        "duplicatesoffile": "{{PLURAL:$1|جانیا|جانیایا}} هاری نسقه تکراری ای جانیا {{PLURAL:$1|هئ|هئن}} ([[Special:FileDuplicateSearch/$2|دونسمنیا هنی]]):",
        "unusedimages": "فایلیا استفاده نبیه",
        "wantedcategories": "بلگه یا حاستنی",
        "wantedpages": "بلگه یا حاستنی",
+       "wantedpages-summary": "نومگه بلگه یایی که نیئشو وا بیشتری هوم پیوند د ونو، وه جز بلگه یایی که فقط آلشت دئن لا د ونونه دارن. سی یه گل نومگه د بلگه یایی که نیئشو و آلشت دئن لا د ونونه دارن، [[{{#special:BrokenRedirects}}]] نه سیل بکیت.",
        "wantedpages-badtitle": "سرون نامعتور د کومله نتیجه یا:$1",
        "wantedfiles": "فایلیا حاستنی",
        "wantedfiletext-cat": "جانیایا هاری وه کار گرته بوئن ولی وجود نارن. همچنو شایت جانیایا وه دری وا یه که ایچه هیئشون نومگه کاری بینه.هر گرینج مثبت دورویی  <del>خط مئوره.</del> به اضافه یه، بلگه یایی که که جانیایا بی وجودن نه د خوشو دارن د [[:$1]] نومگه کاری بینه.",
        "querypage-disabled": "ای بلگه ویجه سی دلیلیا انجومکاری ناکشتگر بیه.",
        "apihelp": "هومیاری آی پی آی",
        "apihelp-no-such-module": "ماجول \"$1\" پیدا نبی.",
-       "booksources": "سرچشمه يل كتاو",
+       "booksources": "سرچشمه یا كتاو",
        "booksources-search-legend": "پی جوری سی سرچشمه یا کتاو",
        "booksources-isbn": "آی اس بی ان:",
        "booksources-search": "پی جوری",
        "booksources-invalid-isbn": "شازک که دئه بیه معتور نئ؛ وارسی خطایا د گات ؤرداشتن د سرچشمه اولی وه کار گرته بوئه.",
        "specialloguserlabel": "انجومکار:",
        "speciallogtitlelabel": "حاستنی(موضوع یا کاریار):",
-       "log": "Ù\86Û\8cسÙ\86Ù\86 Ø±Ø® Ù\88Ù\86یا",
+       "log": "Ù¾Ù\87رستÙ\86Ù\88Ù\85Ù\87 یا",
        "all-logs-page": "همه پهرستنومه یا عمومی",
        "alllogstext": "نماشت یه جا همه پهرستنومه یا که هان د{{SITENAME}}.\nمی تونید وا انتخاو نوع پهرستنومه، نوم کاریاری(حساس وه کؤچکی و گپی حرفیا) و بلگه یا آلشت کرده(حساس و گپی و کؤچکی حرنیا) نمایشت نه دیر د ویرتر بکیت.\n\n{{SITENAME}}.",
        "logempty": "او چی ای که شما میهایت د پهرستنومه نیئش.",
        "trackingcategories-desc": "جادیارکنیا گنجایشت دسه",
        "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": "نها د گپ کلونکاری یه گل آرگومان چوئه(یه چی مینجا آکولادیا سه تایی، چی <code>{{{Foo}}}</code>) بلگه د <code>$wgMaxArticleSize</code> گپتر بوئه.",
+       "expensive-parserfunction-category-desc": "آلشگریا هزینه گر و گرو (چی<code>#ifexist</code>) هره یی هان د ای بلگه. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] نه سیل بکیت.",
        "broken-file-category-desc": "بلگه مینونه دار یه گل هوم پیوند جانیا خراوه(هوم پیوندی سی جاسازی کردن یه گل جانیا سی گاتی که او جانیا نئئش).",
+       "hidden-category-category-desc": "رده د مینونه بلگه ش د ور گرته <code><nowiki>__HIDDENCAT__</nowiki></code> ئه، که د وه شکل پیش فرض د نشو دئن جعوه هوم پیوندیا رده د بلگه نهاگری می که.",
        "trackingcategories-nodesc": "هیچ شرحی د دسرس نئ.",
        "trackingcategories-disabled": "دسه ناکشتگر بیه",
        "mailnologin": "هیپچ نشونی یی کل نبیه",
+       "mailnologintext": "سی کل کردن انجومانامه وه کاریاریا هنی واس [[Special:UserLogin|بیایت وامین سامونه]] و تیرنشون انجومانامه معتوری د [[Special:Preferences|ترجیحات]] خوتو داشتوئیت.",
        "emailuser": "ای كارور نه ايميل كو",
        "emailuser-title-target": "ایمیل سی ای {{جنس:$1|کارور}}",
        "emailuser-title-notarget": "ایمیل کارور",
        "emailpage": "ایمیل کارور",
+       "emailpagetext": "شما می تونیت  نوم بلگه هار نه سی کل کردن یه گل انجومانامه وه ای  {{GENDER:$1|کاریار}} وه کار بئیرت.\nتیرنشون انجومانامه یی که د [[Special:Preferences|ترجیحات کاریارتو]] دئیه ته د تیرنشون کلکار انجومانامه میا، سی یه که گیرنه بتونه جواوش بیه.",
        "defemailsubject": "{{نوم سیل جا}} ایمیل د کارور \"$1\"",
        "usermaildisabled": "ایمیل کارور د کار افتائه",
        "usermaildisabledtext": "شما نمی تونیت سی کاریار هنی د ای ویکی انجومانامه کل بکیت",
        "watchlistanontext": "لطفن بیایت وامین و ویرایشتیا نه د سیل برگتو سیل بکیت.",
        "watchnologin": "وارد نبیه",
        "addwatch": "اضاف کردن د سیل برگ",
+       "addedwatchtext": "بلگه «[[:$1]]» د [[Special:Watchlist|نومگه دماگردی]] شما اضاف بی.\nآلشتیا ای بلگه بلگه چک چنه ری وه ریش د نهاتر د ایچه نومگه کاری بوئه.",
        "addedwatchtext-short": "بلگه \"$1\" وه سیل برگ شما اضاف بیه.",
        "removewatch": "جا وه جا کردن د سیل برگ",
        "removedwatchtext": "بلگه\"[[:$1]]\" د [[Special:سیل برگ|سیل برگ خوتو]] جا وه جا بیه.",
        "enotif_lastvisited": "همه آلشتیا$1 د اوسه که شما د آخرین بار دیئته بوینیت.",
        "enotif_lastdiff": "سی دیئن ای آلشتیا $1 نه سیل بکیت.",
        "enotif_anon_editor": "کارو ناشناس$1",
+       "enotif_body": "$WATCHINGUSERNAME نازار،\n\n$PAGEINTRO $NEWPAGE\n\n\nتوضیح ویراشتکار: $PAGESUMMARY $PAGEMINOREDIT\n\nپیوند گرتن وا ویراشتکار:\nنومه: $PAGEEDITOR_EMAIL\nویکی: $PAGEEDITOR_WIKI\n\nتا گاتی که سر نه دئیته وه بلگه، د حال و بار پیش اومائن ائتمالی کنشتیاری بیشتر، تا گاتی که وا نوم کاریاریتو هایت د سامونه، گوته دیاری سی شما کل نبوئه.\nشما همچنی می تونید د بلگه دماگریا خوتو بیرقیا مربوط وه وارسکاری نه صفر بکیت همچنی می تونیت بیرقیا وارسکاری نه د نو نشوکاری بکیت.\n\nدوسیار شما، سامونه وارسکاری {{SITENAME}}\n\n--\nسی آلشت دئن میزونکاریا نومگه انجومانامه یا گوته دیاری روئیت وه {{canonicalurl:{{#special:EditWatchlist}}}}.\n\nسی آلشت دئن میزونکاری نومگه دماگریاتو روئیت وه {{canonicalurl:{{#special:EditWatchlist}}}}.\n\nسی پاکساکاری بلگه د نومگه دماگریاتو روئیت د $UNWATCHURL.\n\nبازحرد و هومیاری بیشتر:\n$HELPPAGE",
        "created": "دروس بیه",
        "changed": "آلشت بیه",
        "deletepage": "پاک کردن بلگه",
        "exbeforeblank": "مینونه حالی دمایی:\"$1\" بی",
        "delete-confirm": "پاکسا کردن\"$1\"",
        "delete-legend": "پاك كردن",
+       "historywarning": "<strong>هشدار:</strong> بلگه یی که شما میهایت پاکساش بکیت دش یه گل ویرگارچه واگرد $1 {{PLURAL:$1|وانئری|وانئریا}} ئه:",
+       "confirmdeletetext": "شما د حال و بار پاکسا کردن یه گل بلگه یا عسگ د رسینه جا واگرد همه ویرگارچه ونیت.\nلطف بکیت ای کنشتکاری نه پشت راسکاری بکیت و یه دل بوئیت که سرانجوم ای کار نه دونیت و ای کار نه مطابق وا [[{{MediaWiki:Policy-url}}|سیاستیا]] انجوم دئیته.",
        "actioncomplete": "عملكرد كامل بيه",
        "actionfailed": "عملكرد شكست حرده",
        "deletedtext": "«$1» پاکسا بیه.\nسی نهاتری پاکساگریا ایسنی وه $2 سرکشی بکیت.",
-       "dellogpage": "Ù\84اگ Ù¾Ø§Ù\83 Ù\83ردÙ\86",
+       "dellogpage": "پاکسا Ú©Ø±Ø¯Ù\86 Ù¾Ù\87رستÙ\86Ù\88Ù\85Ù\87",
        "dellogpagetext": "نومگه هاری یه گل نومگه د آخری چیا پاکسا بیه هئ.",
        "deletionlog": "پهرستنومه پاک بیئن",
        "reverted": "لرسه د نزیکترین وانئری",
        "deletereasonotherlist": "دلیل هنی",
        "deletereason-dropdown": "* دلیلیا پاکسا کردن رسم بیه\n** اسپم\n** خراوکاری\n** رعایت نبین کپی رایت\n** درحاست نیسنه\n** نهاورگشت شکست حرده",
        "delete-edit-reasonlist": "دلیلیا پاکسا کردنه نه ویرایشت بکید",
+       "delete-toobig": "ای بلگه ویرگارچه ویرایشتی گپی داره، که د ور گرته بیشتر د $1 {{PLURAL:$1|نسقه|نسقه}} ئه.\nسی یه که د اختلال ناحاستنی د {{SITENAME}} نهاگری با پاکسا کردن ای جوراین بلگه یا محدود بیه.",
+       "delete-warning-toobig": "ای بلگه ویرگارچه ویرایشتی گپی داره، که د ور گرته بیشتر د $1 {{PLURAL:$1|نسقه|نسقه}} ئه.\nپاکسا کردن وه ممکنه که کنشتکاری رسینه جا {{SITENAME}} نه مختل بکه؛\nای کار نه وا ائتیاط نهاداری بکیت.",
        "deleteprotected": "شما نمی تونیت ای بلگه نه پاکسا بکیت سی یه که وه پر و پیم بیه.",
+       "deleting-backlinks-warning": "''' هشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|بلگه یا هنی]] ین که وه بلگه یی که شما د حال و بار پاکسا کردن ونیت پیوند دارن یا د وه پرگنجایشت کاری بیینه.",
        "rollback": "چواشه کردن ویرایشتیا",
        "rollbacklink": "ورگشتن",
        "rollbacklinkcount": "چواشه کردن $1 {{PLURAL:$1|ویرایشت|ویرایشتیا}}",
        "rollbacklinkcount-morethan": "چواشه کردن بیشتر د$1 {{PLURAL:$1|ویرایشت|ویرایشتیا}}",
        "rollbackfailed": "چواشه کردن د خوئی انجوم نبی",
        "cantrollback": "نبوئه ویرایشت نه پاکساگری بکیت:\nآخری هومیار تئنا نیسنه ای گوتاره.",
+       "alreadyrolled": "وادیاری آخری ویرایشت [[:$1]] وه دس [[User:$2|$2]] ([[User talk:$2|چک چنه]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ممکن نئ؛\nدما د یه کسی تر گوتار نه ویرایشت یا وادیاری کرده.\n\nآخری ویرایشت وه دس [[User:$3|$3]] ([[User talk:$3|چک چنه]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) انجوم بیه.",
        "editcomment": "ویرایشت چکشه وه: \"''$1''\" بی.",
+       "revertpage": "ویرایشت [[Special:Contributions/$2|$2]] ([[User talk:$2|چک چنه]]) وه آخری آلشتی که [[User:$1|$1]] انجوم دئه بی وادیاری بی",
+       "revertpage-nouser": "ویرایشتیا انجوم بیه وه دس (نوم کاریاری پاک بیه) د آخری ویرایشت [[User:$1|$1]] وادیار بی.",
        "rollback-success": "ویرایشتیا $1 پاکساگری بی؛\nبلگه وه آخری ویرایشت $2 آلشت بیه.",
        "sessionfailure-title": "شکست حردن نشینگه",
-       "protectlogpage": "حفاظت کردن",
+       "sessionfailure": "چنی وه نظری میا که مشکلی ها د نشتجا کاریاری شما؛\nانجومگر حاستنی سی یه که د دزیه بیین دونسمنیاتو د نشسجا کاریاری نهاگری با انجومشیو بیه.\nلطف بکیت د ری دگمه ؤرئشتن بپورنیت و بلگه یی که رسسینه دش د نو واحونی بکیت، اوسه دنو تلاش بکیت.",
+       "protectlogpage": "پر و پیم کاری کردن",
+       "protectlogtext": "د هار یه گل نومگه د آلشتیا ریتراز پر و پیم کاری بلگه یا اومائه.\n[[Special:ProtectedPages|نومگه بلگه یا پر و پیم کار بیه]] نه سی دیئن نومگه پر و پیم کاری کارگرا بلگه یا سیل بکیت.",
        "protectedarticle": "حفاظت بيه [[$1]]",
        "modifiedarticleprotection": "ریتراز حفاظت د \"[[$1]]\" آلشت بیه",
        "unprotectedarticle": "بلگه«[[$1]]» نه د پر و پیم دراورد",
        "protect_expiry_invalid": "گات تموم بیین نامعتوره.",
        "protect_expiry_old": "گات تموم بیین مال دماتره.",
        "protect-unchain-permissions": "وا کردن گزینه یا هنی پر و پیم کردن",
+       "protect-text": "شما می تونیت ریتراز پر و پیم کاری بلگه '''$1''' نه سیل بکیت و از ایچه ونه آلشت بکیت.",
+       "protect-locked-blocked": "شما د گاتی که د دسرسیتو نهاگری بیه نمی تونیت ریتراز پر و پیم کاری بلگه یا نه آلشت بئیت.\nمیزونکاری ایسنی بلگه '''$1''' د ای قراره:",
+       "protect-locked-dblock": "سی یه که رسینه جا قلف بیه، امکان آلشت دئن ریتراز پر و پیم کاری بلگه یا د ایسه نئ.\nمیزونکاری ایسنی بلگه '''$1''' ها دی ای قرار:",
+       "protect-locked-access": "حساو کاریاری شما سی آلشتکاری ریتراز پر و پیم کاری صلاداری ناره.\nمیزونکاریا ایسنی بلگه '''$1''' ها دی ای قرار:",
+       "protect-cascadeon": "ای بلگه ایسنی پر و پیم کاری بیه، سی یه که د {{PLURAL:$1|بلگه|بلگه یا}} هاری که گزینه پر و پیم کاری تاف نمایی {{PLURAL:$1|وه|ونو}} کنشتکاره، اومائه.\nآلشتیایی که مال ریتراز ای بلگه ن ری پر و پیم کاری تاف نمایی کارگرایی نارن.",
        "protect-default": "همه کاروریا اجازه دارن",
        "protect-fallback": "فقط کاریاریایی که وه «$1» دسرسی دارن، صلادار ای کارن",
        "protect-level-autoconfirmed": "فقط کاریاریا که خودپشت راس بینه صلادارن",
        "protect-expiring-local": "گات تموم بیین $1",
        "protect-expiry-indefinite": "بی زمون",
        "protect-cascade": "پر و پیم بیین تافنمایی- همه بلگه یایی که هان د ای بلگه پر و پیم بوئن.",
+       "protect-cantedit": "شما نمی تونیت حال و بار پر و پیم کاری ای بلگه نه آلشت بئیت، سی یه که صلا ویرایشت دئن ونه ناریت.",
        "protect-othertime": "وخت هنی:",
        "protect-othertime-op": "گات هنی",
        "protect-existing-expiry": "گات تموم بیین ایسنی: $2، $3",
        "protect-existing-expiry-infinity": "گات تموم بیین: بی گاته",
        "protect-otherreason": "دلیل اضافی/هنی:",
        "protect-otherreason-op": "دلیل هنی",
+       "protect-dropdown": "*دلیلیا جاافتائه سی پر و پیم کاری\n** خراوکاری گپ کلون\n** هرزه نیسی گپ کلون\n** جئن ویرایشتی وه درد نحور\n** بلگه فره تماشاکار دار",
        "protect-edit-reasonlist": "دلیلا پر و پیم بیین ویرایشت",
        "protect-expiry-options": "1 ساعت:1 ساعت,1 روز:1 روز,1 هفته:1 هفته,2 هفته:2 هفته,1 ما:1 ما,3 ما:3 ما,6 ما:6 ما,1 سال:1 سال,بی حساو:بی حساو",
        "restriction-type": "دسرسی:",
        "restriction-level-all": "هر ریترازی",
        "undelete": "دیئن بلگه یا پاکسا بیه",
        "undeletepage": "دیئن و  ؤرگشتن بلگه یا پاکسا بیه",
+       "undeletepagetitle": "'''اوی چی که ها د نها د ور گرته نسقه یا پاکسا بیه [[:$1|$1]] ه'''.",
        "viewdeletedpage": "دیئن بلگه یا پاکسا بیه",
+       "undeletepagetext": "{{PLURAL:$1|بلگه های پاکسا بیه|بلگه یا هاری پاکسا بینه}} ولی ایسه د اماییه جا {{PLURAL:$1|هئ|هان}} و {{PLURAL:$1|می تونه د نو زنه با|می‌ تونن د نو زنه بان}}.\nای اماییه جا ممکنه هر چن گری تمیس بوئه.",
        "undelete-fieldset-title": "د نو زنه کردن وانئریا",
+       "undeleteextrahelp": "سی زنه کردن همه ویرگارچه یا بلگه، هم جعوه یا حالی نه ول بکیت و دگمه '''''{{int:undeletebtn}}''''' نه بپورنیت.\nسی انجوم دئن د نو زنه کردن انتخاوی، جعوه ویایی که هان د ارتواط وا نسقه یا خوشو سی د نو زنه کردن نشو دار بکیت و دگمه '''''{{int:undeletebtn}}''''' بپورنیت.",
        "undeleterevisions": "$1 نسقه مال دیاری{{PLURAL:$1|بیه|بینه}}",
+       "undeletehistory": "ار ای بلگه نه د نو زنه بکیت، همه نسقه یا وه د ویرگارچه ش د نو زنه بوئن.\nار بلگه تازه یی وا نوم هومبراوری د گات پاکسا بیین دروس بیه با، نسقه یا د نو زنه بیه د ویرگارچه ره وندیاری می کن.",
+       "undeleterevdel": "ناپاکسا کردن بلگه یا د حال و باری که باعث پاکسا بیین بهرجایی د آخری نسقه بلگه یا جانیا با امکانش نئ.\nد ای حال و بار شما واس تازه تری نسقه پاکساگری بینه ئم د نو زنه بکیت.",
+       "undeletehistorynoadmin": "ای بلگه پاکسا بیه.\nدلیل پاکسا بیین ای بلگه واگرد مشخصات کاریاریایی که دما د پاکسا کردن ای بلگه نه ویرایشت دئنه ها د چکسته هاری.\nنیسسه راستیکی ای ویرایشت پاکسا بیه و فقط ها د دسرس دیوونداریا.",
        "undelete-revision": "نسقه پاکسا بیه $1 (د ویرگار$4 ساعت $5) وه دس $3:",
+       "undeleterevision-missing": "وانئری یا گم بیه یا نامعتوره.\nشایت هوم پیوند شما دروس نبوئه یا یه که ای وانئری د اماییه جا پاکسا بیه یا بازجست بیه.",
        "undelete-nodiff": "وانئری دماتری پیدا نبیه.",
        "undeletebtn": "د نو زنه کردن",
        "undeletelink": "بوين/دوواره آماده با",
        "undeletedrevisions-files": "{{PLURAL:$1|1 وانئری|$1 وانئریا}} و{{PLURAL:$2|1 جانیا|$2 جانیا}} د نو زئنه بینه.",
        "undeletedfiles": "{{PLURAL:$1|1 جانیا|$1 جانیایا}} د نو زنه بیه",
        "cannotundelete": "زنه کردن انجوم نبی:$1",
+       "undeletedpage": "'''$1 د نو زنه بی'''\n\nسی دیئن پهرستنومه پاکساکاریا و د نو زنه کردنیا ایسنی روئیت د [[Special:Log/delete|پهرستنوم پاکساکاری]].",
        "undelete-header": "سی دیئن بلگه یا پاکسا بیه ایسنی [[Special:Log/delete|پهرستونمه پاکسا بیین]] نه سیل بکیت.",
        "undelete-search-title": "بلگه یا پاکسا بیه نه پی جوری کو",
        "undelete-search-box": "پی جوری بلگه یا پاکسا بیه",
        "undelete-search-prefix": "بلگه یایی که وا شرو بیه نشو بیه:",
        "undelete-search-submit": "پی جوری",
        "undelete-no-results": "هیچ بلگه یکی بیینی د مال دیارکن پاکسا بیه یا نئ.",
+       "undelete-filename-mismatch": "نبوئه نسقه $1 نه د نو زنه بکی: نوم جانیا واش یکی نئ.",
+       "undelete-bad-store-key": "نبوئه نسقه $1 نه د نو زنه بکی: جانیا وه دما د پاکسا کردن د بین رئته.",
        "undelete-cleanup-error": "خطا د پاکسا کردن ویرگارچه وه کار نگرته بیه د«$1».",
+       "undelete-missing-filearchive": "نبوئه ویرگارچه شماره $1 د نو زنه بکی سی یه که دونسمنیاش د رسینه جا نیئن.\nیا شایت د دماتر د نو زنه بینه.",
        "undelete-error": "خطا بلگه ای که نبوئه پاکساش بکی",
        "undelete-error-short": "خطا پاک نبیئن جانیا:$1",
        "undelete-error-long": "د گات زنه کردن جانیا یه گل خطا پیش اوما:\n\n\n$1",
+       "undelete-show-file-confirm": "آیا یه دل بئیته که میهایت یه گل نسقه پاکسا بیه د جانیا \"<nowiki>$1</nowiki>\" که ها د ویرگار $2 ساعت $3 نه سیل بکیت؟",
        "undelete-show-file-submit": "هری",
        "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
        "namespace": "نوم جا:",
        "invert": "انتخاو برعسك بوئه",
+       "tooltip-invert": "د ری ای جعوه بپورنیت و آلشتیایی نه که د مینجا نوم ورگه انتخاو بیه انجوم بینه قام بکیت(و ار نوم ورگه شریکی وارسی بیه)",
+       "tooltip-whatlinkshere-invert": "ای جعون نه سی نهو کردن هوم پیوند بلگه یایی که نوم جاشو انتخاو بیه، انتخاو بکیت.",
        "namespace_association": "نوم جایا یکاگرته",
+       "tooltip-namespace_association": "ای جعوه نه وارسی بکیت ای جعوه د ور گرته چک چنه یا داسون نوم ورگه شریکی و نوم ورگه انتخاو بیه ئه",
        "blanknamespace": "اصلی",
-       "contributions": "{{جنس:$1|کارور}} هومیاریا",
+       "contributions": "{{جنس:$1|کاریار}} هومیاریا",
        "contributions-title": "هومياري كارور سي $1",
-       "mycontris": "هومياری",
+       "mycontris": "هومياریا",
        "contribsub2": "سي {{جنسيت:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "کاریار \"$1\" ثوت نام نکرده.",
        "nocontribs": "هیچ آلشتی وا ای مشقصات دیاری نکرد.",
        "sp-contributions-logs": "نیسنن رخ ونیا",
        "sp-contributions-talk": "چك چنه",
        "sp-contributions-userrights": "دیوونداری حقوق کاریار",
+       "sp-contributions-blocked-notice": "د دسرسی ای کاریا د ایسنی نهاگری بیه.\nآخری برشت د پهرستنومه نهاگری ها د سرچشمه هاری:",
+       "sp-contributions-blocked-notice-anon": "ای آی پی ایسنی دسرسی ناره.\nآخری برشت د پهرستنومه ها د سرچشمه هاری:",
        "sp-contributions-search": "سی هومیاریا پی جور با",
        "sp-contributions-username": "نوم نشون آی پی يا نوم كاروری:",
        "sp-contributions-toponly": "فقط ویرایشتیایی که جزئه آخرین دوواره دیئن هئین نشو بیه",
        "sp-contributions-newonly": "فقط ویرایشتیایی که مال دروس کردن بلگه هیئن نشو بیه.",
        "sp-contributions-submit": "پی جوری",
-       "whatlinkshere": "كؤم ديس ونيا هان ايچه",
+       "whatlinkshere": "كؤم هوم پیوندیا هان ايچه",
        "whatlinkshere-title": "بلگه ای که د $1 هوم پیوند بیه",
        "whatlinkshere-page": "بلگه",
        "linkshere": "بلگیا نهایی د '''[[:$1]]''' هوم پیوند بیه",
        "nolinkshere-ns": "هیچ بلگه ای د نومجا انتخاو بیه وه'''[[:$1]]''' هوم پیوند ناره.",
        "isredirect": "بلگه دوباره ورگشتن",
        "istemplate": "نشونی دئن",
-       "isimage": "فایل هوم پیوند",
+       "isimage": "جانیا هوم پیوند",
        "whatlinkshere-prev": "{{جمی:$1|دمایی|دمایی $1}}",
        "whatlinkshere-next": "{{جمی:$1|نهایی|نهایی $1}}",
        "whatlinkshere-links": "هوم پیوندیا",
-       "whatlinkshere-hideredirs": "$1 دوواره د نشونی ورگشتن",
-       "whatlinkshere-hidetrans": "$ا چن نتیجه ای",
+       "whatlinkshere-hideredirs": "$1 واگردونیا",
+       "whatlinkshere-hidetrans": "$ا چن نتیجه یی",
        "whatlinkshere-hidelinks": "هوم پیوندیا $1",
        "whatlinkshere-hideimages": "فایل هوم پیوندیا $1",
        "whatlinkshere-filters": "فيلتريا",
        "unblock": "کاریار نهاگری نبیه",
        "blockip": "نهاگری{{GENDER:$1|کاریار}}",
        "blockip-legend": "نهاگری کاریار",
+       "blockiptext": "نومگه بلگه هاری نه سی نهاگری د دسرسی ویرایشت یه گل تیرنشون آی پی وا نوم کاریاری مشخص وه کار بئیریت.\nای کار فقط فقط واس سی نهاگری د خراوکاری و د پایه [[{{MediaWiki:Policy-url}}|سیاست نهاگری]] انجوم با.\nدلیل دیاری نه د هار بوئیت (مثلند وا گوتن بلگه یایی که دشو خراوکاری بیه).",
        "ipaddressorusername": "نوم نشون آی پی يا نوم كاروری:",
        "ipbexpiry": "تموم بين:",
        "ipbreason": "دليل:",
+       "ipbreason-dropdown": "*دلیلیا جاافتائه سی نهاگری\n**دئن دونسمنیا غلط\n**پاکسا کردن دونسمنیا خو د بلگه یا\n**هرزه نیسی د طریق نیسنن هوم پیوند تکراری د دیارگه یا\n**نیسنن چرند و چار یا نیسسه یا بی مئنی د بلگه یا\n**سهم ونن د کاریاریا هنی\n**وه کار گرتن چن گل حساو کاریاری\n**نوم کاریاری گن",
        "ipb-hardblock": "پیشگری د ویرایشت کردن کاریاریی که د طریق ای تیرنشون آی پی وامین اومانه.",
        "ipbcreateaccount": "نهاگری دروس کردن حساو",
        "ipbemailban": "نهاگرتن کاریار د کل کردن انجومانامه",
        "blockipsuccesssub": "قلف کردن د خوئی انجوم بی",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] بسته بیه.<br />\nسی وارسی بسته بیه یا [[Special:BlockList|نوم گه بسته بیه یا ]] نه سیل بکیت.",
        "ipb-blockingself": "شما د حال نهاگری خوتونیت! آیا دلراس هیئت که میهایت چنی کاری انجوم بیتو؟",
+       "ipb-confirmhideuser": "شما د حال و بار بستن یه گل کاریاریت که سی وه «نهوسازی کاریار» کنشتیار بیه. ای کار نوم کاریار نه د همه نومگه یا و سیائه یا نهو می که، آیا یه دلیت که میهایت ای کار نه انجوم بئیت؟",
+       "ipb-confirmaction": "ار د راستکی یه دل بئیته که میهایت ونه انجوم بئیت، لطف بکیت زمینه \"{{int:ipb-confirm}}\" ونه د هار وارسی بکیت.",
        "ipb-edit-dropdown": "ویرایشت دلیلیا نهاگرتن",
        "ipb-unblock-addr": "وا کردن قلف $1",
        "ipb-unblock": "واز کردن نوم کاریاری یا تیرنشون آی پی",
        "ipb-blocklist": "دیئن نهاگرتن یا ایسنی",
        "ipb-blocklist-contribs": "هومیاریا $1",
        "unblockip": "کارور منع نبیه",
+       "unblockiptext": "سی ؤرئشت دئن دسرسی نیسسن د یه گل تیرنشون آی پی یا نوم کاریاری نهاگری بیه نوم بلگه هاری نه وه کار بئیریت.",
        "ipusubmit": "ای قلف نه ؤردار",
        "unblocked": "دسرسی [[User:$1|$1]] دوواره برقرار بیه.",
        "unblocked-range": "$1 وا بیه.",
        "blocklist-nousertalk": "نبوئه بلگه چک چنه خوتونه ویرایشت بکید",
        "ipblocklist-empty": "جاگه نوم گه حالیه",
        "ipblocklist-no-results": "دسرسی نوم کاریاری یا تیرنشون آی پی حاسته بیه نهاگری نبیه.",
-       "blocklink": "بسته بوئه",
+       "blocklink": "نهاگری بوئه",
        "unblocklink": "بی قطی",
        "change-blocklink": "اجازه نديئن سی  آلشت",
-       "contribslink": "هومكاری",
+       "contribslink": "هومیاریا",
        "emaillink": "انجومانامه نه کل کو",
+       "autoblocker": "وه خود انجومن بسه بی سی یه که آی پی شما د ایسنی وه دس کاریار «[[User:$1|$1]]» وه کار گرته بیه.\nدلیل نهاگری $1 ینه \"$2\"",
        "blocklogpage": "قلف",
+       "blocklog-showlog": "تیرنشون ای آی پی دماتر نهاگیری بیه.\nنهاگری ای پهرستنومه وا سرچشمه هاری دروس بیه:",
+       "blocklog-showsuppresslog": "تیرنشون ای آی پی دماتر نهاگیری بیه.\nنهاگری ای پهرستنومه وا سرچشمه هاری دروس بیه:",
        "blocklogentry": " [[$1]] وا یه گل وخت تموم بیئن $2 و $3  قلف بیه",
        "reblock-logentry": "میزوکاری سی نهاگری[[$1]] آلشت بیه سی آخر نهاگری د $2 $3",
+       "blocklogtext": "ای پهرستنومه سی نهاگری یا واز کردن دسرسی کاریاریائه.\nتیرنشونیا آی پی که خود انجومن نهاگری بینه د ایسنی نومگه کاری نبینه.\nسی نومگه نهاگریا و بسه بینیا د ایسنی روئیت د [[Special:BlockList|نومگه نهاگری بیه یا]].",
        "unblocklogentry": "وا کردن قلف $1",
        "block-log-flags-anononly": "فقط کاریاریایی که نادیارن",
        "block-log-flags-nocreate": "حساو راس کردن عاجز بیه.",
        "range_block_disabled": "درس کردن بسن یه گل پوشگر وه دس دیوونداریا ناکنشتگر بیه.",
        "ipb_expiry_invalid": "گات تموم بیین نامعتوره.",
        "ipb_expiry_temp": "نهاگری نوم کاریاریا قام بیه واس همیشه یی با.",
+       "ipb_hide_invalid": "نبوئه ای حساو نه پاکساکاری کرد؛ ای حساو بیشتر د {{PLURAL:$1|یه گل ویرایشت|$1 ویرایشتیا}} نه د خوش داره.",
        "ipb_already_blocked": "\"$1\" ایسه نهاگری بیه.",
        "ipb-needreblock": "$1 د دماتر نهاگری بیه. آیا میهایت میزوکاری ونه آلشت بیتو؟",
        "ipb-otherblocks-header": "هنی{{PLURAL:$1|نهاگرتن|نهاگرتنیا}}",
+       "unblock-hideuser": "‫سی یه که حساو کاریاری ای کاریار نهو بیه شما نمی تونیت ونه واز بکیت.‬",
+       "ipb_cant_unblock": "خطا:نهاگری د نوم دیارکن $1 دیار نئ.شایت وه د ایسنی نهاگریش د بین رئته.",
+       "ipb_blocked_as_range": "خطا: تیرنشون آی‌ پی $1 سر راست نهاگری نبیه و نبوئه وازش بکیت.\nای تیرنشون واگرد پوشگر $ نهاگری بیه وا بیینی یه.",
        "ip_range_invalid": "پوشگر نامعتور آی پی",
        "ip_range_toolarge": "نهاگری پوشینه یا گپتر $1/ مجاز نئ.",
        "proxyblocker": "قلف کننه پروکسی",
+       "proxyblockreason": "تیرنشون آی پی شما نهاگری بیه سی یه مال یه گل پروکسی آزاده.\nلطف بکیت وا انجومکار اینترنتی خوتو یا حامینکار کسمی خوتو پیوند بگریت و ونونه د مشگل امنتی گن خوتو وارسیار بکیت.",
        "sorbs": "دی ان اس بی ال",
+       "sorbsreason": "تیرنشون آی پی شما وه دس DNSBL  وه کار گرته وه دس {{SITENAME}} چی یه گل پروکسی آزاد گزارشت بیه.",
+       "sorbs_create_account_reason": "تیرنشون آی پی شما وه دس DNSBL  وه کار گرته وه دس {{SITENAME}} چی یه گل پروکسی آزاد گزارشت بیه.\nشما نتونیت یه گل حساو راس بکیت.",
+       "xffblockreason": "تیرنشون آی پی ها د X-Forwarded-For header و پروکسی شما یا رسینه گایی که شما ونه وه کار مئیریت نهاگری بیه. دلیل نهاگری وه: $1",
+       "cant-see-hidden-user": "کاریاری که شما میهایت دش نهاگری بکیت د دماتر نهاگری بیه و نهو بیه.\nسی یه که شما وه نهوکاری کاریار دسرسی ناریت نمی تونیت نهاگری کاریار نه دسکاری بکیت.",
+       "ipbblocked": "شما نمی تونیت د دسرسی کاریاریا هنی نهاگری بکیت یا ونه واز بکتی سی یه د دسرسی خوتو نهاگری بیه.",
        "ipbnounblockself": "شما صلادار وارکدن دسرسی خوتو نییت.",
        "lockdb": "قلف کردن رسینه گا",
        "unlockdb": "رسینه گا قلف نبیه",
        "thumbnail-temp-create": "نبوئه جانیا موقت بن کلیکی نه راست بکیت",
        "thumbnail-dest-create": "نبوئه بن کلیکی نه د مقصدش اماییه بکیت",
        "thumbnail_invalid_params": "بن کلیکی وا پارامتریا نامعتور",
+       "thumbnail_toobigimagearea": "جانیا وا بعدیا گپتر د $1",
        "thumbnail_dest_directory": "نبوئه دایرکتوری مقصد نه درست بکیت",
        "thumbnail_image-type": "نوع عسگ حامیین داری نبوئه",
        "thumbnail_image-missing": "وه ویر و باور میا که جانیا گم بیه:$1",
        "import-rootpage-nosubpage": "نومجا \"$1\" بلگه پایه صلا زیر بلگه نه نمی یه.",
        "importlogpage": "پهرستنومه دئن",
        "importlogpagetext": "وامین اوردن بلگه یا وا ویرگارچه ویرایشت ونو د ویکی یا هنی",
-       "import-logentry-upload": "[[$1]] نه د طریق سوارکرد جانیا وامین اورد",
        "import-logentry-upload-detail": "$1 {{جمی:$1|وانئری|وانئریا}} وامین اومانه",
-       "import-logentry-interwiki": "$1 نه تراویکی کرد",
        "import-logentry-interwiki-detail": "$1 {{جمی:$1|وانئری|وانئریا}} د $2 وامین اومائنه",
        "javascripttest": "ازمایشت کردن جاوا اسکریپت",
        "javascripttest-pagetext-noframework": "ای بلگه سی انجوم دئن ازمایشتیا جاوا اسکریپت اماییه کاری بیه.",
        "javascripttest-pagetext-unknownframework": "چوئه کار نادیار ازمایشت \"$1\"",
+       "javascripttest-pagetext-unknownaction": "کنشتکاری نادیار \"$1\".",
        "javascripttest-pagetext-frameworks": "لطفن یه گل د چوئه یا ازمایشت هاری نه انتخاو بکیت :$1",
        "javascripttest-pagetext-skins": "یه گل پوسه نه سی انجوم دئن ازمایشتا انتخاو بکیت:",
        "javascripttest-qunit-intro": "[$1 مستندیا ازمایشت] نه د mediawiki.org سیل بکیت.",
-       "tooltip-pt-userpage": "بلگه كارورتو",
+       "tooltip-pt-userpage": "بلگه کاریاریتو",
        "tooltip-pt-anonuserpage": "بلگه کاریاری تیرنشون آی پی ای که دش ویرایشت می کید",
        "tooltip-pt-mytalk": "بلگه قسه كردن شما",
        "tooltip-pt-anontalk": "چک چنه دباره ویرایشتیا ای تیرنشون آی پی",
        "tooltip-pt-preferences": "اولويتيا شما",
        "tooltip-pt-watchlist": "نوم نوشت د بلگه يايی كه شما آلشتاشونه پيگئری  ميكيد",
        "tooltip-pt-mycontris": "يه گل د هومياريا شما",
-       "tooltip-pt-login": "توصيه بو كه وارد بوئين، اما مجبوری ني",
-       "tooltip-pt-logout": "د سيستم دراومائن",
-       "tooltip-ca-talk": "قسه دباره محتوا بلگه",
-       "tooltip-ca-edit": "شما تونيد ای  بلگه نه ويرايشت بكيد. لطف بكيد د دگمه پيش ديئن پيش د ذخيره كردن استفاده بكيد",
-       "tooltip-ca-addsection": "بشخ تازه نه شرو كو",
-       "tooltip-ca-viewsource": "ای بلگه حفاظت بيه.\nشما تونيت سرچمه ش بئوينيت",
+       "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-protect": "ای بلگه نه حفاظت بكيد",
        "tooltip-ca-unprotect": "پر و پیم گیری د ای بلگه نه آلشت بکیت",
        "tooltip-ca-unwatch": "ورداشتن ای بلگه وه نوم نوشت پیگئریاتو",
        "tooltip-search": "پی جوری {{SITENAME}}",
        "tooltip-search-go": "رؤ د بلگه ای که یه نوم راستکی ها مینش الوت ار دش بوئه",
-       "tooltip-search-fulltext": "بلگيانه سی چنو متنی بگرد",
+       "tooltip-search-fulltext": "بلگيانه سی چنس نیسسه یی پی جوری کو",
        "tooltip-p-logo": "سرآسونه نه بونيت",
        "tooltip-n-mainpage": "سرآسونه نه بونيت",
-       "tooltip-n-mainpage-description": "دÙ\8aئÙ\86 Ø³Ø±Ø¢Ø³Ù\88Ù\86Ù\87",
-       "tooltip-n-portal": "دبارÙ\87 Ù¾Ø±Ù\88جÙ\87Ø\8cاÙ\8aسا ØªØ±Ù\8aÙ\86(تÙ\88Ù\86Ù\8aت) Ú\86Û\8c Ø¨Ù\83Ù\8aدØ\8c Ù\83جÙ\87 Ú\86Ù\8aاÙ\86Ù\87 Ø¨Ø¬Ù\88رÙ\8aÙ\86",
+       "tooltip-n-mainpage-description": "سرآسÙ\88Ù\86Ù\87 Ù\86Ù\87 Ø¨Ù\88Ù\86Ù\8aت",
+       "tooltip-n-portal": "دبارÙ\87 Ù¾Ø±Ù\88جÙ\87Ø\8cØ´Ù\85ا Ù\85Û\8c ØªÙ\88Ù\86Û\8cت(تÙ\88Ù\86Ù\8aت) Ú\86Û\8c Ø¨Ú©Û\8cتØ\8c Ø¯ Ú©Ø¬Ø§ Ø§Û\8c Ú\86Û\8cاÙ\86Ù\87 Ø¨Ø¬Ù\88رÛ\8cت",
        "tooltip-n-currentevents": "ساوند دونسمنديايی كه هان د پيشومدل تازه باو پيدا كو",
-       "tooltip-n-recentchanges": "يه نوم جاوند سی تغيرا تازه مئن ويكی",
+       "tooltip-n-recentchanges": "یه گل نومگه سی آلشتیا ایسنی د ویکی",
        "tooltip-n-randompage": "سوار كرد بلگه بختكی",
-       "tooltip-n-help": "جاگه سی فهمسن",
-       "tooltip-t-whatlinkshere": "سيائه تمؤم بلگيایی كه ايچه چسب ون دارن",
-       "tooltip-t-recentchangeslinked": "تغÙ\8aرÙ\8aا ØªØ§Ø²Ù\87 Ø¨Ø§Ù\88 Ù\85ئÙ\86 Ø¨Ù\84Ú¯Ù\8aاÙ\8aÙ\8a Ù\83Ù\87 Ø¯ Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ú\86سب وند بيئنه",
+       "tooltip-n-help": "یه گل جاگه سی فهمسن",
+       "tooltip-t-whatlinkshere": "یه گل نومگه د همه بلگه یایی كه ايچه هوم پیوند دارن",
+       "tooltip-t-recentchangeslinked": "Ø¢Ù\84شتÛ\8cا ØªØ§Ø²Ù\87 Ø¨Ø§Ù\88 Ù\85ئÙ\86 Ø¨Ù\84Ú¯Ù\8aاÙ\8aÙ\8a Ù\83Ù\87 Ø¯ Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\87Ù\88Ù\85 Ù¾Û\8cوند بيئنه",
        "tooltip-feed-rss": "هوال حون آر اس اس سی ای بلگه",
-       "tooltip-feed-atom": "تغذÙ\8aÙ\87 Ù\83ؤÚ\86Ù\83 سی ای بلگه",
+       "tooltip-feed-atom": "Ø­Ù\88اÙ\84 Ù\87Ù\88Ù\86 Ø§ØªÙ\85Û\8c سی ای بلگه",
        "tooltip-t-contributions": "یه نوم گه د هومیاریا ای کارور",
        "tooltip-t-emailuser": "سی ای كارور ايميل كل كو",
        "tooltip-t-info": "دونسمنیا بیشتر دباره ای بلگه",
-       "tooltip-t-upload": "بÙ\84Ù\85 Ú¯Ù\8aر Ù\83ردÙ\86 Ù\81اÙ\8aÙ\84ا",
-       "tooltip-t-specialpages": "سيائه تمؤم بلگيا خاص",
-       "tooltip-t-print": "نسقه چاپ بيئنی سی ای بلگه",
-       "tooltip-t-permalink": "چسب ون هميشئی د دوواره بينی ای بلگه",
-       "tooltip-ca-nstab-main": "ديئن محتوا بلگه",
-       "tooltip-ca-nstab-user": "ديئن بلگه كارور",
+       "tooltip-t-upload": "سÙ\88ارکردÙ\86 Ø¬Ø§Ù\86Û\8cاÛ\8cا",
+       "tooltip-t-specialpages": "نومگه همه بلگه یا ویجه",
+       "tooltip-t-print": "نسقه پلا بيئنی سی ای بلگه",
+       "tooltip-t-permalink": "هوم پیوند همیشه یی سی دوواره دیئن ای بلگه",
+       "tooltip-ca-nstab-main": "ديئن مینونه بلگه",
+       "tooltip-ca-nstab-user": "ديئن بلگه کاریار",
        "tooltip-ca-nstab-media": "دیئن بلگه وارسگر",
        "tooltip-ca-nstab-special": "اي بلگه ويجه يه، شما نتونيت خود اي بلگه نه ويرايشت بكيد",
        "tooltip-ca-nstab-project": "ديئن بلگه پروجه",
-       "tooltip-ca-nstab-image": "ديئن بلگه فايل",
+       "tooltip-ca-nstab-image": "ديئن بلگه جانیا",
        "tooltip-ca-nstab-mediawiki": "دیئن پیغوم سامونه",
        "tooltip-ca-nstab-template": "ديئن قالو",
        "tooltip-ca-nstab-help": "ديئن بلگه هومیاری",
        "tooltip-ca-nstab-category": "ديئن بلگه دسه بنی",
        "tooltip-minoredit": "یه نه د عنوان حیرده ویرایشت ثوت کو",
        "tooltip-save": "آلشتياتونه اماییه بكيد",
-       "tooltip-preview": "پیش سیل آلشتیاتو،لطفن پیش د ذخیره دش استفاده بکیتو",
+       "tooltip-preview": "پیش سیل آلشتیاتو،لطف بکیت وه نونه دما د اماییه کاریشو وه کار بیئریت!",
        "tooltip-diff": "آلشتیا نه که شما د ای متن راس کردیته نشو بیئه",
        "tooltip-compareselectedversions": "فرخیا مینجا دو تا د دو بار دیئن ای بلگه نه بوینیت",
        "tooltip-watch": "ای بلگه نه د سیل برگتو اضاف بکید",
        "file-info-size": "$1 × $2 پیکسل, انازه فایل: $3, MIME نوع: $4",
        "file-info-size-pages": "$1 × $2 pixels, انازه جانیا: $3, MIME type: $4, $5 {{PLURAL:$5|بلگه|بلگه یا}}",
        "file-nohires": "عسك ون بالاتري دش ني",
-       "svg-long-desc": "اس وی جی فايل.نومنا $1 $2 پيكسل",
+       "svg-long-desc": "اس وی جی جانیا.نومنا $1 $2 پيكسل",
        "svg-long-desc-animated": "جانیا جمشدار اس وی جی .نومنا $1 × $2 پيكسل،انازه جانیا:$3",
        "svg-long-error": "جانیا اس وی جی نامعتور:$1",
-       "show-big-image": "فایل اصلی",
+       "show-big-image": "جانیا اصلی",
        "show-big-image-preview": "انازه ای پیش سیل:$1.",
        "show-big-image-other": "هنی{{PLURAL:$2|گپ نما کردن|گپ نما کردنیا}}: $1.",
-       "show-big-image-size": "$1 × $2 pixels",
+       "show-big-image-size": "$1 × $2 پیکسل",
        "file-info-gif-looped": "حلقه دار",
        "file-info-gif-frames": "$1 {{PLURAL:$1|فریم|فریمیا}}",
        "file-info-png-looped": "حلقه دار",
        "metadata-help": "ای فایل شومل دونسمنیا هنی یه.شایت د دیربین رقم ون یا اسکنری که سی راس کردنشو استفاده بیه،وه ایچه اضاف بیه",
        "metadata-expand": "نشو دئن جزییات دمادیسگری",
        "metadata-collapse": "قام کردن جزییات دمادیسگری",
-       "metadata-fields": "رشته یا گپ دونسمنیا که د ای پیغوم نوم ون بینه شومل بلگه عسگ ن که وختی که جدول گپ دونسمنیا وا بوئه نشون دئیه بوئن.\nچی یا هنی سی یه که پیش فرضن قام بوئن.\n*راست کو\n*مدل\n*دم وخت اصل\n*وخت آشگار\n*اف ان شماره\n*ایزو نرخ من سرعت\n*فوکالنس\n*هنرمن\n*کپی رایت\n*حالت جی پی اس \n*جی پی اس گپ حالت\n*جی پی اس همه حالت",
+       "metadata-fields": "رشنه یا یا گپ دونسمنیا که د ای پیغوم نومگه کاری بینه د ور گرته بلگه عسگ ن که گات وختی که جدول گپ دونسمنیا واز بوئه نشون دئیه بوئن.\nچی یا هنی سی یه که پیش فرضن قام بوئن.\n*راست کو\n*مدل\n*دم وخت اصل\n*وخت آشگار\n*اف ان شماره\n*ایزو نرخ من سرعت\n*فوکالنس\n*هنرمن\n*کپی رایت\n*حالت جی پی اس \n*جی پی اس گپ حالت\n*جی پی اس همه حالت",
        "metadata-langitem": "<strong>$2:</strong> $1",
        "metadata-langitem-default": "$1",
        "exif-imagewidth": "پئنا",
        "exif-referenceblackwhite": "جفت انازه سرچشمه سیا و اسبئ",
        "exif-datetime": "آلشت دئن وخت و دمون جانیا",
        "exif-imagedescription": "نوم عسگ",
-       "exif-make": "سازنه دیربین",
+       "exif-make": "سازیار دیربین",
        "exif-model": "مدل دیربین",
        "exif-software": "نرم افزار به کار گرتنی",
        "exif-artist": "نیسنه",
        "exif-copyright": "حق تکثیر دار",
        "exif-exifversion": "نسقه Exif",
        "exif-flashpixversion": "نسقه حامین داری Flashpix",
-       "exif-colorspace": "رئن جا",
+       "exif-colorspace": "رئن ورگه",
        "exif-componentsconfiguration": "مئنی هر اندوم",
        "exif-compressedbitsperpixel": "شکل جمع و جیل کردن عسگ",
        "exif-pixelydimension": "پئنا عسگ",
        "exif-sensingmethod": "روشت حسگری کردن",
        "exif-filesource": "سرچشمه جانیا",
        "exif-scenetype": "نوع حسگری کردن",
+       "exif-customrendered": "پردازشتکاری جاافتائه عسگ",
        "exif-exposuremode": "شکل نیر دئن",
        "exif-whitebalance": "موازنه نیر اسبئ",
        "exif-digitalzoomratio": "نسوت گپ کردن دیجیتالی",
        "exif-headline": "سربلگه",
        "exif-credit": "صاحاو/اماییه کار",
        "exif-source": "سرچشمه",
+       "exif-editstatus": "حال و بار ویرایشتکاری عسگ",
        "exif-urgency": "فوریت",
        "exif-fixtureidentifier": "نوم ثاوت",
+       "exif-locationdest": "جاگه کشیاری بیه",
+       "exif-locationdestcode": "رازینه جاگه کشیاری بیه",
+       "exif-objectcycle": "گات روزی که ای وارسگر سی وه اومائه د ویر",
        "exif-contact": "دونسمنیا پیوند گرتن",
        "exif-writer": "نیسنه",
        "exif-languagecode": "زون",
        "exif-iimversion": "نسقه آی آی ام",
        "exif-iimcategory": "دسه",
+       "exif-iimsupplementalcategory": "دسه یا اضافی",
        "exif-datetimeexpires": "وا نها دش استفاده نبوئه",
        "exif-datetimereleased": "ول بیه د",
+       "exif-originaltransmissionref": "رازینه جاگه جا وه جا بیین اصلی",
        "exif-identifier": "نوم دیارکن",
        "exif-lens": "لنز وه کار رتنی",
        "exif-serialnumber": "نوم شماره دیربین",
        "exif-cameraownername": "مالک دیربین",
        "exif-label": "ری دیار",
+       "exif-datetimemetadata": "گات متا کلون دونسمنیا آخر بار آلشت کاری بیه.",
        "exif-nickname": "نوم نامرتوط سی عسگ",
        "exif-rating": "امتیاز(د 5)",
+       "exif-rightscertificate": "تصیق حقوق دیوونداری",
        "exif-copyrighted": "حال و بال کپی رایت",
        "exif-copyrightowner": "مالک کپی رایت",
        "exif-usageterms": "کلیمه یا وه کار گرتن",
+       "exif-webstatement": "گوته یاری ری خط کپی رایت",
+       "exif-originaldocumentid": "نوم دیارکن یکونه سند اصلی",
+       "exif-licenseurl": "یو آر ال سی لیسانس کپی رایت",
+       "exif-morepermissionsurl": "دونسمنیا جانشین لیسانسکاری",
+       "exif-attributionurl": "د گات دواره وه کار گرتن، لطف بکیت د هوم پیوندش بکیت",
+       "exif-preferredattributionname": "د گات دواره وه کار گرتن، لطف بکیت وا اعتوارش بکیت",
        "exif-pngfilecomment": "ویر و باور فایل جی پی ان جی",
        "exif-disclaimer": "کذو نومه",
+       "exif-contentwarning": "هشدار مینونه",
        "exif-giffilecomment": "ویر و باور فایل جی آی اف",
        "exif-intellectualgenre": "نوع مورد",
+       "exif-subjectnewscode": "رازینه داسون",
+       "exif-scenecode": "IPTC رازینه صحنه",
+       "exif-event": "رخ ون کشیاری بیه",
+       "exif-organisationinimage": "سامونجا کشیاری بیه",
+       "exif-personinimage": "آئم کشیاری بیه",
+       "exif-originalimageheight": "بلنگی عسگ دما برشت دئن",
+       "exif-originalimagewidth": "پئنا عسگ دما برشت دئن",
        "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+       "exif-compression-1": "جم نبیه",
+       "exif-compression-2": "رازینه کاری سی‌ سی‌ آی‌ تی‌ تی دسه ۳ تک ورگه جایی روشت هافمن آلشتکاری بیه ری درازا",
+       "exif-compression-3": "رازینه کاری فاکس سی سی آی تی تی گرو3",
+       "exif-compression-4": "رازینه کاری فاکس سی سی آی تی تی گرو ۴",
        "exif-copyrighted-true": "کپی رایت بیه",
        "exif-copyrighted-false": "حال و بال کپی رایت میزوکاری نبیه",
        "exif-unknowndate": "گات نادیار",
        "exif-orientation-1": "عادی",
+       "exif-orientation-2": "پشت ری بیه افقی",
        "exif-orientation-3": "180 گرینج لر دئه",
+       "exif-orientation-4": "پشت ری بیه عمودی",
+       "exif-orientation-5": "۹۰° خلاف گردشت ساعت در حرده و عمودی پشت و ری بیه",
+       "exif-orientation-6": "چرخشت 90 گرینجی",
+       "exif-orientation-7": "۹۰° خلاف گردشت ساعت در حرده و عمودی پشت و ری بیه",
+       "exif-orientation-8": "چرخشت لا ساعتی 90 گرینجی",
+       "exif-planarconfiguration-1": "قالو قووین",
+       "exif-planarconfiguration-2": "قالو دولایی",
+       "exif-colorspace-65535": "میزونکاری نبیه",
        "exif-componentsconfiguration-0": "نی یش",
+       "exif-exposureprogram-0": "تعریف نبیه",
        "exif-exposureprogram-1": "دسی",
        "exif-exposureprogram-2": "برنامه عادی",
+       "exif-exposureprogram-3": "زیتری دیافراگم",
+       "exif-exposureprogram-4": "زیتری شاتر",
+       "exif-exposureprogram-5": "برنامه سازدیاری",
+       "exif-exposureprogram-6": "برنامه پر جمشت(وا حاست وه لا سرعت بیشتر شاتر)",
+       "exif-exposureprogram-7": "حال و بار کشیاری(سی عسگیا نزیک که نهازمینه شو ها وه در د فاصله کانونی)",
+       "exif-exposureprogram-8": "حال و بار منظره(سی عسگیا منظره که زل زئن واس ری نهازمینه با)",
        "exif-subjectdistance-value": "$1 متر",
        "exif-meteringmode-0": "نادیار",
        "exif-meteringmode-1": "میانگین",
+       "exif-meteringmode-2": "میانگین وا مینجاون سنگین",
        "exif-meteringmode-3": "نقطه جا",
        "exif-meteringmode-4": "چن جاگه ای",
        "exif-meteringmode-5": "الگو",
        "exif-lightsource-9": "هوا خو",
        "exif-lightsource-10": "هوا اوری",
        "exif-lightsource-11": "سایه",
+       "exif-lightsource-12": "مهتاوی د روز (D 5700 – 7100K)",
+       "exif-lightsource-13": "مهتاوی اسبئ روز (N 4600 – 5400K)",
+       "exif-lightsource-14": "مهتاوی اسبئ حنک (W 3900 – 4500K)",
+       "exif-lightsource-15": "مهتاوی اسبی(WW 3200 – 3700K)",
        "exif-lightsource-17": "چرا استاندارد آ",
        "exif-lightsource-18": "چرا استاندارد بی",
        "exif-lightsource-19": "چرا استاندارد سی",
+       "exif-lightsource-24": "لامپا تنگستن کارخونه ISO",
        "exif-lightsource-255": "سرچشمه چرا هنی",
+       "exif-flash-fired-0": "فلاش دئه نبی",
+       "exif-flash-fired-1": "فلاش دئه بی",
+       "exif-flash-return-0": "بی کنشت دیاری دیارکاری نور برچسه",
+       "exif-flash-return-2": "نیر وابرچسه دیاجوری نبی",
+       "exif-flash-return-3": "نور وابرچسه دیارجوری بی",
+       "exif-flash-mode-1": "فلاش زئن اژباری",
+       "exif-flash-mode-2": "نهاگری اژباری د فلاش زئن",
        "exif-flash-mode-3": "مد خودانجوم",
+       "exif-flash-function-1": "بی کنشت دیار فلاش",
+       "exif-flash-redeye-1": "حال و بار راسکاری سوریا تیا",
        "exif-focalplaneresolutionunit-2": "ائنج",
        "exif-sensingmethod-1": "نادیار",
+       "exif-sensingmethod-2": "حس دیار راساگه یی رئنی تک تاشه یی",
+       "exif-sensingmethod-3": "حس دیار راساگه یی رئنی دو تاشه یی",
+       "exif-sensingmethod-4": "حس دیار راساگه یی رئنی سه تاشه یی",
+       "exif-sensingmethod-5": "حس دیار راساگه یی منظم رئنیا",
+       "exif-sensingmethod-7": "حس دیار سه خطی",
+       "exif-sensingmethod-8": "حس دیار خطی منظم رئنیا",
        "exif-filesource-3": "دیربین دیجیتالی",
+       "exif-scenetype-1": "عسگ مستقیم گرته بیه",
        "exif-customrendered-0": "پردازشت خو",
        "exif-customrendered-1": "پردازشت همیشه ای",
+       "exif-exposuremode-0": "نیر دئن خودانجوم",
+       "exif-exposuremode-1": "نیر دئن دسی",
+       "exif-exposuremode-2": "چوئه کاری خودانجوم",
+       "exif-whitebalance-0": "میزونکاری خودانجوم میونه کار رئن اسبئ",
+       "exif-whitebalance-1": "میزونکاری دسی میونه کار رئن اسبئ",
        "exif-scenecapturetype-0": "استاندارد",
+       "exif-scenecapturetype-1": "ورتیه جا",
        "exif-scenecapturetype-2": "نیمری کشین",
        "exif-scenecapturetype-3": "چی شو",
        "exif-gaincontrol-0": "هیش کوم",
+       "exif-gaincontrol-1": "وارو رئتن کمترونه گرتنی",
+       "exif-gaincontrol-2": "وارو رئتن بیشترونه گرتنی",
+       "exif-gaincontrol-3": "کمتر بیین کمترونه گرتنی",
+       "exif-gaincontrol-4": "وارو رئتن کمترونه گرتنی",
        "exif-contrast-0": "عادی",
        "exif-contrast-1": "نرم",
        "exif-contrast-2": "سفت",
        "exif-saturation-0": "عادی",
+       "exif-saturation-1": "رئنیا لقن بیه",
+       "exif-saturation-2": "رئنیا سیر بیه",
        "exif-sharpness-0": "عادی",
        "exif-sharpness-1": "نرم",
        "exif-sharpness-2": "سفت",
        "exif-subjectdistancerange-1": "گپ",
        "exif-subjectdistancerange-2": "نما بسته",
        "exif-subjectdistancerange-3": "نما د دیر",
+       "exif-gpslatitude-n": "پئنا ولاتشناسی شمالی",
+       "exif-gpslatitude-s": "پئنا ولاتشناسی هارگه",
+       "exif-gpslongitude-e": "پئنا ولاتشناسی افتوزنون",
+       "exif-gpslongitude-w": "پئنا ولاتشناسی افتونشین",
        "exif-gpsaltitude-above-sealevel": "$1 {{جمی:$1|متر|متریا}} وارؤ د ریتراز دریا",
        "exif-gpsaltitude-below-sealevel": "$1 {{جمی:$1|متر|متریا}} وارؤ د ریتراز دریا",
+       "exif-gpsstatus-a": "د حال و بار انازه یاری",
+       "exif-gpsstatus-v": "ری وه ری یک کاری انازه یاری",
+       "exif-gpsmeasuremode-2": "انازه یاری دو ورگه جایی",
+       "exif-gpsmeasuremode-3": "انازه یاری سه ورگه جایی",
        "exif-gpsspeed-k": "کلومتر سی هر ساعت",
        "exif-gpsspeed-m": "مایل سی هر ساعت",
+       "exif-gpsspeed-n": "گره",
        "exif-gpsdestdistance-k": "کلومتر",
        "exif-gpsdestdistance-m": "مایل",
+       "exif-gpsdestdistance-n": "مایل دریایی",
        "exif-gpsdop-excellent": "عالیه($1)",
        "exif-gpsdop-good": "خو ($1)",
+       "exif-gpsdop-moderate": "متوسط($1)",
        "exif-gpsdop-fair": "د ری انصاف ($1)",
        "exif-gpsdop-poor": "گن ($1)",
        "exif-objectcycle-a": "فقط شو صو",
        "exif-objectcycle-p": "فقط ایواره",
        "exif-objectcycle-b": "هم شو صو و هم ایواره",
+       "exif-gpsdirection-t": "لا درست",
+       "exif-gpsdirection-m": "لا مغناطیسی",
+       "exif-ycbcrpositioning-1": "مینجا کاری بیه",
+       "exif-ycbcrpositioning-2": "هوم بهری",
        "exif-dc-contributor": "هومیارا",
+       "exif-dc-coverage": "محدوده گاتی یا جاگه یی وارسگر",
        "exif-dc-date": "گاتیا",
        "exif-dc-publisher": "درتیجن",
        "exif-dc-relation": "وارسگر مرتوط",
        "exif-urgency-normal": "خو($1)",
        "exif-urgency-low": "هار ($1)",
        "exif-urgency-high": "بلنگ ($1)",
+       "exif-urgency-other": "اول کاری تعریف بیه وه دس کاریار($1)",
        "namespacesall": "همه شو",
        "monthsall": "همه",
        "confirmemail": "پشت راس کردن تیرنشون انجومانامه",
        "confirmemail_subject": "{{SITENAME}} تیرنشون انجومانامه پشت راست کردن",
        "confirmemail_invalidated": "پشت راس کنی انجومانامه انجوم شیو بیه",
        "invalidateemail": "انجومشیو کردن پشت راس کردن انجومانامه",
+       "scarytranscludedisabled": "[پرگنجایشت کاری مینجا ویکی کنشتکار نئ]",
+       "scarytranscludefailed": "[واحونی چوئه سی $1 انجومگر نبی]",
+       "scarytranscludefailed-httpstatus": "[واحونی چوئه سی $1 انجومگر نبی: خطا اچ‌ تی‌ تی‌ پی $2]",
        "scarytranscludetoolong": "[یو آر ال فره گپه]",
        "deletedwhileediting": "<strong>زئنار:</strong>ای بلگه د او گاتی که شما شرو د ویرایشت کردیته پاکسا بیه!",
        "recreate": "د نو راس کردن",
        "confirm_purge_button": "خوئه",
+       "confirm-purge-top": "میهایت کش ای بلگه نا پاک بکیت؟",
        "confirm-watch-button": "خوئه",
        "confirm-watch-top": "ای بلگه نه د سیل برگتو اضاف می کید؟",
        "confirm-unwatch-button": "خوئه",
        "imgmultigoto": "رو د بلگه $1",
        "img-lang-opt": "$2 ($1)",
        "img-lang-default": "(زون پیش زمینه)",
+       "img-lang-info": "اوردن ای عسگ د $1 .  $2",
        "img-lang-go": "رو",
        "ascending_abbrev": "ری وه وارو",
        "descending_abbrev": "ری وه هاری",
        "watchlistedit-raw-titles": "داسون:",
        "watchlistedit-raw-submit": "وه هنگوم سازی سیل برگ",
        "watchlistedit-raw-done": "سیل برگتون وه هنگوم سازی بیه.",
+       "watchlistedit-raw-added": "$1 داسون وه دماگریا اضافه {{PLURAL:$1|بی|بیین}}:",
        "watchlistedit-clear-title": "سیل برگ دروس بیه",
        "watchlistedit-clear-legend": "پاک کردن سیل برگ",
        "watchlistedit-clear-titles": "داسون:",
        "version-extensions": "دمادیسیا پورسه",
        "version-skins": "پوسه یا پورسه بیه",
        "version-specialpages": "بلگيا ويجه",
+       "version-parserhooks": "قلاویا کته کته یار",
        "version-variables": "آلشت ونا",
        "version-antispam": "نهاگرتن هرزنومه",
        "version-other": "هنی",
+       "version-mediahandlers": "دس دیاریا وارسگر",
+       "version-hooks": "قلاویا",
+       "version-parser-extensiontags": "سردیسیا دمادیس کوته کوته کار",
+       "version-parser-function-hooks": "قلاویا انجومکار کوته کوته کار",
        "version-hook-name": "نوم قلاو",
+       "version-hook-subscribedby": "اندوم بیه وه دس",
        "version-no-ext-name": "[بی نوم]",
        "version-license": "لیسانس ویکی وارسگر",
        "version-ext-license": "ليسانس",
        "version-ext-colheader-description": "شرح",
        "version-ext-colheader-credits": "نیسنه یا",
        "version-license-title": "لیسانس سی $1",
+       "version-license-not-found": "هیچ دونسمنی خو و لیسانسداری د ای دمادیس دیاری نکرده.",
+       "version-credits-title": "اعتوار سی $1",
+       "version-credits-not-found": "هیچ دونسمنی خو و معتوری د ای دمادیس دیاری نکرده.",
+       "version-poweredby-credits": "ای ویکی د لا '''[https://www.mediawiki.org/ ویکی وارسگر]''' حامینداری بوئه، همه حقوق پر و پیم کاری بیه© 2001-$1 $2.",
        "version-poweredby-others": "دیه رون",
+       "version-poweredby-translators": "والریاریاtranslatewiki.net",
+       "version-software": "نرم افزار پورسه بیه",
        "version-software-product": "نتجه",
        "version-software-version": "نسقه",
+       "version-entrypoints": "تیرنشون اینترنتی جاگه وامین اومائن",
+       "version-entrypoints-header-entrypoint": "جاگه وامین اومائن",
        "version-entrypoints-header-url": "يو آر ال",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Article path]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Script path]",
+       "version-libraries": "کتاو حونه یا پورسه بیه",
        "version-libraries-library": "کتاوگه",
        "version-libraries-version": "نسقه",
        "redirect": "واگردونی وا جانیا،بلگه یا وانیئری نوم دیارکو",
        "redirect-revision": "وانئری بلگه",
        "redirect-file": "نوم جانیا",
        "redirect-not-exists": "انازه که پیدا نبی",
+       "fileduplicatesearch": "پی جوری سی جانیایا دوکونه",
+       "fileduplicatesearch-legend": "پی جوری سی دوکونه",
        "fileduplicatesearch-filename": "نوم جانیا:",
        "fileduplicatesearch-submit": "پی جوری",
        "fileduplicatesearch-info": "$1 × $2 pixel<br />انازه جانیا: $3<br />MIME type: $4",
+       "fileduplicatesearch-noresults": "جانیایی وا نوم «$1» یافت نبی.",
        "specialpages": "بلگيا ويجه",
+       "specialpages-note-top": "میراث",
+       "specialpages-group-maintenance": "گزارشتیا واداشتن",
        "specialpages-group-other": "بلگه یا ویجه هنی",
        "specialpages-group-login": " اومائن د سيستم/راس كردن حساو",
        "specialpages-group-changes": "آلشتیا تازه و پهرستنومه یا",
        "specialpages-group-wiki": "رسینه و اوزاریا",
        "specialpages-group-redirects": "بلگه ویجه واگردونی بیه",
        "specialpages-group-spam": "اوزاریا اسپم",
+       "specialpages-group-developer": "اوزاریا گپ کلون یار",
        "blankpage": "بلگه حالی",
+       "intentionallyblankpage": "ای بلگه عمدن حالی هشته بیه",
        "external_image_whitelist": "یه خط نه ول بکید چی وه<pre>",
        "tags": "سردیسیا آلشت دئن خو",
-       "tag-filter": "فيلتر [[Special:Tags|Tag]]:",
+       "tag-filter": "فيلتر [[Special:سردیسیا|سردیس]]:",
        "tag-filter-submit": "فيلتر",
+       "tag-list-wrapper": "([[Special:سردیسیا|{{PLURAL:$1|سردیس|سردیسیا}}]]: $2)",
        "tags-title": "سردیسیا",
        "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 {{جمی:$1|آلشت|آلشتیا}}",
+       "tags-manage-no-permission": "شما صلا یه نه که آلشت دئن سردیسیا نه دیوونداری بکیت ناریت.",
+       "tags-create-heading": "راس کردن یه گل سردیس تازه",
+       "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-reason": "دليل:",
+       "tags-delete-not-found": "سردیس \"$1\" نیئش.",
+       "tags-activate-title": "کنشتیاری کردن سردیس",
+       "tags-activate-reason": "دليل:",
+       "tags-activate-not-found": "سردیس \"$1\" نیئش.",
+       "tags-activate-submit": "کنشتیاری کردن",
+       "tags-deactivate-title": "ناکشتیاری کردن سردیس",
+       "tags-deactivate-reason": "دليل:",
+       "tags-deactivate-submit": "ناکنشتیاری کردن",
        "comparepages": "کنار یک نیاین بلگه یا",
        "compare-page1": "بلگه 1",
        "compare-page2": "بلگه 2",
        "compare-invalid-title": "داسونی که شما تیار کردیته خو نئ.",
        "compare-title-not-exists": "سرون مشقص بیه وجود ناره.",
        "compare-revision-not-exists": "وانئری که شما تی دیار کردیته وجود ناره.",
+       "dberr-info": "(نبوئه وه رسینه جا:$1 دسرسی داشتوئیت)",
        "dberr-info-hidden": "(نبوئه د رسینه گا دسرسی داشت)",
+       "htmlform-invalid-input": "یه قری مشگل ها د پاره یی د درینده یا شما.",
+       "htmlform-int-toolow": "انازه یی که شما دئیته د کمترونه $1 فره کمتره.",
+       "htmlform-int-toohigh": "انازه یی که شما دئیته د بشترونه $1 فره بیشتره.",
        "htmlform-required": "یه دئه واس بوئه.",
        "htmlform-submit": "دئن",
        "htmlform-reset": "انجومشیو کردن آلشتیا",
        "htmlform-cloner-create": "هنی اضاف بکیت",
        "htmlform-cloner-delete": "ؤرداشتن",
        "htmlform-cloner-required": "سی کمترونه یه گل ارزایشت لازمه",
+       "sqlite-has-fts": "$1 وا حامینداری پی جوری تمام نیسسه یی",
+       "sqlite-no-fts": "$1 وا بی حامینداری پی جوری تمام نیسسه یی",
+       "logentry-delete-delete": "$1 بلگه {{GENDER:$2|پاکسا بیه}} $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|}} بلگه $3 د نو زنه کرده",
        "revdelete-content-hid": "مینونه قام بیه",
        "revdelete-summary-hid": "چکسته ویرایشت قام بیه",
        "revdelete-uname-hid": "نوم کاروری قام بیه",
        "revdelete-content-unhid": "مینونه قام نبیه",
        "revdelete-summary-unhid": "چکسته ویرایشت قام نبیه",
        "revdelete-uname-unhid": "نوم کاروری قام نبیه",
+       "logentry-move-move": "$1 {{GENDER:$2|جا وه جا کرده}} بلگه $3 نه سی $4",
+       "logentry-newusers-create": "حساو کاریاری $1 {{GENDER:$2|راس بی}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|سوار کرده}} $3",
+       "logentry-upload-revert": "$1 $3 نه {{GENDER:$2|سوارکرد}}",
+       "log-name-managetags": "سردیس دیوونداری کردن پهرستنومه",
+       "logentry-managetags-create": "$1 {{GENDER:$2|سردیس \"$4\"}} نه راس کرده",
        "rightsnone": "(هيش كوم)",
        "revdelete-summary": "چکسه ویرایشت",
-       "feedback-subject": "سرون:",
-       "feedback-message": "پيغوم:",
+       "feedback-adding": "اضاف کردن هوال حون یار د بلگه....",
+       "feedback-back": "دما",
+       "feedback-bugnew": "مه وارسیش کردمه. یه گل سیسرک تازه گزارشت بی",
        "feedback-cancel": "انجوم شیوسن",
-       "feedback-submit": "کل کردن نهاهوال حون",
-       "feedback-error2": "خطا:ویرایشت خو نبی",
        "feedback-close": "انجوم بی",
-       "feedback-bugnew": "مه وارسیش کردمه. یه گل سیسرک تازه گزارشت بی",
+       "feedback-external-bug-report-button": "جانیا سازی یه گل کنشتیاری کسمدار",
+       "feedback-dialog-title": "دیار بیین نهاحردیاری",
+       "feedback-error-title": "خطا",
+       "feedback-error2": "خطا:ویرایشت خو نبی",
+       "feedback-error3": "خطا: جواو ندئن د پیوندکار برنامه نیسی نرم افزار",
+       "feedback-message": "پيغوم:",
+       "feedback-subject": "سرون:",
+       "feedback-submit": "كل كردن",
+       "feedback-thanks-title": "دتو منمونیم!",
+       "feedback-useragent": "راوط کاریا:",
        "searchsuggest-search": "پی جوری",
        "searchsuggest-containing": "د حال و بار مینونه دار...",
        "api-error-badaccess-groups": "شما سی سوار کرد جانیایا د ای ویکی اجازه ناریت.",
+       "api-error-badtoken": "خطا مینجا:رازینه امنیتی اشتوا",
        "api-error-copyuploaddisabled": "سوار کردن وا یو آر ال دی ای سرور غیرفعال بیه.",
+       "api-error-duplicate-archive-popup-title": "{{PLURAL:$1|جانیا|جانیایا}} تکراری یی که ایسه پاکسا بیینه",
+       "api-error-duplicate-popup-title": "{{PLURAL:$1|جانیا|جانیایا}} تکراری",
+       "api-error-empty-file": "جانیایی که دئی ته حالی بی.",
+       "api-error-emptypage": "یه گل بلگه تازه راس بکیت،بلگه یا حالی صلادار کاری نیئن.",
+       "api-error-file-too-large": "جانیایی که دئیته فره گپه.",
        "api-error-filename-tooshort": "نوم جانیا فره کؤچکه.",
+       "api-error-filetype-banned": "چنی جانیا قدقه بیه.",
+       "api-error-filetype-missing": "نوم جانیا یه گل دمادیس گم بیه ئه.",
+       "api-error-hookaborted": "آلشکاری که شما میهاستیت ره وندیاریش بکیت وا یه گل دما دیس انجوم شیو بیه.",
+       "api-error-http": "خطا مینجایی:نبوئه د رسینه جا وصل بوئیت.",
        "api-error-illegal-filename": "نوم جانیا اجازه دئه نئ.",
        "api-error-mustbeloggedin": "شما سی سوارکردن فایلیا با بیایت وامین",
        "api-error-unclassified": "یه گل خطا نادیار ری ون کرده.",
        "api-error-unknown-code": "خطا نادیار:\"$1\".",
+       "api-error-unknown-error": "خطا مینونه: د گاتی که شما د حال و بار تلاش سی سوارکرد جانیاتو بییت، یه گل اشتوا پیش اوما.",
+       "api-error-unknown-warning": "هشدار نادیار:\"$1\".",
        "api-error-unknownerror": "خطا نادیار:\"$1\".",
+       "api-error-uploaddisabled": "سوار کردن د ای ویکی ناکشتگر بیه.",
+       "api-error-verification-error": "شایت جانیا خراو بیه، یا پسون غلط داشتوئه.",
        "duration-seconds": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}",
        "duration-minutes": "$1 {{PLURAL:$1|دیقه|دیقه یا}}",
        "duration-hours": "$1 {{PLURAL:$1|ساعت |ساعتیا}}",
        "duration-years": "$1{{جمی:$1| سال|سالیا}}",
        "duration-decades": "$1 {{PLURAL:$1|دهه|دهه یا}}",
        "duration-centuries": "$1 {{PLURAL:$1|سده|سده یا}}",
+       "duration-millennia": "$1 {{PLURAL:$1|میلینیوم|ملینا}}",
+       "rotate-comment": "عسگ وا $1 {{PLURAL:$1|گرینج|گرینج}} ساعت گرد قر حرده",
+       "limitreport-title": "داده یا جانیاکار وااشکافت کار:",
+       "limitreport-cputime": "گات وه کار گرتن سی پی یو",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}",
        "limitreport-walltime": "زمون راستکی وه کار گرتن",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}",
+       "limitreport-ppvisitednodes": "شمارش یار گره دیئه بیه دما پردازشتکار",
        "limitreport-ppvisitednodes-value": "$1/$2",
+       "limitreport-ppgeneratednodes": "شمارش یار گره تولیدی دما پردازشتکار",
        "limitreport-ppgeneratednodes-value": "$1/$2",
+       "limitreport-postexpandincludesize": "انازه د ور گرته نها گپ کلونکاری",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بایت|بایتیا}}",
+       "limitreport-templateargumentsize": "انازه چوئه آرگومان",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|بایت|بایتیا}}",
+       "limitreport-expansiondepth": "بیشتری پی یا گپ کلونکاری",
        "limitreport-expansiondepth-value": "$1/$2",
+       "limitreport-expensivefunctioncount": "انازه انجومگریا وااشکافتکار پر مصرف",
        "limitreport-expensivefunctioncount-value": "$1/$2",
+       "expandtemplates": "گپ کلون کردن چوئه یا",
+       "expand_templates_intro": "ای بلگه ویجه یه گل نیسسه نه گرته و همه چوئه یایی که هان د وه ونونه و حال و بار ؤرئشتن گپ کلونکاری می که همچنی. آلشیاریا وااشکافت کاری چی <code><nowiki>{{</nowiki>#language:…}}</code> و آلشتکنیا چی <code><nowiki>{{</nowiki>CURRENTDAY}}</code> نه ئم گپ کلونکاری می که— د راستکی تقریون هر چی نه که ها د میلات دو گل آکولات. ای کار وا واحونی کاری ریترازجا وااشکافت مربوط د خود ویکی وارسگر انجوم دیار موئه.",
+       "expand_templates_title": "داسون، سی {{FULLPAGENAME}} و چیا هنی:",
        "expand_templates_input": "نیسسه درینده:",
        "expand_templates_output": "نتیجه",
        "expand_templates_xml_output": "درده ایکس ام ال",
+       "expand_templates_html_output": "وه در ده اچ تی ام ال خام",
        "expand_templates_ok": "خوئه",
        "expand_templates_remove_comments": "جا وه جا بیئن ویر و باوریا",
+       "expand_templates_remove_nowiki": "خومثی کردن سردیسیا <nowiki> د کارگرایی",
+       "expand_templates_generate_xml": "نشو دئن دار وااشکافتکاری XML",
+       "expand_templates_generate_rawhtml": "نشو دئن اچ‌ تی‌ ام‌ ال خام",
        "expand_templates_preview": "پيش سيل",
+       "expand_templates_preview_fail_html": "<em>سی یه که{{SITENAME}} تا یه گل HTML خام کنشتیار و یه گل د دس رئتن دونسمنیا نشسجا هئ، پیش سیل وا داسون یه انجومکاری احتیاطی ری وه ری چل کاریا جاوا نیسسه نهو بیه.</em>\n\n<strong>ار ای تلاش پیش سیل مشروعه، لطف بکیت د نو تلاش بکیت. ار هنی ئم کار نمی که، تلاش بکیت ری [[Special:UserLogout|اومائن وه در د سامونه]] بپورنیت و د نو روئیت وامین سامونه.",
+       "expand_templates_preview_fail_html_anon": "<em>سی یه که{{SITENAME}} تا یه گل HTML خام کنشتیار و یه گل د دس رئتن دونسمنیا نشسجا هئ، پیش سیل وا داسون یه  احتیاطی ری وه ری چل کاریا جاوا نیسسه نهو بیه.</em>\n\n<strong>ار ای تلاش پیش سیل مشروعه، لطف بکیت د نو تلاش بکیت. ار هنی ئم کار نمی که، تلاش بکیت ری [[Special:UserLogout|اومائن وه در د سامونه]] بپورنیت و د نو روئیت وامین سامونه.",
        "pagelanguage": "بلگه انتخاو زون",
        "pagelang-name": "بلگه",
        "pagelang-language": "زون",
        "action-pagelang": "آلشت دئن زون بلگه",
        "log-name-pagelang": "آلشت دئن زون پهرستنومه",
        "log-description-pagelang": "ای پهرستنومه در بلگه زونا آلشت گرته.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2| آلشتکاری بی}} زون بلگه سی $3  د $4  وه $5 .",
+       "default-skin-not-found-no-skins": "پویه پیش فرض سی ویکی شما د <code>$wgDefaultSkin</code> جاگر نبیه و د اوچه وا داسون <code>$1</code>، هئیش دیاری نمی که.\n\nشما پوسه یا نپورسیته.\n\n:ار ویکی وارسگر نه د نو وه هنگوم سازی کردیته یا ونه د نو بپورسیته:\n:شایت د گیتیا یا کند بیین سرچشمه واگرد روشتیا هنی پورسن نه وه کار گرتیته. تیه داشتوئیت کهMediaWiki 1.24 یا تازه تر د جانیا اصلی هیچ پوسه یی ناشتوئن.\nتلاش بکیت چن گل پوسه د [https://www.mediawiki.org/wiki/Category:All_skins جانیا پوسه یا ویکی وارسگر]، نه واگرد:\n:*گرتن [https://www.mediawiki.org/wiki/Download پورسیا تاربال]، که وا چن گل پوسه و دما دیسه ای کار بکیت. شما می می تونیت پوسه <code>skins/</code> نه د وه وردار بدیس بکیت.\n:*کلون کردن یه گل د <code dir=\"ltr\">mediawiki/skins/*</code> د ریپوزیتوری د جانیا <code>skins/</code> ویکی وارسگرتو.\n:ار یه گل گپ کلونکاریا ویکی وارسگر هئیت، انجوم دئن ای کار نواس ضدیتی وا ریپوزیتوری گیت شما داشتوئه. سی دونسمنیا هنی و کنشتیار کردن پوسه یاو انتخاو ونو سی پیش فرض بیین [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: میزونکاری پوسه] نه سیل بکیت.",
        "default-skin-not-found-row-enabled": "* <رازینه>$1</رازینه> / $2 ('''ناکنشتگر بیه''')",
        "default-skin-not-found-row-disabled": "* <رازینه>$1</رازینه> / $2 ('''ناکنشتگر بیه''')",
        "mediastatistics": "آماریا وارسگر",
+       "mediastatistics-summary": "آماریایی که دباره جوریا یه گل جانیا وه هنگوم بیه . ای چی فقط د ور گرته آخری نسقه جانیائه. نسقه یا دمایی یا پاکسا بینه یا جیاوازی دارن.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 بایت|$1 بایتیا}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "جورMIME:",
+       "mediastatistics-table-extensions": "دمادیسیا ممکن",
        "mediastatistics-table-count": "شماره جانیایا",
        "mediastatistics-table-totalbytes": "انازه وه یک شیوسه",
        "mediastatistics-header-unknown": "نادیار",
        "mediastatistics-header-multimedia": "وارسگر خو",
        "mediastatistics-header-office": "نوشتگه",
        "mediastatistics-header-text": "نیسسه دار",
-       "json-error-syntax": "خطا دستوری"
+       "mediastatistics-header-executable": "اجرا کردنیا",
+       "mediastatistics-header-archive": "قالویا جم بیه",
+       "json-warn-trailing-comma": "$1 ویرگار که ها د نها جی سون {{PLURAL:$1|پاکسا بی}}.",
+       "json-error-unknown": "مشگل د جی سون بی. خطا: $1",
+       "json-error-depth": "بیشترونه پی یا دماداری رد بیه",
+       "json-error-state-mismatch": "جی‌ سن نادرست یا ناقص",
+       "json-error-ctrl-char": "خطا نیسه یار کنترلی، شایت غلط رازینه کاری بیه",
+       "json-error-syntax": "خطا دستوری",
+       "json-error-utf8": "نیسه یاریا غلط یو تی‌ اف-۸، شایت غلط رازینه کاری بیه",
+       "json-error-recursion": "ری کردن یه گلی یا بیشتر د انازه یی که رازینه کاری بوئه",
+       "json-error-inf-or-nan": "ارزایشتیا INF یا NAN یه گل یا بیشتر د وه د انازه یی که رازینه کاری بیه",
+       "json-error-unsupported-type": "یه گل ارزایشت د جوری که نبوئه رازینه کاری با وتو دئه بیه",
+       "headline-anchor-title": "هوم پیوند کردن د ای بهرجا",
+       "special-characters-group-latin": "لاتين",
+       "special-characters-group-latinextended": "لاتین گپ کلون کاری بیه",
+       "special-characters-group-ipa": "آی پی آ",
+       "special-characters-group-symbols": "نماديا",
+       "special-characters-group-greek": "هلنی",
+       "special-characters-group-cyrillic": "سريليك",
+       "special-characters-group-arabic": "عروی",
+       "special-characters-group-arabicextended": "عروی گپ کلون کاری بیه",
+       "special-characters-group-persian": "فارسی",
+       "special-characters-group-hebrew": "عبری",
+       "special-characters-group-bangla": "بانگلا",
+       "special-characters-group-tamil": "تاميل",
+       "special-characters-group-telugu": "تلوگو",
+       "special-characters-group-sinhala": "سين هالا",
+       "special-characters-group-gujarati": "گجرات",
+       "special-characters-group-devanagari": "دوانگاری",
+       "special-characters-group-thai": "تايی",
+       "special-characters-group-lao": "لائو",
+       "special-characters-group-khmer": "خمر",
+       "special-characters-title-endash": "خط فاصله",
+       "special-characters-title-emdash": "خط فاصله",
+       "special-characters-title-minus": "نشون کم کردن"
 }
index 350f703..a392ca1 100644 (file)
@@ -29,7 +29,8 @@
                        "לערי ריינהארט",
                        "Vogone",
                        "아라",
-                       "Aswanas"
+                       "Aswanas",
+                       "Pofka"
                ]
        },
        "tog-underline": "Pabraukti nuorodas:",
        "sat": "Šeš",
        "january": "sausio",
        "february": "vasario",
-       "march": "kovo",
+       "march": "Kovo",
        "april": "balandžio",
        "may_long": "gegužės",
        "june": "birželio",
        "july": "liepos",
        "august": "rugpjūčio",
-       "september": "rugsėjo",
-       "october": "spalio",
+       "september": "Rugsėjo",
+       "october": "Spalio",
        "november": "lapkričio",
        "december": "gruodžio",
-       "january-gen": "Sausis",
-       "february-gen": "Vasaris",
+       "january-gen": "Sausio",
+       "february-gen": "Vasario",
        "march-gen": "Kovas",
        "april-gen": "Balandis",
        "may-gen": "Gegužė",
        "october-gen": "Spalis",
        "november-gen": "Lapkritis",
        "december-gen": "Gruodis",
-       "jan": "sau",
-       "feb": "vas",
-       "mar": "kov",
-       "apr": "bal",
-       "may": "geg",
-       "jun": "Eka",
-       "jul": "lie",
-       "aug": "rgp",
-       "sep": "rgs",
-       "oct": "spa",
-       "nov": "lap",
-       "dec": "grd",
+       "jan": "Sau",
+       "feb": "Vas",
+       "mar": "Kov",
+       "apr": "Bal",
+       "may": "gegužės",
+       "jun": "Birželis",
+       "jul": "Lie",
+       "aug": "Rgp",
+       "sep": "Rgs",
+       "oct": "Spa",
+       "nov": "Lap",
+       "dec": "Grd",
        "january-date": "Sausio $1",
        "february-date": "Vasario $1",
        "march-date": "Kovo $1",
        "pagecategories": "{{PLURAL:$1|Kategorija|Kategorijos}}",
        "category_header": "Puslapiai kategorijoje „$1“",
        "subcategories": "Subkategorijos",
-       "category-media-header": "Daugialypės terpės failai kategorijoje „$1“",
+       "category-media-header": "Daugialypės terpės rinkmenos kategorijoje „$1“",
        "category-empty": "''Šiuo metu ši kategorija neturi jokių puslapių ar failų.''",
        "hidden-categories": "{{PLURAL:$1|Paslėpta kategorija|Paslėptos kategorijos}}",
        "hidden-category-category": "Paslėptos kategorijos",
        "category-subcat-count-limited": "Šioje kategorijoje yra $1 {{PLURAL:$1|subkategorija|subkategorijos|subkategorijų}}.",
        "category-article-count": "{{PLURAL:$2|Šioje kategorijoje yra vienas puslapis.|{{PLURAL:$1|Rodomas|Rodomi|Rodoma}} $1 šios kategorijos {{PLURAL:$1|puslapis|puslapiai|puslapių}} (iš viso kategorijoje yra $2 {{PLURAL:$2|puslapis|puslapiai|puslapių}}).}}",
        "category-article-count-limited": "{{PLURAL:$1|Rodomas|Rodomi|Rodoma}} $1 šios kategorijos {{PLURAL:$1|puslapis|puslapiai|puslapių}}.",
-       "category-file-count": "{{PLURAL:$2|Šioje kategorijoje yra vienas failas.|{{PLURAL:$1|Rodomas|Rodomi|Rodoma}} $1 šios kategorijos {{PLURAL:$1|failas|failai|failų}} (iš viso kategorijoje yra $2 {{PLURAL:$2|failas|failai|failų}}).}}",
+       "category-file-count": "{{PLURAL:$2|Šioje kategorijoje yra viena rinkmena.|{{PLURAL:$1|Rodomas|Rodomi|Rodoma}} $1 šios kategorijos {{PLURAL:$1|rinkmena|rinkmenos|rinkmenų}} (iš viso kategorijoje yra $2 {{PLURAL:$2|rinkmena|rinkmenos|rinkmenų}}).}}",
        "category-file-count-limited": "{{PLURAL:$1|Rodomas|Rodomi|Rodoma}} $1 šios kategorijos {{PLURAL:$1|failas|failai|failų}}.",
        "listingcontinuesabbrev": "tęs.",
        "index-category": "Indeksuoti puslapiai",
        "personaltools": "Asmeniniai įrankiai",
        "articlepage": "Rodyti turinio puslapį",
        "talk": "Aptarimas",
-       "views": "Žiūrėti",
+       "views": "Peržiūros",
        "toolbox": "Įrankiai",
        "userpage": "Rodyti naudotojo puslapį",
        "projectpage": "Rodyti projekto puslapį",
        "pool-errorunknown": "Nežinoma klaida",
        "poolcounter-usage-error": "Naudojimo klaida: $1",
        "aboutsite": "Apie {{SITENAME}}",
-       "aboutpage": "Project:Apie",
+       "aboutpage": "Project:About",
        "copyright": "Turinys pateikiamas pagal  $1  jei nenurodyta kitaip.",
-       "copyrightpage": "{{ns:project}}:Autorystės teisės",
+       "copyrightpage": "{{ns:project}}:Autorinės teisės",
        "currentevents": "Naujienos",
-       "currentevents-url": "Project:Naujienos",
+       "currentevents-url": "Project:Current events",
        "disclaimers": "Atsakomybės apribojimas",
-       "disclaimerpage": "Project:Atsakomybės apribojimas",
+       "disclaimerpage": "Project:General disclaimer",
        "edithelp": "Kaip redaguoti",
+       "helppage-top-gethelp": "Pagalba",
        "mainpage": "Pagrindinis puslapis",
        "mainpage-description": "Pagrindinis puslapis",
        "policy-url": "Project:Politika",
        "portal": "Bendruomenė",
-       "portal-url": "Project:Bendruomenė",
+       "portal-url": "Project:Community portal",
        "privacy": "Privatumo politika",
        "privacypage": "Project:Privatumo politika",
        "badaccess": "Teisių klaida",
        "versionrequired": "Reikalinga $1 MediaWiki versija",
        "versionrequiredtext": "Reikalinga $1 MediaWiki versija, kad pamatytumėte šį puslapį. Žiūrėkite [[Special:Version|versijos puslapį]].",
        "ok": "Gerai",
-       "retrievedfrom": "Gauta iš „$1“",
+       "retrievedfrom": "Gauta iš \"$1\"",
        "youhavenewmessages": "Jūs turite $1 ($2).",
        "youhavenewmessagesfromusers": "Jūs gavote $1 nuo {{PLURAL:$3|kito vartotojo|$3 vartotojų}} ($2).",
        "youhavenewmessagesmanyusers": "Jūs turite $1 iš daugelio vartotojų ( $2 ) .",
        "cannotdelete-title": "Negalite ištrinti puslapio \"$1\"",
        "delete-hook-aborted": "Trynimą atšaukė kabliukas.\nNebuvo duotas joks paaiškinimas.",
        "badtitle": "Blogas pavadinimas",
-       "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",
+       "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.",
        "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.",
        "querypage-no-updates": "Atnaujinimai šiam puslapiui dabar yra išjungti. Duomenys čia dabar nebus atnaujinti.",
        "currentrev-asof": "Dabartinė $1 versija",
        "revisionasof": "$1 versija",
        "revision-info": "$1 versija, sukurta {{GENDER:$6|$2}}$7",
-       "previousrevision": "←Ankstesnė versija",
+       "previousrevision": "← Ankstesnė versija",
        "nextrevision": "Vėlesnė versija→",
        "currentrevisionlink": "Dabartinė versija",
        "cur": "dab",
        "difference-title": "$1: Skirtumas tarp puslapio versijų",
        "difference-title-multipage": "Skirtumas tarp puslapių „$1 ir $2“",
        "difference-multipage": "(Skirtumai tarp puslapių)",
-       "lineno": "Eilutė $1:",
+       "lineno": "$1 eilutė:",
        "compareselectedversions": "Palyginti pasirinktas versijas",
        "showhideselectedversions": "Rodyti/slėpti pasirinktas versijas",
        "editundo": "atšaukti",
        "diff-multi-otherusers": "(nerodoma {{PLURAL:$1|viena tarpinė versija, sukurta|$1 tarpinės versijos, sukurtos|$1 tarpinių versijų, sukurtų}} {{PLURAL:$2|vieno naudotojo|$2 naudotojų}})",
        "diff-multi-manyusers": "(daugiau nei $2 {{PLURAL:$2|naudotojo|naudotojų|naudotojų}} $1 {{PLURAL:$1|tarpinis keitimas nėra rodomas|tarpiniai keitimai nėra rodomi|tarpinių keitimų nėra rodoma}})",
        "searchresults": "Paieškos rezultatai",
-       "searchresults-title": "Paieškos rezultatai „$1“",
+       "searchresults-title": "Paieškos rezultatai \"$1\"",
        "titlematches": "Puslapių pavadinimų atitikmenys",
        "textmatches": "Puslapio turinio atitikmenys",
        "notextmatches": "Jokių puslapių teksto atitikmenų",
        "searchprofile-everything": "Viskas",
        "searchprofile-advanced": "Išplėstinė",
        "searchprofile-articles-tooltip": "Ieškoti čia: $1",
-       "searchprofile-images-tooltip": "Ieškoti failų",
-       "searchprofile-everything-tooltip": "Ieškoti viso turinio (tame tarpe aptarimų puslapių)",
+       "searchprofile-images-tooltip": "Ieškoti rinkmenų",
+       "searchprofile-everything-tooltip": "Ieškoti viso turinio (įskaitant aptarimo puslapius)",
        "searchprofile-advanced-tooltip": "Ieškoti skirtingose vardų srityse",
        "search-result-size": "$1 ({{PLURAL:$2|1 žodis|$2 žodžiai|$2 žodžių}})",
        "search-result-category-size": "{{PLURAL:$1|1 narys|$1 narių}} ({{PLURAL:$2|1 subkategorijoje|$2 subkategorijų}}, {{PLURAL:$3|1 failas|$3 failų}})",
        "upload-curl-error28": "Per ilgai įkeliama",
        "upload-curl-error28-text": "Atsakant svetainė užtrunka per ilgai. Patikrinkite, ar svetainė veikia, palaukite truputį ir vėl pamėginkite. Galbūt jums reikėtų pamėginti ne tokiu apkrautu metu.",
        "license": "Licencija:",
-       "license-header": "Licensija",
+       "license-header": "Licencija",
        "nolicense": "Nepasirinkta",
        "licenses-edit": "Keisti licencijų parinktis",
        "license-nopreview": "(Peržiūra negalima)",
        "listfiles-delete": "trinti",
        "listfiles-summary": "Šiame specialiame puslapyje rodomos visos įkeltos rinkmenos.",
        "listfiles_search_for": "Ieškoti failo pavadinimo:",
-       "imgfile": "failas",
+       "imgfile": "rinkmena",
        "listfiles": "Failų sąrašas",
        "listfiles_thumb": "Miniatiūra",
        "listfiles_date": "Data",
        "listfiles-latestversion-yes": "Taip",
        "listfiles-latestversion-no": "Ne",
        "file-anchor-link": "Rinkmena",
-       "filehist": "Paveikslėlio istorija",
-       "filehist-help": "Paspauskite ant datos/laiko, kad pamatytumėte failą tokį, koks jis buvo tuo metu.",
+       "filehist": "Rinkmenos istorija",
+       "filehist-help": "Paspauskite ant datos/laiko, kad pamatytumėte rinkmeną tokią, kokia ji buvo tuo metu.",
        "filehist-deleteall": "trinti visus",
        "filehist-deleteone": "trinti",
        "filehist-revert": "grąžinti",
        "filehist-filesize": "Rinkmenos dydis",
        "filehist-comment": "Paaiškinimas",
        "imagelinks": "Rinkmenos naudojimas",
-       "linkstoimage": "{{PLURAL:$1|Šis puslapis|Šie puslapiai}} nurodo į šį failą:",
+       "linkstoimage": "{{PLURAL:$1|Šis puslapis|Šie puslapiai}} nurodo į šią rinkmeną:",
        "linkstoimage-more": "Daugiau nei $1 {{PLURAL:$1|puslapis|puslapiai|puslapių}} rodo į šį failą.\nŠis sąrašas rodo tik {{PLURAL:$1|puslapio|pirmų $1 puslapių}} nuorodas į šį failą.\nYra pasiekiamas ir [[Special:WhatLinksHere/$2|visas sąrašas]].",
        "nolinkstoimage": "Į rinkmeną nenurodo joks puslapis.",
        "morelinkstoimage": "Žiūrėti [[Special:WhatLinksHere/$1|daugiau nuorodų]] į šį failą.",
        "duplicatesoffile": "Šis failas turi {{PLURAL:$1|$1 dublikatą|$1 dublikatus|$1 dublikatų}} ([[Special:FileDuplicateSearch/$2|daugiau informacijos]]):",
        "sharedupload": "Ši rinkmena yra iš $1 ir gali būti naudojama kitose wiki svetainėse.",
        "sharedupload-desc-there": "Šis failas yra iš $1 ir gali būti naudojamas kituose projektuose.\nNorėdami sužinoti daugiau, žiūrėkite [$2 failo aprašymą].",
-       "sharedupload-desc-here": "Šis failas yra iš $1 ir gali būti naudojamas kituose projektuose.\nInformacija iš [$2 failo aprašymo puslapio] yra pateikiama žemiau.",
+       "sharedupload-desc-here": "Ši rinkmena yra iš $1 ir gali būti naudojama kituose projektuose.\nInformacija iš [$2 failo aprašymo puslapio] yra pateikiama žemiau.",
        "sharedupload-desc-edit": "Ši rinkmena yra iš $1 ir gali būti naudojama kituose projektuose.\nGal norite pakeisti aprašymą jos [$2 aprašymo puslapyje]?",
        "sharedupload-desc-create": "Ši rinkmena yra iš $1 ir gali būti naudojama kituose projektuose.\nGal norite pakeisti aprašymą jos [$2 aprašymo puslapyje]?",
        "filepage-nofile": "Joks failas su duotu pavadinimu neegzistuoja.",
        "shared-repo-from": "iš $1",
        "shared-repo": "bendrosios failų saugyklos",
        "shared-repo-name-wikimediacommons": "Vikiteka",
-       "upload-disallowed-here": "Jūs negalite perrašyti šio failo.",
+       "upload-disallowed-here": "Jūs negalite perrašyti šios rinkmenos.",
        "filerevert": "Sugrąžinti $1",
        "filerevert-legend": "Failo sugrąžinimas",
        "filerevert-intro": "<span class=\"plainlinks\">Jūs grąžinate '''[[Media:$1|$1]]''' į versiją $4 ($2, $3).</span>",
        "sp-contributions-blocklog": "Blokavimų sąrašas",
        "sp-contributions-suppresslog": "ištrintas naudotojo indėlis",
        "sp-contributions-deleted": "ištrintas naudotojo indėlis",
-       "sp-contributions-uploads": "nuotraukos",
+       "sp-contributions-uploads": "įkėlimai",
        "sp-contributions-logs": "Specialiųjų veiksmų sąrašas",
        "sp-contributions-talk": "Aptarimas",
        "sp-contributions-userrights": "naudotojų teisių valdymas",
        "nolinkshere-ns": "Nurodytoje vardų srityje nei vienas puslapis nenurodo į '''[[:$1]]'''.",
        "isredirect": "nukreipiamasis puslapis",
        "istemplate": "įterpimas",
-       "isimage": "failo nuoroda",
+       "isimage": "rinkmenos nuoroda",
        "whatlinkshere-prev": "$1 {{PLURAL:$1|ankstesnis|ankstesni|ankstesnių}}",
        "whatlinkshere-next": "$1 {{PLURAL:$1|kitas|kiti|kitų}}",
        "whatlinkshere-links": "← nuorodos",
        "blocklogpage": "Blokavimų sąrašas",
        "blocklog-showlog": "Šis naudotojas buvo užblokuotas.\nPateikiamas paskutinis blokavimo istorijos įrašas.",
        "blocklog-showsuppresslog": "Šis naudotojas buvo užblokuotas ir paslėptas anksčiau.\nŽemiau yra pateiktas slėpimų žurnalas:",
-       "blocklogentry": "blokavo [[$1]], blokavimo laikas - $2 $3",
+       "blocklogentry": "blokavo [[$1]], blokavimo laikas - $2 $3",
        "reblock-logentry": "pakeisti [[$1]] blokavimo nustatymai, naujas blokavimo laikas – $2 $3",
        "blocklogtext": "Čia yra naudotojų blokavimo ir atblokavimo sąrašas.\nAutomatiškai blokuoti IP adresai neišvardinti.\nJei norite pamatyti dabar blokuojamus adresus, žiūrėkite [[Special:BlockList|blokavimų sąrašą]].",
        "unblocklogentry": "atblokavo $1",
        "thumbnail_gd-library": "Nepilna GD bibliotekos konfigūracija: trūksta funkcijos $1",
        "thumbnail_image-missing": "Gali būti, kad failo nėra: $1",
        "import": "Importuoti puslapius",
-       "importinterwiki": "Tarpprojektinis importas",
+       "importinterwiki": "Įkelti iš kitos Viki",
        "import-interwiki-text": "Pasirinkite projektą ir puslapio pavadinimą importavimui.\nVersijų datos ir redaktorių vardai bus išlaikyti.\nVisi tarpprojektiniai importo veiksmai yra registruojami  [[Special:Log/import|importo istorijoje]].",
        "import-interwiki-sourcewiki": "Pradinė wiki:",
        "import-interwiki-sourcepage": "Pirminis puslapis:",
        "import-rootpage-invalid": "Duotas šaknų puslapis yra blogas pavadinimas.",
        "importlogpage": "Importavimų sąrašas",
        "importlogpagetext": "Administraciniai puslapių importai su keitimų istorija iš kitų wiki projektų.",
-       "import-logentry-upload": "importuota $1 įkeliant failą",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|keitimas|keitimai|keitimų}}",
-       "import-logentry-interwiki": "tarpprojektinis $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|keitimas|keitimai|keitimų}} iš $2",
        "javascripttest": "JavaScript testavimas",
        "javascripttest-pagetext-noframework": "Šis puslapis yra skirtas vykdyti JavaScript testavimus.",
        "tooltip-pt-mytalk": "Jūsų aptarimo puslapis",
        "tooltip-pt-anontalk": "Pakeitimų aptarimas, darytus naudojant šį IP adresą",
        "tooltip-pt-preferences": "Mano nustatymai",
-       "tooltip-pt-watchlist": "Puslapių sąrašas, kuriuos jūs pasirinkote stebėti.",
+       "tooltip-pt-watchlist": "Puslapių sąrašas, kuriuos jūs pasirinkote stebėti",
        "tooltip-pt-mycontris": "Jūsų darytų keitimų sąrašas",
-       "tooltip-pt-login": "Rekomenduojame prisijungti, nors tai nėra privaloma.",
+       "tooltip-pt-login": "Rekomenduojame prisijungti, nors tai nėra privaloma",
        "tooltip-pt-logout": "Atsijungti",
-       "tooltip-pt-createaccount": "Esate skatinamas susikurti paskyrą ir prisijungti, tačiau, tai nėra privaloma",
+       "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-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.",
+       "tooltip-ca-history": "Ankstesni patikslinimai šiame puslapyje",
        "tooltip-ca-protect": "Užrakinti šį puslapį",
        "tooltip-ca-unprotect": "Keisti šio puslapio apsaugą",
        "tooltip-ca-delete": "Ištrinti šį puslapį",
        "tooltip-ca-move": "Pervadinti puslapį",
        "tooltip-ca-watch": "Pridėti puslapį į stebimųjų sąrašą",
        "tooltip-ca-unwatch": "Pašalinti puslapį iš stebimųjų sąrašo",
-       "tooltip-search": "Ieškoti šiame projekte",
+       "tooltip-search": "Ieškoti {{SITENAME}}",
        "tooltip-search-go": "Eiti į puslapį su tokiu pavadinimu, jei toks yra",
-       "tooltip-search-fulltext": "Ieškoti puslapių su šiuo tekstu",
+       "tooltip-search-fulltext": "Ieškokite šio teksto puslapių",
        "tooltip-p-logo": "Eiti į pradinį puslapį",
        "tooltip-n-mainpage": "Eiti į pradinį puslapį",
        "tooltip-n-mainpage-description": "Eiti į pradinį puslapį",
        "tooltip-n-portal": "Apie projektą, ką galima daryti, kur ką rasti",
-       "tooltip-n-currentevents": "Raskite naujausią informaciją",
-       "tooltip-n-recentchanges": "Paskutinių keitimų sąrašas šiame projekte.",
+       "tooltip-n-currentevents": "Rasti pagrindinę informaciją apie įvykius",
+       "tooltip-n-recentchanges": "Paskutinių keitimų sąrašas wiki projekte",
        "tooltip-n-randompage": "Įkelti atsitiktinį puslapį",
-       "tooltip-n-help": "Vieta, kur rasite rūpimus atsakymus.",
-       "tooltip-t-whatlinkshere": "Puslapių sąrašas, rodančių į čia",
+       "tooltip-n-help": "Vieta, kur rasite rūpimus atsakymus",
+       "tooltip-t-whatlinkshere": "Wiki puslapių sąrašas, kuris nurodo čia",
        "tooltip-t-recentchangeslinked": "Paskutiniai keitimai puslapiuose, pasiekiamuose iš šio puslapio",
        "tooltip-feed-rss": "Šio puslapio RSS šaltinis",
        "tooltip-feed-atom": "Šio puslapio Atom šaltinis",
        "tooltip-t-contributions": "Rodyti šio naudotojo keitimų sąrašą",
        "tooltip-t-emailuser": "Siųsti laišką šiam naudotojui",
        "tooltip-t-info": "Daugiau žinių apie šį puslapį",
-       "tooltip-t-upload": "Įkelti failus",
+       "tooltip-t-upload": "Įkelti rinkmenas",
        "tooltip-t-specialpages": "Specialiųjų puslapių sąrašas",
        "tooltip-t-print": "Šio puslapio versija spausdinimui",
        "tooltip-t-permalink": "Nuolatinė nuoroda į šią puslapio versiją",
        "tooltip-ca-nstab-main": "Rodyti puslapio turinį",
        "tooltip-ca-nstab-user": "Rodyti naudotojo puslapį",
        "tooltip-ca-nstab-media": "Rodyti media puslapį",
-       "tooltip-ca-nstab-special": "Šis puslapis yra specialusis - jo negalima redaguoti.",
+       "tooltip-ca-nstab-special": "Šis puslapis yra specialusis - jo negalima redaguoti",
        "tooltip-ca-nstab-project": "Rodyti projekto puslapį",
-       "tooltip-ca-nstab-image": "Rodyti failo puslapį",
+       "tooltip-ca-nstab-image": "Rodyti rinkmenos puslapį",
        "tooltip-ca-nstab-mediawiki": "Rodyti sisteminį pranešimą",
        "tooltip-ca-nstab-template": "Rodyti šabloną",
        "tooltip-ca-nstab-help": "Rodyti pagalbos puslapį",
        "tooltip-minoredit": "Pažymėti keitimą kaip smulkų",
        "tooltip-save": "Išsaugoti pakeitimus",
        "tooltip-preview": "Pakeitimų peržiūra, prašome pažiūrėti prieš išsaugant!",
-       "tooltip-diff": "Rodo, kokius pakeitimus padarėte tekste.",
+       "tooltip-diff": "Rodo, kokius pakeitimus padarėte tekste",
        "tooltip-compareselectedversions": "Žiūrėti dviejų pasirinktų puslapio versijų skirtumus.",
        "tooltip-watch": "Pridėti šį puslapį į stebimųjų sąrašą",
        "tooltip-watchlistedit-normal-submit": "Šalinti puslapius",
        "tooltip-recreate": "Atkurti puslapį nepaisant to, kad jis buvo ištrintas",
        "tooltip-upload": "Pradėti įkėlimą",
        "tooltip-rollback": "Vienu spustelėjimu grąžinama prieš tai redagavusio naudotojo versija",
-       "tooltip-undo": "„Anuliuoti“ atmeta šį keitimą ir atveria ankstesnės versijos redagavimo formą.\nLeidžia pridėti atmetimo priežastį komentaruose",
+       "tooltip-undo": "„Anuliuoti“ atmeta šį keitimą ir atveria ankstesnės versijos redagavimo formą. Leidžia pridėti atmetimo priežastį komentaruose.",
        "tooltip-preferences-save": "Išsaugoti nustatymus",
        "tooltip-summary": "Įvesti trumpą santrauką",
        "common.css": "/** Čia įdėtas CSS bus taikomas visoms išvaizdoms */",
        "thumbsize": "Sumažintų paveikslėlių dydis:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|puslapis|puslapiai|puslapių}}",
        "file-info": "rinkmenos dydis: $1, MIME tipas: $2",
-       "file-info-size": "$1 × $2 taškų, failo dydis: $3, MIME tipas: $4",
+       "file-info-size": "$1 × $2 taškų, rinkmenos dydis: $3, MIME tipas: $4",
        "file-info-size-pages": "$1 × $2 taškų, rinkmenos dydis: $3, MIME tipas: $4, $5 {{PLURAL:$5|puslapis|puslapiai|puslapių}}",
        "file-nohires": "Geresnė raiška negalima.",
-       "svg-long-desc": "SVG failas, formaliai $1 × $2 taškų, failo dydis: $3",
+       "svg-long-desc": "SVG rinkmena, formaliai $1 × $2 taškų, rinkmenos dydis: $3",
        "svg-long-desc-animated": "Animuotas SVG failas, formaliai $1 × $2 pikselių, failo dydis: $3",
        "svg-long-error": "Neleistinas SVG failas: $1",
        "show-big-image": "Pradinė rinkmena",
-       "show-big-image-preview": "Šios peržiūros dydis: $1 .",
-       "show-big-image-other": "{{PLURAL:$2|Kita rezoliucija|Kitos $2 rezoliucijos|Kitų $2 rezoliucijų}}: $1 .",
+       "show-big-image-preview": "Šios peržiūros dydis: $1.",
+       "show-big-image-other": "{{PLURAL:$2|Kita rezoliucija|Kitos $2 rezoliucijos|Kitų $2 rezoliucijų}}: $1.",
        "show-big-image-size": "$1 × $2 taškų",
        "file-info-gif-looped": "ciklinis",
        "file-info-gif-frames": "$1 {{PLURAL:$1|kadras|kadrai|kadrų}}",
        "yesterday-at": "Vakar $1",
        "bad_image_list": "Formatas yra toks:\n\nTik eilutės, prasidedančios *, yra įtraukiamos.\nPirmoji nuoroda eilutėje turi būti nuoroda į blogą failą.\nVisos kitos nuorodos toje pačioje eilutėje yra laikomos išimtimis, t. y. puslapiai, kuriuose leidžiama įterpti failą.",
        "metadata": "Metaduomenys",
-       "metadata-help": "Šiame faile yra papildomos informacijos, tikriausiai pridėtos skaitmeninės kameros ar skaitytuvo, naudoto jam sukurti ar perkelti į skaitmeninį formatą. Jei failas buvo pakeistas iš pradinės versijos, kai kurios detalės gali nepilnai atspindėti naują failą.",
+       "metadata-help": "Šioje rinkmenoje yra papildomos informacijos, tikriausiai pridėtos skaitmeninės kameros ar skaitytuvo, naudoto jai sukurti ar perkelti į skaitmeninį formatą. Jei rinkmena buvo pakeista iš pradinės versijos, kai kurios detalės gali nepilnai atspindėti naują rinkmeną.",
        "metadata-expand": "Rodyti išplėstinę informaciją",
        "metadata-collapse": "Slėpti išplėstinę informaciją",
        "metadata-fields": "Vaizdo metaduomenų laukai, nurodyti šiame pranešime, bus įtraukti į paveikslėlio puslapį, kai metaduomenų lentelė bus suskleista.! N! kiti bus paslėpti.!\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-primarychromaticities": "Pagrindinių spalvų chromiškumas",
        "exif-ycbcrcoefficients": "Spalvų pristatym matricos matricos koeficientai",
        "exif-referenceblackwhite": "Juodos ir baltos poros nuorodos reikšmės",
-       "exif-datetime": "Failo keitimo data ir laikas",
+       "exif-datetime": "Rinkmenos keitimo data ir laikas",
        "exif-imagedescription": "Paveikslėlio pavadinimas",
        "exif-make": "Kameros gamintojas",
        "exif-model": "Kameros modelis",
        "exif-usercomment": "Naudotojo komentarai",
        "exif-relatedsoundfile": "Susijusi garso byla",
        "exif-datetimeoriginal": "Duomenų generavimo data ir laikas",
-       "exif-datetimedigitized": "Pervedimo į skaitmeninį formatą data ir laikas",
+       "exif-datetimedigitized": "Datos ir laiko pervedimas į skaitmeninį formatą",
        "exif-subsectime": "Datos ir laiko sekundės dalys",
        "exif-subsectimeoriginal": "Duomenų generavimo datos ir laiko sekundės dalys",
        "exif-subsectimedigitized": "Pervedimo į skaitmeninį formatą datos ir laiko sekundės dalys",
        "version-parser-function-hooks": "Analizatoriaus funkciniai gaudliai",
        "version-hook-name": "Gaudlio pavadinimas",
        "version-hook-subscribedby": "Užsakyta",
-       "version-version": "(Versija $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[be pavadinimo]",
        "version-license": "MediaWiki licencija",
        "version-ext-license": "Licencija",
        "revdelete-uname-unhid": "naudotojo vardas paviešintas",
        "revdelete-restricted": "uždėti apribojimai administratoriams",
        "revdelete-unrestricted": "pašalinti apribojimai administratoriams",
+       "logentry-block-block": "$1 {{GENDER:$2|užblokavo}} {{GENDER:$4|$3}}, blokavimo laikas – $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|atblokavo}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|pakeitė}} {{GENDER:$4|$3}} blokavimo nustatymus, blokavimo laikas – $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|užblokavo}} {{GENDER:$4|$3}}, blokavimo laikas – $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|pakeitė}} {{GENDER:$4|$3}} blokavimo nustatymus, blokavimo laikas – $5 $6",
        "logentry-move-move": "$1 pervadino puslapį $3 į $4",
        "logentry-move-move-noredirect": "$1 pervadino puslapį $3 į $4, nepalikdamas nukreipimo",
        "logentry-move-move_redir": "$1 pervadino puslapį iš $3 į $4, vietoje buvusio nukreipimo",
        "logentry-upload-revert": "$1 {{GENDER:$2|įkėlė}} $3",
        "rightsnone": "(jokių)",
        "revdelete-summary": "keitimo paaiškinimas",
+       "feedback-adding": "Pridedamas atsiliepimas į puslapį ...",
+       "feedback-back": "Atgal",
+       "feedback-bugcheck": "Puiku! Tiesiog patikrinkite, ar tai ne viena [$1 jau žinomų klaidų].",
+       "feedback-bugnew": "Patikrinau. Pranešti apie naują klaidą",
        "feedback-bugornote": "Jei jūs esate pasirengę aprašyti techninę problemą išsamiau, [$1 praneškite apie programinę klaidą].\nKitu atveju, galite naudotis žemiau esančia paprastesne forma. Jūsų komentaras bus įtrauktas į puslapį „[$3 $2]“, kartu su jūsų naudotojo vardu ir jūsų naudojama naršykle.",
-       "feedback-subject": "Tema:",
-       "feedback-message": "Pranešimas:",
        "feedback-cancel": "Atšaukti",
-       "feedback-submit": "Siųsti Atsiliepimą",
-       "feedback-adding": "Pridedamas atsiliepimas į puslapį ...",
+       "feedback-close": "Atlikta",
+       "feedback-dialog-title": "Pateikti atsiliepimą",
+       "feedback-error-title": "Klaida",
        "feedback-error1": "Klaida: Neatpažįstamas rezultatas iš API",
        "feedback-error2": "Klaida: Redagavimas nepavyko",
        "feedback-error3": "Klaida: Jokio atsakymo iš API",
+       "feedback-message": "Pranešimas:",
+       "feedback-subject": "Tema:",
+       "feedback-submit": "Pateikti",
        "feedback-thanks": "Ačiū! Jūsų atsiliepimas buvo užregistruotas puslapyje „[$2 $1]“.",
-       "feedback-close": "Atlikta",
-       "feedback-bugcheck": "Puiku! Tiesiog patikrinkite, ar tai ne viena [$1 jau žinomų klaidų].",
-       "feedback-bugnew": "Patikrinau. Pranešti apie naują klaidą",
        "searchsuggest-search": "Ieškoti",
        "searchsuggest-containing": "turintys",
        "api-error-badaccess-groups": "Jums neleidžiama įkelti failus į šią wiki.",
        "action-pagelang": "keisti puslapio kalbą",
        "log-name-pagelang": "Keisti kalbos žurnalą",
        "mediastatistics-table-mimetype": "MIME tipas",
-       "json-error-syntax": "Sintaksės klaida"
+       "json-error-syntax": "Sintaksės klaida",
+       "headline-anchor-title": "Nuoroda į šią pastraipą",
+       "special-characters-group-latin": "Lotynų",
+       "special-characters-group-latinextended": "Lotynų išplėstoji",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simboliai",
+       "special-characters-group-greek": "Graikų",
+       "special-characters-group-cyrillic": "Kirilica",
+       "special-characters-group-arabic": "Arabų",
+       "special-characters-group-arabicextended": "Arabic extended",
+       "special-characters-group-persian": "Persų",
+       "special-characters-group-hebrew": "Hebrajų",
+       "special-characters-group-bangla": "Bengalų",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugų",
+       "special-characters-group-sinhala": "Sinhalų",
+       "special-characters-group-gujarati": "Gudžaratų",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Tajų",
+       "special-characters-group-lao": "Laosiečių",
+       "special-characters-group-khmer": "Khmerų"
 }
index 0f94255..cafbea4 100644 (file)
@@ -20,7 +20,8 @@
                        "Xil",
                        "Yyy",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Pasvītrot saites:",
        "currentrev": "Pašreizējā versija",
        "currentrev-asof": "Pašreizējā versija, $1",
        "revisionasof": "Versija, kas saglabāta $1",
-       "revision-info": "Versija $1 laikā, kādu to atstāja $2",
+       "revision-info": "Versija $1, kādu to atstāja {{GENDER:$6|$2}}$7",
        "previousrevision": "← Senāka versija",
        "nextrevision": "Jaunāka versija →",
        "currentrevisionlink": "skatīt pašreizējo versiju",
        "right-reupload-own": "Pārrakstīt paša augšuplādētu esošu failu",
        "right-upload_by_url": "Augšupielādēt failus no URL",
        "right-autoconfirmed": "Izmainīt daļēji aizsargātas lapas",
+       "right-writeapi": "Rakstīšanas API lietošana",
        "right-delete": "Dzēst lapas",
        "right-bigdelete": "Dzēst lapas ar lielām hronoloģijām",
        "right-deleterevision": "Dzēst un atjaunot lapu noteiktas versijas",
        "import-invalid-interwiki": "Nevar importēt no norādītās viki.",
        "importlogpage": "Importēšanas reģistrs",
        "importlogpagetext": "Administratīvās lapu importēšanas no citām Vikipēdijām ar lapas hronoloģiju.",
-       "import-logentry-upload": "importēts [[$1]], izmantojot failu augšupielādi",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|versijas|versija|versijas}}",
-       "import-logentry-interwiki": "starpvikizēts $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versijas|versija|versijas}} no $2",
        "javascripttest": "JavaScript testēšana",
        "tooltip-pt-userpage": "Tava lietotāja lapa",
        "watchlisttools-view": "Skatīt atbilstošās izmaiņas",
        "watchlisttools-edit": "Apskatīt un izmainīt uzraugāmo rakstu sarakstu",
        "watchlisttools-raw": "Izmainīt uzraugāmo rakstu saraksta kodu",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskusija]])",
        "duplicate-defaultsort": "'''Brīdinājums:''' Noklusējuma kārtošanas atslēga \"$2\" ignorē kārtošanas atslēga \"$1\".",
        "version": "Versija",
        "version-extensions": "Ieinstalētie paplašinājumi",
        "version-other": "Cita",
        "version-hooks": "Aizķeres",
        "version-hook-name": "Aizķeres nosaukums",
-       "version-version": "(Versija $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[bez nosaukuma]",
        "version-license": "MediaWiki licence",
        "version-ext-license": "Licence",
        "revdelete-uname-unhid": "lietotājvārda slēpšana atcelta",
        "revdelete-restricted": "piemērot administratoriem ierobežojumus",
        "revdelete-unrestricted": "noņemt administratoriem ierobežojumus",
+       "logentry-block-block": "$1 {{GENDER:$2|nobloķēja}} {{GENDER:$4|$3}} ar beigu termiņu $5 $6",
        "logentry-move-move": "$1 {{GENDER:$2|pārvietoja}} lapu $3 uz $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|pārvietoja}} lapu $3 uz $4, neatstājot pāradresāciju",
        "logentry-move-move_redir": "$1 {{GENDER:$2|pārvietoja}} lapu $3 uz $4, atstājot pāradresāciju",
        "logentry-upload-overwrite": "$1 augšupielādēja jaunu $3 versiju",
        "rightsnone": "(nav)",
        "revdelete-summary": "izmaiņu kopsavilkums",
-       "feedback-subject": "Temats:",
-       "feedback-message": "Ziņojums:",
-       "feedback-cancel": "Atcelt",
-       "feedback-submit": "Iesniegt atsauksmes",
        "feedback-adding": "Atsauksmes tiek pievienotas lapai...",
+       "feedback-bugnew": "Es pārbaudīju. Ziņot par jaunu kļūdu",
+       "feedback-cancel": "Atcelt",
+       "feedback-close": "Gatavs",
        "feedback-error1": "Kļūda: API neatpazīts rezultāts",
        "feedback-error2": "Kļūda: Labojums neizdevās",
        "feedback-error3": "Kļūda: Nav atbildes no API",
+       "feedback-message": "Ziņojums:",
+       "feedback-subject": "Temats:",
+       "feedback-submit": "Iesniegt",
        "feedback-thanks": "Paldies! Jūsu atsauksmes ir ievietotas lapā \"[$2  $1]\".",
-       "feedback-close": "Gatavs",
-       "feedback-bugnew": "Es pārbaudīju. Ziņot par jaunu kļūdu",
        "searchsuggest-search": "Meklēt",
        "searchsuggest-containing": "Meklējamā frāze:",
        "api-error-badaccess-groups": "Jums nav atļauts augšupielādēt failus šajā wiki.",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|baiti|baits|baiti}}",
        "expand_templates_output": "Rezultāts",
        "expand_templates_ok": "Labi",
-       "expand_templates_preview": "Pirmskats"
+       "expand_templates_preview": "Pirmskats",
+       "special-characters-group-latin": "Latīņu",
+       "special-characters-group-latinextended": "Latīņu (papildus)",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simboli",
+       "special-characters-group-greek": "Grieķu",
+       "special-characters-group-cyrillic": "Kirilica",
+       "special-characters-group-arabic": "Arābu",
+       "special-characters-group-persian": "Persiešu",
+       "special-characters-group-hebrew": "Ebreju",
+       "special-characters-group-bangla": "Bengāļu",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singāļu",
+       "special-characters-group-gujarati": "Gudžarati"
 }
index 7636ee2..674c343 100644 (file)
@@ -15,7 +15,9 @@
                        "LNDDYL",
                        "Jason924tw",
                        "灰太狼Wolffy55",
-                       "RalfX"
+                       "RalfX",
+                       "Davidzdh",
+                       "Nemo bis"
                ]
        },
        "tog-underline": "鏈墊線:",
        "tog-hidepatrolled": "隱近巡",
        "tog-newpageshidepatrolled": "隱新巡",
        "tog-extendwatchlist": "展列見變",
-       "tog-usenewrc": "青出近易(JavaScript)",
+       "tog-usenewrc": "青出近易",
        "tog-numberheadings": "生章數",
-       "tog-showtoolbar": "多寶列見(JavaScript)",
+       "tog-showtoolbar": "多寶列見",
        "tog-editondblclick": "雙擊以纂頁",
-       "tog-editsectiononrightclick": "纂段右擊標(JavaScript)",
+       "tog-editsectiononrightclick": "纂段右擊標",
        "tog-watchcreations": "哨己撰",
        "tog-watchdefault": "哨己纂",
        "tog-watchmoves": "派哨予吾遷之頁",
@@ -42,7 +44,7 @@
        "tog-shownumberswatching": "放哨有",
        "tog-oldsig": "覽原署名:",
        "tog-fancysig": "署以本碼待之(免自連)",
-       "tog-uselivepreview": "即覽嚐鮮(JavaScript)",
+       "tog-uselivepreview": "即覽嚐鮮",
        "tog-forceeditsummary": "漏概醒之",
        "tog-watchlisthideown": "不哨己文",
        "tog-watchlisthidebots": "不哨僕文",
        "newwindow": "啟窗",
        "cancel": "捨",
        "moredotdotdot": "見逾",
-       "morenotlisted": "示未出之項",
+       "morenotlisted": "列未成。",
        "mypage": "寒舍",
        "mytalk": "書房",
        "anontalk": "與(IP)私議",
        "permalink": "恆通",
        "print": "印",
        "view": "察",
+       "view-foreign": "觀於$1",
        "edit": "纂",
        "create": "立",
        "editthispage": "纂",
        "hidetoc": "藏",
        "collapsible-collapse": "摺",
        "collapsible-expand": "展",
+       "confirmable-confirm": "{{GENDER:$1|汝}}無悔?",
        "confirmable-yes": "是",
        "confirmable-no": "否",
        "thisisdeleted": "還$1或閱之?",
        "missingarticle-diff": "(異:$1,$2)",
        "internalerror": "家誤",
        "internalerror_info": "家誤:$1",
-       "filecopyerror": "\"$1\"謄\"$2\",未可為也。",
+       "filecopyerror": "謄\"$1\"至\"$2\",未可為也。",
        "filerenameerror": "\"$2\"替\"$1\"名,未可為也。",
        "filedeleteerror": "\"$1\"未可刪也。",
        "directorycreateerror": "立目\"$1\",未可為也。",
        "boteditletter": "僕",
        "number_of_watching_users_pageview": "[放有$1哨]",
        "rc_categories_any": "任",
+       "rc-change-size-new": "既纂,本文有$1字節",
        "newsectionsummary": "/* $1 */ 新節",
        "rc-enhanced-expand": "示細(要 JavaScript)",
        "rc-enhanced-hide": "藏細",
        "listfiles_size": "幅(位元組)",
        "listfiles_description": "述",
        "listfiles_count": "擇",
+       "listfiles-latestversion": "今本",
        "listfiles-latestversion-yes": "是",
        "listfiles-latestversion-no": "否",
        "file-anchor-link": "檔",
        "filedelete-reason-dropdown": "\n*常刪之因\n** 侵版權\n** 重檔",
        "filedelete-edit-reasonlist": "纂刪因",
        "filedelete-maintenance": "護當禁刪復檔也。",
+       "filedelete-maintenance-title": "無法刪檔",
        "mimesearch": "篩檔",
        "mimesearch-summary": "此頁可以MIME篩檔.格仿「文類/次類」,如<code>image/jpeg</code>。",
        "mimetype": "MIME類有:",
        "unusedtemplateswlh": "支鏈",
        "randompage": "清風翻書",
        "randompage-nopages": "下列{{PLURAL:$2|名集}}中無頁也:$1",
+       "randomincategory-category": "類:",
        "randomredirect": "任渡",
        "randomredirect-nopages": "「$1」名冊內無渡也。",
        "statistics": "彙統",
        "protectedpages": "頁錮",
        "protectedpages-indef": "只示無期之錮",
        "protectedpages-cascade": "只示連串之錮",
+       "protectedpages-timestamp": "標時章",
        "protectedpages-page": "頁",
        "protectedpages-expiry": "屆期",
        "protectedpages-reason": "因:",
+       "protectedpages-unknown-timestamp": "未知",
        "listusers": "點簿",
        "listusers-editsonly": "只示有纂之簿",
        "listusers-creationsort": "按先後列之",
        "pager-older-n": "陳$1次",
        "suppress": "監",
        "querypage-disabled": "此奇頁基以效,故停之。",
+       "apihelp": "程式接口幫助檔",
        "booksources": "書海",
        "booksources-search-legend": "舀書海",
        "booksources-search": "尋",
        "activeusers-noresult": "無簿矣。",
        "listgrouprights": "權任一覽",
        "listgrouprights-summary": "此所列述,諸職所司也,各有異同。欲知其詳,請閱[[{{MediaWiki:Listgrouprights-helppage}}|此文]]。",
-       "listgrouprights-key": "* <span class=\"listgrouprights-granted\">權授矣</span>\n* <span class=\"listgrouprights-revoked\">權撤矣</span>",
+       "listgrouprights-key": "圖例:\n* <span class=\"listgrouprights-granted\">權授矣</span>\n* <span class=\"listgrouprights-revoked\">權撤矣</span>",
        "listgrouprights-group": "組",
        "listgrouprights-rights": "權",
        "listgrouprights-helppage": "Help:組權",
        "noemailtext": "此君無郵。",
        "nowikiemailtext": "此君謝收郵之。",
        "emailusername": "簿名:",
+       "emailusernamesubmit": "呈",
        "email-legend": "發郵至{{SITENAME}}之另一簿",
        "emailfrom": "自:",
        "emailto": "致:",
        "mywatchlist": "哨站",
        "watchlistfor2": "$1之哨 $2",
        "nowatchlist": "無哨",
-       "watchlistanontext": "$1以治哨",
+       "watchlistanontext": "登簿以治哨",
        "watchnologin": "未登簿",
        "addwatch": "增至哨站",
        "addedwatchtext": "\"[[:$1]]\"哨派矣。後有易、議者可見於[[Special:Watchlist|哨站]],且'''粗體'''列於[[Special:RecentChanges|近易]]。",
        "unblocked-id": "禁$1赦焉",
        "ipblocklist": "列禁簿",
        "ipblocklist-legend": "尋禁簿",
+       "blocklist-reason": "因:",
        "ipblocklist-submit": "尋",
        "ipblocklist-localblock": "本禁",
        "ipblocklist-otherblocks": "他{{PLURAL:$1|禁|禁}}",
        "unblocklink": "赦",
        "change-blocklink": "更",
        "contribslink": "勛",
+       "emaillink": "遣函",
        "autoblocker": "近日$1\"$2\";同子IP址,故禁焉。",
        "blocklogpage": "誌禁",
        "blocklog-showlog": "此簿曾被禁。誌禁示下:",
        "import-invalid-interwiki": "無乃定之wiki匯入。",
        "importlogpage": "誌入",
        "importlogpagetext": "秩入匯自他山之審。",
-       "import-logentry-upload": "[[$1]]上傳而匯",
        "import-logentry-upload-detail": "有審$1",
-       "import-logentry-interwiki": "互匯$1",
        "import-logentry-interwiki-detail": "$1審自$2",
        "tooltip-pt-userpage": "述平生、紹身家、銘字號",
        "tooltip-pt-anonuserpage": "君IP之舍",
        "tooltip-pt-mycontris": "刻勛功、追作續、慰苦勞",
        "tooltip-pt-login": "設書齋、錄功績、廣放哨",
        "tooltip-pt-logout": "凡事盡,乘雲飄",
+       "tooltip-pt-createaccount": "勸君增簿以登,然非必須之舉",
        "tooltip-ca-talk": "求異見、辯是非、妥紛擾",
        "tooltip-ca-edit": "拓文意、校誤謬、潤辭藻",
        "tooltip-ca-addsection": "有言議,添新要",
        "spam_reverting": "還新審之無鏈$1者。",
        "spam_blanking": "審皆鏈$1,遂令白頁。",
        "pageinfo-header-restrictions": "頁錮",
+       "pageinfo-robot-index": "可",
+       "pageinfo-robot-noindex": "不可",
        "pageinfo-toolboxlink": "文訊",
        "markaspatrolleddiff": "派哨",
        "markaspatrolledtext": "哨此報",
        "bydate": "時序",
        "sp-newimages-showfrom": "自$1 $2賞新檔",
        "video-dims": "$1,$2矩$3",
+       "just-now": "方",
+       "hours-ago": "$1時前",
+       "yesterday-at": "昨日於$1",
        "bad_image_list": "僅取表件,冠「*」者也。格式如下:\n\n單列數鏈,首通壞檔;而後所鏈之文,允圖見於其內。",
        "metadata": "補註",
        "metadata-help": "此檔補註,製者所添,如相機、掃描之器;後若更檔,補註不誠也。",
        "version-parser-function-hooks": "語函鈎",
        "version-hook-name": "鈎名",
        "version-hook-subscribedby": "用於",
-       "version-version": "(版 $1)",
+       "version-version": "($1)",
        "version-license": "牌",
        "version-poweredby-credits": "此 Wiki 以 '''[https://www.mediawiki.org/ MediaWiki]''' 之驅,權 © 2001-$1 $2。",
        "version-poweredby-others": "其他",
        "specialpages-group-wiki": "Wiki訊與器",
        "specialpages-group-redirects": "轉之特查",
        "specialpages-group-spam": "反垃圾之器",
+       "specialpages-group-developer": "造紙者之器",
        "blankpage": "白頁",
        "intentionallyblankpage": "此頁為白也,試速之用",
        "external_image_whitelist": " #同留<pre>\n#下(中之//)乃正表式\n#乃外(連)圖配之\n#配乃成像,非配則成連\n#有 # 之為注\n#無為大小之異也\n\n#入正表式。同留</pre>",
        "revdelete-summary": "摘",
        "searchsuggest-search": "尋",
        "pagelang-language": "語",
+       "default-skin-not-found": "嚄!君於<code dir=\"ltr\">$wgDefaultSkin</code>所設之膚無以用也。君所用版本,似需含膚下者也。可於MediaWiki之官網[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之膚庫]安膚些許:\n:* 載下[https://www.mediawiki.org/wiki/Download/lzh 群安之器]。若依此道,則將预安膚與拓器些許。君可謄而貼<code>skins/</code>于焉。\n:* 自[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]獨載下安膚包。\n:* 以git徑謄自<code>mediawiki/skins/*</code>儲物库,至君MediaWiki副本之<code dir=\"ltr\">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 dir=\"ltr\">$3</pre>\n\n; 若君已改<code>LocalSettings.php</code>:\n: 请再查膚名,以保之無誤。",
        "mediastatistics-header-unknown": "未知",
        "mediastatistics-header-video": "映像",
-       "json-error-syntax": "語法有誤"
+       "json-error-syntax": "語法有誤",
+       "special-characters-group-latin": "拉丁字母",
+       "special-characters-group-latinextended": "拉丁擴字",
+       "special-characters-group-ipa": "萬國音標",
+       "special-characters-group-symbols": "符像",
+       "special-characters-group-greek": "希臘字母",
+       "special-characters-group-cyrillic": "西里爾字母",
+       "special-characters-group-arabic": "阿拉伯字母",
+       "special-characters-group-arabicextended": "阿拉伯擴字"
 }
index 081238a..ffa712d 100644 (file)
@@ -20,7 +20,9 @@
                        "아라",
                        "बिप्लब आनन्द",
                        "सरोज कुमार ढकाल",
-                       "Bijay chaurasia"
+                       "Bijay chaurasia",
+                       "Tulsi Bhagat",
+                       "Macofe"
                ]
        },
        "tog-underline": "लिंककेँ रेखांकित करू:",
        "history": "पन्नाक इतिहास",
        "history_short": "इतिहास",
        "updatedmarker": "हमर अन्तिम आगमनसँ पहिने अद्यतन कएल",
-       "printableversion": "पà¥\8dरिà¤\82ट करबा योग्य",
+       "printableversion": "पà¥\8dरिनà¥\8dट करबा योग्य",
        "permalink": "स्थायी लिंक",
        "print": "छापू",
        "view": "देखू",
        "createacct-another-realname-tip": "मूल नाम वैकल्पिक अछि।\nजँ अहाँ एकरा देबा लेल प्रयोग करै छी, ई अहाँकेँ काजक श्रेय देबा लेल एकर प्रयोग कएल जाएत।",
        "pt-login": "सम्प्रवेश",
        "pt-login-button": "सम्प्रवेश",
-       "pt-createaccount": "à¤\96ाता à¤\96à¥\8bलà¥\82",
+       "pt-createaccount": "à¤\96ाता à¤\96à¥\8bलल à¤\9cाà¤\8f",
        "pt-userlogout": "निष्क्रमण",
        "php-mail-error-unknown": "पी.एच.पी.कऽ समाद कार्य() मे अज्ञात दोष भेल।",
        "user-mail-no-addy": "बिन ई-पत्र संकेतक ई-पत्र पठेबाक प्रयास कएल गेल।",
        "recentchangeslinked-summary": "ई विशेष पन्नासँ सम्बद्ध पन्ना सभमे (आकि कोनो विशेष वर्गक समूहमे) भेल परिवर्तनक सूची छी ।\n[[Special:Watchlist|your watchlist]]  पर पन्नासभ '''गाढ़''' अछि।",
        "recentchangeslinked-page": "पन्नाक नाम",
        "recentchangeslinked-to": "देल पन्नाक सम्बन्धी पन्नामे परिवर्तन देखाउ",
-       "upload": "फाà¤\87ल à¤\85पलà¥\8bड à¤\95रà¥\82",
+       "upload": "फाà¤\87ल à¤\85पलà¥\8bड à¤\95रà¥\80",
        "uploadbtn": "फाइल अपलोड",
        "reuploaddesc": "उपारोपण रद्द करू आ उपारोपण आवेदन-पत्रपर घुरू।",
        "upload-tryagain": "संशोधित संचिका वर्णन दिअ",
        "shared-repo-from": "$1 सँ",
        "shared-repo": "एकटा साझी बखारी",
        "shared-repo-name-wikimediacommons": "सामान्य विकीमीडिया",
+       "upload-disallowed-here": "अपने यी फ़ाइलके अधिलेखित नै कैरऽ सकै छि।",
        "filerevert": "$1 लग घुरु",
        "filerevert-legend": "घुराएल संचिका",
        "filerevert-intro": "अहाँ संचिका घुराबैले छी '''[[Media:$1|$1]]''' केँ [$4 संस्करण $3, $2 केँ] लग।",
        "deleteprotected": "अहाँ इ पन्ना नै मेटा सकए छी कियाकि ई सुरक्षण कएल गेल अछि",
        "deleting-backlinks-warning": "'''चेतौनी:''' जे पृष्ठ अहाँ हटावए लेल जा रहल छी वोकरा में  [[Special:WhatLinksHere/{{FULLPAGENAME}}|अन्य पृष्ठ]] जुड़एत अछि अथवा वोकरा ट्रान्सक्ल्युड करएत अछि।",
        "rollback": "प्रत्यावर्तित सम्पादन",
-       "rollback_short": "प्रत्यावर्तन",
        "rollbacklink": "प्रत्यावर्तन",
        "rollbacklinkcount": "$1 {{PLURAL:$1|सम्पादन}} पूर्ववत करू",
        "rollbacklinkcount-morethan": "$1 सँ अधिक {{PLURAL:$1|सम्पादन}} पूर्ववत करू",
        "isimage": "फाइलकऽ जडी",
        "whatlinkshere-prev": "{{PLURAL:$1|पहिलुका|पहिलुका $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|अगुलका|अगुलका $1}}",
-       "whatlinkshere-links": "â\86\90 à¤²à¤¿à¤\82à¤\95",
+       "whatlinkshere-links": "â\86\90 à¤\9cडà¥\80सभ",
        "whatlinkshere-hideredirs": "$1 घुरबैए",
        "whatlinkshere-hidetrans": "$1 परागत",
        "whatlinkshere-hidelinks": "$1 सम्बन्ध सभ",
        "import-error-create": "\"$1\" पन्ना आयातित नै कएल गेल अछि कारण अहाँकेँ एकरा निर्माण करबाक अधिकार नै अछि।",
        "importlogpage": "लॉगक आयात",
        "importlogpagetext": "पन्ना सभक प्रशासनिक आयात दोसर विकीक सम्पादन इतिहासक संग।",
-       "import-logentry-upload": "[[$1]] आयात केलौं संचिका उपारोपण द्वारा",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}}",
-       "import-logentry-interwiki": "विकीअन्तरण क देलौ $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}} $2 सँ",
        "javascripttest": "जावास्क्रिप्ट परिक्षण",
-       "javascripttest-title": "$1 परीक्षण चइल रहल अछि",
        "javascripttest-pagetext-noframework": "इ पृष्ठ जावास्क्रिप्ट परीक्षण चलावए के लेल अछि।",
        "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"",
        "javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचा सभ में सँ एक चुनु: $1",
        "javascripttest-pagetext-skins": "परीक्षण करए के लेल त्वचा चुनु:",
        "javascripttest-qunit-intro": "mediawiki.org पर [$1 परीक्षण के प्रलेखन] देखु।",
-       "javascripttest-qunit-heading": "मेडियाविकि जावास्क्रिप्ट क्यू-युनिट परीक्षण ढाँचा",
        "tooltip-pt-userpage": "अहाँक खेसरा पन्ना",
        "tooltip-pt-anonuserpage": "सम्पाद्न कएल जा रहल स्थानक  अनिकेतक प्रयोक्ता पन्ना",
        "tooltip-pt-mytalk": "अहाँक वार्त्ता पृष्ठ",
        "tooltip-pt-preferences": "हमर मोनपसंद",
        "tooltip-pt-watchlist": "पन्ना सभ जकर परिवर्त्तन पर अहाँक नजरि अछि",
        "tooltip-pt-mycontris": "अहाँक योगदानक सूची",
-       "tooltip-pt-login": "लà¥\89à¤\97 à¤\87न à¤\95रब à¤¨à¥\80à¤\95, à¤ªà¤°à¤\9eà¥\8dà¤\9a à¤\86वशà¥\8dयà¤\95 à¤¨à¤¹à¤¿.",
+       "tooltip-pt-login": "à¤\85हाà¤\81 à¤\95à¥\87à¤\82 à¤\96ाता à¤\96à¥\8bलà¤\95 à¤²à¥\87ल à¤ªà¥\8dरà¥\8bतà¥\8dसाहित à¤\95ल à¤\9cाà¤\8fत à¤\85à¤\9bि; à¤®à¥\81दा à¤\87 à¤\85निवारà¥\8dय à¤¨à¥\88 à¤\9bà¥\88",
        "tooltip-pt-logout": "फेर आयब",
+       "tooltip-pt-createaccount": "अहाँ कें खाता खोलक लेल प्रोत्साहित कल जाएत अछि; मुदा इ अनिवार्य नै छै",
        "tooltip-ca-talk": "विषयसूचीक पन्नाक संबंधमे वर्त्तालाप",
        "tooltip-ca-edit": "अहाँ एहि पन्नाकेँ संपादित कए सकैत छी। कृपया सुरक्षित करबासँ पहिने पूर्वप्रदर्शन बटम उपयोग करू।",
        "tooltip-ca-addsection": "नव खण्ड शुरू करू",
        "tooltip-n-currentevents": "लगक घटनाक विषयमे आधार सूचना प्राप्त करू।",
        "tooltip-n-recentchanges": "विकीमे लगक परिवर्त्तनक सूची.",
        "tooltip-n-randompage": "कोनो अनिर्धारित पन्ना लोड करू",
-       "tooltip-n-help": "पà¥\8dरापà¥\8dत à¤\95रबाà¤\95 à¤¸à¥\8dथान.",
+       "tooltip-n-help": "पता à¤²à¤\97ावà¤\8f à¤µà¤¾à¤²à¤¾ à¤¸à¥\8dथान",
        "tooltip-t-whatlinkshere": "सभ विकी-पन्नाक सूची जकर एतय लिंक अछि",
        "tooltip-t-recentchangeslinked": "ऐ पृष्ठक लागिक पन्नामे भेल नव परिवर्तन",
        "tooltip-feed-rss": "ऐ पन्ना लेल आर.एस.एस. सूचना",
        "tooltip-t-contributions": "ऐ प्रयोक्ताक योगदानक सूची देखू",
        "tooltip-t-emailuser": "ऐ प्रयोक्ताकेँ ई-पत्र पठाउ",
        "tooltip-t-info": "ई पृष्ठ के सम्बन्धमें आर बैंसी जानकारी",
-       "tooltip-t-upload": "à¤\9aितà¥\8dर à¤\86à¤\95ि à¤®à¥\80डिया à¤«à¤¾à¤\87लà¤\95à¥\87à¤\81 à¤\85पलà¥\8bड à¤\95रà¥\82",
+       "tooltip-t-upload": "à¤\9aितà¥\8dर à¤\86à¤\95ि à¤®à¥\80डिया à¤«à¤¾à¤\87लà¤\95à¥\87à¤\81 à¤\85पलà¥\8bड à¤\95रà¥\80",
        "tooltip-t-specialpages": "सभटा विशेष पन्नाक सूची",
        "tooltip-t-print": "ऐ पृष्ठक छपैबला रूप",
        "tooltip-t-permalink": "पन्नाक ऐ संवर्धनक स्थायी लिंक",
        "spambot_username": "मीडियाविकी अनिष्ट संकेत सफाइ",
        "spam_reverting": "अन्तिम संशोधन लग घुरल जइमे $1 लागि नै अछि",
        "spam_blanking": "सभटा संशोधन $1 लागिसँ युक्त अि, खतम कऽ रहल छी",
+       "simpleantispam-label": "ऐन्टी-स्पैम जाँच।\nयी मऽ <strong>नै</strong> भरु!",
        "pageinfo-title": "\"$1\"पृष्ठक लेल नब गप",
        "pageinfo-header-basic": "न्यूनतम जानकारी",
        "pageinfo-header-edits": "संपादन",
        "exif-datetime": "संचिका परिवर्तन तिथि आ समए",
        "exif-imagedescription": "चित्र शीर्षक",
        "exif-make": "कैमरा निर्माता",
-       "exif-model": "à¤\95à¥\88मरा à¤®à¥\89डल",
+       "exif-model": "à¤\95à¥\88मरा à¤®à¥\8bडल",
        "exif-software": "प्रयुक्त तंत्रांश",
        "exif-artist": "लिखैबला",
        "exif-copyright": "सर्वाधिकारी",
        "version-parser-function-hooks": "विभाजक प्रकार्य खुट्टी",
        "version-hook-name": "खुट्टीक नाम",
        "version-hook-subscribedby": "ई सदस्यता लेलनि",
-       "version-version": "(संस्करण $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[कोनो नाम नै]",
        "version-license": "अधिकार",
        "version-ext-license": "अधिकार",
        "logentry-newusers-create": "$1 {{लिंग:$2|बनाएल}} एकटा प्रयोक्ता खाता",
        "logentry-newusers-create2": "$1 {{लिंग:$2|बनाएल}} {{लिंग:$4|एकटा प्रयोक्ता खाता}} $3",
        "logentry-newusers-autocreate": "खाता $1 छल {{लिंग:$2|बनाएल}} स्वतः",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ए}} $3 अपलोड केलक",
        "rightsnone": "(कोनो नै)",
        "revdelete-summary": "सम्पादन सारांश",
-       "feedback-subject": "विषय:",
-       "feedback-message": "संदेश:",
-       "feedback-cancel": "रद्द करु",
-       "feedback-submit": "प्रतिक्रिया भेजु",
        "feedback-adding": "पन्ना उपर प्रतिक्रिया जोडु ...",
-       "feedback-error2": "त्रुटि: संपादन विफल भेल",
-       "feedback-close": "भ गेल",
        "feedback-bugcheck": "बहुत निक! जांच करु कि [ $1 known bugs] पहिले स त नै अछि ।",
+       "feedback-cancel": "रद्द करु",
+       "feedback-close": "भ गेल",
+       "feedback-error2": "त्रुटि: संपादन विफल भेल",
+       "feedback-message": "संदेश:",
+       "feedback-subject": "विषय:",
+       "feedback-submit": "दिअ",
        "searchsuggest-search": "ताकू",
        "searchsuggest-containing": "...सऽ युक्त",
        "api-error-badaccess-groups": "अहि विकी सें अहां कोनो प्रारूप लोड नहि क सकब.",
index 3307c93..46f6d38 100644 (file)
        "delete-toobig": "Тя лопать кувака петнемань историясь, $1 {{PLURAL:$1|верзиеда|верзиеда}} лама. Тяфтама лопатнень нардамась кардаф {{SITENAME}}-нь уф учсеви колавомада араламать туфталонкса.",
        "delete-warning-toobig": "Тя лопать кувака петнемань историясь, $1 {{PLURAL:$1|верзиеда|верзиеда}} лама. Сонь нардамаста, улема, лиси {{SITENAME}}-нь датабаза якаманц колавомась; тик тянь инголе арьсезь.",
        "rollback": "Потафтомс петнематне",
-       "rollback_short": "Потафтома",
        "rollbacklink": "потафтомс",
        "rollbackfailed": "Потафтомась изь лисе",
        "cantrollback": "Аш кода петнемать потафтомс; мекольце путысь ульсь тя лопать анцек фкя тиикс.",
        "watchlisttools-view": "Няфтемс полафнематне лувомастонь лопапотмова",
        "watchlisttools-edit": "Няфтемс эди петнемс мельгеваномать",
        "watchlisttools-raw": "Петнемс казяма мельгеваномать",
-       "unknown_extension_tag": "Аф содаф келептема тяштькссь \"$1\"",
        "duplicate-defaultsort": "Инголе мярьгома: Апак полафтт сортонь панжема \"$2\" апак полафтт сортонь панжема \"$1\"да вяре.",
        "version": "MediaWiki-ть верзиец",
        "version-extensions": "Нолдаф тевс келепнематне",
        "version-parser-function-hooks": "Синтаксонь анализаторть функциензон кярьмодихне",
        "version-hook-name": "Кярьмодинь лемоц",
        "version-hook-subscribedby": "Сёрматфтсь",
-       "version-version": "(Верзие $1)",
+       "version-version": "($1)",
        "version-license": "Лицензие",
        "version-software": "Нолдаф програпне",
        "version-software-product": "Нолдафкс",
index 7099fd6..8f39d3d 100644 (file)
@@ -7,7 +7,8 @@
                        "The Evil IP address",
                        "Urhixidur",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Hanipika ny rohy:",
        "pool-queuefull": "Feno ny lisitry ny asa hatao",
        "pool-errorunknown": "Tsi-fetezana tsy fantatra",
        "pool-servererror": "Tsy mandeha ny rahraha fanisana ($1).",
+       "poolcounter-usage-error": "Hadisoam-pampiasana : $1",
        "aboutsite": "Mombamomba ny {{SITENAME}}",
        "aboutpage": "Project:Mombamomba",
        "copyright": "Ny lisansa $1 no mamehy ny fampiasana ity voatoatiny ity.",
        "viewyourtext": "Azonao atao ny mijery ary mandika ny fangon'ny '''fanovanao''' tamin'ity pejy ity:",
        "protectedinterface": "Ity pejy ity dia manome ny lahatsoratra ho an'ny rindrankajy eto amin'ity Wiki ity, ary narovana mba tsy hisian'ny fanararaotana. Raha tia hanampy na hanova ny dikanteny ho an'ny wiki rehetra, ampiasao [//translatewiki.net/ translatewiki.net], izay tetikasa fandikanan ny rindrankajy Mediawiki.",
        "editinginterface": "<strong> Fampitandremana: <strong> manova pejy ampiasaina amin'ny famoronan-tsoratry ny rindrankajy ianao. Hisy fiatraika amin'ny fisehon'ny interfasim-pikambana ho an'ny mpikambana hafan'ity wiki ity ny fiovana ho atao.",
+       "translateinterface": "Mba hanampy na hanova dikanteny ho an'ny wiki rehetra, dia ampiasao  [//translatewiki.net/ translatewiki.net], na ny tetikasa fandikana Mediawiki.",
        "cascadeprotected": "Ankehitriny dia voaaro ity pejy ity satria misy pejy voaaro {{PLURAL:$1||$1}}1 mampiasa ity pejy ity. Io pejy io dia mampiasa ny fiarovana \"en cascade\" :\n\n$2",
        "namespaceprotected": "Tsy manana alalàna manova ny toeran'anarana « '''$1''' » ianao.",
        "customcssprotected": "Tsy afaka manova ity pejy CSS ity ianao satria misy ny safidy manokan'ny mpikambana hafa.",
        "prefs-personal": "Mombamomba anao",
        "prefs-rc": "Vao niova",
        "prefs-watchlist": "Lisitry ny pejy arahana-maso",
+       "prefs-editwatchlist": "Hanova ny lisitry ny pejy arahana",
+       "prefs-editwatchlist-label": "Hanova ny iditry ny lisitra arahanao",
+       "prefs-editwatchlist-edit": "Hijery na hanala lohateny ao amin'ny lisitra arahanao",
+       "prefs-editwatchlist-raw": "Hanova ny lisitra arahana amin'ny fomba manta",
+       "prefs-editwatchlist-clear": "Handio ny lisitra arahanao",
        "prefs-watchlist-days": "Isa ny andro haseho anatin'ny lisitra ny pejy arahana-maso",
        "prefs-watchlist-days-max": "$1 {{PLURAL:$1|}} andro farafahabetsany",
        "prefs-watchlist-edits": "Isa ny fanovana aseho eo amin'ny fanaraha-maso navelatra:",
        "recentchangesdays-max": "($1 andro{{PLURAL:$1||}} fara-faha betsany)",
        "recentchangescount": "Isan'ny fanovana haseho (tsipalotra) :",
        "prefs-help-recentchangescount": "Misy ny fiovana farany, ny tantaram-pejy ary ny laogy",
+       "prefs-help-watchlist-token2": "Ity ny lakilen'ny topaka Web ny lisitra arahanao. Afaka mamangy ny lisitra arahanao izay mahalala io lakileo io, ka aza zarazaraina ilay izy. Raha ilainao izany dia afaka [[Special:ResetTokens|manavao izy io ianao]]",
        "savedprefs": "Voatahiry ny mombamomba anao.",
        "timezonelegend": "Faritr'ora :",
        "localtime": "Ora an-toerana",
        "prefs-diffs": "Diff",
        "prefs-help-prefershttps": "Hihatra amin'ny fidiranao manaraka ity safidy ity.",
        "prefswarning-warning": "Efa nanova tamin'ny safidinao tsy mbola voatahiry ianao. Raha miala amin'ity pejy ity amin'ny alalan'ny fanindriana an'i \"$1\" ianao dia tsy ho voavao ny safidinao.",
+       "prefs-tabs-navigation-hint": "Torohevitra: afaka mampiasa ny zana-tsipika havia ary havanana ianao ho an'ny fitetezana ny vakizoro ao amin'ny lisi-bakizoro",
        "email-address-validity-valid": "Adiresy imailaka mameno fepetra",
        "email-address-validity-invalid": "Ilaina ny mametraka adiresy imailaka mameno fepetra",
        "userrights": "Fandrindràna ny fahefahan'ny mpikambana",
        "right-override-export-depth": "Mamoaka ny pejy miaraka amin'ny zana-pejy hatramin'ny ambaratonga fahadimy",
        "right-sendemail": "Mandefa imailaka any amin'ny mpikambana hafa",
        "right-passwordreset": "Hijery ny imailaka famerenana ny tenimiafina",
+       "right-managechangetags": "Mamorona ary mamafa [[Special:Tags|balizy]] ao amin'ny banky angona",
        "newuserlogpage": "Laogim-panokafana kaontim-pikambana",
        "newuserlogpagetext": "Ity pejy ity dia maneho ny tantaran'asan'ny fampidirana mpikambana vaovao.",
        "rightslog": "Laogim-piovan'ny zom-pikambana",
        "action-viewmyprivateinfo": "Mijery ny fampahalalana tsy sarababem-bahoakanao",
        "action-editmyprivateinfo": "Mijery ny fampahalalana sarababem-bahoakanao",
        "action-editcontentmodel": "manova ny modelim-botoatin'ny pejy",
+       "action-managechangetags": "hamorona ary hamafa balizy ao amin'ny banky angona",
        "nchanges": "{{PLURAL:$1|fanovana|fanovana}} $1",
        "enhancedrc-since-last-visit": "$1 ({{PLURAL:$1|hatry ny famangiana farany}})",
        "enhancedrc-history": "tantara",
        "uploaddisabledtext": "Tsy afaka andefasana rakitra aloha eto amin'ity wiki ity.",
        "php-uploaddisabledtext": "Ny fampidiran-drakitra dia tsy ampiasaina amin'ny PHP.\nMarino ny option configuration file_uploads.",
        "uploadscripted": "\nMisy kialo HTML na fango script mety tsy ho hain'ny navigateur sasany haseho ity rakitra ity.",
+       "uploadscriptednamespace": "ahitana valan'anarana \"$1\" ny rakitra SVG.",
        "uploadinvalidxml": "Tsy afaka vakiana ny XML tao anatin'ilay rakitra nafaranao.",
        "uploadvirus": "Misy viriosy io rakitra io! Toy izao ny antsipirihany: $1",
        "uploadjava": "Ny rakitra dia rakitra ZIP ahitana rakitra .class Java.\nVoarara ny mandefa rakitra Java satria mety hahavaky ny fepetra mikasika ny antoka ireo rakitra ireo.",
        "backend-fail-readonly": "Amin'izao fotoana dia famakiana ihany ny fitahirizana terminal an'i \"$1\". \"''$2''\" no antony nomena",
        "backend-fail-connect": "Tsy afaka mifandray amin'ny terminal fitahirizana \"$1\".",
        "backend-fail-internal": "Hadisoana tsy fantatra tao anatin'ny terminal fitahirizana \"$1\".",
+       "backend-fail-contenttype": "Tsy afaka maminavina ny karazam-botoatin'ny rakitra hotahirizina ao amin'i \"$1\".",
        "backend-fail-usable": "Tsy afaka nanoratra ny rakitra \"$1\" nohon'ny zo tsy ampy na ny tsy fisian'ny petra-drakitra.",
        "filejournal-fail-dbconnect": "Tsy afaka miantso ilay banky angona laogy ho an'ny terminal fitahirizana \"$1\".",
        "filejournal-fail-dbquery": "Tsy afaka manavao ny banky angona laogy ho an'ilay terminal fitahirizana \"$1\".",
        "import-rootpage-invalid": "Lohateny tsy azo raisina ny foto-pejy nomenao:",
        "importlogpage": "laogin'ny fampidirana",
        "importlogpagetext": "Fampidirana ara-pandraharahana ny pejy miaraka amin'ny tantaram-panvany avy any amin'ny wiki hafa.",
-       "import-logentry-upload": "nampiditra [[$1]] tamin'ny fampidiran-drakitra",
-       "import-logentry-interwiki": "nampiditra $1 tamin'ny transwiki",
        "javascripttest": "Fanandramana JavaScript",
        "javascripttest-pagetext-skins": "Mifidia skin hanaovana ny fanandramana:",
        "javascripttest-qunit-intro": "Jereo ny [$1 fanoroana mikasika ny andrana] eo amin'i mediawiki.org.",
        "logentry-rights-autopromote": "{{GENDER:$2}}Lasa $5 ho azy i $1 izay $4 taloha",
        "rightsnone": "(tsy misy)",
        "revdelete-summary": "ambangovangon'ny fanovàna",
-       "feedback-subject": "Lohahevitra:",
-       "feedback-message": "Hafatra:",
-       "feedback-cancel": "Foanana",
-       "feedback-submit": "Handefa ny fanehoan-kevitra",
        "feedback-adding": "Manampy ny fahenoan-kevitra amin'ilay pejy...",
+       "feedback-bugnew": "Efa nomariniko. Hitory baogy iray",
+       "feedback-cancel": "Foanana",
+       "feedback-close": "Vita",
        "feedback-error1": "Hadisoana: Valiny avy amin'ny API tsy fantatra",
        "feedback-error2": "Hadisoana: Tsy voaòva",
        "feedback-error3": "Hadisoana: Tsy nisy valiny avy amin'ny API",
+       "feedback-message": "Hafatra:",
+       "feedback-subject": "Lohahevitra:",
+       "feedback-submit": "Alefa",
        "feedback-thanks": "Misaotra! lanefa tany amin'ilay pejy ''[$2 $1]'' ilay fanehoan-kevitrao.",
-       "feedback-close": "Vita",
-       "feedback-bugnew": "Efa nomariniko. Hitory baogy iray",
        "searchsuggest-search": "Karohy",
        "searchsuggest-containing": "misy...",
        "api-error-badaccess-groups": "Tsy afaka mampiditra rakitra eto amin'ity wiki ity ianao.",
        "api-error-unknown-warning": "Fampitandremana tsy fantatra : ''$1''.",
        "api-error-unknownerror": "Hadisoana tsy fantatra : ''$1''.",
        "api-error-uploaddisabled": "Tsy alefa eto amin'ity wiki ity ny fandefasan-drakita.",
-       "api-error-verification-error": "Mety tapaka ity rakitra ity, na diso tovan-drakitra."
+       "api-error-verification-error": "Mety tapaka ity rakitra ity, na diso tovan-drakitra.",
+       "special-characters-group-latin": "latina",
+       "special-characters-group-latinextended": "latina nitarina",
+       "special-characters-group-ipa": "AAI",
+       "special-characters-group-symbols": "eva",
+       "special-characters-group-greek": "grika",
+       "special-characters-group-cyrillic": "sirilika",
+       "special-characters-group-arabic": "arabo",
+       "special-characters-group-arabicextended": "arabo nitarina",
+       "special-characters-group-persian": "persàna",
+       "special-characters-group-hebrew": "ebreo",
+       "special-characters-group-bangla": "bengali",
+       "special-characters-group-tamil": "tamily",
+       "special-characters-group-telugu": "telogo",
+       "special-characters-group-sinhala": "singalesa",
+       "special-characters-group-gujarati": "gojaraty",
+       "special-characters-group-devanagari": "devanagari",
+       "special-characters-group-thai": "tailandey",
+       "special-characters-group-lao": "laôsianina",
+       "special-characters-group-khmer": "kimera",
+       "special-characters-title-endash": "tsipika anglisy",
+       "special-characters-title-emdash": "tsipika em",
+       "special-characters-title-minus": "marika mainosy"
 }
index 5811a61..e63929f 100644 (file)
        "youhavenewmessagesmanyusers": "Sanak mandapek $1 dari banyak pangguno ($2)",
        "newmessageslinkplural": "{{PLURAL:$1|pasan baru}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|parubahan}} taakhia",
-       "youhavenewmessagesmulti": "Sanak mandapek pasan baru pado $1",
+       "youhavenewmessagesmulti": "Sanak ado pasan baru pado $1",
        "editsection": "suntiang",
        "editold": "suntiang",
        "viewsourceold": "caliak sumber",
        "login-abort-generic": "Proses masuak Sanak indak barasil - Dibatalan",
        "loginlanguagelabel": "Baso: $1",
        "suspicious-userlogout": "Pamintaan Sanak untuak kalua log ditulak karano tampaknyo dikirim oleh paramban nan rusak atau proksi panyinggah.",
+       "pt-userlogout": "Kalua log",
        "php-mail-error-unknown": "Kasalahan nan indak jaleh dalam fungsi mail() PHP",
        "user-mail-no-addy": "Mancubo mangirim surel tanpa alamaik surel.",
        "user-mail-no-body": "Mancubo mangirim surel kosong atau pasan talalu pendek",
        "deleteotherreason": "Alasan lain/tambahan:",
        "deletereasonotherlist": "Alasan lain",
        "rollback": "Baliakan suntiangan",
-       "rollback_short": "Baliakan",
        "rollbacklink": "baliakan",
        "rollbacklinkcount": "baliakan $1 {{PLURAL:$1|suntiangan}}",
        "rollbacklinkcount-morethan": "baliakan labiah dari $1 {{PLURAL:$1|suntiangan}}",
        "watchlisttools-edit": "Tunjuakan sarato suntiang daftar pantau",
        "watchlisttools-raw": "Suntiang pantauan mantah",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|maota]])",
-       "unknown_extension_tag": "Tag ekstensi \"$1\" indak tau",
        "duplicate-defaultsort": "'''Peringatan:''' Kunci panguruitan default \"$2\" sabalunnyo mangabaikan kunci panguruitan default \"$1\".",
        "version": "Versi",
        "version-extensions": "Ekstensi tarinstal",
        "version-variables": "Variabel",
        "version-antispam": "Pancagahan spam",
        "version-other": "Lain-lain",
-       "version-version": "(Versi $1)",
+       "version-version": "($1)",
        "version-license": "Lisensi",
        "version-poweredby-credits": "Wiki ko didukuang jo '''[https://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
        "version-poweredby-others": "lainnyo",
index d57efe7..da7d2e9 100644 (file)
@@ -15,7 +15,8 @@
                        "Urhixidur",
                        "לערי ריינהארט",
                        "아라",
-                       "Milicevic01"
+                       "Milicevic01",
+                       "Macofe"
                ]
        },
        "tog-underline": "Потцртување на врски:",
        "disclaimers": "Услови на употреба",
        "disclaimerpage": "Project:Услови на употреба",
        "edithelp": "Помош за уредување",
+       "helppage-top-gethelp": "Помош",
        "mainpage": "Главна страница",
        "mainpage-description": "Главна страница",
        "policy-url": "Project:Начела",
        "readonly_lag": "Базата е автоматски заклучена додека помошните опслужувачи не се усогласат",
        "internalerror": "Внатрешна грешка",
        "internalerror_info": "Внатрешна грешка: $1",
+       "internalerror-fatal-exception": "Кобен исклучок на типот „$1“",
        "filecopyerror": "Не можeв да ја ископирам податотеката „$1“ во „$2“.",
        "filerenameerror": "Не можев да ја преименувам податотеката „$1“ во „$2“.",
        "filedeleteerror": "Не може да се избрише податотеката „$1“.",
        "wrongpassword": "Внесовте погрешна лозинка. Обидете се повторно.",
        "wrongpasswordempty": "Внесената лозинка е празна. Обидете се повторно.",
        "passwordtooshort": "Лозинката мора да има најмалку {{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-адреса е автоматски блокирана бидејќи била користена од страна на друг корисник, кој бил блокиран од $1.\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, a ID на блокирањеto е $5.\nВе молиме наведете ги овие подробности доколку реагирате на блокирањето.",
        "notextmatches": "Ниеден текст во статиите не одговара",
        "prevn": "{{PLURAL:$1|претходна $1| претходни $1}}",
        "nextn": "{{PLURAL:следна $1|следни $1}}",
+       "prev-page": "претходна страница",
+       "next-page": "следна страница",
        "prevn-title": "{{PLURAL:$1|Претходен|Претходни}} $1 {{PLURAL:$1|резултат|резултати}}",
        "nextn-title": "{{PLURAL:$1|Следен|Следни}} $1 {{PLURAL:$1|резултат|резултати}}",
        "shown-title": "Прикажи $1 {{PLURAL:$1|резултат|резултати}} на страница",
        "unusedimages": "Неискористени слики",
        "wantedcategories": "Потребни категории",
        "wantedpages": "Потребни страници",
+       "wantedpages-summary": "Список на непостоечки страници со највеќе врски што водат до нив, исклучувајќи страниците до кои водат само пренасочувања. Список на непостоечки страници до кои водат пренасочувања ќе најдете на [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Невалиден наслов во резултатите: $1",
        "wantedfiles": "Потребни податотеки",
        "wantedfiletext-cat": "Следниве податотеки се користат, но не постојат. Податотеките од други складишта може да се наведени дури и ако постојат. Таквите ќе бидат <del>поништени</del> од списокот. Покрај ова, страниците што содржат податотеки кои не постојат се наведени на [[:$1]].",
        "linksearch-error": "Џокер-знаците може да се користат само на почетокот во името на домаќинот.",
        "listusersfrom": "Прикажи корисници почнувајќи од:",
        "listusers-submit": "Прикажи",
-       "listusers-noresult": "Ð\9dе Ðµ Ð¿Ñ\80онаÑ\98ден корисник.",
+       "listusers-noresult": "Ð\9dе Ð¿Ñ\80онаÑ\98дов Ð½Ð¸Ðµден корисник.",
        "listusers-blocked": "(блокиран)",
        "activeusers": "Список на активни корисници",
        "activeusers-intro": "Ова е список на корисници кои биле на некој начин активни во последните {{PLURAL:$1|еден ден|$1 дена}}.",
        "activeusers-from": "Прикажи корисници почнувајќи од:",
        "activeusers-hidebots": "Скриј ботови",
        "activeusers-hidesysops": "Скриј администратори",
-       "activeusers-noresult": "Нема пронајдено корисници.",
+       "activeusers-noresult": "Не пронајдов ниеден корисник.",
        "listgrouprights": "Права на кориснички групи",
        "listgrouprights-summary": "Следи список на кориснички групи утврдени на ова вики, заедно со нивните придружни права на пристап.\nМожно е да има [[{{MediaWiki:Listgrouprights-helppage}}|дополнителни информации]] за некои права.",
        "listgrouprights-key": "Легенда:\n* <span class=\"listgrouprights-granted\">Доделено право</span>\n* <span class=\"listgrouprights-revoked\">Одземено право</span>",
        "emailccsubject": "Копија од вашата порака до $1: $2",
        "emailsent": "Писмото е испратено",
        "emailsenttext": "Писмото е испратено.",
-       "emailuserfooter": "Оваа е-порака беше пратена од $1 до $2 со помош на функцијата Е-пошта на {{SITENAME}}.",
+       "emailuserfooter": "$1 го испрати писмово на $2 со помош на функцијата „{{int:emailpage}}“ на {{SITENAME}}.",
        "usermessage-summary": "Оставете системска порака.",
        "usermessage-editor": "Системски гласник",
        "watchlist": "набљудувања",
        "thumbnail_image-missing": "Изгледа дека податотеката недостасува: $1",
        "thumbnail_image-failure-limit": "Направив премногу обиди ($1 или повеќе) за да ја прикажам минијатурава. Обидете се подоцна.",
        "import": "Увезување на страници",
-       "importinterwiki": "Ð\9cеÑ\93Ñ\83вики Ñ\83воз",
-       "import-interwiki-text": "Избери вики и наслов на страница за увоз.\nДатумите и имињата на уредниците ќе бидат зачувани.\nСите постапки при увозот од другото вики се заведуваат во [[Special:Log/import|дневникот на увезувања]].",
+       "importinterwiki": "Увези Ð¾Ð´ Ð´Ñ\80Ñ\83го Ð²Ð¸ÐºÐ¸",
+       "import-interwiki-text": "Избери вики и наслов на страница за увоз.\nДатумите и имињата на уредниците ќе бидат зачувани.\nСите увози од други викија се заведуваат во [[Special:Log/import|дневникот на увезувања]].",
        "import-interwiki-sourcewiki": "Изворно вики:",
        "import-interwiki-sourcepage": "Изворна страница:",
        "import-interwiki-history": "Копирај ги сите постари верзии за оваа страница",
        "importcantopen": "Не може да се отвори увезената податотека",
        "importbadinterwiki": "Лоша меѓувики-врска",
        "importsuccess": "Увезувањето е завршено!",
-       "importnosources": "Ð\9dема Ð¾Ð¿Ñ\80еделено Ð¼ÐµÑ\93Ñ\83вики-извоÑ\80и Ð·Ð° увоз и непосредните подигања на историја се оневозможени.",
+       "importnosources": "Ð\9dема Ð²Ð¸ÐºÐ¸Ñ\98а Ð¾Ð´ ÐºÐ¾Ð¸ Ð±Ð¸ Ñ\81е Ð¸Ð·Ð²Ñ\80Ñ\88ил увоз и непосредните подигања на историја се оневозможени.",
        "importnofile": "Нема подигнато увозна податотека.",
        "importuploaderrorsize": "Подигањето на увозната податотека не успеа.\nПодатотеката ја надминува допуштената големина.",
        "importuploaderrorpartial": "Подигањето на увозна податотека не успеа.\nПодатотеката е само делумно подигната.",
        "import-rootpage-nosubpage": "Именскиот простор „$1“ на основната страница не допушта потстраници.",
        "importlogpage": "Дневник на увезувања",
        "importlogpagetext": "Административно увезување на страници со историја на уредување од други викија.",
-       "import-logentry-upload": "увезена [[$1]] со подигање на податотека",
        "import-logentry-upload-detail": "{{PLURAL:$1|Увезена е една преработка|Увезени се $1 преработки}}",
-       "import-logentry-interwiki": "трансвикифиран $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Увезена е една преработка|Увезени се $1 преработки}} од $2",
        "javascripttest": "Проба на JavaScript",
        "javascripttest-pagetext-noframework": "Оваа страница е резервирана за вршење на проби со JavaScript.",
        "pageinfo-header-properties": "Својства на страницата",
        "pageinfo-display-title": "Наслов за приказ",
        "pageinfo-default-sort": "Основен подредбен клуч",
-       "pageinfo-length": "Ð\94олжина на страницата (во бајти)",
+       "pageinfo-length": "Ð\93олемина на страницата (во бајти)",
        "pageinfo-article-id": "Назнака на страницата",
        "pageinfo-language": "Јазик на содржината на страницата",
        "pageinfo-content-model": "Модел на содржината на страницата",
        "version-parser-function-hooks": "Куки на расчленувачки функции",
        "version-hook-name": "Име на кука",
        "version-hook-subscribedby": "Претплатено од",
-       "version-version": "(Верзија $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[нема име]",
        "version-svn-revision": "прер. $1",
        "version-license": "Лиценца на МедијаВики",
        "revdelete-uname-unhid": "корисничкото име е скриено",
        "revdelete-restricted": "применети ограничувања на администратори",
        "revdelete-unrestricted": "отстранети ограничувања за систем оператори",
+       "logentry-block-block": "$1 {{GENDER:$2|го блокираше}} корисникот {{GENDER:$4|$3}} со истек $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|го блокираше}} корисникот {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|го измени}} блокот на {{GENDER:$4|$3}} со истек $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|го блокираше}} {{GENDER:$4|$3}} со истек $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|го измени}} блокот на {{GENDER:$4|$3}} со истек $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|ја увезе}} $3 со податотечно подигање",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|ја увезе}} $3 од друго вики",
        "logentry-merge-merge": "$1 {{GENDER:$2|ја припои}} $3 кон $4 (преработки сè до $5)",
        "logentry-move-move": "$1 {{GENDER:$2|ја премести}} страницата $3 на $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ја премести}} страницата $3 на $4 без да остави пренасочување",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|ја деактивираше}} ознаката „$4“ за употреба од корисници и ботови",
        "rightsnone": "(нема)",
        "revdelete-summary": "опис на уредување",
+       "feedback-adding": "Го додавам искажаното мислење во страницата...",
+       "feedback-back": "Назад",
+       "feedback-bugcheck": "Одлично! Само проверете да не е една од [$1 веќе познатите грешки].",
+       "feedback-bugnew": "Проверив. Пријави ја како нова грешка.",
        "feedback-bugornote": "Ако сте спремни подробно да го опишете техничкиот проблем, тогаш [$1 пријавете грешка]. \nВо спротивно, послужете се со едноставниот образец подолу. Вашиот коментар ќе стои на страницата „[$3 $2]“, заедно со корисничкото име и прелистувачот што го користите.",
-       "feedback-subject": "Наслов:",
-       "feedback-message": "Порака:",
        "feedback-cancel": "Откажи",
-       "feedback-submit": "Поднеси мислење",
-       "feedback-adding": "Го додавам искажаното мислење во страницата...",
+       "feedback-close": "Готово",
+       "feedback-external-bug-report-button": "Поднеси техничка задача",
+       "feedback-dialog-title": "Поднеси мислење",
+       "feedback-dialog-intro": "Послужете се со едноставниот образец подолу за да го поднесете вашето мислење. Коментарот ќе ви биде додаден на страницата „$1“, заедно со вашето корисничко име.",
+       "feedback-error-title": "Грешка",
        "feedback-error1": "Грешка: Непрепознаен резултат од извршникот",
        "feedback-error2": "Грешка: Уредувањето не успеа",
        "feedback-error3": "Грешка: Извршникот не одговара",
+       "feedback-error4": "Грешка: Не можам да објавам под дадениот наслов",
+       "feedback-message": "Порака:",
+       "feedback-subject": "Наслов:",
+       "feedback-submit": "Поднеси",
+       "feedback-terms": "Разбирам дека моите информации за кориснички вршител вклучуваат податоци за точната верзија на прелистувачот и оператиниот систем и дека истите ќе бидат јавно прикажани заедно со моето мислење.",
+       "feedback-termsofuse": "Се согласувам да давам мислење во склад со Условите на употреба.",
        "feedback-thanks": "Благодариме! Вашиот одѕив е објавен на страницата „[$2 $1]“.",
-       "feedback-close": "Готово",
-       "feedback-bugcheck": "Одлично! Само проверете да не е една од [$1 веќе познатите грешки].",
-       "feedback-bugnew": "Проверив. Пријави ја како нова грешка.",
+       "feedback-thanks-title": "Ви благодариме!",
+       "feedback-useragent": "Кориснички вршител:",
        "searchsuggest-search": "Пребарување",
        "searchsuggest-containing": "содржи...",
        "api-error-badaccess-groups": "Не ви е дозволено да подигате податотеки на ова вики.",
        "json-error-utf8": "Неисправно срочени UTF-8-знаци. Може да се неисправно кодирани",
        "json-error-recursion": "Има една или повеќе повторниви наводи во вредноста што треба да се кодираат",
        "json-error-inf-or-nan": "Има една или повеќе NAN- или INF-вредности што треба да се кодираат",
-       "json-error-unsupported-type": "Зададена е вредност од тип што не може да се кодира"
+       "json-error-unsupported-type": "Зададена е вредност од тип што не може да се кодира",
+       "headline-anchor-title": "Врска до поднасловов",
+       "special-characters-group-latin": "Латиница",
+       "special-characters-group-latinextended": "Латиница-проширено",
+       "special-characters-group-ipa": "МФА",
+       "special-characters-group-symbols": "Симболи",
+       "special-characters-group-greek": "Грчки",
+       "special-characters-group-cyrillic": "Кирилица",
+       "special-characters-group-arabic": "Арапски",
+       "special-characters-group-arabicextended": "Арапски-проширено",
+       "special-characters-group-persian": "персиски",
+       "special-characters-group-hebrew": "Хебрејски",
+       "special-characters-group-bangla": "Бенгалски",
+       "special-characters-group-tamil": "тамилски",
+       "special-characters-group-telugu": "Телугу",
+       "special-characters-group-sinhala": "Синхалски",
+       "special-characters-group-gujarati": "Гуџарати",
+       "special-characters-group-devanagari": "деванагари",
+       "special-characters-group-thai": "Тајландски",
+       "special-characters-group-lao": "Лаошки",
+       "special-characters-group-khmer": "Кмерски",
+       "special-characters-title-endash": "цртичка",
+       "special-characters-title-emdash": "тире",
+       "special-characters-title-minus": "минус"
 }
index f3c3f3d..1c560f3 100644 (file)
        "disclaimers": "നിരാകരണങ്ങൾ",
        "disclaimerpage": "Project:പൊതുനിരാകരണം",
        "edithelp": "തിരുത്തൽ സഹായി",
+       "helppage-top-gethelp": "സഹായം",
        "mainpage": "പ്രധാന താൾ",
        "mainpage-description": "പ്രധാന താൾ",
        "policy-url": "Project:നയം",
        "readonly_lag": " കീഴ്-വിവരശേഖര സെർവറുകൾ മാസ്റ്റർ വരെ എത്തിയതിനാൽ വിവരശേഖരം സ്വയം ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു",
        "internalerror": "ആന്തരിക പിഴവ്",
        "internalerror_info": "ആന്തരിക പിഴവ്: $1",
+       "internalerror-fatal-exception": "\"$1\" തരത്തിലുള്ള ഗുരുതരമായ എക്സെപ്ഷൻ",
        "filecopyerror": "\"$1\" എന്ന പ്രമാണം \"$2\" എന്നതിലേയ്ക്ക് പകർത്താൻ സാധിച്ചില്ല.",
        "filerenameerror": "പ്രമാണം \"$1\", \"$2\" എന്ന തലക്കെട്ടിലേയ്ക്ക് മാറ്റാൻ സാധിച്ചില്ല.",
        "filedeleteerror": "\"$1\" നീക്കം ചെയ്യാൻ സാധിച്ചില്ല.",
        "createacct-yourpasswordagain": "രഹസ്യവാക്ക് സ്ഥിരീകരിക്കുക",
        "createacct-yourpasswordagain-ph": "രഹസ്യവാക്ക് വീണ്ടും നൽകുക",
        "remembermypassword": "എന്റെ പ്രവേശനം ഈ ബ്രൗസറിൽ ({{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസം}}) ഓർത്തുവെക്കുക",
-       "userlogin-remembermypassword": "ഞാൻ പ്രവേശിച്ചതായി തന്നെ നിലനിർത്തുക",
+       "userlogin-remembermypassword": "ഞാൻ പ്രവേശിച്ചതായിത്തന്നെ ഓർത്തിരിക്കുക",
        "userlogin-signwithsecure": "സുരക്ഷിത കണക്ഷൻ ഉപയോഗിക്കുക",
        "yourdomainname": "താങ്കളുടെ ഡൊമെയിൻ:",
        "password-change-forbidden": "ഈ വിക്കിയിൽ രഹസ്യവാക്കുകൾ മാറ്റാനാവില്ല.",
        "unusedimages": "ഉപയോഗിക്കപ്പെടാത്ത പ്രമാണങ്ങൾ",
        "wantedcategories": "അവശ്യ വർഗ്ഗങ്ങൾ",
        "wantedpages": "അവശ്യ താളുകൾ",
+       "wantedpages-summary": "മറ്റുതാളുകളിൽ നിന്ന് ഏറ്റവുമധികം കണ്ണിചേർത്തിരിക്കുന്ന നിലവിലില്ലാത്ത താളുകളുടെ പട്ടികയാണിത്, തിരിച്ചുവിടലുകൾ മാത്രം കണ്ണി ചേർത്തിരിക്കുന്നവ ഒഴിവാക്കിയിരിക്കുന്നു. തിരിച്ചുവിടലുകൾ കണ്ണി ചേർത്തിരിക്കുന്ന നിലവിലില്ലാത്ത താളുകളുടെ പട്ടികയ്ക്ക് [[{{#special:BrokenRedirects}}]] കാണുക.",
        "wantedpages-badtitle": "ഫലങ്ങളുടെ ഗണത്തിൽ അസാധുവായ തലക്കെട്ട്: $1",
        "wantedfiles": "ആവശ്യമുള്ള പ്രമാണങ്ങൾ",
        "wantedfiletext-cat": "താഴെക്കൊടുത്തിരിക്കുന്ന പ്രമാണങ്ങൾ ഉപയോഗിച്ചിട്ടുണ്ടെങ്കിലും നിലവിലില്ല. ബാഹ്യ റെപ്പോസിറ്ററികളിൽ നിന്നുള്ള പ്രമാണങ്ങൾ നിലവിലുണ്ടെങ്കിലും പട്ടികയിൽ ഉൾപ്പെട്ടിട്ടുണ്ടാവാം. അത്തരത്തിൽ തെറ്റായി ഉൾപ്പെടുത്തിയിരിക്കുന്നവ <del>വെട്ടിക്കളയുക</del>. കൂടുതലായി, നിലവിലില്ലാത്ത പ്രമാണങ്ങൾ ഉൾപ്പെടുത്തിയിട്ടുള്ള താളുകൾ കാണാൻ [[:$1]] സന്ദർശിക്കുക.",
        "thumbnail_image-missing": "പ്രമാണം ലഭ്യമല്ലെന്നു കാണുന്നു: $1",
        "thumbnail_image-failure-limit": "ഈ ലഘുചിത്രം സൃഷ്ടിക്കാൻ നിരവധി പരാജയപ്പെട്ട ശ്രമങ്ങൾ ($1 അല്ലെങ്കിൽ കൂടുതൽ) നടന്നിട്ടുണ്ട്. ദയവായി പിന്നീട് ശ്രമിക്കുക.",
        "import": "താളുകൾ ഇറക്കുമതി ചെയ്യുക",
-       "importinterwiki": "à´\85à´¨àµ\8dതർവിà´\95àµ\8dà´\95à´¿ à´\87à´±à´\95àµ\8dà´\95àµ\81മതി",
+       "importinterwiki": "മറàµ\8dà´±àµ\8aà´°àµ\81 à´µà´¿à´\95àµ\8dà´\95à´¿à´¯àµ\80ൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´\87à´±à´\95àµ\8dà´\95àµ\81മതി à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´\95",
        "import-interwiki-text": "വിക്കിയും ഇറക്കുമതി ചെയ്യാനുള്ള താളും തിരഞ്ഞെടുക്കുക.\nപുതുക്കൽ തീയതികളും തിരുത്തിയ ആളുകളുടെ പേരും സൂക്ഷിക്കപ്പെടും.\nഅന്തർവിക്കി ഇറക്കുമതിയുടെ എല്ലാ വിവരങ്ങളും [[Special:Log/import|ഇറക്കുമതി പ്രവർത്തനരേഖ]] എന്ന താളിൽ ശേഖരിക്കപ്പെടും.",
        "import-interwiki-sourcewiki": "സ്രോതസ്സ് വിക്കി:",
        "import-interwiki-sourcepage": "സ്രോതസ്സ് താൾ:",
        "importcantopen": "ഇറക്കുമതി പ്രമാണം തുറക്കാൻ കഴിഞ്ഞില്ല",
        "importbadinterwiki": "മോശമായ അന്തർവിക്കി കണ്ണി",
        "importsuccess": "ഇറക്കുമതി ചെയ്തുകഴിഞ്ഞു!",
-       "importnosources": "à´\9fàµ\8dരാൻസàµ\8dâ\80\8câ\80\8cവിà´\95àµ\8dà´\95à´¿ à´\87à´±à´\95àµ\8dà´\95àµ\81മതി à´¸àµ\8dà´°àµ\8bതസàµ\8dà´¸àµ\81കളൊന്നും നിർവചിച്ചിട്ടില്ല, നേരിട്ടുള്ള നാൾവഴി അപ്‌‌ലോഡുകൾ പ്രവർത്തനരഹിതവുമാക്കിയിരിക്കുന്നു.",
+       "importnosources": "à´\87à´±à´\95àµ\8dà´\95àµ\81മതി à´¸àµ\8dà´°àµ\8bതസàµ\8dà´¸àµ\81à´\95ളായ à´µà´¿à´\95àµ\8dà´\95à´¿കളൊന്നും നിർവചിച്ചിട്ടില്ല, നേരിട്ടുള്ള നാൾവഴി അപ്‌‌ലോഡുകൾ പ്രവർത്തനരഹിതവുമാക്കിയിരിക്കുന്നു.",
        "importnofile": "ഇറക്കുമതി പ്രമാണങ്ങളൊന്നും അപ്‌‌ലോഡ് ചെയ്തിട്ടില്ല.",
        "importuploaderrorsize": "ഇറക്കുമതി ചെയ്ത പ്രമാണത്തിന്റെ അപ്‌‌ലോഡ് പരാജയപ്പെട്ടു.\nപ്രമാണം അപ്‌‌ലോഡിങ്ങിനനുവദിക്കപ്പെട്ടിരിക്കുന്ന അളവിലും വലുതാണ്.",
        "importuploaderrorpartial": "ഇറക്കുമതി ചെയ്ത പ്രമാണത്തിന്റെ അപ്‌‌ലോഡ് പരാജയപ്പെട്ടു.\nപ്രമാണം ഭാഗികമായി അപ്‌‌ലോഡ് ചെയ്യപ്പെട്ടിരിക്കുന്നു.",
        "import-rootpage-nosubpage": "മൂലതാളിന്റെ നാമമേഖലയായ \"$1\" ഉപതാളുകൾ അനുവദിക്കുന്നില്ല.",
        "importlogpage": "ഇറക്കുമതി പ്രവർത്തനരേഖ",
        "importlogpagetext": "മറ്റു വിക്കികളിൽ നിന്ന് താളുകൾ നാൾവഴിയടക്കം എടുക്കുന്ന കാര്യനിർവാഹക ഇറക്കുമതി.",
-       "import-logentry-upload": "പ്രമാണ അപ്‌‌ലോഡ് വഴി [[$1]] ഇറക്കുമതി ചെയ്തിരിക്കുന്നു",
        "import-logentry-upload-detail": "{{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}} ഇറക്കുമതി ചെയ്തു",
-       "import-logentry-interwiki": "$1 അന്തർവിക്കി ഇറക്കുമതി ചെയ്തു",
        "import-logentry-interwiki-detail": "$2 എന്നതിൽ നിന്ന് {{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}} ഇറക്കുമതി ചെയ്തു",
        "javascripttest": "ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണം",
        "javascripttest-pagetext-noframework": "ഈ താൾ ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണങ്ങൾ നടത്താനായി മാറ്റിവെച്ചിരിക്കുന്നതാണ്.",
        "tags-hitcount": "{{PLURAL:$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-warnings-above": "\"$1\" എന്ന ടാഗ് സൃഷ്ടിക്കാൻ ശ്രമിക്കുമ്പോൾ താഴെക്കൊടുത്തിരിക്കുന്ന {{PLURAL:$2|മുന്നറിയിപ്പ്|മുന്നറിയിപ്പുകൾ}} വന്നു:",
+       "tags-delete-reason": "കാരണം:",
+       "tags-activate-reason": "കാരണം:",
+       "tags-activate-submit": "സജ്ജമാക്കുക",
+       "tags-deactivate-reason": "കാരണം:",
+       "tags-deactivate-submit": "പ്രവർത്തനരഹിതമാക്കുക",
        "comparepages": "താളുകൾ താരതമ്യപ്പെടുത്തുക",
        "compare-page1": "താൾ 1",
        "compare-page2": "താൾ 2",
        "revdelete-uname-unhid": "ഉപയോക്തൃനാമം മറച്ചത് ഒഴിവാക്കിയിരിക്കുന്നു",
        "revdelete-restricted": "കാര്യനിർവാഹകർക്ക് പ്രവർത്തന അതിരുകൾ ഏർപ്പെടുത്തിയിരിക്കുന്നു",
        "revdelete-unrestricted": "കാര്യനിർവാഹകർക്ക് ഏർപ്പെടുത്തിയ പ്രവർത്തന അതിരുകൾ നീക്കം ചെയ്തിരിക്കുന്നു",
+       "logentry-block-block": "$5 $6 കാലത്തേക്ക് {{GENDER:$4|$3}} എന്ന അംഗത്വത്തെ $1 {{GENDER:$2|തടഞ്ഞിരിക്കുന്നു}}",
+       "logentry-block-unblock": "{{GENDER:$4|$3}} എന്ന അംഗത്വത്തെ $1 {{GENDER:$2|തടഞ്ഞിരിക്കുന്നു}}",
+       "logentry-block-reblock": "$5 $6 കാലത്തേക്ക് {{GENDER:$4|$3}} എന്ന അംഗത്വത്തിന്റെ തടയൽ സജ്ജീകരണങ്ങൾ $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
+       "logentry-suppress-block": "$5 $6 കാലത്തേക്ക് {{GENDER:$4|$3}} എന്ന അംഗത്വത്തെ $1 {{GENDER:$2|തടഞ്ഞിരിക്കുന്നു}}",
+       "logentry-suppress-reblock": "$5 $6 കാലത്തേക്ക് {{GENDER:$4|$3}} എന്ന അംഗത്വത്തിന്റെ തടയൽ സജ്ജീകരണങ്ങൾ $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-merge-merge": "$3 എന്ന താൾ $4 എന്നതിലേക്ക് ($5 നാൾപ്പതിപ്പ് വരെ), $1 {{GENDER:$2|ലയിപ്പിച്ചു}}",
        "logentry-move-move": "$1 എന്ന ഉപയോക്താവ് $3 എന്ന താൾ $4 എന്നാക്കി {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-move-move-noredirect": "$3 എന്ന താൾ $4 എന്ന തലക്കെട്ടിലേയ്ക്ക് തിരിച്ചുവിടലില്ലാതെ $1 {{GENDER:$2|മാറ്റി}}",
        "logentry-newusers-create2": "$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 {{GENDER:$2|സൃഷ്ടിച്ചിരിക്കുന്നു}}",
        "logentry-newusers-byemail": "$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 {{GENDER:$2|സൃഷ്ടിച്ചിരിക്കുന്നു}}, രഹസ്യവാക്ക് ഇമെയിൽ വഴി അയച്ചു",
        "logentry-newusers-autocreate": "$1 എന്ന ഉപയോക്തൃ അംഗത്വം സ്വയം {{GENDER:$2|സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു}}",
-       "logentry-rights-rights": "$3 à´\8eà´¨àµ\8dà´¨ à´\89പയàµ\8bà´\95àµ\8dതാവിനàµ\8dà´±àµ\86 à´¸à´\82à´\98 à´\85à´\82à´\97à´¤àµ\8dà´µà´\82, $4 à´\8eà´¨àµ\8dനതിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81 $5 à´\8eà´¨àµ\8dനതിലàµ\87à´\95àµ\8dà´\95àµ\81, $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
+       "logentry-rights-rights": "$3 à´\8eà´¨àµ\8dà´¨ à´\89പയàµ\8bà´\95àµ\8dതാവിനàµ\8dà´±àµ\86 à´¸à´\82à´\98 à´\85à´\82à´\97à´¤àµ\8dà´µà´\82, $4 à´\8eà´¨àµ\8dനതിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81 $5 à´\8eà´¨àµ\8dനതിലàµ\87à´\95àµ\8dà´\95àµ\8d, $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-rights-rights-legacy": "$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-rights-autopromote": "$1 എന്ന ഉപയോക്താവ് $4 എന്നതിൽ നിന്നും $5 എന്നതിലേയ്ക്ക് സ്വയമേവ {{GENDER:$2|ഉയർത്തപ്പെട്ടിരിക്കുന്നു}}",
        "logentry-upload-upload": "$1 $3 {{GENDER:$2|അപ്‌ലോഡ് ചെയ്തു}}",
        "logentry-upload-revert": "$1 $3 {{GENDER:$2|അപ്‌ലോഡ് ചെയ്തു}}",
        "rightsnone": "(ഒന്നുമില്ല)",
        "revdelete-summary": "തിരുത്തലിന്റെ ചുരുക്കം",
+       "feedback-adding": "താങ്കളുടെ അഭിപ്രായങ്ങൾ താളിലേയ്ക്ക് ചേർക്കുന്നു...",
+       "feedback-back": "പുറകോട്ട്",
+       "feedback-bugcheck": "കൊള്ളാം! [$1 അറിയാവുന്ന ബഗുകളിൽ] ഒന്നല്ല എന്ന് ഒന്നു പരിശോധിച്ചേക്കുക.",
+       "feedback-bugnew": "ഞാൻ പരിശോധിച്ചു. പുതിയൊരു ബഗ് ചേർക്കുക",
        "feedback-bugornote": "സാങ്കേതിക പ്രശ്നം എന്താണെന്ന് വിവരിച്ചെഴുതാൻ താങ്കൾ തയ്യാറാണെങ്കിൽ [$1 ബഗ് അറിയിക്കുക].\nഅല്ലെങ്കിൽ താങ്കൾക്ക് താഴെ എളുപ്പത്തിനായി നൽകിയിരിക്കുന്ന ഫോം ഉപയോഗിക്കാം. താങ്കളുടെ കുറിപ്പ് \"[$3 $2]\" താളിൽ, താങ്കളുടെ ഉപയോക്തൃനാമത്തിന്റെയും ഉപയോഗിക്കുന്ന ബ്രൗസറിന്റെ പേരിന്റെയും ഒപ്പം ചേർക്കുന്നതായിരിക്കും.",
-       "feedback-subject": "വിഷയം:",
-       "feedback-message": "സന്ദേശം:",
        "feedback-cancel": "റദ്ദാക്കുക",
-       "feedback-submit": "അഭിപ്രായം സമർപ്പിക്കുക",
-       "feedback-adding": "താങ്കളുടെ അഭിപ്രായങ്ങൾ താളിലേയ്ക്ക് ചേർക്കുന്നു...",
+       "feedback-close": "ചെയ്തു കഴിഞ്ഞു.",
+       "feedback-external-bug-report-button": "ഒരു സാങ്കേതിക കർത്തവ്യം ചേർക്കുക",
+       "feedback-dialog-title": "അഭിപ്രായം സമർപ്പിക്കുക",
+       "feedback-dialog-intro": "താങ്കളുടെ അഭിപ്രായം സമർപ്പിക്കാൻ താങ്കൾക്ക് താഴെയുള്ള ലളിതമായ ഫോം ഉപയോഗിക്കാം. താങ്കളുടെ കുറിപ്പ് \"$1\" എന്ന താളിൽ താങ്കളുടെ ഉപയോക്തൃനാമത്തോടൊപ്പം ചേർക്കപ്പെടുന്നതാണ്.",
+       "feedback-error-title": "പിഴവ്",
        "feedback-error1": "പിഴവ്: എ.പി.ഐ.യിൽ നിന്നും തിരിച്ചറിയാനാകാത്ത ഫലം",
        "feedback-error2": "പിഴവ്: തിരുത്തൽ പരാജയപ്പെട്ടു",
        "feedback-error3": "പിഴവ്: എ.പി.ഐ.യിൽ നിന്നും യാതൊരു പ്രതികരണവുമില്ല",
+       "feedback-message": "സന്ദേശം:",
+       "feedback-subject": "വിഷയം:",
+       "feedback-submit": "സമർപ്പിക്കുക",
+       "feedback-terms": "എന്റെ ബ്രൗസറും ഓപ്പറേറ്റിങ് സിസ്റ്റവും ഏതാണെന്നും പതിപ്പെന്തെന്നും കൃത്യമായി ഉൾപ്പെട്ടതാണ് എന്റെ യൂസർ ഏജന്റ് വിവരം എന്നും അത് എന്റെ അഭിപ്രായത്തോടൊപ്പം സാർവ്വജനികമായി ലഭ്യമാകത്തക്കവിധത്തിൽ പങ്കുവെയ്ക്കപ്പെടുമെന്നും ഞാൻ മനസ്സിലാക്കുന്നു.",
+       "feedback-termsofuse": "ഉപയോഗനിബന്ധനകൾക്ക് അനുസൃതമായാണ് ഈ അഭിപ്രായം നൽകുന്നതെന്ന് ഞാൻ സമ്മതിക്കുന്നു.",
        "feedback-thanks": "നന്ദി! താങ്കളുടെ പ്രതികരണം \"[$2 $1]\" എന്ന താളിൽ പ്രസിദ്ധീകരിച്ചിട്ടുണ്ട്.",
-       "feedback-close": "ചെയ്തു കഴിഞ്ഞു.",
-       "feedback-bugcheck": "കൊള്ളാം! [$1 അറിയാവുന്ന ബഗുകളിൽ] ഒന്നല്ല എന്ന് ഒന്നു പരിശോധിച്ചേക്കുക.",
-       "feedback-bugnew": "ഞാൻ പരിശോധിച്ചു. പുതിയൊരു ബഗ് ചേർക്കുക",
+       "feedback-thanks-title": "നന്ദി!",
+       "feedback-useragent": "യൂസർ ഏജന്റ്:",
        "searchsuggest-search": "തിരയുക",
        "searchsuggest-containing": "ഉൾപ്പെടുന്നവ...",
        "api-error-badaccess-groups": "ഈ വിക്കിയിൽ പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യാൻ താങ്കൾക്കനുവാദമില്ല.",
        "json-error-syntax": "എഴുത്തുരീതിയിൽ പിഴവ്",
        "json-error-utf8": "തെറ്റായരൂപത്തിലുള്ള UTF-8 അക്ഷരങ്ങൾ, മിക്കവാറും തെറ്റായി എൻകോഡ് ചെയ്യപ്പെട്ടവ",
        "json-error-recursion": "എൻകോഡ് ചെയ്യേണ്ട വിലയിൽ ഒന്നോ അതിലധികമോ പുനരാവർത്തിത സൂചകങ്ങൾ",
-       "json-error-inf-or-nan": "എൻകോഡ് ചെയ്യേണ്ട വിലയിൽ ഒന്നോ അതിലധികമോ NAN അല്ലെങ്കിൽ INF വിലകൾ"
+       "json-error-inf-or-nan": "എൻകോഡ് ചെയ്യേണ്ട വിലയിൽ ഒന്നോ അതിലധികമോ NAN അല്ലെങ്കിൽ INF വിലകൾ",
+       "headline-anchor-title": "ഈ ഭാഗത്തേക്കുള്ള കണ്ണി",
+       "special-characters-group-latin": "ലാറ്റിൻ",
+       "special-characters-group-latinextended": "ലാറ്റിൻ വിപുലം",
+       "special-characters-group-ipa": "ഐ.പി.എ.",
+       "special-characters-group-symbols": "ചിഹ്നങ്ങൾ",
+       "special-characters-group-greek": "ഗ്രീക്ക്",
+       "special-characters-group-cyrillic": "സിറിലിക്",
+       "special-characters-group-arabic": "അറബിക്",
+       "special-characters-group-arabicextended": "അറബി വിപുലം",
+       "special-characters-group-persian": "പേർഷ്യൻ",
+       "special-characters-group-hebrew": "ഹീബ്രു",
+       "special-characters-group-bangla": "ബംഗ്ലാ",
+       "special-characters-group-tamil": "തമിഴ്",
+       "special-characters-group-telugu": "തെലുങ്ക്",
+       "special-characters-group-sinhala": "സിംഹള",
+       "special-characters-group-gujarati": "ഗുജറാത്തി",
+       "special-characters-group-devanagari": "ദേവനാഗരി",
+       "special-characters-group-thai": "തായ്",
+       "special-characters-group-lao": "ലാവോ",
+       "special-characters-group-khmer": "ഖെമർ",
+       "special-characters-title-endash": "ഇം  ഡാഷ്",
+       "special-characters-title-emdash": "എം ഡാഷ്",
+       "special-characters-title-minus": "വ്യവകലന ചിഹ്നം"
 }
index dc2cd22..7fe9c72 100644 (file)
        "delete-warning-toobig": "Энэ хуудасны засварын түүх маш том байгаа бөгөөд {{PLURAL:$1| гаруй засвар| гаруй засварууд}} байна.\nУстгавал {{SITENAME}}-н мэдээллийн сангийн үйл ажиллагаанд нөлөөлж магадгүй тул та анхаарна уу.",
        "deleteprotected": "Энэ хуудас хамгаалалттай тул устгаж болохгүй.",
        "rollback": "Засваруудыг буцаах",
-       "rollback_short": "Буцаах",
        "rollbacklink": "буцаах",
        "rollbackfailed": "Буцааж чадсангүй",
        "cantrollback": "Засварласан хэсгийг хуучин төлөвт шилжүүлж чадсангүй;\nсүүлчийн засварыг хийгч нь энэ хуудасны цорын ганц бичигч байна.",
        "import-logentry-interwiki": "$1-г транс-викидлээ",
        "import-logentry-interwiki-detail": "$2-с авсан $1 засвар",
        "javascripttest": "JavaScript туршилт",
-       "javascripttest-title": "$1 теёт хийж байна",
        "javascripttest-pagetext-noframework": "Уг хуудсыг JavaScript тест хийхэд ашиглана.",
        "javascripttest-pagetext-unknownframework": "\"$1\" мэдэхгүй тест фреймворк байна.",
        "tooltip-pt-userpage": "Таны хэрэглэгчийн хуудас",
        "watchlisttools-view": "Холбогдох өөрчлөлтүүдийг үзэх",
        "watchlisttools-edit": "Хянаж буй хуудсуудын жагсаалтаа үзэж засварлах",
        "watchlisttools-raw": "Хянаж буй хуудсуудын жагсаалтаа текстээр засварлах",
-       "unknown_extension_tag": "Үл мэдэгдэх өргөтгөл таг: \"$1\"",
        "duplicate-defaultsort": "'''Анхаар:''' \"$2\" гэсэн default sort key нь \"$1\" гэсэн өмнөх key-н дээгүүр бичигдэх болж байна.",
        "version": "Хувилбар",
        "version-extensions": "Суулгасан өргөтгөлүүд",
        "version-parser-function-hooks": "Парсер функцийн тагууд",
        "version-hook-name": "Хүүкийн нэр",
        "version-hook-subscribedby": "Захиалсан:",
-       "version-version": "(Хувилбар $1)",
+       "version-version": "($1)",
        "version-license": "Лиценз",
        "version-poweredby-credits": "Энэхүү викиг '''[https://www.mediawiki.org/ MediaWiki]''' програмаар ажиллуулдаг, зохиогчийн эрх © 2001-$1 $2.",
        "version-poweredby-others": "бусад",
index 1c24015..ead4fef 100644 (file)
                        "प्रतिमा",
                        "शࣿरीहरि",
                        "संतोष दहिवळ",
-                       "아라"
+                       "아라",
+                       "BPositive",
+                       "Darshan kandolkar",
+                       "Steinsplitter",
+                       "Macofe",
+                       "Nemo bis"
                ]
        },
        "tog-underline": "दुव्यांचे अधोरेखन:",
        "otherlanguages": "इतर भाषांत",
        "redirectedfrom": "($1 पासून पुनर्निर्देशित)",
        "redirectpagesub": "पुनर्निर्देशनाचे पान",
+       "redirectto": "येथे पुनर्निर्देशित करा:",
        "lastmodifiedat": "या पानातील शेवटचा बदल $1 रोजी $2 वाजता केला गेला.",
        "viewcount": "हे पान {{PLURAL:$1|एकदा|$1 वेळा}} बघितले गेलेले आहे.",
        "protectedpage": "सुरक्षित पृष्ठ",
        "gotaccountlink": "सनोंद-प्रवेश करा",
        "userlogin-resetlink": "सनोंद-प्रवेश तपशील विसरला असाल तर येथे टिचकी मारा.",
        "userlogin-resetpassword-link": "आपला परवलीचा शब्द विसरलात?",
+       "userlogin-helplink2": "सनोंद प्रवेशासंबंधी मदत",
        "userlogin-loggedin": "आपण पुर्वीच {{GENDER:$1|$1}} म्हणून सनोंद प्रवेशित आहात.वेगळ्या सदस्यनावाने सनोंद प्रवेशासाठी खालील आवेदन वापरा.",
        "userlogin-createanother": "दुसरे नवीन खाते तयार करा",
        "createacct-emailrequired": "विपत्र पत्ता(ई-मेल)",
        "suspicious-userlogout": "तुमच्या सनोंद-निर्गमनास नकार दिल्या गेला कारण असे दिसते की ती विनंती अन-अनुबंधित(डिसकनेक्टेड) न्याहाळकाद्वारे पाठवल्या गेली.",
        "createacct-another-realname-tip": "आपले खरे नाव टाकणे वैकल्पिक आहे.\nजर आपण ते द्यायचे ठरविले तर,ते आपल्या कामाचा मूळ स्रोत म्णून देण्यास वापरले जाईल.",
        "pt-login": "सनोंद-प्रवेश करा",
+       "pt-login-button": "सनोंद-प्रवेश करा",
+       "pt-createaccount": "खाते बनवा",
        "pt-userlogout": "सनोंद-निर्गम",
        "php-mail-error-unknown": "पीएचपीच्या विपत्र() पर्यायात अज्ञात चूक",
        "user-mail-no-addy": "ईमेल पत्त्या विना ईमेल पाठवण्यचा प्रयत्न केला",
        "token_suffix_mismatch": "'''तुमचे संपादन रद्द करण्यात आलेले आहे कारण तुमच्या क्लायंटनी तुमच्या संपादनातील उद्गारवाचक चिन्हांमध्ये (punctuation) बदल केलेले आहेत.\nपानातील मजकूर खराब होऊ नये यासाठी संपादन रद्द करण्यात आलेले आहे.\nअसे कदाचित तुम्ही अनामिक proxy वापरत असल्याने होऊ शकते.'''",
        "edit_form_incomplete": "'''तुमच्या संपादनाचा काही भाग सर्व्हरपर्यंत पोचला नाही; तुमचे संपादन पूर्ण आहे का याची पुन्हा खात्री करा व पुन्हा प्रयत्न करा.'''",
        "editing": "$1 चे संपादन होत आहे.",
-       "creating": "$1 ची निर्मिती सुरू आहे",
+       "creating": "$1 à¤¯à¤¾ à¤²à¥\87à¤\96ाà¤\9aà¥\80 à¤¨à¤¿à¤°à¥\8dमितà¥\80 à¤¸à¥\81रà¥\82 à¤\86हà¥\87",
        "editingsection": "$1 (विभाग) संपादन",
        "editingcomment": "$1 चे संपादन (प्रतिक्रिया)",
        "editconflict": "संपादन मतभेद: $1",
        "templatesusedpreview": "या झलकेमध्ये {{PLURAL:$1|वापरलेला साचा|वापरलेले साचे}}:",
        "templatesusedsection": "या विभागामध्ये {{PLURAL:$1|वापरलेला साचा|वापरलेले साचे}}:",
        "template-protected": "(सुरक्षित)",
-       "template-semiprotected": "(à¤\85रà¥\8dध-सà¥\81रà¤\95à¥\8dषà¥\80त)",
+       "template-semiprotected": "(à¤\85रà¥\8dध-सà¥\81रà¤\95à¥\8dषित)",
        "hiddencategories": "हे पान खालील {{PLURAL:$1|एका लपविलेल्या वर्गामध्ये|$1 लपविलेल्या वर्गांमध्ये}} आहे:",
        "nocreatetext": "{{SITENAME}}वर नवीन लेख लिहिण्यास मज्जाव करण्यात आलेला आहे. आपण परत जाऊन अस्तित्वात असलेल्या लेखांचे संपादन करू शकता अथवा [[Special:UserLogin|नवीन सदस्यत्व घ्या/ प्रवेश करा]].",
        "nocreate-loggedin": "येथे तुम्हाला नवीन पाने बनवण्याची परवानगी नाही.",
        "querypage-disabled": "हे विषेश पान कार्यमापन (performance) करणांमुळे प्रतिबंधित करण्यात आले आहे.",
        "booksources": "पुस्तक स्रोत",
        "booksources-search-legend": "पुस्तक स्रोत शोधा",
+       "booksources-search": "शोधा",
        "booksources-text": "खालील यादीत नवी आणिजुनी पुस्तके विकणाऱ्या संकेतस्थळाचे दुवे आहेत,आणि त्यात कदाचित आपण शोधू पहात असलेल्या पुस्तकाची अधिक माहिती असेल:",
        "booksources-invalid-isbn": "दिलेला आयएसबीएन वैध नाही; मूळ स्रोतातून उतरवताना झालेल्या चुकांचे निरसन करा.",
        "specialloguserlabel": "कार्यकर्ता:",
        "delete-warning-toobig": "या पानाला, $1 {{PLURAL:$1|आवृत्ती|आवृत्त्यां}}मुळे तयार झालेला खूप मोठा संपादन इतिहास आहे.त्याचे वगळण्याने {{SITENAME}} वर डाटाबेसच्या क्रियांची उलथापालथ होऊ शकते; सावधगिरीने पुढे जा.",
        "deleting-backlinks-warning": "'''ईशारा:''' आपण वगळत असणाऱ्या पानास दुसरी पाने जोडलेली किंवा आंतरविन्यासित आहेत.",
        "rollback": "बदल वेगात माघारी न्या",
-       "rollback_short": "द्रुतमाघार",
        "rollbacklink": "द्रुतमाघार",
        "rollbacklinkcount": "उलटवा $1 {{PLURAL:$1|संपादन|संपादने}}",
        "rollbacklinkcount-morethan": "$1 पेक्षा अधिक {{PLURAL:$1|संपादन|संपादने}} उलटवा",
        "import-rootpage-nosubpage": "\"$1\" नामविश्वाची मुल पाने, उपपानास परवानगी देत नाही.",
        "importlogpage": "ईम्पोर्ट सूची",
        "importlogpagetext": "इतर विकिक्डून पानांची, संपादकीय इतिहासासहीत, प्रबंधकीय आयात.",
-       "import-logentry-upload": "संचिका चढवल्याने [[$1]] आयात",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|आवर्तन|आवर्तने}}",
-       "import-logentry-interwiki": "आंतरविकिकरण $1",
        "import-logentry-interwiki-detail": "$2 पासून $1 {{PLURAL:$1|आवर्तन|आवर्तने}}",
        "javascripttest": "जावा स्क्रिप्ट तपासणी",
-       "javascripttest-title": "$1 टेस्ट चालू आहेत",
        "javascripttest-pagetext-noframework": "हे पान जावा स्क्रिप्ट तपासणी साठी सुरक्षित केले आहे",
        "javascripttest-pagetext-unknownframework": "अज्ञात तपासणीचे ठिकाण $1",
        "javascripttest-pagetext-frameworks": "कृपया टेस्टिंग साठी पुढील पैकी व्यवस्था / पद्धत निवडावी: $1",
        "javascripttest-pagetext-skins": "टेस्ट करण्यासाठी योग्य ती स्कीन निवडावी",
        "javascripttest-qunit-intro": "mediawiki.org वर [$1 testing documentation] पहा",
-       "javascripttest-qunit-heading": "मीडिया विकी जावा स्क्रिप्ट कयू यूनिट टेस्ट ची जागा",
        "tooltip-pt-userpage": "तुमचे सदस्य पान",
        "tooltip-pt-anonuserpage": "तुम्ही ज्या अंकपत्त्यान्वये संपादित करत आहात त्याकरिता हे सदस्य पान",
        "tooltip-pt-mytalk": "तुमचे चर्चा पान",
        "logentry-rights-autopromote": "$1 ला स्वयंचलितरित्या $4 वरुन $5 ला {{GENDER:$2|बढती दिल्या गेली}}",
        "rightsnone": "(काहीही नाही)",
        "revdelete-summary": "संपादन माहिती",
+       "feedback-adding": "आपला पश्चप्रदाय (फिडबॅक)  जोडत आहोत या पानास.......",
+       "feedback-bugcheck": "उत्तम! फक्त एकदा खात्री करा की हा [$1 अगोदरच माहिती असलेला बग] तर नाहीये.",
+       "feedback-bugnew": "मी तपासले आहे. हा एक नवीन बग म्हणून नोंद करावी",
        "feedback-bugornote": "जर आपण तांत्रिक प्रश्न  विस्तृतपणे मांडण्यास तयार असाल तर कृपया [$1 गणकदोष वृतांत] पाठवा. नपेक्षा, खाली देण्यात आलेले सोपे आवेदनपत्र वापरा. आपली टिप्पणी \"[$3 $2]\" या पानास आपले सदस्यनाव व आपण कोणता ब्राउजर वापरता यासह जोडण्यात येईल.",
-       "feedback-subject": "विषय:",
-       "feedback-message": "संदेश:",
        "feedback-cancel": "रद्द करा",
-       "feedback-submit": "प्रतिक्रिया द्या",
-       "feedback-adding": "आपला पश्चप्रदाय (फिडबॅक)  जोडत आहोत या पानास.......",
+       "feedback-close": "झाले",
        "feedback-error1": "चूक: API कडून अनोळखी परिणाम",
        "feedback-error2": "त्रुटी: संपादन रद्द",
        "feedback-error3": "त्रुटी:एपीआय तर्फे काहीच प्रत्युत्तर नाही",
+       "feedback-message": "संदेश:",
+       "feedback-subject": "विषय:",
+       "feedback-submit": "सादर करा",
        "feedback-thanks": " \"[$2 $1]\" या पानात आपला पश्चप्रदाय (फिडबॅक) टाकत आहोत.",
-       "feedback-close": "झाले",
-       "feedback-bugcheck": "उत्तम! फक्त एकदा खात्री करा की हा [$1 अगोदरच माहिती असलेला बग] तर नाहीये.",
-       "feedback-bugnew": "मी तपासले आहे. हा एक नवीन बग म्हणून नोंद करावी",
        "searchsuggest-search": "शोधा",
        "searchsuggest-containing": ".......हे असलेले",
        "api-error-badaccess-groups": "आपणास ह्या विकिवर संचिका चढवण्याची परवानगी नाही",
        "expand_templates_remove_comments": "शेरा हटवा",
        "expand_templates_remove_nowiki": "निकालात <nowiki>खूणपतका दाखवू नका",
        "expand_templates_generate_xml": "XML चा पार्स (parse) वृक्ष दाखवा",
-       "expand_templates_preview": "झलक"
+       "expand_templates_preview": "झलक",
+       "special-characters-group-latin": "लॅटीन",
+       "special-characters-group-latinextended": "विस्तारीत लॅटीन भाषा",
+       "special-characters-group-ipa": "आंतरराष्ट्रीय उच्चारानुरूप अक्षरपद्धती",
+       "special-characters-group-symbols": "चिन्ह",
+       "special-characters-group-greek": "ग्रीक भाषा",
+       "special-characters-group-cyrillic": "सिरिलीक",
+       "special-characters-group-arabic": "अरेबिक भाषा",
+       "special-characters-group-arabicextended": "अरबी विस्तारित",
+       "special-characters-group-persian": "फार्सी",
+       "special-characters-group-hebrew": "हिब्रू भाषा",
+       "special-characters-group-bangla": "बंगाली भाषा",
+       "special-characters-group-tamil": "तमिळ",
+       "special-characters-group-telugu": "तेलगु भाषा",
+       "special-characters-group-sinhala": "सिंहला",
+       "special-characters-group-gujarati": "गुजराती भाषा",
+       "special-characters-group-devanagari": "देवनागरी",
+       "special-characters-group-thai": "थाई भाषा",
+       "special-characters-group-lao": "लाऒ भाषा",
+       "special-characters-group-khmer": "ख्मेर",
+       "special-characters-title-minus": "ॠण चिन्ह"
 }
index 1518d9f..14b518c 100644 (file)
@@ -18,7 +18,8 @@
                        "Zamwan",
                        "לערי ריינהארט",
                        "아라",
-                       "Pizza1016"
+                       "Pizza1016",
+                       "Macofe"
                ]
        },
        "tog-underline": "Garis bawah pautan:",
        "version-parser-function-hooks": "Penyangkuk fungsi penghurai",
        "version-hook-name": "Nama penyangkuk",
        "version-hook-subscribedby": "Dilanggan oleh",
-       "version-version": "(Versi $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[tiada nama]",
        "version-license": "Lesen MediaWiki",
        "version-ext-license": "Lesen",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|mematikan}} teg \"$4\" untuk kegunaan pengguna dan bot",
        "rightsnone": "(tiada)",
        "revdelete-summary": "ringkasan",
+       "feedback-adding": "Maklum balas sedang diisikan ke dalam laman...",
+       "feedback-bugcheck": "Bagus! Cuma pastikan itu bukan salah satu [$1 pepijat] yang sedia diketahui.",
+       "feedback-bugnew": "Saya dah semak. Laporkan pepijat baru",
        "feedback-bugornote": "Jika anda bersedia untuk menerangkan masalah teknikal secara terperinci, sila [$1 laporkan pepijat]. \nAtaupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dicatatkan pada laman \"[$3 $2]\", beserta nama pengguna anda dan pelayar yang anda gunakan.",
-       "feedback-subject": "Perkara:",
-       "feedback-message": "Pesanan:",
        "feedback-cancel": "Batalkan",
-       "feedback-submit": "Hantar Maklum Balas",
-       "feedback-adding": "Maklum balas sedang diisikan ke dalam laman...",
+       "feedback-close": "Siap",
        "feedback-error1": "Perhatian: Hasil dari API tidak dikenali",
        "feedback-error2": "Perhatian: Penyuntingan gagal",
        "feedback-error3": "Perhatian: Tiada gerak balas dari API",
+       "feedback-message": "Pesanan:",
+       "feedback-subject": "Perkara:",
+       "feedback-submit": "Hantar",
        "feedback-thanks": "Terima kasih! Maklum balas anda telah dicatatkan pada laman \"[$2 $1]\".",
-       "feedback-close": "Siap",
-       "feedback-bugcheck": "Bagus! Cuma pastikan itu bukan salah satu [$1 pepijat] yang sedia diketahui.",
-       "feedback-bugnew": "Saya dah semak. Laporkan pepijat baru",
        "searchsuggest-search": "Cari",
        "searchsuggest-containing": "mengandungi...",
        "api-error-badaccess-groups": "Anda tidak dibenarkan memuat naik fail di wiki ini.",
index 4215b6b..3c55d64 100644 (file)
@@ -9,7 +9,8 @@
                        "Urhixidur",
                        "아라",
                        "CharlieTheCabbie",
-                       "Leli Forte"
+                       "Leli Forte",
+                       "Macofe"
                ]
        },
        "tog-underline": "Ħoloq sottolinjati:",
        "delete-toobig": "Din il-paġna għandha kronoloġija ta' modifikar kbira, l-fuq minn $1 {{PLURAL:$1|reviżjoni|reviżjonijiet}}.\nTħassir ta' dawn il-paġni huwa limitat sabiex tnaqqas il-ħolqien aċċidentalment ta' problemi fil-funżjoni tad-database ta' {{SITENAME}}.",
        "delete-warning-toobig": "Din il-paġna għandha kronoloġija ta' modifikar kbira, l-fuq minn $1 {{PLURAL:$1|reviżjoni|reviżjonijiet}}.\nTħassara tista' toħloq problema ta' funżjoni fid-database ta' {{SITENAME}}; moħħok hemm.",
        "rollback": "Ħassar il-modifiki",
-       "rollback_short": "Rollback",
        "rollbacklink": "rollback",
        "rollbackfailed": "Rollback ma ħadmitx",
        "cantrollback": "Impossibli tħassar il-modifiki; l-utent li wettaqhom huwa l-unika li għamel kontributi lil din il-paġna.",
        "import-error-invalid": "Il-paġna \"$1\" ma ġietx impurtata minħabba li isimha hi invalida.",
        "importlogpage": "Importazzjoni",
        "importlogpagetext": "Importi amministrativi ta' paġni b'kronoloġiji ta' modifiki minn wikis oħrajn.",
-       "import-logentry-upload": "importajt [[$1]] bl-użu ta' upload.",
        "import-logentry-upload-detail": "{{PLURAL:$1|reviżjoni|$1 reviżjonijiet}}",
-       "import-logentry-interwiki": "Trasferixxejt minn wiki ieħor il-paġna $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|reviżjoni|$1 reviżjonijiet}} minn $2",
        "javascripttest": "Testjar tal-JavaScript",
        "javascripttest-pagetext-noframework": "Din il-paġna hi riservata għall-eżekuzzjoni tat-testijiet tal-JavaScript.",
        "version-parser-function-hooks": "''Hooks'' għal funzjonijiet tal-''parser''",
        "version-hook-name": "Isem tal-hook",
        "version-hook-subscribedby": "Reġistrat minn",
-       "version-version": "(Verżjoni $1)",
+       "version-version": "($1)",
        "version-license": "Liċenzja",
        "version-poweredby-credits": "Din il-wiki hija operata minn '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "oħrajn",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|ġie|ġiet}} awtomatikament {{GENDER:$2|promoss|promossa}} minn $4 għal $5",
        "rightsnone": "(xejn)",
        "revdelete-summary": "Taqsira tal-modifika",
+       "feedback-bugcheck": "Tajjeb ħafna! Ivverifika li mhux diġà fost id-[$1 difetti magħrufa].",
+       "feedback-bugnew": "Ikkontrollajt. Irrapporta d-difett",
        "feedback-bugornote": "Jekk int lest biex tiddeskrivi problema teknika fid-dettall, jekk jogħbok [$1 irraporta l-bug].\nInkella, tista' tuża l-formola sempliċi t'hawn taħt. Il-kumment tiegħek se jiżdied mal-paġna \"[$3 $2]\", flimkien ma' isem l-utent tiegħek.",
-       "feedback-subject": "Suġġett:",
-       "feedback-message": "Messaġġ:",
        "feedback-cancel": "Annulla",
-       "feedback-submit": "Ibgħat il-messaġġ",
+       "feedback-close": "Lest",
        "feedback-error1": "Żball: Riżultat mhux rikonoxxut mill-API",
        "feedback-error2": "Żball: Modifika mhux esegwita",
        "feedback-error3": "Żball: L-ebda risposta mill-API",
+       "feedback-message": "Messaġġ:",
+       "feedback-subject": "Suġġett:",
+       "feedback-submit": "Ibgħat",
        "feedback-thanks": "Grazzi! Ir-rispons tiegħek ġie ippubblikat fuq il-paġna \"[$2 $1]\".",
-       "feedback-close": "Lest",
-       "feedback-bugcheck": "Tajjeb ħafna! Ivverifika li mhux diġà fost id-[$1 difetti magħrufa].",
-       "feedback-bugnew": "Ikkontrollajt. Irrapporta d-difett",
        "searchsuggest-search": "Fittex",
        "searchsuggest-containing": "li tinkludi...",
        "api-error-fileexists-forbidden": "Fajl bl-isem \"$1\" diġà jeżisti, u ma jistax jiġi miktub fuqu.",
        "mediastatistics-header-office": "Uffiċċju",
        "mediastatistics-header-text": "Fajls testwali",
        "mediastatistics-header-executable": "Fajls eżegwitabbli",
-       "mediastatistics-header-archive": "Formats kompressati"
+       "mediastatistics-header-archive": "Formats kompressati",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin estiż",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simboli",
+       "special-characters-group-greek": "Grieg",
+       "special-characters-group-cyrillic": "Ċirilliku",
+       "special-characters-group-arabic": "Għarbi",
+       "special-characters-group-arabicextended": "Għarbi estiż",
+       "special-characters-group-persian": "Persjan",
+       "special-characters-group-hebrew": "Ebrajk",
+       "special-characters-group-bangla": "Bengali",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinħaliż",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Tajlandiż",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index a570164..da14248 100644 (file)
        "deletereason-dropdown": "*Нардамонь сех вастневиця тувталтнэ\n** Теицянть вешемазо\n** Теицянь видечинть коламозо\n** Вандализма",
        "delete-edit-reasonlist": "Витнемс-петнемс нардамонь тувталтнэнь",
        "rollback": "Кевердемс витнематнень-петнематнень мекев",
-       "rollback_short": "Мекев кевердема",
        "rollbacklink": "кевердемс",
        "rollbackfailed": "Мекев кевердемась эзь лисе",
        "protectlogpage": "Ванстомань совамо-кемекстамо",
        "version-hooks": "Кечказт",
        "version-hook-name": "Кечказонть лемезэ",
        "version-hook-subscribedby": "Сёрмадстызе",
-       "version-version": "(Версия $1)",
+       "version-version": "($1)",
        "version-license": "Лицензия",
        "version-software": "Нолдань программат",
        "version-software-product": "Шкавкс-нолдавкс",
        "htmlform-selectorother-other": "Лия",
        "rightsnone": "(арасть)",
        "revdelete-summary": "витнемадо-петнемадо нурькине йовтавкс",
-       "feedback-subject": "Мезде:",
-       "feedback-message": "Пачтямнэсь:",
        "feedback-cancel": "А теемс",
        "feedback-close": "Анок",
+       "feedback-message": "Пачтямнэсь:",
+       "feedback-subject": "Мезде:",
        "searchsuggest-search": "Вешнемс",
        "api-error-filename-tooshort": "Керьмазлементь а саты кувалмозо",
        "api-error-illegal-filename": "Керьмазлемесь а маштови.",
index 3abe657..e6704e3 100644 (file)
        "tagline": "{{SITENAME}} جه",
        "help": "راهنما",
        "search": "بگردستن",
-       "searchbutton": "چرخ‌هایی",
+       "searchbutton": "چرخه‌تو",
        "go": "بـور",
        "searcharticle": "بور",
        "history": "صفحه‌ی تاریخچه",
        "aboutpage": "Project:درباره",
        "copyright": "این صفحه ره بَنوشته‌ئون  $1  زیر شِمه دسـت دَرنه.",
        "copyrightpage": "{{ns:project}}:کـوپـی‌راسـت‌ئون",
-       "currentevents": "اساÛ\8cÛ\8c Ø¯Ú©ØªÙ\87â\80\8cئون",
-       "currentevents-url": "Project:اساÛ\8cÛ\8c Ø¯Ú©ØªÙ\87â\80\8cئون",
+       "currentevents": "Ø®Ù\80Ù\8eÙ\88Ù\90رون",
+       "currentevents-url": "Project:Ø®Ù\88رون",
        "disclaimers": "تکذیب‌نومه‌ئون",
        "disclaimerpage": "Project:تکذیب‌نومه",
        "edithelp": "دچی‌ین رانما",
        "exbeforeblank": "قبل اینکه صفحه محتوا خالی بوه ونه محتوا وِ بیه: «$1»",
        "dellogpage": "وه ره بییته‌ئون گوزارش",
        "rollback": "دچی‌یه‌ئون ره واچی‌ین",
-       "rollback_short": "واچی‌ین",
        "rollbacklink": "واچی‌ین",
        "revertpage": "\"چـیـزونی که [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) دأچـیـه ده‌گـه‌ره‌س بـأیـه هـأمونـتـایی که [[User:$1|$1]] ای وألگ ده‌لـه، پـایـانی بـار هـه‌کـارده\"",
        "revertpage-nouser": "\"چیزونی که (ونـه کـاروری نـوم پـاک بَیّه) دچی‌یه دگـاردسته بیّه همونتایی که [[User:$1|$1]] آخرسری دچی‌ین دلـه هاکرده\"",
        "sp-contributions-newbies": "نـه وا بـأیـه ئـه‌کـانـت‌ئون دأچـیـه‌ن‌ئون ره نـه‌شـون هـاده",
        "sp-contributions-talk": "گپ",
        "sp-contributions-username": "IP نـه‌شـونـی یا کـاروری‌نوم",
-       "sp-contributions-submit": "چـأرخـه‌تـو",
+       "sp-contributions-submit": "چرخه‌تو",
        "whatlinkshere": "لینک‌ئون ِاینتا صفحه",
        "whatlinkshere-title": "وألـگ‌ئونی که \"$1\" ره لـیـنک هه‌دانه",
        "whatlinkshere-page": "صفحه:",
        "tooltip-ca-history": "کهنه دگاردسته‌ئونی که این صفحه دله دکته",
        "tooltip-ca-delete": "این صفحه ره پاک هاکردن",
        "tooltip-ca-watch": "این صفحه ره شه دمبال‌هاکردن لیست دله بی‌یشتن",
-       "tooltip-search": "{{SITENAME}} ره چـأرخـه‌تـو",
+       "tooltip-search": "{{SITENAME}} ره چرخه‌تو",
        "tooltip-search-go": "بـور اتـا ولـگـی کـه وه‌نـه نـوم هـأمـیـنـتـا بـوئـه",
        "tooltip-search-fulltext": "ولـگ‌ئـون ره ایـنـتـا تـه‌کـسـت وه‌سـه چـأرخ بـأزوئـه‌ن",
        "tooltip-p-logo": "گَت صفحه ره بَدی‌ین",
        "tooltip-n-randompage": "اتت شانسی صفحه بَدی‌ین",
        "tooltip-n-help": "أتـا جـا کـه...",
        "tooltip-t-whatlinkshere": "هأمو ولـگ‌ئونی که ایجه ره لینک هه‌دانه",
-       "tooltip-t-recentchangeslinked": "اسایی دگاردسته‌ئون صفحه‌ئونی دله، که این صفحه جه لینک دارنه",
+       "tooltip-t-recentchangeslinked": "اِسایی دِگاردسته‌ئون ِصفحه‌ئون که این صفحه جه لینک دارنه",
        "tooltip-feed-rss": "RSS خوراک این صفحه وسّه",
        "tooltip-feed-atom": "Atom خوراک این صفحه وسّه",
        "tooltip-t-emailuser": "ای کـارور ره اتـا ئـه‌لـه‌کـتـه‌رونـیـکـی‌نـومـه راهـی هـه‌کـارده‌ن",
index 9872ead..31d47c4 100644 (file)
@@ -10,7 +10,8 @@
                        "SabineCretella",
                        "לערי ריינהארט",
                        "아라",
-                       "Candalua"
+                       "Candalua",
+                       "Macofe"
                ]
        },
        "tog-underline": "Sottolinia 'e jonte:",
        "disclaimers": "Avvertimiènte",
        "disclaimerpage": "Project:Avvertimiènte generale",
        "edithelp": "Guida",
+       "helppage-top-gethelp": "Ajùto",
        "mainpage": "Paggena prencepale",
        "mainpage-description": "Paggena prencepale",
        "policy-url": "Project:Policy",
        "readonly_lag": "'O database s'è bloccato automaticamente pe' tramente ca 'e servers 'e database schiave sincronizzano c' 'o server masto.",
        "internalerror": "Errore 'nterno",
        "internalerror_info": "Errore 'nterno: $1",
+       "internalerror-fatal-exception": "Errore irreversibbele 'e tipo \"$1\"",
        "filecopyerror": "Nun se può copiare 'o file \"$1\" int'a \"$2\".",
        "filerenameerror": "Nun se può rinnummenare 'o file \"$1\" into \"$2\".",
        "filedeleteerror": "Nun se pô scancellà 'o file \"$1\"",
        "wrongpassword": "'A password nzertàta nun è bbona.\nPe' piacere pruvate n'ata vota.",
        "wrongpasswordempty": "'A password nzertàta è abbacante.\nPe' piacere pruvate n'ata vota.",
        "passwordtooshort": "'E password hann'avé minimo {{PLURAL:$1|nu carattere|$1 carattere}}.",
+       "passwordtoolong": "'E password nun ponno essere cchiù luonghe 'e {{PLURAL:$1|nu carattere|$1 carattere}}.",
        "password-name-match": "'A password adda essere diverza 'a 'o nomme utente.",
        "password-login-forbidden": "L'uso 'e stu nomme utente e password è stato proibito.",
        "mailmypassword": "Riabbìa 'a password",
        "missingcommentheader": "'''Attenziò:''' nun s'è specificato l'oggetto/titolo 'e stu commento. Clicann' 'a \"{{int:savearticle}}\" n'ata vota 'o cagnamiento sarrà sarvato c' 'o titolo abbacante.",
        "summary-preview": "Anteprimma'e l'oggetto:",
        "subject-preview": "Anteprima 'e l'oggetto/intestazione:",
+       "previewerrortext": "È succiesso n'errore quanno se steva a ffà pre-veré 'e cagnamiente vuoste.",
        "blockedtitle": "Utente bloccato.",
        "blockedtext": "<strong>'O nomme utente o ll'IP vuosto è stato bloccato.</strong>\n\n'O blocco è stato mpustato 'a $1. 'O mutivo d' 'o blocco è chesto: ''$2''\n\n* Abbiàta d' 'o blocco: $8\n* Ammaturità d' 'o blocco: $6\n* Tiempo 'e blocco: $7\n\nPutite cuntattà $1 o n'atu [[{{MediaWiki:Grouppage-sysop}}|ammenistratore]] pe' discutere 'o blocco.\n\nVedite c' 'a funzione 'Scrivete a ll'utente' nun è attiva si nun s'è riggistrato 'o ndirizzo e-mail buono dint' 'e [[Special:Preferences|preferenze]] o pùre si ll'uso 'e tale funzione è stato bloccato.\n\n'O ndirizzo IP attuale è $3, 'o nummero ID d' 'o blocco è #$5.\nPe' piacere avite 'e specificà tutte sti dettaglie ccà ncoppa quanno facite cocche dumanna.",
        "autoblockedtext": "Ll'IP vuosto è stato bloccato pecché 'o steva piglianno n'atu utente, ch'è stato bloccato pe' $1.\n\n'O mutivo d' 'o blocco è chesto:\n\n:''$2''\n\n* Abbiàta d' 'o blocco: $8\n* Ammaturità d' 'o blocco: $6\n* Tiempo 'e blocco: $7\n\nPutite cuntattà $1 o n'atu [[{{MediaWiki:Grouppage-sysop}}|ammenistratore]] pe' discutere 'o blocco.\n\nVedite c' 'a funzione 'Scrivete a ll'utente' nun è attiva si nun s'è riggistrato 'o ndirizzo e-mail buono dint' 'e [[Special:Preferences|preferenze]] o pùre si ll'uso 'e tale funzione è stato bloccato.\n\n'O ndirizzo IP attuale è $3, 'o nummero ID d' 'o blocco è #$5.\nPe' piacere avite 'e specificà tutte sti dettaglie ccà ncoppa quanno facite cocche dumanna.",
        "notextmatches": "Voce addemannata nun truvata dint' 'e teste 'e articulo",
        "prevn": "{{PLURAL:$1|precedente|precedente $1}}",
        "nextn": "{{PLURAL:$1|successivo|successive $1}}",
+       "prev-page": "paggena 'e primma",
+       "next-page": "paggena aroppo",
        "prevn-title": "{{PLURAL:$1|Risultato precediente|$1 risultate precedenti}}",
        "nextn-title": "{{PLURAL:$1|Risultato successivo|$1 risultate successive}}",
        "shown-title": "Fa vere {{PLURAL:$1|'nu risultato|$1 risultate}} ppe paggena",
        "unusedimages": "File ca nun s'ausano",
        "wantedcategories": "Categurìe addimannate",
        "wantedpages": "Paggene cchiù addemannate",
+       "wantedpages-summary": "Elenco 'e paggene nun esistente ca teneno na parte assaje d' 'e link ca spuntassero a chiste. Pe' na lista 'e paggene nun esistente ca teneno redirect ca spuntassero a chiste, vide [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Titolo invalido mmiez' 'o nzieme 'e risultate: $1",
        "wantedfiles": "File addimannate",
        "wantedfiletext-cat": "Chisti file s'ausano ma nun esisteno. 'E file ca veneno 'e n'archivio 'e fore s'alencano ccà senza cuntrullà l'esistenza suja. Sti fauze pusitive sarranno <del>nzignate</del>. 'E paggene ca teneno sti file ca nun esisteno song'alencate dint'a [[:$1]].",
        "emailccsubject": "Copia d' 'a mmasciata tua 'a $1: $2",
        "emailsent": "Mmasciata e-mail mannata",
        "emailsenttext": "'A mmasciata d' 'a toja s'è mannata.",
-       "emailuserfooter": "Chista mmasciata e-mail è stata mannata 'a $1 a $2 p' 'a funziona \"Mmasciata e-mail a l'utente\" 'e {{SITENAME}}.",
+       "emailuserfooter": "Chista mmasciata e-mail è stata mannata 'a $1 a $2 p' 'a funziona \"{{int:emailpage}}\" 'e {{SITENAME}}.",
        "usermessage-summary": "Lassanno na mmasciata 'e sistema.",
        "usermessage-editor": "Mmasciatore d' 'o sistema",
        "watchlist": "Paggene cuntrullate",
        "thumbnail_image-missing": "'O file pare ca nun se trova: $1",
        "thumbnail_image-failure-limit": "Se so' fatte troppe tentative senza ngarrata ($1 o cchiù) 'a generà sta miniatura. Pruvate n'ata vota cchiù tarde.",
        "import": "Mpurta paggene",
-       "importinterwiki": "Mpurtazione transkwiki",
-       "import-interwiki-text": "Scigliete na wiki e nu titolo 'e paggena 'a mpurtà.\n'E date e l'editore s'astiparranno.\nTutte l'aziune 'e mpurtaziune nfra 'e wiki songo riggistrate dint' 'e [[Special:Log/import|riggistre 'e mpurtazione]].",
+       "importinterwiki": "Carreca paggene 'a n'ata wiki",
+       "import-interwiki-text": "Scigliete na wiki e nu titolo 'e paggena 'a mpurtà.\n'E date e l'editore s'astiparranno.\nTutt' 'e mpurtaziune 'a n'ati wiki songo riggistrate dint' 'e [[Special:Log/import|riggistre 'e mpurtazione]].",
        "import-interwiki-sourcewiki": "Wiki d'origgene:",
        "import-interwiki-sourcepage": "Paggena d'origgene:",
        "import-interwiki-history": "Copia tutt' 'a storia d' 'e verziune 'e sta paggena",
        "importcantopen": "Nun se può arapì 'o file 'e mpurtaziona",
        "importbadinterwiki": "Cullegamiento interwiki errato",
        "importsuccess": "Mpurtaziona fernuta!",
-       "importnosources": "Nisciuna fonte p' 'a mpurtaziona transwiki è stata definita; 'e carreche dirette 'e cronologgia nun songo attivate.",
+       "importnosources": "Nisciuna wiki, d' 'a quale s'avess'a mpurtà, è stata definita; 'e carreche dirette 'e cronologgia nun songo attivate.",
        "importnofile": "Nisciunu file 'e mpurtazione è stato carrecato.",
        "importuploaderrorsize": "'A carreca d' 'o file 'e mpurtazione nun è riuscita.\n'O file è cchiù gruosso d' 'a dimenziona massima 'e carreca.",
        "importuploaderrorpartial": "'A carreca d' 'o file mpurtato è fallita.\nNa parta d' 'o file file è stata carrecata ma nun a nu piezzo sano sano.",
        "import-rootpage-nosubpage": "'O namespace \"$1\" d' 'a pàggena princepale nun permette 'e sottopaggene.",
        "importlogpage": "Riggistro 'e mpurtaziune",
        "importlogpagetext": "Mpurtaziune ammenistrative 'e paggene c' 'a storia 'e cagnamiente 'e l'ati wiki.",
-       "import-logentry-upload": "ha mpurtato [[$1]] trammeto upload",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|verzione|verziune}} mpurtate",
-       "import-logentry-interwiki": "trasferito 'a n'ata wiki 'a paggena $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|verzione|verziune}} mpurtate 'a $2",
        "javascripttest": "Test JavaScript",
        "javascripttest-pagetext-noframework": "Sta paggena è riservata pe' l'esecuziune d' 'e test 'e Javascript.",
        "revdelete-uname-unhid": "nomme utente fatto avvedè",
        "revdelete-restricted": "restriziune apprecate a ll'ammenistrature",
        "revdelete-unrestricted": "restriziune luvate a ll'ammenistrature",
+       "logentry-block-block": "$1 {{GENDER:$2|ave bluccato}} {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|ave sbluccato}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|ave cagnato}} 'e mpustaziune 'e blocco pe' {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|ave bluccato}} {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|cagnaje}} 'e mpustaziune 'e blocco 'e {{GENDER:$4|$3}} ch' 'ammaturasse a nu $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|ave mpurtato}} $3 pe' bbìa d' 'a carreca",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|ave mpurtato}} $3 pe' bbìa 'e n'atu wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|aunito|aunita}} $3 int' 'a $4 (verziune nzin' 'a $5)",
        "logentry-move-move": "$1 {{GENDER:$2|muvette}} paggena $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|muvette}} paggena $3 a $4 senza lassà nu redirezionamiento",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|stutaje}} 'o tag \"$4\" pe' ll'uso d'utente e re bot",
        "rightsnone": "(nisciuno)",
        "revdelete-summary": "cagna 'o riepilego",
+       "feedback-adding": "Azzecca nu feedback/na segnalazione â paggena..",
+       "feedback-back": "Arreto",
+       "feedback-bugcheck": "Tutt'appost! Avite surtanto 'a cuntrullà ca chisto nun è unu d' 'e [$1 bug canusciute].",
+       "feedback-bugnew": "Aggio cuntrullato. Manna nu bug nuovo.",
        "feedback-bugornote": "Si site pronto/a a descrivere nu probblema tecnico ch' 'e dettaglie, pe' piacere [$1 mannate nu bug].\nSi nun site pronto/a, allora putite ausà 'o modulo semprice ca vedite ccà abbascio. 'O commento vuosto sarrà mpezzato dint' 'a paggena [$3 $2]\", seguenno 'o nomme utente vuosto e 'o navigatóre web ca state ausanno.",
-       "feedback-subject": "Suggietto:",
-       "feedback-message": "Mmasciata:",
        "feedback-cancel": "Canciella",
-       "feedback-submit": "Manna nu Feedback, na segnalazione",
-       "feedback-adding": "Azzecca nu feedback/na segnalazione â paggena..",
+       "feedback-close": "Fatto",
+       "feedback-external-bug-report-button": "Archivia na fatica tecnica",
+       "feedback-dialog-title": "Manna 'o feedback",
+       "feedback-dialog-intro": "Putite ausà sempricemente 'o modulo ccà abbascio pe' putè mannà 'o feedback vuosto. 'O cummento sarrà azzeccato â paggena \"$1\", nziem' 'o nomme vuosto.",
+       "feedback-error-title": "Errore",
        "feedback-error1": "Errore: Risultato nun aspettato 'a ll'API",
        "feedback-error2": "Errore: Cagnamiento scassato",
        "feedback-error3": "Errore: Ll'API nun risponne",
+       "feedback-error4": "Errore: Nun se può miette 'o commento p' 'o titulo",
+       "feedback-message": "Mmasciata:",
+       "feedback-subject": "Suggietto:",
+       "feedback-submit": "Manna",
+       "feedback-terms": "Me so' fatto/a capace ca ll'aggente 'e nfurmaziune 'e cunto ave accesso a nfurmaziune ncopp'a 'o navigatore e 'o browser ca stongo 'ausà e ca chisto sarrà spartuto pubbrecamente c' 'o feedback mio.",
+       "feedback-termsofuse": "So' d'accordo ca sto a mannà nu feedback cu sti térmene d'uso.",
        "feedback-thanks": "Grazie! 'O feedback vuosto s'è mpizzato dint' 'a paggena \"[$2 $1]\".",
-       "feedback-close": "Fatto",
-       "feedback-bugcheck": "Tutt'appost! Avite surtanto 'a cuntrullà ca chisto nun è unu d' 'e [$1 bug canusciute].",
-       "feedback-bugnew": "Aggio cuntrullato. Manna nu bug nuovo.",
+       "feedback-thanks-title": "Ve ringraziammo!",
+       "feedback-useragent": "Aggente utente:",
        "searchsuggest-search": "Truova",
        "searchsuggest-containing": "tène...",
        "api-error-badaccess-groups": "Tun putite carrecà file ncopp' 'a sta wiki.",
        "json-error-utf8": "'E carattere UTF-8 furmate malamente, probbabilmente nun se songhe ncodifecate bbuone",
        "json-error-recursion": "Uno o cchiù riferimente recurzive dint' 'o valore a codefecare",
        "json-error-inf-or-nan": "Uno o cchiù valure NAN o INF dint' 'o valore 'a codefecare",
-       "json-error-unsupported-type": "S'è dato nu valore pe' nu tipo ca nun se può ncodifecà"
+       "json-error-unsupported-type": "S'è dato nu valore pe' nu tipo ca nun se può ncodifecà",
+       "headline-anchor-title": "Cullega a sta sezziona",
+       "special-characters-group-latin": "Latino",
+       "special-characters-group-latinextended": "Latino spannuto",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simmule",
+       "special-characters-group-greek": "Grieco",
+       "special-characters-group-cyrillic": "Cirillico",
+       "special-characters-group-arabic": "Arabo",
+       "special-characters-group-arabicextended": "Arabo spannuto",
+       "special-characters-group-persian": "Perziano",
+       "special-characters-group-hebrew": "Abbrejo",
+       "special-characters-group-bangla": "Bangladesciano",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugo",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "trattino enne",
+       "special-characters-title-emdash": "trattino emme",
+       "special-characters-title-minus": "segno meno"
 }
index 1176b6a..9d2d63f 100644 (file)
@@ -42,7 +42,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Chameleon222",
-                       "Helland"
+                       "Helland",
+                       "Macofe"
                ]
        },
        "tog-underline": "Strek under lenker:",
        "disclaimers": "Forbehold",
        "disclaimerpage": "Project:Generelle forbehold",
        "edithelp": "Redigeringshjelp",
+       "helppage-top-gethelp": "Hjelp",
        "mainpage": "Forside",
        "mainpage-description": "Forside",
        "policy-url": "Project:Retningslinjer",
        "readonly_lag": "Databasen er automatisk skrivebeskyttet så slavetjenerne kan ta igjen mestertjeneren",
        "internalerror": "Intern feil",
        "internalerror_info": "Intern feil: $1",
+       "internalerror-fatal-exception": "Uhåndterlig unntak av typen «$1»",
        "filecopyerror": "Klarte ikke å kopiere filen «$1» til «$2».",
        "filerenameerror": "Klarte ikke å døpe om filen «$1» til «$2».",
        "filedeleteerror": "Klarte ikke å slette filen «$1».",
        "missingcommentheader": "'''Påminnelse:''' Du har ikke angitt et emne/overskrift for denne kommentaren.\nOm du trykker «{{int:savearticle}}» igjen vil redigeringen din bli lagret uten forklaring.",
        "summary-preview": "Forhåndsvisning av redigeringsforklaring:",
        "subject-preview": "Forhåndsvisning av emne/overskrift:",
+       "previewerrortext": "En feil oppsto mens dine endringer skulle forhåndsvises.",
        "blockedtitle": "Brukeren er blokkert",
        "blockedtext": "'''Ditt brukernavn eller din IP-adresse har blitt blokkert.'''\n\nBlokkeringen ble utført av $1. Grunnen som ble oppgitt var ''$2''.\n\n* Blokkeringen begynte: $8\n* Blokkeringen utgår: $6\n* Blokkering ment på: $7\n\nDu kan kontakte $1 eller en annen [[{{MediaWiki:Grouppage-sysop}}|administrator]] for å diskutere blokkeringen.\nDu kan ikke bruke «E-post til denne brukeren»-funksjonen med mindre du har oppgitt en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]] og du ikke er blokkert fra å sende e-post.\nDin nåværende IP-adresse er $3, og blokkerings-ID-en er #$5.\nVennligst ta all denne informasjonen ved henvendelser.",
        "autoblockedtext": "Din IP-adresse har blitt automatisk blokkert fordi den ble brukt av en annen bruker som ble blokkert av $1.\nDen oppgitte grunnen var:\n\n:'''$2'''\n\n* Blokkeringen begynte: $8\n* Blokkeringen utgår: $6\n* Blokkeringen er ment for: $7\n\nDu kan kontakte $1 eller en av de andre [[{{MediaWiki:Grouppage-sysop}}|administratorene]] for å diskutere blokkeringen.\n\nMerk at du ikke kan bruke «E-post til denne brukeren»-funksjonen med mindre du har registrert en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]].\n\nDin IP-adresse er $3, og blokkerings-ID-en er #$5.\nVennligst ta med all denne informasjonen ved henvendelser.",
        "newarticletext": "Du har fulgt en lenke til en side som ikke finnes ennå.\nFor å opprette siden, begynn å skrive i boksen under (se [$1 hjelpesiden] for mer informasjon).\nOm du havnet her ved en feil, trykk '''tilbake''' i nettleseren.",
        "anontalkpagetext": "----\n''Dette er en diskusjonsside for en uregistrert bruker som ikke har opprettet konto eller ikke er logget inn.\nVi er derfor nødt til å bruke den numeriske IP-adressen til å identifisere ham eller henne.\nEn IP-adresse kan være delt mellom flere brukere.\nHvis du er en uregistrert bruker og synes at du har fått irrelevante kommentarer på en slik side, [[Special:UserLogin/signup|opprett en konto]] eller [[Special:UserLogin|logg inn]] så vi unngår fremtidige forvekslinger med andre uregistrerte brukere.''",
        "noarticletext": "Det er for tiden ingen tekst på denne siden.\nDu kan [[Special:Search/{{PAGENAME}}|søke etter denne sidetittelen]] på andre sider,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relaterte logger],\neller [{{fullurl:{{FULLPAGENAME}}|action=edit}} opprette siden]</span>.",
-       "noarticletext-nopermission": "Det er for tiden ingen tekst på denne siden.\nDu kan [[Special:Search/{{PAGENAME}}|søke etter sidens tittel]] blant andre sider, eller <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relevante logger]</span>.",
+       "noarticletext-nopermission": "Det er for tiden ingen tekst på denne siden.\nDu kan [[Special:Search/{{PAGENAME}}|søke etter sidens tittel]] blant andre sider, eller <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relevante logger]</span>, men du har ikke tillatelse til å opprette denne siden.",
        "missing-revision": "Revisjonen #$1 av siden med navnet \"{{FULLPAGENAME}}\" eksisterer ikke.\n\nDette skyldes som regel at en gammel historikklenke er fulgt til en side som er slettet.\nDetaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
        "userpage-userdoesnotexist": "Brukerkontoen «$1» er ikke registrert.\nSjekk om du ønsker å opprette/redigere denne siden.",
        "userpage-userdoesnotexist-view": "Kontoen «$1» er ikke registrert.",
        "showhideselectedversions": "Vis/skjul valgte versjoner",
        "editundo": "fjern",
        "diff-empty": "(Ingen forskjell)",
-       "diff-multi-sameuser": "({{PLURAL:$1|En mellomliggende revisjon|$1 mellomliggende revisjoner}} av samme bruker vises ikke)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Én mellomliggende revisjon|$1 mellomliggende revisjoner}} av samme bruker vises ikke)",
        "diff-multi-otherusers": "({{PLURAL:$1|En mellomliggende revisjon|$1 mellomliggende revisjoner}} av {{PLURAL:$2|en annen bruker|$2 brukere}} er ikke vist)",
        "diff-multi-manyusers": "({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av mer enn $2 {{PLURAL:$2|bruker|brukere}} vises ikke)",
        "difference-missing-revision": "{{PLURAL:$2|En revisjon|$2 revisjoner}} av denne forskjellen ($1) {{PLURAL:$2|ble|ble}} ikke funnet.\n\nDette skyldes som regel at en gammel forskjell-lenke er fulgt til en side som er slettet.\nDetaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
        "shown-title": "Vis $1 {{PLURAL:$1|resultat|resultater}} per side",
        "viewprevnext": "Vis ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "* Siden '''[[$1]]'''",
-       "searchmenu-new": "'''Opprett siden ''[[:$1]]'' på denne wikien.'''\n<strong>Opprett siden \"[[:$1]]\" på denne wikien!</strong> {{PLURAL:$2|0=|Se også siden oppnådd gjennom søket ditt.|Se også de oppnådde søkeresultatene.}}",
+       "searchmenu-new": "<strong>Opprett siden \"[[:$1]]\" på denne wikien!</strong> {{PLURAL:$2|0=|Se også siden oppnådd gjennom søket ditt.|Se også de oppnådde søkeresultatene.}}",
        "searchprofile-articles": "Innholdssider",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alt",
        "prefs-personal": "Brukerdata",
        "prefs-rc": "Siste endringer",
        "prefs-watchlist": "Overvåkningsliste",
+       "prefs-editwatchlist": "Rediger overvåkningsliste",
+       "prefs-editwatchlist-label": "Rediger elementer på overvåkningslista di:",
+       "prefs-editwatchlist-edit": "Vis og fjern titler fra overvåkningslista di",
+       "prefs-editwatchlist-raw": "Rediger rå overvåkningsliste",
+       "prefs-editwatchlist-clear": "Slett overvåkningslista di",
        "prefs-watchlist-days": "Dager som skal vises i overvåkningslisten:",
        "prefs-watchlist-days-max": "Maksimalt $1 {{PLURAL:$1|dag|dager}}",
        "prefs-watchlist-edits": "Antall redigeringer som skal vises i utvidet overvåkningsliste:",
        "right-override-export-depth": "Eksporter sider inkludert lenkede sider til en dypde på 5",
        "right-sendemail": "Send e-post til andre brukere",
        "right-passwordreset": "Vis e-poster over tilbakestilte passord",
+       "right-managechangetags": "Opprette og slette [[Special:Tags|tagger]] fra databasen",
        "newuserlogpage": "Brukeropprettelseslogg",
        "newuserlogpagetext": "Dette er en logg over brukeropprettelser.",
        "rightslog": "Brukerrettighetslogg",
        "action-viewmyprivateinfo": "vise din private informasjon",
        "action-editmyprivateinfo": "rediger din private informasjon",
        "action-editcontentmodel": "rediger innholdsmodellen til en side",
+       "action-managechangetags": "opprette og slette tagger fra databasen",
        "nchanges": "$1 {{PLURAL:$1|endring|endringer}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|siden forrige besøk}}",
        "enhancedrc-history": "historikk",
        "recentchanges-label-minor": "Dette er en mindre endring",
        "recentchanges-label-bot": "Denne redigeringen ble gjort av en bot",
        "recentchanges-label-unpatrolled": "Denne redigeringen har ikke blitt patruljert ennå",
-       "recentchanges-label-plusminus": "Sidestørrelsen er endra med dette antallet byte",
+       "recentchanges-label-plusminus": "Sidestørrelsen ble endret med dette antallet byte",
        "recentchanges-legend-heading": "'''Tegnforklaring:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|liste av nye sider]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|liste over nye sider]])",
        "recentchanges-legend-plusminus": "«(±123)»",
        "rcnotefrom": "Nedenfor er vist {{PLURAL:$5|endringen|endringene}} som er gjort siden <strong>$3, $4</strong> (frem til <strong>$1</strong>).",
        "rclistfrom": "Vis nye endringer fra og med $3 $2",
        "uploaderror": "Feil under opplasting av fil",
        "upload-recreate-warning": "'''Advarsel: En fil med det navnet har blitt slettet eller flyttet.'''\n\nSlette- og flytteloggen for denne siden gjengis her:",
        "uploadtext": "Bruk skjemaet nedenfor for å laste opp filer.\nFor å se eller søke i eksisterende filer, gå til [[Special:FileList|listen over filer]]. Opplastinger lagres også i [[Special:Log/upload|opplastingsloggen]] og slettinger i [[Special:Log/delete|sletteloggen]].\n\nFor å inkludere en fil på en side, bruk en slik lenke:\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Filnavn.jpg]]</nowiki></code>''' for å bruke bildet i opprinnelig form\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Filnavn.png|200px|thumb|left|Alternativ tekst]]</nowiki></code>''' for å bruke bildet med en bredde på 200&nbsp;piksler, venstrestilt og med «Alternativ tekst» som beskrivelse\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Filnavn.ogg]]</nowiki></code>''' for å lenke direkte til filen uten å vise den",
-       "upload-permitted": "Tillatte filtyper: $1.",
-       "upload-preferred": "Foretrukne filtyper: $1",
-       "upload-prohibited": "Forbudte filtyper: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tillatt filtype|Tillatte filtyper}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Foretrukket filtype|Foretrukne filtyper}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Forbudt filtype|Forbudte filtyper}}: $1.",
        "uploadlogpage": "Opplastingslogg",
        "uploadlogpagetext": "Her er en liste over de siste opplastede filene.\nSe [[Special:NewFiles|galleriet over nye filer]] for en mer visuell visning",
        "filename": "Filnavn",
        "withoutinterwiki-legend": "Prefiks",
        "withoutinterwiki-submit": "Vis",
        "fewestrevisions": "Artikler med færrest revisjoner",
-       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
+       "nbytes": "$1 {{PLURAL:$1|byte}}",
        "ncategories": "$1 {{PLURAL:$1|kategori|kategorier}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikier}}",
        "nlinks": "$1 {{PLURAL:$1|lenke|lenker}}",
        "unusedimages": "Ubrukte filer",
        "wantedcategories": "Ønskede kategorier",
        "wantedpages": "Etterspurte sider",
+       "wantedpages-summary": "Liste av ikke-eksisterende sider med flest lenker mot dem, bortsett fra omdirigeringer. Den siste gruppen finnes gjennom [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Ugyldig tittel i resultatene: $1",
        "wantedfiles": "Ønskede filer",
        "wantedfiletext-cat": "Følgende filer refereres, men eksisterer ikke. Filer fra fremmede samlinger kan listes selv om de ikke finnes. Alle slik falske treff vil <del>strykes</del>. I tillegg er sider som har innebygde, ikke-eksisterende filer listet opp i [[:$1]].",
        "thumbnail_image-missing": "Filen ser ut til å mangle: $1",
        "thumbnail_image-failure-limit": "Det har vært for mange nylige forsøk ($1 eller flere) på å gjengi dette miniatyrbildet. Vennligst prøv igjen senere.",
        "import": "Importer sider",
-       "importinterwiki": "Transwiki-importering",
-       "import-interwiki-text": "Velg en wiki og en side å importere. Revisjonsdatoer og bidragsyteres navn blir bevart. Alle transwiki-importeringer listes i [[Special:Log/import|importloggen]].",
+       "importinterwiki": "Importere fra en annen wiki",
+       "import-interwiki-text": "Velg en wiki og en side å importere.\nRevisjonsdatoer og bidragsyteres navn blir bevart. Alle transwiki-importeringer listes i [[Special:Log/import|importloggen]].",
        "import-interwiki-sourcewiki": "Kildewiki:",
        "import-interwiki-sourcepage": "Kildeside:",
        "import-interwiki-history": "Kopier all historikk for denne siden",
        "import-rootpage-nosubpage": "Navnerommet \"$1\" til grunnsiden tillater ikke undersider.",
        "importlogpage": "Importlogg",
        "importlogpagetext": "Administrativ import av sider med redigeringshistorikk fra andre wikier.",
-       "import-logentry-upload": "importerte [[$1]] ved opplasting",
        "import-logentry-upload-detail": "{{PLURAL:$1|\\Én revisjon|$1 revisjoner}} er importert",
-       "import-logentry-interwiki": "transwikiimporterte $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Én revisjon|$1 revisjoner}} er importert fra $2",
        "javascripttest": "JavaScript-testing",
        "javascripttest-pagetext-noframework": "Denne siden er reservert for å kjøre JavaScript-tester.",
        "tooltip-search": "Søk i {{SITENAME}}",
        "tooltip-search-go": "Gå til en side med dette navnet om den finnes",
        "tooltip-search-fulltext": "Søk etter sider som innholder denne teksten",
-       "tooltip-p-logo": "Hovedside",
+       "tooltip-p-logo": "Gå til hovedsiden",
        "tooltip-n-mainpage": "Gå til hovedsiden",
        "tooltip-n-mainpage-description": "Gå til hovedsiden",
        "tooltip-n-portal": "Om prosjektet, hva du kan gjøre, hvor du kan finne ting",
        "version-parser-function-hooks": "Parserfunksjoner",
        "version-hook-name": "Navn",
        "version-hook-subscribedby": "Brukes av",
-       "version-version": "(versjon $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[uten navn]",
        "version-license": "Lisens",
        "version-ext-license": "Lisens",
        "tags-tag": "Taggnavn",
        "tags-display-header": "Utseende på endringslister",
        "tags-description-header": "Fullstendig betydning",
+       "tags-source-header": "Kilde",
        "tags-active-header": "Aktive?",
        "tags-hitcount-header": "Taggede endringer",
+       "tags-actions-header": "Handlinger",
        "tags-active-yes": "Ja",
        "tags-active-no": "Nei",
+       "tags-source-extension": "Definert av en utvidelse",
+       "tags-source-manual": "Brukes manuelt av brukere og roboter",
+       "tags-source-none": "Brukes ikke lenger",
        "tags-edit": "rediger",
+       "tags-delete": "slett",
+       "tags-activate": "aktiver",
+       "tags-deactivate": "deaktiver",
        "tags-hitcount": "{{PLURAL:$1|én endring|$1 endringer}}",
+       "tags-manage-no-permission": "Du har ikke tillatelse til å behandle tagger.",
+       "tags-create-heading": "Opprett ny tagg",
+       "tags-create-explanation": "Som standard vil nyopprettede tagger være tilgjengelige for brukere og roboter.",
+       "tags-create-tag-name": "Taggnavn:",
+       "tags-create-reason": "Årsak:",
+       "tags-create-submit": "Opprett",
+       "tags-create-no-name": "Du må oppgi et taggnavn.",
+       "tags-create-invalid-chars": "Taggnavn kan ikke inneholde kommaer (<code>,</code>) eller skråstreker (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Taggnavn kan ikke inneholde tegn som ikke kan brukes i sidetitler.",
+       "tags-create-already-exists": "Taggen «$1» finnes fra før.",
+       "tags-create-warnings-above": "Vi fikk følgende {{PLURAL:$2|advarsel|advarsler}} da vi prøvde å opprette taggen «$1»:",
+       "tags-create-warnings-below": "Ønsker du å fortsette å opprette taggen?",
+       "tags-delete-title": "Slett tagen",
+       "tags-delete-explanation-initial": "Du er i ferd med å slette taggen «$1» fra databasen.",
+       "tags-delete-explanation-in-use": "Den vil bli fjernet fra {{PLURAL:$2|$2 revisjon eller loggoppføring|alle $2 revisjoner og/eller loggoppføringer}} der den er i bruk.",
+       "tags-delete-explanation-warning": "Derne handlingen <strong>kan ikke gjøres om</strong>, ikke engang av administratorer. Vær helt sikker på at dette er taggen du mente å slette.",
+       "tags-delete-explanation-active": "<strong>Taggen «$1» er fortsatt aktiv, og vil fortsatt bli brukt i framtiden.</strong> For å hindre dette fra å skje, gå til stedet/stedene der taggen er satt til å brukes, og slå den av derfra.",
+       "tags-delete-reason": "Årsak:",
+       "tags-delete-submit": "Slett denne taggen",
+       "tags-delete-not-allowed": "Tagger definert av utvidelser kan ikke slettes med mindre utvidelsen tillater det.",
+       "tags-delete-not-found": "Taggen «$1» finnes ikke.",
+       "tags-delete-too-many-uses": "Taggen «$1» brukes på mer enn $2 {{PLURAL:$2|revisjon|revisjoner}}, hvilket betyr at den ikke kan slettes.",
+       "tags-delete-warnings-after-delete": "Taggen «$1» ble slettet, men følgende {{PLURAL:$2|advarsel|advarsler}} dukket opp:",
+       "tags-activate-title": "Aktiver taggen",
+       "tags-activate-question": "Du er i ferd med å aktivere taggen «$1».",
+       "tags-activate-reason": "Årsak:",
+       "tags-activate-not-allowed": "Det er ikke mulig å aktivere taggen «$1».",
+       "tags-activate-not-found": "Taggen «$1» finnes ikke.",
+       "tags-activate-submit": "Aktiver",
+       "tags-deactivate-title": "Deaktiver taggen",
+       "tags-deactivate-question": "Du er i ferd med å deaktivere taggen «$1».",
+       "tags-deactivate-reason": "Årsak:",
+       "tags-deactivate-not-allowed": "Det er ikke mulig å deaktivere taggen «$1».",
+       "tags-deactivate-submit": "Deaktiver",
        "comparepages": "Sammenlign sider",
        "compare-page1": "Side 1",
        "compare-page2": "Side 2",
        "revdelete-uname-unhid": "brukernavn synlig",
        "revdelete-restricted": "begrensninger gjelder også administratorer",
        "revdelete-unrestricted": "fjernet begrensninger for administratorer",
+       "logentry-block-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} med en utløpstid på $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|opphevet blokkeringen av}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingen av {{GENDER:$4|$3}} med en utløpstid på $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} med en utløpstid på $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingen for {{GENDER:$4|$3}} med en utløpstid på $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|importert}} $3 gjennom filopplastning",
        "logentry-merge-merge": "$1 {{GENDER:$2|slo sammen}} $3 i $4 (versjonene t.o.m. $5)",
        "logentry-move-move": "$1 {{GENDER:$2|flyttet}} siden $3 til $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|flyttet}} siden $3 til $4 uten å etterlate en omdirigering",
        "logentry-upload-upload": "$1 {{GENDER:$2|lastet opp}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|lastet opp}} en ny versjon av $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|lastet opp}} $3",
+       "log-name-managetags": "Taggbehandlingslogg",
+       "log-description-managetags": "Denne siden lister opp behandlingsoppgaver i forbindelse med [[Special:Tags|tagger]]. Loggen inneholder bare handlinger som er blitt gjort manuelt av en administrator; tagger kan opprettes eller slettes av programvaren uten at det kommer et oppslag i denne loggen.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|opprettet}} taggen «$4»",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|slettet}} taggen «$4» (fjernet fra $5 {{PLURAL:$5|revisjon eller loggoppføring|revisjoner og/eller loggoppføringer}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|aktiverte}} taggen «$4» for bruke av brukere og roboter",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|deaktiverte}} taggen «$4» for bruk av brukere og roboter",
        "rightsnone": "(ingen)",
        "revdelete-summary": "redigeringssammendrag",
+       "feedback-adding": "Tilføyer tilbakmelding til side ...",
+       "feedback-back": "Tilbake",
+       "feedback-bugcheck": "Suprert! Bare sjekk at den ikke er en av de [$1 kjente feilene]",
+       "feedback-bugnew": "Jeg sjekket. Rapporter en ny bug.",
        "feedback-bugornote": "Hvis du er klar til å sende inn en detaljert feilrapport, vennligst [$1 rapporter en feil].\nOm det ikke er tilfellet, kan du bruke det enkle skjemaet som du finner under. Kommentaren din vil bli lagt til siden \"[$3 $2]\", sammen med brukernavnet ditt og informasjon om hvilken nettleser du bruker.",
-       "feedback-subject": "Emne:",
-       "feedback-message": "Melding:",
        "feedback-cancel": "Avbryt",
-       "feedback-submit": "Send tilbakemelding",
-       "feedback-adding": "Tilføyer tilbakmelding til side ...",
+       "feedback-close": "Utført",
+       "feedback-external-bug-report-button": "Registrer en teknisk sak",
+       "feedback-dialog-title": "Send tilbakemelding",
+       "feedback-error-title": "Feil",
        "feedback-error1": "Feil: Ukjent resultat fra API",
        "feedback-error2": "Feil: Redigering feilet",
        "feedback-error3": "Feil: Ingen respons fra API",
+       "feedback-message": "Melding:",
+       "feedback-subject": "Emne:",
+       "feedback-submit": "Send",
        "feedback-thanks": "Din tilbakemelding til siden \"[ $2  $1 ]\" er sendt. Takk skal du ha!",
-       "feedback-close": "Utført",
-       "feedback-bugcheck": "Suprert! Bare sjekk at den ikke er en av de [$1 kjente feilene]",
-       "feedback-bugnew": "Jeg sjekket. Rapporter en ny bug.",
+       "feedback-thanks-title": "Takk!",
+       "feedback-useragent": "Brukeragent",
        "searchsuggest-search": "Søk",
        "searchsuggest-containing": "inneholder …",
        "api-error-badaccess-groups": "Du har ikke tillatelse til å laste opp filer til denne wikien.",
        "json-error-utf8": "Feilaktige UTF-8-tegn, muligens feilkodet",
        "json-error-recursion": "En eller flere rekursive referanser i verdien som skal kodes",
        "json-error-inf-or-nan": "En eller flere NAN- eller INF-verdier i verdien som skal kodes",
-       "json-error-unsupported-type": "En verdi av en type som ikke kan kodes ble angitt"
+       "json-error-unsupported-type": "En verdi av en type som ikke kan kodes ble angitt",
+       "headline-anchor-title": "Lenke til denne seksjonen",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Utvidet Latin",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symboler",
+       "special-characters-group-greek": "Gresk",
+       "special-characters-group-cyrillic": "Kyrillisk",
+       "special-characters-group-arabic": "Arabisk",
+       "special-characters-group-arabicextended": "Utvidet arabisk",
+       "special-characters-group-persian": "Persisk",
+       "special-characters-group-hebrew": "Hebraisk",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamilsk",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalesisk",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Laotisk",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "tankestrek",
+       "special-characters-title-emdash": "lang tankestrek",
+       "special-characters-title-minus": "minustegn"
 }
index 696cb20..f54cc78 100644 (file)
@@ -15,7 +15,8 @@
                        "Ævar Arnfjörð Bjarmason <avarab@gmail.com>",
                        "לערי ריינהארט",
                        "아라",
-                       "Kolega2357"
+                       "Kolega2357",
+                       "Macofe"
                ]
        },
        "tog-underline": "Verwiezingen onderstrepen",
        "editlink": "bewark",
        "viewsourcelink": "brontekste bekieken",
        "editsectionhint": "Bewarkingsveld: $1",
-       "toc": "Kömp an bod",
+       "toc": "Inhold",
        "showtoc": "Bekieken",
        "hidetoc": "Verbarg",
        "collapsible-collapse": "Inklappen",
        "createaccounterror": "Kon de gebrukersnaam niet anmaken: $1",
        "nocookiesnew": "De gebrukersnaam is an-emaakt, mer je bin niet an-emeld.\n{{SITENAME}} gebruuk scheumbestaanden (cookies) um gebrukers an te melden.\nJe hebben disse scheumbestaanden uutezet.\nZet ze an, en meld daornao an mit de nieje gegevens.",
        "nocookieslogin": "t Anmelden is mislokt umdat de webkieker gien scheumbestaanden (cookies) an hef staon. Probeer t aksepteren van scheumbestaanden an te zetten en daornao opniej an te melden.",
-       "nocookiesfornew": "De gebruker is niet an-emaakt, umdat de bron niet bevestigd kon wörden.\nZörg derveur da'j scheumbestaanden (cookies) an hebben staon, herlaoj disse zied en probeer t opniej.",
+       "nocookiesfornew": "De gebruker is niet an-emaakt, umdat de bron niet bevestigd kon wörden.\nZörg derveur da'j scheumbestaanden (cookies) an hebben staon, herlaoi disse zied en probeer t opniej.",
        "noname": "Je mutten n gebrukersnaam opgeven.",
        "loginsuccesstitle": "Suksesvol an-emeld",
        "loginsuccess": "Je bin noen an-emeld bie {{SITENAME}} as \"$1\".",
        "revdelete-show-file-confirm": "Bi'j der wisse van da'j de vortedaone versie van t bestaand \"<nowiki>$1</nowiki>\" van $2 um $3 bekieken willen?",
        "revdelete-show-file-submit": "Ja",
        "logdelete-selected": "{{PLURAL:$1|Ekeuzen logboekboekaksie|Ekeuzen logboekaksies}}:",
+       "revdelete-text-text": "Vortedaone versies bin nog altied zichtbaor in de geschiedenisse, mer delen van de inhoud bin niet openbaor.",
+       "revdelete-text-file": "Vortedaone versies bin nog altied zichtbaor in de bestaandsgeschiedenisse, mer delen van de inhoud bin niet openbaor.",
+       "revdelete-text-others": "Aandere beheerders kunnen de verbörgen inhoud nog altied inzien en weer zichtbaor maken, behalven as der anvullende beparkingen in-esteld bin.",
        "revdelete-confirm": "Bevestig da'j dit doon wollen, da'j de gevolgen dervan begriepen en da'j t doon in overeenstemming mit t geldende [[{{MediaWiki:Policy-url}}|beleid]].",
        "revdelete-suppress-text": "Onderdrokken ma'j '''allinnig''' gebruken in de volgende gevallen:\n* Ongepassen persoonlike informasie\n*: ''adressen en tillefoonnummers, burgerservicenummers, en gao zo mer deur.''",
        "revdelete-legend": "Stel versiebeparkingen in:",
        "suppressionlog": "Verbargingslogboek",
        "suppressionlogtext": "In de onderstaande lieste staon de vortedaone ziejen en blokkeringen die veur beheerders verbörgen bin. \nIn de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toepassige bin, te bekieken.",
        "mergehistory": "Geschiedenisse van ziejen bie mekaar doon",
-       "mergehistory-header": "Via disse zied ku'j versies uut de geschiedenisse van n bronzied mit n niejere zied samenvoegen. Zörg derveur dat disse versies uut de geschiedenisse histories juus bin.",
+       "mergehistory-header": "Via disse zied ku'j versies uut de geschiedenisse van n bronzied mit n niejere zied samenvoegen. Zörg derveur dat disse versies uut de geschiedenisse histories juust bin.",
        "mergehistory-box": "Geschiedenisse van twee ziejen bie mekaar doon:",
        "mergehistory-from": "Bronzied:",
        "mergehistory-into": "Bestemmingszied:",
        "prefs-personal": "Gebrukersgegevens",
        "prefs-rc": "Leste wiezigingen",
        "prefs-watchlist": "Volglieste",
+       "prefs-editwatchlist-label": "Onderwarpen op joew volglieste bewarken:",
+       "prefs-editwatchlist-edit": "Onderwarpen op mien volgliesten bekieken en vortdoon",
        "prefs-watchlist-days": "Antal dagen in de volglieste bekieken:",
        "prefs-watchlist-days-max": "Hooguut $1 {{PLURAL:$1|dag|dagen}}",
        "prefs-watchlist-edits": "Antal wiezigingen in de uutebreiden volglieste:",
        "right-reupload": "n Bestaond bestaand overschrieven",
        "right-reupload-own": "Bestaanden overschrieven die'j der zelf bie ezet hebben",
        "right-reupload-shared": "Media uut de edeelden mediadatabanke plaotselik overschrieven",
-       "right-upload_by_url": "Bestaanden inlaojen via n webadres",
+       "right-upload_by_url": "Bestaanden oplaojen via n webadres",
        "right-purge": "t Tussengeheugen van n zied legen",
        "right-autoconfirmed": "Uutezonderd van IP-adres-ebaseerden tiedsaofhankelike beparkingen",
        "right-bot": "Behaandeld wörden as n eautomatiseerd preces",
        "action-upload": "dit bestaand opsturen",
        "action-reupload": "dit bestaonde bestaand overschrieven",
        "action-reupload-shared": "n aander bestaand over dit bestaand uut de edeelden mediadatabanke hinne zetten.",
-       "action-upload_by_url": "dit bestaand vanaof n webadres inlaojen",
+       "action-upload_by_url": "dit bestaand vanaof n webadres oplaojen",
        "action-writeapi": "de schrief-API bewarken",
        "action-delete": "disse zied vortdoon",
        "action-deleterevision": "disse versie vortdoon",
        "recentchangeslinked-feed": "Volg verwiezigingen",
        "recentchangeslinked-toolbox": "Volg verwiezigingen",
        "recentchangeslinked-title": "Wiezigingen verwaant an $1",
-       "recentchangeslinked-summary": "Op disse spesiale zied steet n lieste mit de leste wieziginen op ziejen waornaor verwezen wörden. Ziejen op [[Special:Watchlist|joew volglieste]] staon '''vet-edrokt'''.",
+       "recentchangeslinked-summary": "Op disse spesiale zied steet n lieste mit de leste wieziginen op ziejen waornaor verwezen wördt. Ziejen op [[Special:Watchlist|joew volglieste]] staon '''vet'''.",
        "recentchangeslinked-page": "Ziednaam:",
        "recentchangeslinked-to": "Bekiek wiezigingen op ziejen mit verwiezingen naor disse zied",
        "upload": "Bestaand opsturen",
        "uploadnologintext": "Je mutten $1 ween um bestaanden op te kunnen sturen.",
        "upload_directory_missing": "De inlaojmap veur bestaanden ($1) is vort en kon niet an-emaakt wörden deur de webserver.",
        "upload_directory_read_only": "Op t moment ku'j gien bestaanden opsturen vanwegen techniese problemen ($1).",
-       "uploaderror": "Fout bie t inlaojen van t bestaand",
+       "uploaderror": "Fout bie t oplaojen van t bestaand",
        "upload-recreate-warning": "'''Waorschuwing: der is n bestaand mit disse naam vortedaon of herneumd.'''\n\nHieronder steet t vortdologboek en t herneumlogboek veur disse zied:",
        "uploadtext": "Gebruuk t formulier hieronder um bestaanden op te sturen.\nUm bestaanden te bekieken of te zeuken die eerder al op-estuurd bin, ku'j naor de [[Special:FileList|bestaandslieste]] gaon.\nBestaanden en media die nao t vortdoon opniej op-estuurd wörden ku'j in de smiezen houwen in t [[Special:Log/upload|logboek mit nieje bestaanden]] en t [[Special:Log/delete|vortdologboek]].\n\nUm t bestaand in te voegen in n zied ku'j een van de volgende kodes gebruken:\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.jpg]]</nowiki>'''\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.png|alternatieve tekste]]</nowiki>'''\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestaand.ogg]]</nowiki>''' drekte verwiezing naor n bestaand.",
        "upload-permitted": "Toe-estaone bestaandstypes: $1.",
        "upload-preferred": "An-ewezen bestaandstypes: $1.",
        "upload-prohibited": "Verbeujen bestaandstypes: $1.",
        "uploadlogpage": "Logboek mit nieje bestaanden",
-       "uploadlogpagetext": "Hieronder steet n lieste mit bestaanden die net niej bin.\nZie de [[Special:NewFiles|uutstalling mit media]] veur n overzichte.",
+       "uploadlogpagetext": "Hieronder steet n lieste mit bestaanden die net niej bin.\nZie de [[Special:NewFiles|uutstalling mit media]] veur n overzicht.",
        "filename": "Bestaandsnaam",
        "filedesc": "Beschrieving",
        "fileuploadsummary": "Beschrieving:",
        "file-thumbnail-no": "De bestaandsnaam begint mit <strong>$1</strong>.\nDit is warschienlik n verkleinde aofbeelding ''(overzichsaofbeelding)''.\nA'j disse aofbeelding in volle grootte hebben voeg t dan toe, wiezig aanders de bestaandsnaam.",
        "fileexists-forbidden": "n Bestaand mit disse naam besteet al, en kan niet overschreven wörden.\nVoeg t bestaand toe onder n aandere naam.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Der besteet al n bestaand mit disse naam in de gezamenlike bestaandslokasie.\nA'j t bestaand evengoed op willen sturen, gao dan weerumme en kies n aandere naam.\n[[File:$1|thumb|center|$1]]",
-       "file-exists-duplicate": "Dit bestaand is liek alleens as {{PLURAL:$1|t volgende bestaand|de volgende bestaanden}}:",
-       "file-deleted-duplicate": "n Bestaand dat liek alleens is an dit bestaand ([[:$1]]) is eerder al vortedaon.\nBekiek t vortdologboek veurda'j verdan gaon.",
+       "file-exists-duplicate": "Dit bestaand is gelieke an {{PLURAL:$1|t volgende bestaand|de volgende bestaanden}}:",
+       "file-deleted-duplicate": "n Bestaand dat gelieke is an dit bestaand ([[:$1]]) is eerder al vortedaon.\nBekiek t vortdologboek veurda'j vedan gaon.",
        "uploadwarning": "Waorschuwing",
        "uploadwarning-text": "Pas de bestaandsbeschrieving hieronder an en probeer t opniej",
        "savefile": "Bestaand opslaon",
        "php-uploaddisabledtext": "t Opsturen van PHP-bestaanden is uutezet. Kiek de instellingen veur t opsturen van bestaanden effen nao.",
        "uploadscripted": "In dit bestaand steet HTML- of skriptkode die verkeerd elezen kan wörden deur de webkieker.",
        "uploadvirus": "In dit bestaand zit n virus! Gegevens: $1",
-       "uploadjava": "t Bestaand is n ZIP-bestaand waor n Java .class-bestaand in zit.\nt Inlaojen van Java-bestaanden is niet toe-estaon umdat hiermee beveiligingsinstellingen umzeild kunnen wörden.",
+       "uploadjava": "t Bestaand is n ZIP-bestaand waor n Java .class-bestaand in zit.\nt Oplaojen van Java-bestaanden is niet toe-estaon umdat hiermee beveiligingsinstellingen umzeild kunnen wörden.",
        "upload-source": "Bronbestaand",
        "sourcefilename": "Bestaandsnaam op de hardeschieve:",
        "sourceurl": "Bronwebadres:",
        "filename-bad-prefix": "De naam van t bestaand da'j opsturen, begint mit '''\"$1\"''', dit is n niet-beschrievende naam die meestentieds automaties deur n digitale kamera egeven wörden. Kies n dudelike naam veur t bestaand.",
        "upload-success-subj": "t Bestaand is op-estuurd",
        "upload-success-msg": "t Bestaand [$2] steet derop. Je kunnen t hier vienen: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Probleem bie t inlaojen van t bestaand",
-       "upload-failure-msg": "Der was n probleem bie t inlaojen van [$2]:\n\n$1",
+       "upload-failure-subj": "Probleem bie t oplaojen van t bestaand",
+       "upload-failure-msg": "Der was n probleem bie t oplaojen van [$2]:\n\n$1",
        "upload-warning-subj": "Waorschuwing veur t opsturen van bestaanden",
-       "upload-warning-msg": "Der was n probleem mit t inlaojen van t bestaand [$2].\nGao weerumme naor t [[Special:Upload/stash/$1|opstuurformulier]] um dit probleem te verhelpen.",
+       "upload-warning-msg": "Der was n probleem mit t oplaojen van t bestaand [$2].\nGao weerumme naor t [[Special:Upload/stash/$1|opstuurformulier]] um dit probleem te verhelpen.",
        "upload-proto-error": "Verkeerd protokol",
        "upload-proto-error-text": "Um op disse maniere bestaanden toe te voegen mutten webadressen beginnen mit <code>http://</code> of <code>ftp://</code>.",
        "upload-file-error": "Interne fout",
        "upload-file-error-text": "Bie ons gung der effen wat fout to n tiedelik bestaand op de server an-emaakt wörden. Neem kontakt op mit n [[Special:ListUsers/sysop|beheerder]].",
-       "upload-misc-error": "Onbekende fout bie t inlaojen van joew bestaand",
-       "upload-misc-error-text": "Der is bie t inlaojen van t bestaand n onbekende fout op-etrejen. \nKiek effen nao of de verwiezing t wel döt en probeer t opniej. \nAs t probleem zo blif, neem dan kontakt op mit één van de [[Special:ListUsers/sysop|beheerders]].",
+       "upload-misc-error": "Onbekende fout bie t oplaojen van joew bestaand",
+       "upload-misc-error-text": "Der is bie t oplaojen van t bestaand n onbekende fout op-etrejen. \nKiek effen nao of de verwiezing t wel dut en probeer t opniej. \nAs t probleem zo blif, neem dan kontakt op mit één van de [[Special:ListUsers/sysop|beheerders]].",
        "upload-too-many-redirects": "Der zatten te veule deurverwiezingen in de URL.",
        "upload-http-error": "Der is n HTTP-fout op-etrejen: $1",
        "upload-copy-upload-invalid-domain": "Bestaanden per kopie opsturen is niet beschikbaor vanuut dit domein.",
        "nolinkstoimage": "Bestaand is niet in gebruuk.",
        "morelinkstoimage": "[[Special:WhatLinksHere/$1|Meer verwiezingen]] naor dit bestaand bekieken.",
        "linkstoimage-redirect": "$1 (bestaandsdeurverwiezing) $2",
-       "duplicatesoffile": "{{PLURAL:$1|t Volgende bestaand is|De volgende $1 bestaanden bin}} liek alleens as dit bestaand ([[Special:FileDuplicateSearch/$2|meer informasie]]):",
+       "duplicatesoffile": "{{PLURAL:$1|t Volgende bestaand is|De volgende $1 bestaanden bin}} gelieke an dit bestaand ([[Special:FileDuplicateSearch/$2|meer informasie]]):",
        "sharedupload": "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten.",
        "sharedupload-desc-there": "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten. Bekiek de [$2 beschrieving van t bestaand] veur meer informasie.",
        "sharedupload-desc-here": "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten. De [$2 beschrieving van t bestaand] dergindse, steet hieronder.",
        "mimesearch": "Zeuken op MIME-type",
        "mimesearch-summary": "Op disse spesiale zied kunnen de bestaanden naor t MIME-type efiltreerd wörden. In de invoer mut altied t media- en subtype staon, bieveurbeeld: <code>aofbeelding/jpeg</code>.",
        "mimetype": "MIME-type:",
-       "download": "binnenhaolen",
+       "download": "neerlaojen",
        "unwatchedpages": "Ziejen die niet evolgd wörden",
        "listredirects": "Lieste van deurverwiezingen",
        "listduplicatedfiles": "Lieste mit bestaanden mit duplikaoten",
        "ntransclusions": "wörden op {{PLURAL:$1|één zied|$1 ziejen}} gebruukt",
        "specialpage-empty": "Disse zied is leeg.",
        "lonelypages": "Weesziejen",
-       "lonelypagestext": "Naor disse ziejen wörden niet verwezen vanuut {{SITENAME}} en ze bin oek nargens in-evoegd.",
+       "lonelypagestext": "Naor disse ziejen wördt niet verwezen vanuut {{SITENAME}}, en ze bin oek nargens as mal op-eneumen.",
        "uncategorizedpages": "Ziejen zonder kategorie",
        "uncategorizedcategories": "Kategorieën zonder kategorie",
        "uncategorizedimages": "Bestaanden zonder kategorie",
        "notvisiblerev": "Bewarking is vortedaon",
        "watchlist-details": "Der {{PLURAL:$1|steet één zied|staon $1 ziejen}} op joew volglieste, zonder de overlegziejen mee-erekend.",
        "wlheader-enotif": "Je kriegen bericht per netpost",
-       "wlheader-showupdated": "Ziejen die sinds joew leste bezeuk bie-ewörken bin, staon '''vet-edrokt'''.",
+       "wlheader-showupdated": "Ziejen die sinds joew leste bezeuk bie-ewörken bin staon '''vet'''.",
        "wlnote": "Hieronder {{PLURAL:$1|steet de leste wieziging|staon de leste $1 wiezigingen}} in {{PLURAL:$2|t aofgeleupen ure|de leste $2 uren}} vanaof $3 um $4.",
        "wlshowlast": "Laot de veurbieje $1 uur $2 dagen  zien",
        "watchlist-options": "Opsies veur de volglieste",
        "sessionfailure-title": "Sessiefout",
        "sessionfailure": "Der is n probleem mit joew anmeldsessie. De aksie is stop-ezet uut veurzörg tegen n beveiligingsrisico (dat besteet uut t meugelike \"kraken\" van disse sessie). Gao weerumme naor de veurige zied, laoj disse zied opniej en probeer t nog es.",
        "protectlogpage": "Beveiligingslogboek",
-       "protectlogtext": "Hieronder staon de leste wiezigingen veur t blokkeren en vriegeven van artikels en ziejen.\nZie de [[Special:ProtectedPages|lieste mit ziejen die beveiligd bin]] veur t hele overzichte.",
+       "protectlogtext": "Hieronder staon de leste wiezigingen veur t blokkeren en vriegeven van artikels en ziejen.\nZie de [[Special:ProtectedPages|lieste mit ziejen die beveiligd bin]] veur t hele overzicht.",
        "protectedarticle": "[[$1]] is beveiligd",
        "modifiedarticleprotection": "beveiligingsnivo van \"[[$1]]\"  ewiezigd",
        "unprotectedarticle": "hef de beveiliging van \"[[$1]]\" deraof ehaold",
        "undeletedrevisions-files": "{{PLURAL:$1|1 versie|$1 versies}} en {{PLURAL:$2|1 bestaand|$2 bestaanden}} bin weerummeplaotst",
        "undeletedfiles": "{{PLURAL:$1|1 bestaand|$1 bestaanden}} weerummeplaotst",
        "cannotundelete": "t Weerummeplaotsen is mislokt:\n$1",
-       "undeletedpage": "'''$1 is weerummeplaotst'''\n\nBekiek t [[Special:Log/delete|vortdologboek]] veur n overzichte van ziejen die kortens vortedaon en weerummeplaotst bin.",
+       "undeletedpage": "'''$1 is weerummeplaotst'''\n\nBekiek t [[Special:Log/delete|vortdologboek]] veur n overzicht van ziejen die kortens vortedaon en weerummeplaotst bin.",
        "undelete-header": "Zie t [[Special:Log/delete|vortdologboek ]] veur spul dat krek vortedaon is.",
        "undelete-search-title": "Vortedaone ziejen zeuken",
        "undelete-search-box": "Deurzeuk vortedaone ziejen",
        "sp-contributions-search": "Zeuken naor biedragen",
        "sp-contributions-username": "IP-adres of gebrukersnaam:",
        "sp-contributions-toponly": "Allinnig de niejste versie laoten zien",
+       "sp-contributions-newonly": "Allinnig nieje ziejen laoten zien",
        "sp-contributions-submit": "Zeuk",
        "whatlinkshere": "Verwiezingen naor disse zied",
        "whatlinkshere-title": "Ziejen die verwiezen naor \"$1\"",
        "ipbnounblockself": "Je maggen je eigen niet deblokkeren",
        "lockdb": "Databanke blokkeren",
        "unlockdb": "Databanke vriegeven",
-       "lockdbtext": "Waorschuwing: a'j de databanke blokkeren dan kan der gienene meer ziejen bewarken, zien veurkeuren wiezingen of wat aanders doon waorveur der wiezigingen in de databanke neudig bin.",
+       "lockdbtext": "Waorschuwing: a'j de databanke blokkeren dan kan der gienene meer ziejen bewarken, zien veurkeuren wiezigen of wat aanders doon waorveur der wiezigingen in de databanke neudig bin.",
        "unlockdbtext": "Vriegeven van de databanke maak alle bewarkingen weer meugelik.\nMut de databanke vrie-egeven wörden?",
        "lockconfirm": "Ja, ik wille de databanke blokkeren.",
        "unlockconfirm": "Ja, ik wille de databanke vriegeven.",
        "importcantopen": "Kon t invoerbestaand niet los doon",
        "importbadinterwiki": "Foute interwikiverwiezing",
        "importsuccess": "Invoeren suksesvol!",
-       "importnosources": "Gien transwiki-invoerbronnen vastesteld en t drek inlaojen van versies is eblokkeerd.",
+       "importnosources": "Gien transwiki-invoerbronnen vastesteld en t drek oplaojen van versies is eblokkeerd.",
        "importnofile": "Der is gien invoerbestaand op-estuurd.",
        "importuploaderrorsize": "t Opsturen van t invoerbestaand is mislokt.\nt Bestaand is groter as de in-estelde limiet.",
        "importuploaderrorpartial": "t Opsturen van t invoerbestaand is mislokt.\nt Bestaand is mer gedeeltelik an-ekeumen.",
        "import-rootpage-nosubpage": "In de naamruumte \"$1\" van de baosiszied is t anmaken van onderziejen niet meugelik.",
        "importlogpage": "Invoerlogboek",
        "importlogpagetext": "Administratieve invoer van ziejen mit geschiedenisse van aandere wiki's.",
-       "import-logentry-upload": "hef [[$1]] in-evoerd",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|versie|versies}}",
-       "import-logentry-interwiki": "transwiki $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versie|versies}} van $2",
        "javascripttest": "JavaScript testen",
        "javascripttest-pagetext-noframework": "Disse zied is ereserveerd veur t uutvoeren van JavaScript-testen.",
        "watchlistedit-raw-done": "Joew volglieste is bie-ewörken.",
        "watchlistedit-raw-added": "Der {{PLURAL:$1|is 1 zied|bin $1 ziejen}} bie edaon:",
        "watchlistedit-raw-removed": "Der {{PLURAL:$1|is 1 zied|bin $1 ziejen}} vortedaon:",
+       "watchlisttools-clear": "Volglieste leegmaken",
        "watchlisttools-view": "Wiezigingen bekieken",
        "watchlisttools-edit": "Volglieste bekieken en bewarken",
-       "watchlisttools-raw": "Roewe volglieste bewarken",
+       "watchlisttools-raw": "Volglieste as tekstlieste bewarken",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|overleg]])",
        "duplicate-defaultsort": "Waorschuwing: de standardsortering \"$2\" krig veurrang veur de sortering \"$1\".",
        "version": "Versie",
        "version-parser-function-hooks": "Parserfunksiehoeken",
        "version-hook-name": "Hooknaam",
        "version-hook-subscribedby": "In-eschreven deur",
-       "version-version": "(Versie $1)",
+       "version-version": "($1)",
        "version-license": "MediaWiki-lisensie",
        "version-ext-colheader-version": "Versie",
        "version-ext-colheader-license": "Lisensie",
        "fileduplicatesearch-filename": "Bestaandsnaam:",
        "fileduplicatesearch-submit": "Zeuken",
        "fileduplicatesearch-info": "$1 × $2 beeldpunten<br />Bestaandsgrootte: $3<br />MIME-type: $4",
-       "fileduplicatesearch-result-1": "Der bin gien bestaanden die liek alleens bin as \"$1\".",
-       "fileduplicatesearch-result-n": "Der {{PLURAL:$2|is één bestaand|bin $2 bestaanden}} die liek alleens bin as \"$1\".",
+       "fileduplicatesearch-result-1": "Der bin gien bestaanden die gelieke bin an \"$1\".",
+       "fileduplicatesearch-result-n": "Der {{PLURAL:$2|is één bestaand|bin $2 bestaanden}} die gelieke bin an \"$1\".",
        "fileduplicatesearch-noresults": "Der is gien bestaand mit de naam \"$1\" evunnen.",
        "specialpages": "Spesiale ziejen",
        "specialpages-note-top": "Legenda",
        "revdelete-uname-unhid": "gebrukersnaam zichtbaor emaakt",
        "revdelete-restricted": "hef beparkingen an beheerders op-eleg",
        "revdelete-unrestricted": "hef beparkingen veur beheerders deraof ehaold",
+       "logentry-block-block": "$1 {{GENDER:$2|hef}} {{GENDER:$4|$3}} eblokkeerd veur de duur van $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|hef}} {{GENDER:$4|$3}} eblokkeerd veur de duur van $5 $6",
        "logentry-move-move": "$1 hef de zied $3 {{GENDER:$2|herneumd}} naor $4",
        "logentry-move-move-noredirect": "$1 hef de zied $3 {{GENDER:$2|herneumd}} naor $4 zonder n deurverwiezing achter te laoten",
        "logentry-move-move_redir": "$1 hef de zied $3 {{GENDER:$2|herneumd}} naor $4 over n deurverwiezing heer",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|is}} automaties bevorderd van $4 tot $5",
        "rightsnone": "(gien)",
        "revdelete-summary": "samenvatting bewarken",
+       "feedback-adding": "Joew kommentaar wörden op de zied ezet...",
+       "feedback-bugcheck": "Mooi! Kiek nao of t niet al één van de [$1 bekende problemen] is.",
+       "feedback-bugnew": "Ik heb t nao-ekeken. Meld n nieje programmafout",
        "feedback-bugornote": "A'j zovere bin um n technies probleem nauwkeurig te beschrieven, [$1 meld dan n programmafout].\nAanders ku'j oek t eenvoudige formulier hieronder gebruken. Joew kommentaar zal op de zied \"[$3 $2]\" ezet wörden, samen mit joew gebrukersnaam en de webkieker die'j gebruken.",
-       "feedback-subject": "Onderwarp:",
-       "feedback-message": "Bericht:",
        "feedback-cancel": "Aofbreken",
-       "feedback-submit": "Kommentaar geven",
-       "feedback-adding": "Joew kommentaar wörden op de zied ezet...",
+       "feedback-close": "Ree",
        "feedback-error1": "Fout: onbekend resultaot uut de API",
        "feedback-error2": "Fout: de bewarking is mislokt",
        "feedback-error3": "Fout: gien reaksie van de API",
+       "feedback-message": "Bericht:",
+       "feedback-subject": "Onderwarp:",
+       "feedback-submit": "Opslaon",
        "feedback-thanks": "Bedankt! Joew kommentaar is op de zied \"[$2 $1]\" ezet.",
-       "feedback-close": "Ree",
-       "feedback-bugcheck": "Mooi! Kiek nao of t niet al één van de [$1 bekende problemen] is.",
-       "feedback-bugnew": "Ik heb t nao-ekeken. Meld n nieje programmafout",
        "searchsuggest-search": "Zeuken / zuken / zuiken",
        "searchsuggest-containing": "bevat...",
-       "api-error-badaccess-groups": "Je maggen gien bestaanden in disse wiki inlaojen.",
+       "api-error-badaccess-groups": "Je maggen gien bestaanden in disse wiki oplaojen.",
        "api-error-badtoken": "Interne fout: t token klopt niet.",
        "api-error-copyuploaddisabled": "Bestaanden opsturen via n webadres is uutezet op disse server.",
        "api-error-duplicate": "Der {{PLURAL:$1|steet al [$2 n bestaand]|staon al [$2 bestaanden]}} mit de zelfde inhoud in de wiki.",
        "mediastatistics": "Mediastaotistieken",
        "mediastatistics-header-audio": "Audio",
        "mediastatistics-header-video": "Video's",
-       "mediastatistics-header-multimedia": "Interaktieve media"
+       "mediastatistics-header-multimedia": "Interaktieve media",
+       "special-characters-group-latin": "Latien",
+       "special-characters-group-latinextended": "Latien uutebreid",
+       "special-characters-group-ipa": "Internasionaal Klankeschrift",
+       "special-characters-group-symbols": "Symbolen",
+       "special-characters-group-greek": "Grieks",
+       "special-characters-group-cyrillic": "Kyrillies",
+       "special-characters-group-arabic": "Arabies",
+       "special-characters-group-arabicextended": "Arabies uutebreid",
+       "special-characters-group-persian": "Perzies",
+       "special-characters-group-hebrew": "Hebreeuws",
+       "special-characters-group-bangla": "Bengaals",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalees",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Laotiaans",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "liggend streepjen",
+       "special-characters-title-emdash": "gedachtenstreepjen",
+       "special-characters-title-minus": "minteken"
 }
index 6e349e3..f8301c3 100644 (file)
        "import-invalid-interwiki": "Ut dat angevene Wiki is en Import nich mööglich.",
        "importlogpage": "Import-Logbook",
        "importlogpagetext": "Administrativen Import vun Sieden mit Versionsgeschicht vun annere Wikis.",
-       "import-logentry-upload": "hett „[[$1]]“ ut Datei importeert",
        "import-logentry-upload-detail": "{{PLURAL:$1|ene Version|$1 Versionen}}",
-       "import-logentry-interwiki": "hett „$1“ importeert (Transwiki)",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|ene Version|$1 Versionen}} vun $2",
        "tooltip-pt-userpage": "Dien Brukersied",
        "tooltip-pt-anonuserpage": "De Brukersiet för de IP-Adress ünner de du schriffst",
        "version-parser-function-hooks": "Parser-Funkschonen",
        "version-hook-name": "Hook-Naam",
        "version-hook-subscribedby": "Opropen vun",
-       "version-version": "(Version $1)",
+       "version-version": "($1)",
        "version-license": "Lizenz",
        "version-poweredby-credits": "Dit Wiki bruukt '''[https://www.mediawiki.org/ MediaWiki]''', Copyright © 2001–$1 $2.",
        "version-poweredby-others": "annere",
        "sqlite-no-fts": "$1 ahn Stöhn för Vulltext-Söök",
        "revdelete-restricted": "Inschränkungen för Administraters instellt",
        "revdelete-unrestricted": "Inschränkungen för Administraters rutnahmen",
+       "logentry-block-block": "$1 {{GENDER:$2|block}} {{GENDER:$4|$3}} för en Tiedruum vun $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|block}} {{GENDER:$4|$3}} för en Tiedruum vun $5 $6",
        "rightsnone": "(kene)",
        "revdelete-summary": "Tosamenfaten",
        "searchsuggest-search": "Söken",
index fd2f490..6e78ef2 100644 (file)
                        "Reedy",
                        "ne.wikipedia.org sysops",
                        "सरोज कुमार ढकाल",
-                       "아라"
+                       "아라",
+                       "Steinsplitter",
+                       "Macofe",
+                       "बिप्लब आनन्द"
                ]
        },
        "tog-underline": "सम्बन्ध निम्न रेखाङ्कन:",
@@ -41,7 +44,7 @@
        "tog-shownumberswatching": "निगरानी गरिरहेका प्रयोगकर्ताहरुको संख्या देखाउने",
        "tog-oldsig": "वर्तमान हस्ताक्षर:",
        "tog-fancysig": "मेरो दस्तखतलाई विकि पाठको रुपमा लिने(स्वत सम्वन्ध बिना)",
-       "tog-uselivepreview": "प्रत्यक्ष पूर्वरुप प्रयोग गर्नुहोस् (प्रयोगात्मक)",
+       "tog-uselivepreview": "प्रत्यक्ष पूर्वरुप प्रयोग गर्नुहोस",
        "tog-forceeditsummary": "खाली सम्पादन सार प्रविष्टि गरेमा मलाई सोध्ने",
        "tog-watchlisthideown": "मेरा सम्पादनहरू निगनारी सूचीबाट लुकाउने",
        "tog-watchlisthidebots": "बोट सम्पादनहरू निगरानी सूचीबाट लुकाउने",
        "october": "अक्टोबर",
        "november": "नोभेम्बर",
        "december": "डिसेम्बर",
-       "january-gen": "à¤\9cà¥\87नवरà¥\80",
+       "january-gen": "जनवरी",
        "february-gen": "फेब्रुअरी",
        "march-gen": "मार्च",
-       "april-gen": "à¤\8fपà¥\8dरà¥\80ल",
+       "april-gen": "à¤\85पà¥\8dरिल",
        "may-gen": "मे",
        "june-gen": "जुन",
        "july-gen": "जुलाई",
        "history_short": "पृष्ठको इतिहास",
        "updatedmarker": "मेरो अन्तिम भ्रमण पछि अद्यतन गरिएको",
        "printableversion": "छाप्नयोग्य संस्करण",
-       "permalink": "स्थायीलिङ्क",
+       "permalink": "स्थायी लिङ्क",
        "print": "छाप्नुहोस्",
        "view": "अवलोकन गर्ने",
        "view-foreign": " $1 हेर्नुहोस",
-       "edit": "परिवरà¥\8dतन",
+       "edit": "समà¥\8dपादन",
        "edit-local": "स्थानिय वर्णन सम्पादन गर्नुहोस्",
        "create": "सृजना गर्नुहोस्",
        "create-local": "स्थानीय वर्णन थप्नुहोस",
        "disclaimers": "अस्विकारोक्तिहरु",
        "disclaimerpage": "Project:सामान्य अस्वीकारोक्ति",
        "edithelp": "सम्पादन सहायता",
-       "mainpage": "मुख्य पृष्ठ",
-       "mainpage-description": "मुख्य पृष्ठ",
+       "helppage-top-gethelp": "सहायता",
+       "mainpage": "गृह पृष्ठ",
+       "mainpage-description": "गृह पृष्ठ",
        "policy-url": "Project:निति",
        "portal": "सामाजिक पोर्टल",
        "portal-url": "Project:सामाजिक पोर्टल",
        "hidetoc": "लुकाउनुहोस्",
        "collapsible-collapse": "खुम्च्याउने",
        "collapsible-expand": "फैलाउ",
+       "confirmable-confirm": "तपाईं {{GENDER:$1|लिङ्ग}} हो?",
        "confirmable-yes": "हो",
        "confirmable-no": "होइन",
        "thisisdeleted": "$1 हेर्ने या पूर्वरुपमा फर्काउने हो ?",
        "createacct-benefit-heading": "{{SITENAME}} तपाईँ जस्तै मानिसहरूद्वारा सिर्जना गरिएको हो ।",
        "createacct-benefit-body1": "{{PLURAL:$1|सम्पादन|सम्पादनहरू}}",
        "createacct-benefit-body2": "{{PLURAL:$1|पृष्ठ|पृष्ठहरू}}",
-       "createacct-benefit-body3": "हालैका {{PLURAL:$1|योगदान कर्ता|योगदान कर्ताहरू}}",
+       "createacct-benefit-body3": "हालैका {{PLURAL:$1|योगदानकर्ता|योगदानकर्ताहरू}}",
        "badretype": "तपाईंले दिनुभएको पासवर्ड मिल्दैन।",
        "userexists": "तपाईले प्रविष्ट गर्नुभएको प्रयोगकर्ताको नाम पहिले देखिनै प्रयोगमा छ ।\nकृपया फरक नाम छान्नुहोस् ।",
        "loginerror": "प्रवेश त्रुटि",
        "login-abort-generic": "तपाईंको प्रवेश असफल भयो - छोड़ियो",
        "loginlanguagelabel": "भाषा: $1",
        "suspicious-userlogout": "तपाईंको निर्गमन अनुरोध अस्विकार गरिन्छ किन कि यो खराब ब्राउजर वा क्यासिङ प्रोक्सिले पठाएको जस्तो देखिन्छ।",
-       "pt-login": "प्रवेश",
+       "pt-login": "प्रवेश (लग ईन)",
        "pt-login-button": "प्रवेश",
        "pt-createaccount": "खाता खोल्नुहोस्",
        "pt-userlogout": "निर्गमन (लग आउट)",
        "changeemail-oldemail": "हालको इमेल-ठेगाना:",
        "changeemail-newemail": "नयाँ इमेल-ठेगाना:",
        "changeemail-none": "(कुनै पनि हैन)",
+       "changeemail-password": "तपाईंको {{SITENAME}} पासवर्ड:",
        "changeemail-submit": "इमेल परिवर्तन गर्ने",
+       "changeemail-throttled": "तपाईंले भर्खरै धेरै पल्ट प्रवेशको निम्ति प्रयास गर्नुभएको छ।\nकृपया $1 पर्खेर मात्र प्रयास गर्नुहोस्।",
        "resettokens": "टोकन पूर्वरुपमा फर्काउने",
        "resettokens-no-tokens": "पूर्वरुपमा फर्काउन कुनै पनि टोकन छैन ।",
        "resettokens-legend": "टोकनहरू पूर्वरुपमा फर्काउने",
        "extlink_tip": "बाह्य लिङ्क (सम्झनुहोस् http:// prefix)",
        "headline_sample": "शीर्षक अक्षर",
        "headline_tip": "दोस्रो स्तर शीर्षपंक्ति",
-       "nowiki_sample": "प्रारुप नभएको पाठ  यहाँ दिनुहोस्",
-       "nowiki_tip": "विà¤\95ि à¤«à¤°à¤®à¥\8dयाà¤\9fिà¤\99à¥\8dलाà¤\87 à¤µà¤¾à¤¸à¥\8dता à¤¨à¤\97रà¥\8dनà¥\87 (à¤\87à¤\97à¥\8dनà¥\8bर à¤\97रà¥\8dनà¥\87)",
+       "nowiki_sample": "प्रारुप नभएको पाठ यहाँ दिनुहोस्",
+       "nowiki_tip": "विà¤\95ि à¤«à¤°à¤®à¥\8dयाà¤\9fिà¤\99à¥\8dलाà¤\88 à¤µà¤¾à¤¸à¥\8dता à¤¨à¤\97रà¥\8dनà¥\87",
        "image_sample": "उदाहरण.jpg",
        "image_tip": "इम्बेडेड(जडान गरिएको) फाइल",
        "media_sample": "उदाहरण.ogg",
        "subject": "विषय/शीर्षक:",
        "minoredit": "यो सानो सम्पादन हो",
        "watchthis": "यो पृष्ठ अवलोकन गर्नुहोस्",
-       "savearticle": "सà¤\82ग्रह गर्ने",
+       "savearticle": "सà¤\99à¥\8dग्रह गर्ने",
        "preview": "पूर्वावलोकन",
        "showpreview": "पूर्वालोकन देखाउनुहोस्",
        "showdiff": "परिवर्तन देखाउनुहोस्",
-       "anoneditwarning": "'''चेतावनी:''' तपाईँले प्रवेश गर्नु भएको छैन।\nतपाईँको IP ठेगाना पृष्ठसम्पादन इतिहासमा दर्तागरिने छ ।",
+       "anoneditwarning": "<strong>चेतावनी:</strong> तपाईँले प्रवेश गर्नु भएको छैन । तपाईँको आइपि ठेगाना पृष्ठ सम्पादन इतिहासमा दर्ता गरिने छ र यो सबैले हेर्न सक्छन । यदि तपाईं <strong>[$1 लगईन]</strong> वा <strong>[$2 नयाँ खाता बनाउने] गर्नुभयो भने तपाईंद्वारा गरिएको सम्पादन तपाईंको प्रयोगकर्तानाममा जोडिनेछ।",
        "anonpreviewwarning": "''तपाईंले प्रवेश गर्नु भएको छैन। संग्रह (Save) गरेको खण्डमा पृष्ठको इतिहासमा तपाईंको IP ठेगाना अंकित गरिनेछ।''",
        "missingsummary": "'''यादगर्नुहोस् :''' तपाईले सम्पादन सारांश दिनुभएको छैन ।\nयदि तपाईले संग्रहगर्नुहोस्  थिच्नुभयो भने , सारांश बिना नै संग्रहित गरिने छ ।",
        "missingcommenttext": "कृपया टिप्पणी प्रविष्ठ गर्नुहोस् ।",
        "updated": "नवीन",
        "note": "'''सूचना:'''",
        "previewnote": "'''याद राख्नुहोस् यो केवल पूर्वावलोकन मात्र हो; तपाईंका परिवर्तनहरू संग्रहित भएका छैनन्!'''",
+       "continue-editing": "सम्पादन क्षेत्रमा जानुहोस",
        "previewconflict": "यस पूर्वावलोकनले संपादन क्षेत्र को माथिल्लो भागको पाठ परिवर्तन गर्ने ठाउँको पाठलाइ देखाउँछ अनि तपाइले यसलाइ सेभ गरेपछि देखापर्छ।",
        "session_fail_preview": "'''माफ गर्नुहोस्! सत्र-आँकड़ा (session data) हराउनाले हामीले तपाईंको सम्पादन प्रक्रिया अघि बढाउन सकेनौं।.'''\nकृपया पुनः प्रयास गर्नुहोस्।\nयदि फेरि पनि काम भएन भनें, [[Special:UserLogout|बाहिर गई(लग आउट गरी)]]  फेरि प्रवेश गर्नुहोस्।",
        "session_fail_preview_html": "'''माफ गर्नुहोला! सत्र को डेटा को नोकसान को कारण ले गर्दा तपाइको सम्पादन लाइ जारी राख्न सकिएन।'''\n\n''जावास्क्रिप्ट हमलाहरु रोक्नको लागि यो पूर्वावलोकन लाइ देखाइएको छैन किन कि {{SITENAME}} मा काँचो HTML को प्रयोग गर्न मिल्ने बनाइएको छ।''\n\n'''यदि यो एक वैध प्रयास हो भने, कृपया पुन: प्रयास गर्नुहोला.'''\nयदि अझै पनि काम गरेन भने [[Special:UserLogout|निर्गमन(logging out)]] र पुन:आगमन(login) गर्ने प्रयास गर्नुहोला।",
        "currentrev": "हालको संस्करण",
        "currentrev-asof": "$1को रुपमा हालको पुनरावलोकनहरु",
        "revisionasof": "$1 जस्तै गरी पुनरावलोकन",
-       "revision-info": "$2द्वारा $1को संशोधन",
+       "revision-info": "{{GENDER:$6|$2}}$7 द्वारा $1को संशोधन",
        "previousrevision": "← पुरानो संशोधन",
        "nextrevision": "नयाँ संशोधन →",
        "currentrevisionlink": "हालको पुनरावलोकन",
-       "cur": "cur पृष्ठको लिंक इतिहास",
+       "cur": "वर्तमान पृष्ठको लिङ्क इतिहास",
        "next": "अर्को",
        "last": "अघिल्लो",
        "page_first": "पहिलो",
        "history-feed-empty": "अनुरोध गरिएको पृष्ठ छैन।\nविकिबाट यो मेटिएको अथवा यसको नयाँ नाम राखिएको हुनसक्छ।\nप्रासंगिक नयाँ पृष्ठकोलागि  [[Special:Search|विकिमा खोज्नुहोस्]]।",
        "rev-deleted-comment": "(सम्पादन सारांश हटाइयो)",
        "rev-deleted-user": "(प्रयोगकर्ता नाम हटाइयो)",
-       "rev-deleted-event": "(लà¤\97 à¤\95ारà¥\8dय हटाइयो)",
+       "rev-deleted-event": "(लà¤\97 à¤µà¤¿à¤µà¤°à¤£ हटाइयो)",
        "rev-deleted-user-contribs": "[प्रयोगकर्ताको नाम अथवा IP ठेगाना हटाइयो - योगदानहरुबाट सम्पादन लुकाइयो]",
        "rev-deleted-text-permission": "यस पृष्ठको पुनरावलोकन '''मेटिएकोछ'''।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को मेटिएको लगमा पाउन सकिन्छ]।",
        "rev-deleted-text-unhide": "यस पृष्ठको संशोधन '''मेटिएकोछ'''।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} को मेटिएको लगमा पाउन सकिन्छ].\nयदि चाहनु भयो भनें [$1 संशोधन हेर्न] सक्नुहुन्छ।",
        "revdelete-legend": "दृष्टि बन्देज मिलाउने",
        "revdelete-hide-text": "पुनरावलोकन पाठ",
        "revdelete-hide-image": "फाइल कमेन्ट लुकाउने",
-       "revdelete-hide-name": "à¤\95ारà¥\8dय à¤° à¤\97नà¥\8dतबà¥\8dय लुकाउने",
+       "revdelete-hide-name": "à¤\95ारà¥\8dय à¤° à¤ªà¥\8dयारामिà¤\9fर लुकाउने",
        "revdelete-hide-comment": "सम्पादन टिप्पणी",
        "revdelete-hide-user": "सम्पादकको प्रयोगकर्ता नाम/IP ठेगाना",
        "revdelete-hide-restricted": "प्रवन्धक वा अरुबाट डेटा कम लिने",
        "revdelete-edit-reasonlist": "मेट्ने कार्यहरु सम्पादन गर्ने",
        "revdelete-offender": "संशोधन कर्ता:",
        "suppressionlog": "कमगरेको लग",
-       "suppressionlogtext": "मेट्नको र रोककको निम्ती निम्न सुची रहेको छ जसमा प्रवन्धकबाट लुकाइएका सामग्री समेत रहेका छन।\nकृपया हाल प्रयोगमा रहेका रोक र रोकावटको सुचीका लागि[[Special:BlockList|IP रोक सुची]] हेर्नुहोला ।",
+       "suppressionlogtext": "मेट्न र रोक्नका निमित्त निम्न सुची रहेको छ जसमा प्रवन्धकबाट लुकाइएका सामग्री समेत रहेका छन।\nकृपया हाल प्रयोगमा रहेका रोक र रोकावटको सुचीका लागि [[Special:BlockList|रोक सुची]] हेर्नुहोला।",
        "mergehistory": "पृष्ठ इतिहासहरु मिसाउने",
        "mergehistory-box": "दुई पृष्ठहरुको पुनरावलोकन जोड्नुहोस् :",
        "mergehistory-from": "स्रोत पृष्ठ:",
        "revertmerge": "नमिलाउने",
        "mergelogpagetext": "एउटा पृष्ठको इतिहास अर्कोमा भर्खरै मिलाइएको सूची तल दिइन्छ।",
        "history-title": "\"$1\" को पुनरावृत्ति इतिहास",
+       "difference-title": "\"$1\" को बिचमा भिन्नता",
+       "difference-title-multipage": "\"$1\" तथा \"$2\" को बिचमा भिन्नता",
        "difference-multipage": "(पृष्ठहरूमा भिन्नता)",
        "lineno": "पंक्ति $1:",
        "compareselectedversions": "छानिएका संस्करणहरू दाँज्नुहोस्",
        "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|नतिजा|नतिजाहरु}} प्रति पृष्ठ",
        "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": "सब थोक",
        "searchprofile-advanced": "उन्नत",
        "searchprofile-articles-tooltip": "$1 मा खोज्ने",
        "searchprofile-images-tooltip": "फाइलहरु खोज्ने",
-       "searchprofile-everything-tooltip": "सबै सामग्री खोज्ने(वार्तालाप समेत )",
+       "searchprofile-everything-tooltip": "सबै सामग्री खोज्ने (वार्तालाप समेत )",
        "searchprofile-advanced-tooltip": "अनुकुल नेमस्पेसमा खोज्ने",
        "search-result-size": "$1 ({{PLURAL:$2|1 शव्द|$2 शव्दहरु}})",
        "search-result-category-size": "{{PLURAL:$1|एक सदस्य|$1 सदस्यहरु}} ({{PLURAL:$2|1 उपश्रेणी|$2  उपश्रेणीहरु}}, {{PLURAL:$3|एउटा फाइल|$3 फाइलहरु}})",
        "search-redirect": "(जाने $1)",
        "search-section": "(खण्ड $1)",
+       "search-category": "(श्रेणी $1)",
+       "search-file-match": "(भेटिएका फाइल सामाग्री)",
        "search-suggest": "के तपाईको खोजाई : $1 हो?",
        "search-interwiki-caption": "भगिनी आयोजना",
        "search-interwiki-default": "$1देखिका नतिजाहरू:",
        "prefs-personal": "प्रयोगकर्ताको विवरण",
        "prefs-rc": "नयाँ परिवर्तनहरू",
        "prefs-watchlist": "अवलोकन पृष्ठ",
+       "prefs-editwatchlist-clear": "तपाईंको अवलोकनसूची मेट्नुहोस",
        "prefs-watchlist-days": "निगरानी सूचीमा देखाउन दिनहरु:",
        "prefs-watchlist-days-max": "धेरैमा $1 {{PLURAL:$1|दिन|दिन}}",
        "prefs-watchlist-edits": "उच्चतम परिवर्तन संख्या बढाइएको निगरानी सूचीमा  देखाउनको लागि :",
        "right-move": "पृष्ठहरू सार्ने",
        "right-move-subpages": "तिनीहरुको सह-पृष्ठसहित पृष्ठहरु सार्ने",
        "right-move-rootuserpages": "मूल(root) प्रयोगकर्ताको पृष्ठहरु सार्ने",
+       "right-move-categorypages": "श्रेणी पृष्ठ सार्नुहोस",
        "right-movefile": "फाइलहरु सार्ने",
        "right-suppressredirect": "पृष्ठ सार्दा स्रोत पृष्ठबाट पठाउने लिंक नबनाउने",
        "right-upload": "फाइलहरु उर्ध्वभरण गर्ने",
        "right-reupload-shared": "साझा मिडिया भण्डारमा स्थानियरुपमा फाइलहरु अधिक्रमण गर्ने",
        "right-upload_by_url": "URL बाट फाइल उर्ध्वभरण गर्ने",
        "right-purge": "साइटको क्याश( cache) निश्चित नगरिकनै पर्ज(Purge) गर्ने",
-       "right-autoconfirmed": "à¤\85रà¥\8dध-सà¥\81रà¤\95à¥\8dषित à¤ªà¥\83षà¥\8dठहरà¥\81 à¤¸à¤®à¥\8dपादन à¤\97र्ने",
+       "right-autoconfirmed": "à¤\86à¤\87पà¥\80 à¤¦à¤° à¤¸à¥\80मालà¥\87 à¤\85सर à¤¨à¤ªà¤¾र्ने",
        "right-bot": "स्वाचालित कार्यको रुपमा व्यवहार गर्ने",
        "right-apihighlimits": "API खोजको लागि उच्च सीमा प्रयोग गर्नुहोस्",
        "right-writeapi": "लेखन API प्रयोग गर्ने",
        "recentchanges-label-newpage": "यो सम्पादनले नयाँ पृष्ठ निर्माण गरेको छ",
        "recentchanges-label-minor": "यो साधारण सम्पादन हो",
        "recentchanges-label-bot": "यो सम्पादन बोटद्वारा गरिएको थियो",
-       "recentchanges-label-unpatrolled": "यो सम्पादन अहिले सम्म पट्रोल गरिएको छैन",
+       "recentchanges-label-unpatrolled": "यो सम्पादन अहिले सम्म गस्ती गरिएको छैन",
+       "recentchanges-legend-heading": "'''आदर्श वाक्य:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|list of new pages]] यो पनि हेर्नुहोस्)",
        "recentchanges-legend-plusminus": "(''±१२३'')",
        "rcnotefrom": "'''$2''' देखिका परिवर्तनहरु तल ('''$1''' सम्मका देखाइन्छ)।",
        "recentchangeslinked": "सम्बन्धित परिवर्तनहरू",
        "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 à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80]]à¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81 '''à¤\97ाढा à¤\85à¤\95à¥\8dषरमा''' छन्।",
+       "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>à¤\97ाढा à¤\85à¤\95à¥\8dषरमा</strong> छन्।",
        "recentchangeslinked-page": "पृष्ठ नाम:",
        "recentchangeslinked-to": "यसको सट्टा यो पृष्ठसँग जोडिएका पृष्ठहरुको परिवर्तन देखाउने",
        "upload": "फाइल उर्ध्वभरण",
        "license-header": "अनुज्ञा प्राप्त गर्दै",
        "nolicense": "केहिपनि छानिएन",
        "license-nopreview": "(पूर्वरुप उपलब्ध छैन)",
-       "upload_source_file": " (तपाईँको कम्प्युटरमा रहेको एक फाइल)",
+       "upload_source_file": "(तपाईँले आफ्नो कम्प्युटरबाट छानेको फाइल)",
+       "listfiles-delete": "मेट्ने",
+       "listfiles-summary": "यस विशेष पृष्ठले उर्ध्वभरण गरिका सबै फाइलहरु देखाउँछ।",
        "listfiles_search_for": "मिडिया नामको लागि खोज्नुहोस:",
        "imgfile": "फाइल",
        "listfiles": "फाइल सूची",
        "unusedtemplateswlh": "अन्य कड़ीहरु",
        "randompage": "कुनै एक लेख",
        "randompage-nopages": "{{PLURAL:$2| $1 नाम भएको कुनै पृष्ट छैन|$1 नाम भएका कुनै पृष्टहरु छैनन्}}",
+       "randomincategory-category": "श्रेणी:",
        "randomredirect": "कुनै एउटा अनुप्रेषितमा जाने",
        "randomredirect-nopages": "\"$1\" नामस्थानमा अनुप्रेषित छैन।",
        "statistics": "तथ्यांक",
        "suppress": "अतिदृष्टि",
        "booksources": "किताबका श्रोतहरु",
        "booksources-search-legend": "किताबका श्रोतहरु खोज्ने",
+       "booksources-search": "खोज",
        "specialloguserlabel": "निष्पादक:",
        "speciallogtitlelabel": "लक्ष्य (शीर्षक वा प्रयोगकर्ता)",
        "log": "लगहरु",
        "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.",
        "rollback": "सम्पादनहरु  पछाडि लाने",
        "rollbacklink": "पहिलेको रुपमा फर्काउने",
+       "rollbacklinkcount": "रोल्ब्याक $1 {{PLURAL:$1|सम्पादन|सम्पादनहरू}}",
        "rollbackfailed": "रोलब्याक असफल",
        "cantrollback": "फर्काउन सकिंदैन;\nअन्तिम योगदान कर्ता मात्र यस पृष्ठका लेखक थिए।",
        "editcomment": "सम्पादन सारांश : \"''$1''\" ।",
        "whatlinkshere-prev": "{{PLURAL:$1|पहिलो|पहिलो $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|अर्को|अर्को $1}}",
        "whatlinkshere-links": "← लिंकहरु",
-       "whatlinkshere-hideredirs": "$1 à¤°à¤¿à¤¡à¤¾à¤\87रà¥\87à¤\95à¥\8dà¤\9f हुन्छ",
+       "whatlinkshere-hideredirs": "$1 à¤\85नà¥\81पà¥\8dरà¥\87षित हुन्छ",
        "whatlinkshere-hidetrans": "$1 पारदर्शन",
        "whatlinkshere-hidelinks": "$1 लिङ्कहरु",
        "whatlinkshere-hideimages": "$1 तस्वीर लिंकहरु",
        "import-invalid-interwiki": "खुलाइएको विकिबाट आयात गर्न सकिएन",
        "importlogpage": "आयात सूची",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनहरु}}",
-       "import-logentry-interwiki": " $1लाई अन्तरविकिकरण गरियो",
        "import-logentry-interwiki-detail": "$2 देखि $1 {{PLURAL:$1|पुनरावलोकन|पुनरावलोकनहरु}}",
        "tooltip-pt-userpage": "तपाईको प्रयोगकर्ता पृष्ठ",
        "tooltip-pt-anonuserpage": "तपाईले जुन IP ठेगानाको रुपमा सम्पादन गर्दै हुनुहुन्छ , त्यसको प्रयोगकर्ता पृष्ठ निम्न छ :",
        "tooltip-pt-mycontris": "तपाईको योगदानको सूची",
        "tooltip-pt-login": "तपाईँलाई प्रवेशगर्न सुझाव दिइन्छ ; तर यो जरुरी भने छैन",
        "tooltip-pt-logout": "निर्गमन (लग आउट) गर्नुहोस्",
+       "tooltip-pt-createaccount": "तपाईंलाई खाता बनाउन र लग इन गर्न हामि प्रोत्साहित गर्छौ; तथापि, यो अनिवार्य भने छैन।",
        "tooltip-ca-talk": "सामग्री पृष्ठबारेमा छलफल",
-       "tooltip-ca-edit": "तपाईँले यो पृष्ठ सम्पादन गर्न सक्नुहुन्छ ।\nकृपया संग्रह ‍पहिले पूर्वावलोकन बटन प्रयोग गर्नुहोला ।",
+       "tooltip-ca-edit": "तपाईँले यो पृष्ठ सम्पादन गर्न सक्नुहुन्छ । कृपया सङ्ग्रह ‍गर्नु पूर्व पूर्वावलोकन बटन प्रयोग गर्नुहोला ।",
        "tooltip-ca-addsection": "नयाँ खण्ड सुरु गर्नुहोस्",
        "tooltip-ca-viewsource": "यो पृष्ठ सुरक्षित गरिएको छ। यसको श्रोत हेर्न सक्नुहुन्छ।",
        "tooltip-ca-history": "यस पृष्ठको पहिलेका पुनरावलोकनहरु",
        "tooltip-n-mainpage": "मुख्य पृष्ठमा जाने",
        "tooltip-n-mainpage-description": "मुख्य पृष्ठमा जानुहो्स्",
        "tooltip-n-portal": "आयोजनाका बारेमा , तपाईँ के गर्न सक्नुहुन्छ , सामग्री कहाँ भेट्टाउने",
-       "tooltip-n-currentevents": "हालैको घटनाको बारेमा पृष्ठभूमि जानकारी पत्तालगाउनुहोस्",
+       "tooltip-n-currentevents": "हालैको घटनाको बारेमा पृष्ठभूमि जानकारी पत्ता लगाउनुहोस्",
        "tooltip-n-recentchanges": "विकिमा गरिएका हालैका परिवर्तनहरुको सूची",
        "tooltip-n-randompage": "जुन कुनै पृष्ठ खोल्ने",
        "tooltip-n-help": "पत्तालगाउनु पर्ने स्थान",
-       "tooltip-t-whatlinkshere": "यà¥\8b à¤¸à¤¿à¤¤ à¤\9cà¥\8bड़िएका सबै विकि पृष्ठहरुको सूची",
+       "tooltip-t-whatlinkshere": "यà¥\8b à¤¸à¤\81à¤\97 à¤\9cà¥\8bडिएका सबै विकि पृष्ठहरुको सूची",
        "tooltip-t-recentchangeslinked": "यस पृष्ठमा जोडिएका पृष्ठहरुमा हालैको परिवर्तन",
        "tooltip-feed-rss": "यो पृष्ठको लागि RSS फिड",
-       "tooltip-feed-atom": "यो पृष्ठको लागि Atom फिड",
+       "tooltip-feed-atom": "यो पृष्ठको लागि एटम फिड",
        "tooltip-t-contributions": "यस प्रयोगकर्ताका योगदानहरूको सूची हेर्नुहोस्",
        "tooltip-t-emailuser": "यो प्रयोगकर्तालाई इमेल पठाउनुहोस्",
        "tooltip-t-upload": "फाइल अपलोड गर्ने",
        "spambot_username": "MediaWiki स्पाम सर-सफाइ",
        "spam_reverting": "$1 मा कडीहरू  नभएका पुरानो अवतरणमा पुनर्स्थापित गर्दै",
        "spam_blanking": "$1 का सबै अवतरणहरूमा कडीहरू  भेटिए, मेटाएर खालि गर्दै",
+       "simpleantispam-label": "ऐन्टी-स्प्याम जाँच।\nयसलाई <strong>नहीं</strong> भर्ने!",
        "pageinfo-title": " \"$1\"को लागि जाकारी",
        "pageinfo-header-basic": "साधारण जानकारी",
        "pageinfo-header-edits": "सम्पादन इतिहास",
        "file-info-size-pages": "$1 × $2 पिक्सेलहरु, फाइल आकार: $3, MIME प्रकार: $4, $5 {{PLURAL:$5|पृष्ठ|पृष्ठहरु}}",
        "file-nohires": "उच्च रिजोल्युशन अनुपलब्ध",
        "svg-long-desc": "SVG फाइल,साधारण $1 × $2 पिक्सेलहरु, फाइल आकार: $3",
-       "show-big-image": "पà¥\82रा à¤°à¤¿à¤\9cà¥\8bलà¥\8dयà¥\81शन",
-       "show-big-image-preview": "यस पूर्व रुपको आकार: $1.",
-       "show-big-image-other": "अरु रिजोल्युशनहरु: $1।",
+       "show-big-image": "मà¥\82ल à¤«à¤¾à¤\87ल",
+       "show-big-image-preview": "यस पूर्व रुपको आकार: $1",
+       "show-big-image-other": "अरु {{PLURAL:$2|resolution|रिजोल्युशनहरु}}: $1।",
        "show-big-image-size": "$1 × $2 पिक्सल",
        "file-info-gif-looped": "चकृय गरिएको",
        "file-info-gif-frames": "$1 {{PLURAL:$1|फ्रेम|फ्रेमहरु}}",
        "version-parser-function-hooks": "पार्सर फङ्सन हुक",
        "version-hook-name": "हुक नाम",
        "version-hook-subscribedby": "ग्राह्यता गर्ने",
-       "version-version": "(संस्करण $1)",
+       "version-version": "($1)",
        "version-svn-revision": "(r$2)",
        "version-license": "इजाजतपत्र",
        "version-poweredby-credits": "यो विकी '''[https://www.mediawiki.org/ मिडियाविकि]''' द्वारा सशक्तिकरण गरिएको छ, copyright © सन् २००१-$1 $2.",
        "dberr-problems": "क्षमा पाउँ! यो साइटमा तकनीकी गड़बड़ी आइपरेकोछ।",
        "dberr-again": "केही समय पर्खिएर पुन: लोड हुन दिनुहोस् ।",
        "dberr-info": "(डेटाबेस सर्वर $1सित सम्पर्क साध्न सकिंदैन)",
-       "dberr-info-hidden": "(डà¥\87à¤\9fावà¥\87स à¤¸à¤°à¥\8dभरमा सम्पर्क स्थापना गर्न सकिएन)",
+       "dberr-info-hidden": "(डà¥\87à¤\9fाबà¥\87समा सम्पर्क स्थापना गर्न सकिएन)",
        "dberr-usegoogle": "तपाईले अहिले गुगलबाट खोज गर्न प्रयास गर्न सक्नुहुन्छ।",
        "dberr-outofdate": "कृपया स्मरणमा राख्नुहोस् हाम्रा लेखहरूको सूची जुन उनीहरूले राखेका छन् त्यो अद्यावधिक नहुन सक्छ ।",
        "dberr-cachederror": "यो अनुरोध गरिएको पृष्ठको क्याशमा रहेका प्रतिलिपी हो , र अद्यावधिक नहुन सक्छ ।",
        "htmlform-chosen-placeholder": "एक विकल्प छान्नुहोस्",
        "sqlite-has-fts": "$1 पूरा पाठ खोज समर्थन सहित",
        "sqlite-no-fts": "$1 पूरा पाठ खोज समर्थन बिना",
-       "logentry-delete-restore": "$3 पृष्ठ $1ले पुनर्स्थापित गरेको हो",
+       "logentry-delete-restore": "$3 पृष्ठ $1ले {{GENDER:$2|पुनर्स्थापित}} गरेको हो",
        "revdelete-content-hid": "सामग्री लुकाइएको",
        "revdelete-summary-hid": "सम्पादन सारांस लुकाइएको",
        "revdelete-uname-hid": "प्रयोगकर्ताको नाम लुकाइयो",
        "revdelete-uname-unhid": "प्रयोगकर्ता देखाइएको",
        "revdelete-restricted": "प्रबन्धकहरुमाथि सीमितता लागू गरियो",
        "revdelete-unrestricted": "प्रवन्धककोलागि निषेधहरु हटाइयो ।",
-       "logentry-move-move": "$1 द्वारा $3 पृष्ठलाई $4 मा सारियो",
+       "logentry-move-move": "$1 {{GENDER:$2|द्वारा}} $3 पृष्ठलाई $4 मा सारियो",
        "rightsnone": "(कुनैपनि होइन)",
        "revdelete-summary": "सम्पादन सारांश",
-       "feedback-subject": "विषय:",
-       "feedback-message": "सन्देश:",
        "feedback-cancel": "रद्द गर्ने",
-       "feedback-submit": "प्रतिकृया बुझाउनुहोस्",
-       "feedback-error2": "त्रुटि: सम्पादन असफल",
        "feedback-close": "गरियो",
+       "feedback-error-title": "त्रुटि",
+       "feedback-error2": "त्रुटि: सम्पादन असफल",
+       "feedback-message": "सन्देश:",
+       "feedback-subject": "विषय:",
+       "feedback-submit": "बुझाउने",
+       "feedback-thanks-title": "धन्यवाद!",
+       "feedback-useragent": "प्रयोगकर्ता एजेन्ट:",
        "searchsuggest-search": "खोज",
        "api-error-badaccess-groups": "यस विकिमा तपाईंलाई फाइल अपलोड गर्ने अनुमति छैन।",
        "api-error-copyuploaddisabled": "यस सर्वरमा URL द्वारा अपलोड गर्ने व्यवस्था निस्क्रिय गरिएकोछ।",
index fcf23b3..8cd9178 100644 (file)
@@ -65,7 +65,9 @@
                        "Mirolith",
                        "Akoopal",
                        "Sikjes",
-                       "Robin0van0der0vliet"
+                       "Robin0van0der0vliet",
+                       "Kthoelen",
+                       "Mbch331"
                ]
        },
        "tog-underline": "Koppelingen onderstrepen:",
        "disclaimers": "Voorbehoud",
        "disclaimerpage": "Project:Algemeen voorbehoud",
        "edithelp": "Hulp bij bewerken",
+       "helppage-top-gethelp": "Help",
        "mainpage": "Hoofdpagina",
        "mainpage-description": "Hoofdpagina",
        "policy-url": "Project:Beleid",
        "readonly_lag": "De database is automatisch vergrendeld terwijl de ondergeschikte databaseservers synchroniseren met de hoofdserver.",
        "internalerror": "Interne fout",
        "internalerror_info": "Interne fout: $1",
+       "internalerror-fatal-exception": "Fatale fout van type \"$1\"",
        "filecopyerror": "Bestand \"$1\" kon niet naar \"$2\" gekopieerd worden.",
        "filerenameerror": "\"$1\" kon niet hernoemd worden naar \"$2\".",
        "filedeleteerror": "Bestand \"$1\" kon niet verwijderd worden.",
        "prefs-rc": "Recente wijzigingen",
        "prefs-watchlist": "Volglijst",
        "prefs-editwatchlist": "Volglijst bewerken",
+       "prefs-editwatchlist-label": "Items op uw volglijst bewerken:",
+       "prefs-editwatchlist-edit": "Items op uw volglijsten bekijken en verwijderen",
+       "prefs-editwatchlist-raw": "Ruwe volglijst bewerken",
+       "prefs-editwatchlist-clear": "Volglijst wissen",
        "prefs-watchlist-days": "Dagen weer te geven in de volglijst:",
        "prefs-watchlist-days-max": "Maximaal $1 {{PLURAL:$1|dag|dagen}}",
        "prefs-watchlist-edits": "Maximaal aantal bewerkingen in de uitgebreide volglijst:",
        "action-viewmywatchlist": "uw eigen volglijst te bekijken",
        "action-viewmyprivateinfo": "uw eigen privégegevens te bekijken",
        "action-editmyprivateinfo": "uw eigen privégegevens te bewerken",
+       "action-managechangetags": "labels aanmaken en verwijderen",
        "nchanges": "$1 {{PLURAL:$1|bewerking|bewerkingen}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sinds uw laatste bezoek}}",
        "enhancedrc-history": "geschiedenis",
        "uploaderror": "Uploadfout",
        "upload-recreate-warning": "'''Waarschuwing: er is een bestand met deze naam verwijderd of hernoemd.'''\n\nHieronder worden het verwijderingslogboek en het hernoemingslogboek voor deze pagina weergegeven:",
        "uploadtext": "Gebruik het onderstaande formulier om bestanden te uploaden.\nOm eerder toegevoegde bestanden te bekijken of te zoeken kunt u naar de [[Special:FileList|bestandslijst]] gaan.\nUploads en bestanden die na verwijdering opnieuw worden toegevoegd zijn na te zien in het [[Special:Log/upload|uploadlogboek]].\nVerwijderde bestanden worden bijgehouden in het [[Special:Log/delete|verwijderingslogboek]].\n\nOm het bestand in te voegen in een pagina kunt u een van de volgende vormen gebruiken, al naar gelang het bestandsformaat dat van toepassing is:\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestand.jpg]]</nowiki>''' om de volledige versie van het bestand te gebruiken;\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestand.png|200px|thumb|left|alternatieve tekst]]</nowiki>''' om een 200-pixels brede afbeelding links weer te geven met een rand en met \"alternatieve tekst\" als beschrijving;\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestand.ogg]]</nowiki>''' om naar het bestand te verwijzen zonder het weer te geven.",
-       "upload-permitted": "Toegelaten bestandstypes: $1.",
-       "upload-preferred": "Aangewezen bestandstypes: $1.",
-       "upload-prohibited": "Verboden bestandstypes: $1.",
+       "upload-permitted": "Toegelaten {{PLURAL:$2|bestandstype|bestandstypes}}: $1.",
+       "upload-preferred": "Aangewezen {{PLURAL:$2|bestandstype|bestandstypes}}: $1.",
+       "upload-prohibited": "Verboden {{PLURAL:$2|bestandstype|bestandstypes}}: $1.",
        "uploadlogpage": "Uploadlogboek",
        "uploadlogpagetext": "Hieronder staan de nieuwste bestanden.\nZie de [[Special:NewFiles|galerij met nieuwe bestanden]] voor een visueler overzicht.",
        "filename": "Bestandsnaam",
        "thumbnail_image-missing": "Het bestand lijkt niet aanwezig te zijn: $1",
        "thumbnail_image-failure-limit": "Het maken van een miniatuurafbeelding is te vaak mislukt ($1 keer of vaker). Probeer het later nog eens.",
        "import": "Pagina's importeren",
-       "importinterwiki": "Transwiki-import",
-       "import-interwiki-text": "Selecteer een wiki en paginanaam om te importeren.\nVersie- en auteursgegevens blijven hierbij bewaard.\nAlle transwiki-importhandelingen worden opgeslagen in het [[Special:Log/import|importlogboek]].",
+       "importinterwiki": "Pagina's importeren vanuit een andere wiki",
+       "import-interwiki-text": "Selecteer een wiki en paginanaam om te importeren.\nVersie- en auteursgegevens blijven hierbij bewaard.\nAlle importhandelingen worden opgeslagen in het [[Special:Log/import|importlogboek]].",
        "import-interwiki-sourcewiki": "Bronwiki:",
        "import-interwiki-sourcepage": "Bronpagina:",
        "import-interwiki-history": "Volledige geschiedenis van deze pagina ook kopiëren",
        "importcantopen": "Kon het importbestand niet openen",
        "importbadinterwiki": "Verkeerde interwikikoppeling",
        "importsuccess": "Import afgerond!",
-       "importnosources": "Er zijn geen transwiki-importbronnen gedefinieerd en directe geschiedenis-uploads zijn uitgeschakeld.",
+       "importnosources": "Er zijn geen wiki's van waaruit geïmporteerd kan worden vastgelegd. Directe geschiedenis-uploads zijn uitgeschakeld.",
        "importnofile": "Er is geen importbestand geüpload.",
        "importuploaderrorsize": "Upload van het importbestand in mislukt.\nHet bestand is groter dan de ingestelde limiet.",
        "importuploaderrorpartial": "Upload van het importbestand in mislukt.\nHet bestand is slechts gedeeltelijk aangekomen.",
        "import-rootpage-nosubpage": "In de naamruimte \"$1\" van de basispagina is het aanmaken van subpagina's niet mogelijk.",
        "importlogpage": "Importlogboek",
        "importlogpagetext": "Administratieve import van pagina's met geschiedenis van andere wiki's.",
-       "import-logentry-upload": "heeft [[$1]] geïmporteerd via een bestandsupload",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|versie|versies}} geïmporteerd",
-       "import-logentry-interwiki": "importeerde $1 via transwiki",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versie|versies}} geïmporteerd uit $2",
        "javascripttest": "JavaScript testen",
        "javascripttest-pagetext-noframework": "Deze pagina is gereserveerd voor het uitvoeren van JavaScripttesten.",
        "javascripttest-pagetext-unknownframework": "Onbekend testframework \"$1\".",
+       "javascripttest-pagetext-unknownaction": "Onbekende actie \"$1\".",
        "javascripttest-pagetext-frameworks": "Kies een van de volgende testframeworks: $1",
        "javascripttest-pagetext-skins": "Kies een vormgeving om de tests mee uit te voeren:",
        "javascripttest-qunit-intro": "Zie de [$1 testdocumentatie] op mediawiki.org.",
        "tooltip-pt-preferences": "Mijn voorkeuren",
        "tooltip-pt-watchlist": "Overzicht van pagina's die u volgt",
        "tooltip-pt-mycontris": "Overzicht van uw bijdragen",
-       "tooltip-pt-login": "U wordt van harte uitgenodigd om u aan te melden als gebruiker, maar dit is niet verplicht",
+       "tooltip-pt-login": "U wordt van harte uitgenodigd om in te loggen, maar dit is niet verplicht",
        "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-p-logo": "Naar de hoofdpagina gaan",
        "tooltip-n-mainpage": "Naar de hoofdpagina gaan",
        "tooltip-n-mainpage-description": "Naar de hoofdpagina gaan",
-       "tooltip-n-portal": "Informatie over het project: wie, wat, hoe en waarom",
+       "tooltip-n-portal": "Informatie over het project: wat je kunt doen, waar je dingen kunt vinden",
        "tooltip-n-currentevents": "Achtergrondinformatie over actuele zaken",
-       "tooltip-n-recentchanges": "De lijst met recente wijzigingen in deze wiki.",
+       "tooltip-n-recentchanges": "Een lijst met recente wijzigingen in deze wiki.",
        "tooltip-n-randompage": "Een willekeurige pagina bekijken",
        "tooltip-n-help": "Hulpinformatie over deze wiki",
        "tooltip-t-whatlinkshere": "Lijst met alle pagina's die naar deze pagina verwijzen",
        "tags-tag": "Labelnaam",
        "tags-display-header": "Weergave in wijzigingslijsten",
        "tags-description-header": "Volledige beschrijving van betekenis",
+       "tags-source-header": "Bron",
        "tags-active-header": "Actief?",
        "tags-hitcount-header": "Gelabelde bewerkingen",
+       "tags-actions-header": "Acties",
        "tags-active-yes": "Ja",
        "tags-active-no": "Nee",
+       "tags-source-extension": "Door een extensie toegevoegd",
+       "tags-source-manual": "Handmatig toegevoegd door gebruikers en bots",
+       "tags-source-none": "Niet meer in gebruik",
        "tags-edit": "bewerken",
+       "tags-delete": "verwijderen",
+       "tags-activate": "activeren",
+       "tags-deactivate": "deactiveren",
        "tags-hitcount": "$1 {{PLURAL:$1|wijziging|wijzigingen}}",
+       "tags-manage-no-permission": "U hebt geen rechten om labels te beheren.",
+       "tags-create-heading": "Een nieuw label aanmaken",
+       "tags-create-explanation": "Standaard worden nieuw aangemaakte labels beschikbaar gesteld voor gebruik door gebruikers en bots.",
+       "tags-create-tag-name": "Labelnaam:",
+       "tags-create-reason": "Reden:",
+       "tags-create-submit": "Aanmaken",
+       "tags-create-no-name": "U moet een labelnaam opgeven.",
+       "tags-create-already-exists": "Het label \"$1\" bestaat al.",
+       "tags-delete-title": "Label verwijderen",
+       "tags-delete-reason": "Reden:",
+       "tags-delete-not-found": "Het label \"$1\" bestaat niet.",
+       "tags-activate-title": "Label activeren",
+       "tags-activate-reason": "Reden:",
+       "tags-activate-not-found": "Het label \"$1\" bestaat nog niet.",
+       "tags-activate-submit": "Activeren",
+       "tags-deactivate-title": "Label deactiveren",
+       "tags-deactivate-question": "U staat op het punt om het label \"$1\" te deactiveren.",
+       "tags-deactivate-reason": "Reden:",
+       "tags-deactivate-submit": "Deactiveren",
        "comparepages": "Pagina's vergelijken",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
        "revdelete-uname-unhid": "gebruikersnaam zichtbaar gemaakt",
        "revdelete-restricted": "heeft beperkingen aan beheerders opgelegd",
        "revdelete-unrestricted": "heeft beperkingen voor beheerders opgeheven",
+       "logentry-block-block": "$1 {{GENDER:$2|heeft}} {{GENDER:$4|$3}} geblokkeerd voor de duur van $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|heeft}} {{GENDER:$4|$3}} gedeblokkeerd",
+       "logentry-block-reblock": "$1 {{GENDER:$2|heeft}} de blokkade voor {{GENDER:$4|$3}} aangepast. Deze vervalt nu op $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|heeft}} {{GENDER:$4|$3}} geblokkeerd voor de duur van $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|heeft}} de blokkade voor {{GENDER:$4|$3}} aangepast. Deze vervalt nu op $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|heeft}} $3 samengevoegd naar $4 (versies tot en met $5)",
        "logentry-move-move": "$1 {{GENDER:$2|heeft}} pagina $3 hernoemd naar $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|heeft}} de pagina $3 hernoemd naar $4 zonder een doorverwijzing achter te laten",
        "logentry-rights-rights": "$1 {{GENDER:$2|heeft}} groepslidmaatschap voor $3 gewijzigd van $4 naar $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|heeft}} het groepslidmaatschap gewijzigd voor $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|is}} automatisch gepromoveerd van $4 naar $5",
-       "logentry-upload-upload": "$1 heeft $3 {{GENDER:$2|geupload}}",
+       "logentry-upload-upload": "$1 heeft $3 {{GENDER:$2|geüpload}}",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|heeft}} een nieuwe versie van $3 geüpload",
        "logentry-upload-revert": "$1 heeft $3 {{GENDER:$2|geupload}}",
+       "logentry-managetags-create": "$1 heeft het label \"$4\" {{GENDER:$2|aangemaakt}}",
        "rightsnone": "(geen)",
        "revdelete-summary": "bewerkingssamenvatting",
+       "feedback-adding": "Uw terugkoppeling wordt aan de pagina toegevoegd...",
+       "feedback-back": "Terug",
+       "feedback-bugcheck": "Geweldig! Controleer even of het niet al één van de [$1 bekende problemen] is.",
+       "feedback-bugnew": "Heb ik gecontroleerd; nieuw probleem melden",
        "feedback-bugornote": "Als u zover bent om een technisch probleem in detail te beschrijven, [$1 rapporteer dan een bug].\nAnders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt dan toegevoegd aan de pagina \"[$3 $2]\", samen met uw gebruikersnaam en de browser die u gebruikt.",
-       "feedback-subject": "Onderwerp:",
-       "feedback-message": "Bericht:",
        "feedback-cancel": "Annuleren",
-       "feedback-submit": "Terugkoppeling opslaan",
-       "feedback-adding": "Uw terugkoppeling wordt aan de pagina toegevoegd...",
+       "feedback-close": "Afgerond",
        "feedback-error1": "Fout: onbekend resultaat uit de API",
        "feedback-error2": "Fout: de bewerking is mislukt",
        "feedback-error3": "Fout: geen reactie van de API",
+       "feedback-message": "Bericht:",
+       "feedback-subject": "Onderwerp:",
+       "feedback-submit": "Opslaan",
        "feedback-thanks": "Bedankt! Uw terugkoppeling is op de pagina \"[$2 $1]\" geplaatst.",
-       "feedback-close": "Afgerond",
-       "feedback-bugcheck": "Geweldig! Controleer even of het niet al één van de [$1 bekende problemen] is.",
-       "feedback-bugnew": "Heb ik gecontroleerd; nieuw probleem melden",
+       "feedback-thanks-title": "Bedankt!",
        "searchsuggest-search": "Zoeken",
        "searchsuggest-containing": "bevat...",
        "api-error-badaccess-groups": "U mag geen bestanden uploaden in deze wiki.",
        "json-error-utf8": "Ongeldige UTF-8-tekens, mogelijk verkeerd gecodeerd",
        "json-error-recursion": "Een of meer recursieve verwijzingen in de waarde die moet worden gecodeerd",
        "json-error-inf-or-nan": "Een of meer NAN- of INF-waarden in de waarde die moet worden gecodeerd",
-       "json-error-unsupported-type": "Er is een waarde opgegeven van een type dat niet kan worden gecodeerd"
+       "json-error-unsupported-type": "Er is een waarde opgegeven van een type dat niet kan worden gecodeerd",
+       "headline-anchor-title": "Koppeling naar deze sectie maken",
+       "special-characters-group-latin": "Latijn",
+       "special-characters-group-latinextended": "Latijn uitgebreid",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symbolen",
+       "special-characters-group-greek": "Grieks",
+       "special-characters-group-cyrillic": "Cyrillisch",
+       "special-characters-group-arabic": "Arabisch",
+       "special-characters-group-arabicextended": "Uitgebreid Arabisch",
+       "special-characters-group-persian": "Farsi",
+       "special-characters-group-hebrew": "Hebreeuws",
+       "special-characters-group-bangla": "Bengaals",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalees",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Laotiaans",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "liggend streepje",
+       "special-characters-title-emdash": "gedachtenstreepje",
+       "special-characters-title-minus": "minteken"
 }
index b667237..b9aa6fb 100644 (file)
@@ -21,7 +21,8 @@
                        "Ranveig",
                        "לערי ריינהארט",
                        "아라",
-                       "Gaute"
+                       "Gaute",
+                       "Macofe"
                ]
        },
        "tog-underline": "Strek under lenkjer:",
        "blocklogpage": "Blokkeringslogg",
        "blocklog-showlog": "Denne brukaren har tidlegare vorte blokkert.\nBlokkeringsloggen er sett opp nedanfor, som referanse.",
        "blocklog-showsuppresslog": "Denne brukaren har tidlegare vorte blokkert og skjult.\nLoggføringa er synt nedanfor som referanse:",
-       "blocklogentry": "Blokkerte «[[$1]]» med opphøyrstid $2 $3",
+       "blocklogentry": "blokkerte [[$1]] med opphøyrstid $2 $3",
        "reblock-logentry": "endra blokkeringsinnstillingar for [[$1]] med tida $2 $3",
        "blocklogtext": "Dette er ein logg over blokkeringar og oppheving av blokkeringar gjorde.\nIP-adresser som blir automatisk blokkerte er ikkje lista her. Sjå [[Special:BlockList|blokkeringslista]] for alle aktive blokkeringar.",
        "unblocklogentry": "oppheva blokkering av «$1»",
        "import-rootpage-nosubpage": "Namnerommet «$1» til rotsida tillèt ikkje undersider.",
        "importlogpage": "Importeringslogg",
        "importlogpagetext": "Administrativ import av sider med endringshistorikk frå andre wikiar.",
-       "import-logentry-upload": "importerte [[$1]] frå opplasta fil",
        "import-logentry-upload-detail": "{{PLURAL:$1|Éin versjon|$1 versjonar}}",
-       "import-logentry-interwiki": "overførte $1 mellom wikiar",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Éin versjon|$1 versjonar}} frå $2",
        "javascripttest": "JavaScript-utrøyning",
        "javascripttest-pagetext-noframework": "Sida er reservert for køyring av JavaScript-utrøyningar.",
        "tooltip-ca-nstab-template": "Vis mal",
        "tooltip-ca-nstab-help": "Vis hjelpeside",
        "tooltip-ca-nstab-category": "Vis kategoriside",
-       "tooltip-minoredit": "Merk dette som småplukk",
+       "tooltip-minoredit": "Merk endringa som småplukk",
        "tooltip-save": "Lagra endringane dine",
        "tooltip-preview": "Førehandsvis endringane dine. Helst brukar du denne funksjonen før du lagrar.",
        "tooltip-diff": "Sjå kva endringar du gjorde i teksten",
        "spam_reverting": "Attenderullar til siste versjon utan lenkje til $1",
        "spam_blanking": "Alle versjonar inneheldt lenkje til $1, tømmer sida",
        "spam_deleting": "Alle versjonane inneheldt lenkjer til $1, slettar.",
-       "simpleantispam-label": "Antispam-kontroll.\n'''IKKJE''' fyll ut dette feltet!",
+       "simpleantispam-label": "Antispam-kontroll.\n<strong>IKKJE</strong> fyll ut dette feltet!",
        "pageinfo-title": "Informasjon om «$1»",
        "pageinfo-not-current": "Diverre er det umogeleg å gje ut denne informasjonen for gamle versjonar.",
        "pageinfo-header-basic": "Grunnleggjande informasjon",
        "version-parser-function-hooks": "Parserfunksjonstillegg",
        "version-hook-name": "Namn på tillegg",
        "version-hook-subscribedby": "Brukt av",
-       "version-version": "(versjon $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[utan namn]",
        "version-license": "MediaWiki-lisens",
        "version-ext-license": "Lisens",
        "tags-tag": "Merkenamn",
        "tags-display-header": "Utsjånad på endringslister",
        "tags-description-header": "Tyding",
+       "tags-source-header": "Kjelde",
        "tags-active-header": "Verksamt?",
        "tags-hitcount-header": "Merkte endringar",
+       "tags-actions-header": "Handlingar",
        "tags-active-yes": "Ja",
        "tags-active-no": "Nei",
+       "tags-source-extension": "Definert av ei utviding",
+       "tags-source-manual": "Brukt manuelt av brukarar og robotar",
+       "tags-source-none": "Ikkje lenger i bruk",
        "tags-edit": "endra",
+       "tags-delete": "slett",
+       "tags-activate": "slå på",
+       "tags-deactivate": "slå av",
        "tags-hitcount": "{{PLURAL:$1|éi endring|$1 endringar}}",
+       "tags-manage-no-permission": "Du har ikkje løyve til å handsama endringsmerke.",
+       "tags-create-heading": "Opprett nytt merke",
+       "tags-create-explanation": "Som standard vert nyoppretta merke gjorde tilgjengelege for brukarar og robotar.",
+       "tags-create-tag-name": "Merkenamn:",
+       "tags-create-reason": "Årsak:",
+       "tags-create-submit": "Opprett",
+       "tags-create-no-name": "Du må oppgje eit merkenamn.",
        "comparepages": "Samanlikna sider",
        "compare-page1": "Side 1",
        "compare-page2": "Side 2",
        "logentry-rights-autopromote": "$1 vart automatisk {{GENDER:$2|forfremja}} frå $4 til $5",
        "rightsnone": "(ingen)",
        "revdelete-summary": "Samandrag",
+       "feedback-adding": "Legg til attendemeldinga til sida...",
+       "feedback-bugcheck": "Bra! No lyt du berre sjå etter om han er ein av dei [$1 kjende feila].",
+       "feedback-bugnew": "Eg såg etter. Rapporter ein ny feil",
        "feedback-bugornote": "Er du klar til å skildra ein teknisk vanske i detalj, gjer vel å [$1 rapportera inn ein feil].\nOm ikkje kan du nytta det enkle skjemaet under. Merknaden din vert lagd til på sida «[$3 $2]», i lag med brukarnamnet ditt og kva for nettlesar du nyttar.",
-       "feedback-subject": "Emne:",
-       "feedback-message": "Melding:",
        "feedback-cancel": "Bryt av",
-       "feedback-submit": "Send attendemelding",
-       "feedback-adding": "Legg til attendemeldinga til sida...",
+       "feedback-close": "Gjort",
        "feedback-error1": "Feil: Ukjent resultat frå API",
        "feedback-error2": "Feil: Brigdinga gjekk ikkje",
        "feedback-error3": "Feil: Saknar svar frå API",
+       "feedback-message": "Melding:",
+       "feedback-subject": "Emne:",
+       "feedback-submit": "Send",
        "feedback-thanks": "Takk! Attendemeldinga di er lagd inn på sida «[$2 $1]».",
-       "feedback-close": "Gjort",
-       "feedback-bugcheck": "Bra! No lyt du berre sjå etter om han er ein av dei [$1 kjende feila].",
-       "feedback-bugnew": "Eg såg etter. Rapporter ein ny feil",
        "searchsuggest-search": "Søk",
        "searchsuggest-containing": "som inneheld …",
        "api-error-badaccess-groups": "Du har ikkje løyve til å lasta opp filer til wikien.",
        "mediastatistics-header-text": "Tekstformat",
        "mediastatistics-header-executable": "Kan køyrast",
        "mediastatistics-header-archive": "Komprimerte format",
-       "json-error-syntax": "Syntaksfeil"
+       "json-error-syntax": "Syntaksfeil",
+       "headline-anchor-title": "Lenk til denne bolken",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Utvida latin",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symbol",
+       "special-characters-group-greek": "Gresk",
+       "special-characters-group-cyrillic": "Kyrillisk",
+       "special-characters-group-arabic": "Arabisk",
+       "special-characters-group-arabicextended": "Utvida arabisk",
+       "special-characters-group-persian": "Persisk",
+       "special-characters-group-hebrew": "Hebraisk",
+       "special-characters-group-bangla": "Bengali",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalesisk",
+       "special-characters-group-gujarati": "Gujarati"
 }
index 1e1748a..4f1471e 100644 (file)
        "disclaimers": "Avertiments",
        "disclaimerpage": "Project:Avertiments generals",
        "edithelp": "Ajuda",
+       "helppage-top-gethelp": "Ajuda",
        "mainpage": "Acuèlh",
        "mainpage-description": "Acuèlh",
        "policy-url": "Project:Règlas",
        "readonly_lag": "La banca de donadas es estada automaticament clavada pendent que los servidors segondaris ratrapan lor retard sul servidor principal.",
        "internalerror": "Error intèrna",
        "internalerror_info": "Error intèrna: $1",
+       "internalerror-fatal-exception": "Error fatala de tipe \"$1\"",
        "filecopyerror": "Impossible de copiar lo fichièr « $1 » cap a « $2 ».",
        "filerenameerror": "Impossible de tornar nomenar lo fichièr « $1 » en « $2 ».",
        "filedeleteerror": "Impossible de suprimir lo fichièr « $1 ».",
        "unusedimages": "Imatges orfanèls",
        "wantedcategories": "Categorias mai demandadas",
        "wantedpages": "Paginas mai demandadas",
+       "wantedpages-summary": "Aquesta pagina compta totes los ligams, encluses los inserits via de modèls de navigacion. Per una lista dels articles mai demandats, vejatz articles mai demandats, que comptabiliza pas que las referéncias que provenon de l'espaci de nom dels articles. Vejatz tanben lo '''articles mai demandats'''.",
        "wantedpages-badtitle": "Títol invalid dins los resultats : $1",
        "wantedfiles": "Fichièrs desirats",
        "wantedfiletext-cat": "Los fichièrs seguents son utilizats, mas existisson pas localament. Se se tròban sus un depaus partejat, pòdon èsser listats aicí, mentre que sián, de fach, ja disponibles. Totes aqueles falses positius seràn <del>raiats</del>. Amai, las paginas qu'intègran de fichièrs qu'existisson pas son repertoriadas dins [[:$1]].",
        "undelete-show-file-submit": "Òc",
        "namespace": "Espaci de noms :",
        "invert": "Inversar la seleccion",
+       "tooltip-invert": "Marcatz aquesta casa per amagar las modificacions de las paginas dins l'espaci de noms seleccionat (e l'espaci de noms associat se marcat)",
        "namespace_association": "Espaci de nom associat",
+       "tooltip-namespace_association": "Marcatz aquesta casa per inclure tanben l'espaci de noms de discussion associat a l'espaci de noms seleccionat",
        "blanknamespace": "(Principal)",
        "contributions": "Contribucions de l'{{GENDER:$1|utilizaire|utilizaira}}",
        "contributions-title": "Lista de las contribucions de l’utilizaire $1",
        "thumbnail_gd-library": "Configuracion incompleta de la bibliotèca GD : foncion $1 introbabla",
        "thumbnail_image-missing": "Lo fichièr seguent es introbable : $1",
        "import": "Importar de paginas",
-       "importinterwiki": "Impòrt interwiki",
+       "importinterwiki": "Importar a partir d'un autre wiki",
        "import-interwiki-text": "Seleccionatz un wiki e un títol de pagina d'importar.\nLas datas de las versions e los noms dels editors seràn preservats.\nTotas las accions d’importacion interwiki son conservadas dins lo [[Special:Log/import|jornal d’impòrt]].",
        "import-interwiki-sourcewiki": "Wiki font :",
        "import-interwiki-sourcepage": "Pagina font :",
        "import-rootpage-nosubpage": "L'espaci de noms « $1 » de la pagina raiç autoriza pas las sospaginas.",
        "importlogpage": "Istoric de las importacions de paginas",
        "importlogpagetext": "Impòrts administratius de paginas amb l’istoric a partir dels autres wikis.",
-       "import-logentry-upload": "a importat [[$1]] per mandadís de fichièr",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision importada|revisions importadas}}",
-       "import-logentry-interwiki": "a importat $1 d'un wiki a l'autre",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision importada|revisions importadas}} dempuèi $2",
        "javascripttest": "Tèst de JavaScript",
        "javascripttest-pagetext-noframework": "Aquesta pagina es reservada per l'execucion dels tèsts JavaScript.",
        "tooltip-pt-mycontris": "Lista de vòstras contribucions",
        "tooltip-pt-login": "Sètz convidat(ada) a vos identificar, mas es pas obligatòri.",
        "tooltip-pt-logout": "Se desconnectar",
+       "tooltip-pt-createaccount": "Vos es conselhat de crear un compte e de vos connectar ; pasmens, es pas obligatòri",
        "tooltip-ca-talk": "Discussion a prepaus d'aquesta pagina",
        "tooltip-ca-edit": "Podètz modificar aquesta pagina. Mercé de previsualizar abans d’enregistrar.",
        "tooltip-ca-addsection": "Començar una seccion novèla",
        "version-parser-function-hooks": "Croquets de las foncions del parser",
        "version-hook-name": "Nom del croquet",
        "version-hook-subscribedby": "Definit per",
-       "version-version": "(Version $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[sens nom]",
        "version-license": "Licéncia de MediaWiki",
        "version-ext-license": "Licéncia",
        "logentry-upload-revert": "$1 {{GENDER:$2|a telecargat}} $3",
        "rightsnone": "(cap)",
        "revdelete-summary": "modificar lo somari",
-       "feedback-subject": "Subjècte :",
-       "feedback-message": "Messatge :",
-       "feedback-cancel": "Anullar",
-       "feedback-submit": "Mandar vòstres comentaris",
        "feedback-adding": "Apondon de vòstres comentaris a la pagina...",
+       "feedback-bugcheck": "Remirable ! Verificatz simplament qu'es pas un dels [$1 bugs ja coneguts].",
+       "feedback-bugnew": "Ai verificat. Senhalar un bug novèl",
+       "feedback-cancel": "Anullar",
+       "feedback-close": "Fach",
        "feedback-error1": "Error : Resultat de l'IPA pas reconegut",
        "feedback-error2": "Error : la modificacion a fracassat",
        "feedback-error3": "Error : pas cap de responsa de l'API",
+       "feedback-message": "Messatge :",
+       "feedback-subject": "Subjècte :",
+       "feedback-submit": "Mandar",
        "feedback-thanks": "Mercé ! Vòstre comentari es estat publicat sus la pagina \"[$2 $1]\".",
-       "feedback-close": "Fach",
-       "feedback-bugcheck": "Remirable ! Verificatz simplament qu'es pas un dels [$1 bugs ja coneguts].",
-       "feedback-bugnew": "Ai verificat. Senhalar un bug novèl",
        "searchsuggest-search": "Recercar",
        "searchsuggest-containing": "que conten...",
        "api-error-badaccess-groups": "Sètz pas autorizat a cargar de fichièrs sus aqueste wiki.",
        "mediastatistics-header-text": "Textual",
        "mediastatistics-header-executable": "Executables",
        "mediastatistics-header-archive": "Formats compressats",
-       "json-error-syntax": "Error de sintaxi"
+       "json-error-syntax": "Error de sintaxi",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin espandit",
+       "special-characters-group-ipa": "API",
+       "special-characters-group-symbols": "Simbòls",
+       "special-characters-group-greek": "Grèc",
+       "special-characters-group-cyrillic": "Cirillic",
+       "special-characters-group-arabic": "Arabi",
+       "special-characters-group-arabicextended": "arabi espandit",
+       "special-characters-group-persian": "Pèrse",
+       "special-characters-group-hebrew": "Ebrieu",
+       "special-characters-group-bangla": "Bengali",
+       "special-characters-group-tamil": "Tamol",
+       "special-characters-group-telugu": "Telogó",
+       "special-characters-group-sinhala": "Cingalés",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Tai",
+       "special-characters-group-lao": "Laocian",
+       "special-characters-group-khmer": "Cmèr",
+       "special-characters-title-endash": "jonhent anglés",
+       "special-characters-title-emdash": "jonhent em",
+       "special-characters-title-minus": "signe mens"
 }
index cce25e5..a89a229 100644 (file)
@@ -11,7 +11,8 @@
                        "Sambiwiki",
                        "Shisir 1945",
                        "ଶିତିକଣ୍ଠ ଦାଶ",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "ତଳେ ଥିବା ଲିଙ୍କ:",
        "deleteprotected": "ଏହି ପୃଷ୍ଠାଟି କିଳାଯାଇଥିବାରୁ ଆପଣ ଏହାକୁ ଲିଭାଇପାରିବେ ନାହିଁ ।",
        "deleting-backlinks-warning": "''' ଚେତାବନୀ:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|ବାକି ପୃଷ୍ଠା]] ଆପଣ ଲିଭାଇବାକୁ ଯାଉଥିବା ପୃଷ୍ଠାଟି ସହିତ ଲିଙ୍କ କରନ୍ତୁ କିମ୍ବା ତାହାକୁ କାଢ଼ନ୍ତୁ ।",
        "rollback": "ପୁରାପୁରି ପଛକୁ ଫେରିବା ବଦଳ",
-       "rollback_short": "ପୂରାପୂରି ପଛକୁ ଫେରିଯିବେ",
        "rollbacklink": "ପୂରାପୂରି ପଛକୁ ଫେରିଯିବେ",
        "rollbacklinkcount": "{{PLURAL:$1|edit|edits}} $1 ପଛକୁ ଫେରାଇବେ",
        "rollbacklinkcount-morethan": "{{PLURAL:$1|edit|edits}} $1ରୁ ଅଧିକ ପଛକୁ ଫେରାଇବେ",
        "import-rootpage-nosubpage": "ମୂଳ ପୃଷ୍ଠାର \"$1\" ନେମସ୍ପେସ ଉପପୃଷ୍ଠାର ଅନୁମତି ଦିଏନାହିଁ ।",
        "importlogpage": "ଇତିହାସ ଆହରଣ",
        "importlogpagetext": "ଅନ୍ୟ ଉଇକିରୁ ପରିଛାଙ୍କ ଦେଇ ସମ୍ପାଦନା ଇତିହାସ ସହ କରାହୋଇଥିବା ପୃଷ୍ଠା ଆମଦାନି ।",
-       "import-logentry-upload": "ଫାଇଲ ଅପଲୋଡ଼ ଦେଇ [[$1]] ଆମଦାନି କରାଯାଇଛି",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|ଗୋଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ଅଣାଗଲା",
-       "import-logentry-interwiki": "$1 କୁ ଟ୍ରାନ୍ସଉଇକି କରାଗଲା",
        "import-logentry-interwiki-detail": "$2ରୁ $1 {{PLURAL:$1|ଗୋଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ଅଣାଗଲା",
        "javascripttest": "ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ",
-       "javascripttest-title": "ଚାଲୁଥିବା $1 ପରଖଗୁଡିକ",
        "javascripttest-pagetext-noframework": "ଏହି ପୃଷ୍ଠାଟି ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ ପାଇଁ ସଂରକ୍ଷଣ କରି ରଖାଯାଇଛି ।",
        "javascripttest-pagetext-unknownframework": "\"$1\" ଅଜଣା ପରଖ ଗତିବିଧି ।",
        "javascripttest-pagetext-frameworks": "ଦୟାକରି ନିମ୍ନରେ ଥିବା ଏକ ପରଖ ପ୍ରକ୍ରିୟାକୁ ବାଛନ୍ତୁ :$1",
        "javascripttest-pagetext-skins": "ଏହି ପରଖକୁ ଚାଲୁ କରିବା ପାଇଁ ଏକ ଆବରଣ ବାଛନ୍ତୁ ।",
        "javascripttest-qunit-intro": "mediawiki.orgରେ [$1 testing documentation]କୁ ଦେଖନ୍ତୁ ।",
-       "javascripttest-qunit-heading": "ମେଡିଆଉଇକି ଜାଭାସ୍କ୍ରିପ୍ଟ Qunit ପରଖ ପ୍ରକ୍ରିୟା",
        "tooltip-pt-userpage": "ଆପଣଙ୍କ ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠା",
        "tooltip-pt-anonuserpage": "ଆପଣ ଯେଉଁ IP ଠିକଣାର ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାଟି ବଦଳାଇବା ପାଇଁ ଚେଷ୍ଟା କରୁଛନ୍ତି",
        "tooltip-pt-mytalk": "ଆପଣଙ୍କ ଆଲୋଚନା ପୃଷ୍ଠା",
        "version-parser-function-hooks": "ପାର୍ସର କାମ ହୁକ",
        "version-hook-name": "ହୁକ ନାମ",
        "version-hook-subscribedby": "କାହା ଦେଇ ମଗାଯାଇଛି",
-       "version-version": "(ଭାଗ $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[କୌଣସି ନାମ ନାହିଁ]",
        "version-license": "ମିଡ଼ିଆଉଇକି ସ୍ୱତ୍ୱ",
        "version-ext-license": "ଲାଇସେନ୍ସ",
        "logentry-upload-revert": "$1, $3 {{GENDER:$2|ଅପଲୋଡ଼ କଲେ}}",
        "rightsnone": "(କିଛି ନାହିଁ)",
        "revdelete-summary": "ସାରକଥା ସମ୍ପାଦନା",
+       "feedback-adding": "ପୃଷ୍ଠାରେ ମତାମତ ଦେଉଛି...",
+       "feedback-bugcheck": "ବହୁତ ଭଲ ! ଖାଲି ଦେଖିଦିଅନ୍ତୁ ଯେ ଏହା ଆଗରୁ ଥିବା [$1 known bugs] ମଧ୍ୟରୁ ନୁହେଁ ତ ।",
+       "feedback-bugnew": "ମୁଁ ଯାଞ୍ଚ କରିଦେଲି । ନୂତନ ଅସୁବିଧାର ବିବରଣ କରନ୍ତୁ ।",
        "feedback-bugornote": "ଦୟାକରି ଆପଣ ଏକ କାରିଗରି ଅସୁବିଧାଟିଏ ଜଣାଇବା ପାଇଁ ଚାହୁଁଥିଲେ ଦୟାକରି [$1 ଏଠାରେ ଅସୁବିଧାଟି ଜଣାନ୍ତୁ] । \nଅଥବା, ଆପଣ ତଳେ ଠିଆ ସହଜ ଆବେଦନ ପତ୍ରଟି ପୁରଣ କରିପାରିବେ ।  ଆପଣଙ୍କ ବ୍ୟବହାରକାରୀ ନାମ ଓ ଆପଣ ବ୍ୟବହାର କରୁଥିବା ବ୍ରାଉଜର ଅନୁସାରେ ଆପଣଙ୍କ ମତାମତ \"[$3 $2]\"ରେ ଯୋଡ଼ାଯିବ ।",
-       "feedback-subject": "ବିଷୟ:",
-       "feedback-message": "ଖବର:",
        "feedback-cancel": "ନାକଚ",
-       "feedback-submit": "ମତାମତ ଦିଅନ୍ତୁ",
-       "feedback-adding": "ପୃଷ୍ଠାରେ ମତାମତ ଦେଉଛି...",
+       "feedback-close": "ହୋଇଗଲା",
        "feedback-error1": "ଭୁଲ: API ରୁ ଅଚିହ୍ନା ଫଳାଫଳ",
        "feedback-error2": "ଅସୁବିଧା: ସମ୍ପାଦନା ବିଫଳ ହେଲା",
        "feedback-error3": "ଅସୁବିଧା: API ରୁ କିଛି ଉତ୍ତର ମିଳିଲା ନାହିଁ",
+       "feedback-message": "ଖବର:",
+       "feedback-subject": "ବିଷୟ:",
+       "feedback-submit": "ଦାଖଲ କରିବା",
        "feedback-thanks": "ଧନ୍ୟବାଦ ! ଆପଣଙ୍କର ମତାମତ  \"[$2 $1]\" ପୃଷ୍ଠାରେ ଦର୍ଶାଯାଇଛି ।",
-       "feedback-close": "ହୋଇଗଲା",
-       "feedback-bugcheck": "ବହୁତ ଭଲ ! ଖାଲି ଦେଖିଦିଅନ୍ତୁ ଯେ ଏହା ଆଗରୁ ଥିବା [$1 known bugs] ମଧ୍ୟରୁ ନୁହେଁ ତ ।",
-       "feedback-bugnew": "ମୁଁ ଯାଞ୍ଚ କରିଦେଲି । ନୂତନ ଅସୁବିଧାର ବିବରଣ କରନ୍ତୁ ।",
        "searchsuggest-search": "ଖୋଜନ୍ତୁ",
        "searchsuggest-containing": "ଖୋଜୁଛି...",
        "api-error-badaccess-groups": "ଆପଣଙ୍କୁ ଏହି ଉଇକିରେ ଅପଲୋଡ଼ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ ।",
        "json-error-utf8": "UTF-8 କ୍ୟାରେକ୍ଟର ଅସଜଡ଼ା, ଭୁଲ ଭାବେ ଏନକୋଡ଼ କରାଯାଇଥିବା ହେତୁ ହୋଇପାରେ",
        "json-error-recursion": "ଏନକୋଡ଼ ହେବାକୁ ଥିବା ଭାଲ୍ୟୁରେ ଏକରୁ ଅଧିକ ରିକର୍ସିଭ ଆଧାର",
        "json-error-inf-or-nan": "ଭାଲ୍ୟୁରେ ଏକରୁ ଅଧିକ NAN କିମ୍ବା INF ମୂଲ୍ୟ ଏନକୋଡ଼ କରିବାକୁ ହେବ",
-       "json-error-unsupported-type": "ଏନକୋଡ଼ ହୋଇନପାରିବା ଭଳି ଏକ ପ୍ରକାରର ମୂଲ୍ୟ ଦିଆଗଲା"
+       "json-error-unsupported-type": "ଏନକୋଡ଼ ହୋଇନପାରିବା ଭଳି ଏକ ପ୍ରକାରର ମୂଲ୍ୟ ଦିଆଗଲା",
+       "special-characters-group-latin": "ଲାଟିନ",
+       "special-characters-group-latinextended": "ଲାଟିନ ଅଧିକ ଅକ୍ଷର",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "ସଙ୍କେତ",
+       "special-characters-group-greek": "ଗ୍ରୀକ",
+       "special-characters-group-cyrillic": "ସିରିଲିକ",
+       "special-characters-group-arabic": "ଆରବୀ",
+       "special-characters-group-arabicextended": "ଆରବୀ ଅଧିକ ଅକ୍ଷର",
+       "special-characters-group-persian": "ପାରସୀ",
+       "special-characters-group-hebrew": "ହିବ୍ରୁ",
+       "special-characters-group-bangla": "ବଙ୍ଗଳା",
+       "special-characters-group-tamil": "ତାମିଲ",
+       "special-characters-group-telugu": "ତେଲୁଗୁ",
+       "special-characters-group-sinhala": "ସିଂହଳୀ",
+       "special-characters-group-gujarati": "ଗୁଜୁରାଟୀ",
+       "special-characters-group-devanagari": "ଦେବନାଗରୀ",
+       "special-characters-group-thai": "ଥାଇ",
+       "special-characters-group-lao": "ଲାଓ",
+       "special-characters-group-khmer": "ଖମେର ଭାଷା",
+       "special-characters-title-endash": "en ଡ୍ୟାସ",
+       "special-characters-title-emdash": "em dash",
+       "special-characters-title-minus": "ମେନୁଗୁଡିକର ଚିହ୍ନ"
 }
index 392fee0..89ef183 100644 (file)
        "editlink": "ивын",
        "viewsourcelink": "Код кæсын",
        "editsectionhint": "Хай ивын: $1",
-       "toc": "Сæртæ",
+       "toc": "Сæргæндтæ",
        "showtoc": "равдисын",
        "hidetoc": "бамбæхсын",
        "collapsible-collapse": "Стухын",
        "gotaccount": "Регистрацигонд дæ? $1.",
        "gotaccountlink": "Бахизын",
        "userlogin-resetlink": "Ферох дæ сты дæ бахизæнтæ?",
-       "userlogin-resetpassword-link": "Ð\94æ Ð¿Ð°Ñ\80олÑ\8c Ð½Ð¾Ð³Ã¦Ð¹ Ñ\81æвæÑ\80",
+       "userlogin-resetpassword-link": "ФеÑ\80оÑ\85 Ð¸ Ð´Ã¦ Ð¿Ð°Ñ\80олÑ\8c?",
        "createacct-emailrequired": "Электрон посты адрис",
        "createacct-emailoptional": "Электрон посты адрис (фæндон)",
        "createacct-email-ph": "Бафысс дæ электрон посты адрис",
        "login-abort-generic": "Нæ дын бантыст бахизын. Урæд.",
        "loginlanguagelabel": "Æвзаг: $1",
        "suspicious-userlogout": "Дæ рахизыны домæн нæ сæххæст ис, уымæн æмæ хæлд браузерæй кæнæ кешгæнæг проксийæ æрвысты хуызæн у.",
+       "pt-userlogout": "Рахизын",
        "php-mail-error-unknown": "Нæбæрæг рæдыд PHP-йы mail() функцийы.",
        "user-mail-no-addy": "Е-mail æрвыста æнæ e-mail адрисæй.",
        "user-mail-no-body": "Фæлварста афтид кæнæ æнæбары мидисимæ фыстæг арвитын.",
        "size-gigabytes": "$1 ГБ",
        "watchlistedit-normal-title": "Цæстдард ивæн",
        "watchlistedit-normal-submit": "Схафын фыстытæ",
-       "watchlistedit-raw-titles": "СæÑ\80тæ:",
+       "watchlistedit-raw-titles": "ФæÑ\80Ñ\81тæ:",
        "watchlistedit-raw-submit": "Номхыгъд бафснай",
        "watchlisttools-view": "Баст ивдтытæ фен",
        "watchlisttools-edit": "Бакæсын æмæ ивын цæстдард рæгъ",
        "version": "Фæлтæр",
        "version-skins": "Цъар",
        "version-other": "Æндæр",
-       "version-version": "(Фæлтæр $1)",
+       "version-version": "($1)",
        "version-license": "Лицензи",
        "version-poweredby-credits": "Ацы викийæн тых радта '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "æндæртæ",
        "logentry-delete-restore": "$1 рацарæзта фарс $3",
        "rightsnone": "(нæй)",
        "revdelete-summary": "ивддзинады мидис",
-       "feedback-subject": "Сæр:",
-       "feedback-message": "Фыстæг:",
        "feedback-cancel": "Ныууадзын",
        "feedback-close": "Æххæст",
+       "feedback-message": "Фыстæг:",
+       "feedback-subject": "Сæр:",
        "searchsuggest-search": "Агурын",
        "api-error-missingparam": "Мидæггаг рæдыд: Курдиаты параметртæ нæй.",
        "api-error-missingresult": "Мидæггаг рæдыд: Нæ рауадис сбæрæг кæнын къопи кæнын куыд бантыстис.",
index c75a11d..1c96f7d 100644 (file)
@@ -20,7 +20,8 @@
                        "Xqt",
                        "Ævar Arnfjörð Bjarmason",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "ਲਿੰਕ ਹੇਠ-ਲਾਈਨ:",
        "mypreferencesprotected": "ਤੁਹਾਨੂੰ ਆਪਣੀਆਂ ਪਸੰਦਾਂ ਵਿੱਚ ਸੋਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
        "ns-specialprotected": "ਖ਼ਾਸ ਸਫ਼ਿਆਂ ’ਚ ਫੇਰ-ਬਦਲ ਨਹੀਂ ਹੋ ਸਕਦੇ।",
        "titleprotected": "ਇਹ ਸਿਰਲੇਖ [[User:$1|$1]] ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਦਿੱਤਾ ਹੋਇਆ ਕਾਰਨ ਹੈ, \"''$2''\"।",
-       "filereadonlyerror": "\"$1\" à¨«à¨¼à¨¾à¨\88ਲ à¨µà¨¿à©±à¨\9a à¨¤à¨¬à¨¦à©\80ਲà©\80 à¨¨à¨¹à©\80à¨\82 à¨¹à©\8b à¨¸à¨\95ਦà©\80 à¨\95ਿà¨\89à¨\82à¨\95ਿ à¨«à¨¼à¨¾à¨\88ਲ à¨­à©°à¨¡à¨¾à¨° \"$2\" à¨¸à¨¿à¨°à¨«à¨¼ à¨µà©\87à¨\96ਣਯà©\8bà¨\97 à¨°à©\82ਪ à¨µà¨¿à¨\9a à¨¹à©\88।\n\nà¨\89ਹ à¨ªà©\8dਰਬੰਧà¨\95, à¨\9cਿਹਨੇ ਇਹ ਰੋਕ ਲਾਈ ਹੈ, ਦਾ ਕਹਿਣਾ ਹੈ: ''$3''",
+       "filereadonlyerror": "\"$1\" à¨«à¨¼à¨¾à¨\88ਲ à¨µà¨¿à©±à¨\9a à¨¤à¨¬à¨¦à©\80ਲà©\80 à¨¨à¨¹à©\80à¨\82 à¨¹à©\8b à¨¸à¨\95ਦà©\80 à¨\95ਿà¨\89à¨\82à¨\95ਿ à¨«à¨¼à¨¾à¨\88ਲ à¨­à©°à¨¡à¨¾à¨° \"$2\" à¨¸à¨¿à¨°à¨«à¨¼ à¨µà©\87à¨\96ਣਯà©\8bà¨\97 à¨°à©\82ਪ à¨µà¨¿à¨\9a à¨¹à©\88।\n\nà¨\89ਹ à¨ªà©\8dਰਬੰਧà¨\95, à¨\9cਿਸਨੇ ਇਹ ਰੋਕ ਲਾਈ ਹੈ, ਦਾ ਕਹਿਣਾ ਹੈ: ''$3''",
        "invalidtitle-knownnamespace": "ਥਾਂ-ਨਾਮ \"$2\" ਅਤੇ ਲਿਖਤ \"$3\" ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ",
        "invalidtitle-unknownnamespace": "ਅਣਜਾਣ ਨਾਂ-ਸਥਾਨ ਗਿਣਤੀ $1 ਅਤੇ ਲਿਖਤ $2 ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ",
        "exception-nologin": "ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ",
        "deletereason-dropdown": "*ਮਿਟਾਉਣ ਦੇ ਆਮ ਕਾਰਨ\n**ਲੇਖਕ ਦੇ ਕਹਿਣ ’ਤੇ\n**ਕਾਪੀਰਾਈਟ ਦੀ ਉਲੰਘਣਾ\n**ਵੰਦਾਲਿਜ਼ਮ",
        "delete-edit-reasonlist": "ਮਿਟਾਉਣ ਦੇ ਕਾਰਨ ਸੋਧੋ",
        "rollback": "ਸੋਧਾਂ ਵਾਪਸ ਮੋੜੋ",
-       "rollback_short": "ਰੋਲਬੈਕ",
        "rollbacklink": "ਵਾਪਸ ਮੋੜੋ",
        "rollbacklinkcount": "$1 {{PLURAL:$1|ਸੋਧ|ਸੋਧਾਂ}} ਵਾਪਸ ਮੋੜੋ",
        "rollbacklinkcount-morethan": "$1 ਤੋਂ ਜ਼ਿਆਦਾ {{PLURAL:$1|ਸੋਧ|ਸੋਧਾਂ}} ਵਾਪਸ ਮੋੜੋ",
        "import-invalid-interwiki": "ਦੱਸੇ ਹੋਏ ਵਿਕੀ ਤੋਂ ਮੰਗਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।",
        "importlogpage": "ਮੰਗਾਉਣ ਦਾ ਚਿੱਠਾ",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|ਸੁਧਾਈ|ਸੁਧਾਈਆਂ}} ਦੀ ਦਰਾਮਦ ਹੋਈ",
-       "import-logentry-interwiki": "$1 ਦੀ ਵਿਕੀ-ਪਾਰ ਘੱਲਿਆ",
        "tooltip-pt-userpage": "ਤੁਹਾਡਾ ਵਰਤੋਂਕਾਰ ਸਫ਼ਾ",
        "tooltip-pt-mytalk": "ਤੁਹਾਡਾ ਗੱਲ-ਬਾਤ ਸਫ਼ਾ",
        "tooltip-pt-anontalk": "ਇਸ IP ਪਤੇ ਤੋਂ ਹੋਈਆਂ ਸੋਧਾਂ ਬਾਰੇ ਚਰਚਾ",
        "watchlisttools-view": "ਸਬੰਧਤ ਤਬਦੀਲੀਆਂ ਵੇਖੋ",
        "watchlisttools-edit": "ਨਿਗਰਾਨੀ-ਸੂਚੀ ਵੇਖੋ ’ਤੇ ਸੋਧੋ",
        "watchlisttools-raw": "ਕੱਚੀ ਨਿਗਰਾਨ-ਸੂਚੀ ਸੋਧੋ",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ਗੱਲ-ਬਾਤ]])",
        "duplicate-defaultsort": "ਪੁਰਾਣੀ ਮੂਲ ਕਰਮਾਂਕਨ ਕੁੰਜੀ $1 ਦੇ ਬਜਾਏ ਹੁਣ ਮੂਲ ਕਰਮਾਂਕਨ ਕੁੰਜੀ $2 ਹੋਵੇਗੀ।",
        "version": "ਵਰਜਨ",
        "version-skins": "ਥਾਪੀਆਂ ਖੱਲਾਂ",
        "logentry-newusers-create2": "ਵਰਤੋਂਕਾਰ ਖਾਤਾ $3, $1 ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ ਸੀ",
        "rightsnone": "(ਕੋਈ ਨਹੀਂ)",
        "revdelete-summary": "ਸੰਖੇਪ ਸੋਧ",
-       "feedback-subject": "ਵਿਸ਼ਾ:",
-       "feedback-message": "ਸੁਨੇਹਾ:",
-       "feedback-cancel": "ਰੱਦ ਕਰੋ",
-       "feedback-submit": "ਵਿਚਾਰ ਦਿਓ",
        "feedback-adding": "ਸਫ਼ੇ ਨਾਲ਼ ਵਿਚਾਰ ਜੁੜ ਰਹੇ ਹਨ...",
+       "feedback-bugnew": "ਮੈਂ ਚੈੱਕ ਕੀਤਾ। ਇੱਕ ਨਵੇਂ ਦੋਸ਼ ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
+       "feedback-cancel": "ਰੱਦ ਕਰੋ",
+       "feedback-close": "ਹੋ ਗਿਆ",
        "feedback-error2": "ਦੋਸ਼:ਸੋਧ ਫੇਲ੍ਹ ਹੋਈ",
        "feedback-error3": "ਦੋਸ਼:API ਵੱਲੋਂ ਕੋਈ ਜੁਆਬ ਨਹੀਂ",
-       "feedback-close": "ਹੋ ਗਿਆ",
-       "feedback-bugnew": "ਮੈਂ ਚੈੱਕ ਕੀਤਾ। ਇੱਕ ਨਵੇਂ ਦੋਸ਼ ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
+       "feedback-message": "ਸੁਨੇਹਾ:",
+       "feedback-subject": "ਵਿਸ਼ਾ:",
+       "feedback-submit": "ਹਵਾਲੇ ਕਰੋ",
        "searchsuggest-search": "ਖੋਜ",
        "api-error-badaccess-groups": "ਤੁਹਾਨੂੰ ਇਸ ਵਿਕੀ ਉੱਤੇ ਫ਼ਾਈਲਾਂ ਅੱਪਲੋਡ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
        "api-error-badtoken": "ਅੰਦਰੂਨੀ ਦੋਸ਼: ਗ਼ਲਤ ਟੋਕਨ",
        "mediastatistics-header-video": "ਵੀਡੀਓਆਂ",
        "mediastatistics-header-office": "ਦਫ਼ਤਰ",
        "mediastatistics-header-text": "ਲਿਖਤੀ",
-       "json-error-syntax": "ਵਾਕ-ਵਿਉਂਤ 'ਚ ਦੋਸ਼"
+       "json-error-syntax": "ਵਾਕ-ਵਿਉਂਤ 'ਚ ਦੋਸ਼",
+       "special-characters-group-latin": "ਲਾਤੀਨੀ",
+       "special-characters-group-latinextended": "ਲਾਤੀਨੀ ਤੋਂ ਛੁੱਟ",
+       "special-characters-group-ipa": "ਆਈ੦ਪੀ੦ਏ",
+       "special-characters-group-symbols": "ਨਿਸ਼ਾਨ",
+       "special-characters-group-greek": "ਯੂਨਾਨੀ",
+       "special-characters-group-cyrillic": "ਸਿਰੀਲਿਕ",
+       "special-characters-group-arabic": "ਅਰਬੀ",
+       "special-characters-group-arabicextended": "ਅਰਬੀ ਵਿਸਥਾਰੀ",
+       "special-characters-group-persian": "ਫ਼ਾਰਸੀ",
+       "special-characters-group-hebrew": "ਹਿਬਰੂ",
+       "special-characters-group-bangla": "ਬਾਂਗਲਾ",
+       "special-characters-group-tamil": "ਤਾਮਿਲ",
+       "special-characters-group-telugu": "ਤੇਲਗੂ",
+       "special-characters-group-sinhala": "ਸਿਨਹਾਲਾ",
+       "special-characters-group-gujarati": "ਗੁਜਰਾਤੀ",
+       "special-characters-group-devanagari": "ਦੇਵਨਾਗਰੀ",
+       "special-characters-group-thai": "ਥਾਈ",
+       "special-characters-group-lao": "ਲਾਓ",
+       "special-characters-group-khmer": "ਖ਼ਮੇਰ",
+       "special-characters-title-endash": "ਅੰਗਰੇਜ਼ੀ ਡੈਸ਼",
+       "special-characters-title-emdash": "em ਡੈਸ਼",
+       "special-characters-title-minus": "ਘਟਾਓ ਦਾ ਨਿਸ਼ਾਨ"
 }
index 3e98011..81c2ba3 100644 (file)
        "disclaimers": "Pamananggi",
        "disclaimerpage": "Project:Pangkabilugan a pamananggi",
        "edithelp": "Saup pamanalili",
+       "helppage-top-gethelp": "Saup",
        "mainpage": "Pun Bulung",
        "mainpage-description": "Pun Bulung",
        "policy-url": "Project:Tuntunan",
        "thumbnail_invalid_params": "E la matatanggap deng sukad a thumbnail (thumbnail parameters)",
        "thumbnail_dest_directory": "E makapaglalang piyakitan da reng puntalan (destination directory)",
        "import": "Maglub bulung",
-       "importinterwiki": "Pamaglub a transwiki (transwiki import)",
+       "importinterwiki": "Maglub (mag-import) ibat aliwang wiki",
        "import-interwiki-text": "Mamili kang wiki ampong bansag bulung a ilub.\nManatili la reng petsa ring pamagbayu ampo reng lagyu ring editor.\nMaka-login la reng eganaganang pamaglub a transwiki (transwiki import actions) ketang [[Special:Log/import|import log]].",
        "import-interwiki-history": "Kopian la reng eganaganang bersion ning amlat para king bulung a ini.",
        "import-interwiki-submit": "Maglub (import)",
        "version": "Bersion",
        "version-specialpages": "Bulung a makabukud",
        "version-other": "Aliwa",
-       "version-version": "(Bersion $1)",
+       "version-version": "($1)",
        "version-license": "Lisensia",
        "version-software-product": "Produktu",
        "version-software-version": "Bersion",
        "tags-delete-title": "Buran ya ing tag",
        "tags-delete-reason": "Sangkan:",
        "tags-activate-title": "Iyaktiba ing tag",
+       "tags-activate-reason": "Sangkan:",
        "tags-activate-not-found": "Ala yu ing tag \"$1\"",
        "tags-activate-submit": "Iyaktiba",
        "tags-deactivate-reason": "Sangkan:",
        "revdelete-restricted": "ipairal la reng limitasiun kareng sysop",
        "revdelete-unrestricted": "ilako la reng makabawal kareng sysops",
        "rightsnone": "(ala)",
-       "revdelete-summary": "sampulung da reng mibayu (edit summary)"
+       "revdelete-summary": "sampulung da reng mibayu (edit summary)",
+       "feedback-back": "Mibalik",
+       "feedback-error-title": "Mali",
+       "feedback-submit": "I-sumiti",
+       "feedback-thanks-title": "Salamat pu!",
+       "headline-anchor-title": "Ing suglung king seksyun a ini"
 }
index 5157220..0ca450f 100644 (file)
@@ -5,7 +5,8 @@
                        "Krinkle",
                        "Shirayuki",
                        "Xqt",
-                       "לערי ריינהארט"
+                       "לערי ריינהארט",
+                       "아라"
                ]
        },
        "tog-underline": "Gleecher unnerleine:",
        "version-specialpages": "Besunnere Bledder",
        "version-other": "Anneres",
        "version-mediahandlers": "Media-Haendlers",
-       "version-version": "(Version $1)",
+       "version-version": "($1)",
        "version-poweredby-others": "annere",
        "version-software-version": "Version",
        "fileduplicatesearch-filename": "Feilnaame:",
index baf36fa..007387b 100644 (file)
                        "아라"
                ]
        },
-       "tog-underline": "Lingg unnaschdraische",
-       "tog-hideminor": "Vaschdegg klääne Bearwaidunge",
-       "tog-hidepatrolled": "Vaschdegg gsischdede Ännarunge",
-       "tog-extendwatchlist": "Zaisch alle Ännarunge unn ned nur die ledschde",
-       "tog-showtoolbar": "Wergzaisch fas Schaffe zaische",
-       "tog-previewontop": "Vorbligg owwahalwb vum Beaawaidungsfenschda zaische",
-       "tog-previewonfirst": "Zaischen Vorbligg baim erschdemol Schaffe",
+       "tog-underline": "Ling'g unnaschdraische",
+       "tog-hideminor": "Vaschdeggl klääne Beawaidunge vunde „Ledschde Ännarunge“",
+       "tog-hidepatrolled": "Vaschdeggl gsischdede Ännarunge inde „Ledschde Ännarunge“",
+       "tog-extendwatchlist": "Zaisch alle Ännarunge unn nedd nua die ledschde",
+       "tog-showtoolbar": "Weagzaisch fas Schaffe zaische",
+       "tog-previewontop": "VoAbligg owwahalwb vum Beawaidungsfenschda zaische",
+       "tog-previewonfirst": "Zaischn VoAbligg baim erschdemol Schaffe",
        "tog-oldsig": "Voahonneni Unnaschrifd",
        "tog-uselivepreview": "Uuvazeschada Vorbligg (vasugswais)",
        "tog-showhiddencats": "Zaisch vaschdeglde Grubbe",
@@ -31,7 +31,7 @@
        "wednesday": "Middwoch",
        "thursday": "Dunnaschdaach",
        "friday": "Fraidaach",
-       "saturday": "Sõmschdaach",
+       "saturday": "Soamschdaach",
        "sun": "Su",
        "mon": "Mo",
        "tue": "Di",
@@ -41,7 +41,7 @@
        "sat": "So",
        "january": "Janua",
        "february": "Februa",
-       "march": "März",
+       "march": "Mäaz",
        "april": "Abril",
        "may_long": "Mai",
        "june": "Juni",
@@ -53,7 +53,7 @@
        "december": "Dezemba",
        "january-gen": "Janua",
        "february-gen": "Februa",
-       "march-gen": "März",
+       "march-gen": "Mäaz",
        "april-gen": "Abril",
        "may-gen": "Mai",
        "june-gen": "Juni",
@@ -65,7 +65,7 @@
        "december-gen": "Dezemba",
        "jan": "Jan",
        "feb": "Feb",
-       "mar": "Mär",
+       "mar": "Mäa",
        "apr": "Abr",
        "may": "Mai",
        "jun": "Jun",
@@ -81,6 +81,7 @@
        "april-date": "$1. Abril",
        "may-date": "$1. Mai",
        "june-date": "$1. Juni",
+       "july-date": "$1. Juli",
        "august-date": "$1. Auguschd",
        "september-date": "$1. Sebdemba",
        "october-date": "$1. Ogdowa",
        "subcategories": "Unnagrubbe",
        "category-media-header": "Medje indɐ Sachgrubb „$1“",
        "category-empty": "\"Die Sachgrubb hodd kä Said odda Medje.\"",
-       "hidden-categories": "{{PLURAL:$1|Vaschdegldi Sachgrubb|Vaschdeglde Sachgrubbe}}",
+       "hidden-categories": "{{PLURAL:$1|Vaschdeggldi Sachgrubb|Vaschdegglde Sachgrubbe}}",
        "hidden-category-category": "Verschdegelde Grubbe",
        "category-subcat-count": "{{PLURAL:$2|Die Sachgrubb hodd die Unnagrubb.|Die Sachgrubb hodd {{PLURAL:$1|Unnagrubb|$1 Unnagrubbe}}, vun gsomd $2.}}",
        "category-subcat-count-limited": "Die Sachgrubb hod die {{PLURAL:$1|Unagrubb|$1 Unagrubbe}}.",
        "category-article-count": "{{PLURAL:$2|Die Sachgrubb hodd bloß die Said.|Die {{PLURAL:$1|Said|$1 Saide}} gibbds inde Sachgrubb, vun gsomd $2.}}",
        "category-article-count-limited": "Die {{PLURAL:$1|Said|$1 Saide}} hodds inde Sachgrubb.",
-       "category-file-count": "{{PLURAL:$2|Die Sachgrubb hodd ä Said.|Die {{PLURAL:$1|Said isch änni vun $2 Saide:|S'werren $1 vun gsomd $2 Saide gzaischd:}}}}",
+       "category-file-count": "{{PLURAL:$2|Die Sachgrubb hoddä Said.|Die {{PLURAL:$1|Said isch änni vun $2 Saide:|S'werren $1 vun gsomd $2 Saide gzaischd:}}}}",
        "category-file-count-limited": "Die {{PLURAL:$1|Dadai|$1 Dadije}} hodds inde Sachgrubb.",
        "listingcontinuesabbrev": "(Waida)",
        "index-category": "Eafassdi Saide",
        "noindex-category": "Saide, wu ned im Vazaischnis sinn",
        "about": "Iwwa",
-       "newwindow": "(werd innem naije Fenschda uffgmachd)",
+       "newwindow": "(wead innem naije Fenschda uffgmachd)",
        "cancel": "Abbresche",
        "moredotdotdot": "Mea …",
        "mypage": "Said",
        "qbpageoptions": "Die Said",
        "qbmyoptions": "Moi Saide",
        "faq": "Ofd gschdeldi Froche",
-       "actions": "Maßnõhme",
-       "namespaces": "Nõmensreum",
+       "actions": "Maßnoahme",
+       "namespaces": "Noamensreum",
        "variants": "Tibbe",
+       "navigation-heading": "Nawigadzionsmeni",
        "errorpagetitle": "Irrdumm",
-       "returnto": "Zrick zu $1.",
+       "returnto": "Zrick uff $1.",
        "tagline": "Vun {{SITENAME}}",
-       "help": "Unaschdidzung",
+       "help": "Unnaschdidzung",
        "search": "Nochgugge",
        "searchbutton": "Gugg",
        "go": "Ausfiere",
        "searcharticle": "Ausfiare",
        "history": "Gschischd vunde Said",
        "history_short": "Gschischd",
-       "printableversion": "Drugg-Õsischd",
-       "permalink": "Schdendischa Lingg",
+       "printableversion": "Drugg-Oasischd",
+       "permalink": "Schdendischa Ling'g",
        "print": "Drugge",
-       "view": "Ogugge",
+       "view": "Oagugge",
+       "view-foreign": "Uff $1 oagugge",
        "edit": "Schaffe",
        "edit-local": "Gugg uff $1",
-       "create": "Õleesche",
+       "create": "Oaleesche",
+       "create-local": "Fiesch hiesischi B'schraiwung dzu",
        "editthispage": "Onde Said schaffe",
        "create-this-page": "Mach die Said",
        "delete": "Lesche",
        "newpage": "Naiji Said",
        "talkpage": "Iwwa die Said dischbediere",
        "talkpagelinktext": "Dischbediere",
-       "specialpage": "Schbezielli Said",
-       "personaltools": "Persenlischs Wergzaisch",
-       "articlepage": "Inhald õgugge",
+       "specialpage": "Schbezjelli Said",
+       "personaltools": "Persenlischs Weagzaisch",
+       "articlepage": "Inhald oagugge",
        "talk": "Dischbediere",
        "views": "Uffruf",
-       "toolbox": "Wergzaisch",
-       "userpage": "Middawaidasaid õgugge",
-       "projectpage": "Brojegdsaid õgugge",
-       "imagepage": "Dadaisaid õgugge",
-       "mediawikipage": "Nochrischd õgugge",
-       "templatepage": "Voalach õgugge",
-       "viewhelppage": "Hilf õgugge",
+       "toolbox": "Weagzaisch",
+       "userpage": "Middawaidasaid oagugge",
+       "projectpage": "Brojegdsaid oagugge",
+       "imagepage": "Dadaisaid oagugge",
+       "mediawikipage": "Nochrischd oagugge",
+       "templatepage": "Voalach oagugge",
+       "viewhelppage": "Hilf oagugge",
        "categorypage": "Zaisch die Kadegorie",
        "viewtalkpage": "Zaischs Gbabbl",
-       "otherlanguages": "In õnnare Schbroche",
+       "otherlanguages": "In oannare Schbroche",
        "redirectedfrom": "(Nochgschiggd worre vun $1)",
        "redirectpagesub": "Nochschigg-Said",
-       "lastmodifiedat": "Die Said ischs ledschde Mol gännad worre õm $1, õm $2.",
+       "redirectto": "Umlaidung uff:",
+       "lastmodifiedat": "Die Said ischs ledschde Mol g'ännad worre uff $1, om $2.",
        "viewcount": "Die Said isch bis jedz {{PLURAL:$1|ämol1|$1 mol}} uffgrufe worre.",
        "protectedpage": "Said schidze",
        "jumpto": "Hubs uff:",
        "aboutsite": "Iwwa {{SITENAME}}",
        "aboutpage": "Project:Iwwa",
        "copyright": "Was do drin schded isch unna $1 vafieschba, wonn nedd onnaschda vameagd.",
-       "copyrightpage": "{{ns:project}}:Urhewareschd",
+       "copyrightpage": "{{ns:project}}:Uahewareschd",
        "currentevents": "Aggduelli Gscheniss",
        "currentevents-url": "Project: Leschdi Gschneniss",
        "disclaimers": "Hafdungsausschluß",
        "disclaimerpage": "Project:Impressum",
-       "edithelp": "Unaschdizung fas Schaffe",
+       "edithelp": "Unnaschdizung fas Schaffe",
+       "helppage-top-gethelp": "Hilf",
        "mainpage": "Schdadsaid",
        "mainpage-description": "Schdadsaid",
        "policy-url": "Project:Grundsedz",
-       "portal": "{{SITENAME}}-Bordal",
-       "portal-url": "Project:Gmoinschafdsbordal",
+       "portal": "{{SITENAME}}-Boadal",
+       "portal-url": "Project:Gmoinschafdsboadal",
        "privacy": "Daadeschuds",
        "privacypage": "Project:Daadeschuds",
        "badaccess": "Ned genuch Reschd",
        "youhavenewmessages": "Du hoschd $1 ($2).",
        "newmessagesdifflinkplural": "ledschdi {{PLURAL:$1|Ännarung|999=Ännarunge}}",
        "youhavenewmessagesmulti": "Do hoschd ä Nochrischd grischd: $1",
-       "editsection": "schaffe",
-       "editold": "schaffe",
-       "viewsourceold": "Gwelltegschd õgugge",
+       "editsection": "Schaffe",
+       "editold": "Schaffe",
+       "viewsourceold": "Gwelltegschd oagugge",
        "editlink": "schaffe",
-       "viewsourcelink": "Gwell õgugge",
+       "viewsourcelink": "Gwell oagugge",
        "editsectionhint": "Deel ännare: $1",
        "toc": "Inhald",
        "showtoc": "zaische",
        "hidetoc": "vaschdeggle",
        "collapsible-collapse": "Oiglabbe",
        "collapsible-expand": "Uffglabbe",
-       "thisisdeleted": "$1 õgugge odda widdaheaschdelle?",
+       "confirmable-yes": "Ja",
+       "confirmable-no": "Nä",
+       "thisisdeleted": "$1 oagugge odda widdaheaschdelle?",
        "viewdeleted": "$1 zaische?",
        "restorelink": "{{PLURAL:$1|ä gleschdi Ännarung|$1 gleschde Ännarunge}}",
        "site-rss-feed": "$1 RSS-Feed",
        "nstab-main": "Said",
        "nstab-user": "Middawaidasaid",
        "nstab-media": "Medije",
-       "nstab-special": "Schbezialsaid",
+       "nstab-special": "Sondasaid",
        "nstab-project": "Bordal",
        "nstab-image": "Dadai",
        "nstab-mediawiki": "Middeelung",
-       "nstab-template": "Vorlach",
+       "nstab-template": "Vorlaach",
        "nstab-help": "Unaschdidzung",
        "nstab-category": "Sachgrubb",
        "nosuchaction": "Des hodds nedd",
        "nosuchspecialpage": "Schbezialsaid hodds nedd",
        "error": "Irrdumm",
        "databaseerror": "Daadebongg-Irrdumm",
+       "databaseerror-query": "Abfroche: $1",
        "databaseerror-error": "Fehla: $1",
        "laggedslavemode": "<strong>Baßma uff:</strong> Die Said hodd viellaischd die ledschde Ännarunge nedd.",
        "readonly": "Daadebongg blogiead",
        "formerror": "Irrdumm: hoddma nedd mache kenne.",
        "badarticleerror": "Des geed nedd uffde Said.",
        "cannotdelete-title": "\"$1\" komma nedd lesche",
-       "badtitle": "Schleschde Didl",
-       "badtitletext": "De Tidl vunde õgfordad Said isch nedd gildisch, lea, oddan nedd gildische Lingg vunem õnnare Wiki.\nS konn soi, dasses ä odda mea Zaische drin hodd, wu im Tidl vunde Said nedd gbrauchd werre dirfn.",
-       "viewsource": "Gwelltegschd õgugge",
-       "viewsource-title": "D'Tegschd vun $1 õgugge",
-       "viewsourcetext": "Konschdas õgugge un abschraiwe",
-       "viewyourtext": "Konschda doi Eawed uff de Said õgugge un abschraiwe:",
-       "ns-specialprotected": "Do komma nedd drõ schaffe",
-       "exception-nologin": "Bischd nedd õgmeld",
+       "badtitle": "Schleschda Didl",
+       "badtitletext": "De Tidl vunde oagfoadad Said isch nedd gildisch, lea, oddan nedd gildische Ling'g vunnem oannare Wiki.\nS'konn soi, dasses ä odda mea Zaische drin hodd, wu im Tidl vunde Said nedd gbrauchd werre diafn.",
+       "viewsource": "Gwelltegschd oagugge",
+       "viewsource-title": "D'Tegschd vun $1 oagugge",
+       "viewsourcetext": "Konschdas oagugge un abschraiwe",
+       "viewyourtext": "Konschda <strong>doi Eawed</strong> uffde Said oagugge un abschraiwe:",
+       "ns-specialprotected": "Do komma nedd droa schaffe",
+       "exception-nologin": "Bischd nedd oagmeld",
        "virus-unknownscanner": "Uubekonnda Viresucha:",
        "welcomeuser": "Willkumme, $1!",
-       "yourname": "Middawaidanõme:",
+       "yourname": "Middawaidanoame:",
        "userlogin-yourname": "Middawaida",
        "userlogin-yourname-ph": "Gebb doin Nome oi",
        "createacct-another-username-ph": "Middawaida",
        "createacct-yourpasswordagain": "Password bschdedische",
        "createacct-yourpasswordagain-ph": "Bschdedisch doi Password",
        "remembermypassword": "Moi Kennword uffm Brausa merge (hegschdns fa $1 {{PLURAL:$1|Daach|Daach}})",
-       "login": "Õmelde",
-       "nav-login-createaccount": "Õmelde / Kondo õleesche",
-       "userlogin": "Õmelde / Kondo õleesche",
+       "userlogin-remembermypassword": "Oagmeld blaiwe",
+       "login": "Oamelde",
+       "nav-login-createaccount": "Oamelde / Kondo oaleesche",
+       "userlogin": "Oamelde / Kondo oaleesche",
        "userloginnocreate": "Oilogge",
        "logout": "Uffhere",
        "userlogout": "Uffhere",
+       "notloggedin": "Bischd nedd oagmeld",
        "userlogin-noaccount": "Hoschd kä Kondo?",
+       "userlogin-joinproject": "Bai {{SITENAME}} oamelde",
        "nologin": "Hoschd noch kä Kondo? $1",
-       "nologinlink": "E Kondo õleesche",
-       "createaccount": "Kondo õleesche",
+       "nologinlink": "Ä Kondo oaleesche",
+       "createaccount": "Kondo oaleesche",
        "gotaccount": "Hoschd schun ä Kondo? $1",
-       "gotaccountlink": "Õmelde",
+       "gotaccountlink": "Oamelde",
        "userlogin-resetlink": "Hoschd doi Daade vagesse?",
+       "userlogin-resetpassword-link": "Hoschd doi Kennwoad vagesse?",
+       "userlogin-helplink2": "Hilf baim Oamelde",
+       "userlogin-createanother": "Leschda nochä Kondo oa",
+       "createacct-emailrequired": "E-Mail-Address",
+       "createacct-emailoptional": "E-Mail-Adress (fraiwillisch)",
+       "createacct-email-ph": "Gebb doi E-Mail-Adress oi",
+       "createacct-another-email-ph": "Gebb doi E-Mail-Adress oi",
+       "createacct-realname": "Wie heschd (mugschds awwa nedd)",
        "createaccountreason": "Grund:",
+       "createacct-reason": "Bgrindung",
+       "createacct-captcha": "Sischahaidsbriefung",
+       "createacct-imgcaptcha-ph": "Gebbde Tegschd oi, wu owwe seje duschd",
+       "createacct-submit": "Leschda ä Kondo oa",
+       "createacct-another-submit": "Leschda ä onnares Kondo oa",
+       "createacct-benefit-heading": "{{SITENAME}} wead vun Laid wie dia gmachd.",
+       "createacct-benefit-body1": "{{PLURAL:$1|B'waidung|B'waidunge}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|Said|Saide}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|Ledscha|Ledsche}} Middawaida",
        "badretype": "Kennword bassd nedd",
        "userexists": "De Middawaida hodds schun.\nNemmen onnare.",
-       "loginerror": "Irrdumm baim Õmelde",
+       "loginerror": "Irrdumm baim Oamelde",
        "createaccounterror": "Kondo $1 komma nedd mache",
        "loginsuccesstitle": "Konschd schaffe",
        "login-userblocked": "De Middawaida deaf do nemme schaffe.",
        "wrongpasswordempty": "Hoschds Kennword vagesse. Mags nomol.",
        "passwordtooshort": "Kennword muss {{PLURAL:$1|1 Zaische|$1 Zaische}} hawe.",
        "password-name-match": "Doi Kennword deaf nedd so heese wie du.",
-       "password-login-forbidden": "De Nõme uns Kennword sinn fabode.",
+       "password-login-forbidden": "De Noame uns Kennword sinn fabode.",
        "mailmypassword": "Kennword zriggsedze",
-       "accountcreated": "Kondo õgleeschd",
+       "accountcreated": "Kondo oagleeschd",
        "login-abort-generic": "Hodd nedd gklabbd - Abgbroche",
        "loginlanguagelabel": "Schbrooch: $1",
+       "pt-login": "Oilogge",
+       "pt-login-button": "Oilogge",
+       "pt-createaccount": "Kondo oaleesche",
+       "pt-userlogout": "Uffhere",
+       "changepassword": "Passwoad weggsle",
+       "resetpass_header": "Passwoad weggsle",
        "oldpassword": "Alds Kennword",
        "newpassword": "Naijes Kennword",
        "retypenew": "Naijes Kennword nomol oigewe:",
+       "changepassword-success": "Doi Passwoad isch gweggsld worre!",
        "resetpass_forbidden": "Kennwerda komma nedd wegsle",
        "resetpass-submit-loggedin": "Password wegsle",
        "resetpass-submit-cancel": "Uffhere",
        "resetpass-temp-password": "Bschrengds Kennword",
+       "resetpass-abort-generic": "S'Passwoad weggsle isch vunna Eawaidarung unnabroche worre.",
+       "resetpass-expired": "Doi Passwoad isch abgloffe. Gebbä naijes Passwoad oi.",
        "passwordreset": "Kennword zriggsedze",
        "passwordreset-legend": "Kennword zriggsedze",
        "passwordreset-username": "Middawaida:",
        "passwordreset-capture": "E-Mail õgugge?",
+       "changeemail": "E-Mail-Adress ännare",
        "changeemail-none": "(käni)",
+       "changeemail-submit": "E-Mail-Adress ännare",
+       "resettokens-token-label": "$1 (jedzischa Wead: $2)",
        "bold_sample": "Feddi Schrifd",
        "bold_tip": "Feddi Schrifd",
        "italic_sample": "Schebbi Schrifd",
        "italic_tip": "Schebbi Schrifd",
        "link_sample": "Schdischwoad",
-       "link_tip": "Inderna Lingg",
-       "extlink_sample": "http://www.example.com Linggtegschd",
-       "extlink_tip": "Exderna Lingg (uff http:// uffbasse)",
+       "link_tip": "Inderna Ling'g",
+       "extlink_sample": "http://www.example.com Ling'gtegschd",
+       "extlink_tip": "Exderna Ling'g (uff http:// uffbasse)",
        "headline_sample": "Schlaachzail",
        "headline_tip": "Iwwaschrifd Ewene 2",
-       "nowiki_sample": "Gebb do'n Tegschd oi, wu nedd uffberaid werd",
-       "nowiki_tip": "Wiki-Formatierunge ned beachde",
+       "nowiki_sample": "Gebb do'n Tegschd oi, wu nedd uffb'raid wead",
+       "nowiki_tip": "Wiki-Formatierunge nedd beachde",
        "image_tip": "Bildvawais",
-       "media_tip": "Dadailingg",
-       "sig_tip": "Doi Unnaschrifd midena Zaidõgawb",
-       "hr_tip": "Waagreschdi Linje (schbaasõm vawende)",
+       "media_tip": "Dadailing'g",
+       "sig_tip": "Doi Unnaschrifd midd ena Zaidoagawb",
+       "hr_tip": "Waagreschdi Linje (schbaasoam vawende)",
        "summary": "Iwwabligg:",
        "subject": "Bedreff:",
-       "minoredit": "Des ische glänni Beawaidung",
+       "minoredit": "Des ischä glänni Beawaidung",
        "watchthis": "Die Said im Aach palde",
-       "savearticle": "Said schbaischere",
+       "savearticle": "Said schbaischare",
        "preview": "Voaschau",
        "showpreview": "Voaschau zaische",
        "showdiff": "Ännarunge zaische",
-       "anoneditwarning": "'''Baßma uff:''' Du bischd ned õgemeld. Doi IP-Adress werd inde Gschischd vum Adiggl gschbaischad.",
+       "anoneditwarning": "'''Baßma uff:''' Du bischd ned oagemeld. Doi IP-Adress wead inde Gschischd vum Adiggl gschbaischad, wonn schaffe duschd. Wonn<strong>[$1 oilogschd]</strong> oddan <strong>[$2 Account magschd]</strong>, werren doi Eawede unna doim Benudzanoame gzaischd, newe onnare Voadel.",
+       "anonpreviewwarning": "''Du bischd nedd oagmeld. Baim Schbaischare wead doi IP-Adress inde Gschischd vameagd.''",
        "summary-preview": "Iwwabligg:",
        "blockedtitle": "Middawaida isch gschbead",
        "blockednoreason": "s'hod kän Grund",
        "whitelistedittext": "Mugschd disch $1 fas schaffe",
        "loginreqtitle": "Mugschd disch õmelde",
-       "loginreqlink": "Õmelde",
+       "loginreqlink": "Oamelde",
        "loginreqpagetext": "Mugschd disch $1 fas õgugge.",
        "accmailtitle": "Kennword gschiggd",
        "newarticle": "(Naij)",
-       "newarticletext": "Du bischdm Lingg nochgõnge zu enna Said, wus ganedd hodd.\nFa die Said õzleesche, konnschd do im Käschdl unne õfonge mid schraiwe (gugg [$1 Hilf] fa mea Auskinfd).\nWonn do nedd hoschd heakumme wolle, drigg uff Browser uff '''Zrigg'''.",
-       "noarticletext": "Uffde Said hods noch kän Tegschd. Du konnschd uff õnnare Saide nochm [[Special:Search/{{PAGENAME}}|Oidrach gugge]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Logbuchaidrach gugge, wu dezu kead],\nodda [{{fullurl:{{FULLPAGENAME}}|action=edit}} die Said beawaide]</span>.",
-       "noarticletext-nopermission": "Do hods känn Tegschd.\nDu konschd uff onnare Saide [[Special:Search/{{PAGENAME}}|faden Tidl gugge]], odda <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} in alle Logs gugge]</span>, awwa du hoschd kä Ealauwnis die Said zu mache.",
+       "newarticletext": "Du bischdm Ling'g nochgoange zu enna Said, wus ganedd hodd.\nFa die Said oazleesche, konnschd do im Käschdl unne oafonge midd schraiwe (gugg [$1 Hilf] fa mea Auskinfd).\nWonn do nedd hoschd heakumme wolle, drigg uffm Browser uff '''Zrigg'''.",
+       "noarticletext": "Uffde Said hodds noch kän Tegschd. Konnschd uff oannare Saide nochm [[Special:Search/{{PAGENAME}}|Oidrach gugge]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Logbuchoidrach gugge, wu dzu kead],\nodda [{{fullurl:{{FULLPAGENAME}}|action=edit}} die Said b'awaide]</span>.",
+       "noarticletext-nopermission": "Do hodds känn Tegschd.\nDu konschd uff oannare Saide [[Special:Search/{{PAGENAME}}|faden Tidl gugge]], odda <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} in alle Logs gugge]</span>, awwa hoschd kä Ealauwbnis die Said zu mache.",
        "updated": "(Gännad)",
        "note": "'''Hiwes:'''",
        "previewnote": "'''Deng'g drõõ, dasses nua e Vorschau isch.'''\nDoi Ännarunge sinn noch nedd gschbaischadd worre!",
-       "editing": "Õm $1 schaffe",
-       "creating": "Magsch $1",
+       "editing": "Oam $1 schaffe",
+       "creating": "Magschd $1",
        "editingsection": "$1 schaffe (Deel)",
        "editingcomment": "$1 schaffe (Deel)",
        "editconflict": "Schdraid ums Ännare: $1",
        "storedversion": "Gschbaischerdi Version",
        "yourdiff": "Unaschied",
        "copyrightwarning": "Baß uff, dass alli Baidräch fa {{SITENAME}} unna $2 vaeffendlischd werren (gugg $1 fa mea Enzlhaide).\nWonnsda ned basse dud, dass des wu gschriwwe hoschd, gännad un kopiead werre konn, donn duus do ned noischraiwe.<br />\nDu gibbschd do a zu, dasses selwaschd gschriwwe hoschd odda vuna effendlischi, fraiji Gwell ('''public domain''') odda vuna ähnlichi fraiji Gwell hawe duschd.\n'''Du do nix noi schraiwe, wa unnam Uahewareschd gschizd isch!'''",
-       "templatesused": "{{PLURAL:$1|Vorlach wu uffde Said gbrauchd werd|Vorlache wu uffde Saide gbrauchd werren}}:",
+       "templatesused": "{{PLURAL:$1|Vorlach wu uffde Said gbrauchd wead|Vorlache wu uffde Saide gbrauchd werren}}:",
        "templatesusedpreview": "{{PLURAL:$1|Vorlach wu inde Vorschau gbrauchd werd|Vorlache wu inde Vorschau gbrauchd werren}}:",
        "template-protected": "(gschizd)",
        "template-semiprotected": "(halwa-gschizd)",
-       "hiddencategories": "Die Said kerd zu vaschdeggelde {{PLURAL:$1|1 Sachgrubb|$1 Sachgrubbe}}:",
+       "hiddencategories": "Die Said kead zude vaschdeggelde {{PLURAL:$1|1 Sachgrubb|$1 Sachgrubbe}}:",
+       "permissionserrors": "Uugnieschnd Reschde",
        "permissionserrorstext-withaction": "Du därfschd nedd $2, weesch{{PLURAL:$1|m Grund|ede Grind}}:",
        "recreate-moveddeleted-warn": "'''Baßma uff: Du maggschd do ä Said, wuma frija schumol geleschd kabd hod.'''",
-       "moveddeleted-notice": "Die Said isch gleschd worre.\nDe Leschoidrach fa die Said isch do unne als Gwell õgewwe.",
+       "moveddeleted-notice": "Die Said isch g'leschd worre. De Leschoidraach fa die Said isch do unne als Gwell oagewwe.",
        "log-fulllog": "Alli Oidräsch vunde Logbischa õgugge",
        "edit-conflict": "Schdraid ums Ännare.",
        "content-model-text": "Glaategschd",
+       "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "post-expand-template-inclusion-warning": "'''Baßma uff:''' Greeß vunde Vorlach isch iwwaschridde. Oinischi Vorlache werren ned bnuzd.",
        "post-expand-template-inclusion-category": "Saide mid Vorlache, wu die Greeß iwwaschridde worre isch",
        "post-expand-template-argument-warning": "'''Baßma uff:''' Die Said hodd wenigschdns ä Vorlach midä Kenngreeß, wu groß werre dud. Die Kenngreeß wead do nedd õgeguggd.",
        "post-expand-template-argument-category": "Saide, wu wegfallene Vorlachewead hawen.",
-       "viewpagelogs": "Lochbischa fa die Said õgugge",
+       "undo-nochange": "Die Ännarung isch schunmol rigg'gängisch g'machd worre.",
+       "cantcreateaccounttitle": "Konn kä Kondo mache",
+       "viewpagelogs": "Lochbischa fa die Said oagugge",
+       "nohistory": "Vunde Said hodds kä Gschischd.",
        "currentrev": "Ledschdi Änarung",
-       "currentrev-asof": "Agduell Ausgab vun $1",
-       "revisionasof": "Iwwaawaidung vun $1",
+       "currentrev-asof": "Agduell Ausgawb vun $1",
+       "revisionasof": "Iwwa'awaidung vun $1",
        "revision-info": "Ännarung vun $1 duasch $2",
-       "previousrevision": "← Älderi Beawaidung",
+       "previousrevision": "← Äldere Beawaidung",
        "nextrevision": "Naijari Ausgawb →",
        "currentrevisionlink": "Agduelli Ausgawb",
        "cur": "jedzischi",
        "histlast": "naijschde",
        "historyempty": "(lea)",
        "history-feed-title": "Ännarungsgschischd",
+       "history-feed-description": "Gschischd vunde Said uff {{SITENAME}}",
        "history-feed-item-nocomment": "$1 õm $2",
-       "rev-delundel": "zaisch/vaschdeggl",
+       "rev-deleted-comment": "(Zsommefassung gleschd)",
+       "rev-deleted-user": "(Middawaidnoame gleschd)",
+       "rev-deleted-event": "(Logbuchänzlhaid gleschd)",
+       "rev-deleted-user-contribs": "[Middawaid- odda IP-Adress gleschd – Bawaidung aus Baidräch vaschdeggd]",
+       "rev-delundel": "änna Sischdbakaid",
        "rev-showdeleted": "zaische",
        "revisiondelete": "Lesche/Heaschdelle vun Ännarunge",
        "revdelete-show-file-submit": "Ja",
+       "revdelete-text-text": "Gleschdi Ännarunge blaiwen inde Gschischd, awwa Deel dvu sinn fa die Effendlischkaid vaschdeggld.",
+       "revdelete-text-file": "Gleschde Ännarunge blaiwen inde Gschischd, awwa Deel dvu sinn fa die Effendlischkaid vaschdeggld.",
        "revdelete-hide-image": "Vaschdegglde Inhald",
-       "revdelete-hide-name": "Vaschdeggls",
+       "revdelete-hide-name": "Vaschdeggls Ziel unn Kenngreeß",
        "revdelete-hide-comment": "Ännas Resimee",
        "revdelete-hide-user": "Middawaidanome/IP-Address",
+       "revdelete-hide-restricted": "Daade voa Adminischdradore unn a Middawaid unnadrigge",
        "revdelete-radio-same": "(dudo nix ännare)",
        "revdelete-radio-set": "Vaschdegld",
        "revdelete-radio-unset": "Sischdba",
        "revdel-restore": "Sischdbakaid ännare",
        "pagehist": "Gschischd vunde Said",
        "deletedhist": "Gleschde Gschischde",
-       "revdelete-reasonotherlist": "Õnnare Grund",
-       "mergehistory": "Gschischde zõmmefiere",
+       "revdelete-reasonotherlist": "Oannare Grund",
+       "mergehistory": "Gschischde zoammefiere",
+       "mergehistory-header": "Midde Said konschd Gschischde vunna Said innä onnari Said bringe. Bass uff, dass die Gschischd vunde Said rischdisch isch.",
+       "mergehistory-box": "Gschischde vun ywee Saide zsommefiare:",
+       "mergehistory-list": "Gschischde, wuma zsommebringe konn",
        "mergehistory-go": "Zaisch, wasma vaoinische konn",
        "mergehistory-submit": "Gschischde zõmmefiere",
+       "mergehistory-fail": "Gschischde zsommebringen hodd nedd gklabd, gugg nomol uffde Saide unn uffde Zaidoagawe.",
+       "mergehistory-fail-toobig": "S'Zsommefiare vunde Saide konn nedd klabbe, sunschd deedn mea als {{PLURAL:$1|eine Version|$1 Gschischde}} vaschowe werre.",
+       "mergehistory-autocomment": "„[[:$1]]“ midd „[[:$2]]“ vabinne",
+       "mergehistory-comment": "„[[:$1]]“ midd „[[:$2]]“ vabinne: $3",
        "mergehistory-reason": "Grund:",
        "revertmerge": "Zõmmefiehrung rigggängisch mache",
+       "mergelogpagetext": "Unne hoddsä Lischd midde ledschde Zsommefiarunge vun Gschischde.",
        "history-title": "Ännarungsgschischd vun \"$1\"",
+       "difference-title": "Unnaschied vunde Gschischde vun \"$1\"",
        "lineno": "Zail $1:",
        "compareselectedversions": "Ausgawe midnonna vaglaische",
        "showhideselectedversions": "Zaisch/Vaschdeggl gwehldi Ausgawe",
        "editundo": "zriggnemme",
+       "diff-empty": "(kän Unnaschied)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Ä dzwischelischndi Ännarung vum selwe Middawaid wead|$1 dzwischelischnde Ännarunge vum selwe Middawaid werren}} nedd gzaischd)",
        "searchresults": "Eagewnis nochgugge",
        "searchresults-title": "Eagewnis gugge fa \"$1\"",
        "notextmatches": "Kä Iwwaoinschdimmunge midm Tegschd",
-       "prevn": "ledschda {{PLURAL:$1|$1}}",
-       "nextn": "negschd {{PLURAL:$1|$1}}",
+       "prevn": "{{PLURAL:ledschd $1|ledschde $1}}",
+       "nextn": "{{PLURAL:negschd $1|negschde $1}}",
        "prevn-title": "Frijari $1 {{PLURAL:$1|Eagewniss|Eagewnisse}}",
        "nextn-title": "Negschdi $1 {{PLURAL:$1|Eagewniss|Eagewnisse}}",
        "shown-title": "Zaisch $1 {{PLURAL:$1|Eagewnis}} bro Said",
        "searchprofile-advanced": "Foadgschridde",
        "searchprofile-articles-tooltip": "In $1 gugge",
        "searchprofile-images-tooltip": "Gugg noch Bilda",
-       "searchprofile-everything-tooltip": "Such iwwaraal (a wuma dischbedierd)",
-       "searchprofile-advanced-tooltip": "Gugg in õnnare Nõmensreum",
-       "search-result-size": "$1 ({{PLURAL:$2|1 Word|$2 Wärda}})",
+       "searchprofile-everything-tooltip": "Such iwwaraal (a wuma dischbediead)",
+       "searchprofile-advanced-tooltip": "Gugg in oannare Noamensreum",
+       "search-result-size": "$1 ({{PLURAL:$2|1 Woad|$2 Wäada}})",
        "search-result-category-size": "{{PLURAL:$1|1 Said|$1 Saide}} ({{PLURAL:$2|1 Sachgrubb|$2 Sachgrubbe}}, {{PLURAL:$3|1 Dadai|$3 Dadaije}})",
        "search-redirect": "(Waidalaidung $1)",
        "search-section": "(Abschnidd $1)",
        "search-relatedarticle": "Vawond",
        "searchrelated": "vawond",
        "searchall": "alle",
-       "search-nonefound": "Kä Eagewnis vunde Õfroch.",
+       "search-showingresults": "{{PLURAL:$4|Resuldad <strong>$1</strong> vun <strong>$3</strong>|Resuldad <strong>$1 - $2</strong> vun <strong>$3</strong>}}",
+       "search-nonefound": "Kä Eagewnis vunde Oafroch.",
        "powersearch-legend": "Erwaiterte Such",
        "powersearch-ns": "In de Namensraim suche:",
        "powersearch-togglelabel": "Wehl:",
        "powersearch-togglenone": "Kään",
        "preferences": "Obzione",
        "mypreferences": "Oischdellunge",
+       "prefs-edits": "Oazahl vunde B'awaidunge:",
+       "prefsnologintext2": "Logdisch oi unn änna doi Oischdellunge",
+       "prefs-skin": "Ausseje",
+       "skin-preview": "Voaschau",
        "datedefault": "Kä Oischdellunge",
+       "prefs-user-pages": "Middawaidasaides",
+       "prefs-rc": "Ledschdi Ännarunge",
        "prefs-watchlist": "Beowachdungslischd",
-       "prefs-watchlist-edits-max": "Hegschdi Õzahl: 1000",
+       "prefs-watchlist-edits-max": "Hegschdi Oazahl: 1000",
        "prefs-misc": "Schunschdisches",
+       "prefs-resetpass": "Passwoad weggsle",
+       "prefs-changeemail": "E-Mail-Adress ännare",
+       "prefs-email": "E-Mail-Oischdellunge",
        "prefs-rendering": "Uffdridd",
        "saveprefs": "Oischdellunge schbaischere",
        "prefs-editing": "Schaffe",
        "columns": "Schbalde",
        "searchresultshead": "Nochgugge",
        "stub-threshold-disabled": "Abgschdeld",
+       "recentchangesdays": "Oazahl vunde Daach inde ledschde Ännarunge:",
+       "recentchangesdays-max": "Hegschdgrens $1 {{PLURAL:$1|Daach|Daache}}",
        "guesstimezone": "Aus em Browser iwwernemme",
        "timezoneregion-africa": "Afrika",
-       "timezoneregion-america": "Õmerika",
-       "timezoneregion-antarctica": "Õngdagdika",
+       "timezoneregion-america": "Oamerika",
+       "timezoneregion-antarctica": "Oangdaagdika",
        "timezoneregion-arctic": "Aadigk",
        "timezoneregion-asia": "Asije",
-       "timezoneregion-atlantic": "Adlõndischa Ozeõn",
+       "timezoneregion-atlantic": "Adloendischa Ozean",
        "timezoneregion-australia": "Auschdralije",
        "timezoneregion-europe": "Oirobba",
-       "timezoneregion-indian": "Indischa Ozeõn",
-       "timezoneregion-pacific": "Pazifischa Ozeõn",
+       "timezoneregion-indian": "Indischa Ozean",
+       "timezoneregion-pacific": "Pazifischa Ozean",
        "prefs-searchoptions": "Nochgugge",
        "default": "Schdondad",
+       "prefs-files": "Dadaije",
        "youremail": "E-Mail:",
        "username": "{{GENDER:$1|Middawaida}}:",
        "prefs-memberingroups": "{{GENDER:$2|Middglied}} vun {{PLURAL:$1|Grubb|Grubbe}}:",
-       "yourrealname": "Birschalischa Nõme:",
+       "yourrealname": "Birschalischa Noame:",
        "yourlanguage": "Schbrooch:",
        "yournick": "Naiji Unnaschfrid",
        "yourgender": "Wasfa'ä Gschleschd bischdn?",
        "gender-unknown": "Do saach isch nix",
        "gender-male": "Isch binnen Monn",
        "gender-female": "Isch binä Fraa",
+       "email": "E-Mail",
        "prefs-help-email": "E-mail muss ned soi, awwa wead fas naijsedze vum Kennwoad bneedischd, wonns vagesse hoschd.",
        "prefs-help-email-others": "Konschd a wehle, ob õnnare disch iwwan Lingg uff doina Dischbedier-Said õschbresche kennen.\nDoi Address werd ned gzaischd, wõnse midda babbln.",
+       "prefs-advancedrc": "Waidari Meschlischkaide",
+       "prefs-advancedrendering": "Waidari Meschlischkaide",
+       "prefs-advancedsearchoptions": "Waidari Meschlischkaide",
+       "prefs-advancedwatchlist": "Waidari Meschlischkaide",
        "prefs-diffs": "Unaschied",
        "userrights-groupsmember": "Midglied vun:",
        "userrights-reason": "Grund:",
        "group-bureaucrat-member": "{{GENDER:$1|Birokrad}}",
        "grouppage-sysop": "{{ns:project}}:Adminischtratore",
        "right-read": "Saide leese",
-       "right-edit": "Õnde Saide schaffe",
+       "right-edit": "Oande Saide schaffe",
        "right-createpage": "Saide mache",
        "right-createtalk": "Dischbediersaide mache",
        "right-move": "Said bwesche",
        "right-move-subpages": "Said midde Unasaide bwesche",
        "right-movefile": "Saide vaschiewe",
+       "right-suppressredirect": "Kä Umleidunge mache womma Saide vaschiewe dud",
        "right-upload": "Dadaije nufflade",
+       "right-reupload": "Iwwaschraiwb ä Said, wus gibd",
        "right-upload_by_url": "Dadaije vunna Address nufflaade",
+       "right-writeapi": "Vawendung vum API fas Schraiwe",
        "right-delete": "Saide lesche",
+       "right-deletedhistory": "Glesche Ännarunge inde Gschischd ohne Tegschd oagugge",
        "right-undelete": "Said widdaheaschdelle",
-       "newuserlogpage": "Naijõmeldungs-Logbuch",
+       "right-unblockself": "Enschberr Disch",
+       "right-mergehistory": "Gschischde vun Saide zsommefiare",
+       "newuserlogpage": "Naijoameldungs-Logbuch",
        "rightslog": "Middawaidareschd-Logbuch",
+       "action-read": "Lees die Said",
        "action-edit": "onde Said schaffe",
+       "action-createpage": "Mach Saide",
+       "action-createtalk": "Mach Dischbediersaide",
+       "action-createaccount": "Machä Middawaidakondo",
+       "action-history": "Guggda die Gschischd vunde Said oa",
+       "action-move": "Die Said vaschiewe",
+       "action-move-subpages": "Die Said unn alle Unnasaide vaschiewe",
+       "action-move-categorypages": "Grubbesaide vaschiewe",
+       "action-movefile": "Die Said vaschiewe",
+       "action-upload": "Saide nufflaade",
+       "action-reupload": "Iwwaschraiwb die Said, wus schun hodd",
+       "action-delete": "Lesch die Said",
+       "action-deleterevision": "Lesch die Ännarung",
+       "action-deletedhistory": "guggda die gleschd Gschischd vunde Said oa",
+       "action-browsearchive": "Gugg noch gleschde Saide",
+       "action-undelete": "Said widdaheaschdelle",
+       "action-suppressrevision": "Vaschdeggelde Ännarunge oagugge unn widdaheaschdelle",
+       "action-mergehistory": "Gschisch vunde Said zsommefiere",
+       "action-sendemail": "E-Mails schigge",
        "nchanges": "$1 {{PLURAL:$1|Ännarung|Ännarunge}}",
-       "recentchanges": "Ledschdi Ännarunge",
-       "recentchanges-legend": "Wehl ä Õzaisch fa die ledschde Ännarunge",
+       "enhancedrc-history": "Gschischd",
+       "recentchanges": "Ledschde Ännarunge",
+       "recentchanges-legend": "Wehl ä Oazaisch fa die ledschde Ännarunge",
+       "recentchanges-summary": "Do konschd die ledschde Ännarunge vunde {{SITENAME}} vafolsche.",
        "recentchanges-feed-description": "Ledschde Ännarunge vun {{SITENAME}} im Feed oigewwe.",
        "recentchanges-label-newpage": "Domid magschd ä naiji Said",
        "recentchanges-label-minor": "S'ische glenni Beawaidung",
        "recentchanges-label-bot": "Ännarunge duaschn Bod",
        "recentchanges-label-unpatrolled": "Die Ännarung isch noch nedd iwwabriefd worre",
+       "recentchanges-label-plusminus": "Ännarung vunde Saidegreeß in Bytes",
+       "recentchanges-legend-heading": "'''Bildtegschd:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gugg a uff [[Special:NewPages|Lischd vun naije Saide]])",
        "rcnotefrom": "Unne sinn Ännarunge said <strong>$2<-strong> (bis <strong>$1<-strong>).",
        "rclistfrom": "Zaisch die ledschde Ännarunge ab $3 $2",
        "rcshowhideminor": "Glenni Ännarunge $1",
+       "rcshowhideminor-show": "Zaische",
+       "rcshowhideminor-hide": "Vaschdeggle",
        "rcshowhidebots": "Bots $1",
-       "rcshowhideliu": "Õgmelde Middawaida $1",
-       "rcshowhideanons": "Ned õgmelda Middawaida $1",
+       "rcshowhidebots-show": "Zaische",
+       "rcshowhidebots-hide": "Vaschdeggle",
+       "rcshowhideliu": "Oagmelde Middawaida $1",
+       "rcshowhideliu-show": "Zaische",
+       "rcshowhideliu-hide": "Vaschdeggle",
+       "rcshowhideanons": "Nedd oagmelda Middawaida $1",
+       "rcshowhideanons-show": "Zaische",
+       "rcshowhideanons-hide": "Vaschdeggle",
        "rcshowhidepatr": "$1 iwabriefde Ännarunge",
+       "rcshowhidepatr-show": "Zaische",
+       "rcshowhidepatr-hide": "Vaschdeggle",
        "rcshowhidemine": "Moi Beawaidunge $1",
+       "rcshowhidemine-show": "Zaische",
+       "rcshowhidemine-hide": "Vaschdeggle",
        "rclinks": "Zaisch die ledschde $1 Ännarunge inde ledschde $2 Daach<br />$3",
        "diff": "Unnaschied",
        "hist": "Gschischd",
        "hide": "vaschdeggle",
-       "show": "zaische",
+       "show": "Zaische",
        "minoreditletter": "k",
        "newpageletter": "N",
        "boteditletter": "B",
        "rc_categories": "Oigschrengd uff Sachgrubbe (abgdeeld middm \"|\")",
        "rc_categories_any": "Ebbes",
+       "rc-change-size-new": "$1 {{PLURAL:$1|Byte}} nochde Ännarung",
        "rc-enhanced-expand": "Änzlhaide zaische",
-       "rc-enhanced-hide": "Õgawe vaschdeggle",
-       "recentchangeslinked": "Was õn valinggde Saide gännad worre isch",
+       "rc-enhanced-hide": "Oagawe vaschdeggle",
+       "recentchangeslinked": "Was oan valingde Saide gännad worre isch",
        "recentchangeslinked-feed": "Ännarunge on valinggde Saide",
        "recentchangeslinked-toolbox": "Ännarunge uff verlingde Saide",
-       "recentchangeslinked-title": "Ännarunge õn Saide, wu „$1“ druff verlinggd",
-       "recentchangeslinked-summary": "Die Lischd zaischd ledschdi Ännarunge, vunna bschdimmde Said, wu do valinggd isch (odda ä Midglied vunna bschdimmde Sachgrubb isch).\nSaide uff [[Special:Watchlist|Doina Beowachdungslischd]] sinn '''fedd'''.",
+       "recentchangeslinked-title": "Ännarunge oan Saide, wu „$1“ druff valingd",
+       "recentchangeslinked-summary": "Die Lischd zaischd ledschde Ännarunge, vunna bschdimmde Said, wu do valinggd isch (odda ä Midglied vunna bschdimmde Sachgrubb isch).\nSaide uff [[Special:Watchlist|Doina Beowachdungslischd]] sinn <strong>fedd</strong>.",
        "recentchangeslinked-page": "Saide:",
-       "recentchangeslinked-to": "Zaisch Ännarunge uff Saide, wu do her valinggd sinn",
-       "upload": "Nufflade",
+       "recentchangeslinked-to": "Zaisch Ännarunge uff Saide, wu dohea valingd sinn",
+       "upload": "Nufflaade",
        "uploadbtn": "Dadai nufflade",
+       "uploadnologin": "Bischd nedd oagmeld",
        "uploadlogpage": "Dadaije-Logbuch",
        "filedesc": "Iwwabligg",
        "fileuploadsummary": "Iwwabligg:",
+       "badfilename": "D'Dadainoame hodd sisch uff \"$1\" g'ännad.",
+       "file-deleted-duplicate": "Ä Dadai, wu glaisch isch wie die do ([[:$1]]), hoddma schunmol gleschd kabd. Guggdas Logbuch oa, bvoase nufflaade duschd.",
        "savefile": "Dadai schbaischere",
+       "backend-fail-alreadyexists": "Die Dadai \"$1\" hodds schunn.",
        "lockmanager-notlocked": "„$1“ hod ned uffgmachd were kenne, s'isch ganed gschberd gwesd.",
        "lockmanager-fail-closelock": "Die gbscherd Dadai „$1“ hod ned gschlosse were kenne.",
        "lockmanager-fail-deletelock": "Die gbscherd Dadai „$1“ hod ned gleschd were kenne.",
        "lockmanager-fail-releaselock": "„$1“ konn ned fraigewe werre.",
        "license": "Bwillischung",
        "license-header": "Bwillischung",
+       "nolicense": "Nix ausgweeld",
+       "listfiles-delete": "lesche",
+       "imgfile": "Dadai",
        "listfiles_name": "Nome",
+       "listfiles_user": "Middawaida",
        "listfiles_size": "Greeß",
        "listfiles_count": "Versione",
+       "listfiles-latestversion-yes": "Ja",
+       "listfiles-latestversion-no": "Nä",
        "file-anchor-link": "Dadai",
        "filehist": "Dadaigschischd",
-       "filehist-help": "Drigg uffn Zaidpunggd zum õzaische, wies dord ausgseje hodd.",
+       "filehist-help": "Drigg uffn Zaidpungd zum oazaische, wies doad ausgseje hodd.",
        "filehist-deleteall": "alles lesche",
        "filehist-deleteone": "lesche",
        "filehist-revert": "zriggsedze",
        "filehist-current": "agduell",
        "filehist-datetime": "Zaidpungd",
        "filehist-thumb": "Gleenes Bild",
-       "filehist-thumbtext": "Skizz fa die Ausgab vum $1",
+       "filehist-thumbtext": "Skizz fa die Ausgawb vum $1",
        "filehist-user": "Middawaida",
        "filehist-dimensions": "Maß",
        "filehist-comment": "Oißarung",
        "linkstoimage": "Die {{PLURAL:$1|Said vawaisd|$1 Saide vawaisn}} uff die Dadai:",
        "nolinkstoimage": "Do hodds kä Said, wu dohea zaischd.",
        "sharedupload": "Die Datei isch vun $1 un s kann sai, dass se ach vun annere Projekt gebraucht werd.",
-       "sharedupload-desc-here": "Die Dadai isch vun $1 un konn a wuonaschda bnuzd werre.\nÄ Bschraiwung finschd [$2 Dadaibschraiwungssaid] unne.",
+       "sharedupload-desc-here": "Die Dadai isch vun $1 unn konn a wuonaschda bnuzd werre.\nÄ Bschraiwung finschd [$2 Dadaibschraiwungssaid] unne.",
        "uploadnewversion-linktext": "E naiere Version vun derre Datei hochlade",
+       "shared-repo-from": "vun $1",
+       "upload-disallowed-here": "Du konschd do nix iwwaschraiwe.",
        "filedelete": "Lesch $1",
        "filedelete-legend": "Dadai lesche",
+       "filedelete-intro": "Du bischd drummunndroa die Said '''„[[Media:$1|$1]]“''' midde Gschischd zu lesche.",
        "filedelete-submit": "Lesche",
        "filedelete-success": "'''$1''' isch gleschd worre.",
        "filedelete-maintenance-title": "Dadai konnned gleschd werre",
        "download": "Runalaade",
-       "randompage": "Irschndn Adiggl",
+       "randompage": "Iaschnd n'Adiggl",
+       "randomincategory-category": "Sachgrubb:",
        "statistics": "Schdadischdigge",
        "statistics-pages": "Saide",
+       "doubleredirects": "Dobblde Waidalaidung",
        "brokenredirects-edit": "schaffe",
        "brokenredirects-delete": "lesche",
        "withoutinterwiki-submit": "Zaische",
        "nrevisions": "$1 {{PLURAL:$1|Ännarung|Ännarunge}}",
        "nimagelinks": "Used on $1 {{PLURAL:$1|Said|Saide}}",
        "ntransclusions": "oigsedzd uff $1 {{PLURAL:$1|Said|Saide}}",
+       "lonelypages": "Vawaide Saide",
        "uncategorizedpages": "Said ohne Sachgrubb",
        "uncategorizedcategories": "Sachgrubb ohne Sachgrubb",
        "uncategorizedimages": "Dadai ohne Sachgrubb",
        "wantedcategories": "Gwinschde Sachgrubbe",
        "wantedpages": "Gwinschde Saide",
        "mostlinkedcategories": "Nizlischi Sachgrubbe",
-       "mostlinkedtemplates": "Niylischi Vorlache",
-       "mostcategories": "Saide midd õm maigschde Sachgrubbe",
+       "mostlinkedtemplates": "Maischdoigbunnene Saide",
+       "mostcategories": "Saide midd oam maigschde Sachgrubbe",
        "prefixindex": "Alle Saide (midd Voasilw)",
        "listusers-editsonly": "Zaisch bloß Bnudza mid Baidräsch",
        "usercreated": "{{GENDER:$3|Gmachd}} vun $1 om $2",
        "pager-older-n": "{{PLURAL:$1|vorisch 1|vorische $1}}",
        "booksources": "Buchgwelle",
        "booksources-search-legend": "Noch Buchgwelle gugge",
+       "booksources-search": "Gugg",
        "log": "Logbischa",
        "allpages": "Alle Saide",
+       "nextpage": "Negschd Said ($1)",
        "prevpage": "Voriche Said ($1)",
        "allpagesfrom": "Saide aazaische wu aafange mid:",
        "allpagesto": "Saide aazaische wu ufhere mid:",
        "allarticles": "Alle Saide",
        "allpagessubmit": "Zaische",
+       "allpages-hide-redirects": "Waidalaidunge vaschdeggle",
        "categories": "Sachgrubbe",
        "categoriespagetext": "Folschndi {{PLURAL:$1|Sachgrubb hodd|Sachgrubbe hawen}} Saide odda Dadaije. [[Special:UnusedCategories|Ubnudze Sachgrubbe]] werren do nedd gzaischd. Gugg a uffde [[Special:WantedCategories|gwinschde Sachgrubbe]].",
-       "categoriesfrom": "Zaisch Sachgrubbe õgfonge middt:",
+       "categoriesfrom": "Zaisch Sachgrubbe oagfonge middt:",
        "sp-deletedcontributions-contribs": "Baidräsch",
        "linksearch": "Exderne Lings",
        "linksearch-pat": "Suchmuschda",
+       "linksearch-ok": "Gugge",
        "linksearch-line": "$1 isch vun $2 valinggd",
        "listusers-submit": "Zaische",
        "listusers-noresult": "Kä Middawaida gfunne",
        "listusers-blocked": "(gschberd)",
        "listgrouprights-group": "Grubb",
        "listgrouprights-members": "(Midgliedalischd)",
-       "emailuser": "E-Mail õnde Middawaida",
-       "emailusername": "Middawaidanõme:",
+       "emailuser": "E-Mail oande Middawaida",
+       "emailusername": "Middawaidanoame:",
        "emailfrom": "Vum:",
        "emailto": "Fa:",
        "emailsubject": "Bdreff:",
        "deletepage": "Said lesche",
        "confirm": "Beschdedische",
        "delete-legend": "Lesche",
+       "historywarning": "<strong>Bassma uff:</strong> Die Said, wu lesche wilschd, hoddä Gschischd midd {{PLURAL:$1|äna Ännarung|$1 Ännarunge}}:",
        "confirmdeletetext": "Du bisch debai e Said z lesche mid alle Versione.\nBitte du bstätiche, dass Du des wllscht du, dass Du verstehsch, was des hääßt, un dass Du des machscht in Iwweraistimmung mit de [[{{MediaWiki:Policy-url}}|Richtline]].",
        "actioncomplete": "Maßnohm ferdisch",
        "actionfailed": "Maßnohm gschaidad",
        "deletecomment": "Grund:",
        "deleteotherreason": "Annere/zusätzliche Grund:",
        "deletereasonotherlist": "Annere Grund",
+       "delete-toobig": "Die Said hodd midd mea als $1 {{PLURAL:$1|Ännarung|Ännarunge}} ä longi Gschischd. S'Lesche vun denne Saide isch bschrengd, domidd de Seava nedd aus Vaseje zsommekrache dud.",
+       "delete-warning-toobig": "Die Said hodd midd mea als $1 {{PLURAL:$1|Ännarung|Ännarunge}} ä longi Gschischd. S'Lesche konn zu Schderunge inde Daadebong'g fiare.",
        "rollbacklink": "Zriggsedze",
+       "rollbacklinkcount": "{{PLURAL:$1|Ä Ännarung|$1 Ännarunge}} z'riggsedze",
+       "rollbackfailed": "Zriggsedze hodd nedd g'klabbd",
        "protectlogpage": "Saideschudz-Logbuch",
        "protectedarticle": "hodd \"[[$1]]\" gschizd",
        "modifiedarticleprotection": "hot de Schutzstatus vun \"[[$1]]\" gännert",
        "protect-cascadeon": "Die Said isch gschizd, wail se {{PLURAL:$1|zu derre Said kead|zu denne Saide kead}}, wuä Kaskadeschberrung gild.\nÄnnarunge vum Saideschudz hodd awwa kän Oifluß uff die Kaskadeschberrung.",
        "protect-default": "Alle Middawaida erlauwe",
        "protect-fallback": "Bloß fa Laid mid \"$1\" Bereschdischung",
-       "protect-level-autoconfirmed": "Naiji un nedd õgmeld Middawaida schberre",
+       "protect-level-autoconfirmed": "Naiji un nedd oagmeld Middawaida schberre",
        "protect-level-sysop": "Bloß fa Adminischdradore",
        "protect-summary-cascade": "Kaskade",
        "protect-expiring": "bis $1 (UTC)",
        "protect-expiring-local": "bis $1",
+       "protect-expiry-indefinite": "uubschdimmd",
        "protect-cascade": "Kaskadesperrung – alle aigebunnene Vorlache sinn midgsperrd.",
        "protect-cantedit": "Du kannscht de Schutzstatus vun derre Said nit ännere, wail Du nid d Berechdichung dezu hoscht.",
+       "protect-othertime": "Onnari Dauwa",
        "restriction-type": "Berechdichung:",
        "restriction-level": "Schudsewene:",
        "restriction-edit": "Schaffe",
        "restriction-move": "Verschiewe",
+       "restriction-create": "Oaleesche",
+       "restriction-upload": "Nufflaade",
        "undelete": "Widderherschdelle",
+       "undeleteextrahelp": "Domidd die Said kombledd midde Gschischd widdaheagschdeld werre konn, gligg alles weg un gligg uff <strong<em>{{int:undeletebtn}}</em></strong>.\nDomidd bschdimmdi Ännarunge zriggkrische duschd, gliggschd die endschbreschende Käschde oa unn glischd donn uff <strong><em>{{int:undeletebtn}}</em></strong>.",
+       "undeleterevisions": "$1 {{PLURAL:$1|Ännarung|Ännarunge}} aschiviad",
+       "undeletehistory": "Wonn die Said zriggholschd, kummen alle Ännarunge midd.\nWonnä naiji Said middm selwe Noame oageleschd wead, saidse gleschd worre isch, easchoinen die Ännarunge middm Zrigghole inde Gschischd.",
        "undeletebtn": "Widderherschdelle",
-       "undeletelink": "õgugge/widda herschdelle",
-       "undeleteviewlink": "Õgugge",
+       "undeletelink": "oagugge/widda herschdelle",
+       "undeleteviewlink": "Oagugge",
+       "undelete-search-title": "Gugg noch g'leschde Saide",
+       "undelete-search-box": "Gugg noch g'leschde Saide",
+       "undelete-search-submit": "Gugge",
        "undelete-show-file-submit": "Ja",
-       "namespace": "Nõmensraum",
+       "namespace": "Noamensraum",
        "invert": "Wahl dausche",
+       "tooltip-invert": "Gligg uffde Auswahlkaschde, um Ännarunge im gwehlde Noamensraum unn, wonns gwehld hoschd, em endschbreschende zukehrische Noamensraum zum Vaschwinde zu bringe",
+       "namespace_association": "Zukehrische Noamensraum",
+       "tooltip-namespace_association": "De Kaschde oagligge, um a's Dischbediere vum zukearisch Noamensraum zu krische.",
        "blanknamespace": "(Schdadsaid)",
        "contributions": "{{GENDER:$1|Wassa gemachd hodd}}",
        "contributions-title": "Middawaidabaidräsch vun $1",
        "sp-contributions-logs": "Logbischa",
        "sp-contributions-talk": "Dischbediere",
        "sp-contributions-search": "Noch Baidräsch gugge",
-       "sp-contributions-username": "IP-Adress odda Middawaidanõme:",
+       "sp-contributions-username": "IP-Adress odda Middawaidanoame:",
        "sp-contributions-toponly": "Bloß agduelli Ännarunge zaische",
        "sp-contributions-submit": "Gugge",
-       "whatlinkshere": "Was doher zaische dud",
-       "whatlinkshere-title": "Saide wu uff \"$1\" valinggn",
+       "whatlinkshere": "Was dohea zaische dud",
+       "whatlinkshere-title": "Saide wu uff \"$1\" valing'gn",
        "whatlinkshere-page": "Said:",
-       "linkshere": "Die Saide valinggn uff '''[[:$1]]''':",
+       "linkshere": "Die Saide valing'gn uff '''[[:$1]]''':",
        "nolinkshere": "Kä Said zaischd uff '''[[:$1]]'''.",
        "isredirect": "Waidalaidungsaid",
        "istemplate": "Vorlacheoibindung",
-       "isimage": "Dadailingg",
+       "isimage": "Dadailing'g",
        "whatlinkshere-prev": "{{PLURAL:$1|vorisch|vorische $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|negschd|negschde $1}}",
-       "whatlinkshere-links": "← Linggs",
+       "whatlinkshere-links": "← Ling'gs",
        "whatlinkshere-hideredirs": "$1 Waidalaidunge",
        "whatlinkshere-hidetrans": "$1 Vorlacheoibindunge",
-       "whatlinkshere-hidelinks": "$1 Linggs",
+       "whatlinkshere-hidelinks": "$1 Ling'gs",
        "whatlinkshere-hideimages": "$1 Dadailinggs",
        "whatlinkshere-filters": "Filda",
        "blockip": "Middawaida bloggiere",
        "ipbsubmit": "Middawaida bloggiere",
+       "ipbother": "Onnari Dauwa:",
        "ipboptions": "2 Schdunne:2 hours,1 Daach:1 day,3 Daach:3 days,1 Woch:1 week,2 Woche:2 weeks,1 Monad:1 month,3 Monad:3 months,6 Monad:6 months,1 Johr:1 year,Fa imma:infinite",
+       "ipb-unblock-addr": "Fraigewwe $1",
        "ipusubmit": "Die Adreß fraigewwe",
-       "ipblocklist": "Gschberrdi IP-Adress un Middawaidanõme",
+       "ipblocklist": "Gschberrdi IP-Adress un Middawaidanoame",
        "infiniteblock": "ubgrensd",
-       "blocklink": "schberre",
+       "blocklink": "Schberre",
        "unblocklink": "Sperr uffhewe",
        "change-blocklink": "Schberr ännare",
        "contribslink": "Baidräsch",
        "blocklogpage": "Schberrlogbuch",
        "blocklogentry": "hodd [[$1]] gschberrd fa'n Zaidraum vun $2 $3",
        "unblocklogentry": "hot d Sperr vun $1 uffghowwe",
-       "block-log-flags-nocreate": "Õleesche vun Konde isch gschberrd",
-       "lockbtn": "Dadebongg schberre",
-       "unlockbtn": "Dadebongg fraigewwe",
+       "block-log-flags-nocreate": "Oaleesche vun Konde isch gschberrd",
+       "lockbtn": "Dadebong'g schberre",
+       "unlockbtn": "Dadebong'g fraigewwe",
        "move-page-legend": "Said vaschiewe",
        "movepagetext": "Midm Formad konnschd ä Said en naije Nome gewwe, debai werrem alli alde Ausgawe uffde nai Nome vaschowe.\nAusm alde Nome werd e Waidalaidungssaid zum naije Nome.\nWaidalaidungssaide, wu uffde ald Nome umlaide dun, konnschd vun allä uffde naischde Schdond bringe.\nWonndes ned willschd, guggschd uff [[Special:DoubleRedirects|dobbldi]] odda [[Special:BrokenRedirects|kabuddi Waidalaidunge]].\nSoasch dfia, dass Linggs waida uffdie rischdische Saide fiehan.\n\nGebb Achd, dass die Said '''ned''' vaschowe werd, wonns schunä Said midm naije Nome hod, außa wonnse lea isch odda e Waidalaidung.\nDes heeßd, Du konnschd ke Said, wus schun gibbd, iwwaschraiwe.\n\n'''BAßMAUFF!'''\nDes isch e wischdischi Ännarung fa e Said un konn zimlisch uuerwaaded soi fa wischdischi Saide;\nmach des bloß, wonn die Folsche vunde Maßnohm a abschedze konnschd.",
+       "movepagetext-noredirectfixer": "Middm Foamula unne koschd die Said nai bnenne, wonnse midde gonse Gschischd uffn naije Noame bwesche duschd.\nDe ald Tidl weadä Said midd änna Waidalaidung uff die Said werre.\nBass uff unn gugg uff [[Special:DoubleRedirects|dobbelde]] odda [[Special:BrokenRedirects|kabudde Waidalaidunge]]. Du bischd dvoa vaondwoadlisch, dass Ling'gs uffs rischdische zaische dun.\n\nBass uff, die Said wead <strong>nedd</strong> vaschowe, wonns schun ä Said gewwe dud, wude selwe Noame hodd, aussa, s'isch ä Waidalaidung ohne Gschischd.\nDes heesd, wonnän Fehla gmschd hoschd, konschd ä Said zrigg. Awwa konschd kä Said iwwaschraiwe, wus schun hodd.\n\n<strong>Bassma uff, Beaschl!</strong>\nDes konn schlimme Folsche fa b'liewde Saide hawwe. Saida wiaglisch sischa, dass a alles was do due wilschd, a vaschdonne hoschd. Odda losses sunschd bessa soi.",
        "movepagetalktext": "D Dischbediersaid werd ach mid verschowe, '''ausser:'''\n* Du verschiebsch die Saide in e annere Namensraum, odder\n* s gebbt schun e Dischbediersaid mi dem Name, orrer\n* Du wählsch unne d Option, se nid z verschiewe.\n\nIn denne Fäll misst mer d Dischbediersaid vun Hand kopiere.",
        "movearticle": "Said vaschiewe:",
        "newtitle": "Zum naije Didl:",
        "revertmove": "Zurigg vaschiewe",
        "delete_and_move": "Lesche un Verschiewe",
        "delete_and_move_confirm": "Ja, Said lesche",
-       "export": "Saide rausgewe",
+       "export": "Saide rausgewwe",
+       "exportcuronly": "Bloß die ledschd Ännarung vunde Said exboadiere",
        "export-submit": "Saide exbordiere",
        "export-addcattext": "Saide vunde Sachgrubb dzufiesche:",
-       "allmessagesname": "Nõme",
-       "allmessagesdefault": "Vorgewene Tegschd",
+       "allmessagesname": "Noame",
+       "allmessagesdefault": "Voagewene Tegschd",
        "allmessages-filter-modified": "Vaännad",
-       "thumbnail-more": "Mags greßa",
+       "thumbnail-more": "Mags greeßa",
        "thumbnail_error": "Baim Voaschaubild ischwas falsch glaafe: $1",
        "import-interwiki-submit": "Impordiere",
        "tooltip-pt-userpage": "Doi Miaddawaidasaid",
        "tooltip-pt-preferences": "Doi Oischdellunge",
        "tooltip-pt-watchlist": "Lischd vun Saide, wu beowachde duschd",
        "tooltip-pt-mycontris": "Lischd vun doine Baidräsch",
-       "tooltip-pt-login": "Du konnschd disch õmelde, awwa mugschd ned",
+       "tooltip-pt-login": "Du konnschd disch oamelde, mugschd awwa ned",
        "tooltip-pt-logout": "Uffhere",
-       "tooltip-ca-talk": "Iwwa d Inhaldssaid dischbediere",
-       "tooltip-ca-edit": "Du konnschd onde Said schaffe.\nBidde nemmde Vorschau-Gnobb vorm Schbaischare",
-       "tooltip-ca-addsection": "N'naije Abschnidd õleche",
-       "tooltip-ca-viewsource": "Die Said isch gschizd. Du konnschdda de Gwelltegschd õgugge.",
-       "tooltip-ca-history": "Ledschdi Ausgawe vunde Said",
+       "tooltip-pt-createaccount": "Fiel disch eamudischd da ä Middawaidakondo oazuleesche unn disch oazumelde. Mugschd awwa nedd.",
+       "tooltip-ca-talk": "Iwwa d'Inhaldssaid dischbediere",
+       "tooltip-ca-edit": "Du konnschd onde Said schaffe.\nBidde nemmde Vorschau-Gnobb voam Schbaischare",
+       "tooltip-ca-addsection": "N'naije Abschnidd oaleche",
+       "tooltip-ca-viewsource": "Die Said isch gschizd. Du konnschdda de Gwelltegschd oagugge.",
+       "tooltip-ca-history": "Ledschde Ausgawe vunde Said",
        "tooltip-ca-protect": "Die Said schidze",
        "tooltip-ca-delete": "Die Said lesche",
        "tooltip-ca-move": "Die Said vaschiewe",
        "tooltip-ca-watch": "Die Said zu doina Beowachdungslischd dzufiesche",
        "tooltip-ca-unwatch": "Die Said vun doina Beowachdunschlischd wegnemme",
        "tooltip-search": "Gugg uff {{SITENAME}} fa",
-       "tooltip-search-go": "Geh zude Said midm Nõme, wonnses hodd",
+       "tooltip-search-go": "Geh zude Said midm Noame, wonnses hodd",
        "tooltip-search-fulltext": "Gugg inde Said nochm Tegschd",
        "tooltip-p-logo": "Schdadsaid",
        "tooltip-n-mainpage": "Uff d'Schdadsaid geje",
-       "tooltip-n-mainpage-description": "Haubdsaid õgugge",
+       "tooltip-n-mainpage-description": "Haubdsaid oagugge",
        "tooltip-n-portal": "Iwwas Brojegd, wu mache konnschd, wu ebbes finne duschd",
        "tooltip-n-currentevents": "Finn Auskinfd iwwas Naijischde",
        "tooltip-n-recentchanges": "Lischd vunde ledschde Ännarunge im Wiki",
-       "tooltip-n-randompage": "Laad e zufellischi Said",
+       "tooltip-n-randompage": "Laad ä zufellischi Said",
        "tooltip-n-help": "Do konschds rausfinne",
        "tooltip-t-whatlinkshere": "Lischd vun alle Wikisaide, wu dohie verlingd sinn",
-       "tooltip-t-recentchangeslinked": "Ledschdi Ännarunge in Saide, wu vun do verlinggd sinn",
+       "tooltip-t-recentchangeslinked": "Ledschde Ännarunge in Saide, wu vun do verlingd sinn",
        "tooltip-feed-rss": "RSS feed fer die Said",
        "tooltip-feed-atom": "Atom-Feed fa die Said",
-       "tooltip-t-contributions": "Ledschdi Baidräsch vum Middawaida õgugge",
+       "tooltip-t-contributions": "Ledschde Baidräsch vum Middawaida oagugge",
        "tooltip-t-emailuser": "Dem Middawaida e E-Mail schigge",
-       "tooltip-t-upload": "Dadaije nufflade",
-       "tooltip-t-specialpages": "Lischd vunde Schbezialsaide",
-       "tooltip-t-print": "Druggausgab vunde Said",
-       "tooltip-t-permalink": "N'dauwahafde Lingg uff die Ausgab vunde Said",
-       "tooltip-ca-nstab-main": "Inhald õgugge",
-       "tooltip-ca-nstab-user": "Middawaidasaid õgugge",
-       "tooltip-ca-nstab-special": "Des isch e Spezialsaid, du konnschd d Said selwaschd nedd ännare",
-       "tooltip-ca-nstab-project": "Brojegdsaid õgugge",
-       "tooltip-ca-nstab-image": "Dadaisaid õgugge",
-       "tooltip-ca-nstab-template": "Vorlach õgugge",
-       "tooltip-ca-nstab-category": "Sachgrubbsaid õgugge",
+       "tooltip-t-upload": "Dadaije nufflaade",
+       "tooltip-t-specialpages": "Lischd vunde Sondasaide",
+       "tooltip-t-print": "Druggausgawb vunde Said",
+       "tooltip-t-permalink": "N'dauwahafde Ling'g uff die Ausgawb vunde Said",
+       "tooltip-ca-nstab-main": "Inhald oagugge",
+       "tooltip-ca-nstab-user": "Middawaidasaid oagugge",
+       "tooltip-ca-nstab-special": "Des ischä Sondasaid, du konnschd die Said selwa nedd ännare",
+       "tooltip-ca-nstab-project": "Brojegdsaid oagugge",
+       "tooltip-ca-nstab-image": "Dadaisaid oagugge",
+       "tooltip-ca-nstab-template": "Vorlaach oagugge",
+       "tooltip-ca-nstab-category": "Sachgrubbsaid oagugge",
        "tooltip-minoredit": "Als gleeni Ännarung makiere",
        "tooltip-save": "Doi Ännarunge schbaischare",
-       "tooltip-preview": "Guggda doi Ännarunge inde Vorschau õ, bvor uff Schbaischare drigschd!",
-       "tooltip-diff": "Gugg, welschi Ännarunge im Tegschd gmachd hoschd",
+       "tooltip-preview": "Guggda doi Ännarunge inde Vorschau oa, bvor uff Schbaischare driggschd!",
+       "tooltip-diff": "Gugg, welsche Ännarunge im Tegschd gmachd hoschd",
        "tooltip-compareselectedversions": "D Unnaschied zwische denne zwee gwehlde Ausgawe õgugge",
        "tooltip-watch": "Die Said zu doina Beowachdunglischd zufiesche",
-       "tooltip-rollback": "„Zriggsedze“ machd alli Beawaidunge vum ledschde Middawaida rigg'gängisch",
-       "tooltip-undo": "„Zrigg“ machd nua die Ännarung rigg'gängich un zaischd ä Vorschau õ.\nKonnschdn Grund inde Zommefassung õgewwe.",
-       "tooltip-summary": "Gebä koaz Resimee",
+       "tooltip-rollback": "„Zriggsedze“ machd alle Beawaidunge vum ledschde Middawaida rigg'gängisch",
+       "tooltip-undo": "„Zrigg“ machd nua die Ännarung rigg'gängich unn zaischdä Vorschau.\nKonnschdn Grund inde Zommefassung oagewwe.",
+       "tooltip-summary": "Gebb ä koaz Resimee",
+       "simpleantispam-label": "Schbämschudzpriefung.\nDo <strong>NIX</strong> oidraache!",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Vaschdeggldi Sachgrubb|Vaschdegglde Sachgrubbe}} ($1)",
-       "pageinfo-category-info": "Sachgrubb-Õgawe",
-       "pageinfo-category-subcats": "Õzahl vun Unnagrubbe",
-       "previousdiff": "← Äldari Beawaidung",
+       "pageinfo-toolboxlink": "Auskinfd zude Said",
+       "pageinfo-contentpage-yes": "Ja",
+       "pageinfo-protect-cascading-yes": "Ja",
+       "pageinfo-category-info": "Sachgrubb-Oagawe",
+       "pageinfo-category-subcats": "Oazahl vun Unnagrubbe",
+       "previousdiff": "← Äldare Beawaidung",
        "nextdiff": "Naijari Beawaidung →",
        "file-info-size": "$1 × $2 Pixels, Dadaigreß: $3, MIME-Type: $4",
-       "file-nohires": "Ke heheri Ufflesung vafieschba.",
+       "file-nohires": "Kä hejari Ufflesung vafieschba.",
        "svg-long-desc": "SVG-Datei, Grundgreß $1 × $2 Pixels, Dadaigreß: $3",
        "show-big-image": "Uaschbringlischi Dadai",
+       "show-big-image-preview": "Greeß vunde Voaschau: $1.",
+       "show-big-image-other": "Waidari {{PLURAL:$2|Uffleesung|Uffleesunge}}: $1.",
+       "show-big-image-size": "$1 × $2 Pixl",
        "ilsubmit": "Such",
        "bad_image_list": "Uffbau: bloß Zaile, wu midm * õfonge werren briggsischdischd.\nDe erschd Lingg mussn Lingg zu änna uuerwinschde Dadai soi.\nÕnnare Linggs inde glaische Zail werren als Ausnõhm gnumme, des heesd, Saide, wu inde Dadai vorkumme dirfn.",
        "metadata": "Medadaade",
-       "metadata-help": "Die Dadai hodd waidari Õgawe, waschoinlisch vunde Digidalkõmara odda vum Skänna, wumase mid gmachd hodd.\nWonn die Dadai vaännad worre isch, donn konns soi, daß zusedzlischi Õgawe fa die vaännad Dadai nemme rischdisch sinn.",
+       "metadata-help": "Die Dadai hodd waidare Oagawe, waschoinlisch vunde Digidalkomara odda vum Skänna, wumase midd gmachd hodd.\nWonn die Dadai vaännad worre isch, konns soi, daß zusedzlischi Oagawe nemme rischdisch sinn.",
        "metadata-expand": "Erwaiterte Details aazaiche",
        "metadata-collapse": "Erwaiterte Details versteckeln",
-       "metadata-fields": "Die EXIF-Medadaade werren inde Bild-Bschraiwung a õgzaischd, wonn die Medadaade-Tabell vaschdegld isch.\nÕnnare Medadaade sinn noamalawais vaschdegld.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Die EXIF-Medadaade werrn inde Bild-Bschraiwung a oagzaischd, wonn die Medadaade-Tabell vaschdeggld isch.\nOannare Medadaade sinn noamalawais vaschdeggld.\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": "Ausrischdung",
+       "exif-xresolution": "Waagreschdi Ufflesung",
+       "exif-yresolution": "Seng'greschdi Ufflesung",
+       "exif-datetime": "Schbaischazaidpungd",
+       "exif-make": "Kamaraheaschdella",
+       "exif-model": "Kamaramodel",
+       "exif-software": "Sofdwaa",
+       "exif-exifversion": "Exif-Veasion",
+       "exif-colorspace": "Fawe",
+       "exif-datetimeoriginal": "Zaidpungd vunde Eafassung",
+       "exif-datetimedigitized": "Zaidpungd vunde Digidalisierung",
        "exif-iimcategory": "Sachgrubb",
        "exif-iimsupplementalcategory": "Ergenzndi Sachgrubbe",
+       "exif-orientation-1": "Noamal",
        "exif-gaincontrol-0": "Kään",
        "namespacesall": "alle",
        "monthsall": "alle",
-       "watchlisttools-view": "Die wischdische Ännarunge õgugge",
-       "watchlisttools-edit": "Beowachdunglischd õgugge un drõ schaffe",
-       "watchlisttools-raw": "Im große Tegschdfeld schaffe",
+       "watchlisttools-view": "Die wischdische Ännarunge oagugge",
+       "watchlisttools-edit": "Beowachdunglischd oagugge un droa schaffe",
+       "watchlisttools-raw": "Im große Tegschdkaschde schaffe",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Gbabbl]])",
        "duplicate-defaultsort": "'''Baßma uff:''' De Schlissl \"$2\" dudde frijare Schlissl \"$1\" iwwaschraiwe.",
-       "specialpages": "Schbezialsaide",
+       "specialpages": "Sondasaide",
        "specialpages-group-other": "Onare bsundare Saide",
        "specialpages-group-pagetools": "Wergzaisch fa Saide",
        "specialpages-group-wiki": "Daade un Wergzaisch",
        "external_image_whitelist": " #Loss die Zail wiese isch.<pre>\n#Geb unne Deel vunde regulere Ausdrigg (de Deel zwischede //) oi.\n#Die werren midde URLs vun aissare Bilda vaglische.\n#Die wu passen werren gzaischd un schunschd sieschdn n'Ling'g.\n#Zaile, wu midd # ofongen sinnen Kommenda.\n#Glä- odda Großschraiwung isch do egal.\n\n#Deel vun regulere Ausdrigg nochde Zeil oidrache. Loss die Zail do uuvaännad.</pre>",
        "tag-filter": "[[Special:Tags|Bschildarungs]]-Filda:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
+       "tags-active-yes": "Ja",
+       "tags-active-no": "Nä",
        "tags-edit": "bearwaide",
+       "htmlform-no": "Nä",
+       "htmlform-yes": "Ja",
+       "logentry-delete-delete": "$1 {{GENDER:$2|hodd}} Said $3 gleschd",
+       "logentry-move-move": "$1 {{GENDER:$2|hodd}} die Said $3 noch $4 vaschowe",
+       "logentry-newusers-create": "Middawaidakondo $1 isch {{GENDER:$2|easchdelld}} worre",
+       "logentry-upload-upload": "$1 {{GENDER:$2|hodd}} $3 nuffg'laade",
        "rightsnone": "(-)",
        "feedback-close": "Erledischd",
-       "searchsuggest-search": "Suche",
+       "searchsuggest-search": "Gugg",
        "api-error-unknownerror": "Uubekonde Irrdumm: \"$1\".",
        "duration-seconds": "$1 {{PLURAL:$1|Sekund|Sekunde}}",
        "duration-minutes": "$1 {{PLURAL:$1|Minud|Minude}}",
index a8606a6..64a84f4 100644 (file)
                        "Nanaki",
                        "Alan ffm",
                        "Macofe",
-                       "Devwebtel"
+                       "Devwebtel",
+                       "VerMa",
+                       "Ency",
+                       "Kszapsza",
+                       "Openbk"
                ]
        },
        "tog-underline": "Podkreślenie linków:",
@@ -89,7 +93,7 @@
        "tog-watchcreations": "Dodawaj do obserwowanych tworzone przeze mnie strony oraz wgrywane przeze mnie pliki",
        "tog-watchdefault": "Dodawaj do obserwowanych strony i pliki, które edytuję",
        "tog-watchmoves": "Dodawaj do obserwowanych strony i pliki, które przenoszę",
-       "tog-watchdeletion": "Dodawać do listy obserwowanych usunięte mną strony i pliki",
+       "tog-watchdeletion": "Dodawaj do obserwowanych strony i pliki, które usuwam",
        "tog-watchrollback": "Dodawaj do obserwowanych strony, w których {{GENDER:|wycofałem|wycofałam}} edycję",
        "tog-minordefault": "Wszystkie edycje domyślnie oznaczaj jako drobne",
        "tog-previewontop": "Pokazuj podgląd powyżej obszaru edycji",
        "jumptonavigation": "nawigacja",
        "jumptosearch": "szukaj",
        "view-pool-error": "Niestety w chwili obecnej serwery są przeciążone.\nZbyt wielu użytkowników próbuje wyświetlić tę stronę.\nPoczekaj chwilę przed ponowną próbą dostępu do tej strony.\n\n$1",
-       "generic-pool-error": "Niestety w chwili obecnej serwery są przeciążone.\nZbyt wielu użytkowników próbuje wyświetlić tę stronę.\nPoczekaj chwilę przed ponowną próbą dostępu do tej strony.",
+       "generic-pool-error": "Niestety w chwili obecnej serwery są przeciążone.\nZbyt wielu użytkowników próbuje wyświetlić ten zasób.\nPoczekaj chwilę przed ponowną próbą dostępu do tego zasobu.",
        "pool-timeout": "Zbyt długi czas oczekiwania na blokadę",
        "pool-queuefull": "Kolejka zadań jest pełna",
        "pool-errorunknown": "Błąd nieznany",
        "disclaimers": "Informacje prawne",
        "disclaimerpage": "Project:Informacje prawne",
        "edithelp": "Pomoc w edycji",
+       "helppage-top-gethelp": "Pomoc",
        "mainpage": "Strona główna",
        "mainpage-description": "Strona główna",
        "policy-url": "Project:Zasady",
        "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-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”.",
        "filedeleteerror": "Nie można usunąć pliku „$1”.",
        "wrongpassword": "Podane hasło jest nieprawidłowe. Spróbuj jeszcze raz.",
        "wrongpasswordempty": "Wprowadzone hasło jest puste. Spróbuj ponownie.",
        "passwordtooshort": "Hasło musi mieć co najmniej $1 {{PLURAL:$1|znak|znaki|znaków}}.",
+       "passwordtoolong": "Hasło nie może być dłuższe niż  {{PLURAL:$1|1 znak|$1 znaków}}.",
        "password-name-match": "Hasło musi być inne niż nazwa użytkownika.",
        "password-login-forbidden": "Wykorzystanie tej nazwy użytkownika lub hasła zostało zabronione.",
        "mailmypassword": "Zresetuj hasło",
        "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.",
        "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''' – treść tytułu lub nagłówka komentarza jest pusta.\nJeśli ponownie klikniesz „{{int:savearticle}}“, 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.",
        "blockedtitle": "Użytkownik jest zablokowany",
        "blockedtext": "'''Twoje konto lub adres IP zostały zablokowane.'''\n\nBlokada została nałożona przez $1.\nPodany powód to: ''$2''.\n\n* Początek blokady: $8\n* Wygaśnięcie blokady: $6\n* Zablokowany został: $7\n\nW celu wyjaśnienia przyczyny zablokowania możesz się skontaktować z $1 lub innym [[{{MediaWiki:Grouppage-sysop}}|administratorem]].\nNie możesz użyć funkcji „Wyślij e‐mail do tego użytkownika”, jeśli brak jest poprawnego adresu e‐mail w Twoich [[Special:Preferences|preferencjach]] lub jeśli taka możliwość została Ci zablokowana.\nTwój obecny adres IP to $3, a numer identyfikacyjny blokady to $5.\nProsimy o podanie obu tych informacji przy wyjaśnianiu blokady.",
        "autoblockedtext": "Ten adres IP został zablokowany automatycznie, gdyż korzysta z niego inny użytkownik, zablokowany przez administratora $1.\nPowód blokady:\n\n:''$2''\n\n* Początek blokady: $8\n* Wygaśnięcie blokady: $6\n* Zablokowany został: $7\n\nMożesz skontaktować się z $1 lub jednym z pozostałych [[{{MediaWiki:Grouppage-sysop}}|administratorów]] w celu uzyskania informacji o blokadzie.\n\nNie możesz użyć funkcji „Wyślij e‐mail do tego użytkownika”, jeśli brak jest poprawnego adresu e‐mail w Twoich [[Special:Preferences|preferencjach]] lub jeśli taka możliwość została Ci zablokowana.\n\nTwój obecny adres IP to $3, a numer identyfikacyjny blokady to $5.\nProsimy o podanie obu tych numerów przy wyjaśnianiu blokady.",
        "mergelog": "Scalone",
        "revertmerge": "Rozdziel",
        "mergelogpagetext": "Poniżej znajduje się lista ostatnich scaleń historii zmian stron.",
-       "history-title": "$1: Historia wersji",
+       "history-title": "Historia i autorzy strony „$1”",
        "difference-title": "$1: Różnice pomiędzy wersjami",
        "difference-title-multipage": "Różnica pomiędzy stronami \"$1\" i \"$2\"",
        "difference-multipage": "(Różnica między stronami)",
        "notextmatches": "Nie znaleziono w treści stron",
        "prevn": "{{PLURAL:$1|poprzedni|poprzednie $1}}",
        "nextn": "{{PLURAL:$1|następny|następne $1}}",
+       "prev-page": "poprzednia strona",
+       "next-page": "następna strona",
        "prevn-title": "{{PLURAL:$1|Poprzedni|Poprzednie}} $1 {{PLURAL:$1|wynik|wyniki|wyników}}",
        "nextn-title": "{{PLURAL:$1|Następny|Następne}} $1 {{PLURAL:$1|wynik|wyniki|wyników}}",
        "shown-title": "Pokaż po $1 {{PLURAL:$1|wyniku|wyniki|wyników}} na stronę",
        "prefs-personal": "Dane użytkownika",
        "prefs-rc": "Ostatnie zmiany",
        "prefs-watchlist": "Obserwowane",
+       "prefs-editwatchlist": "Edycja listy obserwowanych",
+       "prefs-editwatchlist-label": "Edytuj wpisy na Twojej liście obserwowanych:",
+       "prefs-editwatchlist-edit": "Przejrzyj i usuń strony z listy obserwowanych",
+       "prefs-editwatchlist-raw": "Tekstowy edytor obserwowanych",
+       "prefs-editwatchlist-clear": "Wyczyść listę obserwowanych",
        "prefs-watchlist-days": "Liczba dni widocznych na liście obserwowanych:",
        "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|dzień|dni}}",
        "prefs-watchlist-edits": "Liczba edycji pokazywanych w rozszerzonej liście obserwowanych:",
        "recentchangesdays-max": "(maksymalnie $1 {{PLURAL:$1|dzień|dni}})",
        "recentchangescount": "Domyślna liczba wyświetlanych edycji:",
        "prefs-help-recentchangescount": "Uwzględnia ostatnie zmiany, historię stron i rejestry.",
-       "prefs-help-watchlist-token2": "To jest tajny klucz umożliwiający dostęp do kanału internetowego zmian w obserwowanych przez ciebie stronach.\nKażdy, kto go zna, będzie mógł je zobaczyć, więc zachowaj go dla siebie.\n[[Special:ResetTokens|Kliknij tu, jeśli musisz go zresetować]].",
+       "prefs-help-watchlist-token2": "To jest tajny klucz umożliwiający dostęp do kanału internetowego zmian w obserwowanych przez Ciebie stronach.\nKażdy, kto go zna, będzie mógł je zobaczyć, więc zachowaj go dla siebie.\n[[Special:ResetTokens|Kliknij tu, jeśli musisz go zresetować]].",
        "savedprefs": "Twoje preferencje zostały zapisane.",
        "timezonelegend": "Strefa czasowa:",
        "localtime": "Czas lokalny:",
        "right-protect": "Zmiana poziomu zabezpieczenia i edycja stron zabezpieczonych kaskadowo",
        "right-editprotected": "Edycja stron zabezpieczonych na poziomie „{{int:protect-level-sysop}}”",
        "right-editsemiprotected": "Edycja stron zabezpieczonych na poziomie „{{int:protect-level-autoconfirmed}}”",
+       "right-editcontentmodel": "Edycja modelu zawartości strony",
        "right-editinterface": "Edycja interfejsu użytkownika",
        "right-editusercssjs": "Edycja plików CSS i JS innych użytkowników",
        "right-editusercss": "Edycja plików CSS innych użytkowników",
        "action-viewmywatchlist": "zobaczenia swojej listy obserwowanych stron",
        "action-viewmyprivateinfo": "zobaczenia swoich prywatnych danych",
        "action-editmyprivateinfo": "edycji swoich prywatnych danych",
+       "action-editcontentmodel": "edycji modelu zawartości strony",
        "action-managechangetags": "utwórz lub usuń znaczniki z bazy danych",
        "nchanges": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od ostatniej wizyty}}",
        "unusedimages": "Nieużywane pliki",
        "wantedcategories": "Brakujące kategorie",
        "wantedpages": "Najpotrzebniejsze strony",
+       "wantedpages-summary": "Najczęściej linkowane nieistniejące strony, z wyłączeniem stron, do których linkują wyłącznie przekierowania. Lista nieistniejących stron, do których linkują przekierowania, znajduje się na [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Nieprawidłowy tytuł wśród wyników – $1",
        "wantedfiles": "Potrzebne pliki",
        "wantedfiletext-cat": "Następujące pliki są używane, ale nie istnieją. Pliki z obcych repozytoriów mogą być wymienione pomimo istnienia. Takie fałszywe wyniki zostaną <del>przekreślone</del>. Ponadto strony, które osadzają pliki, które nie istnieją, są wymienione w [[:$1]].",
        "namespace": "Przestrzeń nazw",
        "invert": "odwróć wybór",
        "tooltip-invert": "Zaznacz to pole, aby ukryć zmiany na stronach w wybranych przestrzeniach nazw (oraz związanych z nimi innymi przestrzeniami nazw, jeśli zaznaczono)",
+       "tooltip-whatlinkshere-invert": "Zaznacz to pole, aby ukryć linki do stron z wybranej przestrzeni nazw.",
        "namespace_association": "powiązana przestrzeń nazw",
        "tooltip-namespace_association": "Zaznacz to pole, aby uwzględnić strony dyskusji i tematu związane z wybranymi przestrzeniami nazw",
        "blanknamespace": "(Główna)",
        "sp-contributions-newbies-sub": "Dla nowych użytkowników",
        "sp-contributions-newbies-title": "Wkład nowych użytkowników",
        "sp-contributions-blocklog": "blokady",
-       "sp-contributions-suppresslog": "stłumiony wkład użytkownika",
+       "sp-contributions-suppresslog": "utajniony wkład użytkownika",
        "sp-contributions-deleted": "usunięty wkład użytkownika",
        "sp-contributions-uploads": "przesłane pliki",
        "sp-contributions-logs": "rejestry",
        "thumbnail-temp-create": "Nie można utworzyć pliku tymczasowego miniatury",
        "thumbnail-dest-create": "Nie można zapisać miniatury do miejsca docelowego",
        "thumbnail_invalid_params": "Nieprawidłowe parametry miniatury",
+       "thumbnail_toobigimagearea": "Plik z wymiarami większymi niż $1",
        "thumbnail_dest_directory": "Nie można utworzyć katalogu docelowego",
        "thumbnail_image-type": "Grafika tego typu nie jest obsługiwana",
        "thumbnail_gd-library": "Niekompletna konfiguracja biblioteki GD – brak funkcji $1",
        "thumbnail_image-missing": "Chyba brakuje pliku $1",
        "thumbnail_image-failure-limit": "Ostatnio było zbyt wielu nieudanych prób ($1 lub więcej) utworzenia miniaturki. Spróbuj ponownie później.",
        "import": "Import stron",
-       "importinterwiki": "Import transwiki",
+       "importinterwiki": "Import z innej wiki",
        "import-interwiki-text": "Wybierz wiki i nazwę strony do importowania.\nDaty oraz nazwy autorów zostaną zachowane.\nWszystkie operacje importu transwiki są odnotowywane w [[Special:Log/import|rejestrze importu]].",
        "import-interwiki-sourcewiki": "Źródłowa wiki:",
        "import-interwiki-sourcepage": "Strona źródłowa:",
        "importcantopen": "Nie można otworzyć importowanego pliku",
        "importbadinterwiki": "Błędny link interwiki",
        "importsuccess": "Import zakończony powodzeniem!",
-       "importnosources": "MożliwoÅ\9bÄ\87 bezpoÅ\9bredniego importu historii zostaÅ\82a wyÅ\82Ä\85czona, ponieważ nie zdefiniowano ÅºródÅ\82a.",
+       "importnosources": "MożliwoÅ\9bÄ\87 bezpoÅ\9bredniego importu historii zostaÅ\82a wyÅ\82Ä\85czona, ponieważ nie zdefiniowano Å¼adnych wiki, z których można byÅ\82oby importowaÄ\87.",
        "importnofile": "Importowany plik nie został przesłany.",
        "importuploaderrorsize": "Przesyłanie pliku importowanego zawiodło. Jest większy niż dopuszczalny rozmiar dla przesyłanych plików.",
        "importuploaderrorpartial": "Przesyłanie pliku importowanego zawiodło. Został przesłany tylko częściowo.",
        "import-rootpage-nosubpage": "Przestrzeń nazw \"$1\" strony głównej nie dopuszcza stron podrzędnych.",
        "importlogpage": "Rejestr importu",
        "importlogpagetext": "Rejestr przeprowadzonych importów stron z innych serwisów wiki.",
-       "import-logentry-upload": "zaimportował(a) [[$1]] przez pobieranie plików",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|wersja|wersje|wersji}}",
-       "import-logentry-interwiki": "zaimportował(a) $1 używając transwiki",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|wersja|wersje|wersji}} z $2",
        "javascripttest": "Testowanie JavaScript",
        "javascripttest-pagetext-noframework": "Ta strona jest zarezerwowana dla wykonywania testów JavaScript.",
        "tooltip-n-portal": "O projekcie, co możesz zrobić, gdzie możesz znaleźć informacje",
        "tooltip-n-currentevents": "Informacje o aktualnych wydarzeniach",
        "tooltip-n-recentchanges": "Lista ostatnich zmian na {{GRAMMAR:MS.lp|{{SITENAME}}}}.",
-       "tooltip-n-randompage": "Pokaż stronę wybraną losowo",
+       "tooltip-n-randompage": "Załaduj losową stronę",
        "tooltip-n-help": "Tutaj możesz się dowiedzieć wielu rzeczy.",
        "tooltip-t-whatlinkshere": "Pokaż listę wszystkich stron linkujących do tej strony",
        "tooltip-t-recentchangeslinked": "Ostatnie zmiany w stronach, do których ta strona linkuje",
        "tooltip-t-contributions": "Pokaż listę edycji tego użytkownika",
        "tooltip-t-emailuser": "Wyślij e‐mail do tego użytkownika",
        "tooltip-t-info": "Więcej informacji na temat tej strony",
-       "tooltip-t-upload": "Prześlij plik",
+       "tooltip-t-upload": "Prześlij pliki",
        "tooltip-t-specialpages": "Lista wszystkich specjalnych stron",
        "tooltip-t-print": "Wersja do wydruku",
        "tooltip-t-permalink": "Stały link do tej wersji strony",
        "spam_blanking": "Wszystkie wersje zawierały odnośniki do $1. Czyszczenie strony.",
        "spam_deleting": "Wszystkie wersje zawierały linki do $1, usuwam.",
        "simpleantispam-label": "Filtr antyspamowy.\n'''NIE''' wpisuj tu nic!",
-       "pageinfo-title": "Informacje o â\80\9e$1â\80\9c",
+       "pageinfo-title": "Informacje o â\80\9e$1â\80\9d",
        "pageinfo-not-current": "Niestety, te informacje nie są dostępne dla starych wersji stron.",
        "pageinfo-header-basic": "Podstawowe informacje",
        "pageinfo-header-edits": "Historia edycji",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|dyskusja]])",
        "duplicate-defaultsort": "Uwaga: Domyślnym kluczem sortowania będzie „$2” i zastąpi on wcześniej wykorzystywany klucz „$1”.",
        "duplicate-displaytitle": "<strong>Uwaga:</strong> Wyświetlenie tytułu „$2” powoduje nadpisanie wcześniej wyświetlanego tytułu „$1”.",
+       "invalid-indicator-name": "<strong>Błąd:</strong> Atrybut stanu strony <code>name</code> nie może być pusty.",
        "version": "Wersja oprogramowania",
        "version-extensions": "Zainstalowane rozszerzenia",
        "version-skins": "Zainstalowane skórki",
        "version-parser-function-hooks": "Funkcje haków analizatora składni (ang. parser function hooks)",
        "version-hook-name": "Nazwa haka (ang. hook name)",
        "version-hook-subscribedby": "Zapotrzebowany przez",
-       "version-version": "(Wersja $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[bez nazwy]",
        "version-license": "Licencja MediaWiki",
        "version-ext-license": "Licencja",
        "intentionallyblankpage": "Tę stronę umyślnie pozostawiono pustą.",
        "external_image_whitelist": " #Pozostaw tę linię dokładnie tak, jak jest.<pre>\n#Wstaw poniżej fragmenty wyrażeń regularnych (tylko to, co znajduje się między //).\n#Wyrażenia te zostaną dopasowane do adresów URL zewnętrznych (bezpośrednio linkowanych) grafik.\n#Dopasowane adresy URL zostaną wyświetlone jako grafiki, w przeciwnym wypadku będzie pokazany jedynie link do grafiki.\n#Linie zaczynające się od # są traktowane jako komentarze.\n#We wpisach ma znaczenie wielkość znaków.\n\n#Wstaw wszystkie deklaracje wyrażeniami regularnymi poniżej tej linii. Pozostaw tę linię dokładnie tak, jak jest.</pre>",
        "tags": "Sprawdź zmiany w oparciu o wzorce tekstu",
-       "tag-filter": "Filtr [[Special:Tags|wzorców tekstu]]",
+       "tag-filter": "Filtr [[Special:Tags|znaczników]]",
        "tag-filter-submit": "Filtr",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Znacznik|Znaczniki}}]]: $2)",
        "tags-title": "Znaczniki",
        "tags-actions-header": "Działania",
        "tags-active-yes": "Tak",
        "tags-active-no": "Nie",
+       "tags-source-extension": "Określony przez rozszerzenie",
+       "tags-source-manual": "Są wprowadzane ręcznie przez uczestników i boty",
+       "tags-source-none": "Nieużywany",
        "tags-edit": "edytuj",
        "tags-delete": "usuń",
        "tags-activate": "aktywuj",
        "tags-hitcount": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}",
        "tags-manage-no-permission": "Nie masz uprawnień do zarządzaniem zmianami znaczników.",
        "tags-create-heading": "Utwórz nowy znacznik",
+       "tags-create-explanation": "Nowe znaczniki będą dostępne domyślnie dla użytkowników i botów.",
        "tags-create-tag-name": "Nazwa znacznika:",
        "tags-create-reason": "Powód:",
        "tags-create-submit": "Utwórz",
        "tags-create-invalid-chars": "Nazwy znaczników nie mogą zawierać przecinków (<code>,</code>) ani ukośników (<code>/</code>).",
        "tags-create-invalid-title-chars": "Nazwy znaczników nie mogą zawierać znaków, które nie mogą być używane w tytułach stron.",
        "tags-create-already-exists": "Znacznik „$1” już istnieje.",
+       "tags-create-warnings-above": "Następujące {{PLURAL:$2|ostrzeżenie jest |ostrzeżenia są}} wynikiem próby utworzenia znacznika \"$1\":",
        "tags-create-warnings-below": "Czy chcesz kontynuować tworzenie znacznika?",
        "tags-delete-title": "Usuwanie znacznika",
        "tags-delete-explanation-initial": "Zamierzasz usunąć znacznik „$1” z bazy danych.",
+       "tags-delete-explanation-in-use": "It will be removed from {{PLURAL:$2|$2 revision or log entry|all $2 revisions and/or log entries}} to which it is currently applied.",
+       "tags-delete-explanation-warning": "To działanie jest <strong>nieodwracalne</strong> i <strong>nie może być wycofane</strong>, nawet przez administratorów bazy danych. Upewnij się, że chcesz usunąć te dane.",
+       "tags-delete-explanation-active": "<strong>Znacznik \"$1\" wciąż jest aktywny i będzie stosowany w przyszłości. </strong> Dla zaprzestania jego stosowania należy przejść do miejsca, w którym znacznik określono jako stosowany i usunąć tam to wskazanie.",
        "tags-delete-reason": "Powód:",
        "tags-delete-submit": "Nieodwracalnie usuń ten znacznik",
+       "tags-delete-not-allowed": "Znaczniki zdefiniowane przez rozszerzenie nie mogą być usunięte chyba że dane rozszerzenie jawnie nas to zezwala.",
        "tags-delete-not-found": "Znacznik „$1” nie istnieje.",
        "tags-delete-too-many-uses": "Znacznik „$1” jest stosowany w więcej niż {{PLURAL:$2|jednej wersji|$2 wersjach}}, co oznacza, że nie może być usunięty.",
+       "tags-delete-warnings-after-delete": "Znacznik \"$1\" został usunięty pomyślnie, ale {{PLURAL:$2|stwierdzono następujące ostrzeżenie|stwierdzono następujące ostrzeżenia}}:",
        "tags-activate-title": "Aktywacja znacznika",
        "tags-activate-question": "Zamierzasz aktywować znacznik „$1”.",
        "tags-activate-reason": "Powód:",
        "revdelete-uname-unhid": "wycofano ukrycie nazwy użytkownika",
        "revdelete-restricted": "ograniczono widoczność dla administratorów",
        "revdelete-unrestricted": "wycofano ograniczenie widoczności dla administratorów",
+       "logentry-block-block": "$1 {{GENDER:$2|zablokował|zablokowała|zablokował(a)}} {{GENDER:$4|$3}}, czas blokady: $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|zdjął|zdjęła}} blokadę z {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|zmienił|zmieniła}} ustawienia blokady dla {{GENDER:$4|$3}}, czas blokady: $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|zablokował|zablokowała}} {{GENDER:$4|$3}}, czas blokady: $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|zmienił|zmieniła}} ustawienia blokady dla {{GENDER:$4|$3}}, czas blokady: $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|zaimportował|zaimportowała}} $3 poprzez przesłanie pliku",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|zaimportował|zaimportowała}} $3 z innej wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|scalił|scaliła}} stronę $3 do $4 (wersje do $5)",
        "logentry-move-move": "$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 do $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 na $4, bez pozostawienia przekierowania pod starym tytułem",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|przesłał|przesłała}} nową wersję $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|przesłał|przesłała}} $3",
        "log-name-managetags": "Rejestr zarządzania znacznikami",
+       "log-description-managetags": "Na tej stronie są wymienione zadania związane z zarządzaniem [[Special:Tags|znacznikami]]. Dziennik (log) zawiera tylko działania wykonane ręcznie przez administratora; znaczniki mogą być tworzone lub usuwane przez oprogramowanie wiki bez dodawania wpisów w dzienniku (logu).",
        "logentry-managetags-create": "$1 {{GENDER:$2|utworzył|utworzyła}} znacznik „$4”",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|usunął|usunęła}} znacznik \"$4\" (wykluczony z $5 {{PLURAL:$5|wersji lub wpisu dziennika|wersji i/lub wpisów dziennika}})",
+       "logentry-managetags-activate": "$1 aktywował{{GENDER:$2||a}} znacznik \"$4\" do korzystania przez uczestników i boty",
+       "logentry-managetags-deactivate": "$1 wyłączył{{GENDER:$2||a}} znacznik \"$4\" z korzystania przez uczestników i boty",
        "rightsnone": "brak",
        "revdelete-summary": "opis zmian",
+       "feedback-adding": "Dodawanie opinii do strony...",
+       "feedback-back": "Wstecz",
+       "feedback-bugcheck": "Świetnie! Tylko sprawdź, czy nie jest to jeden z już [$1 znanych błędów].",
+       "feedback-bugnew": "Sprawdziłam(łem). Zgłoś nowy błąd",
        "feedback-bugornote": "Jeśli jesteś w stanie szczegółowo opisać problem techniczny, proszę [$1 zgłoś błąd].\nW przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zostanie dodany do strony \"[$3  $2]\", wraz z nazwą użytkownika.",
-       "feedback-subject": "Temat",
-       "feedback-message": "Wiadomość:",
        "feedback-cancel": "Anuluj",
-       "feedback-submit": "Prześlij opinię",
-       "feedback-adding": "Dodawanie opinii do strony...",
+       "feedback-close": "Gotowe",
+       "feedback-external-bug-report-button": "Zgłoś problem techniczny",
+       "feedback-dialog-title": "Prześlij opinię",
+       "feedback-dialog-intro": "Możesz użyć tego prostego formularza w celu zgłoszenia swojej opinii. Twój komentarz, wraz z Twoją nazwą użytkownika (albo numerem IP) pojawi się na stronie $1.",
+       "feedback-error-title": "Błąd",
        "feedback-error1": "Błąd – nierozpoznana odpowiedź API",
        "feedback-error2": "Błąd – edycja nieudana",
        "feedback-error3": "Błąd – brak odpowiedzi API",
+       "feedback-message": "Wiadomość:",
+       "feedback-subject": "Temat",
+       "feedback-submit": "Wyślij",
+       "feedback-terms": "Rozumiem, że mój identyfikator User Agenta zawiera informacje o wersjach mojej przeglądarki i systemu operacyjnego oraz że będzie udostępniony publicznie wraz z moim komentarzem.",
+       "feedback-termsofuse": "Zgadzam się udostępnić komentarz zgodnie z warunkami korzystania.",
        "feedback-thanks": "Dziękujemy! Twoja opinia została opublikowana na stronie \"[$2 $1]\".",
-       "feedback-close": "Gotowe",
-       "feedback-bugcheck": "Świetnie! Tylko sprawdź, czy nie jest to jeden z już [$1 znanych błędów].",
-       "feedback-bugnew": "Sprawdziłam(łem). Zgłoś nowy błąd",
+       "feedback-thanks-title": "Dziękujemy!",
+       "feedback-useragent": "Aplikacja klienta:",
        "searchsuggest-search": "Szukaj",
        "searchsuggest-containing": "zawierające...",
        "api-error-badaccess-groups": "Nie masz uprawnień aby przesyłać pliki do tej wiki.",
        "api-error-stashfailed": "Błąd wewnętrzny – serwer nie mógł zapisać pliku tymczasowego.",
        "api-error-publishfailed": "Błąd wewnętrzny: serwer nie mógł zapisać pliku tymczasowego.",
        "api-error-stasherror": "Wystąpił błąd podczas przesyłania pliku.",
+       "api-error-stashedfilenotfound": "Nie odnaleziono pliku zapasowego podczas próby jego pobrania z archiwum.",
+       "api-error-stashpathinvalid": "Ścieżka do pliku zapasowego jest błędna.",
+       "api-error-stashfilestorage": "Wystąpił błąd podczas przesyłania pliku do archiwum.",
+       "api-error-stashzerolength": "Serwer nie może zapisać pliku zapasowego do archiwum, gdyż ma on zerową długość.",
+       "api-error-stashnotloggedin": "Musisz się zalogować, aby móc zapisać plik zapasowy do archiwum.",
+       "api-error-stashwrongowner": "Plik w archiwum, do którego próbujesz uzyskać dostęp, nie należy do ciebie.",
+       "api-error-stashnosuchfilekey": "Klucz zbioru w archiwum, do którego próbujesz uzyskać dostęp, nie należy do ciebie.",
        "api-error-timeout": "Serwer nie odpowiedział w oczekiwanym czasie.",
        "api-error-unclassified": "Wystąpił nieznany błąd",
        "api-error-unknown-code": "Błąd nieznany – „$1”",
        "expand_templates_generate_xml": "Pokaż drzewo analizatora składni w formacie XML",
        "expand_templates_generate_rawhtml": "Pokaż surowy HTML",
        "expand_templates_preview": "Podgląd",
+       "expand_templates_preview_fail_html": "<em>Ponieważ {{SITENAME}} ma włączony surowy kod HTML i zaistniała strata danych z sesji, podgląd jest ukryty jako zabezpieczenie przed atakiem JavaScript.</em>\n\n<strong>Jeśli to jest próba słusznego podglądu, proszę spróbować ponownie.</strong>\nJeśli to nadal nie działa, spróbuj [[Special:UserLogout|wylogować się]] i zalogować się z powrotem.",
        "pagelanguage": "Wybór języka strony",
        "pagelang-name": "Strona",
        "pagelang-language": "Język",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''wyłączone''')",
        "mediastatistics": "Statystyki mediów",
        "mediastatistics-summary": "Statystyki dotyczące przesłanych typów plików. Dotyczą one tylko najnowszej wersji pliku. Starsze lub usunięte wersje plików nie są uwzględniane.",
-       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajty/ów}} ($2; $3%)",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajty|$1 bajtów}} ($2; $3%)",
        "mediastatistics-table-mimetype": "Typ MIME",
        "mediastatistics-table-extensions": "Możliwe rozszerzenia",
        "mediastatistics-table-count": "Liczba plików",
        "json-error-syntax": "Błąd składni",
        "json-error-utf8": "Nieprawidłowe znaki UTF-8, prawdopodobnie niepoprawnie zakodowane",
        "json-error-recursion": "Jedno lub więcej rekurencyjnych odniesień musi być zakodowane.",
-       "json-error-unsupported-type": "Podano wartość typu, która nie mogła być kodowana"
+       "json-error-unsupported-type": "Podano wartość typu, która nie mogła być kodowana",
+       "headline-anchor-title": "Link do tej sekcji",
+       "special-characters-group-latin": "Łacińskie",
+       "special-characters-group-latinextended": "Łacińskie (rozszerzony)",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symbole",
+       "special-characters-group-greek": "Greckie",
+       "special-characters-group-cyrillic": "Cyrylica",
+       "special-characters-group-arabic": "Arabskie",
+       "special-characters-group-arabicextended": "Arabskie (rozszerzony)",
+       "special-characters-group-persian": "Perskie",
+       "special-characters-group-hebrew": "Hebrajskie",
+       "special-characters-group-bangla": "Bengalski",
+       "special-characters-group-tamil": "Tamilski",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Syngaleskie",
+       "special-characters-group-gujarati": "Gudźarackie",
+       "special-characters-group-devanagari": "Dewanagari",
+       "special-characters-group-thai": "Tajskie",
+       "special-characters-group-lao": "Laotańskie",
+       "special-characters-group-khmer": "Khmerskie",
+       "special-characters-title-endash": "krótka kreska",
+       "special-characters-title-emdash": "długa kreska",
+       "special-characters-title-minus": "minus"
 }
index cb09a79..04b979d 100644 (file)
        "disclaimers": "Avertense",
        "disclaimerpage": "Project:Avertense generaj",
        "edithelp": "Agiut a la modìfica",
+       "helppage-top-gethelp": "Agiut",
        "mainpage": "Intrada",
        "mainpage-description": "Intrada",
        "policy-url": "Project:Régole",
        "readonly_lag": "La base ëd dat a l'é staita blocà n'automàtich antramentr che le màchine dël sircùit secondari as buto an pari con cole dël prinsipal",
        "internalerror": "Eror intern",
        "internalerror_info": "Eror antern: $1",
+       "internalerror-fatal-exception": "Ecession fatal ëd tipo «$1»",
        "filecopyerror": "A l'é pa stàit possìbil copié l'archivi «$1» coma «$2».",
        "filerenameerror": "A l'é pa podusse cangeje nòm a l'archivi «$1» an «$2».",
        "filedeleteerror": "A l'é pa podusse scancelé l'archivi «$1».",
        "wrongpassword": "La ciav batùa a l'é pa giusta.\nChe a preuva torna, për piasì.",
        "wrongpasswordempty": "A l'ha butà na ciav veujda. Për piasì, che a preuva torna.",
        "passwordtooshort": "Le ciav a devo avèj almanch {{PLURAL:$1|1 caràter|$1 caràter}}.",
+       "passwordtoolong": "Le ciav a peulo nen esse pi longhe che {{PLURAL:$1|1 caràter|$1 caràter}}.",
        "password-name-match": "Soa ciav a dev esse diferenta da sò stranòm.",
        "password-login-forbidden": "L'usagi ëd së stranòm d'utent e ëd sa ciav a son ëstàit proibì.",
        "mailmypassword": "Riamposté la ciav",
        "missingcommentheader": "'''Ch'a arcòrda:''' A l'ha pa dàit ëd soget o d'intestassion për cost coment.\nSe a sgnaca torna «{{int:savearticle}}», soa modìfica a sarà salvà sensa gnun-a intestassion.",
        "summary-preview": "Preuva dël resumé:",
        "subject-preview": "Preuva dl'oget/intestassion:",
+       "previewerrortext": "A l'é rivaje n'eror durant ël tentativ ëd previsualisassion ëd soe modìfiche.",
        "blockedtitle": "L'utent a l'é blocà.",
        "blockedtext": "'''Sò stranòm ò pura adrëssa IP a l'é stàit blocà.'''\n\nËl blocagi a l'é stàit fàit da $1.\nComa rason a l'ha butà ''$2''.\n\n* Blocà a parte dal: $8\n* Fin al: $6\n* As veul blochesse: $7\n\nA peul butesse an contat con $1 ò pura n'àotr [[{{MediaWiki:Grouppage-sysop}}|aministrator]] për discute ëd sò blocagi.\nCh'a ten-a present ch'a podrà dovré la fonsion «mandeje un messagi ëd pòsta eletrònica a l'utent» mach s'a l'ha specificà n'adrëssa ëd vàlida ant [[Special:Preferences|sò gust]] e se sta fonsion a l'é nen ëstàita blocà 'cò chila.\nSoa adrëssa IP corenta a l'é $3, e l'identificativ dël blocagi a l'é #$5.\nPër piasì, ch'a-j buta tut e doj ant soe comunicassion ant sta question-sì.",
        "autoblockedtext": "Soa adrëssa IP a l'è stàita blocà n'automàtich ën essend ch'a l'era dovrà da n'àutr utent, che a l'é stàit blocà da $1.\nLa rason ësmonùa a l'é\n\n:''$2''\n\n* Ël blocagi a part dai: $8\n* A va a la fin ai: $6\n* As veul blochesse: $7\n\nA peul contaté $1 ò pura n'àotr dj'[[{{MediaWiki:Grouppage-sysop}}|aministrator]] për discute d'ës blocagi.\n\nCh'a varda mach ch'a peul nen dovré l'opsion ëd «mandeje un mëssagi a l'utent» se a l'ha nen n'adrëssa ëd pòsta eletrònica vàlida registrà ant [[Special:Preferences|sò gust]] o se chiel a l'é stàit blocà ëdcò dal dovrela.\n\nSoa adrëssa IP corenta a l'é $3, e sò nùmer ëd blocagi a l'é $5.\nPër piasì, ch'a buta sempe tùit ij detaj an tute j'arceste ch'a farà.",
        "notextmatches": "La vos che a l'ha ciamà a l'é pa trovasse antrames aj test dj'artìcoj",
        "prevn": "ij {{PLURAL:$1|$1}} prima",
        "nextn": "ij {{PLURAL:$1|$1}} peuj",
+       "prev-page": "pàgina andré",
+       "next-page": "pàgina anans",
        "prevn-title": "$1 {{PLURAL:$1|arzultà|arzultà}} prima",
        "nextn-title": "$1 {{PLURAL:$1|arzultà|arzultà}} apress",
        "shown-title": "Smon-e $1 {{PLURAL:$1|arzultà|arzultà}} për pàgina",
        "unusedimages": "Figure nen dovrà",
        "wantedcategories": "Categorìe dont a fa da manca",
        "wantedpages": "Artìcoj pì ciamà",
+       "wantedpages-summary": "Lista ëd pàgine nen esistente con ël pi grand nùmer ëd liure vers ëd lor, gavà le pàgine vers le quaj a ponto mach dle ridiression. Për na lista dle pàgine nen esistente a le quaj a ponto dle ridiression, vëdde [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Tìtol nen vàlid ant l'ansema dj'arzultà: $1",
        "wantedfiles": "Archivi pì ciamà",
        "wantedfiletext-cat": "J'archivi ch'a ven-o a son dovrà ma a esisto pa. J'archivi dai sò depòsit estern a peulo esse listà sensa consideré l'esistensa. Chèich fàuss positiv a saran <del>sganfà</del>. An pi, le pàgine ch'a conten-o dj'archivi ch'a esisto pa a son listà an [[:$1]].",
        "emailccsubject": "Còpia dël mëssagi mandà a $1: $2",
        "emailsent": "Mëssagi eletrònich mandà",
        "emailsenttext": "Sò mëssagi eletrònich a l'é stàit mandà",
-       "emailuserfooter": "Ës mëssagi eletrònich a l'é stàit mandà da $1 a $2 con la fonsion «Mandé un mëssagi eletrònich a l'utent» ëd {{SITENAME}}.",
+       "emailuserfooter": "Ës mëssagi eletrònich a l'é stàit mandà da $1 a $2 con la fonsion «{{int:emailpage}}» ëd {{SITENAME}}.",
        "usermessage-summary": "A l'ha lassà un mëssagi ëd sistema.",
        "usermessage-editor": "Mëssagerìa ëd sistema",
        "watchlist": "Ròba che as ten sot-euj",
        "thumbnail_image-missing": "L'archivi a smija ch'a manca: $1",
        "thumbnail_image-failure-limit": "A-i son ëstaje ëd recent tròpi tentativ falì ($1 o pi) ëd rende costa plancia. Për piasì, ch'a preuva torna pi tard.",
        "import": "Amportassion ëd pàgine",
-       "importinterwiki": "Amportassion da wiki diferente",
-       "import-interwiki-text": "Che a selession-a na wiki e ël tìtol dla pàgina da amporté.\nDate dle revision e stranòm dj'editor a resteran piàjit sù 'cò lor.\nTute j'amportassion antra wiki diferente a resto marcà ant ël [[Special:Log/import|Registr dj'amportassion]].",
+       "importinterwiki": "Amportassion da n'àutra wiki",
+       "import-interwiki-text": "Che a selession-a na wiki e ël tìtol dla pàgina da amporté.\nDate dle revision e stranòm dj'editor a resteran piàjit sù 'cò lor.\nTute j'amportassion da d'àutre wiki a resto marcà ant ël [[Special:Log/import|Registr dj'amportassion]].",
        "import-interwiki-sourcewiki": "Wiki sorgiss:",
        "import-interwiki-sourcepage": "Pàgina sorgiss:",
        "import-interwiki-history": "Copié tute le revision ëd la stòria ëd costa pàgina",
        "importcantopen": "L'archivi da amporté a l'é pa podusse deurbe",
        "importbadinterwiki": "Liura antra wiki diferente cioca",
        "importsuccess": "Amportassion finìa!",
-       "importnosources": "A l'é pa stàita definìa gnun-a sorgiss d'amportassion da na wiki diferenta, e carié mach le stòrie as peul nen.",
+       "importnosources": "A l'é stàita definìa gnun-a wiki da la qual amporté, e carié mach le stòrie as peul nen.",
        "importnofile": "Pa gnun archivi d'amportassion carià.",
        "importuploaderrorsize": "A l'é falìe la caria dl'archivi d'amporté. L'archivi a resta pì gròss che lòn ch'as peul cariesse.",
        "importuploaderrorpartial": "A l'é falìe la caria dl'archivi d'amporté. L'archivi a resta carià mach për un tòch.",
        "import-rootpage-nosubpage": "Lë spassi nominal «$1» ëd la pàgina prinsipal a përmët pa dle sot-pagine.",
        "importlogpage": "Registr dj'amportassion",
        "importlogpagetext": "Amportassion aministrative ëd pàgine e ëd soa stòria da dj'àutre wiki.",
-       "import-logentry-upload": "a l'ha amportà [[$1]] con un càrich d'archivi",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision}} amportà",
-       "import-logentry-interwiki": "Amportà da n'àutra wiki $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision}} amportà da $2",
        "javascripttest": "Preuva ëd JavaScript",
        "javascripttest-pagetext-noframework": "Costa pàgina a l'é arservà për fé dle preuve JavaScript.",
        "tags-create-tag-name": "Nòm ëd la tichëtta",
        "tags-create-reason": "Rason:",
        "tags-create-submit": "Creé",
+       "tags-create-no-name": "A dev spessifiché un nòm ëd tichëtta.",
+       "tags-create-invalid-chars": "Ij nòm ëd tichëtta a devo nen conten-e ëd còme (<code>,</code>) nì ëd bare anans (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Ij nòm ëd tichëtta a devo nen conten-e dij caràter ch'a peulo nen esse dovrà ant ij tìtok dle pàgine.",
+       "tags-create-already-exists": "La tichëtta «$1» a esist già.",
+       "tags-create-warnings-above": "{{PLURAL:$2|L'avertensa|J'avertense}} sì-dapress a son ëstàite rancontrà durant ël tentativ ëd creassion ëd la tichëtta «$1»:",
+       "tags-create-warnings-below": "Veul-lo andé anans ant la creassion dla tichëtta?",
+       "tags-delete-title": "Dëscancelé la tichëtta",
+       "tags-delete-explanation-initial": "A l'é a brus ëd dëscancelé la tichëtta «$1» da la base ëd dàit.",
+       "tags-delete-explanation-in-use": "A sarà gavà da {{PLURAL:$2|$2 revision|tute le $2 revisions}} o vos d'argistr a la quaj a l'é atualman aplicà.",
+       "tags-delete-explanation-warning": "Costa assion a l'é <strong>ireversìbij</strong> e <strong>a peul nen esse anulà</strong>, gnanca da l'aministrator ëd base ëd dàit. Ch'a sia sigur che costa a l'é la tichëtta ch'a veul eliminé.",
+       "tags-delete-explanation-active": "<strong>La tichëtta «$1» a l'é ancor ativa, e a seghitrà a esse aplicà ant l'avnì.</strong> Për fé chité sòn, ch'a vada ant ij pòst andoa la tichëtta a l'é aplicà, e ch'a la disativa ambelelà.",
+       "tags-delete-reason": "Rason:",
+       "tags-delete-submit": "Eliminé costa tichëtta ëd fasson ireversìbil",
+       "tags-delete-not-allowed": "Le tichëtte definìe da n'estension a peulo nen esse dëscancelà, gavà che l'estension a lo permëtta ëd fasson esplìssita.",
+       "tags-delete-not-found": "La tichëtta «$1» a esist pa.",
+       "tags-delete-too-many-uses": "La tichëtta «$1» a l'é aplicà a pi che $2 {{PLURAL:$2|revision}}, lòn ch'a veul dì ch'a peul nen esse eliminà.",
+       "tags-delete-warnings-after-delete": "La tichëtta «$1» a l'é stàita eliminà për da bin, ma {{PLURAL:$2|a l'é rancontrasse l'|as son rancontrasse j'}}avis sì-dapress:",
+       "tags-activate-title": "Ativé la tichëtta",
+       "tags-activate-question": "A l'é a brus d'ativé la tichëtta «$1».",
+       "tags-activate-reason": "Rason:",
+       "tags-activate-not-allowed": "A l'é nen possìbil ativé la tichëtta «$1».",
+       "tags-activate-not-found": "La tichëtta «$1» a esist nen.",
+       "tags-activate-submit": "Ativé",
+       "tags-deactivate-title": "Disativé la tichëtta",
+       "tags-deactivate-question": "A sta për disativé la tichëtta «$1».",
+       "tags-deactivate-reason": "Rason:",
+       "tags-deactivate-not-allowed": "A l'é nen possìbil disativé la tichëtta «$1».",
+       "tags-deactivate-submit": "Disativé",
        "comparepages": "Confronté dle pàgine",
        "compare-page1": "Pàgina 1",
        "compare-page2": "Pàgina 2",
        "revdelete-uname-unhid": "stranòm dëscoatà",
        "revdelete-restricted": "restrission aplicà a j'aministrator",
        "revdelete-unrestricted": "restrission për j'aministrator gavà",
+       "logentry-block-block": "$1 {{GENDER:$2|a l'ha blocà}} {{GENDER:$4|$3}} për na durà ëd $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|a l'ha dësblocà}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|a l'ha modificà}} ij paràmeter ëd blocagi për {{GENDER:$4|$3}} con na durà ëd $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|a l'ha blocà}} {{GENDER:$4|$3}} për na durà ëd $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|a l'ha modificà}} ij paràmeter ëd blocagi për {{GENDER:$4|$3}} con na durà ëd $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|a l'ha amportà}} $3 an cariand d'archivi",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|a l'ha amportà}} $3 da n'àutra wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|a l'ha gionzù}} $3 an $4 (revision fin-a a $5)",
        "logentry-move-move": "$1 {{GENDER:$2|a l'ha tramudà}} la pàgina $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a l'ha tramudà}} la pàgina $3 a $4 sensa lassé na ridiression",
        "logentry-upload-upload": "$1 {{GENDER:$2|a l'ha carià}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|a l'ha carià}} na neuva version ëd $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|a l'ha carià}} $3",
+       "log-name-managetags": "Argistr dle modìfiche ëd tichëtte",
+       "log-description-managetags": "Costa pàgina a lista ij travaj ëd manutension gropà a le [[Special:Tags|tichëtte]]. L'argistr a conten mach j'assion fàite a man da n'aministrator; le tichëtte a peulo esse creà o eliminà dal programa wiki sensa che l'assion a sia marcà an s'argistr.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|a l'ha creà}} la tichëtta « $4 ».",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|a l'ha dëscancelà}} la tichëtta « $4 » (gavà da {{PLURAL:$5|na revision o vos d'argistr|$5 revision o vos d'argistr}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|a l'ha ativà}} la tichëtta \"$4\" për l’usagi dj'utent e dij trigomiro",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|a l'ha disativà}} la tichËtta « $4 » pour l’usagi dj'utent e dij trigomiro",
        "rightsnone": "(gnun)",
        "revdelete-summary": "resumé dla modìfica",
+       "feedback-adding": "Gionta dij coment a la pàgina...",
+       "feedback-back": "André",
+       "feedback-bugcheck": "Bin fàit! Ch'a contròla mach ch'a sia pa già un dij [$1 bigat conossù].",
+       "feedback-bugnew": "I l'heu controlà. Signalé n'eror neuv.",
        "feedback-bugornote": "S'a l'é pront a descrive un problema técnich an detaj, për piasì ch'a [$1 signala un bigat]. \nDësnò, a peul dovré ël formolari semplificà sì-sota. Sò coment a sarà giontà a la pàgina «[$3 $2]», con sò stranòm.",
-       "feedback-subject": "Soget:",
-       "feedback-message": "Mëssagi:",
        "feedback-cancel": "Anulé",
-       "feedback-submit": "Spedì ij coment",
-       "feedback-adding": "Gionta dij coment a la pàgina...",
+       "feedback-close": "Fàit",
+       "feedback-external-bug-report-button": "Presenta un travaj tècnich",
+       "feedback-dialog-title": "Spedì ij coment",
+       "feedback-dialog-intro": "A peul dovré ël formolari sempi sì-sota për spedì ij sò coment. Ij sò coment a saran giontà a la pàgina «$1», ansema a sò stranòm.",
+       "feedback-error-title": "Eror",
        "feedback-error1": "Eror: Arzultà ëd l'API nen arconossù",
        "feedback-error2": "Eror: Modìfica falìa",
        "feedback-error3": "Eror: gnun-e rispòste da l'API",
+       "feedback-error4": "Eror: Impossìbil publiché al tìtol ëd sugeriment dàit",
+       "feedback-message": "Mëssagi:",
+       "feedback-subject": "Soget:",
+       "feedback-submit": "Spediss",
+       "feedback-terms": "I capisso che j'anformassion ëd mè agent d'utent a conten-o d'anformassion an sla version precisa ëd mè navigador e sistema operativ e a saran condividùe publicament ansema ai mè coment.",
+       "feedback-termsofuse": "I son d'acòrdi a dé ij coment an acòrd con le Condission d'Usagi.",
        "feedback-thanks": "Mersì! Sò coment a l'é stàit publicà an sla pàgina \"[$2 $1]\".",
-       "feedback-close": "Fàit",
-       "feedback-bugcheck": "Bin fàit! Ch'a contròla mach ch'a sia pa già un dij [$1 bigat conossù].",
-       "feedback-bugnew": "I l'heu controlà. Signalé n'eror neuv.",
+       "feedback-thanks-title": "Mersì!",
+       "feedback-useragent": "Agent d'utent:",
        "searchsuggest-search": "Arserché",
        "searchsuggest-containing": "contenent ...",
        "api-error-badaccess-groups": "Chiel a peul pa carié d'archivi su costa wiki.",
        "json-error-utf8": "Caràter UTF-8 mal formà, miraco mal codificà",
        "json-error-recursion": "Un-a o pi rëspondense ant ël valor da codifiché",
        "json-error-inf-or-nan": "Un o pi valor NAN o INF ant ël valor da codifiché",
-       "json-error-unsupported-type": "A l'é stàit dàit un valor ëd na sòrt ch'a peul nen esse codificà"
+       "json-error-unsupported-type": "A l'é stàit dàit un valor ëd na sòrt ch'a peul nen esse codificà",
+       "headline-anchor-title": "Liura a sta session",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin ëspantià",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Sìmboj",
+       "special-characters-group-greek": "Grech",
+       "special-characters-group-cyrillic": "Sirìlich",
+       "special-characters-group-arabic": "Àrabo",
+       "special-characters-group-arabicextended": "Àrabo spantià",
+       "special-characters-group-persian": "Persian",
+       "special-characters-group-hebrew": "Ebréo",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalèis",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "tratin en",
+       "special-characters-title-emdash": "tratin em",
+       "special-characters-title-minus": "segn meno"
 }
index 9a79230..f125288 100644 (file)
@@ -7,7 +7,8 @@
                        "Rachitrali",
                        "Reedy",
                        "ZaDiak",
-                       "아라"
+                       "아라",
+                       "Amire80"
                ]
        },
        "tog-underline": "حوڑ تھلے لین:",
        "mytalk": "میریاں گلاں",
        "anontalk": "اس آئی پی آسطے گل کرو",
        "navigation": "کھوج",
-       "and": "&#32;and",
+       "and": "&#32;تے",
        "qbfind": "کھوج",
        "qbbrowse": "لبو",
        "qbedit": "لکھو",
        "delete-toobig": "ایس صفے دی اک لمبی تبدیلی دی تریخ اے $1 توں ود {{PLURAL:$1|ریوین|ریویناں}}\nایے صفیاں دے مٹان تے کج روک اے {{SITENAME }} دی اچانک خرابی توں بچن لئی۔",
        "delete-warning-toobig": "ایس صفے دی تبدیلی دی اک لمی تریخ اے۔ $1 توں ود {{PLURAL:$1|ریوین|ریویناں}}۔\nاینوں مٹان تے {{SITENAME}} دے ڈیٹا اوپریشنز چ مسلہ بن سکدا اے۔\nسوچ سمج کے اگے ودو۔",
        "rollback": "لکھائیاں واپس کرو",
-       "rollback_short": "واپس کرو",
        "rollbacklink": "واپس",
        "rollbackfailed": "واپس کرن ناکام",
        "cantrollback": "تبدیلی واپس نئیں ہوسکدی؛\nآخری لکھاری ای ایدا اکو لکھاری سی۔",
        "import-logentry-interwiki": "ٹرانسوکیڈ  $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ریوین|ریویناں }} $2 توں",
        "javascripttest": "JavaScript ٹیسٹنگ",
-       "javascripttest-title": "ٹیسٹ  $1 چلدا اے۔",
        "javascripttest-pagetext-noframework": "ایہ صفہ JavaScript  ٹیسٹاں لئی بچایا گیا اے۔",
        "javascripttest-pagetext-unknownframework": "\"$1\" انجانا ٹیسٹنگ فریمورک۔",
        "javascripttest-pagetext-frameworks": "مہربانی کرکے تھلے دتے گۓ ٹیسٹ فریمورکاں چوں اک چنو : $1",
        "javascripttest-pagetext-skins": "اپنی پسند دا کوئی نمونہ چنو جیدے تے ٹیسٹ چلن:",
        "javascripttest-qunit-intro": "mediawiki.org تے [$1 ٹسٹنگ ڈوکومنٹیشن] ویکھو۔",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
        "tooltip-pt-userpage": "میرا صفہ",
        "tooltip-pt-anonuserpage": "ورتن صفہ IP  پتے لئی تسی تبدیل کر رۓ او۔۔۔",
        "tooltip-pt-mytalk": "میریاں گلاں",
        "watchlisttools-edit": "اکھ تھلے رکھے ہوۓ صفحیاں نوں ویکھو تے تبدیل کرو",
        "watchlisttools-raw": "کچی اکھ تھلے رکھی ہوئی نو تبدیل کرو",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
-       "unknown_extension_tag": "انجان ایکسٹنشن ٹیگ \"$1\"",
        "duplicate-defaultsort": "'''خبردار:''' ڈیفالٹ چابی \"$2\" پہلی ڈیفالٹ چابی \"$1\" دے اتے لگ گئی اے۔",
        "version": "ورژن",
        "version-extensions": "انسٹالڈ کیتیاں گیاں ایکسٹنشن",
        "version-parser-function-hooks": "پاسر فنکشن ہکز",
        "version-hook-name": "ہک ناں",
        "version-hook-subscribedby": "جینے لئی",
-       "version-version": "(ورین $1)",
+       "version-version": "($1)",
        "version-license": "لائیسنس",
        "version-poweredby-credits": "ایس وکی نوں '''[https://www.mediawiki.org/ میڈیاوکی]''', copyright © 2001-$1 $2. چلاندا اے۔",
        "version-poweredby-others": "دوجے",
        "logentry-newusers-autocreate": "کھاتہ $1 اپنے آپ ای {{جنس:$2|بنایا گیا}} بنایا گیا۔",
        "rightsnone": "(کوئی وی نئیں)",
        "revdelete-summary": "لکھائی دا خلاصہ",
+       "feedback-adding": "مشورہ  صفے تے دیو۔۔۔۔۔۔۔",
+       "feedback-bugcheck": "بعوت ودیا ! صرف ایہ ویکھو جے کیا ایہ پہلے لبے ہوۓ [$1 known bugs] چو اک تے نئیں۔",
+       "feedback-bugnew": "میں ویکھیا اے۔ نویں بگ دی رپورٹ کرو۔",
        "feedback-bugornote": "اگر تسیں اک تکنیکی مسلے نوں  پوری طراں دسن لئی تیار او تے فیر مہربانی کرکے [$1 بگ بارے دسو]۔  ںئیں تے تسیں تھلے دتا گیا فارم ورتو۔ تواڈی گل صفہ \"[$3 $2]\" تے جڑے گی،  تواڈے ورتن والے ناں تے براؤزر جیہڑا تسیں ورت رۓ او۔",
-       "feedback-subject": "آرٹیکل",
-       "feedback-message": "سنیعہ:",
        "feedback-cancel": "واپس",
-       "feedback-submit": "مشورہ دیو",
-       "feedback-adding": "مشورہ  صفے تے دیو۔۔۔۔۔۔۔",
+       "feedback-close": "ہوگیا۔",
        "feedback-error1": "غلطی: اے پی آئی توں ناں پچھانے گۓ نتارے۔",
        "feedback-error2": "غلطی: تبدیلی نئیں چلی",
        "feedback-error3": "غلطی: اے پی آئی توں کوئی جواب نئیں۔",
+       "feedback-message": "سنیعہ:",
+       "feedback-subject": "آرٹیکل",
+       "feedback-submit": "مشورہ دیو",
        "feedback-thanks": "شکریہ ! تواڈی صلاع  صفہ \"[$2 $1]\" تے چاڑ دتی گئی اے۔",
-       "feedback-close": "ہوگیا۔",
-       "feedback-bugcheck": "بعوت ودیا ! صرف ایہ ویکھو جے کیا ایہ پہلے لبے ہوۓ [$1 known bugs] چو اک تے نئیں۔",
-       "feedback-bugnew": "میں ویکھیا اے۔ نویں بگ دی رپورٹ کرو۔",
        "searchsuggest-search": "کھوج",
        "searchsuggest-containing": "بند کر ریا اے۔۔۔",
        "api-error-badaccess-groups": "تھوانوں ایس وکی تے فائلاں چڑھان دی اجازت نئیں۔",
index 3c36073..d0b33ea 100644 (file)
        "delete-edit-reasonlist": "Redigīs āupausinsenes brewīnslins",
        "delete-toobig": "Šin pāusan turri spārtai ilgan istōrijan stēisan redigīsenin, kīrsa $1 {{PLURAL:$1|kitawīdisnan|kitawīdisnans}}.\nTenesse āupausinsenins mazīlai dīlintun ārdisenins en dīlasnan stesse {{SITENAME}} be pastāi arāikintan.",
        "rollback": "Etwārtai wartinnais redigīsenin",
-       "rollback_short": "Etwārtai wartinnais",
        "rollbacklink": "etwārtai wartinnais",
        "rollbackfailed": "Kitawīdisnas etwārtai wartīnsna ni izpalla",
        "cantrollback": "Ni mazīngi etwārtai wartīntun redigīsenin, beggi ast tēr aīna šisse pāusas wersiōni.",
        "version-parser-extensiontags": "Parseras plattinsenes zentlitajai",
        "version-parser-function-hooks": "Parseras funkciōnis ānsai",
        "version-hook-name": "Ānsas pabilisnā",
-       "version-version": "(Wersiōni $1)",
+       "version-version": "($1)",
        "version-license": "Licēnci",
        "version-software": "Instalītas prōgraminis",
        "version-software-version": "Wersiōni",
index b120310..cade0ad 100644 (file)
@@ -4,7 +4,8 @@
                        "Ahmed-Najib-Biabani-Ibrahimkhel",
                        "Kaganer",
                        "Umherirrender",
-                       "아라"
+                       "아라",
+                       "عثمان خان شاہ"
                ]
        },
        "tog-underline": "کرښنې تړنې:",
        "otherlanguages": "په نورو ژبو کې",
        "redirectedfrom": "(له $1 نه مخ گرځېدلی)",
        "redirectpagesub": "د مخ گرځونې مخ",
+       "redirectto": "نوې مخ گرځېدنه:",
        "lastmodifiedat": "دا مخ وروستی ځل په $2، $1 بدلون موندلی.",
        "viewcount": "همدا مخ {{PLURAL:$1|يو وار|$1 واره}} کتل شوی.",
        "protectedpage": "ژغورلی مخ",
        "view-pool-error": "اوبخښۍ، دم گړۍ پالنگران د ډېر بارېدو ستونزې سره مخامخ شوي.\nډېر زيات کارنان د همدې مخ د کتلو په هڅه کې دي.\nلطفاً د دې مخ د کتلو د بيا هڅې نه دمخه يو څو شېبې صبر وکړۍ.\n\n$1",
        "pool-queuefull": "د بهير صف ډک دی",
        "pool-errorunknown": "ناجوته ستونزه",
+       "poolcounter-usage-error": "د کارېدلو تېروتنه: $1",
        "aboutsite": "د {{SITENAME}} په اړه",
        "aboutpage": "Project:په اړه",
        "copyright": "دا مېنځپانگه د $1 له مخې ستاسې لاسرسي ته پرته ده، خو هغه څه چې په خلاف يې وييل شوي.",
        "disclaimers": "ردادعاليکونه",
        "disclaimerpage": "Project:ټولگړی ردادعاليک",
        "edithelp": "د لارښود سمون",
+       "helppage-top-gethelp": "لارښود",
        "mainpage": "لومړی مخ",
        "mainpage-description": "لومړی مخ",
        "policy-url": "Project:تگلاره",
        "nospecialpagetext": "<strong>تاسې د يو ناسم ځانگړي مخ غوښتنه کړې.</strong>\n\nتاسې کولای شی چې د سمو ځانگړو مخونو لړليک په [[Special:SpecialPages|{{int:specialpages}}]] کې ومومۍ.",
        "error": "تېروتنه",
        "databaseerror": "د ډاټابېز تېروتنه",
+       "databaseerror-query": "تپوس: $1",
+       "databaseerror-function": "کړنه: $1",
        "databaseerror-error": "تېروتنه: $1",
        "laggedslavemode": "'''گواښنه:''' په دې مخ کې کېدای شي تازه اوسمهالېدنې نه وي.",
        "readonly": "توکبنسټ تړل شوی",
        "anonpreviewwarning": "''تاسې غونډال ته نه ياست ننوتي. خوندي کولو سره به ستاسې IP پته به د دې مخ د سمونونو په پېښليک کې ثبت شي.''",
        "missingcommenttext": "لطفاً تبصره لاندې وليکۍ.",
        "summary-preview": "د لنډيز مخليدنه:",
-       "subject-preview": "موضوع/سرليک مخکتنه:",
+       "subject-preview": "سکالو/سرليک مخکتنه:",
        "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 دی. مهرباني وکړۍ د خپلې يادونې پر مهال د دغو دوو څخه د يوه او يا هم د دواړو ورکول مه هېروۍ.",
        "autoblockedtext": "په خپلکاريزه توگه ستاسې پر IP پتې بنديز لگېدلی، دا د دې په خاطر چې ستاسې پته د بل چا له خوا چې $1 پرې بنديز لگولی، کارېدلې.\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د بنديز اړونده د اړيکو نيولو په وخت کې لطفاً د پورتني مالوماتو يادونه وکړۍ.",
        "edit-gone-missing": "د دې مخ اوسمهالول و نه کړای شول.\nداسې ښکاري چې دا مخ ړنگ شوی.",
        "edit-conflict": "د سمولو خنډ",
        "edit-no-change": "ستاسې سمون بابېزه وګڼل شو، دا ځکه چې تاسې په متن کې کوم بدلون نه دی راوستلی.",
+       "postedit-confirmation-created": "مخ جوړ شوی.",
+       "postedit-confirmation-restored": "مخ بيازېرمل شوی.",
        "postedit-confirmation-saved": "ستاسې سمون خوندي شو.",
        "edit-already-exists": "په دې نوم يو نوی مخ جوړ نه شو.\nپدې نوم د پخوا نه يو مخ شته.",
        "defaultmessagetext": "تلواليزه پيغام متن",
        "mergehistory-invalid-source": "د سرچينې مخ بايد يو سم سرليک وي.",
        "mergehistory-invalid-destination": "د موخې مخ بايد يو سم سرليک وي.",
        "mergehistory-reason": "سبب:",
+       "mergelog": "د اخږلو يادښت",
        "revertmerge": "بېلول",
        "history-title": "د \"$1\" د مخليدنې پېښليک",
        "difference-title": "د \"$1\" د بڼو تر مېنځ توپير",
+       "difference-title-multipage": "د \"$1\" او \"$2\" مخونو تر مېنځ توپير",
        "difference-multipage": "(د مخونو تر مېنځ توپير)",
        "lineno": "$1 کرښه:",
        "compareselectedversions": "ټاکلې بڼې سره پرتلل",
        "searchprofile-advanced-tooltip": "د خپل خوښې په نوم-تشيالونو کې پلټل",
        "search-result-size": "$1 ({{PLURAL:$2|1 ويی|$2 وييونه}})",
        "search-result-category-size": "{{PLURAL:$1|1 غړی|$1 غړي}} ({{PLURAL:$2|1 څېرمه وېشنيزه|$2 څېرمه وېشنيزې}}، {{PLURAL:$3|1 دوتنه|$3 دوتنې}})",
-       "search-redirect": "(د $1 Ù\85Ø® Ú«Ø±Ú\81Ù\88نه)",
+       "search-redirect": "(د $1 Ù\85Ø® Ú¯Ø±Ú\81Û\90دنه)",
        "search-section": "(برخه $1)",
+       "search-category": "(وېشنيزه $1)",
+       "search-file-match": "(د دوتنو مېنځپانگې سره ورته دي)",
        "search-suggest": "آيا همدا مو موخه وه: $1",
        "search-interwiki-caption": "خورلڼې پروژې",
        "search-interwiki-default": "پايلې له $1 څخه:",
        "searchrelated": "اړونده",
        "searchall": "ټول",
        "showingresults": "دلته لاندې تر {{PLURAL:$1|'''1''' پايله|'''$1''' پايلې}} ښکاره شوي پيل له #'''$2''' شوی.",
+       "showingresultsinrange": "دلته لاندې د #<strong>$2</strong> تر #<strong>$3</strong> حدونو پورې {{PLURAL:$1|<strong>1</strong> پايله|<strong>$1</strong> پايلې}} ښکارېږي.",
+       "search-showingresults": "{{PLURAL:$4|<strong>$1</strong> پايله، ټولټال <strong>$3</strong>|<strong>$1 - $2</strong> پايلې، ټولټال <strong>$3</strong>}}",
        "search-nonefound": "ستاسې دغوښتنې اړونده پايلې و نه موندل شوې.",
        "powersearch-legend": "ژوره پلټنه",
        "powersearch-ns": "په نوم-تشيالونو کې پلټنه:",
        "powersearch-togglelabel": "نښه کول:",
        "powersearch-toggleall": "ټول",
        "powersearch-togglenone": "هېڅ",
+       "powersearch-remember": "د راتلونکو پلټنو لپاره همدا ټاکنې په ياد ساتل",
        "search-external": "باندنۍ پلټنه",
        "preferences": "غوره توبونه",
        "mypreferences": "غوره توبونه",
        "prefs-personal": "د کارن پېژنليک",
        "prefs-rc": "وروستي بدلونونه",
        "prefs-watchlist": "کتنلړ",
+       "prefs-editwatchlist": "کتنلړ سمول",
        "prefs-watchlist-days": "د ورځو شمېر چې په کتنلړ کې به ښکاري:",
        "prefs-watchlist-days-max": "حد اکثر $1 {{PLURAL:$1|ورځ|ورځې}}",
        "prefs-watchlist-edits-max": "د شمېر اکثر بريد: 1000",
        "right-minoredit": "سمونونه واړه په نخښه کول",
        "right-move": "مخونه لېږدول",
        "right-move-subpages": "مخونه د خپلو څېرمه مخونو سره لېږدول",
+       "right-move-categorypages": "د وېشنيزې مخونه لېږدول",
        "right-movefile": "دوتنې لېږدول",
        "right-upload": "دوتنې پورته کول",
        "right-upload_by_url": "د يو URL نه دوتنې پورته کول",
        "action-createaccount": "دا گڼون جوړول",
        "action-minoredit": "دا سمون وړوکی په نخښه کول",
        "action-move": "همدا مخ لېږدول",
+       "action-move-categorypages": "د وېشنيزې مخونه لېږدول",
        "action-movefile": "همدا دوتنه لېږدول",
        "action-upload": "همدا دوتنه پورته کول",
        "action-upload_by_url": "دا دوتنه له يوه URL نه پورته کول",
        "recentchanges": "وروستي بدلونونه",
        "recentchanges-legend": "د ورستي بدلونو خوښنې",
        "recentchanges-summary": "په دې مخ د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ.",
+       "recentchanges-noresult": "د ټاکلې مودې بدلونونه کې يو يې هم د دغو معيارونو سره همغاړي نه دي.",
        "recentchanges-feed-description": "همدلته د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ او وگورۍ چې څه پېښ شوي.",
        "recentchanges-label-newpage": "دغه سمون يو نوی مخ جوړ کړی",
        "recentchanges-label-minor": "دا يو وړکی سمون دی",
        "recentchanges-legend-heading": "'''لنډونونه:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|د نويو مخونو لړليک]] هم وگورئ)",
        "rcnotefrom": "دلته لاندې د <strong>$2</strong> څخه راپدېخوا پېښ شوي بدلونونه راغلي (تر <strong>$1</strong> پورې ښکاري).",
-       "rclistfrom": "Ù\87غÙ\87 Ù\86Ù\88Ù\8a Ø¨Ø¯Ù\84Ù\88Ù\86Ù\88Ù\86Ù\87 Ú\9aکارÙ\87 Ú©Ù\88Ù\84 Ú\86Û\90 Ù\84Ù\87 $3 $2 Ù\86Ù\87 Ù¾Ù\8aÙ\84Û\90Ú\96Ù\8a",
+       "rclistfrom": "Ù\86Ù\88Ù\8a Ø¨Ø¯Ù\84Ù\88Ù\86Ù\88Ù\86Ù\87 Ú\86Û\90 Ù\84Ù\87 $3Ø\8c $2 Ú\85Ø®Ù\87 Ù¾Ù\8aÙ\84Û\90Ú\96Ù\8a Ú\9aکارÙ\87 Ú©Ù\88Ù\84",
        "rcshowhideminor": "وړې سمونې $1",
        "rcshowhideminor-show": "ښکاره کول",
        "rcshowhideminor-hide": "پټول",
        "uploadnologintext": "د دوتنې پورته کولو لپاره بايد $1",
        "uploaderror": "د پورته کولو ستونزه",
        "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|بټنوک|کيڼ|د انځور څرگندونې]]</nowiki></code>''' کوډ وکاروۍ.\n* د انځور د ښودلو نه پرته، د دوتنې سره د سيخې تړنې لپاره د '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' کوډ وکاروۍ.",
-       "upload-permitted": "د Ù¾Ø±Û\90Ú\9aÙ\88دÙ\84Ù\88 Ø¯Ù\88تÙ\86Ù\88 Ú\89Ù\88Ù\84Ù\88Ù\86Ù\87: $1.",
+       "upload-permitted": "د Ù¾Ø±Û\90Ú\9aÙ\84Û\90 {{PLURAL:$2|دÙ\88تÙ\86Û\90 Ú\89Ù\88Ù\84|دÙ\88تÙ\86Ù\88 Ú\89Ù\88Ù\84Ù\88Ù\86Ù\87}}: $1.",
        "upload-preferred": "د غوره {{PLURAL:$2|دوتنې ډول|دوتنو ډول}}: $1.",
-       "upload-prohibited": "د Ù\85Ù\86ع Ø´Ù\88Ù\8aÙ\88 Ø¯Ù\88تÙ\86Ù\88 Ú\89Ù\88Ù\84Ù\88Ù\86Ù\87: $1.",
+       "upload-prohibited": "د Ù\86اپرÛ\90Ú\9aÙ\84Û\90 {{PLURAL:$2|دÙ\88تÙ\86Û\90 Ú\89Ù\88Ù\84|دÙ\88تÙ\86Ù\88 Ú\89Ù\88Ù\84Ù\88Ù\86Ù\87}}: $1.",
        "uploadlogpage": "د پورته شويو دوتنو يادښت",
        "uploadlogpagetext": "دا لاندې د نوو پورته شوو دوتنو لړليک دی.",
        "filename": "د دوتنې نوم",
        "illegal-filename": "د دوتنې نوم نه دی پرېښل شوی.",
        "unknown-error": "يوه ناڅرګنده تېروتنه رامېنځته شوه.",
        "tmp-create-error": "لنډمهاله دوتنه جوړېدای نه شي",
-       "fileexists": "د پخوا نه پدې نوم يوه دوتنه شته، که تاسو ډاډه نه ياست او يا هم که تاسو غواړۍ چې بدلون پکې راولۍ، لطفاً <strong>[[:$1]]</strong> وگورۍ.\n[[$1|بټنوک]]",
-       "fileexists-extension": "په همدې نوم يوه بله دوتنه د پخوا نه شته: [[$2|thumb]]\n* د پورته کېدونکې دوتنې نوم: <strong>[[:$1]]</strong>\n* د پخوا نه شته دوتنه: <strong>[[:$2]]</strong>\nلطفاً يو داسې نوم وټاکی چې د پخوانۍ دوتنې سره توپير ولري.",
+       "fileexists": "د پخوا څخه پدې نوم يوه دوتنه شته، که {{GENDER:|تاسې}} پرې ډاډمن نه ياست چې بدلون پکې راولۍ، نو لطفاً <strong>[[:$1]]</strong> وگورئ.\n[[$1|بټنوک]]",
+       "fileexists-extension": "په دې نوم يوه بله دوتنه د پخوا څخه شته: [[$2|بټنوک]]\n* د پورته کېدونکې دوتنې نوم: <strong>[[:$1]]</strong>\n* د پخوانۍ موجودې دوتنې نوم: <strong>[[:$2]]</strong>\nآيا تاسې غواړۍ چې يو داسې بېل نوم ټاکۍ چې د پخوانۍ دوتنې سره توپير ولري؟",
        "fileexists-forbidden": "د پخوا نه پدې نوم يوه دوتنه شته، او په دې نوم بله دوتنه نه پورته کېږي.\nکه تاسې بيا هم د خپلې دوتنې پورته کول غواړۍ، نو لطفاً بېرته وګرځۍ او همدغه دوتنه بيا په يوه نوي نوم پورته کړی.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "همدا دوتنه د {{PLURAL:$1|لاندينۍ دوتنې|لاندينيو دوتنو}} غبرگه لمېسه ده:",
        "uploadwarning": "د پورته کولو گواښ",
        "upload-warning-subj": "د پورته کولو گواښ",
        "upload-proto-error": "ناسم پروتوکول",
        "upload-file-error": "کورنۍ ستونزه",
+       "upload-misc-error": "د پورته کېدنې نامالومه تېروتنه",
        "upload-http-error": "د HTTP يوه ستونزه رامېنځ ته شوې: $1",
        "backend-fail-notexists": "د $1 په نوم دوتنه نشته.",
        "backend-fail-delete": "د \"$1\" دوتنه ړنګه نه شوه.",
        "backend-fail-alreadyexists": "د $1 دوتنه له پخوا نه شته.",
+       "backend-fail-move": "د \"$1\" دوتنه \"$2\" ته و نه ليږدېده.",
+       "backend-fail-opentemp": "لنډمهاله دوتنه و نه پرانيستل شوه.",
        "backend-fail-read": "د \"$1\" دوتنه نه شي لوستل کېدای.",
        "backend-fail-create": "د \"$1\" په دوتنه کې نور څه و نه ليکل شول.",
        "zip-wrong-format": "ځانگړې شوې دوتنه يوه ZIP دوتنه نه وه.",
+       "uploadstash-refresh": "د دوتنو لړليک بياتازه کول",
        "img-auth-accessdenied": "لاسرسی رد شو",
        "img-auth-nofile": "د $1 په نوم کومه دوتنه نشته.",
        "http-invalid-url": "ناسم URL: $1",
        "license-header": "منښتليک:",
        "nolicense": "هېڅ نه دي ټاکل شوي",
        "license-nopreview": "(مخليدنه نشته)",
-       "upload_source_file": "(ستاسو په کمپيوټر کې يوه دوتنه)",
+       "upload_source_file": "(ستاسې کمپيوټر کې ستاسې ټاکلې دوتنه)",
+       "listfiles-delete": "ړنگول",
        "listfiles-summary": "همدا ځانگړی مخ ټولې پورته شوې دوتنې ښکاره کوي.",
        "listfiles_search_for": "د رسنۍ نوم پلټنه:",
        "imgfile": "دوتنه",
        "listfiles_size": "کچه (بايټونه)",
        "listfiles_description": "څرگندونه",
        "listfiles_count": "بڼې",
+       "listfiles-show-all": "د انځورونو زړې بڼې شاملول",
        "listfiles-latestversion": "اوسنۍ بڼه",
        "listfiles-latestversion-yes": "هو",
        "listfiles-latestversion-no": "نه",
        "filepage-nofile-link": "په دې نوم کومه دوتنه نشته، خو تاسې يې [$1 پورته کولی شی].",
        "uploadnewversion-linktext": "د همدغې دوتنې نوې بڼه پورته کول",
        "shared-repo-from": "د $1 لخوا",
+       "shared-repo-name-wikimediacommons": "ويکيمېډيا کامنز",
        "upload-disallowed-here": "تاسې د دې دوتنې دپاسه نشی ليکلی.",
+       "filerevert": "$1 بيااړول",
+       "filerevert-legend": "دوتنه بيااړول",
        "filerevert-comment": "سبب:",
        "filerevert-submit": "په څټ گرځول",
        "filedelete": "$1 ړنگول",
        "unusedimagestext": "دا لاندينۍ دوتنې په هېڅ کوم مخ کې نه دي ټومبېدلي. لطفاً په پام کې وساتۍ چې نور وېبځايونه به د دغو دوتنو له يو دوتنې سره يو راسن يو آر ال (URL) ولري او لا تر اوسه به دوتنه د فعالې کارېدنې سره سره دلته پرته وي.",
        "notargettitle": "بې موخې",
        "nopagetitle": "داسې کوم مخ نشته",
+       "nopagetext": "کوم مخ مو چې وښوده هغه نشته.",
        "pager-newer-n": "{{PLURAL:$1|نوی 1|نوي $1}}",
        "pager-older-n": "{{PLURAL:$1|زوړ 1|زاړه $1}}",
        "suppress": "څارن",
        "listgrouprights-addgroup-self-all": "خپل گڼون کې ټولې ډلې ورگډول",
        "listgrouprights-removegroup-self-all": "خپل گڼون نه ټولې ډلې ليري کول",
        "listgrouprights-namespaceprotection-namespace": "نوم-تشيال",
+       "trackingcategories": "موندونکې وېشنيزې",
        "trackingcategories-name": "پيغام نوم",
        "mailnologin": "د لېږلو پته نشته",
        "emailuser": "کارن ته برېښليک لېږل",
        "undelete-show-file-submit": "هو",
        "namespace": "نوم-تشيال:",
        "invert": "ټاکنې سرچپه کول",
+       "tooltip-invert": "په ټاکلو نومتشيالونو کې (او اړونده نومتشيال کې که په نښه شوی وي) د مخونو بدلونونو د پټولو لپاره دا بکس په نښه کړئ",
        "namespace_association": "مل نومتشيال",
        "blanknamespace": "(آرنی)",
        "contributions": "{{GENDER:$1|کارن}} ونډې",
        "linkshere": "دغه لانديني مخونه د '''[[:$1]]''' سره تړنې لري:",
        "nolinkshere": "د '''[[:$1]]''' سره هېڅ يو مخ هم تړنې نه لري .",
        "isredirect": "د مخ گرځونې مخ",
-       "istemplate": "Ù\88رګډېدنه",
+       "istemplate": "Ù\88رگډېدنه",
        "isimage": "د دوتنې تړنه",
        "whatlinkshere-prev": "{{PLURAL:$1|پخوانی|پخواني $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|راتلونکی|راتلونکي $1}}",
        "movepage-moved-redirect": "يو مخ گرځونی جوړ شو.",
        "articleexists": "په همدې نوم يوه بله پاڼه د پخوا نه شته او يا خو دا نوم چې تاسې ټاکلی سم نه دی. لطفاً يو بل نوم وټاکۍ.",
        "movetalk": "د خبرو اترو اړونده مخ ورسره لېږدول",
+       "movepage-page-moved": "د $1 مخ $2 ته ولېږدل شو.",
+       "movepage-page-unmoved": "د $1 مخ $2 ته و نه لېږدل شو.",
        "movelogpage": "د لېږدولو يادښت",
        "movelogpagetext": "دا لاندې د لېږدول شوو مخونو لړليک دی.",
        "movesubpage": "{{PLURAL:$1|څېرمه مخ|څېرمه مخونه}}",
        "thumbnail-more": "لويول",
        "filemissing": "دوتنه ورکه ده",
        "thumbnail_error": "د  بټنوک د جوړېدنې ستونزه: $1",
+       "import-interwiki-sourcewiki": "د ويکي سرچينه:",
+       "import-interwiki-sourcepage": "د سرچينې مخ:",
        "import-interwiki-history": "د دې مخ د پېښليک ټولې بڼې لمېسل",
        "import-interwiki-templates": "ټولې کينډۍ نغاړل",
        "import-interwiki-submit": "رالېږدول",
        "tooltip-pt-mycontris": "ستاسې د ونډو لړليک",
        "tooltip-pt-login": "تاسې ته په غونډال کې د ننوتلو سپارښتنه کوو، که څه هم چې دا يو اړين کار نه دی.",
        "tooltip-pt-logout": "وتل",
+       "tooltip-pt-createaccount": "تاسې ته د يو گڼون د جوړولو او بيا غونډال کې ورننوتلو سپارښتنه کېږي؛ که څه هم چې دا يو اړين کار نه دی",
        "tooltip-ca-talk": "د مخ د مېنځپانگې په اړه خبرې اترې",
        "tooltip-ca-edit": "تاسې همدا مخ سمولای شی. لطفاً د ليکنې د خوندي کولو دمخه، د همدې ليکنې مخليدنه وگورۍ.",
        "tooltip-ca-addsection": "يوه نوې برخه پيلول",
        "siteusers": "د {{SITENAME}} {{PLURAL:$2|کارن|کارنان}} $1",
        "anonusers": "د {{SITENAME}} {{PLURAL:$2|ورکنومی کارن|ورکنومي کارنان}} $1",
        "creditspage": "د دې مخ کرېډټونه",
+       "simpleantispam-label": "سپام-ضد څارنه.\nدا برخه <strong>مه </strong> ډکوئ!",
        "pageinfo-title": "د \"$1\" مالومات",
        "pageinfo-header-basic": "بنسټيز مالومات",
        "pageinfo-header-edits": "د سمون پېښليک",
        "pageinfo-header-restrictions": "مخ ژغورنه",
        "pageinfo-header-properties": "د مخ ځانتياوې",
        "pageinfo-display-title": "ښکارېدونکی سرليک",
+       "pageinfo-default-sort": "تلواليزه اوډن کونجۍ",
        "pageinfo-length": "مخ اوږدوالی (په بايټونو)",
        "pageinfo-article-id": "د مخ پېژند",
        "pageinfo-language": "د مخ د مېنځپانگې ژبه",
+       "pageinfo-content-model": "د مخ مېنځپانگې جوړښت",
        "pageinfo-robot-policy": "ليکلړ اوډنه د روباټونو لخوا",
        "pageinfo-robot-index": "پرېښل",
        "pageinfo-robot-noindex": "ناپرېښل",
        "pageinfo-watchers": "د مخ د کتونکو شمېر",
+       "pageinfo-few-watchers": "له $1 څخه لږ {{PLURAL:$1|کتونکی|کتونکي}}",
        "pageinfo-redirects-name": "دې مخ ته د ورگرځونو شمېر",
        "pageinfo-subpages-name": "دې مخ ته څېرمه مخونه",
        "pageinfo-firstuser": "مخ جوړونکی",
        "pageinfo-firsttime": "د مخ جوړېدنې نېټه",
        "pageinfo-lastuser": "وروستنی سمونگر",
+       "pageinfo-lasttime": "د سمون وروستنۍ نېټه",
        "pageinfo-edits": "د ټولو سمونونو شمېر",
+       "pageinfo-authors": "د بېلابېلو ليکوالو ټولټال شمېر",
+       "pageinfo-recent-edits": "د وروستني سمونونو شمېر (په تېرو $1 کې)",
+       "pageinfo-recent-authors": "د بېلابېلو ليکوالو وروستنی شمېر",
        "pageinfo-toolboxlink": "د مخ مالومات",
        "pageinfo-redirectsto-info": "مالومات",
        "pageinfo-contentpage": "مېنځپانگيز مخ کې شمېرل شوی",
        "file-info-size": "$1 × $2 پېکسل, د دوتنې کچه: $3, MIME بڼه: $4",
        "file-nohires": "تر دې کچې لوړې بېلن نښې نشته.",
        "svg-long-desc": "SVG دوتنه، نومېنلي $1 × $2 پېکسل، د دوتنې کچه: $3",
-       "show-big-image": "آرÙ\86Û\8d دوتنه",
+       "show-big-image": "اصÙ\84Ù\8a دوتنه",
        "show-big-image-preview": "د همدې ليدنې کچه: $1.",
+       "show-big-image-other": "{{PLURAL:$2|بل ژورليد|نورې ژورليدنې}}: $1.",
        "show-big-image-size": "$1 × $2 پېکسل",
        "file-info-gif-frames": "$1 {{PLURAL:$1|چوکاټ|چوکاټونه}}",
        "file-info-png-repeat": "$1 {{PLURAL:$1|ځل|ځله}} وغږېده",
        "minutes-ago": "$1 {{PLURAL:$1|دقيقه|دقيقې}} دمخه",
        "seconds-ago": "$1 {{PLURAL:$1|ثانيه|ثانيې}} دمخه",
        "monday-at": "Monday at $1",
+       "yesterday-at": "پرون په $1",
        "bad_image_list": "بڼه يې په لاندې توگه ده:\n\nيواځې د لړليک توکي (هغه کرښې چې پېلېږي پر *) په پام کې نيول شوي.\nبايد چې په يوه کرښه کې لومړنۍ تړنه د يوې خرابې دوتنې سره وي.\nپه يوې کرښې باندې هر ډول وروستۍ تړنې به د استثنا په توگه وگڼلای شي، د ساري په توگه هغه مخونو کې چې يوه دوتنه پر کرښه پرته وي.",
        "metadata": "مېټاډاټا",
        "metadata-help": "همدا دوتنه نور اضافه مالومات هم لري، چې کېدای شي ستاسې د گڼياليزې کامرې او يا هم د ځيرڅار په کارولو سره د گڼيالېدنې په وخت کې ورسره مل شوي.\nکه همدا دوتنه د خپل آرني دريځ څخه بدله شوې وي نو ځينې تفصيلونه به په بدل شوي دوتنه کې په بشپړه توگه نه وي.",
        "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-stripoffsets": "د انځور مالوماتځی",
        "exif-datetime": "د دوتنې د بدلون وخت او نېټه",
        "exif-imagedescription": "انځور سرليک",
        "exif-software": "کارېدلې ساوترۍ",
        "exif-artist": "ليکوال",
        "exif-copyright": "د رښتو خاوند",
+       "exif-exifversion": "Exif بڼه",
        "exif-colorspace": "رنگ تشيال",
        "exif-pixelydimension": "د انځور سور",
        "exif-pixelxdimension": "د انځور جگوالی",
        "exif-usercomment": "د کارن تبصرې",
        "exif-relatedsoundfile": "اړونده غږيزه دوتنه",
+       "exif-datetimeoriginal": "د اومتوک د جوړېدنې وخت او نېټه",
        "exif-datetimedigitized": "د گڼياليز کېدنې وخت او نېټه",
        "exif-fnumber": "F شمېره",
        "exif-lightsource": "د رڼا سرچينه",
        "percent": "$1%",
        "parentheses": "($1)",
        "brackets": "[$1]",
-       "imgmultipageprev": "â\86\90 Ù¾Ø®Ù\88اÙ\86Û\8c مخ",
+       "imgmultipageprev": "â\86\92 ØªÛ\90ر مخ",
        "imgmultipagenext": "راتلونکی مخ →",
        "imgmultigo": "ورځه!",
        "imgmultigoto": "د $1 مخ ته ورځه",
        "version-other": "بل",
        "version-hooks": "کونډۍ",
        "version-hook-name": "کونډۍ نوم",
-       "version-version": "(بڼه $1)",
+       "version-version": "($1)",
        "version-license": "مېډياويکي منښتليک",
        "version-ext-license": "منښتليک",
        "version-skin-colheader-name": "پوښۍ",
        "version-entrypoints-header-url": "يو آر اېل",
        "version-libraries-library": "کتابتون",
        "version-libraries-version": "بڼه",
+       "redirect": "د دوتنې، کارن، مخ يا بڼې پېژند له مخې ورگرځېدنې",
        "redirect-submit": "ورځه",
        "redirect-value": "ارزښت:",
        "redirect-user": "کارن پېژند",
        "tags-actions-header": "کړنې",
        "tags-active-yes": "هو",
        "tags-active-no": "نه",
+       "tags-source-none": "نور نه کارېږي",
        "tags-edit": "سمول",
        "tags-delete": "ړنگول",
        "tags-activate": "فعالول",
        "revdelete-uname-unhid": "ښکاره کارن-نوم",
        "logentry-move-move": "$1 د $3 مخ $4 ته {{GENDER:$2|ولېږداوه}}",
        "logentry-move-move-noredirect": "$1 پرته له دې چې يو مخ گرځونی پرېږدي له $3 څخه $4 ته مخ {{GENDER:$2|ولېږداوه}}",
+       "logentry-move-move_redir": "$1 د $3 مخ $4 ته د مخ گرځونې له لارې {{GENDER:$2|ولېږداوه}}.",
        "logentry-move-move_redir-noredirect": "$1 پرته له دې چې يو مخ گرځونی پرېږدي له $3 څخه $4 ته مخ {{GENDER:$2|ولېږداوه}}",
        "logentry-newusers-newusers": "د $1 کارن گڼون {{GENDER:$2|جوړ شو}}",
        "logentry-newusers-create": "د $1 کارن گڼون {{GENDER:$2|جوړ شو}}",
        "logentry-newusers-autocreate": "د $1 گڼون په اتوماتيک ډول {{GENDER:$2|جوړ شو}}",
+       "logentry-upload-upload": "$1 $3 {{GENDER:$2|ورپورته يې کړ}}",
        "rightsnone": "(هېڅ)",
        "revdelete-summary": "لنډيز سمول",
-       "feedback-subject": "سکالو:",
-       "feedback-message": "پيغام:",
        "feedback-cancel": "ناگارل",
        "feedback-close": "ترسره شو",
+       "feedback-error-title": "تېروتنه",
+       "feedback-message": "پيغام:",
+       "feedback-subject": "سکالو:",
+       "feedback-submit": "سپارل",
+       "feedback-thanks-title": "مننه!",
        "searchsuggest-search": "پلټل",
        "api-error-duplicate-popup-title": "غبرګونې {{PLURAL:$1|دوتنه|دوتنې}}.",
        "api-error-empty-file": "کومه دوتنه چې تاسې دلته سپارلې هغه تشه ده.",
        "mediastatistics-header-video": "ويډيوگانې",
        "mediastatistics-header-multimedia": "بډايه رسنۍ",
        "mediastatistics-header-office": "دفتر",
-       "mediastatistics-header-text": "متني"
+       "mediastatistics-header-text": "متني",
+       "special-characters-group-latin": "لاتين",
+       "special-characters-group-latinextended": "غځېدلی لاتين",
+       "special-characters-group-ipa": "ن.غ.ا",
+       "special-characters-group-symbols": "سمبولونه",
+       "special-characters-group-greek": "يوناني",
+       "special-characters-group-cyrillic": "سرېليک",
+       "special-characters-group-arabic": "عربي",
+       "special-characters-group-arabicextended": "غځېدلې عربي",
+       "special-characters-group-persian": "پارسي",
+       "special-characters-group-hebrew": "عبراني",
+       "special-characters-group-bangla": "بنګالي",
+       "special-characters-group-tamil": "تاميلي",
+       "special-characters-group-telugu": "تېلوګو",
+       "special-characters-group-sinhala": "سېنهالي",
+       "special-characters-group-gujarati": "ګجراتي",
+       "special-characters-group-devanagari": "دېوانګري",
+       "special-characters-group-thai": "تايلنډي",
+       "special-characters-group-lao": "لاوي",
+       "special-characters-group-khmer": "خمري"
 }
index 7aaf14b..26634b1 100644 (file)
@@ -77,7 +77,9 @@
                        "He7d3r",
                        "PauloEduardo",
                        "Webysther",
-                       "Fasouzafreitas"
+                       "Fasouzafreitas",
+                       "RosaMafalda17",
+                       "Macofe"
                ]
        },
        "tog-underline": "Sublinhar links:",
        "disclaimers": "Exoneração de responsabilidade",
        "disclaimerpage": "Project:Aviso_geral",
        "edithelp": "Ajuda de edição",
+       "helppage-top-gethelp": "Ajuda",
        "mainpage": "Página principal",
        "mainpage-description": "Página principal",
        "policy-url": "Project:Políticas",
        "readonly_lag": "O banco de dados foi automaticamente bloqueado enquanto os servidores secundários se sincronizam com o principal",
        "internalerror": "Erro interno",
        "internalerror_info": "Erro interno: $1",
+       "internalerror-fatal-exception": "Excepção fatal do tipo \"$1\"",
        "filecopyerror": "Não foi possível copiar o arquivo \"$1\" para \"$2\".",
        "filerenameerror": "Não foi possível renomear o arquivo \"$1\" para \"$2\".",
        "filedeleteerror": "Não foi possível eliminar o arquivo \"$1\".",
        "welcomeuser": "Bem-vindo, $1!",
        "welcomecreation-msg": "A sua conta foi criada.\nNão se esqueça de personalizar as suas [[Special:Preferences|preferências no wiki {{SITENAME}}]].",
        "yourname": "Nome de usuário:",
-       "userlogin-yourname": "Nome de usuário",
+       "userlogin-yourname": "Nome de usuário(a)",
        "userlogin-yourname-ph": "Escreva seu nome de usuário",
        "createacct-another-username-ph": "Forneça o nome de usuário",
        "yourpassword": "Senha:",
        "currentrevisionlink": "Revisão atual",
        "cur": "atu",
        "next": "prox",
-       "last": "ult",
+       "last": "ant",
        "page_first": "primeira",
        "page_last": "última",
        "histlegend": "Como selecionar: marque as caixas de seleção das versões que deseja comparar e pressione enter ou clique no botão na parte inferior do formulário.<br />\nLegenda: '''({{int:cur}})''' = diferenças em relação a última versão, '''({{int:last}})''' = diferenças em relação a versão anterior, '''{{int:minoreditletter}}''' = edição menor.",
        "mergehistory-from": "Página de origem:",
        "mergehistory-into": "Página de destino:",
        "mergehistory-list": "Histórico de edições habilitadas para fusão",
-       "mergehistory-merge": "As edições de [[:$1]] a seguir poderão ser fundidas em [[:$2]]. Utilize a coluna de botões de opção para fundir apenas as edições feitas entre o intervalo de tempo especificado. Note que ao utilizar os links de navegação esta coluna será retornada a seus valores padrão.",
+       "mergehistory-merge": "As edições de [[:$1]] a seguir poderão ser fundidas em [[:$2]]. Utilize a coluna de botões de opção para fundir apenas as edições feitas até a que for selecionada. Note que ao utilizar os links de navegação esta coluna será retornada a seus valores padrão.",
        "mergehistory-go": "Exibir edições habilitadas a serem fundidas",
        "mergehistory-submit": "Fundir revisões",
        "mergehistory-empty": "Não existem edições habilitadas a serem fundidas.",
        "nextn-title": "{{PLURAL:$1|próximo|próximos}} $1 {{PLURAL:$1|resultado|resultados}}",
        "shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página",
        "viewprevnext": "Ver ($1 {{int:pipe-separator}} $2) ($3).",
-       "searchmenu-exists": "<strong>Há uma página com o nome \"[[:$1]]\" neste wiki.</strong> {{PLURAL:$2|0=|Veja também os outros resultados da pesquisa encontrados.}}",
+       "searchmenu-exists": "<strong>Há uma página com o nome \"[[:$1]]\" nesta wiki.</strong> {{PLURAL:$2|0=|Veja também os outros resultados da pesquisa encontrados.}}",
        "searchmenu-new": "<strong>Criar a página \"[[:$1]]\" nesta wiki!</strong>{{PLURAL:$2|0=| Veja também a página encontrada com sua pesquisa.|Veja também os resultados das pesquisas encontradas.}}",
        "searchprofile-articles": "Páginas de conteúdo",
        "searchprofile-images": "Multimídia",
        "userrights-lookup-user": "Administrar grupos de usuários",
        "userrights-user-editname": "Forneça um nome de usuário:",
        "editusergroup": "Editar grupos de usuários",
-       "editinguser": "Modificando privilégios do usuário '''[[User:$1|$1]]''' $2",
+       "editinguser": "Modificando privilégios d{{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} '''[[User:$1|$1]]''' $2",
        "userrights-editusergroup": "Editar grupos do usuário",
        "saveusergroups": "Salvar grupos do usuário",
        "userrights-groupsmember": "Membro de:",
        "group-suppress": "Oversights",
        "group-all": "(todos)",
        "group-user-member": "{{GENDER:$1|usuário|usuária}}",
-       "group-autoconfirmed-member": "{{GENDER:$1|usuário autoconfirmado|usuária autoconfirmada}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|usuário autoconfirmado|usuária autoconfirmada|usuário(a) autoconfirmado(a)}}",
        "group-bot-member": "robô",
-       "group-sysop-member": "{{GENDER:$1|administrador|administradora}}",
+       "group-sysop-member": "{{GENDER:$1|administrador|administradora|administrador(a)}}",
        "group-bureaucrat-member": "burocrata",
        "group-suppress-member": "{{GENDER:$1|supressor|supressora}}",
        "grouppage-user": "{{ns:project}}:Usuários",
        "sp-contributions-search": "Navegar pelas contribuições",
        "sp-contributions-username": "Endereço de IP ou usuário:",
        "sp-contributions-toponly": "Mostrar somente as edições que sejam a última alteração",
-       "sp-contributions-newonly": "Mostrar somente as edições que criaram uma nova página.",
+       "sp-contributions-newonly": "Mostrar somente as criações de páginas",
        "sp-contributions-submit": "Pesquisar",
        "whatlinkshere": "Páginas afluentes",
        "whatlinkshere-title": "Páginas que têm links para \"$1\"",
        "isimage": "link para o arquivo",
        "whatlinkshere-prev": "{{PLURAL:$1|anterior|$1 anteriores}}",
        "whatlinkshere-next": "{{PLURAL:$1|próximo|próximos $1}}",
-       "whatlinkshere-links": "← links",
+       "whatlinkshere-links": "← afluentes",
        "whatlinkshere-hideredirs": "$1 redirecionamentos",
        "whatlinkshere-hidetrans": "$1 transclusões",
        "whatlinkshere-hidelinks": "$1 links",
        "movepagetalktext": "A página de \"discussão\" associada, se existir, será automaticamente movida, '''a não ser que:'''\n*Uma página de discussão com conteúdo já exista sob o novo título, ou\n*Você não marque a caixa abaixo.\n\nNestes casos, você terá que mover ou mesclar a página manualmente, se assim desejar.",
        "movearticle": "Mover página",
        "moveuserpage-warning": "'''Aviso:''' Você irá mover uma página de usuário. Note que apenas a página será movida, ''sem'' alterar o nome do usuário.",
+       "movecategorypage-warning": "<strong>Aviso:</strong> Você está prestes a mover uma página de categoria. Por favor, note que apenas a página será transferida e quaisquer páginas da categoria antiga <em>não</em> serão recategorizadas para o novo.",
        "movenologintext": "Você precisa ser um usuário registrado e [[Special:UserLogin|autenticado]] para poder mover uma página.",
        "movenotallowed": "Você não possui permissão para mover páginas.",
        "movenotallowedfile": "Você não possui permissão para mover arquivos.",
        "thumbnail-temp-create": "Não foi possível criar o arquivo temporário de miniatura",
        "thumbnail-dest-create": "Não foi possível salvar a miniatura no destino",
        "thumbnail_invalid_params": "Parâmetros de miniatura inválidos",
+       "thumbnail_toobigimagearea": "Arquivo com dimensões maiores que $1",
        "thumbnail_dest_directory": "Não foi possível criar o diretório de destino",
        "thumbnail_image-type": "Tipo de imagem não suportado",
        "thumbnail_gd-library": "Configuração da biblioteca GD incompleta: função $1 não encontrada",
        "thumbnail_image-missing": "Arquivo aparentemente inexistente: $1",
        "thumbnail_image-failure-limit": "Houveram muitas tentativas falhas recentemente ($1 ou mais) de criação desta miniatura. Por favor, tente novamente mais tarde.",
        "import": "Importar páginas",
-       "importinterwiki": "Importação transwiki",
+       "importinterwiki": "importar páginas a partir de outra wiki",
        "import-interwiki-text": "Selecione um wiki e um título de página para importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação transwiki são registradas no [[Special:Log/import|Registro de importações]].",
        "import-interwiki-sourcewiki": "Fonte wiki:",
        "import-interwiki-sourcepage": "Página de origem:",
        "import-rootpage-nosubpage": "O espaço nominal $1 da página principal não permite subpáginas.",
        "importlogpage": "Registro de importações",
        "importlogpagetext": "Importações administrativas de páginas com a preservação do histórico de edição de outros wikis.",
-       "import-logentry-upload": "importou [[$1]] através de arquivo de importação",
        "import-logentry-upload-detail": "{{PLURAL:$1|uma edição|$1 edições}}",
-       "import-logentry-interwiki": "transwiki $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|$1 edição|$1 edições}} de $2",
        "javascripttest": "Teste de JavaScript",
        "javascripttest-pagetext-noframework": "Esta página é exclusiva para testes de JavaScript.",
        "javascripttest-pagetext-unknownframework": "A estrutura de testes \"$1\" é desconhecida.",
+       "javascripttest-pagetext-unknownaction": "Ação desconhecida de $1",
        "javascripttest-pagetext-frameworks": "Escolha uma das seguintes estruturas de teste: $1",
        "javascripttest-pagetext-skins": "Escolha o tema para executar os testes:",
        "javascripttest-qunit-intro": "Veja a [$1 documentação de testes] no mediawiki.org.",
        "tooltip-pt-mycontris": "Listagem de suas contribuições",
        "tooltip-pt-login": "Você é encorajado a autenticar-se, apesar disso não ser obrigatório.",
        "tooltip-pt-logout": "Sair",
+       "tooltip-pt-createaccount": "É recomendado que você crie uma conta e inicie uma seção; todavia, isto não é obrigatório",
        "tooltip-ca-talk": "Discussão sobre o conteúdo da página",
        "tooltip-ca-edit": "Você pode editar esta página. Use o botão \"Mostrar previsão\" antes de salvar.",
        "tooltip-ca-addsection": "Iniciar uma nova seção",
        "table_pager_prev": "Página anterior",
        "table_pager_first": "Primeira página",
        "table_pager_last": "Última página",
-       "table_pager_limit": "Mostrar $1 items por página",
+       "table_pager_limit": "Mostrar $1 itens por página",
        "table_pager_limit_label": "Itens por página:",
        "table_pager_limit_submit": "Ir",
        "table_pager_empty": "Sem resultados",
        "version-parser-function-hooks": "Funções \"hooks\" de \"parser\"",
        "version-hook-name": "Nome do hook",
        "version-hook-subscribedby": "Subscrito por",
-       "version-version": "(Versão $1)",
+       "version-version": "($1)",
        "version-license": "Licença do MediaWiki",
        "version-ext-license": "Licença",
        "version-ext-colheader-name": "Extensão",
        "logentry-rights-rights": "$1 alterou os grupos de usuário de $3 de $4 para $5",
        "logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
        "logentry-rights-autopromote": "$1 foi promovido automaticamente de $4 para $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|carregado}} $3",
        "rightsnone": "(nenhum)",
        "revdelete-summary": "sumário de edição",
+       "feedback-adding": "Adicionando os comentários na página...",
+       "feedback-bugcheck": "Perfeito! Apenas verifique se não é um dos [$1 bugs já conhecidos].",
+       "feedback-bugnew": "Eu verifiquei. Relatar um bug novo",
        "feedback-bugornote": "Se você está preparado para descrever detalhadamente um problema técnico, [$1 relate um bug].\nCaso contrário, você poderá usar o formulário simplificado a seguir. Seu comentário será adicionado à página \"[$3 $2]\", junto com o seu nome de usuário e o navegador que estiver usando neste momento.",
-       "feedback-subject": "Assunto:",
-       "feedback-message": "Mensagem:",
        "feedback-cancel": "Cancelar",
-       "feedback-submit": "Enviar Comentários",
-       "feedback-adding": "Adicionando os comentários na página...",
+       "feedback-close": "Feito",
        "feedback-error1": "Erro: O resultado da API não foi reconhecido",
        "feedback-error2": "Erro: A edição falhou",
        "feedback-error3": "Erro: A API não responde",
+       "feedback-message": "Mensagem:",
+       "feedback-subject": "Assunto:",
+       "feedback-submit": "Enviar",
        "feedback-thanks": "Obrigado! O seu comentário foi adicionado à página \"[$2 $1]\".",
-       "feedback-close": "Feito",
-       "feedback-bugcheck": "Perfeito! Apenas verifique se não é um dos [$1 bugs já conhecidos].",
-       "feedback-bugnew": "Eu verifiquei. Relatar um bug novo",
        "searchsuggest-search": "Pesquisa",
        "searchsuggest-containing": "contendo...",
        "api-error-badaccess-groups": "Você não tem permissão para enviar arquivos para este wiki.",
        "json-error-syntax": "Erro de sintaxe",
        "json-error-utf8": "Caracteres UTF-8 malformados, possivelmente a codificação está incorreta.",
        "json-error-recursion": "Uma ou mais referências recursivas no valor a ser codificado",
-       "json-error-unsupported-type": "Um valor de um tipo que não pode ser codificado foi dado"
+       "json-error-unsupported-type": "Um valor de um tipo que não pode ser codificado foi dado",
+       "special-characters-group-latin": "Latino",
+       "special-characters-group-latinextended": "Latino estendido",
+       "special-characters-group-ipa": "AFI (IPA)",
+       "special-characters-group-symbols": "Símbolos",
+       "special-characters-group-greek": "Grego",
+       "special-characters-group-cyrillic": "Cirílico",
+       "special-characters-group-arabic": "Árabe",
+       "special-characters-group-arabicextended": "Árabe estendido",
+       "special-characters-group-persian": "Persa",
+       "special-characters-group-hebrew": "Hebraico",
+       "special-characters-group-bangla": "Bengali",
+       "special-characters-group-tamil": "Tâmil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Cingalês",
+       "special-characters-group-gujarati": "Guzerate",
+       "special-characters-group-devanagari": "Devanágari",
+       "special-characters-group-thai": "Tailandês",
+       "special-characters-group-lao": "Laociano",
+       "special-characters-group-khmer": "Cambojano"
 }
index 1477393..d6f37cc 100644 (file)
        "disclaimers": "Exoneração de responsabilidade",
        "disclaimerpage": "Project:Aviso_geral",
        "edithelp": "Ajuda de edição",
+       "helppage-top-gethelp": "Ajuda",
        "mainpage": "Página principal",
        "mainpage-description": "Página principal",
        "policy-url": "Project:Políticas",
        "wrongpassword": "A palavra-passe que introduziu é inválida. Tente novamente, por favor.",
        "wrongpasswordempty": "A palavra-passe não foi introduzida. \nIntroduza-a, por favor.",
        "passwordtooshort": "A palavra-passe deve ter no mínimo $1 {{PLURAL:$1|carácter|caracteres}}.",
+       "passwordtoolong": "A palavra-passe deve exceder $1 {{PLURAL:$1|carácter|caracteres}}.",
        "password-name-match": "A sua palavra-passe tem de ser diferente do seu nome de utilizador.",
        "password-login-forbidden": "Foi proibido o uso deste nome de utilizador e palavra-passe.",
        "mailmypassword": "Reiniciar a palavra-passe",
        "notextmatches": "Não foi possível localizar, no conteúdo das páginas, o termo pesquisado",
        "prevn": "{{PLURAL:$1|anterior|$1 anteriores}}",
        "nextn": "{{PLURAL:$1|posterior|$1 posteriores}}",
+       "prev-page": "página anterior",
+       "next-page": "página seguinte",
        "prevn-title": "$1 {{PLURAL:$1|resultado anterior|resultados anteriores}}",
        "nextn-title": "{{PLURAL:$1|próximo|próximos}} $1 {{PLURAL:$1|resultado|resultados}}",
        "shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página",
        "right-reupload-shared": "Sobrescrever localmente ficheiros no repositório partilhado de imagens",
        "right-upload_by_url": "Carregar um ficheiro de um endereço URL",
        "right-purge": "Limpar a ''cache'' de uma página no servidor sem confirmação",
-       "right-autoconfirmed": "Editar páginas semi-protegidas",
+       "right-autoconfirmed": "Não ser afetado pelos limites de frequência baseados no número de IP",
        "right-bot": "Ser tratado como um processo automatizado",
        "right-nominornewtalk": "Não despoletar o aviso de mensagens novas ao fazer edições menores a páginas de discussão",
        "right-apihighlimits": "Usar limites superiores nas consultas ''(queries)'' via API",
        "emailccsubject": "Cópia da sua mensagem para $1: $2",
        "emailsent": "Mensagem enviada",
        "emailsenttext": "A sua mensagem foi enviada.",
-       "emailuserfooter": "Esta mensagem foi enviada por $1 para $2 através da opção \"Contactar este utilizador\" em {{SITENAME}}.",
+       "emailuserfooter": "Esta mensagem foi enviada por $1 para $2 através da opção \"{{int:emailpage}}\" em {{SITENAME}}.",
        "usermessage-summary": "Deixar mensagem de sistema.",
        "usermessage-editor": "Editor de mensagens de sistema",
        "watchlist": "Páginas vigiadas",
        "isimage": "ligação para ficheiro",
        "whatlinkshere-prev": "{{PLURAL:$1|anterior|$1 anteriores}}",
        "whatlinkshere-next": "{{PLURAL:$1|próximo|próximos $1}}",
-       "whatlinkshere-links": "← ligações",
+       "whatlinkshere-links": "← afluentes",
        "whatlinkshere-hideredirs": "$1 redirecionamentos",
        "whatlinkshere-hidetrans": "$1 transclusões",
        "whatlinkshere-hidelinks": "$1 ligações",
        "thumbnail_image-missing": "Ficheiro em falta: $1",
        "thumbnail_image-failure-limit": "Ocorreram demasiadas tentativas recentes ($1 ou mais) de criação desta miniatura. Tente novamente mais tarde, por favor.",
        "import": "Importar páginas",
-       "importinterwiki": "Importação transwikis",
-       "import-interwiki-text": "Selecione uma wiki e um título de página a importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação transwikis são registadas no [[Special:Log/import|Registo de importações]].",
+       "importinterwiki": "Importar de uma outra wiki",
+       "import-interwiki-text": "Selecione uma wiki e um título de página a importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação a partir de outras wikis são registadas no [[Special:Log/import|registo de importações]].",
        "import-interwiki-sourcewiki": "Wiki de origem:",
        "import-interwiki-sourcepage": "Página de origem:",
        "import-interwiki-history": "Copiar todo o histórico de revisões desta página",
        "import-rootpage-nosubpage": "O domínio \"$1\" da página de raiz não permite subpáginas.",
        "importlogpage": "Registo de importações",
        "importlogpagetext": "Importações administrativas de páginas com a preservação do histórico de edição de outras wikis.",
-       "import-logentry-upload": "importou [[$1]] por carregamento de ficheiro",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|edição importada|edições importadas}}",
-       "import-logentry-interwiki": "transwikis $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|edição importada|edições importadas}} de $2",
        "javascripttest": "Teste de JavaScript",
        "javascripttest-pagetext-noframework": "Esta página é reservada para a execução de testes de JavaScript.",
        "version-parser-function-hooks": "''Hooks'' das funções do analisador sintático",
        "version-hook-name": "Nome do hook",
        "version-hook-subscribedby": "Subscrito por",
-       "version-version": "(Versão $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[sem nome]",
        "version-license": "Licença do MediaWiki",
        "version-ext-license": "Licença",
        "revdelete-uname-unhid": "utilizador desocultado",
        "revdelete-restricted": "restrições a administradores aplicadas",
        "revdelete-unrestricted": "restrições a administradores removidas",
+       "logentry-block-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com expiração a $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueou}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|modificou}} parâmetros de bloqueio de {{GENDER:$4|$3}} com expiração a $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com expiração a $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|modificou}} parâmetros de bloqueio de {{GENDER:$4|$3}} com expiração a $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|importou}} $3 através de carregamento de ficheiro",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|importou}} $3 de outra wiki",
        "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",
        "log-description-managetags": "Esta página lista as tarefas de gestão relacionadas com [[Special:Tags|etiquetas]]. O registo contém apenas ações realizadas manualmente por um administrador; etiquetas podem ser criadas ou eliminadas pelo ''software'' da wiki sem uma entrada a ser gravada neste registo.",
        "logentry-managetags-create": "$1 {{GENDER:$2|criou}} a etiqueta \"$4\"",
        "logentry-managetags-delete": "$1 {{GENDER:$2|eliminou}} a etiqueta \"$4\" (removida de $5 {{PLURAL:$5|edição ou entrada de registo|edições e/ou entradas de registo}})",
-       "logentry-managetags-activate": "$1 {{GENDER:$2|ativou}} a etiqueta \"$1\" para uso de utilizadores e robôs.",
-       "logentry-managetags-deactivate": "$1 {{GENDER:$2|desativou}} a etiqueta \"$1\" para uso de utilizadores e robôs.",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|ativou}} a etiqueta \"$4\" para uso de utilizadores e robôs.",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|desativou}} a etiqueta \"$4\" para uso de utilizadores e robôs.",
        "rightsnone": "(nenhum)",
        "revdelete-summary": "editar resumo",
+       "feedback-adding": "A acrescentar os comentários à página...",
+       "feedback-back": "Retroceder",
+       "feedback-bugcheck": "Perfeito! Verifique apenas que não é já um dos [$1 defeitos conhecidos].",
+       "feedback-bugnew": "Eu verifiquei. Comunicar um novo defeito.",
        "feedback-bugornote": "Se está pronto para descrever um problema técnico em detalhe, por favor, [$1 comunique o defeito].\nCaso contrário, pode facilmente usar o formulário abaixo. O seu comentário será adicionado à página \"[$3 $2]\", junto com o seu nome de utilizador e o navegador que está a usar.",
-       "feedback-subject": "Assunto:",
-       "feedback-message": "Mensagem:",
        "feedback-cancel": "Cancelar",
-       "feedback-submit": "Enviar Comentários",
-       "feedback-adding": "A acrescentar os comentários à página...",
+       "feedback-close": "Feito",
+       "feedback-dialog-title": "Enviar opinião",
+       "feedback-dialog-intro": "Pode usar o fácil formulário abaixo para enviar os seus comentários. A sua opinião será adicionada à página \"$1\", juntamente com o seu nome de utilizador(a).",
+       "feedback-error-title": "Erro",
        "feedback-error1": "Erro: O resultado da API não foi reconhecido",
        "feedback-error2": "Erro: A edição falhou",
        "feedback-error3": "Erro: A API não responde",
+       "feedback-error4": "Erro: Não foi possível enviar o seu comentário sobre o título selecionado",
+       "feedback-message": "Mensagem:",
+       "feedback-subject": "Assunto:",
+       "feedback-submit": "Enviar",
+       "feedback-termsofuse": "Concordo em fornecer comentários de acordo com as Condições de Uso.",
        "feedback-thanks": "Obrigado! O seu comentário foi adicionado à página \"[$2 $1]\".",
-       "feedback-close": "Feito",
-       "feedback-bugcheck": "Perfeito! Verifique apenas que não é já um dos [$1 defeitos conhecidos].",
-       "feedback-bugnew": "Eu verifiquei. Comunicar um novo defeito.",
+       "feedback-thanks-title": "Obrigado!",
        "searchsuggest-search": "Pesquisa",
        "searchsuggest-containing": "contendo...",
        "api-error-badaccess-groups": "Não tem permissão para enviar ficheiros para esta wiki.",
        "json-error-utf8": "Caracteres UTF-8 mal formatados, possivelmente codificado incorretamente",
        "json-error-recursion": "Uma ou mais referências recursivas no valor a ser codificado",
        "json-error-inf-or-nan": "Um ou mais valores NaN ou INF no valor a ser codificado",
-       "json-error-unsupported-type": "Foi dado um valor de um tipo que não pode ser codificado"
+       "json-error-unsupported-type": "Foi dado um valor de um tipo que não pode ser codificado",
+       "headline-anchor-title": "Ligação para esta seção",
+       "special-characters-group-latin": "Latim",
+       "special-characters-group-latinextended": "Latim expandido",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Símbolos",
+       "special-characters-group-greek": "Grego",
+       "special-characters-group-cyrillic": "Cirílico",
+       "special-characters-group-arabic": "Árabe",
+       "special-characters-group-arabicextended": "Arábico estendido",
+       "special-characters-group-persian": "Persa",
+       "special-characters-group-hebrew": "Hebraico",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tâmil",
+       "special-characters-group-telugu": "Telugo",
+       "special-characters-group-sinhala": "Cingalês",
+       "special-characters-group-gujarati": "Guzerate",
+       "special-characters-group-devanagari": "Devanágari",
+       "special-characters-group-thai": "Tailandês",
+       "special-characters-group-lao": "Laociano",
+       "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"
 }
index 938faae..79c4096 100644 (file)
                        "គីមស៊្រុន",
                        "아라",
                        "Jdforrester",
-                       "Mar(c)"
+                       "Mar(c)",
+                       "Pikne",
+                       "Tacsipacsi"
                ]
        },
        "sidebar": "{{notranslate}}",
        "thu": "Abbreviation for Thursday, a day of the week.",
        "fri": "Abbreviation for Friday, a day of the week.",
        "sat": "Abbreviation for Saturday, a day of the week.",
-       "january": "The first month of the Gregorian calendar\n{{Identical|January}}",
-       "february": "The second month of the Gregorian calendar\n{{Identical|February}}",
-       "march": "The third month of the Gregorian calendar\n{{Identical|March}}",
-       "april": "The fourth month of the Gregorian calendar\n{{Identical|April}}",
-       "may_long": "The fifth month of the Gregorian calendar\n{{Identical|May}}",
-       "june": "The sixth month of the Gregorian calendar\n{{Identical|June}}",
-       "july": "The seventh month of the Gregorian calendar\n{{Identical|July}}",
-       "august": "The eighth month of the Gregorian calendar\n{{Identical|August}}",
-       "september": "The ninth month of the Gregorian calendar\n{{Identical|September}}",
-       "october": "The tenth month of the Gregorian calendar\n{{Identical|October}}",
-       "november": "The eleventh month of the Gregorian calendar\n{{Identical|November}}",
-       "december": "The twelfth month of the Gregorian calendar\n{{Identical|December}}",
-       "january-gen": "The first month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|January}}",
-       "february-gen": "The second month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|February}}",
-       "march-gen": "The third month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|March}}",
-       "april-gen": "The fourth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|April}}",
-       "may-gen": "The fifth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|May}}",
-       "june-gen": "The sixth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|June}}",
-       "july-gen": "The seventh month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|July}}",
-       "august-gen": "The eighth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|August}}",
-       "september-gen": "The nineth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|September}}",
-       "october-gen": "The tenth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|October}}",
-       "november-gen": "The eleventh month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|November}}",
-       "december-gen": "The twelfth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|December}}",
-       "jan": "Abbreviation of January, the first month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
-       "feb": "Abbreviation of February, the second month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
-       "mar": "Abbreviation of March, the third month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
-       "apr": "Abbreviation of April, the fourth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
-       "may": "''Abbreviation'' of May, the fifth month of the Gregorian calendar.\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.\n\n{{doc-important|This is not the full name of May, which resides at {{msg-mw|May long}}}}\n\n{{Identical|May}}",
-       "jun": "Abbreviation of June, the sixth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
-       "jul": "Abbreviation of July, the seventh month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
-       "aug": "Abbreviation of August, the eighth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
-       "sep": "Abbreviation of September, the ninth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
-       "oct": "Abbreviation of October, the tenth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
-       "nov": "Abbreviation of November, the eleventh month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
-       "dec": "Abbreviation of December, the twelfth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
+       "january": "{{doc-months|1}}\n{{Identical|January}}",
+       "february": "{{doc-months|2}}\n{{Identical|February}}",
+       "march": "{{doc-months|3}}\n{{Identical|March}}",
+       "april": "{{doc-months|4}}\n{{Identical|April}}",
+       "may_long": "{{doc-months|5}}\n{{Identical|May}}",
+       "june": "{{doc-months|6}}\n{{Identical|June}}",
+       "july": "{{doc-months|7}}\n{{Identical|July}}",
+       "august": "{{doc-months|8}}\n{{Identical|August}}",
+       "september": "{{doc-months|9}}\n{{Identical|September}}",
+       "october": "{{doc-months|10}}\n{{Identical|October}}",
+       "november": "{{doc-months|11}}\n{{Identical|November}}",
+       "december": "{{doc-months|12}}\n{{Identical|December}}",
+       "january-gen": "{{doc-months|1|genitive}}\n{{Identical|January}}",
+       "february-gen": "{{doc-months|2|genitive}}\n{{Identical|February}}",
+       "march-gen": "{{doc-months|3|genitive}}\n{{Identical|March}}",
+       "april-gen": "{{doc-months|4|genitive}}\n{{Identical|April}}",
+       "may-gen": "{{doc-months|5|genitive}}\n{{Identical|May}}",
+       "june-gen": "{{doc-months|6|genitive}}\n{{Identical|June}}",
+       "july-gen": "{{doc-months|7|genitive}}\n{{Identical|July}}",
+       "august-gen": "{{doc-months|8|genitive}}\n{{Identical|August}}",
+       "september-gen": "{{doc-months|9|genitive}}\n{{Identical|September}}",
+       "october-gen": "{{doc-months|10|genitive}}\n{{Identical|October}}",
+       "november-gen": "{{doc-months|11|genitive}}\n{{Identical|November}}",
+       "december-gen": "{{doc-months|12|genitive}}\n{{Identical|December}}",
+       "jan": "{{doc-months|1|short}}",
+       "feb": "{{doc-months|2|short}}",
+       "mar": "{{doc-months|3|short}}",
+       "apr": "{{doc-months|4|short}}",
+       "may": "{{doc-months|5|short}}",
+       "jun": "{{doc-months|6|short}}",
+       "jul": "{{doc-months|7|short}}",
+       "aug": "{{doc-months|8|short}}",
+       "sep": "{{doc-months|9|short}}",
+       "oct": "{{doc-months|10|short}}",
+       "nov": "{{doc-months|11|short}}",
+       "dec": "{{doc-months|12|short}}",
        "january-date": "A date in the Gregorian month of January. $1 is the numerical date, for example \"23\".\n{{Identical|January}}",
        "february-date": "A date in the Gregorian month of February. $1 is the numerical date, for example \"23\".\n{{Identical|February}}",
        "march-date": "A date in the Gregorian month of March. $1 is the numerical date, for example \"23\".\n{{Identical|March}}",
        "edithelp": "This is the text that appears on the editing help link that is near the bottom of the editing page",
        "edithelppage": "The help page displayed when a user clicks on editing help link which is present on the right of Show changes button.\n{{doc-important|Do not change the \"<tt>Help:</tt>\" part.}}",
        "helppage": "{{ignored}}\nThe link destination used by default in the sidebar, and in {{msg-mw|Noarticletext}}.",
+       "helppage-top-gethelp": "Link to some MediaWiki.org help page or tutorial.\n{{Identical|Help}}",
        "mainpage": "Defines the link and display name of the main page of the wiki. Shown as the top link in the navigation part of the interface. Please do not change it too often, that could break things!\n\nSee also:\n* {{msg-mw|Mainpage}}\n* {{msg-mw|Accesskey-n-mainpage}}\n* {{msg-mw|Tooltip-n-mainpage}}\n{{Identical|Main page}}",
        "mainpage-description": "The same as {{msg-mw|mainpage}}, used as link text on [[MediaWiki:Sidebar]].\n\nThis makes it possible to the change the link destination (the message \"mainpage\") without changing the link text or without disabling translations.\n\nSee also:\n* {{msg-mw|Mainpage-description}}\n* {{msg-mw|Accesskey-n-mainpage-description}}\n* {{msg-mw|Tooltip-n-mainpage-description}}\n{{Identical|Main page}}",
        "policy-url": "{{doc-important|Do not change the <code>Project:</code> part.}}\nThe URL of the project page describing the policies of the wiki.\n\nThis is shown below every page (the left link).",
        "nstab-media": "The name for the tab of the media namespace. Example: [[Media:Example]]\n\nSee also:\n* {{msg-mw|Nstab-media}}\n* {{msg-mw|Accesskey-ca-nstab-media}}\n* {{msg-mw|Tooltip-ca-nstab-media}}",
        "nstab-special": "The name for the tab of the special namespace. Example: [[Special:Version]]\n\nSee also:\n* {{msg-mw|Nstab-special}}\n* {{msg-mw|Tooltip-ca-nstab-special}}\n{{Identical|Special page}}",
        "nstab-project": "The name for the tab of the project namespace. Example: [[Project:Example]]\n\nSee also:\n* {{msg-mw|Nstab-project}}\n* {{msg-mw|Accesskey-ca-nstab-project}}\n* {{msg-mw|Tooltip-ca-nstab-project}}",
-       "nstab-image": "The name for the tab of the File namespace. Example: [[Image:Example]]\n\nSee also:\n* {{msg-mw|Nstab-image}}\n* {{msg-mw|Accesskey-ca-nstab-image}}\n* {{msg-mw|Tooltip-ca-nstab-image}}\n{{Identical|File}}",
+       "nstab-image": "The name for the tab of the File namespace. Example: [[:File:Example]]\n\nSee also:\n* {{msg-mw|Nstab-image}}\n* {{msg-mw|Accesskey-ca-nstab-image}}\n* {{msg-mw|Tooltip-ca-nstab-image}}\n{{Identical|File}}",
        "nstab-mediawiki": "The name for the tab of the MediaWiki namespace. Example: [[MediaWiki:Example]]\n\nSee also:\n* {{msg-mw|Nstab-mediawiki}}\n* {{msg-mw|Accesskey-ca-nstab-mediawiki}}\n* {{msg-mw|Tooltip-ca-nstab-mediawiki}}\n{{Identical|Message}}",
        "nstab-template": "The name for the tab of the template namespace. Example: [[Template:Example]]\n\nSee also:\n* {{msg-mw|Nstab-template}}\n* {{msg-mw|Accesskey-ca-nstab-template}}\n* {{msg-mw|Tooltip-ca-nstab-template}}\n{{Identical|Template}}",
        "nstab-help": "The name for the tab of the help namespace. Example: [[Help:Rollback]]\n\nSee also:\n* {{msg-mw|Nstab-help}}\n* {{msg-mw|Accesskey-ca-nstab-help}}\n* {{msg-mw|Tooltip-ca-nstab-help}}",
        "readonly_lag": "Error message displayed when the database is locked.",
        "internalerror": "{{Identical|Internal error}}",
        "internalerror_info": "Parameters:\n* $1 - error message",
+       "internalerror-fatal-exception": "Error message displayed by MediaWiki itself when the request failed, inside an error box which also contains a code, a timestamp and a colon before this message.\nParameters:\n* $1 - proper name of the kind of error\n* $2 - alphanumeric code identifying the error in the server logs\n* $3 - URL which resulted in the error\n$2 and $3 are not used by default and only available for wiki customisations, because they are useful for communication to the wiki system administrator.",
        "filecopyerror": "Parameters:\n* $1 - source file name\n* $2 - destination file name",
        "filerenameerror": "Parameters:\n* $1 - old file name\n* $2 - new file name",
        "filedeleteerror": "Parameters:\n* $1 - file name",
        "wrongpassword": "Used as error message when the provided password is wrong.\nThis message is used in html.\n{{Identical|Please try again}}",
        "wrongpasswordempty": "Error message displayed when entering a blank password.\n{{Identical|Please try again}}",
        "passwordtooshort": "This message is shown in [[Special:Preferences]] and [[Special:CreateAccount]].\n\nParameters:\n* $1 - the minimum number of characters in the password",
+       "passwordtoolong": "This message is shown in [[Special:Preferences]], [[Special:CreateAccount]], and [[Special:Userlogin]].\n\nParameters:\n* $1 - the maximum number of characters in the password",
        "password-name-match": "Used as error message when password validity check failed.",
        "password-login-forbidden": "Error message shown when the user has tried to log in using one of the special username/password combinations used for MediaWiki testing. (See [[mwr:75589]], [[mwr:75605]].)",
        "mailmypassword": "Used as label for Submit button in [[Special:PasswordReset]].\n{{Identical|Reset password}}",
        "bold_sample": "This is the sample text that you get when you press the first button on the left on the edit toolbar.\n\n{{Identical|Bold text}}",
        "bold_tip": "This is the text that appears when you hover the mouse over the first button on the left of the edit toolbar.\n\n{{Identical|Bold text}}",
        "italic_sample": "The sample text that you get when you press the second button from the left on the edit toolbar.\n\n{{Identical|Italic text}}",
-       "italic_tip": "This is the text that appears when you hover the mouse over the second button from the left on the edit toolbar.\n\n{{Identical|Italic text}}",
+       "italic_tip": "This is the tooltip that appears when the user points to the \"Italic\" button in the edit toolbar.\n\n{{Identical|Italic text}}",
        "link_sample": "This is the default text in the internal link that is created when you press the third button from the left on the edit toolbar (the \"Ab\" icon).",
        "link_tip": "Tip for internal links.\n{{Identical|Internal link}}",
        "extlink_sample": "This message appears when clicking on the fourth button of the edit toolbar. You can translate \"link title\". Because many of the localisations had urls that went to domains reserved for advertising, it is recommended that the link is left as-is. All customised links were replaced with the standard one, that is reserved in the standard and will never have ads or something.",
        "missingcommentheader": "Edit summary that is shown if you enable \"Prompt me when entering a blank summary\" and add a new section without headline to a talk page.\n\nSee also:\n* {{msg-mw|Missingsummary}}\n* {{msg-mw|Savearticle}}",
        "summary-preview": "Preview of the edit summary, shown under the edit summary itself.\nShould match: {{msg-mw|summary}}.",
        "subject-preview": "Should match {{msg-mw|subject}}",
+       "previewerrortext": "When a user has the editing preference LivePreview enabled, clicked the Preview or Show Changes button in the edit page and the action did not succeed.",
        "blockedtitle": "Used as title displayed for blocked users. The corresponding message body is one of the following messages:\n* {{msg-mw|Blockedtext|notext=1}}\n* {{msg-mw|Autoblockedtext|notext=1}}",
        "blockedtext": "Text displayed to blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link)\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Autoblockedtext}}",
        "autoblockedtext": "Text displayed to automatically blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block (in case of autoblocks: {{msg-mw|autoblocker}})\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link). Use it for GENDER.\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Blockedtext}}",
        "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",
+       "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}}.",
        "storedversion": "This is used in an edit conflict as the label for the top revision that has been stored, as opposed to your version {{msg-mw|yourtext}} that has not been stored which is shown at the bottom of the page.",
        "notextmatches": "Error message when there are no results",
        "prevn": "This is part of the navigation message on the top and bottom of Special pages (lists of things in alphabetical order, i.e. the '[[Special:Categories]]' page), where it is used as the first argument of {{msg-mw|Viewprevnext}}.\nIt is also used by Category pages (which do ''not'' use {{msg-mw|Viewprevnext}}).\n{{PLURAL:$1|$1}} is the number of items shown per page. It is not used when {{PLURAL:$1|$1}} is zero; not sure what happens when {{PLURAL:$1|$1}} is one.\n[[Special:WhatLinksHere|Whatlinkshere]] pages use {{msg-mw|Whatlinkshere-prev}} instead (still as an argument to {{msg-mw|Viewprevnext}}).\n\n{{Identical|Previous}}",
        "nextn": "This is part of the navigation message on the top and bottom of Special pages (lists of things in alphabetical order, i.e. the '[[Special:Categories]]' page), where it is used as the second argument of {{msg-mw|Viewprevnext}}.\n\nIt is also used by Category pages (which do ''not'' use {{msg-mw|Viewprevnext}}).\n\nParameters:\n* $1 - the number of items shown per page. It is not used when $1 is zero; not sure what happens when $1 is one.\n[[Special:WhatLinksHere|Whatlinkshere]] pages use {{msg-mw|Whatlinkshere-next}} instead (still as an argument to {{msg-mw|Viewprevnext}}).\n\n{{Identical|Next}}",
+       "prev-page": "This is part of the navigation message on the top and bottom of Category pages which links to the previous page\n{{Identical|Previous page}}",
+       "next-page": "This is part of the navigation message on the top and bottom of Category pages which links to the next page\n{{Identical|Next page}}",
        "prevn-title": "Parameters:\n* $1 - number of search results\nSee also:\n* {{msg-mw|Viewprevnext}}",
        "nextn-title": "Parameters:\n* $1 - number of search results\nSee also:\n* {{msg-mw|Viewprevnext}}",
        "shown-title": "Parameters:\n* $1 - number of search results",
        "rcshowhideminor-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideminor}}.\n\nSee also:\n* {{msg-mw|rcshowhideminor-hide}}\n{{Identical|Show}}",
        "rcshowhideminor-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideminor}}.\n\nSee also:\n* {{msg-mw|rcshowhideminor-show}}\n{{Identical|Hide}}",
        "rcshowhidebots": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|rcshowhidebots-show}} or {{msg-mw|rcshowhidebots-hide}}\n{{Identical|$1 bots}}",
-       "rcshowhidebots-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.\n\nSee also:\n* {{msg-mw|rcshowhidebots-show}}\n{{Identical|Show}}",
+       "rcshowhidebots-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.\n\nSee also:\n* {{msg-mw|rcshowhidebots-hide}}\n{{Identical|Show}}",
        "rcshowhidebots-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.\n\nSee also:\n* {{msg-mw|rcshowhidebots-hide}}\n{{Identical|Hide}}",
        "rcshowhideliu": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - any one of the following messages:\n** {{msg-mw|rcshowhideliu-show}}\n** {{msg-mw|rcshowhideliu-hide}}\n{{Identical|Registered user}}",
        "rcshowhideliu-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideliu}}.\n\nSee also:\n* {{msg-mw|rcshowhideliu-hide}}\n{{Identical|Show}}",
        "usermessage-summary": "This message is used as an edit summary for any message that is posted because of a system event. Translate \"leaving a message\" in the sense of: to give a message to someone; to deliver a message somewhere; to deposit.",
        "usermessage-editor": "The user name for the user that is the editor of system messages. See [{{canonicalurl:Thread:Support/Message_info_please}} discussion on Support].",
        "usermessage-template": "{{optional}}",
-       "watchlist": "{{Identical|Watchlist}}",
+       "watchlist": "Title of the Special:Watchlist page.\n\n{{Identical|Watchlist}}",
        "watchlist-summary": "{{doc-specialpagesummary|watchlist}}",
        "mywatchlist": "Link at the upper right corner of the screen.\n\nSee also:\n* {{msg-mw|Mywatchlist}}\n* {{msg-mw|Accesskey-pt-watchlist}}\n* {{msg-mw|Tooltip-pt-watchlist}}\n{{Identical|Watchlist}}",
        "watchlistfor2": "Subtitle on [[Special:Watchlist]].\nParameters:\n* $1 - Username of current user\n* $2 - Tool links (View relevant changes | View and edit watchlist | Edit raw watchlist)\n{{Identical|For $1}}",
        "blockipsuccesstext": "Used in [[Special:Block]].\nThe title (subject) for this message is {{msg-mw|Blockipsuccesssub}}.\n\nParameters:\n* $1 - username, can be used for GENDER",
        "ipb-blockingself": "Used as confirmation message in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Ipb-confirmhideuser}}",
        "ipb-confirmhideuser": "Used as confirmation message in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Ipb-blockingself}}",
-       "ipb-confirmaction": "Confirmation message displayed to users asking them to think again before really blocking someone.",
+       "ipb-confirmaction": "Confirmation message displayed to users asking them to think again before really blocking someone.\n\n<code>to check</code> refers here to a check box with the text \"{{int:ipb-confirm}}\"",
        "ipb-edit-dropdown": "Shown beneath the user block form on the right side. It is a link to {{msg-mw|Ipbreason-dropdown|notext=1}}.\n\nSee also:\n* {{msg-mw|Delete-edit-reasonlist}}\n* {{msg-mw|Protect-edit-reasonlist}}",
        "ipb-unblock-addr": "Used as page title in [[Special:Block]], if the target user is specified.\n\nParameters:\n* $1 - target username\n\nSee also:\n* {{msg-mw|Ipb-unblock}}\n{{Identical|Unblock}}",
        "ipb-unblock": "Used as page title in [[Special:Block]], if the target user is not specified.\n\nSee also:\n* {{msg-mw|Ipb-unblock-addr}}",
        "blocklogpage": "{{doc-logpage}}\n\nThe page name of [[Special:Log/block]]. Also appears in the drop down menu of [[Special:Log]] pages and in the action links of Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").\n\n{{Identical|Block log}}",
        "blocklog-showlog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER\nSee also:\n* {{msg-mw|Blocklog-showsuppresslog}}\n* {{msg-mw|Globalblocking-showlog}}",
        "blocklog-showsuppresslog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER",
-       "blocklogentry": "This is the text of an entry in the Block log, and recent changes, after hour (and date, only in the Block log) and sysop name:\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\", or empty string\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
-       "reblock-logentry": "This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name.\n\nParameters:\n* $1 - the user being reblocked\n* $2 - the expiry time of the block\n* $3 - extra parameters like \"account creation blocked\" (they are automatically between brackets)",
+       "blocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\", or empty string\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
+       "reblock-logentry": "This is ''logentry'' message only used on IRC.\n\nParameters:\n* $1 - the user being reblocked\n* $2 - the expiry time of the block\n* $3 - extra parameters like \"account creation blocked\" (they are automatically between brackets)",
        "blocklogtext": "Appears on top of [[Special:Log/block]].",
-       "unblocklogentry": "This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name:\n* $1 is the user being unblocked",
+       "unblocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 is the user being unblocked",
        "block-log-flags-anononly": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Anononlyblock}}\n{{Related|Block-log-flags}}",
        "block-log-flags-nocreate": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Createaccountblock}}\n{{Related|Block-log-flags}}",
        "block-log-flags-noautoblock": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n{{Related|Block-log-flags}}\n{{Identical|Autoblock disabled}}",
        "import-rootpage-nosubpage": "Used on [[Special:Import]], when the import namespace does not support subpages. Parameters:\n* $1 is a namespace name.",
        "importlogpage": "{{doc-logpage}}",
        "importlogpagetext": "This text appears at the top of the [{{canonicalurl:Special:Log|type=import}} import log] special page.",
-       "import-logentry-upload": "This is the text of an entry in the Import log (and Recent Changes), after hour (and date, only in the Import log) and sysop name:\n* $1 is the name of the imported file",
+       "import-logentry-upload": "{{ignored}}This is ''logentry'' message only used on IRC.\n* $1 is the name of the imported file",
        "import-logentry-upload-detail": "Used as success message and log entry. Parameters:\n* $1 - number of succeeded revisions\nSee also:\n* {{msg-mw|Import-logentry-interwiki-detail}}",
-       "import-logentry-interwiki": "Used as action listed in the log. Parameters:\n* $1 - page title",
+       "import-logentry-interwiki": "{{ignored}}This is ''logentry'' message only used on IRC. Parameters:\n* $1 - page title",
        "import-logentry-interwiki-detail": "Used as success message and log entry. Parameters:\n* $1 - number of succeeded revisions\n* $2 - interwiki name\nSee also:\n* {{msg-mw|Import-logentry-upload-detail}}",
        "javascripttest": "Title of the special page [[Special:JavaScriptTest]].\n\nSee also:\n* {{msg-mw|Javascripttest|title}}\n* {{msg-mw|Javascripttest-pagetext-noframework|summary}}\n* {{msg-mw|Javascripttest-pagetext-unknownframework|error message}}",
        "javascripttest-backlink": "{{optional}}\nUsed as subtitle in [[Special:JavaScriptTest]]. Parameters:\n* $1 - page title",
        "patrol-log-header": "Text that appears above the log entries on the [[Special:log|patrol log]].",
        "log-show-hide-patrol": "Used in [[Special:Log]]. Parameters:\n* $1 - link text; one of {{msg-mw|Show}} or {{msg-mw|Hide}}\n{{Related|Log-show-hide}}",
        "deletedrevision": "Used as log comment. Parameters:\n* $1 - archive name of old image",
-       "filedeleteerror-short": "Used as error message. Parameters:\n* $1 - page title\nSee also:\n* {{msg-mw|Filedeleteerror-long}}",
+       "filedeleteerror-short": "Used as error message. Parameters:\n* $1 – There are two uses: 1) filename or 2) more specific error message like {{msg-mw|Backend-fail-internal}}.\nSee also:\n* {{msg-mw|Filedeleteerror-long}}",
        "filedeleteerror-long": "Used as error message. Parameters:\n* $1 - ...\nSee also:\n* {{msg-mw|Filedeleteerror-short}}",
        "filedelete-missing": "Used as error message. Parameters:\n* $1 - filename\nSee also:\n* {{msg-mw|Filedelete-old-unregistered}}\n* {{msg-mw|Filedelete-current-unregistered}}",
        "filedelete-old-unregistered": "Used as error message. Parameters:\n* $1 - name\nSee also:\n* {{msg-mw|Filedelete-current-unregistered}}\n* {{msg-mw|Filedelete-missing}}",
        "exif-locationdestcode": "Code of location depicted. Typically this is an ISO country code, but the IPTC-iim standard also defines other codes like XSP for outer space. See appendix D (and tag 2:100) of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf",
        "exif-objectcycle": "Time of day that media is intended for. Either morning only, evening only, or all day. Typically only used for news related things that might only be broadcast at a specific time of day.\n\nSee also:\n* {{msg-mw|Exif-objectcycle-a}}\n* {{msg-mw|Exif-objectcycle-p}}\n* {{msg-mw|Exif-objectcycle-b}}",
        "exif-contact": "Contact information of the person responsible for the image.",
-       "exif-writer": "The person who wrote the caption of the image. See Description Writer on page 18 of http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata-201007_1.pdf",
+       "exif-writer": "The person who wrote the caption of the image. See Description Writer on page 18 of http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata-201007_1.pdf\n{{Identical|Writer}}",
        "exif-languagecode": "Language of image/media.\n\nThis is taken from IPTC-iim 2:135 and XMP's dc:language.\n{{Identical|Language}}",
        "exif-iimversion": "IIM version number. Version of information interchange 2:xx records. 4 is current version. 2 is often seen as well. This is the value stored 2:00 field (Note, iptc-iim also stores a model version in 1:00. This version field displays the 2:00 record only)",
        "exif-iimcategory": "Primary Category of image (or other media). Technically supposed to be limited to 3 characters, however that is not always followed. Some common 3 letter category abbreviations are expanded by mediawiki. Similar to {{msg-mw|exif-keywords}}.\n{{Identical|Category}}",
        "revdelete-uname-unhid": "Used on\n* {{msg-mw|logentry-delete-event}}\n* {{msg-mw|logentry-delete-revision}}\n* {{msg-mw|logentry-suppress-event}}\n* {{msg-mw|logentry-suppress-event}}",
        "revdelete-restricted": "Used as <code>$4</code> in the following messages when setting visibility restrictions for administrators:\n* {{msg-mw|Logentry-delete-event}}\n* {{msg-mw|Logentry-delete-revision}}\n* {{msg-mw|Logentry-suppress-event}}\n* {{msg-mw|Logentry-suppress-event}}",
        "revdelete-unrestricted": "Used as <code>$4</code> in the following messages when setting visibility restrictions for administrators:\n* {{msg-mw|Logentry-delete-event}}\n* {{msg-mw|Logentry-delete-revision}}\n* {{msg-mw|Logentry-suppress-event}}\n* {{msg-mw|Logentry-suppress-event}}",
+       "logentry-block-block": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Blocklogentry}}",
+       "logentry-block-unblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n\nCf. {{msg-mw|Unblocklogentry}}",
+       "logentry-block-reblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Reblock-logentry}}",
+       "logentry-suppress-block": "{{Logentry}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string",
+       "logentry-suppress-reblock": "{{Logentry}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string",
+       "logentry-import-upload": "{{Logentry|[[Special:Log/import]]}}",
+       "logentry-import-interwiki": "{{Logentry|[[Special:Log/import]]}}",
        "logentry-merge-merge": "{{Logentry|[[Special:Log/merge]]}}\n* $4 - the page into which the content is merged\n* $5 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
        "logentry-move-move": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "logentry-move-move-noredirect": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "newuserlog-autocreate-entry": "This message is used in the [[:mw:Extension:Newuserlog|new user log]] to mark an account that was created by MediaWiki as part of a [[:mw:Extension:CentralAuth|CentralAuth]] global account.",
        "rightslogentry": "This message is displayed in the [[Special:Log/rights|User Rights Log]] when a bureaucrat changes the user groups for a user.\n\nParameters:\n* $1 - the username\n* $2 - list of user groups or {{msg-mw|Rightsnone}}\n* $3 - list of user groups or {{msg-mw|Rightsnone}}\n\nThe name of the bureaucrat who did this task appears before this message.\n\nSimilar to {{msg-mw|Gur-rightslog-entry}}",
        "rightslogentry-autopromote": "This message is displayed in the [[Special:Log/rights|User Rights Log]] when a user is automatically promoted to a user group.\n\nParameters:\n* $1 - (Unused)\n* $2 - a comma separated list of old user groups or {{msg-mw|Rightsnone}}\n* $3 - a comma separated list of new user groups",
+       "feedback-adding": "Progress notice",
+       "feedback-back": "Button to go back to the previous action in the feedback dialog.\n{{Identical|Back}}",
+       "feedback-bugcheck": "Message that appears before the user submits a bug, reminding them to check for known bugs.\n\nParameters:\n* $1 - bug list page URL",
+       "feedback-bugnew": "Button label - asserts that the user has checked for existing bugs. When clicked will launch an external form to add a new bug in a new tab or window",
        "feedback-bugornote": "When feedback dialog box is opened, this introductory message in small print explains the options to report a bug or add simple feedback.\n\nWe expect that people in a hurry will not read this.\n\nParameters:\n* $1 - Bug note URL\n* $2 - \"Feedback\"\n* $3 - Feedback page URL",
-       "feedback-subject": "Label for a text input\n{{Identical|Subject}}",
-       "feedback-message": "Label for a textarea; signature referrs to a Wikitext signature.\n{{Identical|Message}}",
        "feedback-cancel": "Button label\n{{Identical|Cancel}}",
-       "feedback-submit": "Button label\n{{Identical|Submit}}",
-       "feedback-adding": "Progress notice",
+       "feedback-close": "Button label\n{{Identical|Done}}",
+       "feedback-external-bug-report-button": "A button for submitting an external technical bug report.",
+       "feedback-dialog-title": "Title of the feedback dialog",
+       "feedback-dialog-intro": "An introduction at the top of the feedback dialog. $1 - Feedback page link",
+       "feedback-error-title": "{{Identical|Error}}",
        "feedback-error1": "Error message, appears when an unknown error occurs submitting feedback",
        "feedback-error2": "Error message, appears when we could not add feedback",
        "feedback-error3": "Error message, appears when we lose our connection to the wiki",
+       "feedback-error4": "Error message, appears when mediawiki.feedback or one of its dependencies is misconfigured or there is a problem fetching one of the modules",
+       "feedback-message": "Label for a textarea; signature refers to a Wikitext signature.\n{{Identical|Message}}",
+       "feedback-subject": "Label for a text input\n{{Identical|Subject}}",
+       "feedback-submit": "Button label\n{{Identical|Submit}}",
+       "feedback-terms": "Label for a checkbox asking for permissions to submit browser information.",
+       "feedback-termsofuse": "Label with an agreement about the terms of use.",
        "feedback-thanks": "Thanks message, appears if feedback was successful. Parameters:\n* $1 - \"Feedback\"\n* $2 - Feedback page URL",
-       "feedback-close": "Button label\n{{Identical|Done}}",
-       "feedback-bugcheck": "Message that appears before the user submits a bug, reminding them to check for known bugs.\n\nParameters:\n* $1 - bug list page URL",
-       "feedback-bugnew": "Button label - asserts that the user has checked for existing bugs. When clicked will launch a bugzilla form to add a new bug in a new tab or window",
+       "feedback-thanks-title": "The title of the thank you dialog at the end of the submission process.\n{{Identical|Thank you}}",
+       "feedback-useragent": "A label denoting the user agent in the feedback that is posted to the feedback page.",
        "searchsuggest-search": "Greyed out default text in the simple search box in the Vector skin. (It disappears and lets the user enter the requested search terms when the search box receives focus.)\n\n{{Identical|Search}}",
        "searchsuggest-containing": "Label used in the special item of the search suggestions list which gives the user an option to perform a full text search for the term.",
        "api-error-badaccess-groups": "API error message that can be used for client side localisation of API errors.",
        "log-name-pagelang": "Display entry for log name for changes in page language in Special:Log.",
        "log-description-pagelang": "Display description for log name for changes in page language in Special:Log.",
        "logentry-pagelang-pagelang": "{{Logentry}}\nAdditional parameters:\n* $4 - old language code, or \"[def]\" (hard-coded)\n* $5 - new language code, or \"[def]\" (hard-coded)",
-       "default-skin-not-found": "Message shown when the default skin for this MediaWiki installation can not be found.\n\nParameters:\n* $1: skin identifier for the default skin\n* $2: list of installed skins, composed using {{msg-mw|default-skin-not-found-row-enabled}} and {{msg-mw|default-skin-not-found-row-disabled}}\n* $3: code snippet to use to enable installed skins",
+       "default-skin-not-found": "Message shown when the default skin for this MediaWiki installation can not be found.\n\nParameters:\n* $1: skin identifier for the default skin\n* $2: list of installed skins, composed using {{msg-mw|default-skin-not-found-row-enabled}} and {{msg-mw|default-skin-not-found-row-disabled}}\n* $3: code snippet to use to enable installed skins\n* $4: Number of items in list $2\n* $5: Number of lines in $3, one per skin",
        "default-skin-not-found-no-skins": "Message shown when the default skin for this MediaWiki installation can not be found and the installation has no skins at all.\n\nParameters:\n* $1: name of the default skin",
        "default-skin-not-found-row-enabled": "One row of the list of installed skins shown as a part of the following message (for an enabled skin):\n* {{msg-mw|default-skin-not-found}}\n----\nParameters:\n* $1 - skin identifier\n* $2 - human-readable skin name\nSee also:\n* {{msg-mw|Default-skin-not-found-row-disabled}}",
        "default-skin-not-found-row-disabled": "One row of the list of installed skins shown as a part of the following message (for a disabled skin):\n* {{msg-mw|default-skin-not-found}}\n----\nParameters:\n* $1 - skin identifier\n* $2 - human-readable skin name\nSee also:\n* {{msg-mw|Default-skin-not-found-row-enabled}}",
        "json-error-utf8": "User error message when there are malformed UTF-8 characters, possibly incorrectly encoded.\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
        "json-error-recursion": "PHP JSON encoding/decoding error. See http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
        "json-error-inf-or-nan": "PHP JSON encoding/decoding error. See http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
-       "json-error-unsupported-type": "PHP JSON encoding/decoding error. See http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}"
+       "json-error-unsupported-type": "PHP JSON encoding/decoding error. See http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
+       "headline-anchor-title": "Title tooltip for the section anchor symbol",
+       "special-characters-group-latin": "This is the name of a script, or alphabet, not a language.",
+       "special-characters-group-latinextended": "The name of the Latin Extended character set.",
+       "special-characters-group-ipa": "IPA means a script: \"international phonetic alphabet\" here, and not \"international phonetic association\", the organization behind it.",
+       "special-characters-group-symbols": "The section name for symbols\n\n{{Identical|Symbol}}",
+       "special-characters-group-greek": "This is the name of a script, or alphabet, not a language.",
+       "special-characters-group-cyrillic": "This is the name of a script, or a group of alphabets, used mainly in Eastern Europe and North and Central Asia.\n{{related|Special-characters-group}}",
+       "special-characters-group-arabic": "This is the name of a script, or alphabet, not a language.\n{{related|Special-characters-group}}",
+       "special-characters-group-arabicextended": "This is a description of the additional group of Arabic script characters for languages such as a Persian, Urdu, Pashto and others. This message is supposed to be similar to {{msg-mw|special-characters-group-latinextended}}.\n{{related|Special-characters-group}}",
+       "special-characters-group-persian": "The name of the Persian character set (alphabet).",
+       "special-characters-group-hebrew": "This is the name of a script, or alphabet, not a language.",
+       "special-characters-group-bangla": "The name of the [[w:Bengali alphabet|Bangla]] (a.k.a. Bengali) character set (alphabet).\n{{related|Special-characters-group}}",
+       "special-characters-group-tamil": "The name of the [[w:Tamil_Script#Numerals_and_symbols|Tamil]] numerals and symbols.",
+       "special-characters-group-telugu": "The name of the [[w:Telugu language#Alphabet|Telugu]] character set (alphabet).",
+       "special-characters-group-sinhala": "The name of the [[w:Sinhala alphabet|Sinhala]] character set (alphabet).",
+       "special-characters-group-gujarati": "The name of the [[w:Gujarati alphabet|Gujarati]] character set (alphabet).",
+       "special-characters-group-devanagari": "The name of the [[w:Devanagari]] character set (alphabet).\n{{related|Special-characters-group}}",
+       "special-characters-group-thai": "The name of the [[w:Thai alphabet|Thai]] character set (alphabet).",
+       "special-characters-group-lao": "{{Identical|Lao}}",
+       "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"
 }
index 32a6b1c..d91d094 100644 (file)
@@ -9,7 +9,8 @@
                        "The Evil IP address",
                        "לערי ריינהארט",
                        "아라",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Macofe"
                ]
        },
        "tog-underline": "T'inkikunata uranpi sikwiy",
        "searchall": "tukuy",
        "showingresults": "Qhipanpiqa rikuchkanki {{PLURAL:$1|'''1''' tarisqatam|'''$1'''-kama tarisqakunatam}}, '''$2''' huchhawan qallarispa.",
        "showingresultsinrange": "Qhipanpiqa rikuchkanki {{PLURAL:$1|<strong>1</strong>-kama tarisqatam|<strong>$1</strong>-kama tarisqakunatam}}, #<strong>$2</strong> huchhamanta #<strong>$3</strong> huchhakama.",
+       "search-showingresults": "{{PLURAL:$4|Taripasqa <strong>$1</strong>, <strong>$3</strong>-pura|Taripasqakuna <strong>$1</strong>-manta <strong>$2</strong>-kama, <strong>$3</strong>-pura}}",
        "search-nonefound": "Maskaypaq kay hina kachun nisqakamaqa manam kanchu taripasqakuna.",
        "powersearch-legend": "Ñawparikusqa maskay",
        "powersearch-ns": "Kay suti k'itikunapi maskay:",
        "delete-toobig": "Kay p'anqaqa ancha wiñay kawsaysapa, $1-manta aswan {{PLURAL:$1|musuqchasqayuq|musuqchasqayuq}}. Kay hina p'anqakunata qulluyqa saywachasqam, {{SITENAME}}ta mana waqllinapaq.",
        "delete-warning-toobig": "Kay p'anqaqa ancha wiñay kawsaysapa, $1-manta aswan {{PLURAL:$1|musuqchasqayuq|musuqchasqayuq}}. Kay hina p'anqata qulluspaykiqa, {{SITENAME}}ta waqllinkimanchá. Kay ruraymanta anchata yuyaychakuspa hamut'ay.",
        "rollback": "Hukchasqakunata kutichiy",
-       "rollback_short": "Kutichiy",
        "rollbacklink": "Kutichiy",
        "rollbacklinkcount": "$1 {{PLURAL:$1|hukchasqata}} kutichiy",
        "rollbacklinkcount-morethan": "$1-manta aswan {{PLURAL:$1|hukchasqakunata}} kutichiy",
        "import-rootpage-nosubpage": "Saphi p'anqap \"$1\" sutisuyunpiqa urin p'anqakuna manam kanqachu.",
        "importlogpage": "Hawamanta chaskiy hallch'a",
        "importlogpagetext": "Huk wikikunamanta wiñay kawsayniyuq p'anqakunata kamachina chaskiykuna.",
-       "import-logentry-upload": "hawamanta chaskisqa [[$1]] willañiqita churkuspa",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|hukchasqa|hukchasqakuna}}",
-       "import-logentry-interwiki": "huk wikimanta chaskisqa $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|hukchasqa|hukchasqakuna}} $2-manta",
        "javascripttest": "JavaScript llanchiy",
-       "javascripttest-title": "$1 llanchiykunam richkan",
        "javascripttest-pagetext-noframework": "Kay p'anqaqa JavaScript llanchina purichinallapaqmi kachun.",
        "javascripttest-pagetext-unknownframework": "Mana riqsisqa \"$1\" nisqa llanchina inchu ruray",
        "javascripttest-pagetext-frameworks": "Ama hina kaspa, kay qatiq llanchina inchu ruraykunamanta hukta akllay: $1",
        "javascripttest-pagetext-skins": "Qarata akllay llanchiykunata paywan purichinaykipaq:",
        "javascripttest-qunit-intro": "Qhaway [$1 llanchina yachachinapi], mediawiki.org nisqapi kaq.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit llanchina",
        "tooltip-pt-userpage": "Qampa ruraqpa p'anqayki",
        "tooltip-pt-anonuserpage": "IP huchhaykipaq ruraqpa p'anqan",
        "tooltip-pt-mytalk": "Rimanakuy p'anqayki",
        "watchlisttools-edit": "Watiqana sutisuyuta qhawaspa llamk'apuy",
        "watchlisttools-raw": "Chawa watiqana sutisuyuta llamk'apuy",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|rimanakuy]])",
-       "unknown_extension_tag": "Mana riqsisqa \"$1\" mast'arina k'askana",
        "duplicate-defaultsort": "Paqtataq: Kikinmanta allinchana llawi «$2» ñawpaq kikinmanta allinchana llawitam «$1» huknachan.",
        "version": "Musuqchasqa",
        "version-extensions": "Tiyachisqa mast'arinakuna",
        "version-parser-function-hooks": "T'ikrana rurana ch'iwinakuna",
        "version-hook-name": "Ch'iwinap sutin",
        "version-hook-subscribedby": "Kay runap mañaykusqan:",
-       "version-version": "(Musuqchasqa $1)",
+       "version-version": "($1)",
        "version-license": "Saqillay",
        "version-ext-license": "Saqillay",
        "version-ext-colheader-name": "Mast'ariy",
        "specialpages-group-wiki": "Willakuna llamk'anakunapas",
        "specialpages-group-redirects": "Pusapunapaq sapaq p'anqakuna",
        "specialpages-group-spam": "Spam nisqa millay rurayta hark'anapaq llamk'anakuna",
+       "specialpages-group-developer": "Kururachiqkunapaq llamk'anakuna",
        "blankpage": "Ch'usaq p'anqa",
        "intentionallyblankpage": "Kay p'anqaqa munaylla ch'usaqmi kachun",
        "external_image_whitelist": "  #Kay sinruta kay hinallatam saqiy<pre>\n#Ñiqilla hawanchana rakikunata churay (// nisqapura rakitam) urapi\n#Kaykunaqa hawa (q'uñilla t'inkisqa) rikchakunap URL tiyayninkunawanmi taripanachisqa kanqa\n#Taripasqakunaqa rikcha hinam rikurinqa, hukkunapaqtaq rikchaman t'inkillam rikurinqa\n#«#» nisqawan qallariq sinrukunaqa willapuy hinam llamk'apusqa kanqa\n#Kayqa manam musyanchu uchuy icha hatun sanancha kayta\n\n#Tukuy regex rakikunata kay siq'ip hananman churay. Kay sinruta kay hinallatam saqiy</pre>",
        "logentry-rights-autopromote": "{{GENDER:$2|}}$1 sutiyuq ruraqqa kikinmantam ñawparikun $4-manta $5-man",
        "rightsnone": "(-)",
        "revdelete-summary": "yuyarinata llamk'apuy",
+       "feedback-adding": "Willapuyniykita kay p'anqaman yapay: ...",
+       "feedback-bugcheck": "Allillanmi! Llanchirillay [$1 riqsisqapura huk pantasqañachu] mana kanmanchu.",
+       "feedback-bugnew": "Llanchisqañam. Musuq pantasqamanta willay",
        "feedback-bugornote": "Allwiyapi sasachakuymanta imaymanachanta willayta munaspaykiqa, [$1 pantasqamanta willay].\nMana chayqa, kay qatiqpi kaq hunt'ana p'anqatam llamk'achiyta atinki. Willapuyniykiqa \"[$3 $2]\" sutiyuq p'anqamanmi yapasqa kanqa, hinallataqmi ruraqpa sutiykipas qampa llamk'achisqayki llika wamp'unapas.",
-       "feedback-subject": "Yuyancha:",
-       "feedback-message": "Willay:",
        "feedback-cancel": "Ama niy",
-       "feedback-submit": "Willapuyniykita kachay",
-       "feedback-adding": "Willapuyniykita kay p'anqaman yapay: ...",
+       "feedback-close": "Rurasqañam",
        "feedback-error1": "Pantasqa: API nisqamanta taripasqaqa manam riqsirisqachu",
        "feedback-error2": "Pantasqa: Manam llamk'apuyta atinchu",
        "feedback-error3": "Pantasqa: API nisqaqa manam kutipanchu",
+       "feedback-message": "Willay:",
+       "feedback-subject": "Yuyancha:",
+       "feedback-submit": "Kachay",
        "feedback-thanks": "Añaychayki! Willapuyniykiqa \"[$2 $1]\" sutiyuq p'anqaman yapasqañam.",
-       "feedback-close": "Rurasqañam",
-       "feedback-bugcheck": "Allillanmi! Llanchirillay [$1 riqsisqapura huk pantasqañachu] mana kanmanchu.",
-       "feedback-bugnew": "Llanchisqañam. Musuq pantasqamanta willay",
        "searchsuggest-search": "Maskay",
        "searchsuggest-containing": "kaykunayuq: ...",
        "api-error-badaccess-groups": "Kay wikipiqa willañiqikunata manam churkuyta atinkichu.",
        "expand_templates_ok": "Arí niy",
        "expand_templates_remove_comments": "Willapusqakunata qichuy",
        "expand_templates_generate_rawhtml": "Chawa HTML-ta rikuchiy",
-       "expand_templates_preview": "Ñawpaqta qhawallay"
+       "expand_templates_preview": "Ñawpaqta qhawallay",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin mast'arisqa",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Sananchakuna",
+       "special-characters-group-greek": "Grigu",
+       "special-characters-group-cyrillic": "Kirilitsa",
+       "special-characters-group-arabic": "Arabya",
+       "special-characters-group-arabicextended": "Arabya mast'arisqa",
+       "special-characters-group-persian": "Pharsi",
+       "special-characters-group-hebrew": "Iwriyu",
+       "special-characters-group-bangla": "Banla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Guyarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thay",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "kuru aspi",
+       "special-characters-title-emdash": "suni aspi",
+       "special-characters-title-minus": "qichuy sanancha"
 }
index 983b819..a94802c 100644 (file)
@@ -8,7 +8,9 @@
                        "Shirayuki",
                        "Urhixidur",
                        "לערי ריינהארט",
-                       "Davent"
+                       "Davent",
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Suttastritgar colliaziuns:",
        "import-rootpage-nosubpage": "Il tip da pagina \"$1\" da la pagina principala na lubescha naginas sutpaginas.",
        "importlogpage": "Protocol dals imports",
        "importlogpagetext": "Import administrativ da paginas cun cronologia da modificaziuns dad autras wikis.",
-       "import-logentry-upload": "ha importà [[$1]] cun chargiar si ina datoteca",
        "import-logentry-upload-detail": "{{PLURAL:$1|Ina versiun|$1 versiuns}}",
-       "import-logentry-interwiki": "ha importà $1 (transwiki)",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Ina versiun|$1 versiuns}} da $2",
        "javascripttest": "Test da JavaScript",
        "javascripttest-pagetext-noframework": "Questa pagina è reservada per exequir tests da JavaScript.",
        "version-parser-function-hooks": "Hooks per funcziuns dal parser",
        "version-hook-name": "Num dal hook",
        "version-hook-subscribedby": "Abonnà da",
-       "version-version": "(Versiun $1)",
+       "version-version": "($1)",
        "version-license": "Licenza",
        "version-poweredby-credits": "Questa wiki utilisescha '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "auters",
        "logentry-rights-autopromote": "$1 è vegnì {{GENDER:$2|promovì|promovida}} automaticamain da $4 a $5",
        "rightsnone": "(nagins)",
        "revdelete-summary": "resumaziun da la midada",
+       "feedback-adding": "Agiuntar il resun a la pagina…",
+       "feedback-bugcheck": "Grondius! Controllescha simplamain che quai n'è betg gia in da las [$1 errurs enconuschentas].",
+       "feedback-bugnew": "Jau hai controllà. Rapportar ina nova errur.",
        "feedback-bugornote": "Sche ti vuls descriver detagliadamain in problem techic, lura [$1 rapporta in bug].\nUschiglio pos ti utilisar il formular simpel sutvart. Tes commentari vegn agiuntà a la pagina \"[$3 $2]\" ensemen cun tes num d'utilisader.",
-       "feedback-subject": "Object:",
-       "feedback-message": "Messadi:",
        "feedback-cancel": "Interrumper",
-       "feedback-submit": "Trametter il resun",
-       "feedback-adding": "Agiuntar il resun a la pagina…",
+       "feedback-close": "Terminà",
        "feedback-error1": "Errur: Resultat nunenconuschent dal API",
        "feedback-error2": "Errur: La modificaziun n'è betg reussida",
        "feedback-error3": "Errur: Nagina resposta dal API",
+       "feedback-message": "Messadi:",
+       "feedback-subject": "Object:",
+       "feedback-submit": "Trametter",
        "feedback-thanks": "Grazia! Tes resun è vegnì publitgà sin la pagina \"[$2 $1]\".",
-       "feedback-close": "Terminà",
-       "feedback-bugcheck": "Grondius! Controllescha simplamain che quai n'è betg gia in da las [$1 errurs enconuschentas].",
-       "feedback-bugnew": "Jau hai controllà. Rapportar ina nova errur.",
        "searchsuggest-search": "Tschertgar",
        "searchsuggest-containing": "cuntegna…",
        "api-error-badaccess-groups": "Ti na dastgas betg chargiar datotecas en quest wiki.",
index 24fcf46..a3e56ef 100644 (file)
@@ -23,7 +23,9 @@
                        "Urhixidur",
                        "לערי ריינהארט",
                        "아라",
-                       "XXN"
+                       "XXN",
+                       "Fitoschido",
+                       "Macofe"
                ]
        },
        "tog-underline": "Sublinierea legăturilor:",
        "disclaimers": "Termeni",
        "disclaimerpage": "Project:Termeni",
        "edithelp": "Ajutor pentru modificare",
+       "helppage-top-gethelp": "Ajutor",
        "mainpage": "Pagina principală",
        "mainpage-description": "Pagina principală",
        "policy-url": "Project:Politică",
        "readonly_lag": "Baza de date a fost închisă automatic în timp ce serverele secundare ale bazei de date îl urmează pe cel principal.",
        "internalerror": "Eroare internă",
        "internalerror_info": "Eroare internă: $1",
+       "internalerror-fatal-exception": "Excepție fatală pentru tipul „$1”",
        "filecopyerror": "Fișierul \"$1\" nu a putut fi copiat la \"$2\".",
        "filerenameerror": "Fișierul \"$1\" nu a putut fi mutat la \"$2\".",
        "filedeleteerror": "Fișierul \"$1\" nu a putut fi șters.",
        "wrongpassword": "Parola pe care ați introdus-o este incorectă. Vă rugăm să încercați din nou.",
        "wrongpasswordempty": "Spațiul pentru introducerea parolei nu a fost completat. Vă rugăm să încercați din nou.",
        "passwordtooshort": "Parola trebuie să aibă cel puțin {{PLURAL:$1|1 caracter|$1 caractere|$1 de caractere}}.",
+       "passwordtoolong": "Parolele nu pot fi mai lungi de {{PLURAL:$1|un caracter|$1 caractere|$1 de caractere}}.",
        "password-name-match": "Parola dumneavoastră trebuie să fie diferită de numele de utilizator.",
        "password-login-forbidden": "Utilizarea acestui nume de utilizator și a acestei parole este interzisă.",
        "mailmypassword": "Resetează parola",
        "missingcommentheader": "'''Atenție,''' nu ați pus titlu sau subiect la acest comentariu.\nDacă dați din nou clic pe „{{int:savearticle}}” modificarea va fi salvată fără titlu.",
        "summary-preview": "Previzualizare descriere:",
        "subject-preview": "Previzualizare subiect/titlu:",
+       "previewerrortext": "A survenit o eroare ca urmare a tentativei de previzualizare a modificărilor dumneavoastră.",
        "blockedtitle": "Utilizatorul este blocat",
        "blockedtext": "'''Adresa IP sau contul dumneavoastră de utilizator a fost blocat.'''\n\nBlocarea a fost făcută de $1.\nMotivul blocării este ''$2''.\n\n* Începutul blocării: $8\n* Sfârșitul blocării: $6\n* Utilizatorul vizat: $7\n\nÎl puteți contacta pe $1 sau pe alt [[{{MediaWiki:Grouppage-sysop}}|administrator]] pentru a discuta blocarea.\nNu puteți folosi opțiunea 'trimite un e-mai utilizatorului' decât dacă o adresă de e-mail validă este specificată în [[Special:Preferences|preferințele contului]] și nu sunteți blocat la folosirea ei.\nAdresa dumneavoastră IP curentă este $3, iar ID-ul blocării este $5. Vă rugăm să includeți oricare sau ambele informații în orice interogări.",
        "autoblockedtext": "Această adresă IP a fost blocată automat deoarece a fost folosită de către un alt utilizator, care a fost blocat de $1.\nMotivul blocării este:\n\n:''$2''\n\n* Începutul blocării: $8\n* Sfârșitul blocării: $6\n* Intervalul blocării: $7\n\nPuteți contacta pe $1 sau pe unul dintre ceilalți [[{{MediaWiki:Grouppage-sysop}}|administratori]] pentru a discuta blocarea.\n\nNu veți putea folosi opțiunea de \"trimite e-mail\" decât dacă aveți înregistrată o adresă de e-mail validă la [[Special:Preferences|preferințe]] și nu sunteți blocat la folosirea ei.\n\nAveți adresa IP $3, iar identificatorul dumneavoastră de blocare este $5.\nVă rugăm să includeți detaliile de mai sus în orice interogări pe care le faceți.",
        "session_fail_preview_html": "'''Ne pare rău! Modificările dvs. nu au putut fi procesate din cauza pierderii datelor sesiunii.'''\n\n''Deoarece {{SITENAME}} are activat HTML brut, previzualizarea este ascunsă ca măsură de precauție împotriva atacurilor JavaScript.''\n\n'''Dacă această încercare de modificare este legitimă, vă rugăm să încercați din nou. Dacă nu funcționează nici în acest fel, [[Special:UserLogout|închideți sesiunea]] și încearcați să vă autentificați din nou.'''",
        "token_suffix_mismatch": "'''Modificarea ta a fost refuzată pentru că clientul tău a deformat caracterele de punctuatie în modificarea semnului.\nModificarea a fost respinsă pentru a preveni deformarea textului paginii.\nAcest fapt se poate întâmpla atunci când folosești un serviciu proxy anonim.'''",
        "edit_form_incomplete": "'''Unele părți ale formularului de modificare nu au ajuns la server; verificați dacă modificările dumneavoastră sunt intacte și reîncercați.'''",
-       "editing": "modificare $1",
-       "creating": "Crearea paginii $1",
+       "editing": "Modificare „$1”",
+       "creating": "Crearea paginii „$1”",
        "editingsection": "modificare $1 (secțiune)",
        "editingcomment": "Modificare $1 (secțiune nouă)",
        "editconflict": "Conflict de modificare: $1",
        "notextmatches": "Nici un rezultat în textele articolelor",
        "prevn": "anterioarele {{PLURAL:$1|$1}}",
        "nextn": "următoarele {{PLURAL:$1|$1}}",
+       "prev-page": "pagina anterioară",
+       "next-page": "pagina următoare",
        "prevn-title": "{{PLURAL:$1|anteriorul|anterioarele}} $1 {{PLURAL:$1|rezultat|rezultate}}",
        "nextn-title": "{{PLURAL:$1|următorul|următoarele}} $1 {{PLURAL:$1|rezultat|rezultate}}",
        "shown-title": "Arată $1 {{PLURAL:$1|rezultat|rezultate}} pe pagină",
        "unusedimages": "Pagini neutilizate",
        "wantedcategories": "Categorii dorite",
        "wantedpages": "Pagini dorite",
+       "wantedpages-summary": "Lista paginilor inexistente către care trimite cel mai mare număr de legături, excluzând paginile către care trimit doar redirecționări. Pentru o listă a paginilor inexistente către care trimit doar redirecționări, accesați [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Titlu invalid în rezultatele : $1",
        "wantedfiles": "Fișiere dorite",
        "wantedfiletext-cat": "Următoarele fișiere sunt utilizate, dar nu există. Fișierele provenind din depozite externe pot apărea listate, în ciuda faptului că ele nu există. Orice astfel de pozitive false vor fi <del>tăiate</del>. În plus, paginile care încorporează astfel de fișiere inexistente sunt listate la [[:$1]].",
        "thumbnail_image-missing": "Fișierul următor nu poate fi găsit: $1",
        "thumbnail_image-failure-limit": "Recent au existat prea multe încercări nereușite ($1 sau mai multe) pentru a randa această miniatură. Încercați din nou mai târziu.",
        "import": "Importare pagini",
-       "importinterwiki": "Import transwiki",
-       "import-interwiki-text": "Selectează un wiki și titlul paginii care trebuie importate. Datele reviziilor și numele editorilor vor fi salvate. Toate acțiunile de import transwiki pot fi găsite la [[Special:Log/import|log import]]",
+       "importinterwiki": "Importare din alt wiki",
+       "import-interwiki-text": "Selectați un wiki și titlul paginii care trebuie importate.\nData și ora versiunilor, precum și numele editorilor vor fi păstrate.\nToate acțiunile de importare din alte wikiuri se găsesc în [[Special:Log/import|jurnalul de importare]].",
        "import-interwiki-sourcewiki": "Wikiul sursă:",
        "import-interwiki-sourcepage": "Pagina sursă:",
        "import-interwiki-history": "Copiază toate versiunile istoricului acestei pagini",
        "importcantopen": "Fișierul importat nu a putut fi deschis",
        "importbadinterwiki": "Legătură interwiki greșită",
        "importsuccess": "Import reușit!",
-       "importnosources": "Nici o sursă de import transwiki a fost definită și încărcările directe ale istoricului sunt oprite.",
+       "importnosources": "Nu a fost definită nici o sursă de import din alt wiki; încărcarea directă a istoricului este dezactivată.",
        "importnofile": "Nici un fișier pentru import nu a fost încărcat.",
        "importuploaderrorsize": "Încărcarea fișierului a eșuat.\nFișierul are o mărime mai mare decât limita de încărcare permisă.",
        "importuploaderrorpartial": "Încărcarea fișierului a eșuat.\nFișierul a fost incărcat parțial.",
        "import-rootpage-nosubpage": "Spațiul de nume „$1” al paginii rădăcină nu permite subpagini.",
        "importlogpage": "Log import",
        "importlogpagetext": "Imoprturi administrative de pagini de la alte wiki, cu istoricul editărilor.",
-       "import-logentry-upload": "a importat [[$1]] prin încărcare de fișier",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|versiune importată|versiuni importate|de versiuni importate}}",
-       "import-logentry-interwiki": "transwikificat $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versiune|versiuni|de versiuni}} importate de la $2",
        "javascripttest": "Testare JavaScript",
        "javascripttest-pagetext-noframework": "Această pagină este rezervată rulării testelor JavaScript.",
        "revdelete-uname-unhid": "numele de utilizator afișat",
        "revdelete-restricted": "restricții aplicate administratorilor",
        "revdelete-unrestricted": "restricții eliminate pentru administratori",
+       "logentry-block-block": "$1 {{GENDER:$2|a blocat}} utilizatorul {{GENDER:$4|$3}} pe o perioadă de $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|a deblocat}} utilizatorul {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|a schimbat}} parametrii blocării pentru utilizatorul {{GENDER:$4|$3}} cu o perioadă de expirare de $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|a blocat}} utilizatorul {{GENDER:$4|$3}} pe o perioadă de $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|a schimbat}} parametrii blocării pentru utilizatorul {{GENDER:$4|$3}} cu o perioadă de expirare de $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|a importat}} $3 prin încărcare de fișier",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|a importat}} $3 din alt wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|a unificat}} $3 cu $4 (versiuni de până la $5)",
        "logentry-move-move": "$1 {{GENDER:$2|a redenumit}} pagina $3 în $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a redenumit}} pagina $3 în $4 fără a lăsa o redirecționare în loc",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|a dezactivat}} eticheta „$4” de la utilizarea de către utilizatori și roboți",
        "rightsnone": "(niciunul)",
        "revdelete-summary": "descrierea modificărilor",
+       "feedback-adding": "Se adaugă părerea pe pagină...",
+       "feedback-back": "Înapoi",
+       "feedback-bugcheck": "Minunat! Trebuie doar să verificați dacă nu cumva problema a fost [$1 deja înregistrată].",
+       "feedback-bugnew": "Am verificat. O raportez drept o problemă nouă",
        "feedback-bugornote": "Dacă sunteți pregătit să descrieți o problemă tehnică în detaliu vă rugăm să [$1 raportați un bug].\nÎn caz contrar, puteți utiliza formularul de mai jos. Comentariul dumneavoastră va fi adăugat pe pagina „[$3 $2]”, împreună cu numele de utilizator și numele navigatorului pe care îl folosiți.",
-       "feedback-subject": "Subiect:",
-       "feedback-message": "Mesaj:",
        "feedback-cancel": "Revocare",
-       "feedback-submit": "Trimite părerea",
-       "feedback-adding": "Se adaugă părerea pe pagină...",
+       "feedback-close": "Gata",
+       "feedback-external-bug-report-button": "Semnalare problemă tehnică",
+       "feedback-dialog-title": "Trimitere păreri",
+       "feedback-dialog-intro": "Puteți folosi formularul simplificat de mai jos pentru a vă trimite părerile. Comentariul dumneavoastră va fi adăugat în pagina „$1”, alături de numele dumneavoastră de utilizator.",
+       "feedback-error-title": "Eroare",
        "feedback-error1": "Eroare: Rezultat necunoscut de la API",
        "feedback-error2": "Eroare: editarea nu a reușit",
        "feedback-error3": "Eroare: Niciun răspuns de la API",
+       "feedback-message": "Mesaj:",
+       "feedback-subject": "Subiect:",
+       "feedback-submit": "Trimite",
+       "feedback-terms": "Înțeleg că informațiile mele din agentul utilizator includ informații exacte despre navigatorul și versiunea sistemului de operare și că acestea vor fi făcute publice alături de comentariile mele.",
+       "feedback-termsofuse": "Sunt de acord să trimit păreri în acord cu Termenii de utilizare.",
        "feedback-thanks": "Mulțumim! Comentariile dumneavoastră au fost publicate pe pagina „[ $2  $1 ]”.",
-       "feedback-close": "Gata",
-       "feedback-bugcheck": "Minunat! Trebuie doar să verificați dacă nu cumva problema a fost [$1 deja înregistrată].",
-       "feedback-bugnew": "Am verificat. O raportez drept o problemă nouă",
+       "feedback-thanks-title": "Mulțumim!",
+       "feedback-useragent": "Agent utilizator:",
        "searchsuggest-search": "Căutare",
        "searchsuggest-containing": "conținând...",
        "api-error-badaccess-groups": "Nu aveți dreptul să încărcați fișiere pe acest wiki.",
        "json-error-utf8": "Caractere UTF-8 deformate, posibil incorect codificate",
        "json-error-recursion": "Una sau mai multe referințe recursive în valoarea pentru codificat",
        "json-error-inf-or-nan": "Una sau mai valori NAN sau INF în valoarea pentru codificat",
-       "json-error-unsupported-type": "A fost furnizată o valoare de un tip care nu poate fi codificat"
+       "json-error-unsupported-type": "A fost furnizată o valoare de un tip care nu poate fi codificat",
+       "headline-anchor-title": "Legătură către această secțiune",
+       "special-characters-group-latin": "Latină",
+       "special-characters-group-latinextended": "Latină extinsă",
+       "special-characters-group-ipa": "AFI",
+       "special-characters-group-symbols": "Simboluri",
+       "special-characters-group-greek": "Greacă",
+       "special-characters-group-cyrillic": "Chirilică",
+       "special-characters-group-arabic": "Arabă",
+       "special-characters-group-arabicextended": "Arabă extinsă",
+       "special-characters-group-persian": "Persană",
+       "special-characters-group-hebrew": "Ebraică",
+       "special-characters-group-bangla": "Bengaleză",
+       "special-characters-group-tamil": "tamilă",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thailandeză",
+       "special-characters-group-lao": "Laoțiană",
+       "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"
 }
index 876012d..35f8049 100644 (file)
@@ -6,7 +6,8 @@
                        "McDutchie",
                        "Reder",
                        "아라",
-                       "C.R."
+                       "C.R.",
+                       "Macofe"
                ]
        },
        "tog-underline": "Collegaminde sottolinèate:",
        "pool-timeout": "Tiembe d'attese scadute pu 'u blocche",
        "pool-queuefull": "'A code de le sondagge jè chiene",
        "pool-errorunknown": "Errore scanusciute",
+       "poolcounter-usage-error": "Errore d'ause: $1",
        "aboutsite": "Sus a {{SITENAME}}",
        "aboutpage": "Project:Sus a",
        "copyright": "'U condenute jè disponibile sotte a $1.",
        "disclaimers": "No ne sacce ninde",
        "disclaimerpage": "Project:Scareca uarrile",
        "edithelp": "Cangianne l'ajute",
+       "helppage-top-gethelp": "Aijute",
        "mainpage": "Pàgene Prengepàle",
        "mainpage-description": "Pàgene Prengepàle",
        "policy-url": "Project:Reghele",
        "hidetoc": "scunne",
        "collapsible-collapse": "Scunne",
        "collapsible-expand": "Spanne",
+       "confirmable-confirm": "{{GENDER:$1|Sì}} secure?",
        "confirmable-yes": "Sìne",
        "confirmable-no": "None",
        "thisisdeleted": "Vide o ripristine $1?",
        "readonly_lag": "'U database ha state automaticamende blocchete purcè le server de le database ca depennene da 'u master onne sciute in eccezzione",
        "internalerror": "Errore inderne",
        "internalerror_info": "Errore inderne: $1",
+       "internalerror-fatal-exception": "Eccezzione fatale d'u tipe \"$1\"",
        "filecopyerror": "Non ge pozze cupià 'u fail \"$1\" jndr'à \"$2\".",
        "filerenameerror": "Non ge pozze cangià 'u nome d'u fail \"$1\" jndr'à \"$2\".",
        "filedeleteerror": "Non ge pozze scangillà 'u fail \"$1\".",
        "thumbnail_gd-library": "Configurazione d'a libbrerie GD ingomblete: funziona perse $1",
        "thumbnail_image-missing": "'U file pare ca non ge se iacchie: $1",
        "import": "Pàggene 'mbortete",
-       "importinterwiki": "'Mborte da Transuicchi",
-       "import-interwiki-text": "Schacchie 'na Uicchi e 'nu titele de pàgene da 'mbortà.\nLe date d'a revisione e 'u nome de le cangiature avènene preservate.\nTutte le aziune de 'mbortaziune 'mbrà le Uicchi sonde reggistrate jndr'à l'[[Special:Log/import|archivije de le 'mbortaziune]].",
+       "importinterwiki": "'Mborte da 'n'otra uicchi",
+       "import-interwiki-text": "Schacchie 'na Uicchi e 'nu titole de pàgene da 'mbortà.\nLe date d'a revisione e 'u nome de le cangiature avènene preservate.\nTutte le aziune de 'mbortaziune 'mbrà le Uicchi sonde reggistrate jndr'à l'[[Special:Log/import|archivije de le 'mbortaziune]].",
        "import-interwiki-history": "Copie tutte 'a sotrie de le versiune de sta pàgene",
        "import-interwiki-templates": "Inglude tutte le template",
        "import-interwiki-submit": "'Mborte",
        "import-rootpage-nosubpage": "Namespace \"$1\" d'a pàgene prengepàle non ge permette le sottopàggene.",
        "importlogpage": "Archivie de le 'mbortaziune",
        "importlogpagetext": "'Mbortaziune amministrative de pàggene cu 'a storie de le cangiaminde da otre Uicchi.",
-       "import-logentry-upload": "'mbortete [[$1]] da 'u fail carechete",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisione|revisiune}} 'mbortate",
-       "import-logentry-interwiki": "transuicchied $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisione|revisiune}} 'mbortate da $2",
        "javascripttest": "Test de JavaScript",
        "javascripttest-pagetext-noframework": "Sta pàgene jè riservate pe le esecuziune de le test de Javascript.",
        "version-parser-function-hooks": "Funziune hook de l'analizzatore",
        "version-hook-name": "Nome de l'hook",
        "version-hook-subscribedby": "Sottoscritte da",
-       "version-version": "(Versione $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[nisciune nome]",
        "version-svn-revision": "(r$2)",
        "version-license": "Licenze",
        "logentry-rights-autopromote": "$1 ha state {{GENDER:$2|promosse}} automaticamende da $4 a $5",
        "rightsnone": "(ninde)",
        "revdelete-summary": "cange 'u riepileghe",
+       "feedback-adding": "Aggiunge feedback a 'a pàgene...",
+       "feedback-bugcheck": "Granne! Appene verificate ca non g'è une de le [$1 bug canusciute].",
+       "feedback-bugnew": "Agghie verificate. Manne 'nu bug nuève",
        "feedback-bugornote": "Ce tu si pronde a descrivere 'nu probbleme tecniche cu le dettaglie pe piacere [$1 manne 'nu bug].\nCe nò, tu puè ausà 'u module facile aqquà sotte. 'U commende tune avène aggiunde a 'a pàgene [$3 $2]\", seguenne 'u nome utende tune e ce browser tu ste ause.",
-       "feedback-subject": "Oggette:",
-       "feedback-message": "Messàgge:",
        "feedback-cancel": "Annulle",
-       "feedback-submit": "Conferme 'a segnalazione",
-       "feedback-adding": "Aggiunge feedback a 'a pàgene...",
+       "feedback-close": "Fatte",
        "feedback-error1": "Errore: resultate inaspettate da l'API",
        "feedback-error2": "Errore: Cangiamende fallite",
        "feedback-error3": "Errore: Nisciuna resposte da l'API",
+       "feedback-message": "Messàgge:",
+       "feedback-subject": "Oggette:",
+       "feedback-submit": "Conferme",
        "feedback-thanks": "Grazie! 'A segnalaziona toje ha state mannate a 'a pàgene \"[$2 $1]\".",
-       "feedback-close": "Fatte",
-       "feedback-bugcheck": "Granne! Appene verificate ca non g'è une de le [$1 bug canusciute].",
-       "feedback-bugnew": "Agghie verificate. Manne 'nu bug nuève",
        "searchsuggest-search": "Cirche",
        "searchsuggest-containing": "tène...",
        "api-error-badaccess-groups": "Tu non ge puè carecà file sus a sta Uicchi.",
index 31fff42..06b4b7b 100644 (file)
                        "Tourorist",
                        "Purodha",
                        "Максим777",
-                       "Sealle"
+                       "Sealle",
+                       "Macofe",
+                       "DonRumata",
+                       "Mariya"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "disclaimers": "Отказ от ответственности",
        "disclaimerpage": "Project:Отказ от ответственности",
        "edithelp": "Справка по редактированию",
+       "helppage-top-gethelp": "Помощь",
        "mainpage": "Заглавная страница",
        "mainpage-description": "Заглавная страница",
        "policy-url": "Project:Правила",
        "readonly_lag": "База данных автоматически заблокирована от изменений на время, пока вторичные сервера базы данных не синхронизируются с первичным.",
        "internalerror": "Внутренняя ошибка",
        "internalerror_info": "Внутренняя ошибка: $1",
+       "internalerror-fatal-exception": "Неустранимое исключение типа «$1»",
        "filecopyerror": "Невозможно скопировать файл «$1» в «$2».",
        "filerenameerror": "Невозможно переименовать файл «$1» в «$2».",
        "filedeleteerror": "Невозможно удалить файл «$1».",
        "wrongpassword": "Введённый вами пароль неверен. Попробуйте ещё раз.",
        "wrongpasswordempty": "Пожалуйста, введите непустой пароль.",
        "passwordtooshort": "Пароль должен состоять не менее чем из $1 {{PLURAL:$1|символа|символов}}.",
+       "passwordtoolong": "Пароль не должен превышать   символов.",
        "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-адрес автоматически заблокирован в связи с тем, что он ранее использовался кем-то из участников, заблокированных {{GENDER:$4|участником|участницей}} $1. \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Пожалуйста, указывайте эти сведения в любых своих обращениях.",
        "editundo": "отменить",
        "diff-empty": "(нет различий)",
        "diff-multi-sameuser": "(не {{PLURAL:$1|показана одна промежуточная версия|показаны $1 промежуточные версии|показано $1 промежуточных версий}} этого же участника)",
-       "diff-multi-otherusers": "(не {{PLURAL:$1|показана одна промежуточная версия|показаны $1 промежуточные версии|показано $1 промежуточных версий}} {{PLURAL:$2|$2 участника|$2 участников}})",
+       "diff-multi-otherusers": "(не {{PLURAL:$1|показана $1 промежуточная версия|показаны $1 промежуточные версии|показано $1 промежуточных версий}} {{PLURAL:$2|$2 участника|$2 участников}})",
        "diff-multi-manyusers": "({{PLURAL:$1|не показана $1 промежуточная версия, сделанная|не показаны $1 промежуточных версий, сделанных|не показаны $1 промежуточные версии, сделанные}} более чем {{PLURAL:$2|$2 участником|$2 участниками}})",
        "difference-missing-revision": "Не {{PLURAL:$2|1=найдена|найдены}} {{PLURAL:$2|$2 версия|$2 версий|$2 версии|1=одна из версий}} для этого сравнения ($1).\n\nТакое обычно случается при переходе по устаревшей ссылке сравнения версий для страницы, которая была удалена.\nПодробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].",
        "searchresults": "Результаты поиска",
        "notextmatches": "Нет совпадений в текстах страниц",
        "prevn": "{{PLURAL:$1|1=предыдущая|предыдущие}} $1",
        "nextn": "{{PLURAL:$1|1=следующая|следующие}} $1",
+       "prev-page": "Предыдущая страница",
+       "next-page": "Следующая страница",
        "prevn-title": "{{PLURAL:$1|Предыдущая $1 запись|Предыдущие $1 записи|Предыдущие $1 записей}}",
        "nextn-title": "{{PLURAL:$1|Следующая $1 запись|Следующие $1 записи|Следующие $1 записей}}",
        "shown-title": "Показывать $1 {{PLURAL:$1|запись|записей|записи}} на странице",
        "recentchanges-label-minor": "Это незначительное изменение",
        "recentchanges-label-bot": "Эта правка сделана ботом",
        "recentchanges-label-unpatrolled": "Эта правка ещё никем не патрулировалась",
-       "recentchanges-label-plusminus": "РазмеÑ\80 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ñ\81Ñ\8f Ð½Ð° Ð´Ð°Ð½Ð½Ð¾Ðµ ÐºÐ¾Ð»Ð¸Ñ\87еÑ\81Ñ\82во Ð±Ð°Ð¹Ñ\82",
+       "recentchanges-label-plusminus": "изменение Ñ\80азмеÑ\80а Ð² Ð±Ð°Ð¹Ñ\82аÑ\85",
        "recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (см. также [[Special:NewPages|список новых страниц]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "upload-curl-error28-text": "Сайт слишком долго не отвечает. Пожалуйста, проверьте что сайт работоспособен и после небольшого перерыва попробуйте ещё раз. Возможно, операцию следует провести в другое время, когда сайт менее нагружен.",
        "license": "Лицензирование:",
        "license-header": "Лицензирование",
-       "nolicense": "Ð\9eÑ\82Ñ\81Ñ\83Ñ\82Ñ\81Ñ\82вÑ\83еÑ\82",
+       "nolicense": "Ð\9dиÑ\87его Ð½Ðµ Ð²Ñ\8bбÑ\80ано",
        "licenses-edit": "Изменить параметры лицензии",
        "license-nopreview": "(Предпросмотр недоступен)",
        "upload_source_url": "(вы выбрали правильный, публично доступный интернет-адрес)",
        "unusedimages": "Неиспользуемые файлы",
        "wantedcategories": "Требуемые категории",
        "wantedpages": "Требуемые страницы",
+       "wantedpages-summary": "Список несуществующих страниц с наибольшим количеством ссылок на них, за исключением страниц, у которых есть только страницы-перенаправления, указывающие на них. Для получения списка несуществующих страниц, у который есть перенаправления, ссылающиеся на них, см. [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Ошибочный заголовок в результатах запроса: $1",
        "wantedfiles": "Требуемые файлы",
        "wantedfiletext-cat": "Следующие файлы пытаются использовать, хотя их не существует. В этот список могут ошибочно попасть файлы, находящиеся во внешних хранилищах. Подобные ложные срабатывания будут отмечены <del>зачёркиванием</del>. Кроме того, страницы, содержащие несуществующие файлы, перечислены в [[:$1]].",
        "move-page": "$1 — переименование",
        "move-page-legend": "Переименование страницы",
        "movepagetext": "Воспользовавшись нижеприведённой формой, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.\nСтарое название станет перенаправлением на новое.\nВы можете автоматически обновить перенаправления, которые вели на старое название.\nЕсли вы этого не сделаете, пожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]].\nВы отвечаете за то, чтобы ссылки продолжали и далее указывать туда, куда предполагалось.\n\nОбратите внимание, что страница '''не будет''' переименована, если уже существует страница с названием, идентичным выбранному, кроме случаев, когда такая страница является перенаправлением или пуста, и при этом не имеет истории правок.\nЭто означает, что если вы сделали преименование ошибочно, вы можете переименовать страницу обратно в то название, которое у неё только что было, но вы не можете случайно затереть существующую страницу.\n\n'''Предупреждение!'''\nПереименование ''популярных'' страниц может привести к масштабным и неожиданным изменениям.\nПожалуйста, прежде чем продолжать, убедитесь, что понимаете все возможные последствия.",
-       "movepagetext-noredirectfixer": "Воспользовавшись формой ниже, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.\nСтарое название станет перенаправлением на новое название.\nПожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]].\nВы отвечаете за то, что бы ссылки продолжали и далее указывают туда, куда предполагалось.\n\nОбратите внимание, что страница '''не будет''' переименована, если страница с новым названием уже существует, кроме случаев, если она является перенаправлением или пуста и не имеет истории правок.\nЭто означает, что вы можете переименовать страницу обратно в то название, которое у него только что было, если вы переименовали по ошибке, но вы не можете случайно затереть существующую страницу.\n\n'''ПРЕДУПРЕЖДЕНИЕ!'''\nПереименование может привести к масштабным и неожиданным изменениям для ''популярных'' страниц.\nПожалуйста, прежде чем вы продолжите, убедитесь, что вы понимаете все возможные последствия.",
+       "movepagetext-noredirectfixer": "Воспользовавшись формой ниже, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.\nСтарое название станет перенаправлением на новое название.\nПожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]].\nВы отвечаете за то, чтобы ссылки продолжали и далее указывать туда, куда предполагалось.\n\nОбратите внимание, что страница <strong>не будет</strong> переименована, если страница с новым названием уже существует, кроме случаев, если она является перенаправлением или пуста и не имеет истории правок.\nЭто означает, что вы можете переименовать страницу обратно в то название, которое у него только что было, если вы переименовали по ошибке, но вы не можете случайно затереть существующую страницу.\n\n<strong>ПРЕДУПРЕЖДЕНИЕ!</strong>\nПереименование может привести к масштабным и неожиданным изменениям для популярных страниц.\nПожалуйста, прежде чем вы продолжите, убедитесь, что вы понимаете все возможные последствия.",
        "movepagetalktext": "Присоединённая страница обсуждения будет также автоматически переименована, '''кроме случаев, когда:'''\n\n*Не пустая страница обсуждения уже существует под таким же именем или\n*Вы не поставили галочку в поле ниже.\n\nВ этих случаях, вы будете вынуждены переместить или объединить страницы вручную, если это нужно.",
        "movearticle": "Переименовать страницу",
        "moveuserpage-warning": "'''Внимание.''' Вы собираетесь переименовать страницу участника. Пожалуйста, обратите внимание, что переименована будет только страница, участник '''не''' будет переименован.",
        "thumbnail_image-missing": "По-видимому, отсутствует файл $1",
        "thumbnail_image-failure-limit": "Было сделано слишком много неудачных попыток ($1 или больше) формирования этого эскиза. Пожалуйста, повторите попытку позже.",
        "import": "Импортирование страниц",
-       "importinterwiki": "Ð\9cежвики Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82",
-       "import-interwiki-text": "УкажиÑ\82е Ð²Ð¸ÐºÐ¸ Ð¸ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80Ñ\83емой Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b.\nÐ\94аÑ\82Ñ\8b Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ Ð¸ Ð¸Ð¼ÐµÐ½Ð° Ð°Ð²Ñ\82оÑ\80ов Ð±Ñ\83дÑ\83Ñ\82 Ñ\81оÑ\85Ñ\80аненÑ\8b.\nÐ\92Ñ\81е Ð¾Ð¿ÐµÑ\80аÑ\86ии Ð¼ÐµÐ¶Ð²Ð¸ÐºÐ¸ Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82а Ñ\80егиÑ\81Ñ\82Ñ\80иÑ\80Ñ\83Ñ\8eÑ\82Ñ\81Ñ\8f Ð² [[Special:Log/import|Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вÑ\83Ñ\8eÑ\89ем Ð¶Ñ\83Ñ\80нале]].",
+       "importinterwiki": "Ð\98мпоÑ\80Ñ\82 Ð¸Ð· Ð´Ñ\80Ñ\83гой Ð²Ð¸ÐºÐ¸",
+       "import-interwiki-text": "УкажиÑ\82е Ð²Ð¸ÐºÐ¸ Ð¸ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80Ñ\83емой Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b.\nÐ\94аÑ\82Ñ\8b Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ Ð¸ Ð¸Ð¼ÐµÐ½Ð° Ð°Ð²Ñ\82оÑ\80ов Ð±Ñ\83дÑ\83Ñ\82 Ñ\81оÑ\85Ñ\80аненÑ\8b.\nÐ\92Ñ\81е Ð¾Ð¿ÐµÑ\80аÑ\86ии Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82а Ð¸Ð· Ð´Ñ\80Ñ\83гиÑ\85 Ð²Ð¸ÐºÐ¸ Ñ\80егиÑ\81Ñ\82Ñ\80иÑ\80Ñ\83Ñ\8eÑ\82Ñ\81Ñ\8f Ð² [[Special:Log/import|жÑ\83Ñ\80нале Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82а]].",
        "import-interwiki-sourcewiki": "Исходный вики-проект:",
        "import-interwiki-sourcepage": "Исходная страница:",
        "import-interwiki-history": "Копировать всю историю изменений этой страницы",
        "importcantopen": "Невозможно открыть импортируемый файл",
        "importbadinterwiki": "Неправильная интервики-ссылка",
        "importsuccess": "Импортирование выполнено!",
-       "importnosources": "Не был выбран источник межвики-импорта, прямая загрузка истории изменений отключена.",
+       "importnosources": "Не была выбрана вики, из которой должен быть произведён импорт, и прямая загрузка истории изменений отключена.",
        "importnofile": "Файл для импорта не был загружен.",
        "importuploaderrorsize": "Не удалось загрузить или импортировать файл. Размер файла превышает установленный предел.",
        "importuploaderrorpartial": "Не удалось загрузить или импортировать файл. Он был загружен лишь частично.",
        "import-rootpage-nosubpage": "В пространстве имён указанной корневой страницы «$1» подстраницы запрещены.",
        "importlogpage": "Журнал импорта",
        "importlogpagetext": "Импортирование администраторами страниц с историей изменений из других вики.",
-       "import-logentry-upload": "«[[$1]]» — импорт из файла",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия импортирована|версии импортировано|версий импортировано}}",
-       "import-logentry-interwiki": "«$1» — межвики импорт",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|версия импортирована|версии импортировано|версий  импортировано}} из $2",
        "javascripttest": "Проверка JavaScript",
        "javascripttest-pagetext-noframework": "Эта страница зарезервирована для запуска JavaScript-тестов.",
        "version-parser-function-hooks": "Перехватчики функций синтаксического анализатора",
        "version-hook-name": "Имя перехватчика",
        "version-hook-subscribedby": "Подписан на",
-       "version-version": "(Версия $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[без названия]",
        "version-license": "Лицензия MediaWiki",
        "version-ext-license": "Лицензия",
        "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-no-name": "Вы должны указать имя метки.",
+       "tags-create-invalid-chars": "Имена меток не должны содержать запятые (<code>,</code>) или символы косой черты (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Имена меток не должны содержать символы, которые не могут быть использованы в заголовках страниц.",
        "tags-create-already-exists": "Метка «$1» уже существует.",
+       "tags-create-warnings-above": "При попытке создать метку «$1» обнаружен{{PLURAL:$2|о следующее предупреждение|ы следующие предупреждения}}:",
        "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-delete-warnings-after-delete": "Метка «$1» была удалена успешно, но {{PLURAL:$2|было обнаружено следующее предупреждение|были обнаружены следующие предупреждения}}:",
        "tags-activate-title": "Активировать метку",
        "tags-activate-question": "Вы собираетесь активировать метку «$1».",
        "tags-activate-reason": "Причина:",
        "tags-activate-not-found": "Метка «$1» не существует.",
        "tags-activate-submit": "Активировать",
        "tags-deactivate-title": "Отключить метку",
+       "tags-deactivate-question": "Вы собираетесь отключить метку «$1».",
        "tags-deactivate-reason": "Причина:",
+       "tags-deactivate-not-allowed": "Невозможно отключить метку «$1».",
        "tags-deactivate-submit": "Отключить",
        "comparepages": "Сравнение страниц",
        "compare-page1": "Первая страница",
        "revdelete-uname-unhid": "имя участника раскрыто",
        "revdelete-restricted": "ограничения применяются к администраторам",
        "revdelete-unrestricted": "ограничения сняты для администраторов",
+       "logentry-block-block": "$1 заблокировал{{GENDER:$2||а}} {{GENDER:$4|$3}} на период $5 $6",
+       "logentry-block-unblock": "$1 разблокировал{{GENDER:$2||а}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|изменил|изменила}} срок блокировки {{GENDER:$4|$3}} на период $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|заблокировал}} {{GENDER:$4|$3}} сроком на $5 $6",
+       "logentry-import-interwiki": "$1 импортировал{{GENDER:$2||а}} $3 из другой вики",
        "logentry-merge-merge": "$1 объедининил{{GENDER:$2||а}} $3 в $4 (версии до $5)",
        "logentry-move-move": "$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4 без оставления перенаправления",
        "logentry-upload-overwrite": "$1 загрузил{{GENDER:$2||а}} новую версию $3",
        "logentry-upload-revert": "$1 загрузил{{GENDER:$2||а}} $3",
        "log-name-managetags": "Журнал управления метками",
+       "log-description-managetags": "На этой странице перечислены задачи, связанные с управлением [[Special:Tags|метками]]. Журнал содержит только действия, выполненные администратором вручную. Метки могут быть созданы или удалены с помощью программного обеспечения вики без добавления записей в этот журнал.",
        "logentry-managetags-create": "$1 создал{{GENDER:$2||а}} метку «$4»",
+       "logentry-managetags-activate": "$1 активировал{{GENDER:$2||а}} метку «$4» для использования участниками и ботами",
+       "logentry-managetags-deactivate": "$1 отключил{{GENDER:$2||а}} метку «$4» для использования участниками и ботами",
        "rightsnone": "(нет)",
        "revdelete-summary": "описание изменений",
+       "feedback-adding": "Добавление отзыва на страницу…",
+       "feedback-back": "Назад",
+       "feedback-bugcheck": "Прекрасно! Только проверьте, что в списке [$1 известных ошибок] нет подобной записи.",
+       "feedback-bugnew": "Я проверил. Сообщить о новой ошибке",
        "feedback-bugornote": "Если вы готовы подробно описать техническую проблему, пожалуйста, [$1 сообщите об ошибке].\nВ противном случае вы можете использовать данную простую форму. Ваш комментарий будет добавлен на страницу «[$3 $2]» вместе с вашим именем участника и используемым браузером.",
-       "feedback-subject": "Тема:",
-       "feedback-message": "Сообщение:",
        "feedback-cancel": "Отмена",
-       "feedback-submit": "Отправить отзыв",
-       "feedback-adding": "Добавление отзыва на страницу…",
+       "feedback-close": "Готово",
+       "feedback-dialog-title": "Отправить отзыв",
+       "feedback-error-title": "Ошибка",
        "feedback-error1": "Ошибка. Неизвестный результат из API",
        "feedback-error2": "Ошибка. Сбой редактирования",
        "feedback-error3": "Ошибка. Нет ответа от API",
+       "feedback-message": "Сообщение:",
+       "feedback-subject": "Тема:",
+       "feedback-submit": "Отправить",
        "feedback-thanks": "Спасибо! Ваш отзыв размещён на странице «[$2 $1]».",
-       "feedback-close": "Готово",
-       "feedback-bugcheck": "Прекрасно! Только проверьте, что в списке [$1 известных ошибок] нет подобной записи.",
-       "feedback-bugnew": "Я проверил. Сообщить о новой ошибке",
+       "feedback-thanks-title": "Спасибо!",
+       "feedback-useragent": "Браузер:",
        "searchsuggest-search": "Поиск",
        "searchsuggest-containing": "содержащие…",
        "api-error-badaccess-groups": "Вам не разрешено загружать файлы в эту вики.",
        "api-error-stashfailed": "Внутренняя ошибка: сервер не смог сохранить временный файл.",
        "api-error-publishfailed": "Внутренняя ошибка: сервер не смог сохранить временный файл.",
        "api-error-stasherror": "При загрузке файла в хранилище произошла ошибка.",
+       "api-error-stashedfilenotfound": "При попытке загрузить файл из временного хранилища исходный файл не найден.",
+       "api-error-stashpathinvalid": "Путь, по которому должен располагаться файл, загруженный во временное хранилище, некорректен.",
+       "api-error-stashfilestorage": "При загрузке файла во временное хранилище произошла ошибка.",
+       "api-error-stashzerolength": "Сервер не может сохранить файл во временное хранилище, поскольку тот имеет нулевую длину.",
+       "api-error-stashnotloggedin": "Вы должны войти в систему, чтобы иметь возможность сохранить файл во временное хранилище.",
+       "api-error-stashwrongowner": "Файл, который вы пытались открыть во временном хранилище, принадлежит не вам.",
+       "api-error-stashnosuchfilekey": "Ключ файла, к которому вы пытались получить доступ во временном хранилище, не существует.",
        "api-error-timeout": "Сервер не отвечает в течение ожидаемого времени.",
        "api-error-unclassified": "Произошла неизвестная ошибка",
        "api-error-unknown-code": "Неизвестная ошибка: «$1»",
        "json-error-utf8": "Некорректные символы UTF-8, возможно, неверная кодировка",
        "json-error-recursion": "Должны быть закодированы одна или несколько рекурсивных ссылок в значении",
        "json-error-inf-or-nan": "Должны быть закодированы одно или несколько NAN- или INF-значений",
-       "json-error-unsupported-type": "Было указано значение типа, который не может быть закодирован"
+       "json-error-unsupported-type": "Было указано значение типа, который не может быть закодирован",
+       "headline-anchor-title": "Ссылка на этот раздел",
+       "special-characters-group-latin": "Латинские",
+       "special-characters-group-latinextended": "Латинские расширенные",
+       "special-characters-group-ipa": "МФА (IPA)",
+       "special-characters-group-symbols": "Символы",
+       "special-characters-group-greek": "Греческие",
+       "special-characters-group-cyrillic": "Кириллица",
+       "special-characters-group-arabic": "Арабские",
+       "special-characters-group-arabicextended": "Арабские расширенные",
+       "special-characters-group-persian": "Персидские",
+       "special-characters-group-hebrew": "Иврит",
+       "special-characters-group-bangla": "Бенгальские",
+       "special-characters-group-tamil": "Тамильский",
+       "special-characters-group-telugu": "Телугу",
+       "special-characters-group-sinhala": "Сингальские",
+       "special-characters-group-gujarati": "Гуджарати",
+       "special-characters-group-devanagari": "Деванагари",
+       "special-characters-group-thai": "Тайские",
+       "special-characters-group-lao": "Лаосские",
+       "special-characters-group-khmer": "Кхмерские",
+       "special-characters-title-endash": "среднее тире",
+       "special-characters-title-emdash": "длинное тире",
+       "special-characters-title-minus": "знак минус"
 }
index 52949b0..dfa980a 100644 (file)
@@ -8,7 +8,9 @@
                        "Nemo bis",
                        "Reedy",
                        "Tkalyn",
-                       "아라"
+                       "아라",
+                       "Dicto23456",
+                       "Macofe"
                ]
        },
        "tog-underline": "Підкреслёвати одказы:",
        "otherlanguages": "Іншыма языками",
        "redirectedfrom": "(Напрямленый з $1)",
        "redirectpagesub": "Сторінка-напрямлїня",
+       "redirectto": "Напрямлїня на:",
        "lastmodifiedat": "Послїдня зміна той сторінкы: $2, $1.",
        "viewcount": "Сторінка была зображена  {{PLURAL:$1|раз|$1разы|$1раз}}.",
        "protectedpage": "Замкнута сторінка",
        "import-rootpage-nosubpage": "В просторї назв вказаной корїнёвой сторінкы «$1» не дозволены підсторінкы",
        "importlogpage": "Книга імпортів",
        "importlogpagetext": "На тій сторінцї ся зображують адміністраторскы імпорты сторінок враховано едітовань з іншых вікі.",
-       "import-logentry-upload": "імпортовав [[$1]] наладованём файлу",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|ревізія|ревізії|ревізій}}",
-       "import-logentry-interwiki": "міджівікі імпорт $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ревізія|ревізії|ревізій}} з $2",
        "javascripttest": "Тестованя JavaScript",
        "javascripttest-pagetext-noframework": "Тота сторінка є резервована про тестованя JavaScript.",
        "version-parser-function-hooks": "Функціа парсера",
        "version-hook-name": "Назва припойного пункту",
        "version-hook-subscribedby": "Підписаный на",
-       "version-version": "(Верзія $1)",
+       "version-version": "($1)",
        "version-license": "Ліценція",
        "version-ext-license": "Ліценція",
        "version-ext-colheader-name": "Росшырїня",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|быв автоматічно переведеный|была автоматічно переведана}} з $4 на $5",
        "rightsnone": "(жадне)",
        "revdelete-summary": "коментарь едітованя",
+       "feedback-adding": "Коментарь ся придавать на сторінку…",
+       "feedback-bugcheck": "Герешнї! Лем перевірьте, ці то не єдна з [$1 уж знамых хыб].",
+       "feedback-bugnew": "Перевірив(а) єм то. Хочу повідомити нову хыбу.",
        "feedback-bugornote": "Кідь сьте прирыхтованый подробно описати технічный проблем, можете [$1 наголосити хыбу].\nІнакше можете схносновати простый формулать ниже. Ваш коментарь буде приданый на сторінку „[$3 $2]“ разом з вашым іменом хоснователя тай інформаціов о тім, якый бровсер хоснуєте.",
-       "feedback-subject": "Предмет:",
-       "feedback-message": "Повідомлїня:",
        "feedback-cancel": "Сторно",
-       "feedback-submit": "Одослати одозву",
-       "feedback-adding": "Коментарь ся придавать на сторінку…",
+       "feedback-close": "Готово",
        "feedback-error1": "Хыба: Нерозознаый резултат з API",
        "feedback-error2": "Хыба: Едітованя ся не вдало",
        "feedback-error3": "Хыба: API не вернуло жадну одповідь",
+       "feedback-message": "Повідомлїня:",
+       "feedback-subject": "Предмет:",
+       "feedback-submit": "Одослати",
        "feedback-thanks": "Дякуєме! Ваш коментарь быв приданый на сторінку „[$2 $1]“.",
-       "feedback-close": "Готово",
-       "feedback-bugcheck": "Герешнї! Лем перевірьте, ці то не єдна з [$1 уж знамых хыб].",
-       "feedback-bugnew": "Перевірив(а) єм то. Хочу повідомити нову хыбу.",
        "searchsuggest-search": "Глядати",
        "searchsuggest-containing": "обсягуючій...",
        "api-error-badaccess-groups": "Не мате дозволено наладововати файлы на тоту вікі.",
        "expand_templates_remove_comments": "Одстранити коментарї",
        "expand_templates_remove_nowiki": "Іґноровати в резултатї значкы <nowiki>",
        "expand_templates_generate_xml": "Указати сінтаксічный стром в XML",
-       "expand_templates_preview": "Нагляд"
+       "expand_templates_preview": "Нагляд",
+       "special-characters-group-latin": "Латиньскы",
+       "special-characters-group-latinextended": "Росшырена латинка",
+       "special-characters-group-ipa": "МФА (IPA)",
+       "special-characters-group-symbols": "Сімболы",
+       "special-characters-group-greek": "Ґрецькы",
+       "special-characters-group-cyrillic": "Кірíліця",
+       "special-characters-group-arabic": "Арабськы",
+       "special-characters-group-arabicextended": "Росшырїня Аравчіны",
+       "special-characters-group-persian": "Перськы",
+       "special-characters-group-hebrew": "Гебрейскы",
+       "special-characters-group-bangla": "Бенгалскы",
+       "special-characters-group-telugu": "Телуґу",
+       "special-characters-group-sinhala": "Сінгалскы",
+       "special-characters-group-gujarati": "Ґуджараті",
+       "special-characters-group-thai": "Тайськы",
+       "special-characters-group-lao": "Лаоськы",
+       "special-characters-group-khmer": "Кгмерськы"
 }
index d9bc166..c3df68d 100644 (file)
@@ -20,7 +20,8 @@
                        "Shubha",
                        "Vibhijain",
                        "రాకేశ్వర",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "परिसन्धेः अधो रेखाङ्कनम्:",
        "tog-hidepatrolled": "सद्योजातानां परिवर्तनानां परिशीलितानि सम्पादनानि गोप्यन्ताम्",
        "tog-newpageshidepatrolled": "नूतनपृष्ठानाम् आवलेः परिशीलितानि पृष्ठानि गोप्यन्त्ताम्",
        "tog-extendwatchlist": "न केवलं सद्योजातानि अपि तु अवेक्षणाऽऽवलेः सर्वाणि परिवर्तनानि दृश्यन्ताम्",
-       "tog-usenewrc": "सद्यपरिवर्तनावल्यां, अवेक्षणाऽऽवल्यां च पृष्ठानि विभागानुसारं प्रदर्श्यन्ताम् (जावा-लिपिः अपेक्ष्यते)",
-       "tog-numberheadings": "शà¥\80रà¥\8dषà¤\95ानà¥\8d à¤¸à¥\8dवयमà¥\87व à¤¸à¤\95à¥\8dरमाà¤\99à¥\8dà¤\95à¥\80à¤\95रà¥\8bतà¥\81।",
+       "tog-usenewrc": "सदà¥\8dयà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनावलà¥\8dयाà¤\82, à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवलà¥\8dयाà¤\82 à¤\9a à¤ªà¥\83षà¥\8dठानि à¤µà¤¿à¤­à¤¾à¤\97ानà¥\81सारà¤\82 à¤ªà¥\8dरदरà¥\8dशà¥\8dयनà¥\8dतामà¥\8d (à¤\9cावा-लिपिà¤\83 à¤\85पà¥\87à¤\95à¥\8dषà¥\8dयतà¥\87)",
+       "tog-numberheadings": "शà¥\80रà¥\8dषà¤\95ाणि à¤¸à¥\8dवयमà¥\87व à¤¯à¤¥à¤¾à¤\95à¥\8dरमà¤\82 à¤\95रà¥\8bतà¥\81",
        "tog-showtoolbar": "उपकरण-पट्टिका दर्श्यताम्",
-       "tog-editondblclick": "वारदà¥\8dवयà¤\82 à¤\95à¥\8dलिà¤\95-à¤\95रणà¥\87न पृष्ठानि सम्पाद्यन्ताम् (जावा-लिपिः अपेक्ष्यते)",
+       "tog-editondblclick": "वारदà¥\8dवयà¤\82 à¤\9fà¤\95à¥\8dà¤\9fà¤\95ायनà¥\87न (Click) पृष्ठानि सम्पाद्यन्ताम् (जावा-लिपिः अपेक्ष्यते)",
        "tog-editsectiononrightclick": "विभागशीर्षकाणामुपरि दक्षिणक्लिक्-करणेन विभागः सम्पाद्यताम् ।",
        "tog-watchcreations": "मया रचितानि पृष्ठानि मम अवेक्षणाऽऽवल्यां योज्यन्ताम् ।",
        "tog-watchdefault": "मया सम्पादितानि पृष्ठानि मम अवेक्षणाऽऽवल्यां योज्यन्ताम्।",
        "tog-enotifusertalkpages": "मम योजकसम्भाषणपृष्ठस्य परिवर्तने सति ई-पत्रद्वारा सूचयताम्",
        "tog-enotifminoredits": "पृष्ठस्य सञ्चिकायाः वा लघुपरिवर्तनेषु सत्सु अपि ई-पत्रद्वारा सूच्यताम्",
        "tog-enotifrevealaddr": "सूचना-ईपत्रेषु मम ई-पत्रसङ्केतः प्रदर्श्यताम्",
-       "tog-shownumberswatching": "निरीक्षमाणानां योजकानां सङ्ख्या दर्श्यताम्",
+       "tog-shownumberswatching": "निरà¥\80à¤\95à¥\8dषà¥\8dयमाणानाà¤\82 à¤¯à¥\8bà¤\9cà¤\95ानाà¤\82 à¤¸à¤\99à¥\8dà¤\96à¥\8dया à¤¦à¤°à¥\8dशà¥\8dयतामà¥\8d",
        "tog-oldsig": "वर्तमानहस्ताक्षरम्:",
        "tog-fancysig": "हस्ताक्षरं विकि-पाठवत् परिगण्यताम् (स्वचालित-परिसन्धिं विहाय)",
-       "tog-uselivepreview": "सम्पादनेन सहैव प्राग्दृश्यं दर्शयतु (प्रयोगात्मकम्)।",
-       "tog-forceeditsummary": "समà¥\8dपादनसाराà¤\82शà¤\83 à¤¨ à¤¦à¤¦à¤¾à¤®à¤¿ à¤\9aà¥\87तà¥\8d सूच्यताम्",
+       "tog-uselivepreview": "सम्पादनेन सहैव प्राग्दृश्यं दर्शयतु",
+       "tog-forceeditsummary": "समà¥\8dपादनसाराà¤\82शà¤\82 à¤¨ à¤¦à¤¦à¤¾à¤®à¤¿ à¤\9aà¥\87तà¥\8d, सूच्यताम्",
        "tog-watchlisthideown": "अवेक्षणाऽऽवल्याः मम सम्पादनानि गोप्यन्ताम ।",
        "tog-watchlisthidebots": "अवेक्षणाऽऽवल्याः बोट-द्वारा कृतानि सम्पादनानि गोप्यन्ताम्",
        "tog-watchlisthideminor": "मम अवेक्षणाऽऽवल्याः लघुसम्पादनानि गोप्यन्ताम्",
@@ -58,9 +59,9 @@
        "tog-watchlisthidepatrolled": "मम अवेक्षणाऽऽवल्याः पूर्वदृष्टानि सम्पादनानि गोप्यन्ताम्",
        "tog-ccmeonemails": "अन्येभ्यः प्रेषितानाम् ई-पत्राणां प्रतिकृतिः मत्कृते प्रेष्यताम्",
        "tog-diffonly": "संस्करणेषु भेदं दर्शयितुं लेखः गोप्यताम्",
-       "tog-showhiddencats": "निà¤\97à¥\82ढाः वर्गाः दर्श्यन्ताम्",
+       "tog-showhiddencats": "निà¤\97à¥\82हिताः वर्गाः दर्श्यन्ताम्",
        "tog-norollbackdiff": "\"प्रमुञ्चतु\" इत्यस्य उपयोगानन्तरस्य भेदः गोप्यताम्",
-       "tog-useeditwarning": "समà¥\8dपादनमà¥\8d à¤\85रà¤\95à¥\8dषà¥\8dय पृष्ठं त्यजामि चेत् सूच्यताम्",
+       "tog-useeditwarning": "समà¥\8dपादनमà¥\8d à¤\85रà¤\95à¥\8dषितà¥\8dवा पृष्ठं त्यजामि चेत् सूच्यताम्",
        "tog-prefershttps": "प्रेवेशानन्तरं सर्वदा संरक्षितसम्पर्कः एव उपयुज्याम्",
        "underline-always": "सर्वदा",
        "underline-never": "कदापि न",
        "subcategories": "उपवर्गाः",
        "category-media-header": "\"$1\" वर्गेऽस्मिन् विद्यमानं माध्यमम्",
        "category-empty": "<em>वर्गेऽस्मिन् न किमपि पृष्ठं माध्यमं वा विद्यते ।</em>",
-       "hidden-categories": "{{PLURAL:$1|निà¤\97à¥\82ढà¤\83 à¤µà¤°à¥\8dà¤\97à¤\83|निà¤\97à¥\82ढाः वर्गाः}}",
+       "hidden-categories": "{{PLURAL:$1|निहितà¤\83 à¤µà¤°à¥\8dà¤\97à¤\83|निहिताः वर्गाः}}",
        "hidden-category-category": "निगूढाः वर्गाः",
        "category-subcat-count": "$2 इत्येषु {{PLURAL:$2|वर्गेऽस्मिन् अधो लिखिताः उपवर्गाः विद्यन्ते |वर्गेऽस्मिन् {{PLURAL:$1|अधो लिखितः उपवर्गः अस्ति|अधो लिखिताः $1 उपवर्गाः सन्ति}}}}",
        "category-subcat-count-limited": "अस्मिन् वर्गे {{PLURAL:$1|अधो लिखितः $1 वर्गः अस्ति|अधो लिखिताः $1 वर्गाः सन्ति}}",
        "otherlanguages": "अन्यासु भाषासु",
        "redirectedfrom": "($1 इत्यस्मात् पुनर्निर्दिष्टम्)",
        "redirectpagesub": "पृष्ठम् अनुप्रेष्यताम्",
+       "redirectto": "इत्यत्र पुनर्निदिष्यताम्",
        "lastmodifiedat": "$1 (तमे) दिनाङ्के अन्तिमसम्पादनं $2 समये अभवत्",
        "viewcount": "एतत्पृष्ठं {{PLURAL:$1|एक वारं|$1 वारं}} दृष्टम् अस्ति",
        "protectedpage": "संरक्षितपृष्ठम्",
        "jumpto": "अत्र गम्यताम् :",
        "jumptonavigation": "सञ्चरणं",
        "jumptosearch": "अन्वेषणम्",
-       "view-pool-error": "à¤\95à¥\8dषमà¥\8dयतामà¥\8d ! à¤¸à¤¦à¥\8dयà¤\83 à¤µà¤¿à¤¤à¤°à¤\95सà¥\8dय (server) à¤\89परि à¤¬à¤¹à¥\81 à¤\95ारà¥\8dयभारà¤\83 à¤\85सà¥\8dति à¥¤ \nबहवà¤\83 à¤\9cनाà¤\83 à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤ªà¤¶à¥\8dयनà¥\8dतà¤\83 à¤¸à¤¨à¥\8dति à¥¤ \nà¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤ªà¥\81नरà¥\8dदà¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤ªà¤¤à¤¿à¤\95à¥\8dषा à¤\95à¥\8dरियताम् । $1",
-       "generic-pool-error": "à¤\95à¥\8dषमà¥\8dयतामà¥\8d ! à¤¸à¤¦à¥\8dयà¤\83 à¤µà¤¿à¤¤à¤°à¤\95सà¥\8dय (server) à¤\89परि à¤¬à¤¹à¥\81 à¤\95ारà¥\8dयभारà¤\83 à¤\85सà¥\8dति à¥¤ \nबहवà¤\83 à¤\9cनाà¤\83 à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤ªà¤¶à¥\8dयनà¥\8dतà¤\83 à¤¸à¤¨à¥\8dति à¥¤ \nà¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤ªà¥\81नरà¥\8dदà¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤ªà¤¤à¤¿à¤\95à¥\8dषा à¤\95à¥\8dरियताम् ।",
-       "pool-timeout": "सà¤\82रà¤\95à¥\8dषणारà¥\8dथà¤\82 à¤\95ालावधिà¤\83 à¤¸à¤®à¤¾à¤ªà¥\8dता",
-       "pool-queuefull": "Pool इति पङ्कतिः पूर्णा अस्ति ।",
+       "view-pool-error": "à¤\95à¥\8dषमà¥\8dयतामà¥\8d ! à¤¸à¤¦à¥\8dयà¤\83 à¤µà¤¿à¤¤à¤°à¤\95सà¥\8dय (server) à¤\89परि à¤¬à¤¹à¥\81 à¤\95ारà¥\8dयभारà¤\83 à¤\85सà¥\8dति à¥¤ \nबहवà¤\83 à¤\9cनाà¤\83 à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤ªà¤¶à¥\8dयनà¥\8dतà¤\83 à¤¸à¤¨à¥\8dति à¥¤ \nà¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤ªà¥\81नरà¥\8dदà¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤ªà¥\8dरतà¥\80à¤\95à¥\8dषà¥\8dयताम् । $1",
+       "generic-pool-error": "à¤\95à¥\8dषमà¥\8dयतामà¥\8d ! à¤¸à¤¦à¥\8dयà¤\83 à¤µà¤¿à¤¤à¤°à¤\95सà¥\8dय (server) à¤\89परि à¤¬à¤¹à¥\81 à¤\95ारà¥\8dयभारà¤\83 à¤\85सà¥\8dति à¥¤ \nबहवà¤\83 à¤\9cनाà¤\83 à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤ªà¤¶à¥\8dयनà¥\8dतà¤\83 à¤¸à¤¨à¥\8dति à¥¤ \nà¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤ªà¥\81नरà¥\8dदà¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤ªà¥\8dरतà¥\80à¤\95à¥\8dषà¥\8dयताम् ।",
+       "pool-timeout": "सà¤\82रà¤\95à¥\8dषणारà¥\8dथà¤\82 à¤\95ालावधिà¤\83 à¤¸à¤®à¤¾à¤ªà¥\8dतà¤\83",
+       "pool-queuefull": "Pool à¤\87ति à¤ªà¤\99à¥\8dà¤\95à¥\8dतिà¤\83 à¤ªà¥\82रà¥\8dणा à¤\85सà¥\8dति à¥¤",
        "pool-errorunknown": "अज्ञातदोषः",
        "pool-servererror": "Pool counter सेवा नोपलभ्यते ।",
+       "poolcounter-usage-error": "उपयोगत्रुटिः : $1",
        "aboutsite": "{{SITENAME}} विषयकं",
        "aboutpage": "Project:विषयकम्",
        "copyright": "भिन्नोल्लखः न भवति तावत् $1 अत्र उल्लेखो भवति ।",
        "disclaimers": "अस्वीकारः",
        "disclaimerpage": "Project:सामान्याऽस्वीकरणम्",
        "edithelp": "सम्पादनार्थं साहाय्यम्",
+       "helppage-top-gethelp": "साहाय्यम्",
        "mainpage": "मुख्यपृष्ठम्",
        "mainpage-description": "मुख्यपृष्ठम्",
        "policy-url": "Project:नीतिः",
        "privacy": "गोपनीयतानीतिः",
        "privacypage": "Project:गोपनीयतानीतिः",
        "badaccess": "अनुमतिदोषः",
-       "badaccess-group0": "यस्याः क्रियायाः कृते भवान्/भवती उद्युक्ता, तस्यै क्रियायै अनुमति नास्ति ।",
+       "badaccess-group0": "यस्याः क्रियायाः कृते भवान्/भवती उद्युक्ता, तस्यै क्रियायै अनुमति नास्ति ।",
        "badaccess-groups": "यस्याः क्रियायाः कृते भवान्/भवती उद्युक्ता, तस्यै क्रियायै $1 {{PLURAL:$2|अस्मिन् समूहे|एतेषु समूहेषु}} अनुमतिः नास्ति ।",
        "versionrequired": "मीडीयाविक इत्यस्य $1 संस्करणम् आवश्यकम् ।",
        "versionrequiredtext": "अस्य पृष्ठस्य उपयोगार्थं मीडीयाविकि इत्यस्य $1 संस्करणम् आवश्यकम् । पश्यतु [[Special:Version|version page]] ।",
        "hidetoc": "गोप्यताम्",
        "collapsible-collapse": "सङ्कुच्यताम्",
        "collapsible-expand": "विस्तीर्यताम्",
+       "confirmable-confirm": "{{GENDER:$1|भवान्/भवती}} निःसंशयम् अस्ति खलु ?",
+       "confirmable-yes": "आम्",
+       "confirmable-no": "न",
        "thisisdeleted": "$1 दृश्यतां पूर्वतनं क्रियतां वा ?",
        "viewdeleted": "$1 दृश्यताम् ?",
        "restorelink": "{{PLURAL:$1|एकम् अपाकृतं सम्पादनम्|$1 अपाकृतानि सम्पादनानि}}",
        "laggedslavemode": "<strong>पूर्वसूचना :</strong>\nसद्यः परिवर्तनानि अत्र न स्युः ।",
        "readonly": "दत्तांशनिधिः (database) कीलितः",
        "enterlockreason": "कीलनस्य कारणं ददातु, कीलनं कियान् कालः भविष्यति इति च लिखतु ।",
-       "readonlytext": "नवà¥\80नदतà¥\8dताà¤\82शनिवà¥\87शारà¥\8dथà¤\82 (database entry) à¤¸à¤¦à¥\8dयà¤\83 à¤¦à¤¤à¥\8dताà¤\82शà¤\83 à¤¸à¥\8dथिगितः । नियमितव्यवस्थिकरणानन्तरं पुनः निवेशाय अवकाशः भवति । $1",
+       "readonlytext": "नवà¥\80नदतà¥\8dताà¤\82शपà¥\8dरविषà¥\8dà¤\9fà¥\8dयà¥\88 (database entry) à¤¸à¤¦à¥\8dयà¤\83 à¤¦à¤¤à¥\8dताà¤\82शà¤\83 à¤¸à¥\8dथगितः । नियमितव्यवस्थिकरणानन्तरं पुनः निवेशाय अवकाशः भवति । $1",
        "missing-article": "दत्तनिधौ (in database) $2 अन्तः कुत्रापि \"$1\" न प्राप्तम् ।\n\nप्रायः अपाकृतस्य पृष्ठस्य इतिहासदर्शनस्य चेष्टाकाले एवं भवति ।\n\nतादृशी स्थितिः यदि नास्ति, तर्हि तन्त्रांशे विद्यमाना त्रुटिः भवेत् । कृपया कमपि [[Special:ListUsers/sysop|प्रबन्धकम्]] अस्य पृष्ठस्य सार्वसङ्केतं (U.R.L.) सूच्यताम् ।",
        "missingarticle-rev": "(संस्करणं# :$1)",
        "missingarticle-diff": "(भेदः: $1, $2)",
        "readonly_lag": "सहायकतन्त्रांशः (slave database) यावत् मुख्यतन्त्रांशात् किमपि स्वीकुर्यात्, तावत् मुख्यतन्त्रांशः तन्त्रांशमाध्यमेन स्वयमेव कीलितः अभवत्",
        "internalerror": "आन्तरिकः दोषः",
        "internalerror_info": "आन्तरिकः दोषः: $1",
+       "internalerror-fatal-exception": "\"$1\" प्रकारस्य घातकदोषः",
        "filecopyerror": "Could not copy file \"$1\" to \"$2\".",
        "filerenameerror": "$1 सञ्चिकायाः $2 इति पुनर्नामकरणं निष्फलम् ।",
        "filedeleteerror": "$1 इति सञ्चिका अपाकर्तुं न शक्यते ।",
        "directorycreateerror": "'''$1''' इति विभागः रचितुं न शक्यते ।",
+       "directoryreadonlyerror": "\"$1\" एषः विभागः पठ्यमात्रः अस्ति ।",
+       "directorynotreadableerror": "\"$1\" एषः विभागः अपठ्यः अस्ति ।",
        "filenotfound": "'\"$1\"' सञ्चिका न लब्धा ।",
        "unexpected": "अनपेक्षितं मूल्यम् : \"$1\"=\"$2\"",
        "formerror": "दोषः : प्रपत्रं (form) न प्रेषितम्",
        "no-null-revision": "\"$1\" एतस्मै पृष्ठाय नवीनं रिक्तं संस्करणं रचितुं न शक्यते",
        "badtitle": "अशुद्धं शिरोनाम",
        "badtitletext": "ईप्सितं शीर्षकम् अमान्यं, रिक्तम्, अयोग्यम्, अन्यभाषीयं, भाषान्तरात् विकि-जालस्थलात् च अस्ति । पृष्ठशीर्षकाय अयोग्यानि अक्षराणि चिह्नानि वा तस्मिन् भवेयुः ।",
-       "perfcached": "à¤\85धà¥\8b à¤\89लà¥\8dलिà¤\96िताà¤\83 à¤¸à¥\82à¤\9aनाà¤\83 à¤ªà¥\81रातनायाà¤\83 à¤\89पसà¥\8dमà¥\83तà¥\8dयाà¤\83 (cached) à¤\97à¥\83हà¥\8dणिताः, अतः तत्र दोषाः भवेयुः ।  अधिकाधिक{{PLURAL:$1|परिणाम|$1परिणामाः}} अत्र सन्ति ।",
-       "perfcachedts": "à¤\85धà¥\8b à¤\89लà¥\8dलिà¤\96िताà¤\83 à¤¸à¥\82à¤\9aनाà¤\83 à¤ªà¥\81रातनायाः उपस्मृत्याः (cached) गृह्णिताः । तस्यां उपस्मृत्यां $1 समये परिर्वतनम् अभूत् ।\nअधिकाधिक{{PLURAL:$1|परिणाम|$1परिणामाः}} अत्र सन्ति ।",
-       "querypage-no-updates": "à¤\85सà¥\8dमिनà¥\8d à¤ªà¥\83षà¥\8dठà¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\82 à¤\85धà¥\81ना à¤ªà¥\8dरतिबनà¥\8dधितमसà¥\8dति à¥¤ à¤\85तà¥\8dरसà¥\8dथां पुरातनसूचनां नवीनसूचनया सह अधुना परिर्वतयितुं न शक्यते ।",
+       "perfcached": "à¤\85धà¥\8b à¤\89लà¥\8dलिà¤\96िताà¤\83 à¤¸à¥\82à¤\9aनाà¤\83 à¤ªà¥\81रातनायाà¤\83 à¤\89पसà¥\8dमà¥\83तà¥\8dयाà¤\83 (cached) à¤\97à¥\83हà¥\80ताः, अतः तत्र दोषाः भवेयुः ।  अधिकाधिक{{PLURAL:$1|परिणाम|$1परिणामाः}} अत्र सन्ति ।",
+       "perfcachedts": "à¤\85धà¥\8b à¤\89लà¥\8dलिà¤\96िताà¤\83 à¤¸à¥\82à¤\9aनाà¤\83 à¤ªà¥\81रातनà¥\8dयाः उपस्मृत्याः (cached) गृह्णिताः । तस्यां उपस्मृत्यां $1 समये परिर्वतनम् अभूत् ।\nअधिकाधिक{{PLURAL:$1|परिणाम|$1परिणामाः}} अत्र सन्ति ।",
+       "querypage-no-updates": "à¤\85सà¥\8dमिनà¥\8d à¤ªà¥\83षà¥\8dठà¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\82 à¤\85धà¥\81ना à¤ªà¥\8dरतिबनà¥\8dधितमसà¥\8dति à¥¤ à¤\85तà¥\8dरतà¥\8dयां पुरातनसूचनां नवीनसूचनया सह अधुना परिर्वतयितुं न शक्यते ।",
        "viewsource": "स्रोतः दृश्यताम्",
        "viewsource-title": "$1 इत्येतस्य स्रोतः दृश्यताम्",
        "actionthrottled": "अकाले कार्यमेतत् अवरुद्धम् अभवत्",
        "actionthrottledtext": "फल्गु(spam)-नियन्त्रणार्थम् एषा क्रिया मर्यादितवारं कर्तुं शक्यते । भवतः/भवत्याः सा मर्यादा समाप्ता । कृपया किञ्चित् कालानन्तरं प्रयत्नं करोतु ।",
-       "protectedpagetext": "समà¥\8dपादनà¤\82, à¤\85नà¥\8dयà¤\95à¥\8dरियाà¤\82 à¤\9a à¤\85वरà¥\8bधयितुम् इदं पृष्ठं संरक्षितमस्ति ।",
+       "protectedpagetext": "समà¥\8dपादनà¤\82, à¤\85नà¥\8dयà¤\95à¥\8dरियाà¤\82 à¤\9a à¤\85वरà¥\8bदà¥\8dधुम् इदं पृष्ठं संरक्षितमस्ति ।",
        "viewsourcetext": "भवान्/भवती एतस्य पृष्ठस्य स्रोतः द्रष्टुं, मुद्रणं (print) कर्तुं च अर्हति ।",
        "viewyourtext": "भवान्/भवती एतस्मिन् पृष्ठे '''स्वस्य सम्पादनानि'' द्रष्टुं  अर्हति, तेषां प्रतिलिपिम् (copy) अपि कर्तुं अर्हति ।",
        "protectedinterface": "एतत् पृष्ठं तन्त्रांशाय मध्यस्थपाठं (interface text) प्रयच्छति । इदञ्च पृष्ठम् अयोग्यसम्पादनात् संरक्षितमस्ति ।  \nविकि इत्यस्य सर्वेषु बन्धुप्रकल्पेषु अनुवादमिदं योजयितुं कृपया [//translatewiki.net/ translatewiki.net] इत्यस्य मिडीयाविकि-स्थानीयकरणस्य उपयोगं करोतु ।",
-       "editinginterface": "<strong>पूर्वसूचना :</strong> तन्त्रांशाय मध्यस्थपाठं (interface text) प्रयच्छति तादृशस्य पृष्ठस्य भवता/भवत्या सम्पादनं क्रियमाणमस्ति । अस्य विकि-प्रकल्पस्य अन्ययोजकेभ्यः अपि अत्र कृतानि परिवर्तनानि भविष्यन्ति । \n\nविकि इत्यस्य सर्वेषु बन्धुप्रकल्पेषु अनुवादमिदं योजयितुं कृपया [//translatewiki.net/ translatewiki.net] इत्यस्य मिडीयाविकि-स्थानीयकरणस्य उपयोगं करोतु ।",
+       "editinginterface": "<strong>पूर्वसूचना :</strong> तन्त्रांशाय मध्यस्थपाठं (interface text) प्रयच्छति तादृशस्य पृष्ठस्य भवता/भवत्या सम्पादनं क्रियमाणमस्ति । अस्य विकि-प्रकल्पस्य अन्ययोजकेभ्यः अपि अत्र कृतानि परिवर्तनानि भविष्यन्ति ।",
+       "translateinterface": "विकि इत्यस्य सर्वेषु बन्धुप्रकल्पेषु अनुवादमिदं योजयितुं कृपया [//translatewiki.net/ translatewiki.net] इत्यस्य मिडीयाविकि-स्थानीयकरणस्य उपयोगं करोतु ।",
        "cascadeprotected": "इदं पृष्ठं सम्पादनात् संरक्षितमस्ति । कारणम् एतत् पृष्ठं {{PLURAL:$1|तादृशे पृष्ठे|तादृशेषु पृष्ठेषु}} अन्तर्भवति, यादृशेषु पृष्ठेषु सोपानवत् सुरक्षा अस्ति : $2",
        "namespaceprotected": "भवान्/भवती '''$1''' नामाकाशे अन्तर्भूतेषु पृष्ठेषु परिवर्तनं कर्तुं न शक्नोति ।",
-       "customcssprotected": "भवानà¥\8d/भवतà¥\80 à¤\87दà¤\82 CSS à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¤®à¥\8dपादयितà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤\95ारणà¤\82 अन्यस्य योजकस्य वैयक्तिकव्यवस्थापनानि (settings) अत्र सन्ति ।",
-       "customjsprotected": "भवानà¥\8d/भवतà¥\80 à¤\87दà¤\82 JavaScript à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¤®à¥\8dपादयितà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤\95ारणà¤\82 अन्यस्य योजकस्य वैयक्तिकव्यवस्थापनानि (settings) अत्र सन्ति ।",
+       "customcssprotected": "भवानà¥\8d/भवतà¥\80 à¤\87दà¤\82 CSS à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¤®à¥\8dपादयितà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤¯à¤¤à¤\83 अन्यस्य योजकस्य वैयक्तिकव्यवस्थापनानि (settings) अत्र सन्ति ।",
+       "customjsprotected": "भवानà¥\8d/भवतà¥\80 à¤\87दà¤\82 JavaScript à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¤®à¥\8dपादयितà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤¯à¤¤à¤\83 अन्यस्य योजकस्य वैयक्तिकव्यवस्थापनानि (settings) अत्र सन्ति ।",
        "mycustomcssprotected": "भवान्/भवती इदं CSS पृष्ठं सम्पादयितुं न शक्नोति ।",
        "mycustomjsprotected": "भवान्/भवती इदं JavaScript पृष्ठं सम्पादयितुं न शक्नोति ।",
        "myprivateinfoprotected": "भवान्/भवती अत्र वैयक्तिकसूचनाः सम्पादयितुं न शक्नोति ।",
        "mypreferencesprotected": "भवान्/भवती स्वस्य इष्टतमानि सम्पादयितुं न शक्नोति ।",
        "ns-specialprotected": "विशिष्टानि पृष्ठानि सम्पादयितुं न शक्यन्ते ।",
-       "titleprotected": "\"''$2''\" à¤\87ति à¤\95ारणतà¥\8dवातà¥\8d à¤\8fततà¥\8d à¤¶à¥\80रà¥\8dषà¤\95à¤\82 (विषयà¤\83) [[User:$1|$1]] à¤\87तà¥\8dयसà¥\8dमà¥\88 संरक्षितमस्ति ।",
+       "titleprotected": "\"''$2''\" à¤\87ति à¤¹à¥\87तà¥\8bà¤\83 à¤\8fततà¥\8d à¤¶à¥\80रà¥\8dषà¤\95à¤\82 (विषयà¤\83) [[User:$1|$1]] à¤\87तà¥\8dयसà¥\8dमातà¥\8d संरक्षितमस्ति ।",
        "filereadonlyerror": "\"$1\" सञ्चिकापरिवर्तितुं न शक्यते । \"$2\" कोषः अधुना  केवलं पठनयोग्यः (read only) अस्ति । येन प्रबन्धकेन एवं कृतं, तेन निम्नकारणं प्रदत्तम् \"$3\"",
        "invalidtitle-knownnamespace": "\"$2\" नमावकाशेन \"$3\" पाठेन च युक्तम् अयोग्यं शीर्षकम्",
        "invalidtitle-unknownnamespace": "अयोग्येन नामवाकाशयुतेन, $1 सङ्ख्यया, \"$2\" पाठेन  युक्तम् अयोग्यं शीर्षकम्",
        "exception-nologin": "प्रवेशः न कृतः",
-       "exception-nologin-text": "एतत् पृष्ठं सम्पादयितुं क्रियां कर्तुं वा [[Special:Userlogin|प्रविश्यताम्]] ।",
+       "exception-nologin-text": "एतत् पृष्ठं सम्पादयितुं क्रियां कर्तुं वा प्रविश्यताम् ।",
        "exception-nologin-text-manual": "एतत् पृष्ठं सम्पादयितुं क्रियां कर्तुं वा कृपया $1",
        "virus-badscanner": "अयोग्यं व्यवस्थापनम् : अज्ञातं विषाणुं (VIRUS) निरीक्षकः: ''$1''",
        "virus-scanfailed": "निरीक्षणं विफलितम् (विध्यादेशः (code) $1)",
        "welcomecreation-msg": "भवता/भवत्या सदस्यता प्राप्ता ।\nस्वस्य [[Special:Preferences|{{SITENAME}} इष्टतमानि]] परिवर्तयितुं मा विस्मरतु ।",
        "yourname": "योजकनाम:",
        "userlogin-yourname": "प्रयोक्तृनाम",
-       "userlogin-yourname-ph": "सà¥\8dवसà¥\8dय à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\83नाम à¤¦à¥\80यताम्",
-       "createacct-another-username-ph": "पà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\83नाम à¤¦à¥\80यताम्",
+       "userlogin-yourname-ph": "सà¥\8dवसà¥\8dय à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\83नाम à¤²à¤¿à¤\96à¥\8dयताम्",
+       "createacct-another-username-ph": "पà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\83नाम à¤²à¤¿à¤\96à¥\8dयताम्",
        "yourpassword": "कूटशब्दः :",
        "userlogin-yourpassword": "कूटशब्दः",
-       "userlogin-yourpassword-ph": "सà¥\8dवसà¥\8dय à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤¦à¥\80यताम्",
-       "createacct-yourpassword-ph": "à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤¦à¥\80यताम्",
+       "userlogin-yourpassword-ph": "सà¥\8dवसà¥\8dय à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤²à¤¿à¤\96à¥\8dयताम्",
+       "createacct-yourpassword-ph": "à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤²à¤¿à¤\96à¥\8dयताम्",
        "yourpasswordagain": "कूटशब्दः पुनः लिख्यताम् :",
        "createacct-yourpasswordagain": "कूटशब्दस्य पुष्टिं करोतु ।",
-       "createacct-yourpasswordagain-ph": "à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤ªà¥\81नà¤\83 à¤¦à¥\80यताम्",
+       "createacct-yourpasswordagain-ph": "à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤ªà¥\81नà¤\83 à¤²à¤¿à¤\96à¥\8dयताम्",
        "remembermypassword": "अस्मिन् सङ्गणके मम प्रवेशः स्मर्यताम् (अधिकतमम् $1 {{PLURAL:$1|दिनम्|दिनानि}})",
-       "userlogin-remembermypassword": "अहं प्रविष्टमेव तिष्ठेयम्",
+       "userlogin-remembermypassword": "अहं प्रविष्ट एव स्याम्",
        "userlogin-signwithsecure": "संरक्षितः सम्पर्कः (https) उपयुज्यताम्",
        "yourdomainname": "भवतः प्रदेशः (domain) :",
        "password-change-forbidden": "अस्मिन् विकि-जालस्थाने भवान्/भवती कूटशब्दान् परिर्वतयितुं न शक्नोति ।",
        "nav-login-createaccount": "प्रविश्यताम् / सदस्यता प्राप्यताम्",
        "userlogin": "प्रविश्यताम् / सदस्यता प्राप्यताम्",
        "userloginnocreate": "प्रविश्यताम्",
-       "logout": "निरà¥\8dà¤\97मनम्",
-       "userlogout": "निरà¥\8dà¤\97मनम्",
+       "logout": "निरà¥\8dà¤\97मà¥\8dयताम्",
+       "userlogout": "निरà¥\8dà¤\97मà¥\8dयताम्",
        "notloggedin": "नैव प्रविष्टः",
        "userlogin-noaccount": "सदस्यता नास्ति किम् ?",
        "userlogin-joinproject": "{{SITENAME}} सह योजनम्",
        "createacct-reason": "कारणम्",
        "createacct-reason-ph": "भवतः/भवत्याः अन्यसदस्यतां प्राप्तुं किं प्रयोजनमस्ति ?",
        "createacct-captcha": "सुरक्षानिरीक्षणम्",
-       "createacct-imgcaptcha-ph": "à¤\89परि à¤²à¤¿à¤\96िताà¤\83 à¤µà¤°à¥\8dणाà¤\83 à¤²à¤¿à¤\96à¥\8dयताम्",
+       "createacct-imgcaptcha-ph": "à¤\89परि à¤²à¤¿à¤\96िताà¤\83 à¤µà¤°à¥\8dणाà¤\83 à¤²à¤¿à¤\96à¥\8dयनà¥\8dतादम्",
        "createacct-submit": "स्वसदस्यता प्राप्यताम्",
        "createacct-another-submit": "अन्यसदस्यता प्राप्यताम्",
        "createacct-benefit-heading": "{{SITENAME}} इति भवत्सदृशैः जनैः रचितमस्ति ।",
        "createaccounterror": "$1 सदस्यता न प्राप्ता :",
        "nocookiesnew": "भवता/भवत्या सदस्यता प्राप्ता, परन्तु प्रवेशः न कृतः । {{SITENAME}} इत्यस्य कृते योजकज्ञापकम् (uses cookies) अनिवार्यम् अस्ति । \nभवता/भवत्या ज्ञापकव्यवस्था असमर्थिता अस्ति ।\nकृपया सा समर्थ्यताम्, ततश्च नवीनसदस्यतायाः प्रयोक्तृनाम्ना प्रविश्यताम् ।",
        "nocookieslogin": "{{SITENAME}} इत्यत्र ज्ञापकेन (cookies) विना प्रवेशः न शक्यः । \nभवता/भवत्या ज्ञापकव्यवस्था असमर्थिता अस्ति ।\nकृपया सा समर्थ्यताम्, ततश्च पुनः प्रयासः क्रियताम् ।",
-       "nocookiesfornew": "यà¥\8bà¤\9cà¤\95सदसà¥\8dयता à¤¨ à¤¸à¤¿à¤¦à¥\8dधा à¤¯à¤¤à¤\83 à¤¸à¥\8dरà¥\8bतà¤\83 à¤ªà¥\8dरमाणà¥\80à¤\95à¥\83तà¤\82 à¤¨ à¤\9cातमà¥\8d à¥¤ \nभवता à¤\95à¥\81à¤\95à¥\8dà¤\95à¥\80सà¥\8d à¤\87तà¥\8dयà¥\87ततà¥\8d à¤¸à¤®à¤°à¥\8dथà¥\80à¤\95à¥\83तानि किम् इति परिशील्य इदं पृष्ठं पुनरारोप्य प्रयतताम् ।",
+       "nocookiesfornew": "यà¥\8bà¤\9cà¤\95सदसà¥\8dयता à¤¨ à¤¸à¤¿à¤¦à¥\8dधा à¤¯à¤¤à¤\83 à¤¸à¥\8dरà¥\8bतà¤\83 à¤ªà¥\8dरमाणà¥\80à¤\95à¥\83तà¤\82 à¤¨ à¤\9cातमà¥\8d à¥¤ \nभवता à¤\95à¥\81à¤\95à¥\8dà¤\95à¥\80सà¥\8d à¤\87तà¥\8dयà¥\87ततà¥\8d à¤¸à¤®à¤°à¥\8dथितानि किम् इति परिशील्य इदं पृष्ठं पुनरारोप्य प्रयतताम् ।",
        "noname": "भवता/भवत्या योग्यं प्रयोक्तृनाम न प्रदत्तम् ।",
        "loginsuccesstitle": "स्वागतं ! प्रवेशः सिद्धः ।",
        "loginsuccess": "भवता/भवत्या {{SITENAME}} इत्यत्र \"$1\"-योजकत्वेन प्रवेशः प्राप्तः ।",
        "nosuchuser": "'''$1''' नाम्नः न कोऽपि योजकः विद्यते ।\n\nप्रयोक्तृनामानि पक्षानुगुणं (case sensitive) भवन्ति ।\n\nयत् टङ्कितं, तत् पश्यतु अथवा [[Special:UserLogin/signup|नूतनसदस्यता प्राप्यताम्]] ।",
        "nosuchusershort": "'''$1''' नाम्नः न कोऽपि योजकः विद्यते ।\n\nयत् टङ्कितं, तत् पश्यतु ।",
        "nouserspecified": "भवता/भवत्या एकं योग्यं प्रयोक्तृनाम अवश्यमेव दातव्यम् ।",
-       "login-userblocked": "à¤\8fषà¤\83 à¤¯à¥\8bà¤\9cà¤\95à¤\83 à¤ªà¥\8dरतिबनà¥\8dधितà¤\83 à¥¤ à¤ªà¥\8dरविष्टुम् अनुमतिः नास्ति ।",
+       "login-userblocked": "à¤\8fषà¤\83 à¤¯à¥\8bà¤\9cà¤\95à¤\83 à¤ªà¥\8dरतिबनà¥\8dधितà¤\83 à¥¤ à¤ªà¥\8dरवà¥\87ष्टुम् अनुमतिः नास्ति ।",
        "wrongpassword": "भवता/भवत्या लिखितः कूटशब्दः त्रुटियुक्तः । \nकृपया पुनः लिख्यताम् ।",
        "wrongpasswordempty": "कूटशब्दपेटिकायां कूटशब्दः न लिखितः ।\n\nकृपया पुनः प्रयासः क्रियताम् ।",
        "passwordtooshort": "न्यूनातिन्यूनं {{PLURAL:$1| 1 अक्षरात्मकः|$1 अक्षरात्मकः}} कूटशब्दः भवेदेव ।",
        "passwordsent": "\"$1\" इत्यस्य पञ्जीकृताय ई-पत्रसङ्केताय नवीनः कूटशब्दः प्रेषितः अस्ति । \n\nकृपया तस्य कूटशब्दस्य उपयोगेन पुनः प्रविश्यताम् ।",
        "blocked-mailpassword": "भवतः/भवत्याः अन्तर्जालसंविद् (IP) प्रतिबन्धितः अस्ति । \nसम्पादनाय अनुमतिः नास्ति, अतः कूटशब्दस्य पुनःप्राप्तिः भवितुं नार्हति ।",
        "eauthentsent": "अधिकृतपुष्टै भवता/भवत्या पञ्जीकृताय ई-पत्रसङ्केताय ई-पत्रं प्रेषितमस्ति । तस्य ई-पत्रसङ्केतस्यैव इतः परम् उपयोगः भवतु इति इच्छति चेत् प्रेषिते ई-पत्रे यथा लिखितमस्ति, तथा करोतु । एवं तस्य ई-पत्रसङ्केतस्य अधिकृतपुष्टता भविष्यति ।",
-       "throttled-mailpassword": "à¤\95à¥\82à¤\9fशबà¥\8dदà¤\82 à¤ªà¤°à¤¿à¤°à¥\8dवतितà¥\81à¤\82 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤ªà¤\9eà¥\8dà¤\9cà¥\80à¤\95à¥\83ताय à¤\88-पतà¥\8dरसà¤\99à¥\8dà¤\95à¥\87ताय à¤\85नà¥\8dतिम{{PLURAL:$1|हà¥\8bरायाà¤\82|$1 à¤¹à¥\8bरासà¥\81}} à¤¨à¥\82तनà¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤ªà¥\8dरà¥\87षितà¤\83 à¤\85सà¥\8dति à¥¤\n\nदà¥\81रà¥\81पयà¥\8bà¤\97à¤\82 à¤µà¤¾à¤°à¤¯à¤¿à¤¤à¥\81मà¥\8d à¤ªà¥\8dरति {{PLURAL:$1|हà¥\8bरायाà¤\82|$1 à¤¹à¥\8bरासà¥\81}} केवलम् एकम् ई-पत्रं प्रेष्यते ।",
+       "throttled-mailpassword": "à¤\95à¥\82à¤\9fशबà¥\8dदà¤\82 à¤ªà¤°à¤¿à¤°à¥\8dवतितà¥\81à¤\82 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤ªà¤\9eà¥\8dà¤\9cà¥\80à¤\95à¥\83ताय à¤\88-पतà¥\8dरसà¤\99à¥\8dà¤\95à¥\87ताय à¤\85नà¥\8dतिम{{PLURAL:$1|हà¥\8bरायाà¤\82|$1 à¤¹à¥\8bरासà¥\81}} à¤¨à¥\82तनà¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤ªà¥\8dरà¥\87षितà¤\83 à¤\85सà¥\8dति à¥¤\n\nदà¥\81रà¥\81पयà¥\8bà¤\97à¤\82 à¤µà¤¾à¤°à¤¯à¤¿à¤¤à¥\81मà¥\8d à¤ªà¥\8dरति {{PLURAL:$1|हà¥\8bरà¤\82|$1 à¤¹à¥\8bरà¤\82}} केवलम् एकम् ई-पत्रं प्रेष्यते ।",
        "mailerror": "ई-पत्रसम्प्रेषणे दोषः : $1",
        "acct_creation_throttle_hit": "चतु्र्विंशतिघण्टासु अस्य सङ्गणकस्य आन्तर्जालसंविदा (IP) {{PLURAL:$1|1 योजकः|$1 योजकाः}} सदस्यतां प्राप्तवान्/वन्तः । अद्य इतोपि अधिकसदस्याः प्राप्तुं न शक्यन्ते ।",
        "emailauthenticated": "$2 दिनाङ्के $3 वादने भवतः/भवत्याः ई-पत्रसङ्केतः पुष्टितः ।",
        "accountcreated": "सदस्यता प्राप्ता",
        "accountcreatedtext": "[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) कृते \"योजसम्भाषणम्\" इति पृष्ठं रचितम् ।",
        "createaccount-title": "{{SITENAME}} कृते सदस्यता प्राप्यताम्",
-       "createaccount-text": "{{SITENAME}} ($4) à¤\87तà¥\8dयतà¥\8dर, \"$2\" à¤¨à¤¾à¤®à¥\8dना, \"$3\" à¤\95à¥\82à¤\9fशबà¥\8dदà¥\87न, à¤\9a à¤\95à¥\8bऽपि à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤\88-पतà¥\8dरसà¤\99à¥\8dà¤\95à¥\87तसà¥\8dय à¤\89पयà¥\8bà¤\97à¤\82 à¤\95à¥\83तà¥\8dवा à¤¸à¤¦à¤¸à¥\8dयताà¤\82 à¤ªà¥\8dरापतà¥\8d à¥¤\nà¤\85धà¥\81ना à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤ªà¥\8dरवà¥\87शà¤\82 à¤\95à¥\83तà¥\8dवा à¤\97à¥\81पà¥\8dतसà¤\99à¥\8dà¤\96à¥\8dयाà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयितà¤\82 à¤¶à¤\95à¥\8dनà¥\8bति à¥¤\nà¤\8fषा à¤¸à¤¦à¤¸à¥\8dयतापà¥\8dरापà¥\8dतिà¤\83 à¤\95à¥\8dषतà¥\8dया à¤\85भवतà¥\8d à¤\9aà¥\87तà¥\8d, à¤\8fनà¤\82 à¤¸à¤¨à¥\8dदà¥\87शमà¥\8d à¤\85वà¤\97णà¥\8bतà¥\81 ।",
-       "login-throttled": "भवता/भवतà¥\8dया à¤\85तà¥\8dयधिà¤\95ाà¤\83 à¤ªà¥\8dरवà¥\87शपà¥\8dरयासाà¤\83 à¤\95à¥\83ताà¤\83 à¥¤ \nà¤\95à¥\83पया $1 à¤\95ालà¤\82 à¤¯à¤¾à¤µà¤¤à¥\8d à¤ªà¥\8dरतिà¤\95à¥\8dषाà¤\82 à¤\95रà¥\8bतà¥\81 ।",
+       "createaccount-text": "{{SITENAME}} ($4) à¤\87तà¥\8dयतà¥\8dर, \"$2\" à¤¨à¤¾à¤®à¥\8dना, \"$3\" à¤\95à¥\82à¤\9fशबà¥\8dदà¥\87न, à¤\9a à¤\95à¥\8bऽपि à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤\88-पतà¥\8dरसà¤\99à¥\8dà¤\95à¥\87तसà¥\8dय à¤\89पयà¥\8bà¤\97à¤\82 à¤\95à¥\83तà¥\8dवा à¤¸à¤¦à¤¸à¥\8dयताà¤\82 à¤ªà¥\8dरापतà¥\8d à¥¤\nà¤\85धà¥\81ना à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤ªà¥\8dरवà¥\87शà¤\82 à¤\95à¥\83तà¥\8dवा à¤\97à¥\81पà¥\8dतसà¤\99à¥\8dà¤\96à¥\8dयाà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयितà¤\82 à¤¶à¤\95à¥\8dनà¥\8bति à¥¤\nà¤\8fषा à¤¸à¤¦à¤¸à¥\8dयतापà¥\8dरापà¥\8dतिà¤\83 à¤\95à¥\8dषतà¥\8dया à¤\85भवतà¥\8d à¤\9aà¥\87तà¥\8d, à¤\8fनà¤\82 à¤¸à¤¨à¥\8dदà¥\87शमà¥\8d à¤\89पà¥\87à¤\95à¥\8dषतामà¥\8d ।",
+       "login-throttled": "भवता/भवतà¥\8dया à¤\85तà¥\8dयधिà¤\95ाà¤\83 à¤ªà¥\8dरवà¥\87शपà¥\8dरयासाà¤\83 à¤\95à¥\83ताà¤\83 à¥¤ \nà¤\95à¥\83पया $1 à¤\95ालà¤\82 à¤¯à¤¾à¤µà¤¤à¥\8d à¤ªà¥\8dरतà¥\80à¤\95à¥\8dषà¥\8dयतामà¥\8d ।",
        "login-abort-generic": "भवतः/भवत्याः प्रवेशप्रयासः विफलीभूतः - परित्यक्तः",
+       "login-migrated-generic": "भवतः/भवत्याः सदस्यत्वं स्थानान्तरितं, येन भवतः/भवत्याः प्रयोक्तृनाम एतस्मिन् विकि-प्रकल्पे न विद्यते ।",
        "loginlanguagelabel": "भाषा : $1",
-       "suspicious-userlogout": "भवतà¤\83/भवतà¥\8dयाà¤\83 \"निरà¥\8dà¤\97मनमà¥\8d\" à¤\87तà¥\8dयसà¥\8dय à¤µà¤¿à¤¨à¤¤à¤¿à¤\82 à¤¸à¥\8dवà¥\80à¤\95रà¥\8dतà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dयतà¥\87 à¥¤ à¤\95ारणà¤\82 à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤\8fषा à¤µà¤¿à¤¨à¤¤à¤¿à¤\83 तृटियुक्तगवेक्षणात् प्रतिनिधि(proxy)-तः वा कृता ।",
-       "createacct-another-realname-tip": "वास्तविकनाम ऐच्छकम् अस्ति । भवान्/भवती एनं विकल्पं समर्थयति चेत्, भवतः/भवत्याः योगदानश्रेयस्य उल्लेखसमये अस्य उपयोगः भविष्यति ।",
+       "suspicious-userlogout": "भवतà¤\83/भवतà¥\8dयाà¤\83 \"निरà¥\8dà¤\97मà¥\8dयतामà¥\8d\" à¤\87तà¥\8dयसà¥\8dय à¤µà¤¿à¤\9cà¥\8dà¤\9eपà¥\8dतिà¤\82 à¤¸à¥\8dवà¥\80à¤\95रà¥\8dतà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dयतà¥\87 à¥¤ à¤¯à¤¤à¤\83 à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤\8fषा à¤µà¤¿à¤\9cà¥\8dà¤\9eपà¥\8dतिà¤\82 तृटियुक्तगवेक्षणात् प्रतिनिधि(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य à¤\89लà¥\8dलà¥\87à¤\96समयà¥\87 à¤\85सà¥\8dय à¤\89पयà¥\8bà¤\97à¤\83 à¤­à¤µà¤¿à¤·à¥\8dयति à¥¤",
        "pt-login": "प्रविश्यताम्",
        "pt-login-button": "प्रविश्यताम्",
        "pt-createaccount": "सदस्यता प्राप्यताम्",
-       "pt-userlogout": "निरà¥\8dà¤\97मनम्",
+       "pt-userlogout": "निरà¥\8dà¤\97मà¥\8dयताम्",
        "php-mail-error-unknown": "PHP लिप्याः मुख्यनियोगे (in main()) अज्ञातत्रुटिः प्राप्ता ।",
        "user-mail-no-addy": "ई-पत्रसङ्केतं विना ई-पत्रप्रेषणस्य प्रयासः कृतः ।",
        "user-mail-no-body": "भवता/भवत्या रिक्तं लघुसन्देशयुक्तं वा ई-पत्रं प्रेषणस्य प्रयासः कृतः ।",
        "retypenew": "नूतनकूटशब्दः पुनः लिख्यताम् :",
        "resetpass_submit": "कूटशब्दः योज्यतां, प्रविश्यतां च",
        "changepassword-success": "भवतः/भवत्याः कूटशब्दः सफलतया परिवर्तितः ।",
-       "changepassword-throttled": "भवता/भवतà¥\8dया à¤\85तà¥\8dयधिà¤\95ाà¤\83 à¤ªà¥\8dरवà¥\87शपà¥\8dरयासाà¤\83 à¤\95à¥\83ताà¤\83 à¥¤ \nà¤\95à¥\83पया $1 à¤\95ालà¤\82 à¤¯à¤¾à¤µà¤¤à¥\8d à¤ªà¥\8dरतिà¤\95à¥\8dषाà¤\82 à¤\95रà¥\8bतà¥\81 ।",
+       "changepassword-throttled": "भवता/भवतà¥\8dया à¤\85तà¥\8dयधिà¤\95ाà¤\83 à¤ªà¥\8dरवà¥\87शपà¥\8dरयासाà¤\83 à¤\95à¥\83ताà¤\83 à¥¤ \nà¤\95à¥\83पया $1 à¤\95ालà¤\82 à¤¯à¤¾à¤µà¤¤à¥\8d à¤ªà¥\8dरतà¥\80à¤\95à¥\8dषà¥\8dयतामà¥\8d ।",
        "resetpass_forbidden": "कूटशब्दाः परिवर्तयितुं न शक्यन्ते",
        "resetpass-no-info": "एतत् पृष्ठं सम्पादयितुं प्रवेशः अनिवार्यः ।",
        "resetpass-submit-loggedin": "कूटशब्दः परिवर्त्यताम्",
        "resetpass-recycled": "कूटशब्दं परिवर्तनावसरे नवीनकूटशब्दे पुरानतकूटशब्दस्य उपयोगं मा करोतु ।",
        "resetpass-temp-emailed": "भवता/भवत्या अल्पकालीन(temporary)कूटशब्देन प्रवेशः प्राप्तः । \nसदस्यताप्रक्रियां पूर्णं कर्तुं नूतनः कूटशब्दः लेखनीयः एव ।",
        "resetpass-temp-password": "अल्पकालीनकूटशब्दः :",
+       "resetpass-abort-generic": "केनचित् विस्तारकेन (extension) कूटशब्दस्य परिवर्तनं स्थगितम् अस्ति ।",
        "resetpass-expired": "भवतः/भवत्याः कृटशब्दस्य अवधिः समाप्ता । प्रवेष्टुं नवीनकूटशब्दं निर्धारयतु ।",
        "resetpass-expired-soft": "भवतः/भवत्याः कृटशब्दस्य अवधिः समाप्ता । कृपया नवीनकूटशब्दं निर्धारयतु । पश्चात् नवीनकूटशब्दं निर्धारयितुं \"{{int:resetpass-submit-cancel}}\" नुदतु ।",
        "resetpass-validity-soft": "भवतः/भवत्याः कृटशब्दः अयोग्यः अस्ति । कृपया नवीनकूटशब्दं निर्धारयतु । पश्चात् नवीनकूटशब्दं निर्धारयितुं \"{{int:resetpass-submit-cancel}}\" नुदतु ।",
        "passwordreset-email": "ई-पत्रसङ्केतः",
        "passwordreset-emailtitle": "{{SITENAME}} इत्यत्र योजकविषये",
        "passwordreset-emailtext-ip": "कोऽपि (कदाचित् भवान्/भवती, $1 अन्तर्जालसंविदः (from IP)) {{SITENAME}}($4) जालस्थानस्य  कृते कूटशब्दपरिवर्तनस्य विनतिम् अकरोत् । निम्न{{PLURAL:$3|योजकः|योजकाः}} अनेन ई-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विनतिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
-       "passwordreset-emailtext-user": "$1 à¤¯à¥\8bà¤\9cà¤\95à¤\83 {{SITENAME}}($4) à¤\9cालसà¥\8dथानसà¥\8dय  à¤\95à¥\83तà¥\87 à¤\95à¥\82à¤\9fशबà¥\8dदपरिवरà¥\8dतनसà¥\8dय à¤µà¤¿à¤¨à¤¤à¤¿à¤®à¥\8d à¤\85à¤\95रà¥\8bतà¥\8d à¥¤ à¤¨à¤¿à¤®à¥\8dन{{PLURAL:$3|यà¥\8bà¤\9cà¤\95à¤\83|यà¥\8bà¤\9cà¤\95ाà¤\83}} à¤\85नà¥\87न à¤\88-पतà¥\8dरà¥\87ण à¤¸à¤¹ à¤¸à¤²à¥\8dलà¤\97à¥\8dनà¤\83 à¤\85सà¥\8dति/सलà¥\8dलà¤\97à¥\8dनाà¤\83 à¤¸à¤¨à¥\8dति à¥¤\n\n$2\n\n{{PLURAL:$3|à¤\8fषà¤\83 à¤\85लà¥\8dपà¤\95ालà¥\80नà¤\95à¥\82à¤\9fशबà¥\8dदà¤\83|à¤\8fतà¥\87 à¤\85लà¥\8dपà¤\95ालà¥\80नà¤\95à¥\82à¤\9fशबà¥\8dदाà¤\83}} {{PLURAL:$5|à¤\9aतà¥\81रà¥\8dविà¤\82शतिà¤\98णà¥\8dà¤\9fासà¥\81|$5 à¤¦à¤¿à¤¨à¥\87षà¥\81}} à¤¨à¤¿à¤°à¤¸à¥\8dतà¤\83 à¤­à¤µà¤¿à¤·à¥\8dयति/निरसà¥\8dताà¤\83 à¤­à¤µà¤¿à¤·à¥\8dयनà¥\8dति à¥¤\nà¤\85धà¥\81ना à¤ªà¥\8dरवà¥\87शà¤\82 à¤¸à¤®à¥\8dपà¥\8dरापà¥\8dय à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¥\80यà¤\83 à¤\8fव à¥¤ \n\nनिमà¥\8dनà¤\95ारणानि à¤¯à¤¦à¤¿ à¤¸à¤¨à¥\8dति, à¤¤à¤°à¥\8dहि à¤\8fनà¤\82 à¤¸à¤¨à¥\8dदà¥\87शमà¥\8d à¤\85वà¤\97णà¥\8dयतामà¥\8d à¥¤\n\n१ à¤\95à¥\8bऽपि à¤\85नà¥\8dयà¤\83 à¤\85तà¥\8dर à¤µà¤¿à¤¨तिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
+       "passwordreset-emailtext-user": "$1 à¤¯à¥\8bà¤\9cà¤\95à¤\83 {{SITENAME}}($4) à¤\9cालसà¥\8dथानसà¥\8dय  à¤\95à¥\83तà¥\87 à¤\95à¥\82à¤\9fशबà¥\8dदपरिवरà¥\8dतनसà¥\8dय à¤µà¤¿à¤¨à¤¤à¤¿à¤®à¥\8d à¤\85à¤\95रà¥\8bतà¥\8d à¥¤ à¤¨à¤¿à¤®à¥\8dन{{PLURAL:$3|यà¥\8bà¤\9cà¤\95à¤\83|यà¥\8bà¤\9cà¤\95ाà¤\83}} à¤\85नà¥\87न à¤\88-पतà¥\8dरà¥\87ण à¤¸à¤¹ à¤¸à¤²à¥\8dलà¤\97à¥\8dनà¤\83 à¤\85सà¥\8dति/सलà¥\8dलà¤\97à¥\8dनाà¤\83 à¤¸à¤¨à¥\8dति à¥¤\n\n$2\n\n{{PLURAL:$3|à¤\8fषà¤\83 à¤\85लà¥\8dपà¤\95ालà¥\80नà¤\95à¥\82à¤\9fशबà¥\8dदà¤\83|à¤\8fतà¥\87 à¤\85लà¥\8dपà¤\95ालà¥\80नà¤\95à¥\82à¤\9fशबà¥\8dदाà¤\83}} {{PLURAL:$5|à¤\9aतà¥\81रà¥\8dविà¤\82शतिà¤\98णà¥\8dà¤\9fासà¥\81|$5 à¤¦à¤¿à¤¨à¥\87षà¥\81}} à¤¨à¤¿à¤°à¤¸à¥\8dतà¤\83 à¤­à¤µà¤¿à¤·à¥\8dयति/निरसà¥\8dताà¤\83 à¤­à¤µà¤¿à¤·à¥\8dयनà¥\8dति à¥¤\nà¤\85धà¥\81ना à¤ªà¥\8dरवà¥\87शà¤\82 à¤¸à¤®à¥\8dपà¥\8dरापà¥\8dय à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¥\80यà¤\83 à¤\8fव à¥¤ \n\nनिमà¥\8dनà¤\95ारणानि à¤¯à¤¦à¤¿ à¤¸à¤¨à¥\8dति, à¤¤à¤°à¥\8dहि à¤\8fनà¤\82 à¤¸à¤¨à¥\8dदà¥\87शमà¥\8d à¤\85वà¤\97णà¥\8dयतामà¥\8d à¥¤\n\n१ à¤\95à¥\8bऽपि à¤\85नà¥\8dयà¤\83 à¤\85तà¥\8dर à¤µà¤¿à¤\9cà¥\8dà¤\9eपà¥\8dतिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
        "passwordreset-emailelement": "प्रयोक्तृनाम : $1\nअल्पकालीनकूटशब्दः : $2",
        "passwordreset-emailsent": "परिवर्तितकूटशब्दस्य ई-पत्रं प्रेषितम् अस्ति ।",
        "passwordreset-emailsent-capture": "परिवर्तितकूटशब्दस्य ई-पत्रं प्रेषितम् अस्ति । तत् अधः द्रष्टुं शक्यते ।",
        "headline_sample": "शीर्षकम्",
        "headline_tip": "द्वितीयस्तरीयं शीर्षकम्",
        "nowiki_sample": "अप्रारूपितं पाठम् अत्र निवेश्यताम्",
-       "nowiki_tip": "विà¤\95ि-पà¥\8dरारà¥\82पसà¥\8dय à¤\85वà¤\97णनाà¤\82 à¤\95रà¥\8bतà¥\81",
+       "nowiki_tip": "विà¤\95ि-पà¥\8dरारà¥\82पमà¥\8d à¤\89पà¥\87à¤\95à¥\8dषà¥\8dयतामà¥\8d",
        "image_sample": "उदाहरणम्.jpg",
        "image_tip": "अन्तर्निहिता सञ्चिका",
        "media_sample": "उदाहरणम्.ogg",
        "preview": "प्राग्दृश्यम्",
        "showpreview": "प्राग्दृश्यं दृश्यताम्",
        "showdiff": "परिवर्तनानि दृश्यन्ताम्",
-       "anoneditwarning": "'''पूर्वसूचना''' भवता/भवत्या प्रवेशः न कृतः !\nअत्र सम्पादनं कर्तुं प्रवेशः अनिवार्यः । अन्यथा अस्य पृष्ठस्य इतिहासे भवतः/भवत्याः अन्तर्जालसंविदः (IP) सङ्ख्या अङ्किता भवति ।",
+       "blankarticle": "<strong>पूर्वसूचना : </strong> भवान्/भवती एकस्य रिक्तपृष्ठस्य निर्माणं करोति ।\nयदि भवान्/भवती \"{{int:savearticle}}\" इत्येतत् पुनः नोत्स्यति, तर्हि रिक्तपृष्ठस्य निर्माणं भविष्यति ।",
+       "anoneditwarning": "'''पूर्वसूचना''' भवता/भवत्या प्रवेशः न कृतः !\nअत्र सम्पादनं कर्तुं प्रवेशः अनिवार्यः । अन्यथा अस्य पृष्ठस्य इतिहासे भवतः/भवत्याः अन्तर्जालसंविदः (IP) सङ्ख्या अङ्किता भवति । यदि भवान्/भवती <strong>[$1 प्रविषचि]</strong> \nउत <strong>[$2 सदस्यातां प्राप्नोति]</strong>, तर्हि अन्यसुविधाभिः सह भवान्/भवती सम्पादनानां श्रेयम् अपि प्राप्स्यति ।",
        "anonpreviewwarning": "''भवता/भवत्या प्रवेशः न स्वीकृतः । अस्य पृष्ठस्य परिवर्तनस्य इतिहासे भवतः/भवत्याः अन्तर्जालसंविदः (IP) उल्लेखो भविष्यति ।''",
-       "missingsummary": "'''स्मरतु''' भवता/भवत्या सम्पादनस्य सारांशः न प्रदत्तः ।\n\"{{int:savearticle}}\" अत्र यदि भवान्/भवती द्वितीयवारं नुदिष्यति, तर्हि भवतः/भवत्याः सम्पादनसारांशात् ऋते परिवर्तनं रक्षितं भविष्यति ।",
+       "missingsummary": "'''स्मरतु''' भवता/भवत्या सम्पादनस्य सारांशः न प्रदत्तः ।\n\"{{int:savearticle}}\" अत्र यदि भवान्/भवती द्वितीयवारं नोत्स्यति, तर्हि भवतः/भवत्याः सम्पादनसारांशात् ऋते परिवर्तनं रक्षितं भविष्यति ।",
+       "selfredirect": "<strong>पूर्वसूचना :</strong> भवान्/भवती एतत् पृष्ठं एतत्पृष्ठं प्रत्येव प्रेषयति ।\nअनुप्रेषिणाय दोषपूर्णं लक्ष्यनिर्देशं भवितुम् अर्हति, अथवा तु भवान्/भवती अशुद्धपृष्ठस्य सम्पादनाय प्रयतते ।\n\"{{int:savearticle}}\" इत्ययत् भवान्/भवती पुनः नुदति चेत्, पुनर्नर्देशनं स्वयमेव भविष्यति ।",
        "missingcommenttext": "कृपया अधः टिप्पणीं लिखतु ।",
-       "missingcommentheader": "'''सà¥\8dमरतà¥\81''' à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤\85सà¥\8dयà¥\88 à¤\9fिपà¥\8dपणà¥\8dयà¥\88 à¤µà¤¿à¤·à¤¯à¤\83/शà¥\80रà¥\8dषà¤\95à¤\82 à¤¨ à¤ªà¥\8dरदतà¥\8dतमà¥\8d à¥¤\n\"{{int:savearticle}}\" à¤\85तà¥\8dर à¤¯à¤¦à¤¿ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤¦à¥\8dवितà¥\80यवारà¤\82 à¤¨à¥\81दिष्यति, तर्हि भवतः/भवत्याः सम्पादनसारांशात् ऋते एतत् रक्षितं भविष्यति ।",
+       "missingcommentheader": "'''सà¥\8dमरतà¥\81''' à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤\85सà¥\8dयà¥\88 à¤\9fिपà¥\8dपणà¥\8dयà¥\88 à¤µà¤¿à¤·à¤¯à¤\83/शà¥\80रà¥\8dषà¤\95à¤\82 à¤¨ à¤ªà¥\8dरदतà¥\8dतमà¥\8d à¥¤\n\"{{int:savearticle}}\" à¤\85तà¥\8dर à¤¯à¤¦à¤¿ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤¦à¥\8dवितà¥\80यवारà¤\82 à¤¨à¥\8bतà¥\8dस्यति, तर्हि भवतः/भवत्याः सम्पादनसारांशात् ऋते एतत् रक्षितं भविष्यति ।",
        "summary-preview": "सारांशस्य प्राग्दृश्यम् :",
        "subject-preview": "विषयस्य/शीर्षकस्य प्राग्दृश्यम्:",
+       "previewerrortext": "भवता/भवत्या कृतस्य परिवर्तनस्य प्राग्दृश्यस्य प्रदर्शनकाले दोषः अभवत् ।",
        "blockedtitle": "प्रयोक्ता अवरुद्धः वर्तते",
        "blockedtext": "<strong>भवतः/भवत्याः सदस्यता अन्तर्जालसंविद् वा प्रतिबन्धिता वर्तते ।</strong>\n\nप्रतिबन्धः $1 द्वारा अभवत् ।\nकारणं दत्तं यत्, <em>$2</em>.\n\n* प्रतिबन्धस्य प्रारम्भः : $8\n* प्रतिबन्धस्य समाप्तिः : $6\n* अभिप्रेतः अवरोध्यः : $7\n\n$1 अस्य सम्पर्कं कर्तुं शक्नोति । अथवा अन्य[[{{MediaWiki:Grouppage-sysop}}|प्रबन्धकेन]] सह प्रतिबन्धविषयकचर्चां कर्तुं शक्नोति ।\nभवान्/भवती \"ई-पत्रं प्रेष्यताम्\" विकल्पस्य उपयोगं कर्तुं न शक्नोति । भवतः/भवत्याः [[Special:Preferences|इष्टतमानि]] विकल्पे कोऽपि ई-पत्रसङ्केतः अस्ति, तस्य उपयोगाय च प्रतिबन्धः नास्ति चेत्, तस्य ई-पत्रस्य उपयोगं कर्तुं शक्नोति ।\n\nभवतः/भवत्याः वर्तमाना अन्तर्जालसंविद् $3, प्रतिबन्धितसदस्यता #$5 च अस्ति । \n\nयत्र कुत्रापि प्रबन्धसम्बद्धां चर्चां करोति, तत्र उक्तसूचनायाः  उपयोगम् अवश्यं करोतु ।",
        "autoblockedtext": "<strong>भवतः/भवत्याः अन्तर्जालसंविद् प्रतिबन्धिता वर्तते ।</strong>\n\nप्रतिबन्धः $1 द्वारा अभवत् ।\nकारणं दत्तं यत्, <em>$2</em>.\n\n* प्रतिबन्धस्य प्रारम्भः : $8\n* प्रतिबन्धस्य समाप्तिः : $6\n* अभिप्रेतः अवरोध्यः : $7\n\n$1 अस्य सम्पर्कं कर्तुं शक्नोति । अथवा अन्य[[{{MediaWiki:Grouppage-sysop}}|प्रबन्धकेन]] सह प्रतिबन्धविषयकचर्चां कर्तुं शक्नोति ।\nभवान्/भवती \"ई-पत्रं प्रेष्यताम्\" विकल्पस्य उपयोगं कर्तुं न शक्नोति । भवतः/भवत्याः [[Special:Preferences|इष्टतमानि]] विकल्पे कोऽपि ई-पत्रसङ्केतः अस्ति, तस्य उपयोगाय च प्रतिबन्धः नास्ति चेत्, तस्य ई-पत्रस्य उपयोगं कर्तुं शक्नोति ।\n\nभवतः/भवत्याः वर्तमाना अन्तर्जालसंविद् $3, प्रतिबन्धितसदस्यता #$5 च अस्ति । \n\nयत्र कुत्रापि प्रबन्धसम्बद्धां चर्चां करोति, तत्र उक्तसूचनायाः  उपयोगम् अवश्यं करोतु ।",
        "loginreqlink": "प्रविश्यताम्",
        "loginreqpagetext": "अन्यानि पृष्ठानि द्रष्टुं $1 आवश्यकम् ।",
        "accmailtitle": "कूटशब्दः प्रेषितः",
-       "accmailtext": "[[User talk:$1|$1]] कृते अशृङ्खलितरीत्या (randomly) उत्पादितः कूटशब्दः $2 ई-पत्रसङ्केतं प्रति प्रषितः अस्ति । <em>[[Special:ChangePassword|कूटशब्दः परिवर्त्यताम्]]</em> अत्र तत् परिर्तयितुं शक्यते ।",
+       "accmailtext": "[[User talk:$1|$1]] à¤\95à¥\83तà¥\87 à¤\85शà¥\83à¤\99à¥\8dà¤\96लितरà¥\80तà¥\8dया (randomly) à¤\89तà¥\8dपादितà¤\83 à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 $2 à¤\88-पतà¥\8dरसà¤\99à¥\8dà¤\95à¥\87तà¤\82 à¤ªà¥\8dरति à¤ªà¥\8dरà¥\87षितà¤\83 à¤\85सà¥\8dति à¥¤ <em>[[Special:ChangePassword|à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतà¥\8dयतामà¥\8d]]</em> à¤\85तà¥\8dर à¤¤à¤¤à¥\8d à¤ªà¤°à¤¿à¤°à¥\8dतयितà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87 à¥¤",
        "newarticle": "(नूतनम्)",
-       "newarticletext": "भवानà¥\8d/भवतà¥\80 à¤\85निरà¥\8dमितà¥\87 à¤ªà¥\83षà¥\8dठà¥\87 à¤\85सà¥\8dति à¥¤ \nपà¥\83षà¥\8dठà¤\82 à¤¸à¥\8dरषà¥\8dà¤\9fà¥\81मà¥\8d à¤\85धà¤\83 à¤ªà¥\8dरदतà¥\8dतायाà¤\82 à¤ªà¥\87à¤\9fिà¤\95ायाà¤\82 à¤\9fà¤\99à¥\8dà¤\95नà¤\82 à¤ªà¥\8dरारभतà¥\81 (साहाय्यार्थं [$1 अत्र]) नुदतु ।\nभवान्/भवती यदि क्षतिकारणात् एतत् पृष्ठं प्रति आगच्छत्, तर्हि अस्य गवेषकस्य (browser) Back नुदतु ।",
-       "anontalkpagetext": "----\n<em>à¤\8fततà¥\8d à¤¸à¤®à¥\8dभाषणपà¥\83षà¥\8dठमà¥\8d à¤\85नामà¤\95यà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤\85सà¥\8dति à¥¤ à¤\8fततà¥\8d à¤¤à¥\87भà¥\8dयà¤\83 à¤\85नामà¤\95यà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤°à¤\9aितमसà¥\8dति, à¤¯à¥\88à¤\83 à¤¸à¤¦à¤¸à¥\8dयता à¤¨ à¤ªà¥\8dरापà¥\8dता à¤\85सà¥\8dति à¤¤à¤¥à¤¾ à¤\9a à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\89पयà¥\8bà¤\97à¤\82 à¤¨ à¤\95à¥\81रà¥\8dवनà¥\8dतà¤\83 à¤¸à¤¨à¥\8dति à¥¤</em>\nतà¥\87षाà¤\82 à¤µà¥\8dयà¤\95à¥\8dतिà¤\97तसà¥\82à¤\9aनाà¤\82 à¤ªà¥\8dरापà¥\8dतà¥\81मà¥\87व à¤µà¤¯à¤\82 à¤¤à¤¸à¥\8dय/तसà¥\8dयाà¤\83 à¤\85नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदà¤\83 à¤\89पयà¥\8bà¤\97à¤\82 à¤\95à¥\81रà¥\8dमà¤\83 à¥¤ à¤\95à¥\87à¤\9aन à¤¯à¥\8bà¤\9cà¤\95ाà¤\83 à¤¸à¥\8dवसà¥\8dय à¤\85नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदमà¥\8d à¤\85नà¥\8dयानà¥\8d à¤¯à¥\8bà¤\9cà¤\95ानà¥\8d à¤\95थयनà¥\8dति à¥¤ \nयदà¥\8dयपि à¤\85नामà¤\95यà¥\8bà¤\9cà¤\95à¤\83 à¤\85हà¤\82 à¤¨à¤¾à¤¸à¥\8dमि, à¤¤à¤¥à¤¾à¤ªà¤¿ à¤\85यà¥\8bà¤\97à¥\8dयसà¥\82à¤\9aनाà¤\83 à¤®à¤® à¤ªà¤¾à¤°à¥\8dशà¥\8dवà¥\87 à¤\86à¤\97à¤\9aà¥\8dà¤\9bनà¥\8dतà¥\8dयà¤\83 à¤¸à¤¨à¥\8dति à¤\87ति à¤¯à¤¦à¤¿ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤\85नà¥\81वति, तर्हि एतत् [[Special:UserLogin/signup|create an account]] एतत् [[Special:UserLogin|log in]] वा कृत्वा भविष्यस्य अनामकयोजकनां सन्देशेभ्यः स्वस्य रक्षणं करोतु ।",
+       "newarticletext": "भवानà¥\8d/भवतà¥\80 à¤\85निरà¥\8dमितà¥\87 à¤ªà¥\83षà¥\8dठà¥\87 à¤\85सà¥\8dति à¥¤ \nपà¥\83षà¥\8dठà¤\82 à¤¸à¥\8dरषà¥\8dà¤\9fà¥\81मà¥\8d à¤\85धà¤\83 à¤ªà¥\8dरदतà¥\8dतायाà¤\82 à¤ªà¥\87à¤\9fिà¤\95ायाà¤\82 à¤\9fà¤\99à¥\8dà¤\95नà¤\82 à¤ªà¥\8dरारभतामà¥\8d (साहाय्यार्थं [$1 अत्र]) नुदतु ।\nभवान्/भवती यदि क्षतिकारणात् एतत् पृष्ठं प्रति आगच्छत्, तर्हि अस्य गवेषकस्य (browser) Back नुदतु ।",
+       "anontalkpagetext": "----\n<em>à¤\8fततà¥\8d à¤¸à¤®à¥\8dभाषणपà¥\83षà¥\8dठमà¥\8d à¤\85नामà¤\95यà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤\85सà¥\8dति à¥¤ à¤\8fततà¥\8d à¤¤à¥\87भà¥\8dयà¤\83 à¤\85नामà¤\95यà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤°à¤\9aितमसà¥\8dति, à¤¯à¥\88à¤\83 à¤¸à¤¦à¤¸à¥\8dयता à¤¨ à¤ªà¥\8dरापà¥\8dता à¤\85सà¥\8dति à¤¤à¤¥à¤¾ à¤\9a à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\89पयà¥\8bà¤\97à¤\82 à¤¨ à¤\95à¥\81रà¥\8dवनà¥\8dतà¤\83 à¤¸à¤¨à¥\8dति à¥¤</em>\nतà¥\87षाà¤\82 à¤µà¥\8dयà¤\95à¥\8dतिà¤\97तसà¥\82à¤\9aनाà¤\82 à¤ªà¥\8dरापà¥\8dतà¥\81मà¥\87व à¤µà¤¯à¤\82 à¤¤à¤¸à¥\8dय/तसà¥\8dयाà¤\83 à¤\85नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदà¤\83 à¤\89पयà¥\8bà¤\97à¤\82 à¤\95à¥\81रà¥\8dमà¤\83 à¥¤ à¤\95à¥\87à¤\9aन à¤¯à¥\8bà¤\9cà¤\95ाà¤\83 à¤¸à¥\8dवसà¥\8dय à¤\85नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदमà¥\8d à¤\85नà¥\8dयानà¥\8d à¤¯à¥\8bà¤\9cà¤\95ानà¥\8d à¤\95थयनà¥\8dति à¥¤ \nयदà¥\8dयपि à¤\85नामà¤\95यà¥\8bà¤\9cà¤\95à¤\83 à¤\85हà¤\82 à¤¨à¤¾à¤¸à¥\8dमि, à¤¤à¤¥à¤¾à¤ªà¤¿ à¤\85यà¥\8bà¤\97à¥\8dयसà¥\82à¤\9aनाà¤\83 à¤®à¤® à¤ªà¤¾à¤°à¥\8dशà¥\8dवà¥\87 à¤\86à¤\97à¤\9aà¥\8dà¤\9bनà¥\8dतà¥\8dयà¤\83 à¤¸à¤¨à¥\8dति à¤\87ति à¤¯à¤¦à¤¿ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤¶à¤\99à¥\8dà¤\95तà¥\87, तर्हि एतत् [[Special:UserLogin/signup|create an account]] एतत् [[Special:UserLogin|log in]] वा कृत्वा भविष्यस्य अनामकयोजकनां सन्देशेभ्यः स्वस्य रक्षणं करोतु ।",
        "noarticletext": "अस्मिन् पृष्ठे अधुना किमपि न विद्यते । [[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}}}}  सम्बद्धेषु पृष्ठेषु अन्वेषणं]\n[{{fullurl:{{FULLPAGENAME}}|action=edit}} अस्य पृष्ठस्य सम्पादनं] वा  शक्यम्</span>.",
-       "missing-revision": "\"{{FULLPAGENAME}}\" à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 #$1 à¤¨à¥\8bपलभà¥\8dयतà¥\8d à¥¤\nयसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\87तिहासà¥\87 à¤ªà¤°à¤¿à¤¸à¤¨à¥\8dधयà¤\83 à¤\95ालातà¥\80तानà¥\8dयà¤\83 à¤¸à¤¨à¥\8dति, à¤¤à¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤\8fवà¤\82 à¤­à¤µà¤¤à¤¿ à¥¤\nà¤\85धिà¤\95सà¥\82à¤\9fनाः अत्र प्राप्तुं शक्यते [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} अपाकृतानाम् आवलिः].",
-       "userpage-userdoesnotexist": "\"$1\" à¤\87ति à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\83नाम à¤ªà¤\9eà¥\8dà¤\9cिकृतं न विद्यते । अस्य\nनवरचनायै/सम्पादनाय तत् पश्यतु ।",
-       "userpage-userdoesnotexist-view": "\"$1\" à¤\87ति à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\83नाम à¤ªà¤\9eà¥\8dà¤\9cिकृतं न विद्यते ।",
-       "blocked-notice-logextract": "अयं प्रयोक्ता सम्प्रति अवरुद्धः वर्तते।\nनूतनतमा अवरोधाभिलेख-प्रविष्टिः सन्दर्भार्थम् अधस्तात् प्रदत्ताऽस्ति:",
+       "missing-revision": "\"{{FULLPAGENAME}}\" à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 #$1 à¤¨à¥\8bपलभà¥\8dयमà¥\8d à¥¤\nयसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\87तिहासà¥\87 à¤ªà¤°à¤¿à¤¸à¤¨à¥\8dधयà¤\83 à¤\95ालातà¥\80ताà¤\83 à¤¸à¤¨à¥\8dति, à¤¤à¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤\8fवà¤\82 à¤­à¤µà¤¤à¤¿ à¥¤\nà¤\85धिà¤\95सà¥\82à¤\9aनाः अत्र प्राप्तुं शक्यते [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} अपाकृतानाम् आवलिः].",
+       "userpage-userdoesnotexist": "\"$1\" à¤\87ति à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\83नाम à¤ªà¤\9eà¥\8dà¤\9cà¥\80कृतं न विद्यते । अस्य\nनवरचनायै/सम्पादनाय तत् पश्यतु ।",
+       "userpage-userdoesnotexist-view": "\"$1\" à¤\87ति à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\83नाम à¤ªà¤\9eà¥\8dà¤\9cà¥\80कृतं न विद्यते ।",
+       "blocked-notice-logextract": "अयं प्रयोक्ता सम्प्रति अवरुद्धः वर्तते ।\nसन्दर्भार्थम् अधः नूतनतमा अवरोधाभिलेख-प्रविष्टिः प्रदत्ताऽस्ति :",
        "clearyourcache": "<strong>सूचना :</strong> भवता/भवत्या कृतानि सम्पादनानि संरक्ष्य तानि परिवर्तनेषु द्रष्टुं गवेषकस्य पृष्ठस्य पुनरारोपणम् (reload) आवश्यकं भवति ।\n* <strong>Firefox / Safari:</strong> <em>Shift</em>कुड्मलेन सह <em>Reload</em>कुड्मलं नुदतु । \n* <strong>Google Chrome:</strong> <em>Ctrl-Shift-R</em> नोदनेन पुनरारोपणं भवति । (<em>⌘-R</em> इति Mac तन्त्रांशप्रयोक्तॄभ्यः)\n* <strong>Internet Explorer:</strong> <em>Ctrl</em>कुड्मलेन सह <em>Refresh</em>कुड्मलं नुदतु, <em>Ctrl-F5</em> नुदतु वा ।\n* <strong>Opera:</strong> <em>Tools → Preferences</em> इत्यत्र गत्वा कर्तुं शक्नोति ।",
        "usercssyoucanpreview": "'''सूचना :''' CSS नवीनलिप्याः संरक्षणं करणात् प्राक् एतत् \"{{int:showpreview}}\" नुद्य प्रयोगं करोतु ।",
        "userjsyoucanpreview": "'''सूचना :''' JavaScript नवीनलिप्याः संरक्षणं करणात् प्राक् एतत् \"{{int:showpreview}}\" नुद्य प्रयोगं करोतु ।",
        "userjspreview": "<strong>एतत् केवलं योजकस्य JabaScript इत्यस्य प्राग्दृश्यं वर्तते इति स्मरतु । भवता/भवत्या कृतानि परिवर्तनानि एतवता न रक्षितानि !</strong>",
        "sitecsspreview": "<strong>एतत् केवलं CSS इत्यस्य प्राग्दृश्यं वर्तते इति स्मरतु । भवता/भवत्या कृतानि परिवर्तनानि एतवता न रक्षितानि !</strong>",
        "sitejspreview": "<strong>एतत् केवलं JavaScript इत्यस्य प्राग्दृश्यं वर्तते इति स्मरतु । भवता/भवत्या कृतानि परिवर्तनानि एतवता न रक्षितानि !</strong>",
-       "userinvalidcssjstitle": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना:'''  \"$1\" à¤\87ति à¤¤à¥\8dवà¤\95à¥\8d à¤¨ à¤µà¤¿à¤¦à¥\8dयतà¥\87।\nयà¥\8bà¤\9cà¤\95परिवरà¥\8dतितà¥\87 .css, .js à¤¸à¤\9eà¥\8dà¤\9aिà¤\95à¥\87 à¤²à¤\98à¥\81-à¤\86à¤\99à¥\8dà¤\97ावर्णमालायाः वर्णैः लिख्येते । उदा. {{ns:user}}:Foo/Vector.css एवं न लेखनीयम् । लघुवर्णैः {{ns:user}}:Foo/vector.css एवं लेखनीयम् ।",
+       "userinvalidcssjstitle": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना:'''  \"$1\" à¤\87ति à¤¤à¥\8dवà¤\95à¥\8d à¤¨ à¤µà¤¿à¤¦à¥\8dयतà¥\87।\nयà¥\8bà¤\9cà¤\95परिवरà¥\8dतितà¥\87 .css, .js à¤¸à¤\9eà¥\8dà¤\9aिà¤\95à¥\87 à¤²à¤\98à¥\81-à¤\86à¤\99à¥\8dà¤\97à¥\8dलवर्णमालायाः वर्णैः लिख्येते । उदा. {{ns:user}}:Foo/Vector.css एवं न लेखनीयम् । लघुवर्णैः {{ns:user}}:Foo/vector.css एवं लेखनीयम् ।",
        "updated": "(नवीकृतम् (updated))",
        "note": "'''सूचना:'''",
        "previewnote": "<strong>एतत् केवलं प्राग्दृश्यं वर्तते इति स्मरतु । भवता/भवत्या कृतानि परिवर्तनानि एतवता न रक्षितानि !</strong>",
        "continue-editing": "सम्पादनविभागं गम्यताम्",
        "previewconflict": "एतत् पृष्ठं यदि भवान्/भवती रक्षिष्यति, तर्हि अत्र प्राग्दृश्ये यथा दृश्यते, तथैव रक्षितं भविष्यति ।",
        "session_fail_preview": "'''क्षम्यताम् ! प्रवेशसूचनायाः लोपत्वात् भवता/भवत्या कृतानि परिवर्तनानि रक्षितुं वयं न अशक्नुम ।\nअधुनापि यदि सा एव समस्या अस्ति, तर्हि [[Special:UserLogout|निर्गमनं कृत्वा]] पुनः प्रविश्यताम् ।",
-       "session_fail_preview_html": "'''à¤\95à¥\8dषमà¥\8dयतामà¥\8d ! à¤ªà¥\8dरवà¥\87शसà¥\82à¤\9aनायाà¤\83 à¤²à¥\8bपतà¥\8dवातà¥\8d à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤\95à¥\83तानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤°à¤\95à¥\8dषितà¥\81à¤\82 à¤µà¤¯à¤\82 à¤¨ à¤\85शà¤\95à¥\8dनà¥\81म à¥¤\n\n<em>à¤\95ारणà¤\82 {{SITENAME}} à¤\87तà¥\8dयतà¥\8dर à¤®à¥\82ल-HTML-समरà¥\8dथितà¤\82 à¤­à¤µà¤¤à¤¿ à¥¤ à¤\85तà¤\83 JavaScript à¤\87तà¥\8dयसà¥\8dमातà¥\8d à¤°à¤\95à¥\8dषितà¥\81à¤\82 à¤ªà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयà¤\82 à¤¨à¤¿à¤\97à¥\82ढà¤\82 à¤­à¤µà¤¤à¤¿ à¥¤</em>\n\n<strong>भवता/भवतà¥\8dया à¤\95à¥\83तà¤\82 à¤¸à¤®à¥\8dपादनà¤\82 à¤¯à¤¦à¤¿ à¤\89à¤\9aितमसà¥\8dति, à¤¤à¤°à¥\8dहि à¤ªà¥\81नà¤\83 à¤ªà¥\8dरयासà¤\82 à¤\95रà¥\8bतà¥\81 ।</strong>\n\nअधुनापि यदि सा एव समस्या अस्ति, तर्हि [[Special:UserLogout|निर्गमनं कृत्वा]] पुनः प्रविश्यताम् ।",
-       "token_suffix_mismatch": "'''भवता/भवतà¥\8dया à¤\95à¥\83तानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¨à¤¿à¤°à¤¸à¥\8dतानि à¤\95à¥\83तानि à¥¤ à¤\95राणà¤\82 भवतः/भवत्याः गवेषकेन (browser) सम्पादने कानिचन विरामचिह्नानि अस्तव्यस्तकृतानि ।'''\nलेखस्य पाठः असंस्कृतः न स्यात्, अतः भवतः/भवत्याः परिवर्तनानि निरस्तीकृतानि ।\nअयोग्यप्रतिनिधेः (proxy server) उपयोगेनापि कुत्रचित् एतादृशं भवति ।",
+       "session_fail_preview_html": "'''à¤\95à¥\8dषमà¥\8dयतामà¥\8d ! à¤ªà¥\8dरवà¥\87शसà¥\82à¤\9aनायाà¤\83 à¤²à¥\8bपतà¥\8dवातà¥\8d à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤\95à¥\83तानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤°à¤\95à¥\8dषितà¥\81à¤\82 à¤µà¤¯à¤\82 à¤¨ à¤¶à¤\95à¥\8dतवनà¥\8dतà¤\83 à¥¤\n\n<em>à¤\95ारणà¤\82 {{SITENAME}} à¤\87तà¥\8dयतà¥\8dर à¤®à¥\82ल-HTML-समरà¥\8dथितà¤\82 à¤­à¤µà¤¤à¤¿ à¥¤ à¤\85तà¤\83 JavaScript à¤\87तà¥\8dयसà¥\8dमातà¥\8d à¤°à¤\95à¥\8dषितà¥\81à¤\82 à¤ªà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयà¤\82 à¤¨à¤¿à¤\97à¥\82हितà¤\82 à¤­à¤µà¤¤à¤¿ à¥¤</em>\n\n<strong>भवता/भवतà¥\8dया à¤\95à¥\83तà¤\82 à¤¸à¤®à¥\8dपादनà¤\82 à¤¯à¤¦à¤¿ à¤\89à¤\9aितमसà¥\8dति, à¤¤à¤°à¥\8dहि à¤ªà¥\81नà¤\83 à¤ªà¥\8dरयतà¥\8dयतामà¥\8d ।</strong>\n\nअधुनापि यदि सा एव समस्या अस्ति, तर्हि [[Special:UserLogout|निर्गमनं कृत्वा]] पुनः प्रविश्यताम् ।",
+       "token_suffix_mismatch": "'''भवता/भवतà¥\8dया à¤\95à¥\83तानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¨à¤¿à¤°à¤¸à¥\8dतानि à¤\95à¥\83तानि à¥¤ à¤¯à¤¤à¤\83 भवतः/भवत्याः गवेषकेन (browser) सम्पादने कानिचन विरामचिह्नानि अस्तव्यस्तकृतानि ।'''\nलेखस्य पाठः असंस्कृतः न स्यात्, अतः भवतः/भवत्याः परिवर्तनानि निरस्तीकृतानि ।\nअयोग्यप्रतिनिधेः (proxy server) उपयोगेनापि कुत्रचित् एतादृशं भवति ।",
        "edit_form_incomplete": "'''सम्पादनस्य कतिचनांशाः वितरके (server) न रक्षिताः । भवता/भवत्या कृतानि सम्पादनानि योग्यानि चेत् पुनः प्रयतताम् ।'''",
        "editing": "$1 सम्पाद्यते",
        "creating": "$1 सृज्यते",
        "yourtext": "भवतः/भवत्याः पाठः",
        "storedversion": "रक्षितसंस्करणम्",
        "nonunicodebrowser": "<strong>पूर्वसूचना : भवतः/भवत्याः गवेषकं (browser) Unicode न समर्थयति ।</strong>\nअत्र भवान्/भवती योग्यरीत्या सम्पादनं कर्तुं शक्ष्यति :\nये वर्णाः ASCII कूटे न भविष्यन्ति, ते hexadecimal वर्णत्वेन प्रदर्शयन्ते ।",
-       "editingold": "<strong>पà¥\82रà¥\8dवसà¥\82à¤\9aना : à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\95ालातà¥\80त-à¤\86वà¥\83तà¥\8dतिà¤\82 à¤¸à¤®à¤¾à¤¦à¥\8dयतà¥\87 à¥¤ </strong>\nà¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤¯à¤¦à¤¿ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤°à¤\95à¥\8dषिषà¥\8dयति, à¤¤à¤°à¥\8dहि à¤¸à¤¦à¥\8dयà¤\83 à¤\86वà¥\83तà¥\8dति-तà¤\83 à¤ªà¥\81रा à¤¯à¤¾à¤¨à¤¿ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤\86सनà¥\8d, à¤¤à¤¾à¤¨à¤¿ à¤¨à¤¶à¤¿ष्यन्ति ।",
+       "editingold": "<strong>पà¥\82रà¥\8dवसà¥\82à¤\9aना : à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\95ालातà¥\80त-à¤\86वà¥\83तà¥\8dतिà¤\82 à¤¸à¤®à¤¾à¤¦à¥\8dयतà¥\87 à¥¤ </strong>\nà¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤¯à¤¦à¤¿ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤°à¤\95à¥\8dषिषà¥\8dयति, à¤¤à¤°à¥\8dहि à¤¸à¤¦à¥\8dयà¤\83 à¤\86वà¥\83तà¥\8dति-तà¤\83 à¤ªà¥\81रा à¤¯à¤¾à¤¨à¤¿ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤\86सनà¥\8d, à¤¤à¤¾à¤¨à¤¿ à¤¨à¤\99à¥\8dà¤\95à¥\8dष्यन्ति ।",
        "yourdiff": "भेदाः",
-       "copyrightwarning": "à¤\95à¥\83पया à¤§à¥\8dयानà¤\82 à¤¦à¤¦à¤¾à¤¤à¥\81 à¤¯à¤¤à¥\8d, {{SITENAME}} à¤\87तà¥\8dयतà¥\8dर à¤\95à¥\83तानि à¤¸à¤°à¥\8dवाणि à¤¯à¥\8bà¤\97दानानि $2 à¤\87तà¥\8dयसà¥\8dय à¤¨à¤¿à¤¯à¤¨à¤¾à¤¨à¥\81सारà¤\82 à¤­à¤µà¤¿à¤·à¥\8dयनà¥\8dति à¥¤ (विसà¥\8dतारà¥\87ण à¤\9cà¥\8dà¤\9eातà¥\81à¤\82 $1 à¤\85तà¥\8dर à¤¨à¥\81दतà¥\81)\nभवानà¥\8d/भवतà¥\80 à¤¸à¥\8dवसà¥\8dय à¤¯à¥\8bà¤\97दानà¥\87षà¥\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन-पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन-à¤\86दिनि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¤\9aà¥\87तà¥\8d, à¤\85तà¥\8dर à¤¯à¥\8bà¤\97दानà¤\82 à¤®à¤¾ à¤\95रà¥\8bतà¥\81 à¥¤ (à¤\85तà¥\8dर à¤¤à¥\81 à¤²à¤¿à¤\96ितà¥\87 à¤¨à¤¿à¤°à¤¨à¥\8dतरà¤\82 à¤ªà¤¿à¤°à¤µà¤°à¥\8dतनà¤\82 à¤­à¤µà¤¤à¥\8dयà¥\87व à¤\87ति à¤­à¤¾à¤µà¤\83)\n<br />\n\nà¤\85सà¥\8dमभà¥\8dयà¤\82 à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤ªà¥\8dरतिà¤\9cà¥\8dà¤\9eा à¤\95रà¥\8dतवà¥\8dया à¤¯à¤¤à¥\8d, \"à¤\85तà¥\8dर à¤¯à¤¤à¥\8dà¤\95िमपि à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤²à¥\87à¤\96िषà¥\8dयति, à¤¤à¤¤à¥\8d à¤¸à¤°à¥\8dवà¤\82 à¤¸à¥\8dवरà¤\9aितà¤\82, à¤¸à¤¾à¤°à¥\8dवà¤\9cनà¥\80à¤\95à¤\82 à¤\9a à¤­à¤µà¤¿à¤·à¥\8dयति à¥¤ à¤\95à¥\81तसà¥\8dमातà¥\8d à¤¸à¥\8dथानातà¥\8d à¤ªà¥\8dरतिलिपिà¤\95à¥\83तमà¥\8d à¤\85पि à¤¸à¤¾à¤°à¥\8dवà¤\9cनà¥\80à¤\95मà¥\87व à¤¸à¥\8dयातà¥\8d\" à¤\87ति à¥¤ \n<strong>à¤\85नà¥\8dयसà¥\8dय à¤¸à¤°à¥\8dवाधिà¤\95ारानà¥\8dतरà¥\8dà¤\97तà¤\82 (copyright) à¤¯à¤¤à¥\8d à¤­à¤µà¤¤à¤¿, à¤¤à¤¤à¥\8d à¤µà¤¿à¤¨à¤¾ à¤\85नà¥\81मतà¥\8dया à¤\85तà¥\8dर à¤²à¤¿à¤\96तुं न शक्यते ।</strong>",
-       "copyrightwarning2": "à¤\95à¥\83पया à¤§à¥\8dयानà¤\82 à¤¦à¤¦à¤¾à¤¤à¥\81 à¤¯à¤¤à¥\8d, {{SITENAME}} à¤\87तà¥\8dयतà¥\8dर à¤\95à¥\83तानि à¤¸à¤°à¥\8dवाणि à¤¯à¥\8bà¤\97दानानि à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\88à¤\83 à¤¸à¤®à¥\8dपादयितà¥\81à¤\82, à¤ªà¤°à¤¿à¤°à¥\8dवतितà¥\81à¤\82, à¤¨à¤¿à¤·à¥\8dà¤\95ाशयितà¥\81à¤\82 à¤\9a à¤¶à¤\95à¥\8dयनà¥\8dतà¥\87 à¥¤ \nभवानà¥\8d/भवतà¥\80 à¤¸à¥\8dवसà¥\8dय à¤¯à¥\8bà¤\97दानà¥\87षà¥\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन-पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन-à¤\86दिनि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¤\9aà¥\87तà¥\8d, à¤\85तà¥\8dर à¤¯à¥\8bà¤\97दानà¤\82 à¤®à¤¾ à¤\95रà¥\8bतà¥\81 à¥¤ (à¤\85तà¥\8dर à¤¤à¥\81 à¤²à¤¿à¤\96ितà¥\87 à¤¨à¤¿à¤°à¤¨à¥\8dतरà¤\82 à¤ªà¤¿à¤°à¤µà¤°à¥\8dतनà¤\82 à¤­à¤µà¤¤à¥\8dयà¥\87व à¤\87ति à¤­à¤¾à¤µà¤\83)\n<br />\n\nà¤\85सà¥\8dमभà¥\8dयà¤\82 à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤ªà¥\8dरतिà¤\9cà¥\8dà¤\9eा à¤\95रà¥\8dतवà¥\8dया à¤¯à¤¤à¥\8d, \"à¤\85तà¥\8dर à¤¯à¤¤à¥\8dà¤\95िमपि à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤²à¥\87à¤\96िषà¥\8dयति, à¤¤à¤¤à¥\8d à¤¸à¤°à¥\8dवà¤\82 à¤¸à¥\8dवरà¤\9aितà¤\82, à¤¸à¤¾à¤°à¥\8dवà¤\9cनà¥\80à¤\95à¤\82 à¤\9a à¤­à¤µà¤¿à¤·à¥\8dयति à¥¤ à¤\95à¥\81तसà¥\8dमातà¥\8d à¤¸à¥\8dथानातà¥\8d à¤ªà¥\8dरतिलिपिà¤\95à¥\83तमà¥\8d à¤\85पि à¤¸à¤¾à¤°à¥\8dवà¤\9cनà¥\80à¤\95मà¥\87व à¤¸à¥\8dयातà¥\8d\" à¤\87ति à¥¤ \n<strong>à¤\85नà¥\8dयसà¥\8dय à¤¸à¤°à¥\8dवाधिà¤\95ारानà¥\8dतरà¥\8dà¤\97तà¤\82 (copyright) à¤¯à¤¤à¥\8d à¤­à¤µà¤¤à¤¿, à¤¤à¤¤à¥\8d à¤µà¤¿à¤¨à¤¾ à¤\85नà¥\81मतà¥\8dया à¤\85तà¥\8dर à¤²à¤¿à¤\96तुं न शक्यते ।</strong>",
+       "copyrightwarning": "à¤\95à¥\83पया à¤§à¥\8dयानà¤\82 à¤¦à¤¦à¤¾à¤¤à¥\81 à¤¯à¤¤à¥\8d, {{SITENAME}} à¤\87तà¥\8dयतà¥\8dर à¤\95à¥\83तानि à¤¸à¤°à¥\8dवाणि à¤¯à¥\8bà¤\97दानानि $2 à¤\87तà¥\8dयसà¥\8dय à¤¨à¤¿à¤¯à¤¨à¤¾à¤¨à¥\81सारà¤\82 à¤­à¤µà¤¿à¤·à¥\8dयनà¥\8dति à¥¤ (विसà¥\8dतारà¥\87ण à¤\9cà¥\8dà¤\9eातà¥\81à¤\82 $1 à¤\85तà¥\8dर à¤¨à¥\81दतà¥\81)\nभवानà¥\8d/भवतà¥\80 à¤¸à¥\8dवसà¥\8dय à¤¯à¥\8bà¤\97दानà¥\87षà¥\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन-पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन-à¤\86दà¥\80नि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¤\9aà¥\87तà¥\8d, à¤\85तà¥\8dर à¤¯à¥\8bà¤\97दानà¤\82 à¤®à¤¾ à¤\95रà¥\8bतà¥\81 à¥¤ (à¤\85तà¥\8dर à¤¤à¥\81 à¤²à¤¿à¤\96ितà¥\87 à¤¨à¤¿à¤°à¤¨à¥\8dतरà¤\82 à¤ªà¤¿à¤°à¤µà¤°à¥\8dतनà¤\82 à¤­à¤µà¤¤à¥\8dयà¥\87व à¤\87ति à¤­à¤¾à¤µà¤\83)\n<br />\n\nà¤\85सà¥\8dमभà¥\8dयà¤\82 à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤ªà¥\8dरतिà¤\9cà¥\8dà¤\9eा à¤\95रà¥\8dतवà¥\8dया à¤¯à¤¤à¥\8d, \"à¤\85तà¥\8dर à¤¯à¤¤à¥\8dà¤\95िमपि à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤²à¥\87à¤\96िषà¥\8dयति, à¤¤à¤¤à¥\8d à¤¸à¤°à¥\8dवà¤\82 à¤¸à¥\8dवरà¤\9aितà¤\82, à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95à¤\82 à¤\9a à¤­à¤µà¤¿à¤·à¥\8dयति à¥¤ à¤\95à¥\81तशà¥\8dà¤\9aितà¥\8d à¤¸à¥\8dथानातà¥\8d à¤ªà¥\8dरतिलिपिà¤\95à¥\83तमà¥\8d à¤\85पि à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95मà¥\87व à¤¸à¥\8dयातà¥\8d\" à¤\87ति à¥¤ \n<strong>à¤\85नà¥\8dयसà¥\8dय à¤¸à¤°à¥\8dवाधिà¤\95ारानà¥\8dतरà¥\8dà¤\97तà¤\82 (copyright) à¤¯à¤¤à¥\8d à¤­à¤µà¤¤à¤¿, à¤¤à¤¤à¥\8d à¤µà¤¿à¤¨à¤¾ à¤\85नà¥\81मतà¥\8dया à¤\85तà¥\8dर à¤²à¥\87à¤\96ितुं न शक्यते ।</strong>",
+       "copyrightwarning2": "à¤\95à¥\83पया à¤§à¥\8dयानà¤\82 à¤¦à¤¦à¤¾à¤¤à¥\81 à¤¯à¤¤à¥\8d, {{SITENAME}} à¤\87तà¥\8dयतà¥\8dर à¤\95à¥\83तानि à¤¸à¤°à¥\8dवाणि à¤¯à¥\8bà¤\97दानानि à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\88à¤\83 à¤¸à¤®à¥\8dपादयितà¥\81à¤\82, à¤ªà¤°à¤¿à¤°à¥\8dवतितà¥\81à¤\82, à¤¨à¤¿à¤·à¥\8dà¤\95ासयितà¥\81à¤\82 à¤\9a à¤¶à¤\95à¥\8dयनà¥\8dतà¥\87 à¥¤ \nभवानà¥\8d/भवतà¥\80 à¤¸à¥\8dवसà¥\8dय à¤¯à¥\8bà¤\97दानà¥\87षà¥\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन-पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन-à¤\86दà¥\80नि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¤\9aà¥\87तà¥\8d, à¤\85तà¥\8dर à¤¯à¥\8bà¤\97दानà¤\82 à¤®à¤¾ à¤\95रà¥\8bतà¥\81 à¥¤ (à¤\85तà¥\8dर à¤¤à¥\81 à¤²à¤¿à¤\96ितà¥\87 à¤¸à¤¤à¤¿ à¤¨à¤¿à¤°à¤¨à¥\8dतरà¤\82 à¤ªà¤¿à¤°à¤µà¤°à¥\8dतनà¤\82 à¤­à¤µà¤¤à¥\8dयà¥\87व à¤\87ति à¤­à¤¾à¤µà¤\83)\n<br />\n\nभवता/भवतà¥\8dया à¤\85सà¥\8dमभà¥\8dयà¤\82 à¤ªà¥\8dरतिà¤\9cà¥\8dà¤\9eा à¤\95रà¥\8dतवà¥\8dया à¤¯à¤¤à¥\8d, \"à¤\85तà¥\8dर à¤¯à¤¤à¥\8dà¤\95िमपि à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤²à¥\87à¤\96िषà¥\8dयति, à¤¤à¤¤à¥\8d à¤¸à¤°à¥\8dवà¤\82 à¤¸à¥\8dवरà¤\9aितà¤\82, à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95à¤\82 à¤\9a à¤­à¤µà¤¿à¤·à¥\8dयति à¥¤ à¤\95à¥\81तशà¥\8dà¤\9aितà¥\8d à¤¸à¥\8dथानातà¥\8d à¤ªà¥\8dरतिलिपà¥\80à¤\95à¥\83तमà¥\8d à¤\85पि à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95मà¥\87व à¤¸à¥\8dयातà¥\8d\" à¤\87ति à¥¤ (à¤\85धिà¤\95à¤\82 à¤\9cà¥\8dà¤\9eातमà¥\8d $1 à¤\8fततà¥\8d à¤ªà¤¶à¥\8dयतà¥\81)\n<strong>à¤\85नà¥\8dयसà¥\8dय à¤¸à¤°à¥\8dवाधिà¤\95ारानà¥\8dतरà¥\8dà¤\97तà¤\82 (copyright) à¤¯à¤¤à¥\8d à¤­à¤µà¤¤à¤¿, à¤¤à¤¤à¥\8d à¤µà¤¿à¤¨à¤¾ à¤\85नà¥\81मतà¥\8dया à¤\85तà¥\8dर à¤²à¥\87à¤\96ितुं न शक्यते ।</strong>",
        "longpageerror": "<strong>दोषः : भवता/भवत्या लिखितः पाठः  {{PLURAL:$1|सहाष्टकं|$1 सहाष्टकानि}} दीर्घः अस्ति । एषः पाठः बृह्त्तमसीमया अपेक्षया {{PLURAL:$2|सहाष्टकं|$2 सहाष्टकानि}} दीर्घः अस्ति ।(सहस्राष्टकानि (kilobytes) इत्यस्य सङ्क्षेपः सहाष्टकम्)</strong>\nएतत् रक्षितुं न शक्यते ।",
        "readonlywarning": "<strong>पूर्वसूचना : दत्तांशः (database) किलितः अस्ति । अतः अधुना भवान्/भवती स्वस्य सम्पादनं रक्षितुं न शक्नोति ।</strong>\nस्वस्य परिवर्तितस्य लेखस्य .txt .doc वा सञ्चिकां निर्माय किञ्चित् कालानन्तरं रक्षतु । \nदत्तांश-किलनस्य कारणं प्रबन्धकेन दत्तं यत्, : $1",
-       "protectedpagewarning": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना : à¤ªà¥\83षà¥\8dठमà¥\87ततà¥\8d à¤¸à¤\82रà¤\95à¥\8dषितà¤\82 à¤µà¤°à¥\8dततà¥\87 à¥¤ à¤\85तà¤\83 à¤\95à¥\87वलà¤\82 à¤ªà¥\8dरबनà¥\8dधà¤\95ाà¤\83 à¤\85तà¥\8dर à¤¸à¤®à¥\8dपादनà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\81वनà¥\8dति à¥¤'''\n\nसदà¥\8dयà¤\83à¤\95ालà¥\80ना à¤¸à¤\82रà¤\95à¥\8dषितावलिà¤\83 (log) अधः दत्ता अस्ति :",
-       "semiprotectedpagewarning": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना : à¤ªà¥\83षà¥\8dठमà¥\87ततà¥\8d à¤¸à¤\82रà¤\95à¥\8dषितà¤\82 à¤µà¤°à¥\8dततà¥\87 à¥¤ à¤\85तà¤\83 à¤\95à¥\87वलà¤\82 à¤ªà¤\9eà¥\8dà¤\9cिà¤\95à¥\83तयà¥\8bà¤\9cà¤\95ाà¤\83 à¤\85तà¥\8dर à¤¸à¤®à¥\8dपादनà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\81वनà¥\8dति à¥¤'''\n\nसदà¥\8dयà¤\83à¤\95ालà¥\80ना à¤¸à¤\82रà¤\95à¥\8dषितावलिà¤\83 (log) अधः दत्ता अस्ति :",
+       "protectedpagewarning": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना : à¤ªà¥\83षà¥\8dठमà¥\87ततà¥\8d à¤¸à¤\82रà¤\95à¥\8dषितà¤\82 à¤µà¤°à¥\8dततà¥\87 à¥¤ à¤\85तà¤\83 à¤\95à¥\87वलà¤\82 à¤ªà¥\8dरबनà¥\8dधà¤\95ाà¤\83 à¤\85तà¥\8dर à¤¸à¤®à¥\8dपादनà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\81वनà¥\8dति à¥¤'''\n\nसदà¥\8dयà¤\83à¤\95ालà¥\80ना à¤¸à¤\82रà¤\95à¥\8dषिताऽऽवलà¥\8dयाà¤\83 (log) à¤ªà¥\8dरविषà¥\8dà¤\9fिà¤\83 अधः दत्ता अस्ति :",
+       "semiprotectedpagewarning": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना : à¤ªà¥\83षà¥\8dठमà¥\87ततà¥\8d à¤¸à¤\82रà¤\95à¥\8dषितà¤\82 à¤µà¤°à¥\8dततà¥\87 à¥¤ à¤\85तà¤\83 à¤\95à¥\87वलà¤\82 à¤ªà¤\9eà¥\8dà¤\9cà¥\80à¤\95à¥\83तयà¥\8bà¤\9cà¤\95ाà¤\83 à¤\85तà¥\8dर à¤¸à¤®à¥\8dपादनà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\81वनà¥\8dति à¥¤'''\n\nसदà¥\8dयà¤\83à¤\95ालà¥\80ना à¤¸à¤\82रà¤\95à¥\8dषिताऽऽवलà¥\8dयाà¤\83 (log) à¤ªà¥\8dरविषà¥\8dà¤\9fिà¤\83 अधः दत्ता अस्ति :",
        "cascadeprotectedwarning": "'''पूर्वसूचना :''' पृष्ठमेतत् संरक्षितं वर्तते । अतः केवलं प्रबन्धकाः अत्र सम्पादनं कर्तुं शक्नुवन्ति ।\nनिम्ननियमान्तर्गतम् एतत्{{PLURAL:$1|पृष्ठं रक्षितं|पृष्ठानि रक्षितानि}}:",
-       "titleprotectedwarning": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना : à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¤\82रà¤\95à¥\8dषितमà¥\8d à¤\85सà¥\8dति à¥¤ à¤\85तà¤\83 à¤\85सà¥\8dय à¤¸à¤®à¥\8dपादनà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 [[Special:ListGroupRights|विशà¥\87षाधिà¤\95ारà¤\83]] à¤\85पà¥\87à¤\95à¥\8dषà¥\8dयतà¥\87 à¥¤'''\nसदà¥\8dयà¤\83à¤\95ालà¥\80ना à¤¸à¤\82रà¤\95à¥\8dषितावलिà¤\83 (log) अधः दत्ता अस्ति :",
+       "titleprotectedwarning": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना : à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¤\82रà¤\95à¥\8dषितमà¥\8d à¤\85सà¥\8dति à¥¤ à¤\85तà¤\83 à¤\85सà¥\8dय à¤¸à¤®à¥\8dपादनà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 [[Special:ListGroupRights|विशà¥\87षाधिà¤\95ारà¤\83]] à¤\85पà¥\87à¤\95à¥\8dषà¥\8dयतà¥\87 à¥¤'''\nसदà¥\8dयà¤\83à¤\95ालà¥\80ना à¤¸à¤\82रà¤\95à¥\8dषिताऽऽवलà¥\8dयाà¤\83 (log) à¤ªà¥\8dरविषà¥\8dà¤\9fिà¤\83 (Entry) अधः दत्ता अस्ति :",
        "templatesused": "अस्मिन् पृष्ठे प्रयुक्त{{PLURAL:$1|फलकम्|फलकानि}}:",
        "templatesusedpreview": "अस्मिन् प्राग्दृश्ये प्रयुक्त{{PLURAL:$1|फलकम्|फलकानि}}:",
        "templatesusedsection": "अस्मिन् विभागे प्रयुक्त{{PLURAL:$1|फलकम्|फलकानि}}:",
        "template-protected": "(संरक्षितम्)",
        "template-semiprotected": "अर्धसंरक्षितम्",
-       "hiddencategories": "à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 {{PLURAL:$1|1 à¤¨à¤¿à¤\97à¥\82ढà¥\87 à¤µà¤°à¥\8dà¤\97à¥\87 |$1 à¤¨à¤¿à¤\97à¥\82ढेषु वर्गेषु}} अन्तर्भवति :",
-       "nocreatetext": "{{SITENAME}} जालस्थानेऽस्मिन् नवीनपृष्ठनिर्मातुम् अनुमतिः न विद्यते ।\nभवान्/भवती प्रतिगत्वा विद्यमानं पृष्ठं सम्पादयतु शक्नोति ।  सम्पादयितुं [[Special:UserLogin|प्रविश्यताम् सदस्यता प्राप्यताम् वा]].",
-       "nocreate-loggedin": "भवतः/भवत्याः पार्श्वे नवीनपृष्ठं रचितुम् अनुमतिः नास्ति ।",
+       "hiddencategories": "à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 {{PLURAL:$1|1 à¤¨à¤¿à¤\97à¥\82हितà¥\87 à¤µà¤°à¥\8dà¤\97à¥\87 |$1 à¤¨à¤¿à¤\97à¥\82हितेषु वर्गेषु}} अन्तर्भवति :",
+       "nocreatetext": "{{SITENAME}} जालस्थानेऽस्मिन् नवीनपृष्ठनिर्मातुम् अनुमतिः न विद्यते ।\nभवान्/भवती प्रति गत्वा विद्यमानं पृष्ठं सम्पादयितुं शक्नोति ।  सम्पादयितुं [[Special:UserLogin|प्रविश्यताम् उत सदस्यता प्राप्यताम्]].",
+       "nocreate-loggedin": "भवतà¤\83/भवतà¥\8dयाà¤\83 à¤ªà¤¾à¤°à¥\8dशà¥\8dवà¥\87 à¤¨à¤µà¥\80नपà¥\83षà¥\8dठà¤\82 à¤°à¤\9aयितà¥\81मà¥\8d à¤\85नà¥\81मतिà¤\83 à¤¨à¤¾à¤¸à¥\8dति à¥¤",
        "sectioneditnotsupported-title": "विभागस्य सम्पादनं शक्यं नास्ति",
        "sectioneditnotsupported-text": "पृष्ठेऽस्मिन् विभागसम्पादनं शक्यं नास्ति ।",
        "permissionserrors": "अनुमतिदोषः",
-       "permissionserrorstext": "एतत् कर्तुं भवतः/भवत्याः पार्श्वे अनुमति नास्ति, निम्न{{PLURAL:$1|कारणम्|कारणानि}}:",
+       "permissionserrorstext": "एतत् कर्तुं भवतः/भवत्याः पार्श्वे अनुमति नास्ति, निम्न{{PLURAL:$1|कारणम्|कारणानि}}:",
        "permissionserrorstext-withaction": "$1 निम्नकारणत्वात्  $2 सम्पादनस्य अनुमतिः नास्ति ।\n{{PLURAL:$1|कारणम्|कारणानि}}:",
-       "recreate-moveddeleted-warn": "'''पूर्वसूचना: पूर्वम् अपाकृतं पृष्टं भवता रच्यमानम् अस्ति ।'''\nअस्य पृष्ठस्य सम्पादनं करणात् प्राक् गभीरतया चिन्तनं करोतु ।\nअस्य पृष्ठस्य निर्माणं न्यायसङ्गतम् इति भवतः/भवत्याः मतमस्ति चेत्, अत्र परिवर्तनं करोतु । सौकर्यार्थं पृष्ठ-अपाकरणस्य प्राक्तनसम्पादनस्य आवलिः अत्र दीयते ।",
+       "recreate-moveddeleted-warn": "'''पूर्वसूचना : पूर्वम् अपाकृतं पृष्टं भवता रच्यमानम् अस्ति ।'''\nअस्य पृष्ठस्य सम्पादनं करणात् प्राक् गभीरतया चिन्तनं करोतु ।\nअस्य पृष्ठस्य निर्माणं न्यायसङ्गतम् इति भवतः/भवत्याः मतमस्ति चेत्, अत्र परिवर्तनं करोतु । सौकर्यार्थं पृष्ठ-अपाकरणस्य प्राक्तनसम्पादनस्य आवलिः अत्र दीयते ।",
        "moveddeleted-notice": "इदं पृष्ठम् अपाकृतम् अस्ति।\nअस्य अपाकरणस्य, स्थानान्तरणस्य च विवरणम् अधः प्रदत्तम् ।",
-       "log-fulllog": "पà¥\82रà¥\8dणसà¤\82रà¤\95à¥\8dषितावलिà¤\82 दृश्यताम्",
+       "log-fulllog": "पà¥\82रà¥\8dणसà¤\82रà¤\95à¥\8dषितावलिà¤\83 दृश्यताम्",
        "edit-hook-aborted": "hook द्वारा सम्पादनक्रिया मध्ये एव स्थगिता । स्थगनस्य कारणं न दत्तम् ।",
        "edit-gone-missing": "अस्मिन् पृष्ठे परिवर्तनं नाभूत् ।\nएतत् पृष्ठं पुरा एव केनापि अपाकृतम् इति भाति ।",
        "edit-conflict": "सम्पादनयोः अन्तर्विरोधः ।",
        "edit-no-change": "भवता/भवत्या कृतं सम्पादम् अवगणितम् । कारणं लेखे न किमपि परिवर्तनं जातमस्ति ।",
        "postedit-confirmation-created": "नूतनपृष्ठस्य रचना अभवत् ।",
-       "postedit-confirmation-restored": "à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤ªà¥\81नà¤\83 à¤¸à¤\99à¥\8dà¤\97à¥\8dरहितम् ।",
+       "postedit-confirmation-restored": "à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤ªà¥\81नà¤\83 à¤¸à¤\99à¥\8dà¤\97à¥\83हà¥\80तम् ।",
        "postedit-confirmation-saved": "सम्पादनं रक्षितम् ।",
        "edit-already-exists": "नूतनपृष्ठस्य निर्माणं नाभूत् ।\nपूर्वस्मादेव एतत् पृष्ठं विद्यते ।",
        "defaultmessagetext": "मूलसन्देशः",
        "content-failed-to-parse": "$1 कृते $2 इत्यस्य विभाजनं विफलम् अभवत् । दोषः : $3",
        "invalid-content-data": "अयोग्यः लेखः",
        "content-not-allowed-here": "[[$2]] पृष्ठे \"$1\" सामग्री स्थापितुम् अनुमतिः नास्ति",
-       "editwarning-warning": "à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤¤à¥\8dयà¤\95à¥\8dतवा à¤¯à¤¦à¤¿ à¤\97मिषà¥\8dयति, à¤¤à¤°à¥\8dहि à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤\95à¥\83तसà¥\8dय à¤¸à¤®à¥\8dपादनसà¥\8dय à¤°à¤\95à¥\8dषणà¤\82 à¤¨ à¤­à¤µà¤¿à¤·à¥\8dयति à¥¤\n\nभवता/भवतà¥\8dया à¤¯à¤¦à¤¿ à¤ªà¥\8dरवà¥\87शà¤\83 à¤ªà¥\8dरापà¥\8dतà¤\83 à¤\85सà¥\8dति, à¤¤à¤°à¥\8dहि à¤\8fषा à¤¸à¥\82à¤\9aना à¤\85तà¥\8dर \"{{int:prefs-editing}}\" à¤¨à¤¿à¤\97à¥\82ढितुं शक्यते ।",
+       "editwarning-warning": "à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤¤à¥\8dयà¤\95à¥\8dतà¥\8dवा à¤¯à¤¦à¤¿ à¤\97मिषà¥\8dयति, à¤¤à¤°à¥\8dहि à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤\95à¥\83तसà¥\8dय à¤¸à¤®à¥\8dपादनसà¥\8dय à¤°à¤\95à¥\8dषणà¤\82 à¤¨ à¤­à¤µà¤¿à¤·à¥\8dयति à¥¤\n\nभवता/भवतà¥\8dया à¤¯à¤¦à¤¿ à¤ªà¥\8dरवà¥\87शà¤\83 à¤ªà¥\8dरापà¥\8dतà¤\83 à¤\85सà¥\8dति, à¤¤à¤°à¥\8dहि à¤\8fषा à¤¸à¥\82à¤\9aना à¤\85तà¥\8dर \"{{int:prefs-editing}}\" à¤¨à¤¿à¤\97à¥\82हितुं शक्यते ।",
        "editpage-notsupportedcontentformat-title": "लेखस्य प्रारूपम् अयोग्यम्",
        "editpage-notsupportedcontentformat-text": "लेखस्य सामग्र्याः $1 इति प्रारूपं $2 सामग्री-उदाहरणानुगुणं नास्ति ।",
        "content-model-wikitext": "विकिपाठः",
        "content-model-text": "शुद्धपाठः",
        "content-model-javascript": "जावालिपिः",
        "content-model-css": "सी-एस्-एस्",
-       "expensive-parserfunction-warning": "<strong>पूर्वसूचना :</strong> अस्मिन् पृष्ठे बहवः विभाजिताः नियोजिताः (functions) विद्यन्ते ।\n\nअत्र न्यूनातिन्यूनं $2 {{PLURAL:$2|आह्वानं|आह्वानानि}} शक्यते । तत्र {{PLURAL:$1|अधुना $1 आह्वाहनं|अधिना $1 आह्वाहनानि}}",
+       "content-json-empty-object": "रिक्तं वस्तु (Object)",
+       "content-json-empty-array": "रिक्तः पङ्क्तिबन्धः (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> अस्मिन् पृष्ठे बहवः विभाजिताः नियोजिताः (functions) विद्यन्ते ।\n\nअत्र न्यूनातिन्यूनं $2 {{PLURAL:$2|आह्वानं|आह्वानानि}} शक्यते । तत्र {{PLURAL:$1|अधुना $1 आह्वाानं|अधिना $1 आह्वानानि}}",
        "expensive-parserfunction-category": "अस्मिन् पृष्ठे बहवः विभाजिताः नियोजिताः (functions) विद्यन्ते ।",
-       "post-expand-template-inclusion-warning": "'''पूर्वसूचना:''' फलकस्य आकारः बृहत् वर्तते । कानिचन फलकानि नान्तर्भविष्यन्ति ।",
+       "post-expand-template-inclusion-warning": "'''पूर्वसूचना :''' फलकस्य आकारः बृहत् वर्तते । कानिचन फलकानि नान्तर्भविष्यन्ति ।",
        "post-expand-template-inclusion-category": "सूचनाफलकस्य अपेक्षया पृष्ठं बृहत् वर्तते ।",
-       "post-expand-template-argument-warning": "'''पूर्वसूचना''' अस्मिन् पृष्ठे स्थितस्य फलकस्य एकः विकल्पः बहु बृहत् वर्तते । तस्य विकल्पस्य अंशाः अपाकृताः ।",
+       "post-expand-template-argument-warning": "'''पूर्वसूचना :''' अस्मिन् पृष्ठे स्थितस्य फलकस्य एकः विकल्पः बहु बृहत् वर्तते । तस्य विकल्पस्य अंशाः अपाकृताः ।",
        "post-expand-template-argument-category": "येषु पृष्ठेषु फलके स्थिताः विकल्पाः न पूरिताः तेषां पृष्ठानाम् आवलिः",
        "parser-template-loop-warning": "फलकस्य परिक्रमः (loop) प्राप्तः : [[$1]]",
        "parser-template-recursion-depth-warning": "फलक-प्रत्यावर्तनस्य (recursion) सीमा समाप्ता ($1)",
        "language-converter-depth-warning": "भाषा-परिवर्तकस्य सीमा समाप्ता ($1)",
-       "node-count-exceeded-category": "येषु सन्धेः (node) सीमा समाप्ता, तेषां पृष्ठानाम् आवलिः",
+       "node-count-exceeded-category": "येषु पृष्ठेषु सन्धेः (node) सीमा समाप्ता, तेषां पृष्ठानाम् आवलिः",
+       "node-count-exceeded-category-desc": "एतत् पृष्ठं सन्धेः (node) सीमाम् उल्लङ्घति",
        "node-count-exceeded-warning": "पृष्ठेऽस्मिन् सन्धेः (node) सीमा समाप्ता",
        "expansion-depth-exceeded-category": "येषु विस्तारसीमा समाप्ता, तेषां पृष्ठानाम् आवलिः",
+       "expansion-depth-exceeded-category-desc": "एतत् पृष्ठं विस्तारस्य सीमाम् अत्यक्रमत् ।",
        "expansion-depth-exceeded-warning": "पृष्ठेऽस्मिन् विस्तारसीमा समाप्ता",
-       "parser-unstrip-loop-warning": "Unstrap परिक्रमः (loop) प्राप्तः",
+       "parser-unstrip-loop-warning": "Unstrip परिक्रमः (loop) प्राप्तः",
        "parser-unstrip-recursion-limit": "Unstrip इत्यस्य प्रत्यावर्तनस्य (recursion) सीमा समाप्ता ($1)",
        "converter-manual-rule-error": "मानवीये भाषापरिवर्तने दोषः दृष्टः ।",
-       "undo-success": "à¤\8fततà¥\8d à¤¸à¤®à¥\8dपादनà¤\82 à¤ªà¥\82रà¥\8dववतà¥\8d à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87 à¥¤\nà¤\95à¥\83पया à¤\85धà¤\83 à¤¦à¤¤à¥\8dतयà¥\8bà¤\83 à¤¤à¥\81लनाà¤\82 à¤\95à¥\83तà¥\8dवा à¤¯à¤¤à¥\8d à¤\86वशà¥\8dयà¤\95à¤\82, à¤¤à¤¤à¥\8d à¤¸à¤\82रà¤\95à¥\8dषतà¥\81 à¥¤ à¤¤à¤¤à¤\83 à¤ªà¥\82रà¥\8dववतà¥\8d-à¤\95रणपà¥\8dरà¤\95à¥\8dरिया à¤¸à¤®à¤¾à¤ªà¥\8dतà¤\82 à¤­à¤µà¤¿à¤·à¥\8dयति ।",
-       "undo-failure": "समà¥\8dपादनà¤\82 à¤ªà¥\82रà¥\8dववतà¥\8d à¤\95रà¥\8dतà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dयतà¥\87 à¥¤ à¤\95ारणà¤\82 मध्ये परस्परविपरितानि सम्पादनानि अभवन् ।",
-       "undo-norev": "समà¥\8dपादनमिदà¤\82 à¤ªà¥\82रà¥\8dववतà¥\8d à¤\95रà¥\8dतà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dयतà¥\87 à¥¤ à¤\95ारणà¤\82 à¤¸à¤®à¥\8dपादनमà¥\8d पूर्वमेव अपाकृतं अथवा न विद्यते ।",
+       "undo-success": "à¤\8fततà¥\8d à¤¸à¤®à¥\8dपादनà¤\82 à¤ªà¥\82रà¥\8dववतà¥\8d à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87 à¥¤\nà¤\95à¥\83पया à¤\85धà¤\83 à¤¦à¤¤à¥\8dतयà¥\8bà¤\83 à¤¤à¥\81लनाà¤\82 à¤\95à¥\83तà¥\8dवा à¤¯à¤¤à¥\8d à¤\86वशà¥\8dयà¤\95à¤\82, à¤¤à¤¤à¥\8d à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\82 à¤¸à¤\82रà¤\95à¥\8dषतà¥\81 à¤\9a à¥¤ à¤¤à¤¤à¤\83 à¤ªà¥\82रà¥\8dववतà¥\8d-à¤\95रणपà¥\8dरà¤\95à¥\8dरिया à¤¸à¤®à¤¾à¤ªà¥\8dयतामà¥\8d ।",
+       "undo-failure": "समà¥\8dपादनà¤\82 à¤ªà¥\82रà¥\8dववतà¥\8d à¤\95रà¥\8dतà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dयतà¥\87 à¥¤ à¤¯à¤¤à¤\83 मध्ये परस्परविपरितानि सम्पादनानि अभवन् ।",
+       "undo-norev": "समà¥\8dपादनमिदà¤\82 à¤ªà¥\82रà¥\8dववतà¥\8d à¤\95रà¥\8dतà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dयतà¥\87 à¥¤ à¤¯à¤¤à¤\83 à¤¸à¤®à¥\8dपादनà¤\82 पूर्वमेव अपाकृतं अथवा न विद्यते ।",
        "undo-nochange": "पूर्वमेव एतत् सम्पादनं पूर्ववत् कृतं स्यात् ।",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) द्वारा कृता  $1 पूर्ववत्-प्रक्रिया निरस्तीक्रियताम् ।",
-       "undo-summary-username-hidden": "निà¤\97à¥\82ढितयोजकद्वारा कृता  $1 पूर्ववत्-प्रक्रिया निरस्तीक्रियताम् ।",
+       "undo-summary-username-hidden": "निà¤\97à¥\82हितयोजकद्वारा कृता  $1 पूर्ववत्-प्रक्रिया निरस्तीक्रियताम् ।",
        "cantcreateaccounttitle": "सदस्यता प्राप्तुं न शक्यते",
        "cantcreateaccount-text": "(<strong>$1</strong>) इत्यस्य संविदः (IP) कृते सदस्यता प्राप्तुं न शक्यते । कारणं [[User:$3|$3]] द्वारा सा संवित्सङ्ख्या प्रतिबन्धिता अस्ति । \n\n$3 इत्यनेन कारणं दत्तं यत्, <em>$2</em>",
-       "cantcreateaccount-range-text": "सदसà¥\8dयतापà¥\8dरापà¥\8dतà¥\87à¤\83 à¤¸à¥\80मा-à¤\86à¤\95à¥\8dरानà¥\8dतासु '''$1''' अन्तर्जालसंवित्सु (IP) भवतः/भवत्याः अन्तर्जालसंवद् ('''$4''') अन्तर्भवति । अतः [[User:$3|$3]] द्वारा भवतः/भवत्याः अन्तर्जालसंविद् प्रतिबन्धिता ।\n\n$3 इत्यनेन कारणं दत्तं यत्, ''$2''",
+       "cantcreateaccount-range-text": "सदसà¥\8dयतापà¥\8dरापà¥\8dतà¥\87à¤\83 à¤¸à¥\80मा-à¤\86à¤\95à¥\8dरानà¥\8dतà¥\83षु '''$1''' अन्तर्जालसंवित्सु (IP) भवतः/भवत्याः अन्तर्जालसंवद् ('''$4''') अन्तर्भवति । अतः [[User:$3|$3]] द्वारा भवतः/भवत्याः अन्तर्जालसंविद् प्रतिबन्धिता ।\n\n$3 इत्यनेन कारणं दत्तं यत्, ''$2''",
        "viewpagelogs": "अस्य पृष्ठस्य संरक्षितावलिः (logs) दृश्यताम्",
        "nohistory": "अस्य पृष्ठस्य इतिहासः न वर्तते ।",
        "currentrev": "नूतनतमा आवृत्तिः",
        "currentrev-asof": "$1 समयस्य संस्करणम्",
        "revisionasof": "$1 इत्यस्य संस्करणं",
-       "revision-info": "$1 पर्यन्तं $2 द्वारा जातानां परिवर्तनानाम् आवलिः",
+       "revision-info": "$1 पर्यन्तं {{GENDER:$6|$2}}$7 द्वारा जातानां परिवर्तनानाम् आवलिः",
        "previousrevision": "← पुरातनं संस्करणम्",
        "nextrevision": "नूतनतरा आवृत्तिः →",
        "currentrevisionlink": "नूतनतमा आवृत्तिः",
        "cur": "वर्तमानः",
-       "next": "à¤\86à¤\97ामि",
+       "next": "à¤\85à¤\97à¥\8dरिममà¥\8d",
        "last": "पूर्वतनम्",
-       "page_first": "प्रथमम्",
+       "page_first": "पà¥\8dरपà¥\8dरथममà¥\8d",
        "page_last": "अन्तिमम्",
        "histlegend": "भेदस्य चयनम् : आवृत्तिभेदस्य दर्शनाय अग्रे प्रदत्ता रेडियो-मञ्जूषा नुद्यताम्, एण्टर्-कुड्मलं नुद्यताम्, अधः दत्तं कुड्मलं वा नुद्यताम् । <br />\nनूतनसंस्करणम् = नूतनासु आवृत्तिषु भेदः, \n(पूर्वतनम्) = पूर्वतनासु आवृत्तिषु भेदः, (लघु) = लघु सम्पादनम्",
        "history-fieldset-title": "अन्वेषणस्य इतिहासः",
        "historysize": "({{PLURAL:$1|1 अष्टकं|$1 अष्टकानि}})",
        "historyempty": "(रिक्तम्)",
        "history-feed-title": "संस्करणस्य इतिहासः",
-       "history-feed-description": "à¤\85सà¥\8dमिनà¥\8d à¤µà¤¿à¤\95ि-à¤\9cालसà¥\8dथानà¥\87 à¤¤à¤¸à¥\8dमà¥\88 à¤ªà¥\83षà¥\8dठाय संस्करणेतिहासः",
+       "history-feed-description": "à¤\85सà¥\8dमिनà¥\8d à¤µà¤¿à¤\95ि-à¤\9cालसà¥\8dथानà¥\87 à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय संस्करणेतिहासः",
        "history-feed-item-nocomment": "$1 द्वारा $3 दिनाङ्के $4 समये",
-       "history-feed-empty": "एतत् पृष्ठं न विद्यते । \nएतस्य पृष्ठस्य नामपरिवर्तनम्, अपाकरणं च कृतं स्यात् । \n अनेन सम्बद्धानि पृष्ठानि [[Special:Search|विकि-जालस्थाने अन्विष्यताम्]] ।",
+       "history-feed-empty": "à¤\8fततà¥\8d à¤ªà¥\83षà¥\8dठà¤\82 à¤¨ à¤µà¤¿à¤¦à¥\8dयतà¥\87 à¥¤ \nà¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¨à¤¾à¤®à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनमà¥\8d, à¤\85पाà¤\95रणà¤\82 à¤\9a à¤\95à¥\83तà¤\82 à¤¸à¥\8dयातà¥\8d à¥¤ \n à¤\85नà¥\87न à¤¸à¤®à¥\8dबदà¥\8dधानि à¤ªà¥\83षà¥\8dठानि [[Special:Search|विà¤\95ि-à¤\9cालसà¥\8dथानà¥\87 à¤\85नà¥\8dविषà¥\8dयनà¥\8dतामà¥\8d]] à¥¤",
        "rev-deleted-comment": "(सम्पादनस्य सारः अपाकृतः)",
        "rev-deleted-user": "(प्रयोक्तृनाम अपाकृतमस्ति)",
        "rev-deleted-event": "(संरक्षिताऽऽवल्यः(log) अपाकृताः)",
-       "rev-deleted-user-contribs": "[प्रयोक्तृनाम अन्तर्जालसंविद् वा अपाकृतम् - योगदानाऽऽवल्याम् एतानि परिवर्तनानि निगूढितानि सन्ति ।]",
-       "rev-deleted-text-permission": "एतस्य पृष्ठस्य संस्करणम् <strong>अपाकृतमस्ति</strong> ।\nविस्तृतं ज्ञानम् अत्र प्राप्तुं शक्नोति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-deleted-user-contribs": "[प्रयोक्तृनाम अन्तर्जालसंविद् वा अपाकृतम् - योगदानाऽऽवल्याम् एतानि परिवर्तनानि निगूहितानि सन्ति ।]",
+       "rev-deleted-text-permission": "एतस्य पृष्ठस्य संस्करणम् <strong>अपाकृतमस्ति</strong> ।\nविस्तृतं विवरणम् अत्र प्राप्तुं शक्नोति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-suppressed-text-permission": "एतस्य पृष्ठस्य संस्कृतम् <strong>अपाकृतम्</strong> । तस्य विस्तृतं विवकणं [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} गूहितऽऽवल्याः] प्राप्यते ।",
        "rev-deleted-text-unhide": "एतस्य पृष्ठस्य संस्करणम् <strong>अपाकृतमस्ति</strong> ।\nविस्तृतं ज्ञानम् अत्र प्राप्तुं शक्नोति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]. \n\nयदि इच्छति, तर्हि अत्रापि [$1 view this revision] द्रष्टुं शक्नोति ।",
        "rev-suppressed-text-unhide": "एतस्य पृष्ठस्य संस्करणम् <strong>निषिद्धमस्ति</strong> ।\nविस्तृतं ज्ञानम् अत्र प्राप्तुं शक्नोति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]. \n\nयदि इच्छति, तर्हि अत्रापि [$1 view this revision] द्रष्टुं शक्नोति ।",
        "rev-deleted-text-view": "एतस्य पृष्ठस्य संस्करणम् <strong>अपाकृतमस्ति</strong> ।\nविस्तृतं ज्ञानम् अत्र प्राप्तुं शक्नोति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "rev-delundel": "दृश्यताम्/गोप्यताम्",
        "rev-showdeleted": "दर्श्यताम्",
        "revisiondelete": "संस्करणानि निष्कासयतु/पुनस्स्थापयतु",
-       "revdelete-nooldid-title": "à¤\85यà¥\8bà¤\97à¥\8dयलà¤\95à¥\8dषà¥\8dयसà¥\8dय à¤¸à¤\82शà¥\8bधनम्",
-       "revdelete-nooldid-text": "एतत् कार्यं कर्तुं भवता/भवत्या लक्ष्य न निर्धारितम् एतत् संस्करणं न भवेत् वा । भवान्/भवती एतत् संस्करणं निगूढितुम् प्रयतति इत्यपि शक्यम् ।",
+       "revdelete-nooldid-title": "à¤\85यà¥\8bà¤\97à¥\8dयलà¤\95à¥\8dषà¥\8dयसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणम्",
+       "revdelete-nooldid-text": "एतत् कार्यं कर्तुं भवता/भवत्या लक्ष्यं न निर्धारितम् एतत् संस्करणं न भवेत् वा । भवान्/भवती एतत् संस्करणं निगूहितुम् प्रयतति इत्यपि शक्यम् ।",
        "revdelete-no-file": "निर्दिष्टा सञ्चिका न विद्यते ।",
        "revdelete-show-file-confirm": "$2 दिनाङ्कस्य  $3 समयपर्यन्तस्य  \"<nowiki>$1</nowiki>\" इत्यस्याः अपाकृतसञ्चिकायाः संस्करणाऽऽवलिं भवान्/भवती निश्चयेन द्रष्टुम् ईप्सति ?",
        "revdelete-show-file-submit": "आम्",
        "revdelete-text-text": "पृष्ठस्य इतिहासे अधुनापि अपाकृतानि संस्करणानि द्रष्टुं शक्यन्ते । परन्तु सामान्ययोजकेभ्यः तत्र परिवर्तनम् अशक्यम् ।",
        "revdelete-text-file": "सञ्चिकायाः इतिहासे अधुनापि अपाकृतानां सञ्चिकानां संस्करणानि द्रष्टुं शक्यन्ते । परन्तु सामान्ययोजकेभ्यः तत्र परिवर्तनम् अशक्यम् ।",
        "logdelete-text": "संरक्षिताऽऽवलीनां(log) संस्करणानि संरक्षिताऽऽवल्यां द्रष्टुं शक्यन्ते । परन्तु सामान्ययोजकेभ्यः तत्र परिवर्तनम् अशक्यम् ।",
-       "revdelete-confirm": "एतस्याः [[{{MediaWiki:Policy-url}}|नीतेः]] अन्तर्गतं भवता/भवत्या एतत् कार्यं गभीरतया क्रियमाणम् अस्ति इत्यस्य पुष्टतां करोतु ।",
-       "revdelete-suppress-text": "<strong>केवलं</strong> निम्नकारणेभ्यः निषेधः योग्यः....\n१ भयोत्पादकमाहिती स्यात्\n२ वैयक्तिकमाहिती स्यात्\n३ <em>गृहसङ्केतः, दूरभाषसङ्केतः, राष्ट्रियपरिचयपत्रस्य अङ्कः इत्यादीनि माहितयः स्युः ।</em>",
-       "revdelete-legend": "दृश्यप्रतिबन्धं निश्चितं करोतु",
-       "revdelete-hide-text": "संस्करणस्थं लेखनं (text)",
+       "revdelete-text-others": "यावत्पर्यन्तम् अतिरिक्तप्रतिबन्धस्य निर्धारणं न भविष्यति, तावत् अन्ये प्रशासकाः अपि गूहितविषयं दृष्टं पारयन्ति, तं पुनस्थापयितुम् अपि शक्नुवन्ति ।",
+       "revdelete-confirm": "एतस्याः [[{{MediaWiki:Policy-url}}|नीतेः]] अन्तर्गततया भवता/भवत्या एतत् कार्यं गभीरतया क्रियमाणम् अस्ति इत्यस्य पुष्टतां करोतु ।",
+       "revdelete-suppress-text": "<strong>केवलं</strong> निम्नकारणेभ्यः निषेधः योग्यः....\n१ भयोत्पादकसूचनाधारः स्यात्\n२ वैयक्तिकसूचनाधारः स्यात्\n३ <em>गृहसङ्केतः, दूरभाषसङ्केतः, राष्ट्रियपरिचयपत्रस्य अङ्कः इत्यादयः सूचनाधाराः स्युः ।</em>",
+       "revdelete-legend": "दृश्यप्रतिबन्धः निश्चीयताम्",
+       "revdelete-hide-text": "संस्करणस्थः पाठः (text)",
        "revdelete-hide-image": "सञ्चिकाधेयं गोप्यताम्",
-       "revdelete-hide-name": "पà¥\8dरà¤\95à¥\8dरियाà¤\82, लक्ष्यं च गोप्यताम्",
-       "revdelete-hide-comment": "समà¥\8dपादनसारà¤\82 गोप्यताम्",
+       "revdelete-hide-name": "परिमितयà¤\83 (parameters), लक्ष्यं च गोप्यताम्",
+       "revdelete-hide-comment": "समà¥\8dपादनसारà¤\83 गोप्यताम्",
        "revdelete-hide-user": "योजकस्य प्रयोकतृनाम/अन्तर्जालसंविद् (IP)",
-       "revdelete-hide-restricted": "पà¥\8dरबनà¥\8dधà¤\95à¥\87भà¥\8dयà¤\83, à¤\85नà¥\8dयà¥\87भà¥\8dयशà¥\8dà¤\9a à¤®à¤¾à¤¹à¤¿à¤¤à¥\80 गोप्यताम्",
+       "revdelete-hide-restricted": "पà¥\8dरबनà¥\8dधà¤\95à¥\87भà¥\8dयà¤\83, à¤\85नà¥\8dयà¥\87भà¥\8dयशà¥\8dà¤\9a à¤¸à¥\82à¤\9aनाधारà¤\83 गोप्यताम्",
        "revdelete-radio-same": "(मा परिवर्त्यताम्)",
-       "revdelete-radio-set": "निà¤\97à¥\82ढितम्",
+       "revdelete-radio-set": "निà¤\97à¥\82हितम्",
        "revdelete-radio-unset": "प्रत्यक्षम्",
-       "revdelete-suppress": "पà¥\8dरबनà¥\8dधà¤\95à¥\87भà¥\8dयà¤\83, à¤\85नà¥\8dयà¥\87भà¥\8dयशà¥\8dà¤\9a à¤®à¤¾à¤¹à¤¿à¤¤à¥\80 गोप्यताम्",
+       "revdelete-suppress": "पà¥\8dरबनà¥\8dधà¤\95à¥\87भà¥\8dयà¤\83, à¤\85नà¥\8dयà¥\87भà¥\8dयशà¥\8dà¤\9a à¤¸à¥\82à¤\9aनाधारà¤\83 गोप्यताम्",
        "revdelete-unsuppress": "पुनस्स्थापितसंस्करणानां प्रतिबन्धः अपाक्रियताम्",
        "revdelete-log": "कारणम् :",
        "revdelete-submit": "{{PLURAL:$1|चित-संस्करणे|चित-संस्करणेषु}} प्रयोगं क्रियताम्",
        "revdel-restore": "दृश्यताम्/गोप्यताम्",
        "pagehist": "पृष्ठस्य इतिहासः",
        "deletedhist": "अपाकृतः इतिहासः",
-       "revdelete-hide-current": "$2 à¤¦à¤¿à¤¨à¤¾à¤\99à¥\8dà¤\95सà¥\8dय $1 à¤¸à¤®à¤¯à¥\87 à¤\95सà¥\8dयापि à¤µà¤¸à¥\8dतà¥\8bà¤\83 à¤¨à¤¿à¤\97à¥\82ढनà¤\95ारà¥\8dयà¤\82 à¤¨ à¤¸à¤«à¤²à¥\80भà¥\80तमà¥\8d à¥¤ à¤\8fततà¥\8d à¤¸à¤¦à¥\8dयà¤\83à¤\95ालà¥\80नà¤\82 à¤¸à¤\82सà¥\8dà¤\95रणमसà¥\8dति à¥¤ à¤\8fततà¥\8d à¤¨à¤¿à¤\97à¥\82ढितुं शक्यते ।",
-       "revdelete-show-no-access": "$2 दिनाङ्कस्य $1 समयस्य वस्तुनि दोषः दृष्टः । तत् वस्तुः निषिद्धावल्याम् अस्ति । भवान्/भवती तस्य परिवर्तनं कर्तुं न शक्नोति ।",
-       "revdelete-modify-no-access": "$2 दिनाङ्कस्य $1 समयस्य परिवर्तितवस्तुनि दोषः दृष्टः । तत् वस्तुः निषिद्धावल्याम् अस्ति । भवान्/भवती तस्य परिवर्तनं कर्तुं न शक्नोति ।",
+       "revdelete-hide-current": "$2 à¤¦à¤¿à¤¨à¤¾à¤\99à¥\8dà¤\95सà¥\8dय $1 à¤¸à¤®à¤¯à¥\87 à¤\95सà¥\8dयापि à¤µà¤¸à¥\8dतà¥\8bà¤\83 à¤¨à¤¿à¤\97à¥\82हितà¤\82 à¤\95ारà¥\8dयà¤\82 à¤¨ à¤¸à¤«à¤²à¤¿à¤¤à¤®à¥\8d à¥¤ à¤\8fततà¥\8d à¤¸à¤¦à¥\8dयà¤\83 à¤\95ालà¥\80नà¤\82 à¤¸à¤\82सà¥\8dà¤\95रणमसà¥\8dति à¥¤ à¤\8fततà¥\8d à¤¨à¤¿à¤\97à¥\82हितुं शक्यते ।",
+       "revdelete-show-no-access": "$2 दिनाङ्कस्य $1 समयस्य वस्तुनि दोषः दृष्टः । तत् वस्तु निषिद्धावल्याम् अस्ति । भवान्/भवती तत् परिवर्तितुं न शक्नोति ।",
+       "revdelete-modify-no-access": "$2 दिनाङ्कस्य $1 समयस्य परिवर्तितवस्तुनि दोषः दृष्टः । तत् वस्तु निषिद्धावल्याम् अस्ति । भवान्/भवती तत् परिवर्तितुं न शक्नोति ।",
        "revdelete-modify-missing": "ID $1 इत्यस्य परिवर्तने दोषः : एतत् दत्तांशे न प्राप्तम् !",
        "revdelete-no-change": "'''पूर्वसूचना :''' $2, $1 इत्यस्मिन् याचितवस्तूनि पूर्वस्मादेव विद्यन्ते ।",
        "revdelete-concurrent-change": "$2 दिनाङ्कस्य $1 समयस्य परिवर्तनेषु दोषः दृष्टः । अस्य पृष्ठस्य यदा भवान्/भवती सम्पादनं करोति स्म, तदा अन्य कोऽपि अत्र परिवर्तनम् अकरोत् । अतः परिवर्तनस्य इतिहासे अन्यस्य नाम दृश्यते । \nकृपया स्वस्य संरक्षिताऽवलिं पश्यतु ।",
-       "revdelete-only-restricted": "$2 à¤¦à¤¿à¤¨à¤¾à¤\99à¥\8dà¤\95सà¥\8dय $1 à¤¸à¤®à¤¯à¤¸à¥\8dय à¤¨à¤¿à¤\97à¥\82ढनà¤\95ारà¥\8dयà¥\87 à¤¦à¥\8bषà¤\83 à¤¦à¥\83षà¥\8dà¤\9fà¤\83 à¥¤ à¤­à¤¾à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤¦à¥\83शà¥\8dयता-विà¤\95लà¥\8dपà¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\82 à¤\85à¤\95à¥\83तà¥\8dवा à¤ªà¥\8dरबनà¥\8dधà¤\95à¥\87भà¥\8dयà¤\83 à¤\8fततà¥\8d à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\82 à¤¨à¤¿à¤\97à¥\82ढितुं न शक्नोति ।",
-       "revdelete-reason-dropdown": "* à¤\85पाà¤\95रणसà¥\8dय à¤¸à¤¾à¤®à¤¾à¤¨à¥\8dयà¤\95ारणानि\n** à¤ªà¥\8dरतिà¤\95à¥\83तà¥\8dयधिà¤\95ारसà¥\8dय à¤\89लà¥\8dलà¤\99à¥\8dà¤\98नमà¥\8d\n** à¤\85यà¥\8bà¤\97à¥\8dया à¤\9fिपà¥\8dपणà¥\80 à¤µà¥\88यà¤\95à¥\8dतिà¤\95माहितà¥\80 à¤µà¤¾\n** à¤\85यà¥\8bà¤\97à¥\8dयà¤\82 à¤¸à¤­à¥\8dयनाम\n** à¤¹à¤¾à¤¨à¤¿à¤\95ारà¤\95माहितà¥\80",
+       "revdelete-only-restricted": "$2 à¤¦à¤¿à¤¨à¤¾à¤\99à¥\8dà¤\95सà¥\8dय $1 à¤¸à¤®à¤¯à¤¸à¥\8dय à¤¨à¤¿à¤\97à¥\82ढनà¤\95ारà¥\8dयà¥\87 à¤¦à¥\8bषà¤\83 à¤¦à¥\83षà¥\8dà¤\9fà¤\83 à¥¤ à¤­à¤¾à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤¦à¥\83शà¥\8dयता-विà¤\95लà¥\8dपà¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\82 à¤\85à¤\95à¥\83तà¥\8dवा à¤ªà¥\8dरबनà¥\8dधà¤\95à¥\87भà¥\8dयà¤\83 à¤\8fततà¥\8d à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\82 à¤¨à¤¿à¤\97à¥\82हितुं न शक्नोति ।",
+       "revdelete-reason-dropdown": "* à¤\85पाà¤\95रणसà¥\8dय à¤¸à¤¾à¤®à¤¾à¤¨à¥\8dयà¤\95ारणानि\n** à¤ªà¥\8dरतिà¤\95à¥\83तà¥\8dयधिà¤\95ारसà¥\8dय à¤\89लà¥\8dलà¤\99à¥\8dà¤\98नमà¥\8d\n** à¤\85यà¥\8bà¤\97à¥\8dया à¤\9fिपà¥\8dपणà¥\80 à¤µà¥\88यà¤\95à¥\8dतिà¤\95सà¥\82à¤\9aनाधारà¤\83 à¤µà¤¾\n** à¤\85यà¥\8bà¤\97à¥\8dयà¤\82 à¤¯à¥\8bà¤\9cà¤\95नाम\n** à¤¹à¤¾à¤¨à¤¿à¤\95ारà¤\95सà¥\82à¤\9aनाधारà¤\83",
        "revdelete-otherreason": "अपरं/अतिरिक्तं कारणम् :",
        "revdelete-reasonotherlist": "अन्यानि कारणानि",
-       "revdelete-edit-reasonlist": "समà¥\8dपादनसà¥\8dय à¤\85पाà¤\95रणाय à¤\95ारणानि",
+       "revdelete-edit-reasonlist": "सम्पादनस्य अपाकरणकारणानि",
        "revdelete-offender": "संस्करणकर्ता",
        "suppressionlog": "निग्रहणानां संरक्षणाऽऽवलिः",
-       "suppressionlogtext": "à¤\85धà¤\83 à¤\85वरà¥\8bधितपà¥\83षà¥\8dठानामà¥\8d, à¤\85पाà¤\95रणà¥\80यपà¥\83षà¥\8dठानाà¤\82 à¤\9a à¤\86वलिà¤\83 à¤\85सà¥\8dति à¥¤ à¤\8fषा à¤\86वलिà¤\83 à¤ªà¥\8dरबनà¥\8dधà¤\95à¥\87भà¥\8dयà¤\83 à¤¨à¤¿à¤\97à¥\82ढिता à¤\85सà¥\8dति à¥¤\nनà¥\82तनानामà¥\8d à¤\85वरà¥\8bधितपà¥\83षà¥\8dठानामà¥\8d, à¤\85पाà¤\95रणà¥\80यपà¥\83षà¥\8dठानाà¤\82 à¤\9a à¤\86वलिà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81मà¥\8d [[Special:BlockList|à¤\85वरà¥\8bधितावलिà¤\83]] पश्यतु ।",
-       "mergehistory": "पà¥\83षà¥\8dठयà¥\8bà¤\83 à¤\87तिहाससà¥\8dय à¤µà¤¿à¤²à¥\80निà¤\95रणà¤\82 à¤\95रà¥\8bतà¥\81",
-       "mergehistory-header": "à¤\8fà¤\95सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\87तिहासà¥\87न à¤¸à¤¹ à¤¨à¤µà¥\80नपà¥\83षà¥\8dठसà¥\8dय à¤\87तिहासमà¥\8d à¤\8fà¤\95तà¥\8dरीकर्तुम् एतत् पृष्ठं साहाय्यं करोति । अत्र इतिहासः क्रमशः भवेत् इति अवधेयम् ।",
-       "mergehistory-box": "दà¥\8dवयà¥\8bà¤\83 à¤ªà¥\83षà¥\8dठयà¥\8bà¤\83 à¤\87तिहासà¤\83 à¤\8fà¤\95तà¥\8dरीक्रियताम् :",
+       "suppressionlogtext": "à¤\85धà¤\83 à¤\85वरà¥\8bधितपà¥\83षà¥\8dठानामà¥\8d, à¤\85पाà¤\95रणà¥\80यपà¥\83षà¥\8dठानाà¤\82 à¤\9a à¤\86वलिà¤\83 à¤\85सà¥\8dति à¥¤ à¤\8fषा à¤\86वलिà¤\83 à¤ªà¥\8dरबनà¥\8dधà¤\95à¥\87भà¥\8dयà¤\83 à¤¨à¤¿à¤\97à¥\82हिता à¤\85सà¥\8dति à¥¤\nनà¥\82तनानामà¥\8d à¤\85वरà¥\8bधितपà¥\83षà¥\8dठानामà¥\8d, à¤\85पाà¤\95रणà¥\80यपà¥\83षà¥\8dठानाà¤\82 à¤\9a à¤\86वलिà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81मà¥\8d [[Special:BlockList|à¤\85वरà¥\8bधितावलिà¤\82]] पश्यतु ।",
+       "mergehistory": "पà¥\83षà¥\8dठयà¥\8bà¤\83 à¤\87तिहासाà¤\83 à¤¸à¤\82यà¥\8bà¤\9cà¥\8dयनà¥\8dतामà¥\8d",
+       "mergehistory-header": "à¤\8fà¤\95सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\87तिहासà¥\87न à¤¸à¤¹ à¤¨à¤µà¥\80नपà¥\83षà¥\8dठसà¥\8dय à¤\87तिहासमà¥\8d à¤\95à¥\8dरà¥\8bडीकर्तुम् एतत् पृष्ठं साहाय्यं करोति । अत्र इतिहासः क्रमशः भवेत् इति अवधेयम् ।",
+       "mergehistory-box": "दà¥\8dवयà¥\8bà¤\83 à¤ªà¥\83षà¥\8dठयà¥\8bà¤\83 à¤\87तिहासà¤\83 à¤\95à¥\8dरà¥\8bडीक्रियताम् :",
        "mergehistory-from": "स्रोतपृष्ठम् :",
        "mergehistory-into": "लक्षितपृष्ठम् :",
        "mergehistory-list": "विलीनयोग्यसम्पादनस्य इतिहासः",
-       "mergehistory-merge": "[[:$1]] à¤\87तà¥\8dयसà¥\8dय à¤¨à¤¿à¤®à¥\8dनसà¤\82सà¥\8dà¤\95रणानि [[:$2]] à¤\87तà¥\8dयनà¥\87न à¤¸à¤¹ à¤¸à¤\82यà¥\8bà¤\9cयितà¥\81à¤\82 à¤¶à¤\95à¥\8dयनà¥\8dतà¥\87 à¥¤ à¤¨à¤¿à¤°à¥\8dदिषà¥\8dà¤\9fà¤\95ालसà¥\8dय, à¤¤à¤¸à¥\8dमातà¥\8d à¤ªà¥\82रà¥\8dवतनसà¥\8dय à¤\9a à¤¸à¤\82सà¥\8dà¤\95रणानि à¤\8fà¤\95तà¥\8dरीकर्तुं रेडियो-कुड्मलस्य उपयोगं करोतु । \nसूचनायाः, सञ्चरणस्य (navigation) च उपयोगकर्तारः एते स्तम्भाः पुनः पूर्ववत् भविष्यन्ति ।",
+       "mergehistory-merge": "[[:$1]] à¤\87तà¥\8dयसà¥\8dय à¤¨à¤¿à¤®à¥\8dनसà¤\82सà¥\8dà¤\95रणानि [[:$2]] à¤\87तà¥\8dयनà¥\87न à¤¸à¤¹ à¤¸à¤\82यà¥\8bà¤\9cयितà¥\81à¤\82 à¤¶à¤\95à¥\8dयनà¥\8dतà¥\87 à¥¤ à¤¨à¤¿à¤°à¥\8dदिषà¥\8dà¤\9fà¤\95ालसà¥\8dय, à¤¤à¤¸à¥\8dमातà¥\8d à¤ªà¥\82रà¥\8dवतनसà¥\8dय à¤\9a à¤¸à¤\82सà¥\8dà¤\95रणानि à¤\95à¥\8dरà¥\8bडीकर्तुं रेडियो-कुड्मलस्य उपयोगं करोतु । \nसूचनायाः, सञ्चरणस्य (navigation) च उपयोगकर्तारः एते स्तम्भाः पुनः पूर्ववत् भविष्यन्ति ।",
        "mergehistory-go": "विलीनयोग्यसम्पादनानि दर्शयतु",
-       "mergehistory-submit": "सà¤\82सà¥\8dà¤\95रणानि à¤¸à¤\82यà¥\8bà¤\9cयतु ।",
+       "mergehistory-submit": "सà¤\82सà¥\8dà¤\95रणानि à¤µà¤¿à¤²à¥\80नà¥\80à¤\95रà¥\8bतु ।",
        "mergehistory-empty": "अवतरणानि संयोजयितुं न शक्यते ।",
        "mergehistory-success": "[[:$1]] इत्यस्य $3 {{PLURAL:$3|संस्करणं|संस्करणानि}} [[:$2]] इत्यत्र स्वस्ति (successfully) विलिनीकृतानि ।",
        "mergehistory-fail": "इतिहासविलीनता नैव शक्यते । पृष्ठसम्बद्धानि, कालसम्बद्धानि विकल्पानि पुनः पश्यतु ।",
+       "mergehistory-fail-toobig": "इतिहासस्य विलयः असम्भवः अस्ति, यतः संस्करणसीमायाः $1 अधिक{{PLURAL:$1|संस्करणं स्थानान्तरितं करिणीयं भविष्यति|संस्करणानि स्थानान्तरितकरणीयानि भविष्यन्ति}} ।",
        "mergehistory-no-source": "$1 इति स्रोतपृष्ठं न विद्यते ।",
        "mergehistory-no-destination": "$1 इति लक्षितपृष्ठं न विद्यते ।",
        "mergehistory-invalid-source": "मूलपृष्ठस्य योग्यं शीर्षकम् आवश्यकमेव ।",
        "mergehistory-invalid-destination": "लक्षितपृष्ठस्य योग्यं शीर्षकम् आवश्यकमेव ।",
-       "mergehistory-autocomment": "[[:$1]] à¤\87तà¥\8dयà¥\87नà¤\82 [[:$2]] à¤\87तà¥\8dयसà¥\8dमिनà¥\8d à¤µà¤¿à¤²à¥\80नà¤\82 कृतम्",
-       "mergehistory-comment": "[[:$1]] à¤\87तà¥\8dयà¥\87नà¤\82 [[:$2]] à¤\87तà¥\8dयसà¥\8dमिनà¥\8d à¤µà¤¿à¤²à¥\80नà¤\82 कृतम् : $3",
+       "mergehistory-autocomment": "[[:$1]] à¤\87तà¥\8dयà¥\87नà¤\82 [[:$2]] à¤\87तà¥\8dयसà¥\8dमिनà¥\8d à¤µà¤¿à¤²à¥\80नà¥\80कृतम्",
+       "mergehistory-comment": "[[:$1]] à¤\87तà¥\8dयà¥\87ततà¥\8d [[:$2]] à¤\87तà¥\8dयसà¥\8dमिनà¥\8d à¤µà¤¿à¤²à¥\80नà¥\80कृतम् : $3",
        "mergehistory-same-destination": "मूलपृष्ठ-लक्षितपृष्ठे समाने न भवेताम् ।",
        "mergehistory-reason": "कारणम् :",
        "mergelog": "संस्करणं विलीयताम्",
        "diff-multi-sameuser": "(अनेन योजकेनैव {{PLURAL:$1|कृतम् एकं संस्करणं न प्रदर्श्यते|क्रितानि $1 संस्करणानि न प्रदर्श्यन्ते}})",
        "diff-multi-otherusers": "({{PLURAL:$2|एकेन अन्ययोजकेन|$2 योजकैः}} {{PLURAL:$1|कृतम् एकं संस्करणं न प्रदर्श्यते|क्रितानि $1 संस्करणानि न प्रदर्श्यन्ते}})",
        "diff-multi-manyusers": "{{PLURAL:$2|एकेन योजकेन कृतं|$2 योजकैः कृतानि}} ({{PLURAL:$1|मध्यस्थम् एकं संस्करणं न प्रदर्शितम् ।|मध्यस्थानि $1 परिवर्तनानि न प्रदर्शितानि ।}})",
-       "difference-missing-revision": "एतस्य भेदस्य {{PLURAL:$2|एकं संस्करणं|$2 संस्करणानि}} ($1) न {{PLURAL:$2|प्राप्तम्|प्राप्तानि}} ।\n\nअपाकृतानां पृष्ठानां संस्करणानाम् अन्वेषणकाले प्रायशः एतादृशं भवति । अधिकं ज्ञातुं [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} अपाकृतानाम् आवलि)] पश्यतु ।",
+       "difference-missing-revision": "एतस्य भेदस्य {{PLURAL:$2|एकं संस्करणं|$2 संस्करणानि}} ($1) न {{PLURAL:$2|प्राप्तम्|प्राप्तानि}} ।\n\nअपाकृतानां पृष्ठानां संस्करणानाम् अन्वेषणकाले प्रायशः एतादृशं भवति । अधिकं ज्ञातुं [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} अपाकृतानाम् आवलि] पश्यतु ।",
        "searchresults": "अन्वेषणपरिणामाः",
        "searchresults-title": "\"$1\" कृते अन्वेषणपरिणामाः",
        "titlematches": "पृष्ठशीर्षकं मेलः (matches)",
        "searchprofile-articles": "विषयसहितानि पृष्ठानि",
        "searchprofile-images": "माध्यमसमुच्चयः",
        "searchprofile-everything": "सर्वम्",
-       "searchprofile-advanced": "पà¥\8dरà¤\97तम्",
+       "searchprofile-advanced": "à¤\89नà¥\8dनतम्",
        "searchprofile-articles-tooltip": "$1 स्थले अन्विष्यताम्",
        "searchprofile-images-tooltip": "सञ्चिकाः अन्विष्यन्ताम्",
        "searchprofile-everything-tooltip": "सर्वत्र अन्विष्यताम् (चर्चापृष्ठानि अपि)",
        "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": "बन्धु-प्रकल्पाः",
        "searchall": "सर्वाणि",
        "showingresults": "#'''$2''' क्रमाङ्कात् आरभ्य {{PLURAL:$1|'''$1''' परिणामः अधः प्रदर्शितः|'''$1''' परिणामाः अधः प्रदर्शिताः}}।",
        "showingresultsinrange": "#'''$2''' क्रमाङ्कात् आरभ्य #'''$3''' क्रमाङ्कपर्यन्तं {{PLURAL:$1|'''$1''' परिणामः अधः प्रदर्शितः|'''$1''' परिणामाः अधः प्रदर्शिताः}}।",
-       "search-nonefound": "भवतः/भवत्याः अपेक्षानुगुणं परिणामः न विद्यते ।",
-       "powersearch-legend": "प्रगतम् अन्वेषणम्",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> इत्येतेभ्यः <strong>$1</strong> परिणामः|<strong>$3</strong> इत्येतेभ्यः परिणामाः <strong>$1 - $2</strong>}}",
+       "search-nonefound": "भवतः/भवत्याः अपेक्षानुगुणः परिणामः न विद्यते ।",
+       "powersearch-legend": "उन्नतम् अन्वेषणम्",
        "powersearch-ns": "नामाकाशेषु अन्विष्यताम् :",
        "powersearch-togglelabel": "परीक्ष्यताम् :",
        "powersearch-toggleall": "सर्वम्",
        "powersearch-togglenone": "नैकमपि",
+       "powersearch-remember": "भविष्यस्य अन्वेषणेभ्यः एतत् चयनं स्मरतु",
        "search-external": "बाह्यान्वेषणम्",
-       "searchdisabled": "{{SITENAME}} à¤\87तà¥\8dयतà¥\8dर à¤\85नà¥\8dवà¥\87षणà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dयतà¥\87 à¥¤\nतावता à¤\97à¥\81à¤\97ल-माधà¥\8dयमà¥\87न à¤\85नà¥\8dवà¥\87षणà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87 à¥¤\n'''पà¥\82रà¥\8dवसà¥\82à¤\9aना'''à¤\97à¥\81गल-जालस्थाने {{SITENAME}} इत्यस्य पुरातना सूचना भवितुम् अर्हति ।",
+       "searchdisabled": "{{SITENAME}} à¤\87तà¥\8dयतà¥\8dर à¤\85नà¥\8dवà¥\87षणà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dयतà¥\87 à¥¤\nतावता à¤\97à¥\82à¤\97ल-माधà¥\8dयमà¥\87न à¤\85नà¥\8dवà¥\87षणà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87 à¥¤\n'''पà¥\82रà¥\8dवसà¥\82à¤\9aना'''à¤\97à¥\82गल-जालस्थाने {{SITENAME}} इत्यस्य पुरातना सूचना भवितुम् अर्हति ।",
        "search-error": "$1 इति अन्वेषणकाले दोषः प्राप्तः :",
        "preferences": "इष्टतमानि",
        "mypreferences": "इष्टतमानि",
-       "prefs-edits": "समà¥\8dपादनानाà¤\82 à¤¸à¤\96à¥\8dयाà¤\83",
-       "prefsnologintext2": "स्वस्य इष्टतमानि परिवर्तितुं कृपया $1 इत्येनं नुदतु ।",
+       "prefs-edits": "समà¥\8dपादनानाà¤\82 à¤¸à¤\99à¥\8dà¤\96à¥\8dयाà¤\83 :",
+       "prefsnologintext2": "स्वस्य इष्टतमानि परिवर्तितुं कृपया प्रविश्यताम् ।",
        "prefs-skin": "त्वक्",
        "skin-preview": "प्राग्दृश्यम्",
        "datedefault": "इष्टतमानि न सन्ति",
        "prefs-labs": "प्रयोगशालावैशिष्ट्यम्",
-       "prefs-user-pages": "यà¥\8bà¤\9cतपृष्ठानि",
+       "prefs-user-pages": "यà¥\8bà¤\9cà¤\95पृष्ठानि",
        "prefs-personal": "योजकस्य विवरणम्",
        "prefs-rc": "सद्यो जातानि परिवर्तनानि",
-       "prefs-watchlist": "अवेक्षणावलिः",
-       "prefs-watchlist-days": "अनेक्षणावल्यां दर्शनियानि दिनानि :",
+       "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": "अस्यां विस्तृत-अवेक्षणावल्यां प्रदर्शयितुं महत्तमपरिवर्तनानां सङ्ख्या :",
+       "prefs-watchlist-edits": "à¤\85सà¥\8dयाà¤\82 à¤µà¤¿à¤¸à¥\8dतà¥\83त-à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवलà¥\8dयाà¤\82 à¤ªà¥\8dरदरà¥\8dशयितà¥\81à¤\82 à¤®à¤¹à¤¤à¥\8dतमपरिवरà¥\8dतनानाà¤\82 à¤¸à¤\99à¥\8dà¤\96à¥\8dया :",
        "prefs-watchlist-edits-max": "अधिकतमसङ्ख्याः : १०००",
-       "prefs-watchlist-token": "à¤\85वà¥\87à¤\95à¥\8dषणावलà¥\8dयाà¤\83 à¤ªà¥\8dरतà¥\80à¤\95à¤\83",
+       "prefs-watchlist-token": "à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवलà¥\8dयाà¤\83 à¤ªà¥\8dरतà¥\80à¤\95à¤\83 :",
        "prefs-misc": "विविधम्",
        "prefs-resetpass": "कूटशब्दः परिवर्त्यताम्",
        "prefs-changeemail": "ई-पत्रसङ्केतः परिवर्त्यताम्",
        "rows": "पङ्कतयः :",
        "columns": "स्तम्भाः :",
        "searchresultshead": "अन्वेषणम्",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">stub link</a> इत्यस्य प्रारूपणस्य (formatting) कृते प्रारम्भिकसोपान formatting (bytes):",
+       "stub-threshold": "<a href=\"#\" class=\"stub\">stub link</a> इत्यस्य प्रारूपणस्य (formatting) कृते प्रारम्भिकसोपानम् (अष्टकानि) :",
        "stub-threshold-disabled": "निष्क्रियः",
        "recentchangesdays": "नूतनपरिवर्तनेषु प्रदर्शनीयानि दिनानि :",
        "recentchangesdays-max": "$1 अधिकतम{{PLURAL:$1|दिनं|दिनानि}}",
        "recentchangescount": "फलकेषु सामान्यतया यानि परिवर्तनानि अभवन्, तेषां सङ्ख्या :",
-       "prefs-help-recentchangescount": "अत्र नूतनपरिवर्तनानि, पृष्ठेतिहासः, संरक्षितावल्यश्च अन्तर्भवन्ति ।",
-       "prefs-help-watchlist-token2": "भवतà¤\83/भवतà¥\8dयाà¤\83 à¤\85वà¥\87à¤\95à¥\8dषणावलà¥\8dयाà¤\83 à¤µà¥\87ब-à¤\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 à¤¤à¤µ à¤\85वà¥\87à¤\95à¥\8dषणावलिं द्रष्टुं प्रभविष्यति । अतः एनां गुप्ततया स्थाप्यताम् ।\n[[Special:ResetTokens|गुप्तकुञ्चिकां परिवर्तयितुम् अत्र नुद्यताम् ।]]।",
+       "prefs-help-recentchangescount": "à¤\85तà¥\8dर à¤¨à¥\82तनपरिवरà¥\8dतनानि, à¤ªà¥\83षà¥\8dठà¥\87तिहासà¤\83, à¤¸à¤\82रà¤\95à¥\8dषिताऽऽवलà¥\8dयशà¥\8dà¤\9a à¤\85नà¥\8dतरà¥\8dभवनà¥\8dति à¥¤",
+       "prefs-help-watchlist-token2": "भवतà¤\83/भवतà¥\8dयाà¤\83 à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवलà¥\8dयाà¤\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 à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवलिं द्रष्टुं प्रभविष्यति । अतः एनां गुप्ततया स्थाप्यताम् ।\n[[Special:ResetTokens|गुप्तकुञ्चिकां परिवर्तयितुम् अत्र नुद्यताम् ।]]।",
        "savedprefs": "भवतः/भवत्याः इष्टतमानि रक्षितानि ।",
        "timezonelegend": "समयवलयः (time zone) :",
-       "localtime": "स्थानीयसमय:",
+       "localtime": "स्थानीयसमयः :",
        "timezoneuseserverdefault": "विकि-मूलविकल्पान् स्थापयन्तु ($1)",
-       "timezoneuseoffset": "अन्यम् (समयान्तरं निर्दिशतु )",
+       "timezoneuseoffset": "अन्यम् (समयान्तरं निर्दिशतु)",
        "servertime": "वितरकसमयः :",
        "guesstimezone": "गवेक्षणे पूरयतु",
        "timezoneregion-africa": "कालद्वीपः",
        "timezoneregion-america": "अमेरिका",
        "timezoneregion-antarctica": "अण्टार्कटिका",
-       "timezoneregion-arctic": "आर्कटिक",
+       "timezoneregion-arctic": "आर्कटिक",
        "timezoneregion-asia": "जम्बुमहाद्वीपः",
-       "timezoneregion-atlantic": "à¤\8fà¤\9fलाणà¥\8dà¤\9fिà¤\95-महासागरः",
+       "timezoneregion-atlantic": "à¤\8fà¤\9fà¥\8dलाणà¥\8dà¤\9fिà¤\95à¥\8d-महासागरः",
        "timezoneregion-australia": "ऑस्ट्रेलिया",
        "timezoneregion-europe": "यूरोप",
-       "timezoneregion-indian": "हिन्द-महासागरः",
-       "timezoneregion-pacific": "प्रशान्त-महासागरः",
-       "allowemail": "à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\88à¤\83 à¤ªà¥\8dरà¥\87षितानि à¤\88-पतà¥\8dराणि अनुमतिं ददातु",
+       "timezoneregion-indian": "हिन्दमहासागरः",
+       "timezoneregion-pacific": "प्रशान्तमहासागरः",
+       "allowemail": "à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\88à¤\83 à¤ªà¥\8dरà¥\87षितà¥\87भà¥\8dयà¤\83 à¤\88-पतà¥\8dरà¥\87भà¥\8dयà¤\83 अनुमतिं ददातु",
        "prefs-searchoptions": "अन्विष्यताम्",
        "prefs-namespaces": "नामाकाशाः",
        "default": "पूर्वनिर्दिष्टम्",
-       "prefs-files": "सञ्चिका:",
-       "prefs-custom-css": "सà¥\8dवानà¥\81à¤\95à¥\81लसम्पादितं CSS",
-       "prefs-custom-js": "सà¥\8dवानà¥\81à¤\95à¥\81लसम्पादितं JavaScript",
+       "prefs-files": "सञ्चिका",
+       "prefs-custom-css": "सà¥\8dवानà¥\81à¤\95à¥\82लसम्पादितं CSS",
+       "prefs-custom-js": "सà¥\8dवानà¥\81à¤\95à¥\82लसम्पादितं JavaScript",
        "prefs-common-css-js": "सर्वासां त्वचां (of skins) कृते CSS/JavaScript:",
        "prefs-reset-intro": "भवान्/भवती अस्य पृष्ठस्य साहाय्येन स्वस्य इष्टतमविकल्पान् मूलविकि-विकल्पसदृशं स्थापयितुं (कर्तुं) शक्नोति ।\nपरन्तु ततः भवान्/भवती पूर्ववत् स्थितिं प्राप्तुं न शक्ष्यति ।",
        "prefs-emailconfirm-label": "ई-पत्रं दृढीक्रियताम् :",
        "youremail": "ई-पत्रसङ्केतः :",
        "username": "{{GENDER:$1|योजकनाम}} :",
-       "prefs-memberingroups": "{{PLURAL:$1|समà¥\82हसà¥\8dय|समà¥\82हानाà¤\82}} {{GENDER:$2|सदसà¥\8dयà¤\83/सदसà¥\8dयाः}} :",
-       "prefs-registration": "पà¤\9eà¥\8dà¤\9cà¥\80à¤\95रणसà¥\8dय à¤\95ालà¤\83 :",
+       "prefs-memberingroups": "{{PLURAL:$1|समà¥\82हसà¥\8dय|समà¥\82हानाà¤\82}} {{GENDER:$2|यà¥\8bà¤\9cà¤\95à¤\83/यà¥\8bà¤\9cà¤\95ाः}} :",
+       "prefs-registration": "पञ्जीकरणकालः :",
        "yourrealname": "वास्तविकनाम :",
        "yourlanguage": "भाषा :",
        "yourvariant": "भाषायाः सामग्रीवैविध्यम् :",
-       "prefs-help-variant": " विक्यां प्रदर्शितुं भवति ।",
+       "prefs-help-variant": "एतस्य विकि-जालस्य पृष्ठगतविषयेषु भवता/भवत्या इष्टः प्रकारः वर्णविन्यासो वा प्रदर्शितुम् ।",
        "yournick": "नूतनहस्ताक्षरम् :",
        "prefs-help-signature": "सम्भाषणपृष्ठेषु टिप्पणीं लिखित्वा अन्ते \"<nowiki>~~~~</nowiki>\" लिखतु । अनेन स्वस्य हस्ताक्षरेण सह टिप्पणीलेखनकालस्यापि उल्लेखः भविष्यति ।",
-       "badsig": "à¤\85यà¥\8bà¤\97à¥\8dयà¤\82 à¤ªà¥\8dरारà¥\82परहितà¤\82 (raw) à¤¹à¤¸à¥\8dताà¤\95à¥\8dषरमà¥\8d à¥¤\nHTML à¤\9aिहà¥\8dनà¤\82 पश्यतु ।",
+       "badsig": "पà¥\8dरारà¥\82परहितà¤\82 (raw) à¤\85यà¥\8bà¤\97à¥\8dयà¤\82 à¤¹à¤¸à¥\8dताà¤\95à¥\8dषरमà¥\8d à¥¤\nHTML à¤\9aिहà¥\8dनानि पश्यतु ।",
        "badsiglength": "हस्ताक्षरं बहुलम्बमानम् अस्ति ।\nहस्ताक्षरं $1 {{PLURAL:$1|अक्षरात्|अक्षरेभ्यः}} दीर्घं न भवेत् ।",
        "yourgender": "स्वपरिचयं कथं दातुम् इच्छति ?",
-       "gender-unknown": "स्वपरिचयं दातुं नेच्छामि",
-       "gender-male": "सः विकि-पृष्ठानि सम्पादयति",
-       "gender-female": "सा विकि-पृष्ठानि सम्पादयति",
+       "gender-unknown": "स्वपरिचयं दातुं नेच्छामि ।",
+       "gender-male": "सः विकि-पृष्ठानि सम्पादयति ।",
+       "gender-female": "सा विकि-पृष्ठानि सम्पादयति ।",
        "prefs-help-gender": "एतत् विवरणम् ऐच्छिकम् अस्ति । एतस्मिन् तन्त्रांशे\nलिङ्गाधारेण भवतः/भवत्याः सम्बोधनार्थम् अस्योपयोगः भवति ।\nएतत् विवरणं सार्वजनिकं भविष्यति ।",
        "email": "ई-पत्रम्",
        "prefs-help-realname": "वास्तविकनाम ऐच्छकम् अस्ति । भवान्/भवती एनं विकल्पं समर्थयति चेत्, भवतः/भवत्याः योगदानश्रेयस्य उल्लेखसमये अस्य उपयोगः भविष्यति ।",
-       "prefs-help-email": "ई-पत्रसङ्केतः अनिवार्यः नास्ति । किन्तु कूटशब्दः विस्मर्यते चेत् तस्य परिवर्तनाय आवश्यकः भवति ।",
-       "prefs-help-email-others": "योजकपृष्ठ-सम्भाषणपृष्ठयोः माध्यमेन,  ई-पत्रमाध्यमेन वा अन्ये योजकाः भवतः/भवत्याः सम्पर्कं कर्तुं शक्नुयुः ।\nसम्पर्केऽस्मिन् भवतः/भवत्याः ई-पत्रसङ्केतम् अन्ययोजकाः ज्ञातुं न प्रभवतन्ति ।",
+       "prefs-help-email": "ई-पत्रसङ्केतः अनिवार्यः नास्ति । किन्तु कूटशब्दः विस्मर्यते चेत्, तस्य परिवर्तनाय आवश्यकः भवति ।",
+       "prefs-help-email-others": "योजकपृष्ठ-सम्भाषणपृष्ठयोः माध्यमेन, ई-पत्रमाध्यमेन वा अन्ये योजकाः भवतः/भवत्याः सम्पर्कं कर्तुं शक्नुयुः ।\nसम्पर्केऽस्मिन् भवतः/भवत्याः ई-पत्रसङ्केतम् अन्ययोजकाः ज्ञातुं न प्रभवन्ति ।",
        "prefs-help-email-required": "ई-पत्रसङ्केतः अनिवार्यः ।",
-       "prefs-info": "मूलसूचना",
+       "prefs-info": "मूलसूचना",
        "prefs-i18n": "अन्ताराष्ट्रिकरणम्",
        "prefs-signature": "हस्ताक्षरम्",
        "prefs-dateformat": "दिनाङ्कस्य प्रारूपः",
        "prefs-tokenwatchlist": "स्तोकम् (token)",
        "prefs-diffs": "अन्तरम्",
        "prefs-help-prefershttps": "आगामिप्रेवेशकाले एतत् परिवर्तनं सक्रियं भवष्यति ।",
-       "prefs-tabs-navigation-hint": "परामर्शः : पट्टीकयोः (tabs) मध्ये गमनागमनं कर्तुं भवान्/भवती वामतीरकुड्मलस्य, दक्षिणतीरकुण्मलस्य च उपयोगं कर्तुं शक्नोति ।",
-       "email-address-validity-valid": "ई-पत्रसङ्केतः मान्यः अस्ति इति प्रतियते",
+       "prefswarning-warning": "स्वस्य इष्टतमानि-पुष्ठे भवता/भवत्या यत्, परिवर्तं कृतं, तत् एतावता न रक्षितम् ।\n\"$1\" एतत् अनुदित्वा यदि भवान्/भवती एतत् पृष्ठं त्यक्ष्यति, तर्हि परिवर्तनं रक्षितं न भविष्यति ।",
+       "prefs-tabs-navigation-hint": "परामर्शः : प्लवनयोः (tabs) मध्ये गमनागमनं कर्तुं भवान्/भवती वामतीरकुड्मलस्य, दक्षिणतीरकुण्मलस्य च उपयोगं कर्तुं शक्नोति ।",
+       "email-address-validity-valid": "ई-पत्रसङ्केतः मान्यः अस्ति इति प्रतीयते",
        "email-address-validity-invalid": "मान्यः ई-पत्रसङ्केतः लिख्यताम्",
        "userrights": "योजकाधिकारस्य प्रबन्धनम्",
        "userrights-lookup-user": "योजकसमूहस्य प्रबन्धनं करोतु",
        "userrights-editusergroup": "योजकसमूहः सम्पाद्यताम्",
        "saveusergroups": "योजकसमूहः रक्ष्यताम्",
        "userrights-groupsmember": "अस्य सदस्यः :",
-       "userrights-groupsmember-auto": "निम्न{{PLURAL:$1|समूहस्य|समूहानाम्}} अन्तर्निहिः सदस्यः :",
+       "userrights-groupsmember-auto": "निमà¥\8dन{{PLURAL:$1|समà¥\82हसà¥\8dय|समà¥\82हानामà¥\8d}} à¤\85नà¥\8dतरà¥\8dनिहितà¤\83 à¤¸à¤¦à¤¸à¥\8dयà¤\83 :",
        "userrights-groups-help": "अस्य सदस्यस्य समूहसदस्यत्वं परिवर्तयितुं शक्यते । \n* अङ्कनपेटिका (check box) अङ्किता चेत्, योजकः अस्य समूहस्य सदस्यः अस्ति ।\n* अङ्कनपेटिका अनङ्किता चेत्, योजकः अस्य समूहस्य सदस्यः नास्ति ।\n* एकवारं समूहः योजितः अपाकृतः वा चेत्, पुनः पूर्ववत् कर्तुं न शक्यते इति * चिह्नं सूचयति ।",
        "userrights-reason": "कारणम् :",
        "userrights-no-interwiki": "अन्यविकि-जालस्थानेषु योजकाधिकारं सम्पादयितुं ते अनुमतिः नास्ति ।",
-       "userrights-nodatabase": "$1 à¤¦à¤¤à¥\8dताà¤\82शनिधिà¤\83 à¤¨ à¤µà¤¿à¤¦à¥\8dयतà¥\87 à¥¤ à¤\85थवा à¤¤à¥\81 à¤¸à¤\83 à¤¸à¥\8dथानà¥\80यà¤\83 à¤¨à¤¾à¤¸à¥\8dति à¥¤",
-       "userrights-nologin": "यà¥\8bà¤\9cà¤\95ानà¥\8d अधिकारं दातुं प्रबन्धकत्वेन प्रवेशः आवश्यकः । [[Special:UserLogin|प्रविश्यताम्]]",
-       "userrights-notallowed": "यà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤\85धिà¤\95ारà¤\82 à¤¦à¤¾à¤¤à¤®à¥\8d, अपाकर्तुं च ते अनुमतिः नास्ति ।",
+       "userrights-nodatabase": "$1 दत्तांशनिधिः न विद्यते अथवा तु सः स्थानीयः नास्ति ।",
+       "userrights-nologin": "यà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 अधिकारं दातुं प्रबन्धकत्वेन प्रवेशः आवश्यकः । [[Special:UserLogin|प्रविश्यताम्]]",
+       "userrights-notallowed": "यà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤\85धिà¤\95ारà¤\82 à¤¦à¤¾à¤¤à¥\81à¤\82, à¤¯à¥\8bà¤\9cà¤\95ानà¥\8d अपाकर्तुं च ते अनुमतिः नास्ति ।",
        "userrights-changeable-col": "परिवर्तनार्हाः समूहाः",
        "userrights-unchangeable-col": "परिवर्तनम् अनर्हाः समूहाः",
        "userrights-conflict": "सदस्याधिकारस्य परिवर्तनेषु अन्तर्विरोधः अस्ति ! कृपया स्वकृतानि परिवर्तनानि पुनरवलोक्य संरक्ष्यताम् ।",
        "grouppage-sysop": "{{ns:project}}:प्रबन्धकाः",
        "grouppage-bureaucrat": "{{ns:project}}:अधिकारिणः",
        "grouppage-suppress": "{{ns:project}}:अलक्ष्यम्",
-       "right-read": "पृष्ठानि पठ्यताम्",
-       "right-edit": "पृष्ठानि सम्पाद्यताम्",
-       "right-createpage": "पृष्ठानि निर्मियताम् ।(येषां सम्भाषणपृष्ठं न स्यात् ।)",
-       "right-createtalk": "सम्भाषणपृष्ठानि निर्मियताम्",
-       "right-createaccount": "नूतनप्रयोक्तृवृत्तान्तं रच्यताम्",
+       "right-read": "पà¥\83षà¥\8dठानि à¤ªà¤ à¥\8dयनà¥\8dतामà¥\8d",
+       "right-edit": "पà¥\83षà¥\8dठानि à¤¸à¤®à¥\8dपादà¥\8dयनà¥\8dतामà¥\8d",
+       "right-createpage": "पà¥\83षà¥\8dठानि à¤¨à¤¿à¤°à¥\8dमियनà¥\8dतामà¥\8d à¥¤(यà¥\87षाà¤\82 à¤¸à¤®à¥\8dभाषणपà¥\83षà¥\8dठà¤\82 à¤¨ à¤¸à¥\8dयातà¥\8d à¥¤)",
+       "right-createtalk": "समà¥\8dभाषणपà¥\83षà¥\8dठानि à¤¨à¤¿à¤°à¥\8dमियनà¥\8dतामà¥\8d",
+       "right-createaccount": "नà¥\82तनपà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\83वà¥\83तà¥\8dतानà¥\8dतà¤\82 à¤°à¤\9aà¥\8dयनà¥\8dतामà¥\8d",
        "right-minoredit": "लघुसम्पादनत्वेन अङ्कितं करोतु",
        "right-move": "पृष्ठं चाल्यताम्",
        "right-move-subpages": "उपपृष्ठैः सह पृष्ठं चालयतु",
-       "right-move-rootuserpages": "मूलयोजकपुष्ठानि चाल्यताम्",
-       "right-move-categorypages": "वर्गपृष्ठानि चाल्यताम्",
-       "right-movefile": "सञ्चिकाः चाल्यताम्",
+       "right-move-rootuserpages": "मà¥\82लयà¥\8bà¤\9cà¤\95पà¥\81षà¥\8dठानि à¤\9aालà¥\8dयनà¥\8dतामà¥\8d",
+       "right-move-categorypages": "वरà¥\8dà¤\97पà¥\83षà¥\8dठानि à¤\9aालà¥\8dयनà¥\8dतामà¥\8d",
+       "right-movefile": "सà¤\9eà¥\8dà¤\9aिà¤\95ाà¤\83 à¤\9aालà¥\8dयनà¥\8dतामà¥\8d",
        "right-suppressredirect": "पृष्ठं यदा चालयति, तदा मूलपृष्ठात् प्रतिप्रेषणं मास्तु ।",
        "right-upload": "उपारोहण(upload)सञ्चिकाः",
-       "right-reupload": "वर्तमानसञ्चिकाः नवीनसञ्चिकाभिः परिवर्त्यताम्",
-       "right-reupload-own": "अन्येन उपारोहिताः (upload) सञ्चिकाः नवीनसञ्चिकाभिः परिवर्त्यताम्",
-       "right-reupload-shared": "विभक्तमाध्यमेन (shared media) स्थानीय-उपारोहिताः सञ्चिकाः नवीनसञ्चाकाभिः परिवर्त्यताम्",
-       "right-upload_by_url": "सरà¥\8dवासङ्केतात् (URL) उपारोहिताः सञ्चिकाः",
+       "right-reupload": "वरà¥\8dतमानसà¤\9eà¥\8dà¤\9aिà¤\95ाà¤\83 à¤¨à¤µà¥\80नसà¤\9eà¥\8dà¤\9aिà¤\95ाभिà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतà¥\8dयनà¥\8dतामà¥\8d",
+       "right-reupload-own": "à¤\85नà¥\8dयà¥\87न à¤\89पारà¥\8bहिताà¤\83 (upload) à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ाà¤\83 à¤¨à¤µà¥\80नसà¤\9eà¥\8dà¤\9aिà¤\95ाभिà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतà¥\8dयनà¥\8dतामà¥\8d",
+       "right-reupload-shared": "विभà¤\95à¥\8dतमाधà¥\8dयमà¥\87न (shared media) à¤¸à¥\8dथानà¥\80य-à¤\89पारà¥\8bहिताà¤\83 à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ाà¤\83 à¤¨à¤µà¥\80नसà¤\9eà¥\8dà¤\9aाà¤\95ाभिà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतà¥\8dयनà¥\8dतामà¥\8d",
+       "right-upload_by_url": "सारà¥\8dवसङ्केतात् (URL) उपारोहिताः सञ्चिकाः",
        "right-purge": "पृष्ठस्य उपस्मृतिं (cache) रिक्तीक्रियताम्",
        "right-autoconfirmed": "सार्वसङ्केत(IP)आधारितेन मूल्यनियन्त्रणेन सह अस्य सम्बन्धः नास्ति",
        "right-bot": "स्वसञ्चालितप्रणालित्वेन एतां स्वीक्रियताम्",
        "right-nominornewtalk": "सम्भाषणपृष्ठस्य लघुपरिवर्तनानां विषये मा सूच्यताम्",
-       "right-apihighlimits": "API प्रश्नेषु उन्नतसीमाः उपयोज्यताम्",
-       "right-writeapi": "योग्यस्य API इत्यस्य उपयोगं करोतु",
-       "right-delete": "पृष्ठानि अपाक्रियताम्",
+       "right-apihighlimits": "विदत्तसम्पर्कानुरूपविधेः (API) प्रश्नेषु उन्नतसीमाः उपयुज्यताम्",
+       "right-writeapi": "योग्यस्य विदत्तसम्पर्कानुरूपविधेः (API) उपयोगं करोतु",
+       "right-delete": "पà¥\83षà¥\8dठानि à¤\85पाà¤\95à¥\8dरियनà¥\8dतामà¥\8d",
        "right-bigdelete": "दीर्घेतिहासयुक्तपृष्ठानि अपाक्रियताम्",
-       "right-deletelogentry": "यà¥\8bà¤\97à¥\8dयसà¤\82रà¤\95à¥\8dषितावलà¥\8dयाà¤\83 à¤¨à¤¿à¤µà¥\87शानà¥\8d (entries) à¤\85पाà¤\95à¥\8dरियतामà¥\8d, à¤\85नपाà¤\95à¥\8dरियतां च",
-       "right-deleterevision": "योग्यपृष्ठस्य संस्करणानि अपाक्रियताम्",
-       "right-deletedhistory": "à¤\85पाà¤\95à¥\83त-निवà¥\87शानामà¥\8d इतिहासं पश्यतु (तत्सम्बद्धपाठं विना)",
-       "right-deletedtext": "à¤\85पाà¤\95à¥\83तपाठाà¤\83, à¤\85पाà¤\95à¥\83तसà¤\82सà¥\8dà¤\95रणयà¥\8bà¤\83 परिवर्तनानि च पश्यतु",
-       "right-browsearchive": "अपाकृतपृष्ठानि अन्विष्यताम्",
+       "right-deletelogentry": "यà¥\8bà¤\97à¥\8dयसà¤\82रà¤\95à¥\8dषिताऽऽवलà¥\8dयाà¤\83 à¤ªà¥\8dरविषà¥\8dà¤\9fयà¤\83 (entries) à¤\85पाà¤\95à¥\8dरियनà¥\8dतामà¥\8d, à¤ªà¥\81नà¤\83 à¤¸à¥\8dथापà¥\8dयनà¥\8dतां च",
+       "right-deleterevision": "यà¥\8bà¤\97à¥\8dयपà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणानि à¤\85पाà¤\95à¥\8dरियनà¥\8dतामà¥\8d",
+       "right-deletedhistory": "à¤\85पाà¤\95à¥\83त-पà¥\8dरविषà¥\8dà¤\9fà¥\80नामà¥\8d (Entry) इतिहासं पश्यतु (तत्सम्बद्धपाठं विना)",
+       "right-deletedtext": "à¤\85पाà¤\95à¥\83तपाठसà¥\8dय, à¤\85पाà¤\95à¥\83तसà¤\82सà¥\8dà¤\95रणसà¥\8dय à¤\9a परिवर्तनानि च पश्यतु",
+       "right-browsearchive": "à¤\85पाà¤\95à¥\83तपà¥\83षà¥\8dठानि à¤\85नà¥\8dविषà¥\8dयनà¥\8dतामà¥\8d",
        "right-undelete": "इदं पृष्ठं न अपाक्रियताम्",
-       "right-suppressrevision": "प्रबन्धकैः निगूढितानि संस्करणानि पुनःपश्यतु, पुनस्थापयतु च",
-       "right-suppressionlog": "वैयक्तिकसंस्करणानि दृश्यताम्",
-       "right-block": "अस्य योजकस्य सम्पादनानि अवरुध्यताम्",
-       "right-blockemail": "ई-पत्रप्रेषयितुम् एनं योजकम् अवरुद्ध्यताम्",
+       "right-suppressrevision": "प्रबन्धकैः निगूहितानि, सम्मुखं स्थापितानि च विशिष्टसंस्करणानि पुनः पश्यतु, पुनस्थापयतु च",
+       "right-viewsuppressed": "अन्ययोजकैः गूहितं संस्कृरणं दृष्यताम्",
+       "right-suppressionlog": "वैयक्तिकसंस्करणानि दृश्यन्ताम्",
+       "right-block": "अस्य योजकस्य सम्पादनानि अवरुध्यन्ताम्",
+       "right-blockemail": "ई-पत्रप्रेषयितुम् एनं योजकम् अवरुद्ध्यन्ताम्",
        "right-hideuser": "प्रयोक्तृनाम अवरुध्यताम्, तत् अन्ययोजकेभ्यः गोप्यतां च",
        "right-ipblock-exempt": "स्वयम् अवरोधितं, समूहावरोधिम् अन्तर्जालसङ्केतम् (IP) अवगण्य अग्रे गच्छतु",
        "right-proxyunbannable": "प्रतिनिधीनां (of prxies) स्वयम्-अवरोधान् अवगण्य अग्रे गच्छतु",
-       "right-unblockself": "सà¥\8dवà¤\82 अनवरुध्यताम्",
+       "right-unblockself": "सà¥\8dवमà¥\8d अनवरुध्यताम्",
        "right-protect": "सुरक्षास्तरं परिवर्त्यतां, क्रमबद्धानि सुरक्षितपृष्ठानि सम्पाद्यतां च",
-       "right-editprotected": "\"{{int:protect-level-sysop}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यताम्",
-       "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यताम्",
+       "right-editprotected": "\"{{int:protect-level-sysop}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यन्ताम्",
+       "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यन्ताम्",
+       "right-editcontentmodel": "एकस्य पृष्ठस्य विषयोदाहरणं सम्पाद्यताम्",
        "right-editinterface": "योजकमाध्यमं सम्पाद्यताम्",
-       "right-editusercssjs": "अन्यस्य योजकस्य CSS, JavaScript सञ्चिकाः सम्पाद्यताम्",
-       "right-editusercss": "अन्यस्य योजकस्य CSS सञ्चिकाः सम्पाद्यताम्",
-       "right-edituserjs": "अन्यस्य योजकस्य JavaScript सञ्चिकाः सम्पाद्यताम्",
-       "right-editmyusercss": "स्वस्य CSS सञ्चिकाः सम्पाद्यताम्",
-       "right-editmyuserjs": "स्वस्य JavaScript सञ्चिकाः सम्पाद्यताम्",
-       "right-viewmywatchlist": "स्वस्य अवेक्षणावलिः दृष्यताम्",
-       "right-editmywatchlist": "सà¥\8dवसà¥\8dय à¤\85वà¥\87à¤\95à¥\8dषणावलिà¤\83 à¤¸à¤®à¥\8dपादà¥\8dयतामà¥\8d à¥¤ à¤\85तà¥\8dर à¤§à¥\8dयातवà¥\8dयà¤\82 à¤¯à¤¤à¥\8d, à¤\85नà¥\8dयà¤\9aà¥\87षà¥\8dà¤\9fाभिà¤\83 विना अधिकारेण अत्र अन्यपुष्ठानि योजयितुम् अवसरः अस्ति ।",
-       "right-viewmyprivateinfo": "स्वस्य व्यक्तिगतसूचनाः दृश्यताम् (उदा. ई-पत्रसन्देशः, वास्तविकनाम)",
-       "right-editmyprivateinfo": "स्वस्य व्यक्तिगतसूचनाः सम्पाद्यताम् (उदा. ई-पत्रसन्देशः, वास्तविकनाम)",
-       "right-editmyoptions": "स्वस्य इष्टतमानि सम्पाद्यताम्",
+       "right-editusercssjs": "à¤\85नà¥\8dयसà¥\8dय à¤¯à¥\8bà¤\9cà¤\95सà¥\8dय CSS, JavaScript à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ाà¤\83 à¤¸à¤®à¥\8dपादà¥\8dयनà¥\8dतामà¥\8d",
+       "right-editusercss": "à¤\85नà¥\8dयसà¥\8dय à¤¯à¥\8bà¤\9cà¤\95सà¥\8dय CSS à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ाà¤\83 à¤¸à¤®à¥\8dपादà¥\8dयनà¥\8dतामà¥\8d",
+       "right-edituserjs": "à¤\85नà¥\8dयसà¥\8dय à¤¯à¥\8bà¤\9cà¤\95सà¥\8dय JavaScript à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ाà¤\83 à¤¸à¤®à¥\8dपादà¥\8dयनà¥\8dतामà¥\8d",
+       "right-editmyusercss": "सà¥\8dवसà¥\8dय CSS à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ाà¤\83 à¤¸à¤®à¥\8dपादà¥\8dयनà¥\8dतामà¥\8d",
+       "right-editmyuserjs": "सà¥\8dवसà¥\8dय JavaScript à¤¸à¤\9eà¥\8dà¤\9aिà¤\95ाà¤\83 à¤¸à¤®à¥\8dपादà¥\8dयनà¥\8dतामà¥\8d",
+       "right-viewmywatchlist": "सà¥\8dवसà¥\8dय à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवलिà¤\83 à¤¦à¥\83षà¥\8dयतामà¥\8d",
+       "right-editmywatchlist": "सà¥\8dवसà¥\8dय à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवलिà¤\83 à¤¸à¤®à¥\8dपादà¥\8dयतामà¥\8d à¥¤ à¤\85तà¥\8dर à¤§à¥\8dयातवà¥\8dयà¤\82 à¤¯à¤¤à¥\8d, विना अधिकारेण अत्र अन्यपुष्ठानि योजयितुम् अवसरः अस्ति ।",
+       "right-viewmyprivateinfo": "सà¥\8dवसà¥\8dय à¤µà¥\8dयà¤\95à¥\8dतिà¤\97तसà¥\82à¤\9aनाà¤\83 à¤¦à¥\83शà¥\8dयनà¥\8dतामà¥\8d (à¤\89दा. à¤\88-पतà¥\8dरसनà¥\8dदà¥\87शà¤\83, à¤µà¤¾à¤¸à¥\8dतविà¤\95नाम)",
+       "right-editmyprivateinfo": "सà¥\8dवसà¥\8dय à¤µà¥\8dयà¤\95à¥\8dतिà¤\97तसà¥\82à¤\9aनाà¤\83 à¤¸à¤®à¥\8dपादà¥\8dयनà¥\8dतामà¥\8d (à¤\89दा. à¤\88-पतà¥\8dरसनà¥\8dदà¥\87शà¤\83, à¤µà¤¾à¤¸à¥\8dतविà¤\95नाम)",
+       "right-editmyoptions": "सà¥\8dवसà¥\8dय à¤\87षà¥\8dà¤\9fतमानि à¤¸à¤®à¥\8dपादà¥\8dयनà¥\8dतामà¥\8d",
        "right-rollback": "कस्मिंश्चित् पृष्ठे येन अन्तिमयोजकेन परिवर्तनं कृतं, तत् परिवर्तनं शीर्घ्रं पूर्ववत् करोतु",
        "right-markbotedits": "पूर्ववत् यानि सम्पादनानि कृतानि, तानि बॉट्-सम्पादनत्वेन अङ्कितं करोतु",
        "right-noratelimit": "वेगस्य सीमायाः कारणेन परिवर्तनं न भवेत्",
-       "right-import": "à¤\85नà¥\8dयसà¥\8dमातà¥\8d à¤µà¤¿à¤\95ि-à¤\9cालसà¥\8dथà¤\86नात् पृष्ठानि आयातं करोतु",
+       "right-import": "à¤\85नà¥\8dयसà¥\8dमातà¥\8d à¤µà¤¿à¤\95ि-à¤\9cालसà¥\8dथानात् पृष्ठानि आयातं करोतु",
        "right-importupload": "उपारोहिताभ्यः (upload) सञ्चिकाभ्यः पृष्ठानि आयातं करोतु",
-       "right-patrol": "à¤\85नà¥\8dयà¥\87षाà¤\82 à¤¸à¤®à¥\8dपादनानि à¤¨à¤¿à¤°à¤¿à¤\95à¥\8dषिततà¥\8dवà¥\87न à¤\85à¤\99à¥\8dà¤\95à¥\8dयताम्",
-       "right-autopatrol": "सà¥\8dवसà¥\8dय à¤¸à¤®à¥\8dपादनानि à¤¨à¤¿à¤°à¤¿à¤\95à¥\8dषिततà¥\8dवà¥\87न à¤\85à¤\99à¥\8dà¤\95à¥\8dयताम्",
-       "right-patrolmarks": "नà¥\82तनपरिवरà¥\8dतनà¥\87षà¥\81 à¤¨à¤¿à¤°à¤¿क्षित-अङ्कनं दृश्यताम्",
+       "right-patrol": "à¤\85नà¥\8dयà¥\87षाà¤\82 à¤¸à¤®à¥\8dपादनानि à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषिततà¥\8dवà¥\87न (patrolled) à¤\85à¤\99à¥\8dà¤\95à¥\8dयनà¥\8dताम्",
+       "right-autopatrol": "सà¥\8dवसà¥\8dय à¤¸à¤®à¥\8dपादनानि à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषिततà¥\8dवà¥\87न à¤\85à¤\99à¥\8dà¤\95à¥\8dयनà¥\8dताम्",
+       "right-patrolmarks": "नà¥\82तनपरिवरà¥\8dतनà¥\87षà¥\81 à¤¨à¤¿à¤°à¥\80क्षित-अङ्कनं दृश्यताम्",
        "right-unwatchedpages": "अदृष्टपृष्टानाम् आवलिः दृश्यताम्",
-       "right-mergehistory": "पà¥\83षà¥\8dठानामà¥\8d à¤\87तिहासमà¥\8d à¤\8fà¤\95à¥\80à¤\95रà¥\8bतà¥\81",
+       "right-mergehistory": "पà¥\83षà¥\8dठानामà¥\8d à¤\87तिहासमà¥\8d à¤µà¤²à¥\80यतामà¥\8d",
        "right-userrights": "सर्वयोजकाधिकारः सम्पाद्यताम्",
        "right-userrights-interwiki": "अन्यविकि-जालस्थानानां योजकाधिकारः सम्पाद्यताम्",
        "right-siteadmin": "दत्तांशनिधिं किलतु, अकिलितं च करोतु",
-       "right-override-export-depth": "पà¤\9eà¥\8dà¤\9aसà¥\8dतरपरà¥\8dयनà¥\8dतà¤\82 à¤¸à¤\82लà¤\97à¥\8dनपà¥\81à¤\9fानि à¤¨à¤¿à¤°à¥\8dयातानि करोतु ।",
-       "right-sendemail": "à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤µà¤¿à¤¦à¥\8dयà¥\81नà¥\8dमानपतà¥\8dराणि à¤ªà¥\8dरà¥\87षयतà¥\81 à¥¤",
+       "right-override-export-depth": "यानि à¤ªà¥\81षà¥\8dठानि à¤ªà¤\9eà¥\8dà¤\9aसà¥\8dतरपरà¥\8dयनà¥\8dतà¤\82 à¤¸à¤\82लà¤\97à¥\8dनानि à¤¸à¤¨à¥\8dति, à¤¤à¥\87षाà¤\82 à¤¸à¤°à¥\8dवà¥\87षाà¤\82 à¤¨à¤¿à¤°à¥\8dयातà¤\82 करोतु ।",
+       "right-sendemail": "à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤\88-पतà¥\8dरà¤\82 à¤ªà¤¤à¥\8dरà¤\82 à¤ªà¥\8dरà¥\87षयतà¥\81",
        "right-passwordreset": "निकुञ्चपुनारचितानां विद्युन्मानपत्राणाम् अवलोकनम् ।",
        "newuserlogpage": "प्रयोक्तृ-सृजन-सूचिका",
        "newuserlogpagetext": "अयं योजकनिर्माणास्य प्रवेशः ।",
        "recentchanges-label-minor": "इदं लघु सम्पादनम्",
        "recentchanges-label-bot": "बोट्-द्वारा कृतं सम्पादनमेतत्",
        "recentchanges-label-unpatrolled": "एतावता अस्य सम्पादनस्य परिशीलिनं नाभूत् ।",
+       "recentchanges-label-plusminus": "पृष्ठस्य आकारः एतावद्भिः बैट्स्-संख्याभिः परिवर्तितः",
        "recentchanges-legend-heading": "'''विकल्पविषयकम्'''",
        "rcnotefrom": "<strong>$2</strong> तः आरभ्य (<strong>$1</strong> पर्यन्तं) जातानि परिवर्तनानि अधः प्रदर्शितानि ।",
        "rclistfrom": "$3 $2 पश्चात् जातानि नूतनानि परिवर्तनानि दृश्यन्ताम्",
        "delete-toobig": "अस्य पुटास्य सम्पादनेतिहासः$1तः अधिकः {{PLURAL:$1|पुनरावृत्तिः}} इति कारणेन बृहत् अस्ति । \n{{SITENAME}} इत्यस्य अकस्मात् प्रविदारणम् अवरोद्धुं तादृशपुटस्य अपमर्जनं निषिद्धम्  ।",
        "delete-warning-toobig": " $1 {{PLURAL:$1|पुनरावृत्तिः|पुनरावृत्तयः}} अस्मिन् पुटे विसृतः सम्पादनेतिहासः ।",
        "rollback": "सम्पादनं निर्वर्तयतु ।",
-       "rollback_short": "प्रत्याहरणम् ।",
        "rollbacklink": "प्रत्याहरणं",
        "rollbacklinkcount": "$1 {{PLURAL:$1|सम्पादनम्|सम्पादनानि}} प्रत्याहरतु ।",
        "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|सम्पादनम्|सम्पादनानि}} अधिकं प्रत्याहरतु ।",
        "import-rootpage-nosubpage": "मूलपुटस्य \"$1\" इति नामस्थाने उपपुटानि नानुमतानि ।",
        "importlogpage": "आयातसूचिका ।",
        "importlogpagetext": "अन्यविकितः सम्पादितेतिहाससहितानि प्रशासकानाम् आयातपुटानि ।",
-       "import-logentry-upload": "सञ्चिकाम् उत्तारयित्वा [[$1]] इत्यस्य आयातः कृतः ।",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|पुनरावृत्तिः}}",
-       "import-logentry-interwiki": "ट्रान्स्विकिकृतम् ।$1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|पुनरावृत्तिः}} $2 इत्येतस्मात् ।",
        "javascripttest": "जावालिपिपरीक्षणम् ।",
        "javascripttest-pagetext-noframework": "जावलिपिचालनपरीक्षार्थम् एतत्पुटम् आरक्षितम् ।",
        "version-parser-function-hooks": "विन्यासकलापस्य आलम्बाः ।",
        "version-hook-name": "आलम्बस्य नाम ।",
        "version-hook-subscribedby": "सदस्यत्वम् अनेन प्राप्तम् ।",
-       "version-version": "(आवृत्तिः$1)",
+       "version-version": "($1)",
        "version-license": "अनुज्ञापत्रम्",
        "version-poweredby-credits": "इयं विकिः अनेन सञ्चालिता '''[https://www.mediawiki.org/ MediaWiki]''', स्वामित्वम् © 2001 - $1  $2 ।",
        "version-poweredby-others": "अन्य",
        "logentry-rights-autopromote": "$1 इत्ययं स्वचालितरूपेण $4 इत्यतः $5 इति यावत् पदोन्नतः",
        "rightsnone": "(कतम)",
        "revdelete-summary": "सम्पादनसांक्षेपिक",
+       "feedback-adding": "पृष्ठे प्रतिस्पन्दः योजनीयः ...",
+       "feedback-bugcheck": "उत्तमम् परिशीलयतु यत्  [ $1 known bugs] पूर्वमेव नासीत् इति ।",
+       "feedback-bugnew": "अहं परीक्षितवान् ।  नूतनदोषं सूचयतु ।",
        "feedback-bugornote": "यदि भवान् कस्याश्चित् तान्त्रिकसमस्यायाः विषये विशदीकर्तुम् इच्छति तर्हि [$1 मत्कुणसञ्चिकां करोतु ।]\nअन्यथा चेत् भवान् सरलप्रपत्रम् उपयोक्तुं शक्नोति । भवतः टीका योजकनाम्ना सह भवतः जालगवाक्षेन सह  \"[$3 $2]\" इत्यस्मिन् पुटे योज्यते ।",
-       "feedback-subject": "विषय:",
-       "feedback-message": "संदेश:",
        "feedback-cancel": "निवर्तयते",
-       "feedback-submit": "प्रतिस्पन्दः प्रेष्यताम्",
-       "feedback-adding": "पृष्ठे प्रतिस्पन्दः योजनीयः ...",
+       "feedback-close": "समापित",
        "feedback-error1": "API इत्यस्मात् दोषः : अज्ञातः परिणामः ।",
        "feedback-error2": "दोषः : सम्पादनं निष्फलं जातम्",
        "feedback-error3": "दोषः : ए पि ऐ तः प्रतिस्पन्दः न प्राप्तः",
+       "feedback-message": "संदेश:",
+       "feedback-subject": "विषय:",
+       "feedback-submit": "उपस्थाप्यताम्",
        "feedback-thanks": "धन्यवादः ! भवतः प्रतिस्पन्दः \"[ $2  $1 ]\" पृष्ठाय प्रेषितः अस्ति ।",
-       "feedback-close": "समापित",
-       "feedback-bugcheck": "उत्तमम् परिशीलयतु यत्  [ $1 known bugs] पूर्वमेव नासीत् इति ।",
-       "feedback-bugnew": "अहं परीक्षितवान् ।  नूतनदोषं सूचयतु ।",
        "searchsuggest-search": "अन्वेषणम्",
        "searchsuggest-containing": "विद्यन्ते......",
        "api-error-badaccess-groups": "भवान् अस्यां वीक्यां सञ्चिकाः उत्तारयितुम् नानुमतः ।",
        "duration-millennia": "$1 {{PLURAL:$1|सहस्राब्धः|सहस्राब्धाः}}",
        "expand_templates_output": "परिणामम्",
        "expand_templates_ok": "अस्तु",
-       "expand_templates_preview": "प्राग्दृश्यम् दर्श्यताम्"
+       "expand_templates_preview": "प्राग्दृश्यम् दर्श्यताम्",
+       "special-characters-group-latin": "ल्याटिन्",
+       "special-characters-group-latinextended": "ल्याटिन्-विस्तारितम्",
+       "special-characters-group-ipa": "ऐपिए",
+       "special-characters-group-symbols": "प्रतीक",
+       "special-characters-group-greek": "ग्रीक",
+       "special-characters-group-cyrillic": "सिरिलिक्",
+       "special-characters-group-arabic": "अरबी",
+       "special-characters-group-arabicextended": "अरबीविस्तारितम्",
+       "special-characters-group-persian": "पर्शियन्",
+       "special-characters-group-hebrew": "हिब्रू",
+       "special-characters-group-bangla": "वङ्गलिपि",
+       "special-characters-group-tamil": "तमिल्",
+       "special-characters-group-telugu": "तेलुगु",
+       "special-characters-group-sinhala": "सिंहल",
+       "special-characters-group-gujarati": "गुजराती",
+       "special-characters-group-devanagari": "देवनागरी",
+       "special-characters-group-thai": "थाई",
+       "special-characters-group-lao": "लाओ",
+       "special-characters-group-khmer": "खमेर"
 }
index d2e05ef..ca59d02 100644 (file)
@@ -11,7 +11,8 @@
                        "Urhixidur",
                        "아라",
                        "Purodha",
-                       "Krivoshapkina"
+                       "Krivoshapkina",
+                       "Macofe"
                ]
        },
        "tog-underline": "Сигэлэри аннынан тардыы:",
        "disclaimers": "Бүк охсунуу",
        "disclaimerpage": "Project:Бүк охсунуу",
        "edithelp": "Уларытааччыларга көмө",
+       "helppage-top-gethelp": "Көмө",
        "mainpage": "Сүрүн сирэй",
        "mainpage-description": "Сүрүн сирэй",
        "policy-url": "Project:Сиэрэ",
        "notextmatches": "Ыстатыйалар истэрэ хатыламмат",
        "prevn": "инники {{PLURAL:$1|$1}}",
        "nextn": "аныгыскы {{PLURAL:$1|$1}}",
+       "prev-page": "инники сирэй",
+       "next-page": "аныгыскы сирэй",
        "prevn-title": "Бу иннинээҕи $1 {{PLURAL:$1|сурук|суруктар}}",
        "nextn-title": "Бу кэннинээҕи $1 {{PLURAL:$1|сурук|суруктар}}",
        "shown-title": "Сирэйгэ $1 {{PLURAL:$1|суругу|суруктары}} көрдөр",
        "prefs-personal": "Кыттааччы туруоруулара",
        "prefs-rc": "Кэлиҥҥи уларытыылар",
        "prefs-watchlist": "Кэтээһин",
+       "prefs-editwatchlist": "Кэтэбил тиһилигин уларытыы",
+       "prefs-editwatchlist-label": "Кэтэбилиҥ тиһилигин уларытыы:",
+       "prefs-editwatchlist-edit": "Кэтэбилиҥ тиһилигин көрүү, ааттары сотуу",
+       "prefs-editwatchlist-raw": "Кэтэбил тиһилигин тиэкис курдук уларытыы",
+       "prefs-editwatchlist-clear": "Кэтэбил тиһилигин ыраастаа",
        "prefs-watchlist-days": "Хас хонуктааҕы уларыйыылар кэтээһин испииһэгэр көстөллөрө:",
        "prefs-watchlist-days-max": "Уһаабыта {{PLURAL:$1|биир күн|$1 күн}}",
        "prefs-watchlist-edits": "Хас уларытыыны тупсарыллыбыт кэтээһиҥҥэ көрдөрөрө:",
        "right-override-export-depth": "сирэйдэри таһаарааһын (экспортааһын), ситимнээх сирэйдэри 5-с таһымҥа дылы холбоон туран",
        "right-sendemail": "Атын кыттааччыларга эл. почтаны ыытарга",
        "right-passwordreset": "Киирии тылы почта нөҥүө уларытыыны көрүү",
+       "right-managechangetags": "[[Special:Tags|Бэлиэлэри]] билии олоҕуттан ылыы уонна сотуу",
        "newuserlogpage": "Кыттааччылары бэлиэтиир сурунаал",
        "newuserlogpagetext": "Соторутааҕыта бэлиэтэммит кыттааччылар.",
        "rightslog": "Кыттаачы бырааптарын сурунаала",
        "action-viewmyprivateinfo": "бэйэҥ тускунан көрүү",
        "action-editmyprivateinfo": "бэйэҥ тускунан суруллубуту уларыт",
        "action-editcontentmodel": "сирэй ис тутулун уларытыы",
+       "action-managechangetags": "билии олоҕор бэлиэлэри оҥоруу уонна сотуу",
        "nchanges": "$1 {{PLURAL:$1|уларытыы|уларытыылар}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|тиһэх сылдьыыгыттан}}",
        "enhancedrc-history": "устуоруйата",
        "import-rootpage-nosubpage": "\"$1\" тирэх сирэй аатын далыгар сирэй үөдүҥнэрэ (подстраницалар) көҥүллэммэттэр",
        "importlogpage": "Импорт сурунаала",
        "importlogpagetext": "Сирэйдэри историяларын кытта холбуу атын биикилэртэн импортааһын.",
-       "import-logentry-upload": "[[$1]] - билэттэн импортааһын",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|барыл|барыл баар}}",
-       "import-logentry-interwiki": "биикилэр ыккардыларынааҕы $1",
        "import-logentry-interwiki-detail": "барыта $2 барылтан $1 барыл",
        "javascripttest": "JavaScript тургутуу",
        "javascripttest-pagetext-noframework": "Бу сирэй JavaScript тургутууларга анаммыт.",
        "tooltip-pt-mycontris": "Суруйбут/уларыппыт сирэйдэриҥ тиһиктэрэ",
        "tooltip-pt-login": "Манна бэйэҕин билиһиннэриэххин сөп (булгуччута суох).",
        "tooltip-pt-logout": "Тахсыы",
+       "tooltip-pt-createaccount": "Манна киирэргэ бэлиэтэнэр уонна куруук ол аатынан киирэр ордук; ол булгуччута суох",
        "tooltip-ca-talk": "Ыстатыйаны ырытыы",
        "tooltip-ca-edit": "Бу сирэйи уларытыахха сөп. Бука диэн бастаан хайдах буоларын көрөн баран уларыт.",
        "tooltip-ca-addsection": "Саҥа салааны саҕалааһын",
        "version-parser-function-hooks": "Синтаксииһы анаалыстыыр тэрил функциятын перехватчиктара",
        "version-hook-name": "Перехватчик аата",
        "version-hook-subscribedby": "Суруттарыыта:",
-       "version-version": "(Торум $1)",
+       "version-version": "($1)",
+       "version-no-ext-name": "[аата суох]",
        "version-license": "MediaWiki лиссиэнсийэтэ",
        "version-ext-license": "Лиссиэнсийэ",
        "version-ext-colheader-name": "Кэтирэтии",
+       "version-skin-colheader-name": "Тас көстүү",
        "version-ext-colheader-version": "Барыл",
        "version-ext-colheader-license": "Лиссиэнсийэ",
        "version-ext-colheader-description": "Быһаарыыта",
        "version-entrypoints": "Киирэр аадырыстар (URL)",
        "version-entrypoints-header-entrypoint": "Киирии сирэ",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Олордуллубут бибилэтиэкэлэр",
+       "version-libraries-library": "Бибилэтиэкэ",
        "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-active-no": "Суох",
        "tags-edit": "уларытыы",
        "tags-hitcount": "$1 {{PLURAL:$1|уларытыы|уларытыылар}}",
+       "tags-create-tag-name": "Бэлиэ аата:",
+       "tags-create-reason": "Төрүөтэ:",
+       "tags-create-submit": "Оҥоруу",
+       "tags-create-no-name": "Бэлиэ аатын суруйуохтааххын.",
+       "tags-create-invalid-chars": "Бэлиэ аатыгар сопутуой (<code>,</code>) эбэтэр слэш  (<code>/</code>) буолуохтаах.",
+       "tags-create-invalid-title-chars": "Тиэк аатыгар сирэй баһыгар туттуллуо суохтаах бэлиэ киириэ суохтаах",
+       "tags-create-already-exists": "«$1» тиэк хайыы-үйэ баар эбит.",
        "comparepages": "Сирэйдэри тэҥнииргэ",
        "compare-page1": "Бастакы сирэй",
        "compare-page2": "Иккис сирэй",
        "logentry-rights-rights": "$3 бөлөхтөргө киириитин $1 уларыппыт: манныктан $4 манныкка $5",
        "logentry-rights-rights-legacy": "$3 бөлөхтөргө киириитин $1 уларыппыт",
        "logentry-rights-autopromote": "$1 мантан $4 манна $5 көһөрүллүбүт",
+       "logentry-upload-upload": "$1 {{GENDER:$2|укпут}} $3",
        "rightsnone": "(суох)",
        "revdelete-summary": "уларытыылар туһунан",
+       "feedback-adding": "Сирэй туһунан санаа этии...",
+       "feedback-bugcheck": "Бэрт! Ол гынан баран [$1 биллэр алҕастарын] тиһилигэр майгынныыр сурук суоҕун тургут.",
+       "feedback-bugnew": "Мин тургуттум. Атын алҕас туһунан",
        "feedback-bugornote": "Туох кыһалҕаны көрсүбүккүн сиһилии суруйар кыахтаах буоллаххына, бука диэн [$1 алҕас туһунан биллэр].\nОл сатаммат буоллаҕына бу судургу форманы толор. Эн этииҥ ааккын уонна туһанар браузерыҥ аатын кытта манна «[$3 $2]» бэчээттэниэ.",
-       "feedback-subject": "Тиэмэ:",
-       "feedback-message": "Сурук:",
        "feedback-cancel": "Салҕаама",
-       "feedback-submit": "Санаа этиитэ",
-       "feedback-adding": "Сирэй туһунан санаа этии...",
+       "feedback-close": "Сатанна",
        "feedback-error1": "Алҕас: API биллибэт түмүгэ",
        "feedback-error2": "Алҕас: Көннөрүү сатаммата",
        "feedback-error3": "Алҕас: API хоруйдаабата",
+       "feedback-message": "Сурук:",
+       "feedback-subject": "Тиэмэ:",
+       "feedback-submit": "Ыыт",
        "feedback-thanks": "Махтал! Эн санааҥ бу сирэйгэ \"[$2 $1]\" сурулунна.",
-       "feedback-close": "Сатанна",
-       "feedback-bugcheck": "Бэрт! Ол гынан баран [$1 биллэр алҕастарын] тиһилигэр майгынныыр сурук суоҕун тургут.",
-       "feedback-bugnew": "Мин тургуттум. Атын алҕас туһунан",
        "searchsuggest-search": "Көрдөөһүн",
        "searchsuggest-containing": "тыл баар ыстатыйалара...",
        "api-error-badaccess-groups": "Эн бу биикигэ билэ киллэрэриҥ хааччахтаммыт.",
        "mediastatistics-header-text": "Тиэкис",
        "mediastatistics-header-executable": "Толоруллар",
        "mediastatistics-header-archive": "Ыгыллыбыт формааттар",
-       "json-warn-trailing-comma": "JSON иһиттэн $1 ордук соппутуой сотуллубут"
+       "json-warn-trailing-comma": "JSON иһиттэн $1 ордук соппутуой сотуллубут",
+       "special-characters-group-latin": "Латыынныы",
+       "special-characters-group-latinextended": "Латыынныы кэтирэтиллибиттэр",
+       "special-characters-group-ipa": "МФА (IPA)",
+       "special-characters-group-symbols": "Бэлиэлэр",
+       "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-telugu": "Телугу",
+       "special-characters-group-sinhala": "Сингаал",
+       "special-characters-group-gujarati": "Гудьараат",
+       "special-characters-group-thai": "Таай",
+       "special-characters-group-lao": "Лаос",
+       "special-characters-group-khmer": "Кхмер"
 }
index 3c5c6fe..4eb5167 100644 (file)
        "version": "Versione",
        "version-specialpages": "Pàginas ispetziales",
        "version-other": "Àteru",
-       "version-version": "(Versione $1)",
+       "version-version": "($1)",
        "version-license": "Licèntzia MediaWiki",
        "version-ext-license": "Licèntzia",
        "version-ext-colheader-version": "Versione",
        "logentry-upload-revert": "$1 {{GENDER:$2|carrigadu}} $3",
        "rightsnone": "(nisciunu)",
        "revdelete-summary": "ogetu de sa modìfica",
-       "feedback-subject": "Ogetu:",
-       "feedback-message": "Messàgiu:",
        "feedback-cancel": "Annudda",
        "feedback-close": "Fatu",
+       "feedback-message": "Messàgiu:",
+       "feedback-subject": "Ogetu:",
        "searchsuggest-search": "Chirca",
        "expand_templates_ok": "OK",
        "expand_templates_preview": "Antiprima",
index 8401963..39bcc39 100644 (file)
                        "Urhixidur",
                        "לערי ריינהארט",
                        "아라",
-                       "Pippinu"
+                       "Pippinu",
+                       "Macofe"
                ]
        },
        "tog-underline": "Suttalinia li culligamenti:",
        "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",
-       "tog-extendwatchlist": "Ammustra tutti i canciamenti ntâ lista talïata, nun sulu u cchiu' ricenti",
-       "tog-usenewrc": "Raggruppa li canciamenti pi' pàggina ntâ lista dî canciamenti ricenti e ntâ lista talïata",
+       "tog-extendwatchlist": "Ammustra tutti i canciamenti ntâ lista taliata, nun sulu u cchiu' ricenti",
+       "tog-usenewrc": "Raggruppa li canciamenti pi' pàggina ntâ lista dî canciamenti ricenti e ntâ lista taliata",
        "tog-numberheadings": "Nummirazzioni autumàtica dî tìtuli di paràgrafu",
        "tog-showtoolbar": "Ammustra la barra dî strumenta pû canciamentu",
        "tog-editondblclick": "Duppiu click pi canciari l'artìculu",
        "tog-editsectiononrightclick": "Attiva lu canciamentu di na sizzioni quannu si clicca cu' buttuni drittu supra a lu so tìtulu",
-       "tog-watchcreations": "Agghiunci li pàggini chi' creu e li file chi' càrricu â me lista talïata",
-       "tog-watchdefault": "Agghiunci li pàggini e li file chi' canciu â me lista talïata",
-       "tog-watchmoves": "Agghiunci li pàggini e li file chi' spostu â me lista talïata",
-       "tog-watchdeletion": "Agghiunci li pàggini e li file chi' cancellu â me lista talïata",
-       "tog-watchrollback": "Agghiunci li pàggini unni fici nu canciu n'arreri â me lista talïata",
+       "tog-watchcreations": "Agghiunci li pàggini chi' creu e li file chi' càrricu â me lista taliata",
+       "tog-watchdefault": "Agghiunci li pàggini e li file chi' canciu â me lista taliata",
+       "tog-watchmoves": "Agghiunci li pàggini e li file chi' spostu â me lista taliata",
+       "tog-watchdeletion": "Agghiunci li pàggini e li file chi' cancellu â me lista taliata",
+       "tog-watchrollback": "Agghiunci li pàggini unni fici nu canciu n'arreri â me lista taliata",
        "tog-minordefault": "Marca ogni' canciamentu comu nicu pi' mpustazzioni pridifinuta",
        "tog-previewontop": "Ammustra l'antiprima avanti dâ casedda di canciamentu",
        "tog-previewonfirst": "Ammustra l'antiprima ô primu canciamentu",
-       "tog-enotifwatchlistpages": "Mànnami nu missàggiu di posta elittrònica quannu na pàggina o nu file dâ me lista talïata subbìsciunu canciamenti",
+       "tog-enotifwatchlistpages": "Mànnami nu missàggiu di posta elittrònica quannu na pàggina o nu file dâ me lista taliata subbìsciunu canciamenti",
        "tog-enotifusertalkpages": "Mànnami nu missaggiu di posta elettrònica quannu la me pàggina di discussioni veni canciata",
        "tog-enotifminoredits": "Mànnami nu missaggiu di posta elittrònica macari pi li canciamenti nichi di pàggini e file",
        "tog-enotifrevealaddr": "Ammustra lu me nnirizzu di posta elittrònica ntê missaggi di nutifica",
        "tog-fancysig": "Intèrpitra la firma comu wikitestu (senza liami automaticu)",
        "tog-uselivepreview": "Attiva l'antiprima in diretta",
        "tog-forceeditsummary": "Dumanna cunfirma siddu lu riassuntu dûn canciamentu è vacanti",
-       "tog-watchlisthideown": "Ammuccia li me canciamenti ntâ lista talïata",
-       "tog-watchlisthidebots": "Ammuccia li canciamenti dî bot ntâ lista talïata",
-       "tog-watchlisthideminor": "Ammuccia li canciamenti nichi ntâ lista talïata",
-       "tog-watchlisthideliu": "Ammuccia li canciamenti di l'utilizzatura riggistrati ntâ lista talïata",
-       "tog-watchlisthideanons": "Ammuccia li canciamenti di l'utilizzatura anònimi ntâ lista talïata",
-       "tog-watchlisthidepatrolled": "Ammuccia li mudìfichi battugghiati ntâ lista talïata",
+       "tog-watchlisthideown": "Ammuccia li me canciamenti ntâ lista taliata",
+       "tog-watchlisthidebots": "Ammuccia li canciamenti dî bot ntâ lista taliata",
+       "tog-watchlisthideminor": "Ammuccia li canciamenti nichi ntâ lista taliata",
+       "tog-watchlisthideliu": "Ammuccia li canciamenti di l'utilizzatura riggistrati ntâ lista taliata",
+       "tog-watchlisthideanons": "Ammuccia li canciamenti di l'utilizzatura anònimi ntâ lista taliata",
+       "tog-watchlisthidepatrolled": "Ammuccia li mudìfichi battugghiati ntâ lista taliata",
        "tog-ccmeonemails": "Mànnami na copia dî missaggi spiduti a l'àutri utenti",
        "tog-diffonly": "Nun ammustrari lu cuntinutu dî pàggini sutta dî cunfrunti tra virsioni",
        "tog-showhiddencats": "Ammustra li catigurìi ammucciati",
        "jumpto": "Vai a':",
        "jumptonavigation": "navigazzioni",
        "jumptosearch": "cerca",
-       "view-pool-error": "Nni dispiaci, ma li server nta stu mumentu sunnu troppu carrichi.\nTroppi utenti stannu circannu di talïari sta pàggina.\nPi' favuri spetta n'anticchia prima di pruvari n'autra vota a talïari sta pàggina.\n\n$1",
-       "generic-pool-error": "Nni dispiaci, ma li server nta stu mumentu sunnu troppu càrrichi.\nTroppi utenti stannu circannu di talïari sta risorsa.\nPi' favuri spetta n'anticchia prima di pruvari n'autra vota a talïari sta risorsa.",
+       "view-pool-error": "Nni dispiaci, ma li server nta stu mumentu sunnu troppu carrichi.\nTroppi utenti stannu circannu di taliari sta pàggina.\nPi' favuri spetta n'anticchia prima di pruvari n'autra vota a taliari sta pàggina.\n\n$1",
+       "generic-pool-error": "Nni dispiaci, ma li server nta stu mumentu sunnu troppu càrrichi.\nTroppi utenti stannu circannu di taliari sta risorsa.\nPi' favuri spetta n'anticchia prima di pruvari n'autra vota a taliari sta risorsa.",
        "pool-timeout": "Tempu scadutu aspittannu lu sbloccu",
        "pool-queuefull": "La cuda dû pool è china",
        "pool-errorunknown": "Erruri scanusciutu",
        "internalerror_info": "Erruri nternu: $1",
        "filecopyerror": "Nun fu' pussìbbili cupiari lu file \"$1\" nta \"$2\".",
        "filerenameerror": "Nun fu' pussìbbili canciari lu nomu dû file di \"$1\" a' \"$2\".",
-       "filedeleteerror": "Nun fu' pussìbbili cancillari lu file \"$1\".",
-       "directorycreateerror": "Nun fu' pussìbbili crïari la cartella \"$1\".",
+       "filedeleteerror": "Nun fu pussìbbili cancillari lu file \"$1\".",
+       "directorycreateerror": "Nun fu pussìbbili criari la cartella \"$1\".",
        "directoryreadonlyerror": "La cartella \"$1\" è a' sula littura.",
        "directorynotreadableerror": "La cartella \"$1\" nun è liggìbbili.",
-       "filenotfound": "Nun fu' pussìbbili truvari lu file \"$1\".",
+       "filenotfound": "Nun fu pussìbbili truvari lu file \"$1\".",
        "unexpected": "Valuri nun privistu: \"$1\"=\"$2\".",
-       "formerror": "Erruri: Nun fu' pussìbbili mannari lu mòdulu.",
+       "formerror": "Erruri: Nun fu pussìbbili mannari lu mòdulu.",
        "badarticleerror": "St'opirazzioni nun è cunsintuta nta sta pàggina.",
        "cannotdelete": "Nun fu' pussìbbili cancillari la pàggina o lu file \"$1\".\nPutissi aviri statu già cancillatu di quarchidun'autru.",
        "cannotdelete-title": "Nun è pussìbbili cancillari la pàggina \"$1\"",
        "delete-hook-aborted": "Cancillazzioni annullata di n'hook.\nNun desi nudda spiegazzioni.",
-       "no-null-revision": "Non fu' pussibbili crïari na virsioni nulla pâ paggina \"$1\"",
+       "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.",
        "perfcached": "Li dati ca sèquinu sunnu stratti di na ''cache'' e putissiru nun èssiri aggiurnati. Ntâ ''cache'' {{PLURAL:$1|capi un risultatu|càpunu $1 risultati}} massimu.",
        "userlogin-joinproject": "Scrìviti a' {{SITENAME}}",
        "nologin": "Nun hai nu cuntu? $1.",
        "nologinlink": "Crea nu cuntu",
-       "createaccount": "Crïazzioni dûn cuntu",
+       "createaccount": "Criazzioni dûn cuntu",
        "gotaccount": "Già hai nu cuntu? $1.",
        "gotaccountlink": "Trasi",
        "userlogin-resetlink": "Ti scurdasti li dittagghî pâ trasuta?",
        "createacct-realname": "Nomu veru (facurtativu)",
        "createaccountreason": "Mutivu:",
        "createacct-reason": "Mutivu",
-       "createacct-reason-ph": "Pirchì stai crïannu n'àutru cuntu",
+       "createacct-reason-ph": "Pirchì stai criannu n'àutru cuntu",
        "createacct-captcha": "Cuntrollu di sicurizza",
        "createacct-imgcaptcha-ph": "Nzirìsci lu testu ca vidi ccassupra",
        "createacct-submit": "Crea lu to cuntu",
        "badretype": "Li password chi' mittisti nun currispùnnunu tra d'iddi.",
        "userexists": "Lu nomu utenti nziritu è già usatu.\nTi prijamu pirciò di vuliri scègghîri nu nomu utenti diffirenti.",
        "loginerror": "Erruri ntâ trasuta",
-       "createacct-error": "Erruri ntâ crïazzioni dû cuntu",
-       "createaccounterror": "Nun fu' pussìbbili crïari u cuntu: $1",
-       "nocookiesnew": "Lu cuntu utenti fu' crïatu, ma nun si' trasutu.\n{{SITENAME}} adòpira li cookie pi' gistiri li trasuti.\nTu hai i cookie disattivati.\nPi' favuri attìvili, e appoi trasi chî to nomu utenti e password novi.",
+       "createacct-error": "Erruri ntâ criazzioni dû cuntu",
+       "createaccounterror": "Nun fu pussìbbili criari u cuntu: $1",
+       "nocookiesnew": "Lu cuntu utenti fu' criatu, ma nun si' trasutu.\n{{SITENAME}} adòpira li cookie pi' gistiri li trasuti.\nTu hai i cookie disattivati.\nPi' favuri attìvili, e appoi trasi chî to nomu utenti e password novi.",
        "nocookieslogin": "{{SITENAME}} adòpira li cookie pi' gistiri li trasuti.\nTu hai i cookie disattivati.\nPi' favuri attìvili e prova n'autra vota.",
-       "nocookiesfornew": "Lu cuntu utenti nun fu' crïatu, picchì nun pòttimu cunfirmari la so orìggini.\nAssicuriti chi' hai i ''cookie'' attivati, ricarrica sta pàggina e prova n'autra vota.",
+       "nocookiesfornew": "Lu cuntu utenti nun fu' criatu, picchì nun pòttimu cunfirmari la so orìggini.\nAssicuriti chi' hai i ''cookie'' attivati, ricarrica sta pàggina e prova n'autra vota.",
        "noname": "Nun spicificasti nu nomu utenti vàlidu.",
        "loginsuccesstitle": "Trasuta rinisciuta",
        "loginsuccess": "<strong>Ora si' trasutu nta {{SITENAME}} comu \"$1\".</strong>",
        "eauthentsent": "Nu missaggiu e-mail di cunfirma fu' spidutu a lu nnirizzu nnicatu.\nPrima chi' ponnu èssiri mannati autri missaggi e-mail a' stu cuntu, è nicissariu sèquiri li struzzioni ca vi sunnu scritti, 'n modu di cunfirmari di èssiri li liggìttimi prupietarî di lu cuntu.",
        "throttled-mailpassword": "Nu missaggiu e-mail di azziramentu dâ password già havi statu mannatu nta {{PLURAL:$1|l'ultima ura|l'ultimi $1 uri}}. Pi' privèniri abbusi, si po' mannari nu missaggiu e-mail di azziramentu dâ password na vota sula ogni {{PLURAL:$1|ura|$1 uri}}.",
        "mailerror": "Erruri nta lu mannu dû missaggiu: $1",
-       "acct_creation_throttle_hit": "Visitaturi di sta wiki cû to stissu nnirizzu IP già hannu crïatu {{PLURAL:$1|un cuntu|$1 cunti}} nta sta jurnata, chi' è lu massimu pirmissu pi' stu pirìudu di tempu.\nPi' ciò, com'ad ora li visitaturi ca usunu stu nnirizzu IP nun ponnu crïari autri cunti.",
+       "acct_creation_throttle_hit": "Visitaturi di sta wiki cû to stissu nnirizzu IP già hannu criatu {{PLURAL:$1|un cuntu|$1 cunti}} nta sta jurnata, chi' è lu massimu pirmissu pi' stu pirìudu di tempu.\nPi' ciò, com'ad ora li visitaturi ca usunu stu nnirizzu IP nun ponnu criari autri cunti.",
        "emailauthenticated": "Lu to nnirizzu di posta elittrònica fu' cunfirmatu lu $2 ê $3.",
        "emailnotauthenticated": "Lu to nnirizzu di posta elittrònica ancora nun havi statu cunfirmatu.\nNun ti sarrannu mannati missaggi di posta elittrònica pi' sti funzioni.",
        "noemailprefs": "Innicari nu nnirizzu di posta elittrònica p'attivari sti funzioni.",
        "invalidemailaddress": "Lu nnirizzu di posta elittrònica nun pò èssiri accittatu picchì pari chi havi un furmatu nun vàlidu.\nPi favuri nzirisci nu nnirizzu vàlidu o puru svacanta la casedda.",
        "cannotchangeemail": "Li nnirizzi di posta elittrònica nun ponnu èssiri canciati nta sta wiki.",
        "emaildisabled": "Stu situ nun po' mannari missaggi di posta elittrònica.",
-       "accountcreated": "Cuntu crïatu",
-       "accountcreatedtext": "Fu' crïatu un cuntu novu pi' l'utenti [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|msg]]).",
-       "createaccount-title": "Crïazzioni di nu cuntu pi' {{SITENAME}}",
+       "accountcreated": "Cuntu criatu",
+       "accountcreatedtext": "Fu' criatu un cuntu novu pi' l'utenti [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|msg]]).",
+       "createaccount-title": "Criazzioni di nu cuntu pi' {{SITENAME}}",
        "createaccount-text": "Qualcuno criau n'accessu a {{SITENAME}} ($4) a nomu di $2, associatu cu stu ndirizzu di posta elettronica. La password pi l'utenti \"$2\" è mpustata a \"$3\". È opportunu trasiri quantu prima e canciari la password subbutu.\n\nSi l'accessu fu criatu pi sbagghiu, si può gnurari stu missaggiu.",
        "login-throttled": "Hai fattu troppi tintativi di trasuta.\nPi' favuri spetta $1 prima di pruvari n'autra vota.",
        "login-abort-generic": "La trasuta nun arriniscìu - Annullata",
        "newpassword": "Password nova:",
        "retypenew": "Scrivi n'àutra vota la password:",
        "resetpass_submit": "Mposta la password e trasi",
-       "changepassword-success": "La to password fu' canciata!",
+       "changepassword-success": "La to password fu canciata!",
        "changepassword-throttled": "Hai fattu troppi tintativi di trasuta.\nPi' favuri spetta $1 prima di pruvari n'autra vota.",
        "resetpass_forbidden": "Li password nun si ponnu canciari",
        "resetpass-no-info": "Pi tràsiri nta sta pàggina hà' èssiri riggistratu.",
        "passwordreset-emailtext-user": "L'utenti $1 supra a' {{SITENAME}} fici dumanna pi' l'azziramentu dâ to password pi' {{SITENAME}} ($4). {{PLURAL:$3|U siguenti cuntu utenti è assuciatu|I siguenti cunti utenti su' assuciati}} cu' stu nnirizzu di posta elittrònica:\n\n$2\n\n{{PLURAL:$3|Sta password timpurania|Sti password timpuranii}} scàdunu tra {{PLURAL:$5|un jornu|$5 jorna}}.\nOra tu avissi a' tràsiri e scègghîri na password nova. Si' fu' quarchidun'autru a' fari sta richiesta e nun tu, o si' ti ricurdasti a to password origginali e nâ voi canciari cchiu', poi gnurari stu missaggiu e cuntinuari a' adupirari a to password vecchia.",
        "passwordreset-emailelement": "Nomu utenti: $1\nPassword timpurania: $2",
        "passwordreset-emailsent": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu' mannatu.",
-       "passwordreset-emailsent-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu' mannatu, cû cuntinutu chi' si po' talïari ccassutta.",
-       "passwordreset-emailerror-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu' cumpilatu, cû cuntinutu chi' si po' talïari ccassutta, però a so spidizzioni a' l'utenti {{GENDER:$2|user}} nun riniscìu: $1",
+       "passwordreset-emailsent-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu' mannatu, cû cuntinutu chi' si po' taliari ccassutta.",
+       "passwordreset-emailerror-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu' cumpilatu, cû cuntinutu chi' si po' taliari ccassutta, però a so spidizzioni a' l'utenti {{GENDER:$2|user}} nun riniscìu: $1",
        "changeemail": "Canciu dû nnirizzu di posta elittrònica",
        "changeemail-text": "Jinchi stu mòdulu pi' canciari u to nnirizzu di posta elittrònica. Hâ' nziriri a to password pi' cunfirmari stu canciamentu.",
        "changeemail-no-info": "Hâ' jèssiri trasutu p'aviri accessu direttu a' sta pàggina.",
        "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 talïata]]",
+       "resettokens-watchlist-token": "Token pû feed web (Atom/RSS) dî [[Special:Watchlist|canciamenti ê pàggini ntâ to lista taliata]]",
        "resettokens-done": "I token furu azzirati.",
        "resettokens-resetbutton": "Azzera i token scigghiuti",
        "bold_sample": "Grassettu",
        "preview": "Antiprima",
        "showpreview": "Ammustra l'antiprima",
        "showdiff": "Ammustra li canciamenti",
-       "blankarticle": "<strong>Accura:</strong> La pàggina chi' stai criannu è vacanti.\nSi' clicchi \"{{int:savearticle}}\" n'autra vota, la pàggina veni crïata senza nuddu cuntinutu.",
+       "blankarticle": "<strong>Accura:</strong> La pàggina chi' stai criannu è vacanti.\nSi' clicchi \"{{int:savearticle}}\" n'autra vota, la pàggina veni criata senza nuddu cuntinutu.",
        "anoneditwarning": "<strong>Accura:</strong> Nun si' trasutu. Lu to nnirizzu IP diventa visìbbili pubblicamenti quannu fai nu canciamentu. Si' <strong>[$1 trasi]</strong> o puru <strong>[$2 crei nu cuntu]</strong>, li canciamenti chi' fai vènunu attribbuiti ô to nomu utenti, sparti di autri vantaggi.",
        "anonpreviewwarning": "''Nun trasisti comu utiliggaturi loggatu. Sarbannu, lu tò nnirizzu IP veni arriggistratu ntâ storia dî canciamenti.''",
        "missingsummary": "'''Accura:''' Nun hà statu spicificatu l'uggettu di stu canciamentu. Primennu di novu '''Sarva''' lu canciamentu veni sarvatu cu l'uggettu vacanti.",
        "blockednoreason": "nuddu mutivu datu",
        "whitelistedittext": "Pi' favuri $1 pi' canciari li pàggini.",
        "confirmedittext": "Hâ' cunvalidari lu to nnirizzu di posta elittrònica avanti di putiri canciari li pàggini.\nPi' favuri mposta e cunvàlida lu nnirizzu passannu dî [[Special:Preferences|to prifirenzi]].",
-       "nosuchsectiontitle": "La sizzioni nun fu' truvata",
-       "nosuchsectiontext": "Pruvasti a canciari na sizzioni chi' nun esisti.\nForsi ca fu' spustata o cancillata na mentri ca stàvutu talïannu la pàggina.",
+       "nosuchsectiontitle": "La sizzioni nun fu truvata",
+       "nosuchsectiontext": "Pruvasti a canciari na sizzioni chi' nun esisti.\nForsi ca fu' spustata o cancillata na mentri ca stàvutu taliannu la pàggina.",
        "loginreqtitle": "S'havi a' tràsiri",
        "loginreqlink": "trasi",
-       "loginreqpagetext": "Pi' favuri $1 pi' talïari autri pàggini.",
+       "loginreqpagetext": "Pi' favuri $1 pi' taliari autri pàggini.",
        "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' crïari 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 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.",
        "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.",
        "token_suffix_mismatch": "'''Lu canciamentu nun fu sarvatu pirchì lu client ammustrau di gèstiri 'n modu sbagghiatu li caràttiri di puntiggiatura nta lu token assuciatu a iddu. P'evitari na curruzzioni pussìbbili dô testu dâ pàggina, fu rifiutatu tuttu lu canciamentu. Sta situazzioni pò virificàrisi, certi voti, quannu s'adòpiranu arcuni sirvizza di proxy anònimi via web chi prisèntanu bug.'''",
        "edit_form_incomplete": "<strong>Quarchi' parti dû mòdulu pâ mudìfica nun arrivau ô ''server''; cuntrolla bonu chi' tutti i to canciamenti su' ntatti e prova n'autra vota.</strong>",
        "editing": "Canciamentu di $1",
-       "creating": "Crïazzioni di $1",
+       "creating": "Criazzioni di $1",
        "editingsection": "Canciamentu di $1 (sizzioni)",
        "editingcomment": "Canciamentu di $1 (nova sizzioni)",
        "editconflict": "Cunflittu d'edizzioni: $1",
        "protectedpagewarning": "<strong>Accura: Sta pàggina fu' prutetta a' manera chi' sulu l'utenti cu' privileggi d'amministraturi a ponnu canciari.</strong>\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
        "semiprotectedpagewarning": "<strong>Nota:</strong> Sta pàggina fu' prutetta a' manera chi' sulu l'utenti riggistrati la ponnu canciari.\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
        "cascadeprotectedwarning": "<strong>Accura:</strong> Sta pàggina havi statu bluccata di manera ca sulu l'utenti cu' privileggi di amministraturi la ponnu canciari, pirchì veni nclusa {{PLURAL:$1|nta siquente pàggina ca havi statu prutiggiuta|ntê siquenti pàggini ca hannu statu prutiggiuti}} a' cascata:",
-       "titleprotectedwarning": "<strong>Accura: Sta pàggina fu' prutetta a' manera chi' giuvunu [[Special:ListGroupRights|privileggi spicìfici]] pi' crïàrila.</strong>\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
+       "titleprotectedwarning": "<strong>Accura: Sta pàggina fu' prutetta a' manera chi' giuvunu [[Special:ListGroupRights|privileggi spicìfici]] pi' criàrila.</strong>\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
        "templatesused": "{{PLURAL:$1|Template adupiratu|Template adupirati}} nta sta pàggina:",
        "templatesusedpreview": "{{PLURAL:$1|Template adupiratu|Template adupirati}} nta st'antiprima:",
        "templatesusedsection": "{{PLURAL:$1|Template adupiratu|Template adupirati}} nta sta sizzioni:",
        "template-semiprotected": "(semiprutettu)",
        "hiddencategories": "Sta pàggina apparteni a' {{PLURAL:$1|na catigurìa ammucciata|$1 catigurìi ammucciati}}:",
        "edittools": "<!-- Chistu testu cumpari sutta li moduli di canciu e carricamentu. -->",
-       "nocreatetext": "{{SITENAME}} limitau la pussibbilitati di crïari pàggini novi.\nPoi turnari 'n arreri e canciari na pàggina già esistenti, o puru [[Special:UserLogin|tràsiri o crïari nu cuntu novu]].",
-       "nocreate-loggedin": "Nun hai lu pirmissu pi' crïari pàggini novi.",
+       "nocreatetext": "{{SITENAME}} limitau la pussibbilitati di criari pàggini novi.\nPoi turnari 'n arreri e canciari na pàggina già esistenti, o puru [[Special:UserLogin|tràsiri o criari nu cuntu novu]].",
+       "nocreate-loggedin": "Nun hai lu pirmissu pi' criari pàggini novi.",
        "sectioneditnotsupported-title": "Nun è suppurtatu lu canciamentu pi' sizzioni",
        "sectioneditnotsupported-text": "Nta sta pàggina nun è suppurtatu lu canciamentu pi' sizzioni.",
        "permissionserrors": "Erruri di pirmissu",
        "moveddeleted-notice": "Sta pàggina fu scancillata. La lista di li scancillazzioni e spustamenti veni ammustrata di sècutu pi nfurmazzioni.",
        "log-fulllog": "Talìa lu riggìstru cumpletu",
        "edit-hook-aborted": "Canciamentu annullatu di n'hook.\nNun desi nudda spiegazzioni.",
-       "edit-gone-missing": "Nun si po' aggiurnari la pàggina.\nPari ca fu' cancillata.",
+       "edit-gone-missing": "Nun si po' aggiurnari la pàggina.\nPari ca fu cancillata.",
        "edit-conflict": "Cunflittu d'edizzioni.",
        "edit-no-change": "La to mudìfica fu' gnurata pirchì nun foru appurtati canciamenti ntô testu.",
-       "postedit-confirmation-created": "La pàggina fu' crïata.",
-       "postedit-confirmation-restored": "La pàggina fu' ripristinata.",
-       "postedit-confirmation-saved": "Lu to canciamentu fu' sarvatu.",
-       "edit-already-exists": "Nun fu' pussìbbili crïari na pàggina nova.\nGià esisti.",
+       "postedit-confirmation-created": "La pàggina fu criata.",
+       "postedit-confirmation-restored": "La pàggina fu ripristinata.",
+       "postedit-confirmation-saved": "Lu to canciamentu fu sarvatu.",
+       "edit-already-exists": "Nun fu' pussìbbili criari na pàggina nova.\nGià esisti.",
        "defaultmessagetext": "Testu dû missaggiu pridifinutu",
        "content-failed-to-parse": "Anàlisi sintàttica dû cuntinutu $2 pû mudellu $1 nun rinisciuta: $3",
        "invalid-content-data": "Dati nun vàlidi ntô cuntinutu",
        "undo-success": "Lu canciamentu pò essiri annullatu.\nVirificati lu paraguni ccà sutta p'accuràrivi ca lu cuntinutu è chiddu addisiatu e doppu sarvati la pàggina pi cumplitari l'annullamentu.",
        "undo-failure": "Lu canciamentu nun pò èssiri annullatu a càusa d'un cunflittu cu li canciamenti ntirmedi.",
        "undo-norev": "Lu canciamentu nun pò essiri annullatu pirchì nun esisti o fù cancillato.",
-       "undo-nochange": "Pari chi' u canciamentu già fu' annullatu.",
+       "undo-nochange": "Pari chi' lu canciamentu già fu annullatu.",
        "undo-summary": "Annullatu lu canciamentu $1 di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussioni]])",
        "undo-summary-username-hidden": "Annullata a virsioni $1 fatta di n'utenti ammucciatu",
-       "cantcreateaccounttitle": "Mpussìbbili crïari un cuntu",
-       "cantcreateaccount-text": "La crïazzioni di cunti a' pàrtiri di stu nnirizzu IP (<strong>$1</strong>), fu' bluccata di [[User:$3|$3]].\n\nLa spiegazzioni data di $3 è <em>$2</em>",
-       "cantcreateaccount-range-text": "La crïazzioni di cunti a' pàrtiri dî nnirizzi IP nta l'intirvallu '''$1''', chi' cumprenni u to nnirizzu IP ('''$4'''), fu' bluccata di [[User:$3|$3]].\n\nLa spiegazzioni data di $3 è ''$2''",
+       "cantcreateaccounttitle": "Mpussìbbili criari un cuntu",
+       "cantcreateaccount-text": "La criazzioni di cunti a' pàrtiri di stu nnirizzu IP (<strong>$1</strong>), fu' bluccata di [[User:$3|$3]].\n\nLa spiegazzioni data di $3 è <em>$2</em>",
+       "cantcreateaccount-range-text": "La criazzioni di cunti a' pàrtiri dî nnirizzi IP nta l'intirvallu '''$1''', chi' cumprenni u to nnirizzu IP ('''$4'''), fu' bluccata di [[User:$3|$3]].\n\nLa spiegazzioni data di $3 è ''$2''",
        "viewpagelogs": "Talìa li riggìstra di sta pàggina",
        "nohistory": "Nun cc'è crunuluggìa dî canciamenti pi' sta pàggina.",
        "currentrev": "Virsioni currenti",
        "rev-deleted-user-contribs": "[nomu utenti o nnirizzu IP rimossi - canciamentu ammucciatu ntê cuntribbuti]",
        "rev-deleted-text-permission": "Sta virsioni dâ pàggina hà statu '''cancillata'''.\nCunzurtari lu [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log di cancillazzioni] pi ultiriuri dittagghi.",
        "rev-suppressed-text-permission": "Sta virsioni dâ pàggina fu' <strong>supprimuta</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
-       "rev-deleted-text-unhide": "Sta virsioni dâ pàggina fu' <strong>cancillata</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].\nAncora poi [$1 talïari sta virsioni] si' voi prucèdiri.",
-       "rev-suppressed-text-unhide": "Sta virsioni dâ pàggina fu' <strong>supprimuta</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].\nAncora poi [$1 talïari sta virsioni] si' voi prucèdiri.",
-       "rev-deleted-text-view": "Sta virsioni dâ pàggina fu' <strong>cancillata</strong>.\nTu ancora a poi talïari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
-       "rev-suppressed-text-view": "Sta virsioni dâ pàggina fu' <strong>supprimuta</strong>.\nTu ancora a poi talïari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
-       "rev-deleted-no-diff": "Nun si po' talïari stu cunfruntu tra virsioni pirchì na revisioni fu <strong>cancillata</strong>.\nSi ponnu a' vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
-       "rev-suppressed-no-diff": "Non poi talïari sta diffirenza picchì una dî virsioni fu' <strong>cancillata</strong>.",
-       "rev-deleted-unhide-diff": "Una dî virsioni di sta diffirenza fu' <strong>cancillata</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].\nAncora poi [$1 talïari sta diffirenza] si' voi prucèdiri.",
-       "rev-suppressed-unhide-diff": "Una dî virsioni di sta diffirenza fu' <strong>supprimuta</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].\nAncora poi [$1 talïari sta diffirenza] si' voi prucèdiri.",
-       "rev-deleted-diff-view": "Una dî virsioni di sta diffirenza fu' <strong>cancillata</strong>.\nTu sta diffirenza ancora a poi talïari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
-       "rev-suppressed-diff-view": "Una dî virsioni di sta diffirenza fu' <strong>supprimuta</strong>.\nTu sta diffirenza ancora a poi talïari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
+       "rev-deleted-text-unhide": "Sta virsioni dâ pàggina fu' <strong>cancillata</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].\nAncora poi [$1 taliari sta virsioni] si' voi prucèdiri.",
+       "rev-suppressed-text-unhide": "Sta virsioni dâ pàggina fu' <strong>supprimuta</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].\nAncora poi [$1 taliari sta virsioni] si' voi prucèdiri.",
+       "rev-deleted-text-view": "Sta virsioni dâ pàggina fu' <strong>cancillata</strong>.\nTu ancora a poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+       "rev-suppressed-text-view": "Sta virsioni dâ pàggina fu' <strong>supprimuta</strong>.\nTu ancora a poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
+       "rev-deleted-no-diff": "Nun si po' taliari stu cunfruntu tra virsioni pirchì na revisioni fu <strong>cancillata</strong>.\nSi ponnu a' vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+       "rev-suppressed-no-diff": "Non poi taliari sta diffirenza picchì una dî virsioni fu' <strong>cancillata</strong>.",
+       "rev-deleted-unhide-diff": "Una dî virsioni di sta diffirenza fu' <strong>cancillata</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].\nAncora poi [$1 taliari sta diffirenza] si' voi prucèdiri.",
+       "rev-suppressed-unhide-diff": "Una dî virsioni di sta diffirenza fu' <strong>supprimuta</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].\nAncora poi [$1 taliari sta diffirenza] si' voi prucèdiri.",
+       "rev-deleted-diff-view": "Una dî virsioni di sta diffirenza fu' <strong>cancillata</strong>.\nTu sta diffirenza ancora a poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+       "rev-suppressed-diff-view": "Una dî virsioni di sta diffirenza fu' <strong>supprimuta</strong>.\nTu sta diffirenza ancora la poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
        "rev-delundel": "cancia la visibbilità",
        "rev-showdeleted": "ammustra",
        "revisiondelete": "Cancella o annulla la cancillazzioni di virsioni",
        "prefs-user-pages": "Pàggini di l'utenti",
        "prefs-personal": "Prufilu di l'utenti",
        "prefs-rc": "Ùrtimi canciamenti",
-       "prefs-watchlist": "Lista talïata",
-       "prefs-watchlist-days": "Nùmmiru di jorna a' ammustrari ntâ lista talïata:",
+       "prefs-watchlist": "Lista taliata",
+       "prefs-watchlist-days": "Nùmmiru di jorna a' ammustrari ntâ lista taliata:",
        "prefs-watchlist-days-max": "Màssimu $1 {{PLURAL:$1|jornu|jorna}}",
-       "prefs-watchlist-edits": "Nùmmiru di canciamenti a' ammustrari ntâ lista talïata estinnuta:",
+       "prefs-watchlist-edits": "Nùmmiru di canciamenti a' ammustrari ntâ lista taliata estinnuta:",
        "prefs-watchlist-edits-max": "Nùmmiru màssimu: 1000",
-       "prefs-watchlist-token": "Token dâ me lista talïata:",
+       "prefs-watchlist-token": "Token dâ me lista taliata:",
        "prefs-misc": "Varî",
        "prefs-resetpass": "Cancia password",
        "prefs-changeemail": "Cancia nnirizzu di posta elittrònica",
        "recentchangesdays-max": "(màssimu $1 {{PLURAL:$1|jornu|jorna}})",
        "recentchangescount": "Nùmmiru di canciamenti a' ammustrari comu mpustazzioni pridifinuta:",
        "prefs-help-recentchangescount": "Si rifirisci a' l'ùrtimi canciamenti, li crunuluggìi e li riggistra.",
-       "prefs-help-watchlist-token2": "Chista è la chiavi sigreta pû feed web dâ to lista talïata.\nCu è jè ch'a canusci po' lèggiri la to lista talïata, dunca nâ diffunniri.\nSi' ti giuva, [[Special:ResetTokens|la poi azzirari]].",
+       "prefs-help-watchlist-token2": "Chista è la chiavi sigreta pû feed web dâ to lista taliata.\nCu è jè ch'a canusci po' lèggiri la to lista taliata, dunca nâ diffunniri.\nSi' ti giuva, [[Special:ResetTokens|la poi azzirari]].",
        "savedprefs": "Li to prifirenzi foru sarvati.",
        "timezonelegend": "Fusu urariu:",
        "localtime": "Ura lucali:",
        "grouppage-suppress": "{{ns:project}}:Supravisura",
        "right-read": "Lèggiri pàggini",
        "right-edit": "Canciari pàggini",
-       "right-createpage": "Crïari pàggini (chi' nun sunnu di discussioni)",
-       "right-createtalk": "Crïari pàggini di discussioni",
-       "right-createaccount": "Crïari cunti novi di l'utenti",
+       "right-createpage": "Criari pàggini (chi' nun sunnu di discussioni)",
+       "right-createtalk": "Criari pàggini di discussioni",
+       "right-createaccount": "Criari cunti novi di l'utenti",
        "right-minoredit": "Marcari canciamenti comu nichi",
        "right-move": "Spustari pàggini",
        "right-move-subpages": "Spustari pàggini chî so suttapàggini",
        "right-move-rootuserpages": "Spustari pàggini ràdica di l'utenti",
        "right-move-categorypages": "Spustari pàggini di catigurìa",
        "right-movefile": "Spustari file",
-       "right-suppressredirect": "Nun crïari rimanni ô postu dâ pàggina origginali quannu si spostunu pàggini",
+       "right-suppressredirect": "Nun criari rimanni ô postu dâ pàggina origginali quannu si spostunu pàggini",
        "right-upload": "Carricari file",
        "right-reupload": "Suprascrìviri file esistenti",
        "right-reupload-own": "Suprascrìviri file esistenti carricati dû stissu utenti",
        "right-undelete": "Annullari la cancillazzioni di pàggini",
        "right-suppressrevision": "Vìdiri, ammucciari e ammustrari virsioni spicìfichi di pàggini di quali utenti è jè",
        "right-viewsuppressed": "Vìdiri virsioni ammucciati a' quali utenti è jè",
-       "right-suppressionlog": "Talïari li riggistra privati",
+       "right-suppressionlog": "Taliari li riggistra privati",
        "right-block": "Bluccari autri utenti pi' nun fàricci fari canciamenti",
        "right-blockemail": "Bluccari n'utenti pi' nun fàricci mannari posta elittrònica",
        "right-hideuser": "Bluccari nu nomu utenti, ammucciannulu ô pùbblicu",
        "right-edituserjs": "Canciari li file JavaScript di l'àutri utenti",
        "right-editmyusercss": "Canciari li file CSS dû propiu utenti",
        "right-editmyuserjs": "Canciari li file JavaScript dû propiu utenti",
-       "right-viewmywatchlist": "Talïari la propia lista talïata",
-       "right-editmywatchlist": "Canciari la propia lista talïata. Nota chi' certi azzioni cci ponnu agghiùnciri pàggini macari senza di stu drittu.",
-       "right-viewmyprivateinfo": "Talïari li propî dati risirvati (ad esempiu lu nnirizzu di posta elittrònica e lu nomu veru)",
+       "right-viewmywatchlist": "Taliari la propia lista taliata",
+       "right-editmywatchlist": "Canciari la propia lista taliata. Nota chi' certi azzioni cci ponnu agghiùnciri pàggini macari senza di stu drittu.",
+       "right-viewmyprivateinfo": "Taliari li propî dati risirvati (ad esempiu lu nnirizzu di posta elittrònica e lu nomu veru)",
        "right-editmyprivateinfo": "Canciari li propî dati risirvati (ad esempiu lu nnirizzu di posta elittrònica e lu nomu veru)",
        "right-editmyoptions": "Canciari li propî prifirenzi",
        "right-rollback": "Canciari lestu n'arreri li mudìfichi di l'ùltimu utenti chi' canciau na certa pàggina",
        "right-siteadmin": "Bluccari e sbluccari la basi di dati",
        "right-override-export-depth": "Espurtari pàggini cu li pàggini culligati nfina ô quintu liveddu",
        "right-sendemail": "Mannari missaggi di posta elittrònica a' l'autri utenti",
-       "right-passwordreset": "Talïari li missaggi di posta elittrònica d'azziramentu dî password",
+       "right-passwordreset": "Taliari li missaggi di posta elittrònica d'azziramentu dî password",
        "newuserlogpage": "Riggistru di l'utenti novi",
-       "newuserlogpagetext": "Chistu è nu riggistru di li crïazzioni di utenti novi.",
+       "newuserlogpagetext": "Chistu è nu riggistru di li criazzioni di utenti novi.",
        "rightslog": "Riggistru dî dritti di l'utenti",
        "rightslogtext": "Chistu è nu riggistru dî canciamenti ê dritti di l'utenti.",
        "action-read": "lèggiri sta pàggina",
        "action-edit": "canciari sta pàggina",
-       "action-createpage": "crïari pàggini",
-       "action-createtalk": "crïari pàggini di discussioni",
-       "action-createaccount": "crïari stu cuntu di l'utenti",
-       "action-history": "talïari la crunuluggìa di sta pàggina",
+       "action-createpage": "criari pàggini",
+       "action-createtalk": "criari pàggini di discussioni",
+       "action-createaccount": "criari stu cuntu di l'utenti",
+       "action-history": "taliari la crunuluggìa di sta pàggina",
        "action-minoredit": "marcari stu canciamentu comu nicu",
        "action-move": "spustari sta pàggina",
        "action-move-subpages": "spustari sta pàggina e li so suttapàggini",
        "action-writeapi": "adupirari l'API pi' scrìviri",
        "action-delete": "cancillari sta pàggina",
        "action-deleterevision": "cancillari sta virsioni",
-       "action-deletedhistory": "talïari la crunuluggìa cancillata di sta pàggina",
+       "action-deletedhistory": "taliari la crunuluggìa cancillata di sta pàggina",
        "action-browsearchive": "circari pàggini cancillati",
        "action-undelete": "annullari la cancillazzioni di sta pàggina",
        "action-suppressrevision": "rivìdiri e ripristinari sta virsioni ammucciata",
        "action-userrights-interwiki": "canciari li dritti di l'utenti supra a autri wiki",
        "action-siteadmin": "bluccari e sbluccari la basi di dati",
        "action-sendemail": "mannari missaggi di posta elittrònica",
-       "action-editmywatchlist": "canciari la to lista talïata",
-       "action-viewmywatchlist": "talïari la to lista talïata",
-       "action-viewmyprivateinfo": "talïari li to nfurmazzioni risirvati",
+       "action-editmywatchlist": "canciari la to lista taliata",
+       "action-viewmywatchlist": "taliari la to lista taliata",
+       "action-viewmyprivateinfo": "taliari li to nfurmazzioni risirvati",
        "action-editmyprivateinfo": "canciari li to nfurmazzioni risirvati",
        "action-editcontentmodel": "canciari lu mudellu di cuntinutu di na pàggina",
        "nchanges": "$1 {{PLURAL:$1|canciamentu|canciamenti}}",
        "recentchanges-summary": "Sta pàggina prisenta li canciamenti cchiu' ricenti ê cuntinuti dâ wiki.",
        "recentchanges-noresult": "Nuddu canciamentu ntô pirìudu spicificatu currispunni a' sti criteria.",
        "recentchanges-feed-description": "Stu feed prisenta li canciamenti cchiu' ricenti ê cuntinuti dâ wiki.",
-       "recentchanges-label-newpage": "Stu canciamentu crïau na pàggina nova",
+       "recentchanges-label-newpage": "Stu canciamentu criau na pàggina nova",
        "recentchanges-label-minor": "Chistu è nu canciamentu nicu",
-       "recentchanges-label-bot": "Stu canciamentu fu' fattu di nu bot",
+       "recentchanges-label-bot": "Stu canciamentu fu fattu di nu bot",
        "recentchanges-label-unpatrolled": "Stu canciamentu ancora nun havi statu battugghiatu",
        "recentchanges-label-plusminus": "La grannizza dâ pàggina canciau di stu nùmmiru di byte",
        "recentchanges-legend-heading": "'''Legenda:'''",
        "minoreditletter": "n",
        "newpageletter": "N",
        "boteditletter": "b",
-       "number_of_watching_users_pageview": "[talïata di {{PLURAL:$1|nu utenti|$1 utenti}}]",
+       "number_of_watching_users_pageview": "[taliata di {{PLURAL:$1|nu utenti|$1 utenti}}]",
        "rc_categories": "Lìmita a li catigurìi (siparati di \"|\")",
        "rc_categories_any": "Quali è jè",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} appressu dû canciamentu",
        "newsectionsummary": "/* $1 */ sizzioni nova",
        "rc-enhanced-expand": "Ammustra li dittagghî",
        "rc-enhanced-hide": "Ammuccia li dittagghî",
-       "rc-old-title": "crïata ô principiu comu \"$1\"",
+       "rc-old-title": "criata ô principiu comu \"$1\"",
        "recentchangeslinked": "Canciamenti culligati",
        "recentchangeslinked-feed": "Canciamenti culligati",
        "recentchangeslinked-toolbox": "Canciamenti culligati",
        "upload-tryagain": "Manna la discrizzioni canciata dû file",
        "uploadnologin": "Nun trasutu",
        "uploadnologintext": "Hâ' $1 pi' putiri carricari file.",
-       "upload_directory_missing": "La cartella dî carricamenti ($1) nun esisti lu server web nun riniscìu a' crïàrila.",
+       "upload_directory_missing": "La cartella dî carricamenti ($1) nun esisti lu server web nun riniscìu a' criàrila.",
        "upload_directory_read_only": "La cartella dî carricamenti ($1) nun è scrivìbbili dû server web.",
        "uploaderror": "Erruri ntô carricamentu",
        "upload-recreate-warning": "<strong>Accura: Nu file cu' ddu nomu fu' cancillatu o spustatu.</strong>\n\nPi' cummudità ccassutta cci su' li riggistra dî cancillazzioni e dî spustamenti di sta pàggina:",
        "uploadtext": "Usa lu mòdulu ccà sutta pi carricari file novi. Pi vìdiri o circari li file già carricati, talìa lu [[Special:FileList|log dî file carricati]]. Carricamenti di file e di virsioni novi di file sunnu riggistrati ntô [[Special:Log/upload|log di l'upload]], li cancillazzioni di file sunnu\nriggistrati [[Special:Log/delete|ccà]].\n\nPi nziriri nu file nta na pàggina, fai nu lijami accussì:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' p'usari la virsioni ntera dû file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testu altirnativu]]</nowiki></code>''' p'usari na virsioni làrica 200 pixel nziruta nta nu box, alliniata a manu manca e cu 'testu altirnativu' comu didascalìa\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' pi culligari direttamenti a lu file senza vidìrilu.",
-       "upload-permitted": "Tipi di file cunsintuti: $1.",
-       "upload-preferred": "Tipi di file cunsigghiati: $1.",
-       "upload-prohibited": "Tipi di file prüibbiti: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|cunsintutu|cunsintuti}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|cunsigghiatu|cunsigghiati}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|pruibbutu|pruibbuti}}: $1.",
        "uploadlogpage": "Riggistru dî file carricati",
        "uploadlogpagetext": "Ccà sutta cc'è la lista di l'ùrtimi file carricati.\nTalìa la [[Special:NewFiles|gallarìa dî file novi]] pûn risucuntu cchiu' visuali.",
        "filename": "Nomu dû file",
        "illegal-filename": "Stu nomu dû file nun è cunsintutu.",
        "overwrite": "Suprascrìviri nu file chi' già esisti nun è cunsintutu.",
        "unknown-error": "Mmattìu n'erruri scanusciutu.",
-       "tmp-create-error": "Nun fu' pussìbbili crïari u file timpuraniu.",
+       "tmp-create-error": "Nun fu pussìbbili criari u file timpuraniu.",
        "tmp-write-error": "Erruri ntâ scrittura dû file timpuraniu.",
        "large-file": "Si raccumanna di nun passari la grannizza di $1 p'ognin file; stu file è granni $2.",
        "largefileserver": "Stu file è cchiu' grossu di quantu lu server è cunfiguratu a' accittari.",
        "emptyfile": "Lu file chi' carricasti pari vacanti.\nChistu putissi èssiri pruvucatu di nu sbagghiu ntô nomu dû file.\nCuntrolla ca pi' davera voi carricari stu file.",
        "windows-nonascii-filename": "Sta wiki nun supporta i nomi di file cu' caràttiri spiciali.",
        "fileexists": "Nu file cu' stu nomu già esisti, pi' favuri cuntrolla <strong>[[:$1]]</strong> si' nun si' {{GENDER:|sicuru|sicura}} ch'u voi canciari.\n[[$1|thumb]]",
-       "filepageexists": "La pàggina dâ discrizzioni di stu file fu' ggià crïata ô nnirizzu <strong>[[:$1]]</strong>, ma pi' com'ora nun c'è nuddu file cu' stu nomu.\nU riassuntu chi' immetti nun cumpariravi ntâ pàggina dâ discrizzioni.\nPi' fàrilu cumpàriri, avirrai a' mudificari a' manu dda pàggina.\n[[$1|thumb]]",
+       "filepageexists": "La pàggina dâ discrizzioni di stu file fu' ggià criata ô nnirizzu <strong>[[:$1]]</strong>, ma pi' com'ora nun c'è nuddu file cu' stu nomu.\nLu riassuntu chi' immetti nun cumpariravi ntâ pàggina dâ discrizzioni.\nPi' fàrilu cumpàriri, avirrai a' mudificari a' manu dda pàggina.\n[[$1|thumb]]",
        "fileexists-extension": "Nu file cûn nomu simili già esisti: [[$2|thumb]]\n* Nomu dû file carricannu: <strong>[[:$1]]</strong>\n* Nomu dû file esistenti: <strong>[[:$2]]</strong>\nForsi voi scègghîri un nomu cchiù' distintivu?",
        "fileexists-thumbnail-yes": "Lu file carricato sembra èssiri lu risurtatu di n'antiprima ''(thumbnail)''. [[$1|thumb]]\nVirificari, pi cunfruntu, lu file <strong>[[:$1]]</strong>.\nSiduu si tratta dâ stissa mmagini, nte dimenzioni urigginali, nun è nicissariu carricara àutri antiprimi.",
        "file-thumbnail-no": "Lu nomu dô file accumenza cu <strong>$1</strong>.\nPari quinni èssiri lu risurtatu di n'antiprima ''(thumbnail)''.\nSiddu si disponi dâ mmàggini ntâ risuluzzioni urigginali, si prega di carricàrila. 'N casu cuntrariu, si prega di canciari lu nomu dô file.",
        "upload-proto-error": "Protucollu erratu",
        "upload-proto-error-text": "Pi l'upload rimotu è nicissariu spicificari URL ca nìzzianu cu <code>http://</code> oppuru <code>ftp://</code>.",
        "upload-file-error": "Erruri nternu",
-       "upload-file-error-text": "S'hâ' virificatu n'erruri nternu duranti la crïazzioni dûn file timpuraniu supra ô server.\nPi' favuri cuntatta n'[[Special:ListUsers/sysop|amministraturi di sistema]].",
+       "upload-file-error-text": "S'hâ' virificatu n'erruri nternu duranti la criazzioni dûn file timpuraniu supra ô server.\nPi' favuri cuntatta n'[[Special:ListUsers/sysop|amministraturi di sistema]].",
        "upload-misc-error": "Erruri nun idintificatu pi l'upload",
        "upload-misc-error-text": "S'hà virificatu un erruri nun idintificatu duranti lu carricamentu dû file. Virificari ca la URL è curretta e accissìbbili e pruvari di novu. Siddu lu prubbrema pirsisti, cuntattari un amministraturi di sistema.",
        "upload-too-many-redirects": "L'URL cuntineva troppi redirect",
        "upload-http-error": "Mmattìu n'erruri HTTP: $1",
        "upload-copy-upload-invalid-domain": "Lu carricamentu di copî nun è cunsintutu di stu duminiu.",
-       "backend-fail-stream": "Nun fu' pussìbbili trasmèttiri lu file \"$1\".",
+       "backend-fail-stream": "Nun fu pussìbbili trasmèttiri lu file \"$1\".",
        "backend-fail-backup": "Nun fu' pussìbbili fari na copia di riserva dû file \"$1\".",
        "backend-fail-notexists": "Lu file $1 nun esisti.",
        "backend-fail-hashes": "Nun fu' pussìbbili ottèniri l'hash dî file pi' fari lu cunfruntu.",
        "backend-fail-notsame": "Già esisti un file nun idènticu a' \"$1\".",
        "backend-fail-invalidpath": "\"$1\" nun è un caminu d'archiviazzioni vàlidu.",
-       "backend-fail-delete": "Nun fu' pussìbbili cancillari lu file \"$1\".",
+       "backend-fail-delete": "Nun fu pussìbbili cancillari lu file \"$1\".",
        "backend-fail-describe": "Nun fu' pussìbbili canciari li metadati dû file \"$1\".",
        "backend-fail-alreadyexists": "Lu file \"$1\" già esisti.",
        "backend-fail-store": "Nun fu' pussìbbili mimurizzari lu file \"$1\" nta \"$2\".",
        "backend-fail-copy": "Nun fu' pussìbbili cupiari lu file \"$1\" nta \"$2\".",
        "backend-fail-move": "Nun fu' pussìbbili spustari lu file \"$1\" nta \"$2\".",
-       "backend-fail-opentemp": "Nun fu' pussìbbili àpriri lu file timpuraniu.",
+       "backend-fail-opentemp": "Nun fu pussìbbili àpriri lu file timpuraniu.",
        "backend-fail-writetemp": "Nun fu' pussìbbili scrìviri ntô file timpuraniu.",
-       "backend-fail-closetemp": "Nun fu' pussìbbili chiùdiri lu file timpuraniu.",
+       "backend-fail-closetemp": "Nun fu pussìbbili chiùdiri lu file timpuraniu.",
        "backend-fail-read": "Nun fu' pussìbbili lèggiri lu file \"$1\".",
-       "backend-fail-create": "Nun fu' pussìbbili scrìviri lu file \"$1\".",
+       "backend-fail-create": "Nun fu pussìbbili scrìviri lu file \"$1\".",
        "backend-fail-maxsize": "Nun fu' pussìbbili scrìviri lu file \"$1\" picchì è cchiu' grossu di {{PLURAL:$2|un byte|$2 byte}}.",
        "backend-fail-readonly": "U backend di mimurizzazzioni \"$1\" pi' com'ora è a' sula littura. La spiegazzioni data è: \"<em>$2</em>\"",
        "backend-fail-synced": "Lu file \"$1\" si trova nta nu statu incoerenti tra dî backend di mimurizzazzioni interni.",
        "lockmanager-fail-svr-release": "Nun fu' pussìbbili arrènniri li blocchi dû server $1.",
        "zip-file-open-error": "Mmattìu n'erruri nta l'apirtura dû file pî cuntrolli di ZIP.",
        "zip-wrong-format": "Lu file spicificatu nun era nu file ZIP.",
-       "zip-bad": "Lu file è nu file ZIP chi' è ruïnatu o è illiggìbbili pi' quarchi' n'autru mutivu.\nNun si po' cuntrullari bona la so sicurizza.",
+       "zip-bad": "Lu file è nu file ZIP chi' è ruinatu o è illiggìbbili pi' quarchi' n'autru mutivu.\nNun si po' cuntrullari bona la so sicurizza.",
        "zip-unsupported": "Lu file è nu file ZIP chi' cunteni carattirìstichi ZIP chi' nun su' suppurtati dâ MediaWiki.\nNun si po' cuntrullari bona la so sicurizza.",
        "uploadstash": "Ammucciàgghia dî carricamenti",
        "uploadstash-summary": "Sta pàggina duna accessu ê file chi' furu carricati, o si stannu carricannu, però ancora nun hannu statu pubblicati ntâ wiki. Sti file nun su' visìbbili a' nuddu sparti di cu li carricau.",
        "img-auth-accessdenied": "Accessu nigatu",
        "img-auth-nopathinfo": "Variàbbili PATH_INFO mancanti.\nLu to server nun è mpustatu pi' passari sta nfurmazzioni.\nPurrìa èssiri basatu supra a' CGI e nun po' suppurtari img_auth.\nTalìa https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "Lu caminu dumannatu nun è ntâ cartella cunfigurata pî carricamenti.",
-       "img-auth-badtitle": "Nun fu' pussìbbili custrüiri nu tìtulu vàlidu a' pàrtiri di \"$1\".",
+       "img-auth-badtitle": "Nun fu' pussìbbili custruiri nu tìtulu vàlidu a' pàrtiri di \"$1\".",
        "img-auth-nologinnWL": "Nun si' trasutu e \"$1\" nun è ntâ lista janca.",
        "img-auth-nofile": "Lu file \"$1\" nun esisti.",
        "img-auth-isdir": "Stai pruvannu a' accèdiri a' na cartella, \"$1\".\nE' cunsintutu l'accessu sulu ê file.",
        "http-timed-out": "La richiesta HTTP scadìu.",
        "http-curl-error": "Erruri ntô scarricamentu di l'URL: $1",
        "http-bad-status": "Mmattìu nu prubblema duranti la richiesta HTTP: $1 $2",
-       "upload-curl-error6": "Nun fu' pussìbbili ragghiùnciri l'URL",
+       "upload-curl-error6": "Nun fu pussìbbili ragghiùnciri l'URL",
        "upload-curl-error6-text": "Nun fu' pussìbbili ragghiùnciri l'URL ca spicificasti.\nCuntrolla megghiu ca l'URL è scritta bona e ca lu situ chi' la servi funziona.",
        "upload-curl-error28": "Tempu scadutu pû carricamentu",
        "upload-curl-error28-text": "Lu situ rimotu cci stesi troppu tempu a' rispùnniri.\nPi' favuri cuntrolla ca lu situ funziona, aspetta un pocu e ppoi prova n'autra vota.\nPoi cunsiddirari di pruvari ntôn mumentu quannu c'è cchiu' picca tràficu.",
        "filedelete-intro-old": "Stai cancillannu la virsioni di <strong>[[Media:$1|$1]]</strong> dû [$4 $2 ê $2].",
        "filedelete-comment": "Mutivu:",
        "filedelete-submit": "Cancella",
-       "filedelete-success": "Lu file <strong>$1</strong> fu' cancillatu.",
+       "filedelete-success": "Lu file <strong>$1</strong> fu cancillatu.",
        "filedelete-success-old": "La virsioni dû file <strong>[[Media:$1|$1]]</strong> dû $2 ê $3 fu' cancillata.",
        "filedelete-nofile": "<strong>$1</strong> nun esisti.",
        "filedelete-nofile-old": "Nun cc'è archiviata nudda virsioni di <strong>$1</strong> chi' havi l'attribbuta spicificati.",
        "mimesearch-summary": "Sta pàggina cunzenti di filtrari li file 'n basi a lu tipu MIME. Nziriri la stringa di ricerca ntâ forma tipu/suttatipu o tipu/*, p'asempiu <code>image/jpeg</code>.",
        "mimetype": "Tipu MIME:",
        "download": "scàrrica",
-       "unwatchedpages": "Pàggini nun talïati",
+       "unwatchedpages": "Pàggini nun taliati",
        "listredirects": "Alencu di tutti li rimanni",
        "listduplicatedfiles": "Lista dî file cu' duppiuni",
        "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.",
        "statistics-pages": "Pàggini",
        "statistics-pages-desc": "Tutti li pàggini dâ wiki, cu' puru chiddi di discussioni, li rimanni, etc.",
        "statistics-files": "File carricati",
-       "statistics-edits": "Pàggini canciati di quannu {{SITENAME}} fu' armatu",
+       "statistics-edits": "Pàggini canciati di quannu {{SITENAME}} fu armatu",
        "statistics-edits-average": "Media dî canciamenti pi' pàggina",
        "statistics-users": "[[Special:ListUsers|Utenti]] riggistrati",
        "statistics-users-active": "Utenti attivi",
        "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.",
-       "double-redirect-fixed-move": "[[$1]] fu' spustata.\nFu' aggiurnata autumaticamenti e ora rimanna a' [[$2]].",
+       "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",
        "brokenredirects": "Rimanni rutti",
        "deadendpagestext": "Li pàggini siguenti sunnu privi di culligamenti 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 prüibbutu crïari pàggini novi, talìa [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+       "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}}]].",
        "protectedpages-cascade": "Sulu prutizzioni a' cascata",
        "protectedpages-noredirect": "Ammuccia li rimanni",
        "protectedpagesempty": "Pi' com'ora nun cc'è nudda pàggina prutetta cu' sti paràmitri.",
        "protectedpages-unknown-timestamp": "Scanusciuti",
        "protectedpages-unknown-performer": "Utenti scanusciutu",
        "protectedtitles": "Tìtuli prutetti",
-       "protectedtitles-summary": "Sta pàggina elenca li tìtuli prutetti, chî quali vèni prüibbutu crïari pàggini novi. Pi' na lista dî pàggini già esistenti chi' su' prutetti, talìa [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitles-summary": "Sta pàggina elenca li tìtuli prutetti, chî quali vèni pruibbutu criari pàggini novi. Pi' na lista dî pàggini già esistenti chi' su' prutetti, talìa [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Pi' com'ora nun cc'è nuddu tìtulu prutettu cu' sti paràmitri.",
        "listusers": "Lista di l'utenti",
        "listusers-editsonly": "Ammustra sulu l'utenti ca hannu cuntribbuti",
-       "listusers-creationsort": "Òrdina pi' data di crïazzioni",
+       "listusers-creationsort": "Òrdina pi' data di criazzioni",
        "listusers-desc": "Òrdina a' scìnniri",
        "usereditcount": "$1 {{PLURAL:$1|cuntribbutu|cuntribbuta}}",
-       "usercreated": "{{GENDER:$3|Crïatu}} lu $1 ê $2",
+       "usercreated": "{{GENDER:$3|Criatu}} lu $1 ê $2",
        "newpages": "Pàggini novi",
        "newpages-username": "Utenti:",
        "ancientpages": "Pàggini cchiu' vecchî",
        "allpagesbadtitle": "Lu tìtulu di pàggina spicificatu nun era vàlidu o avìa nu prifissu intir-linguìsticu o intir-wiki.\nPutissi cuntèniri unu o cchiu' ssai caràttiri chi' nun su' cunsintuti ntê tìtula.",
        "allpages-bad-ns": "Lu namespace \"$1\" nun asisti supra a' {{SITENAME}}.",
        "allpages-hide-redirects": "Ammuccia li rimanni",
-       "cachedspecial-viewing-cached-ttl": "Stai talïannu na virsioni ntâ ''cache'' di sta pàggina, chi' po' èssiri vecchia nfinu a' $1.",
-       "cachedspecial-viewing-cached-ts": "Stai talïannu na virsioni ntâ ''cache'' di sta pàggina, chi' purrìa nun èssiri pirfittamenti aggiurnata.",
+       "cachedspecial-viewing-cached-ttl": "Stai taliannu na virsioni ntâ ''cache'' di sta pàggina, chi' po' èssiri vecchia nfinu a' $1.",
+       "cachedspecial-viewing-cached-ts": "Stai taliannu na virsioni ntâ ''cache'' di sta pàggina, chi' purrìa nun èssiri pirfittamenti aggiurnata.",
        "cachedspecial-refresh-now": "Va talìa la cchiu' nova.",
        "categories": "Catigurìi",
        "categoriespagetext": "{{PLURAL:$1|La catigurìa ccassutta cunteni|Li catigurìi ccassutta cuntèninu}} pàggini o file multimidiali.\nLi [[Special:UnusedCategories|catigurìi vacanti]] nun sunnu ammustrati ccà.\nTalìa macari li [[Special:WantedCategories|catigurìi addumannati]].",
        "emailuserfooter": "Stu missaggiu fu' mannatu di $1 a' $2 attraversu dâ funzioni \"Manna nu missàggiu di posta elittrònica a' l'utenti\" supra a' {{SITENAME}}.",
        "usermessage-summary": "Lassatu nu missaggiu di sistema.",
        "usermessage-editor": "Missaggeri di sistema",
-       "watchlist": "Lista talïata",
-       "mywatchlist": "La me lista talïata",
+       "watchlist": "Lista taliata",
+       "mywatchlist": "La me lista taliata",
        "watchlistfor2": "Di $1, $2",
-       "nowatchlist": "Nun hai nudda vuci ntâ to lista talïata.",
-       "watchlistanontext": "Pi' vìdiri e canciari li vuci dâ to lista talïata hâ' tràsiri.",
+       "nowatchlist": "Nun hai nudda vuci ntâ to lista taliata.",
+       "watchlistanontext": "Pi' vìdiri e canciari li vuci dâ to lista taliata hâ' tràsiri.",
        "watchnologin": "Nun hai trasutu",
-       "addwatch": "Agghiunci â lista talïata",
-       "addedwatchtext": "La pàggina \"[[:$1]]\" fu' agghiunciuta â to [[Special:Watchlist|lista talïata]].\nI canciamenti futuri a' sta pàggina e â so pàggina di discussioni venirannu elincati cca.",
-       "addedwatchtext-short": "La pàggina \"$1\" fu' agghiunciuta â to lista talïata.",
-       "removewatch": "Leva dâ lista talïata",
-       "removedwatchtext": "La pàggina \"[[:$1]]\" fu' livata dâ [[Special:Watchlist|to lista talïata]].",
-       "removedwatchtext-short": "La pàggina \"$1\" fu' livata dâ to lista talïata.",
+       "addwatch": "Agghiunci â lista taliata",
+       "addedwatchtext": "La pàggina \"[[:$1]]\" fu' agghiunciuta â to [[Special:Watchlist|lista taliata]].\nI canciamenti futuri a' sta pàggina e â so pàggina di discussioni venirannu elincati cca.",
+       "addedwatchtext-short": "La pàggina \"$1\" fu' agghiunciuta â to lista taliata.",
+       "removewatch": "Leva dâ lista taliata",
+       "removedwatchtext": "La pàggina \"[[:$1]]\" fu' livata dâ [[Special:Watchlist|to lista taliata]].",
+       "removedwatchtext-short": "La pàggina \"$1\" fu' livata dâ to lista taliata.",
        "watch": "Talìa",
        "watchthispage": "Talìa sta pàggina",
-       "unwatch": "Nun talïari cchiu'",
-       "unwatchthispage": "Finisci di talïari",
+       "unwatch": "Nun taliari cchiu'",
+       "unwatchthispage": "Finisci di taliari",
        "notanarticle": "Nun è na pàggina di cuntinutu",
        "notvisiblerev": "L'ùltima virsioni fatta di n'utenti diffirenti fu' cancillata",
-       "watchlist-details": "{{PLURAL:$1|Cc'è na pàggina|Cci su' $1 pàggini}} ntâ to lista talïata, senza cuntari sparti li pàggini di discussioni.",
+       "watchlist-details": "{{PLURAL:$1|Cc'è na pàggina|Cci su' $1 pàggini}} ntâ to lista taliata, senza cuntari sparti li pàggini di discussioni.",
        "wlheader-enotif": "La nutìfica via posta elittrònica è attivata.",
        "wlheader-showupdated": "Li pàggini ca hannu statu canciati dâ tò ùrtima vìsita sunnu evidinziati 'n <strong>grassettu</strong>.",
        "wlnote": "Sutta attrovi l'ùrtim{{PLURAL:$1|u canciamentu|i <strong>$1</strong> canciamenti}} fatti nta l'ùrtim{{PLURAL:$1|a ura|i <strong>$2</strong> uri}}, aggiurnati ê $4 dû $3.",
        "wlshowlast": "Ammustra l'ùrtimi $1 uri $2 jorna",
-       "watchlist-options": "Opzioni dâ lista talïata",
-       "watching": "Agghiunciuta â lista talïata...",
-       "unwatching": "Cancillata dâ lista talïata...",
-       "watcherrortext": "Mmattìu n'erruri ntô canciari i to mpustazzioni dâ lista talïata di \"$1\".",
+       "watchlist-options": "Opzioni dâ lista taliata",
+       "watching": "Agghiunciuta â lista taliata...",
+       "unwatching": "Cancillata dâ lista taliata...",
+       "watcherrortext": "Mmattìu n'erruri ntô canciari i to mpustazzioni dâ lista taliata di \"$1\".",
        "enotif_reset": "Segna tutti li pàggini comu già visitati",
        "enotif_impersonal_salutation": "Utenti di {{SITENAME}}",
-       "enotif_subject_deleted": "La pàggina $1 supra a' {{SITENAME}} fu' cancillata di $2",
-       "enotif_subject_created": "La pàggina $1 supra a' {{SITENAME}} fu' crïata di $2",
+       "enotif_subject_deleted": "La pàggina $1 supra a {{SITENAME}} fu cancillata di $2",
+       "enotif_subject_created": "La pàggina $1 supra a' {{SITENAME}} fu' criata di $2",
        "enotif_subject_moved": "La pàggina $1 supra a' {{SITENAME}} fu' spustata di $2",
        "enotif_subject_restored": "La pàggina $1 supra a' {{SITENAME}} fu' ripristinata di $2",
        "enotif_subject_changed": "La pàggina $1 supra a' {{SITENAME}} fu' canciata di $2",
        "enotif_body_intro_deleted": "La pàggina $1 supra a' {{SITENAME}} fu' cancillata lu $PAGEEDITDATE di $2, talìa $3.",
-       "enotif_body_intro_created": "La pàggina $1 supra a' {{SITENAME}} fu' crïata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
+       "enotif_body_intro_created": "La pàggina $1 supra a' {{SITENAME}} fu' criata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
        "enotif_body_intro_moved": "La pàggina $1 supra a' {{SITENAME}} fu' spustata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
        "enotif_body_intro_restored": "La pàggina $1 supra a' {{SITENAME}} fu' ripristinata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
        "enotif_body_intro_changed": "La pàggina $1 supra a' {{SITENAME}} fu' canciata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
        "enotif_lastvisited": "Cunzurta $1 pi vìdiri tutti li canciamenti dâ tò ùrtima vìsita.",
-       "enotif_lastdiff": "Vidi $1 pi' talïari lu canciamentu.",
+       "enotif_lastdiff": "Vidi $1 pi' taliari lu canciamentu.",
        "enotif_anon_editor": "utenti anonimu $1",
-       "enotif_body": "Gintili $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRiassuntu fattu di l'auturi: $PAGESUMMARY $PAGEMINOREDIT\n\nPi' cuntattari l'auturi:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNun ti mannamu autri nutìfichi 'n casu di ultiriuri attività a' menu ca nun vìsiti dda pàggina mentri chi' si' trasutu. Poi puru mpustari dâ to lista talïata l'avvisu di nutìfica pi' tutti li pàggini chi' cunteni.\n\nLu sistema di nutìfica di {{SITENAME}}, ô to sirvizziu\n\n--\nPi' canciari li to mpustazzioni di nutìfica via e-mail, vìsita\n{{canonicalurl:{{#special:Preferences}}}}\n\nPi' canciari li mpustazzioni dâ to lista talïata, vìsita\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPi' livari sta pàggina dâ to lista talïata, vìsita\n$UNWATCHURL\n\nPi' lassari cummenti e arricèviri ultiriuri assistenza:\n$HELPPAGE",
+       "enotif_body": "Gintili $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRiassuntu fattu di l'auturi: $PAGESUMMARY $PAGEMINOREDIT\n\nPi' cuntattari l'auturi:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNun ti mannamu autri nutìfichi 'n casu di ultiriuri attività a' menu ca nun vìsiti dda pàggina mentri chi' si' trasutu. Poi puru mpustari dâ to lista taliata l'avvisu di nutìfica pi' tutti li pàggini chi' cunteni.\n\nLu sistema di nutìfica di {{SITENAME}}, ô to sirvizziu\n\n--\nPi' canciari li to mpustazzioni di nutìfica via posta elittrònica, vìsita\n{{canonicalurl:{{#special:Preferences}}}}\n\nPi' canciari li mpustazzioni dâ to lista taliata, vìsita\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPi' livari sta pàggina dâ to lista taliata, vìsita\n$UNWATCHURL\n\nPi' lassari cummenti e arricèviri ultiriuri assistenza:\n$HELPPAGE",
        "created": "criatu",
        "changed": "canciatu",
        "deletepage": "Cancella la pàggina",
        "delete-edit-reasonlist": "Cancia li mutivi dâ cancillazzioni",
        "delete-toobig": "Sta pàggina havi na crunuluggìa dî canciamenti assai longa, cchiu' ssai di $1 {{PLURAL:$1|virsioni|virsioni}}).\nLa cancillazzioni dî pàggini comu a' chista è risirvata, pi' scansari la pussibbilitati di pruvucari senza vulìrilu prubblemi a' {{SITENAME}}.",
        "delete-warning-toobig": "Sta pàggina havi na crunuluggìa dî canciamenti assai longa, cchiu' ssai di $1 {{PLURAL:$1|virsioni|virsioni}}).\nLa so cancillazzioni po' disturbari lu funziunamentu di  {{SITENAME}}; prucedi cu' cautela.",
-       "deleteprotected": "Nun poi cancillari sta pàggina picchi' fu' prutiggiuta.",
+       "deleteprotected": "Nun poi cancillari sta pàggina pirchì fu prutiggiuta.",
        "deleting-backlinks-warning": "'''Accura:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Autri pàggini]] su' culligati o trascludunu la pàggina chi' stai cancillannu.",
        "rollback": "Annullamentu di canciamenti",
        "rollbacklink": "canciu n'arreri",
        "pagesize": "(byte)",
        "restriction-edit": "Canciamentu",
        "restriction-move": "Spustamentu",
-       "restriction-create": "Crïazzioni",
+       "restriction-create": "Criazzioni",
        "restriction-upload": "Carricamentu",
        "restriction-level-sysop": "prutetta",
        "restriction-level-autoconfirmed": "semi-prutetta",
        "undelete-fieldset-title": "Ricùpira virsioni",
        "undeleteextrahelp": "Pi' ricupirari la storia sana dâ pàggina, cliccari <strong><em>{{int:undeletebtn}}</em></strong> senza scegghîri nudda casedda.\nPi' fari nu ricùpiru silittivu, scegghîri li caseddi currispunnenti ê virsioni di ripigghiari, e cliccari <strong><em>{{int:undeletebtn}}</em></strong>.",
        "undeleterevisions": "$1 {{PLURAL:$1|virsioni|virsioni}} nta l'archiviu",
-       "undeletehistory": "Siddu ricùpiri sta pàggina, tutti li so virsioni vèninu ricupirati ntâ crunuluggìa.\nSiddu na pàggina nova havi statu crïata cû stissu tìtulu di chidda di ricupirari doppu dâ so cancillazzioni, li virsioni ricupirati vannu a' finiri ntâ crunuluggìa passata.",
+       "undeletehistory": "Siddu ricùpiri sta pàggina, tutti li so virsioni vèninu ricupirati ntâ crunuluggìa.\nSiddu na pàggina nova havi statu criata cû stissu tìtulu di chidda di ricupirari doppu dâ so cancillazzioni, li virsioni ricupirati vannu a' finiri ntâ crunuluggìa passata.",
        "undeleterevdel": "Lu ricùpiru nun veni fattu siddu pròvuca la cancillazzioni parziali dâ virsioni currenti dâ pàggina o dû file.\nNta stu casu, hai a' livari lu signu di spunta o l'ammucciamentu dâ virsioni cancillata cchiu' ricenti.",
        "undeletehistorynoadmin": "Sta pàggina fu' cancillata.\nLu mutivu dâ cancillazzioni è ammustratu ccà sutta, nzèmmula ê dittagghî di l'utenti ca canciaru sta pàggina prima dâ so cancillazzioni.\nLu testu cuntinutu ntê virsioni cancillati è dispunìbbili sulu a' l'amministratura.",
        "undelete-revision": "Virsioni cancillata di $1 (dû $4 ê $5) di $3:",
        "undeleterevision-missing": "Virsioni nun vàlida o mancanti.\nPo' èssiri chi' hai un culligamentu sbagghiatu, o puru la virsioni hâ statu già ricupirata o livata di l'archiviu.",
-       "undelete-nodiff": "Nun fu' attruvata nudda virsioni passata.",
+       "undelete-nodiff": "Nun fu attruvata nudda virsioni passata.",
        "undeletebtn": "Ricùpira",
        "undeletelink": "talìa/ricùpira",
        "undeleteviewlink": "talìa",
        "sp-contributions-search": "Ricerca cuntribbuti",
        "sp-contributions-username": "Nnirizzu IP o nomu utenti:",
        "sp-contributions-toponly": "Ammustra sulu li canciamenti ca sunnu l'ùrtimi virsioni pâ pàggina",
-       "sp-contributions-newonly": "Ammustra sulu li canciamenti ca sunnu crïazzioni di pàggini novi",
+       "sp-contributions-newonly": "Ammustra sulu li canciamenti ca sunnu criazzioni di pàggini novi",
        "sp-contributions-submit": "Risciduta",
        "whatlinkshere": "Chi' punta cca",
        "whatlinkshere-title": "Pàggini ca pùntanu a \"$1\"",
        "ipbreason": "Mutivu:",
        "ipbreason-dropdown": "*Mutivi cchiù cumuni pî blocchi\n** Nzerimentu di nformazziuni falsi\n** Cancillazzioni di cuntinuti dê pàggini\n** Liami prumozziunalu a siti sterni\n** Nzserimentu di cuntinuti privi di sensu\n** Cumportamenti ntimidatori o molestie\n** Usu ndebitu di cchiù cunti\n** Nomu utenti nun accittabbili",
        "ipb-hardblock": "Mpidisci a' l'utenti trasuti di fari canciamenti di stu nnirizzu IP",
-       "ipbcreateaccount": "Mpidisci la crïazzioni di cunti",
+       "ipbcreateaccount": "Mpidisci la criazzioni di cunti",
        "ipbemailban": "Mpidisci a' l'utenti di mannari posta elittrònica",
        "ipbenableautoblock": "Blocca autumaticamenti l'ùltimu nnirizzu IP adupiratu di st'utenti, e li succissivi d'unni prova a' fari canciamenti",
        "ipbsubmit": "Blocca a' st'utenti",
        "ipb-blocklist": "Talìa li blocchi in viguri",
        "ipb-blocklist-contribs": "Cuntribbuta di {{GENDER:$1|$1}}",
        "unblockip": "Sblocca a' l'utenti",
-       "unblockiptext": "Adupirari lu mòdulu suttastanti pi' ristitüiri l'accessu in scrittura a' nu nnirizzu IP o nomu utenti ca hâ statu bluccatu.",
+       "unblockiptext": "Adupirari lu mòdulu suttastanti pi' ristituiri l'accessu in scrittura a' nu nnirizzu IP o nomu utenti ca hâ statu bluccatu.",
        "ipusubmit": "Leva stu bloccu",
-       "unblocked": "L'utenti [[User:$1|$1]] fu' sbluccatu.",
-       "unblocked-range": "$1 fu' sbluccatu.",
-       "unblocked-id": "Lu bloccu $1 fu' livatu.",
-       "unblocked-ip": "[[Special:Contributions/$1|$1]] fu' sbluccatu.",
+       "unblocked": "L'utenti [[User:$1|$1]] fu sbluccatu.",
+       "unblocked-range": "$1 fu sbluccatu.",
+       "unblocked-id": "Lu bloccu $1 fu livatu.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] fu sbluccatu.",
        "blocklist": "Utenti bluccati",
        "ipblocklist": "Utenti bluccati",
        "ipblocklist-legend": "Trova n'utenti bluccatu",
        "expiringblock": "scadi lu $1 ê $2",
        "anononlyblock": "sulu anònimi",
        "noautoblockblock": "bloccu autumàticu disattivatu",
-       "createaccountblock": "crïazzioni di cunti bluccata",
+       "createaccountblock": "criazzioni di cunti bluccata",
        "emailblock": "posta elittrònica bluccata",
        "blocklist-nousertalk": "nun po' canciari la so stissa pàggina di discussioni",
        "ipblocklist-empty": "L'alencu dî blocchi è vacanti.",
        "ipbnounblockself": "Nun hai u pirmissu di sbluccari a' tia stissu.",
        "lockdb": "Blocca lu database",
        "unlockdb": "Sblocca lu database",
-       "lockdbtext": "Lu bloccu dû database cumporta la suspinsioni pi' tutti l'utenti dâ pussibbilitati di canciari li pàggini, mpustari li so prifirenzi, mudificari li so listi talïati, e 'n ginirali di cùmpiri tutti l'upirazzioni ca richièdinu canciamenti a lu database.\nPi' favuri cunfirma ca chistu è chiddu chi' hai ntinzioni di fari, e ca a lu tèrmini dâ manutinzzioni pruvidi a lu sbloccu dû database.",
-       "unlockdbtext": "Lu sbloccu dû database cunzenti di novu a tutti l'utenti di canciari li pàggini, mpustari li so prifirenzi, mudificari li so listi talïati, e 'n ginirali di cùmpiri tutti l'upirazzioni ca richièdinu canciamenti a lu database.\nPi' favuri cunfirma ca chistu è chiddu chi' hai ntinzioni di fari.",
+       "lockdbtext": "Lu bloccu dû database cumporta la suspinsioni pi' tutti l'utenti dâ pussibbilitati di canciari li pàggini, mpustari li so prifirenzi, mudificari li so listi taliati, e 'n ginirali di cùmpiri tutti l'upirazzioni ca richièdinu canciamenti a lu database.\nPi' favuri cunfirma ca chistu è chiddu chi' hai ntinzioni di fari, e ca a lu tèrmini dâ manutinzzioni pruvidi a lu sbloccu dû database.",
+       "unlockdbtext": "Lu sbloccu dû database cunzenti di novu a tutti l'utenti di canciari li pàggini, mpustari li so prifirenzi, mudificari li so listi taliati, e 'n ginirali di cùmpiri tutti l'upirazzioni ca richièdinu canciamenti a lu database.\nPi' favuri cunfirma ca chistu è chiddu chi' hai ntinzioni di fari.",
        "lockconfirm": "Sì, ntennu effittivamenti bluccari lu database.",
        "unlockconfirm": "Sì, effittivamenti ntennu, sutta la mè rispunzabbilitati, sbluccari lu database.",
        "lockbtn": "Blocca lu database",
        "lockedbyandtime": "(di {{GENDER:$1|$1}} u $2 ê $3)",
        "move-page": "Spustamentu di $1",
        "move-page-legend": "Sposta la pàggina",
-       "movepagetext": "Adupirannu lu mòdulu ccassutta si cancia lu nomu dâ pàggina, spustannu tutta la sò crunuluggìa nta la pàggina nova.\nLu tìtulu vecchiu addiventa nu rimannu versu lu tìtulu novu.\nSi pònnu aggiurnari autumaticamenti i rimanni chi' puntàvunu ô tìtulu origginali.\nMa si' scegghî di nun fàrilu, t'hai a' assicurari ca lu spustamentu nun crea [[Special:DoubleRedirects|rimanni duppî]] o puru [[Special:BrokenRedirects|rimanni rutti]].\nE' to rispunsabbilità ch'i lïami cuntinuunu a' puntari â pàggina bona.\n\nVidi chi' la pàggina <strong>nun veni spustata</strong> siddu cc'è già na pàggina chi havi lu tìtulu novu, tranni siddu la pàggina 'n quistioni è nu rimannu e nun havi crunuluggìa di canciamenti passati.\nChistu voli diri chi' si po' canciari n'autra vota u nomu di la pàggina a' chiddu ch'avìa prima siddu si fa' nu sbagghiu, e chi nun si po' suprascrìviri na pàggina chi già esisti.\n\n<strong>Accura!</strong>\nChistu po' èssiri nu canciamentu dràsticu pi na pàggina friquintata; aviti a' èssiri sicuri di capiri li cunziquenzi prima di cuntinuari.",
+       "movepagetext": "Adupirannu lu mòdulu ccassutta si cancia lu nomu dâ pàggina, spustannu tutta la sò crunuluggìa nta la pàggina nova.\nLu tìtulu vecchiu addiventa nu rimannu versu lu tìtulu novu.\nSi pònnu aggiurnari autumaticamenti i rimanni chi' puntàvunu ô tìtulu origginali.\nMa si' scegghî di nun fàrilu, t'hai a' assicurari ca lu spustamentu nun crea [[Special:DoubleRedirects|rimanni duppî]] o puru [[Special:BrokenRedirects|rimanni rutti]].\nE' to rispunsabbilità ch'i liami cuntìnuunu a' puntari â pàggina bona.\n\nVidi chi' la pàggina <strong>nun veni spustata</strong> siddu cc'è già na pàggina chi havi lu tìtulu novu, tranni siddu la pàggina 'n quistioni è nu rimannu e nun havi crunuluggìa di canciamenti passati.\nChistu voli diri chi' si po' canciari n'autra vota u nomu di la pàggina a' chiddu ch'avìa prima siddu si fa' nu sbagghiu, e chi nun si po' suprascrìviri na pàggina chi già esisti.\n\n<strong>Accura!</strong>\nChistu po' èssiri nu canciamentu dràsticu pi na pàggina friquintata; aviti a' èssiri sicuri di capiri li cunziquenzi prima di cuntinuari.",
        "movepagetext-noredirectfixer": "Usannu lu mòdulu ccà sutta vui canciati lu nomu dâ pàggina, e spustati tutta la sò storia versu la pàggina nova. Lu tìtulu vecchiu addiventa na pàggina di rinnirizzamentu versu lu tìtulu novu. \nAssicuràtivi ca lu spustamentu nun criau [[Special:DoubleRedirects|redirect duppi]] o [[Special:BrokenRedirects|redirect rumputi]]. Vui siti rispunzàbbili dî liami chi avìssiru a puntari â pàggina giusta.\n\nLa pàggina '''nun''' è spustata siddu cc'è già na pàggina cu lu tìtulu novu, tranni chi la pàggina 'n chistioni è vacanti o è na pàggina di ''redirect'' e nun havi n'archiviu di canciamenti.\nChistu signìfica chi vui putiti rinuminari la pàggina cu lu nomu vecchiu si aviti sbagghiatu, e chi nun putiti suprascrìviri nta na pàggina chi esisti già.\n\n'''Accura!'''\nChistu pò èssiri nu canciamentu dràsticu pi na pàggina pupulari; aviti a èssiri sicuri di capiri li cunziquenzi prima di cuntinuari.",
        "movepagetalktext": "La pàggina di discussioni sarravi autumaticamenti spustata cud idda <strong>a' menu chi':</strong>\n*Na pàggina di discussioni nun vacanti già esisti cu lu nomu novu, o puru\n*Nun scegghî la casedda ccassutta.\n\nNta sti casi, si' voi, hâ' spustari o jùnciri la pàggina di discussioni a' manu.",
        "movearticle": "Sposta la pàggina",
        "thumbnail_error_remote": "Messaggiu d'erruri di $1:\n$2",
        "djvu_page_error": "Nùmmuru di pàggina DjVu erratu",
        "djvu_no_xml": "Mpussibbili òtteniri lu XML pô file DjVu",
-       "thumbnail-temp-create": "Nun fu' pussìbbili crïari nu file timpuraniu pâ miniatura",
+       "thumbnail-temp-create": "Nun fu' pussìbbili criari nu file timpuraniu pâ miniatura",
        "thumbnail-dest-create": "Nun fu' pussìbbili sarvari a miniatura ntâ distinazzioni",
        "thumbnail_invalid_params": "Parametri antiprima nun validi",
        "thumbnail_toobigimagearea": "U file è cchiu' granni di $1",
        "thumbnail_image-missing": "Pari èssiri mancanti lu file: $1",
        "thumbnail_image-failure-limit": "Cc'hannu statu troppu tintativi ($1 o cchiu' ssai) di ginirari sta miniatura. Pi' favuri prova n'autra vota cchiu' tardu.",
        "import": "Mporta pàggini",
-       "importinterwiki": "Mpurtazzioni transwiki",
-       "import-interwiki-text": "Silizziunari un pruggettu wiki e lu tìtulu dâ pàggina a mpurtari. Li dati di pubbricazzioni e li noma di l'autura dî vari virsioni sunnu sarvati. Tutti l'opirazzioni di mpurtazzioni trans-wiki sunnu riggistrati ntô [[Special:Log/import|log di mpurtazzioni]].",
+       "importinterwiki": "Mpurtazzioni di n'autra wiki",
+       "import-interwiki-text": "Silizziunari na wiki e lu tìtulu di na pàggina a' mpurtari.\nLi dati dî virsioni e li nomi di l'autura sarannu mantinuti.\nTutti li mpurtazzioni di autri wiki vènunu riggistrati ntô [[Special:Log/import|riggistru dî mpurtazzioni]].",
        "import-interwiki-sourcewiki": "Wiki surgenti:",
        "import-interwiki-sourcepage": "Pàggina surgenti:",
        "import-interwiki-history": "Copia la ntera cronoluggìa di sta pàggina",
        "importcantopen": "Mpussìbbili grapiri lu file di mpurtazzioni",
        "importbadinterwiki": "Culligamentu inter-wiki erratu",
        "importsuccess": "Mpurtazzioni arrinisciuta.",
-       "importnosources": "Nun hà statu difinita na fonti pi la mpurtazzioni transwiki; la mpurtazzioni diretta dâ cronoluggìa nun Ã¨ attiva.",
+       "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.",
        "importuploaderrorsize": "Caricamentu dû file pi la mpurtazzioni non arrinisciutu. Lu file è cchiù granni di li diminzioni màssimi cunzentiti pi l'upload.",
        "importuploaderrorpartial": "Caricamentu dû file pi la mpurtazzioni non arrinisciutu. Sulamenti na parti dû file vinni caricatu.",
        "import-token-mismatch": "Si pèrsiru li dati rilativi a la sissioni. Pi piaciri, prova n'àutra vota.",
        "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": "A pàggina \"$1\" nun fu' mpurtata picchì nun hai u pirmissu di crïà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-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-rootpage-nosubpage": "U namespace \"$1\" dâ pàggina ràdica nun cunsenti suttapàggini.",
        "importlogpage": "Riggistru dî mpurtazzioni",
        "importlogpagetext": "Riggistru dî mpurtazzioni d'ufficiu di pàggini pruvinenti d'àutri wiki, cumpleti di cronoluggìa.",
-       "import-logentry-upload": "hà mpurtatu $1 tràmiti upload",
        "import-logentry-upload-detail": "{{PLURAL:$1|na virsioni mpurtata|$1 virsioni mpurtati}}",
-       "import-logentry-interwiki": "hà trasfiritu di àutra wiki la pàggina $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|na virsioni mpurtata|$1 virsioni mpurtati}} di $2",
        "javascripttest": "Virìfichi JavaScript",
        "javascripttest-pagetext-noframework": "Sta pàggina è risirvata pi' l'esicuzzioni dî virìfichi JavaScript.",
        "tooltip-pt-mycontris": "La lista dî to cuntribbuti",
        "tooltip-pt-login": "La riggistrazzioni è cunzigghiata, puru siddu nun obbrigatoria.",
        "tooltip-pt-logout": "Nisciuta",
-       "tooltip-pt-createaccount": "Si' nvitatu a crïari nu cuntu e tràsiri; però nun è obbligatoriu",
+       "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-addsection": "Agghiunci un cummentu a sta discussioni.",
        "tooltip-ca-delete": "Cancella sta pàggina",
        "tooltip-ca-undelete": "Riprìstina la pàggina com'era prima dâ cancillazzioni",
        "tooltip-ca-move": "Sposta sta pàggina (cancia tìtulu)",
-       "tooltip-ca-watch": "Agghiunci sta pàggina â to lista talïata",
-       "tooltip-ca-unwatch": "Leva sta pàggina dâ to lista talïata",
+       "tooltip-ca-watch": "Agghiunci sta pàggina â to lista taliata",
+       "tooltip-ca-unwatch": "Leva sta pàggina dâ to lista taliata",
        "tooltip-search": "Cerca 'n {{SITENAME}}",
        "tooltip-search-go": "Vai a na pàggina cu chistu nomu esattu siddu asisti",
        "tooltip-search-fulltext": "Arriscedi pàggini pi chistu testu",
        "tooltip-preview": "Antiprima dî canciamenti, ùsala prima di sarvari!",
        "tooltip-diff": "Talìa (mudalitati diff) li canciamenti c'hai fattu.",
        "tooltip-compareselectedversions": "Talìa li diffirenzi tra li dui virsioni silizziunati di sta pàggina.",
-       "tooltip-watch": "Agghiunci sta pàggina â to lista talïata",
+       "tooltip-watch": "Agghiunci sta pàggina â to lista taliata",
        "tooltip-watchlistedit-normal-submit": "Leva i tìtuli",
-       "tooltip-watchlistedit-raw-submit": "Aggiorna a lista talïata",
+       "tooltip-watchlistedit-raw-submit": "Aggiorna la lista taliata",
        "tooltip-recreate": "Ricrea la pàggina puru siddu hà statu cancillata",
        "tooltip-upload": "Ncigna carricamentu",
        "tooltip-rollback": "\"Rollback\" annulla li canci di l'ùrtinu cuntribbuturi â sta pâggina cu nu sulu clic.",
        "pageinfo-content-model": "Mudellu dû cuntinutu dâ pàggina",
        "pageinfo-robot-policy": "Innicizzazzioni pi' menzu di robot",
        "pageinfo-robot-index": "Cunsintuta",
-       "pageinfo-robot-noindex": "Prüibbuta",
+       "pageinfo-robot-noindex": "Pruibbuta",
        "pageinfo-watchers": "Quanti talìunu sta pàggina",
-       "pageinfo-few-watchers": "Cchiu' picca di $1 talïaturi",
+       "pageinfo-few-watchers": "Cchiu' picca di $1 {{PLURAL:$1|taliaturi|taliatura}}",
        "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}})",
-       "pageinfo-firstuser": "Crïaturi dâ pàggina",
-       "pageinfo-firsttime": "Data dâ crïazzioni dâ pàggina",
+       "pageinfo-firstuser": "Criaturi dâ pàggina",
+       "pageinfo-firsttime": "Data dâ criazzioni dâ pàggina",
        "pageinfo-lastuser": "Ùltimu cuntribbuturi",
        "pageinfo-lasttime": "Data di l'ùltimu canciamentu",
        "pageinfo-edits": "Nùmmiru tutali di canciamenti",
        "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.",
        "metadata": "Metadati",
-       "metadata-help": "Stu file cunteni autri nfurmazzioni, prubbabbirmenti agghiunti dâ màchina futugràfica o dû scanner adupirati pi' crïà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-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",
        "metadata-collapse": "Ammuccia li nfurmazzioni dittagghiati",
        "metadata-fields": "Li campi dî metadati dâ mmàggini elincati nta stu missaggiu sarrannu ammustrati ntâ pàggina dâ mmàggini quannu la tavula dî metadati è strinciuta.\nL'àutri campi comu mpustazzioni pridifinuta sarrannu ammucciati.\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-gpsdirection-t": "Direzzioni riali",
        "exif-gpsdirection-m": "Direzzioni magnètica",
        "exif-ycbcrpositioning-1": "Cintrati",
-       "exif-ycbcrpositioning-2": "Co-sitüati",
+       "exif-ycbcrpositioning-2": "Co-situati",
        "exif-dc-contributor": "Cuntribbuturi",
        "exif-dc-coverage": "Àmmitu spazziali o timpurali",
        "exif-dc-date": "Data/i",
        "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_pending": "Già nu còdici di cunfirma t'havi statu mannatu via e-mail;\nsiddu hai crïatu u 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_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_oncreate": "Un còdici di cunfirma fu' spidutu a lu to nnirizzu di posta elittrònica.\nLu còdici nun servi pi' tràsiri nta lu situ, ma ll'hâ' prisintari pi' putiri attivari tutti li funzioni dâ wiki ca fannu usu dâ posta elittrònica.",
        "scarytranscludefailed-httpstatus": "[Carricamentu dû template nun rinisciutu di $1: HTTP $2]",
        "scarytranscludetoolong": "[URL troppu longu]",
        "deletedwhileediting": "'''Accura''': Sta pàggina vinni scancillata doppu c'hai accuminzatu a scanciàrila!",
-       "confirmrecreate": "L'utenti [[User:$1|$1]] ([[User talk:$1|discussioni]]) cancillau sta pàggina appressu chi' tu avìi accuminciatu a' canciàrila, dannu sta spiegazzioni:\n: <em>$2</em>\nPi' favuri cunfirma chi' voi crïari n'autra vota sta pàggina pi' davera.",
-       "confirmrecreate-noreason": "L'utenti [[User:$1|$1]] ([[User talk:$1|discussioni]]) cancillau sta pàggina appressu chi' tu avìi accuminciatu a' canciàrila. Pi' favuri cunfirma chi' voi crïari n'autra vota sta pàggina pi' davera.",
+       "confirmrecreate": "L'utenti [[User:$1|$1]] ([[User talk:$1|discussioni]]) cancillau sta pàggina appressu chi' tu avìi accuminciatu a' canciàrila, dannu sta spiegazzioni:\n: <em>$2</em>\nPi' favuri cunfirma chi' voi criari n'autra vota sta pàggina pi' davera.",
+       "confirmrecreate-noreason": "L'utenti [[User:$1|$1]] ([[User talk:$1|discussioni]]) cancillau sta pàggina appressu chi' tu avìi accuminciatu a' canciàrila. Pi' favuri cunfirma chi' voi criari n'autra vota sta pàggina pi' davera.",
        "recreate": "Ricrìa",
        "unit-pixel": "px",
        "confirm_purge_button": "Cunfirma",
        "confirm-purge-top": "S'addisìa puliri la cache di sta pàggina?",
        "confirm-purge-bottom": "Pulizziari la cache di na pàggina pirmetti d'ammustrari la sô virsioni cchiù nova.",
        "confirm-watch-button": "Cunfirma",
-       "confirm-watch-top": "Agghiùnciri sta pàggina â to lista talïata?",
+       "confirm-watch-top": "Agghiùnciri sta pàggina â to lista taliata?",
        "confirm-unwatch-button": "Cunfirma",
-       "confirm-unwatch-top": "Livari sta pàggina dâ to lista talïata?",
+       "confirm-unwatch-top": "Livari sta pàggina dâ to lista taliata?",
        "quotation-marks": "«$1»",
        "imgmultipageprev": "← pàggina pricidenti",
        "imgmultipagenext": "pàggina siquenti →",
        "autosumm-replace": "Pàggina sustituita cu '$1'",
        "autoredircomment": "Rinnirizzamentu â pàggina [[$1]]",
        "autosumm-new": "Criata pàggina cu '$1'",
-       "autosumm-newblank": "Crïata na pàggina vacanti",
+       "autosumm-newblank": "Criata na pàggina vacanti",
        "lag-warn-normal": "Li canciamenti appurtati {{PLURAL:$1|nta l'ùrtimu secundu|nta l'ùrtimi $1 secundi}} ponnu nun èssiri nta sta lista.",
        "lag-warn-high": "A càusa di nu ritardu eccissivu nta l'aggiurnamentu dô server di databbasi, li canciamenti appurtati {{PLURAL:$1|nta l'ùrtimu secundu|nta l'ùrtimi $1 secundi}} ponnu nun èssiri nta sta lista.",
        "watchlistedit-normal-title": "Cancia pàggini taliati",
        "watchlistedit-normal-legend": "Eliminazzioni di pàggini dâ lista dê pàggini taliati",
-       "watchlistedit-normal-explain": "Ccassutta cci su' li tìtuli ntâ to lista talïata.\nPi' livàrinni unu, scegghî la casedda a' latu d'iddu, e clicca \"{{int:Watchlistedit-normal-submit}}\".\nPoi puru [[Special:EditWatchlist/raw|canciari la lista 'n forma testuali]].",
+       "watchlistedit-normal-explain": "Ccassutta cci su' li tìtuli ntâ to lista taliata.\nPi' livàrinni unu, scegghî la casedda a' latu d'iddu, e clicca \"{{int:Watchlistedit-normal-submit}}\".\nPoi puru [[Special:EditWatchlist/raw|canciari la lista 'n forma testuali]].",
        "watchlistedit-normal-submit": "Elìmina pàggini",
        "watchlistedit-normal-done": "Dâ lista dê pàggini taliati hà{{PLURAL:$1|&nbsp;stata eliminata na pàggina|nnu stati eliminati $1 pàggini}}:",
        "watchlistedit-raw-title": "Cancia li pàggini taliati 'n forma testuali",
        "watchlistedit-raw-legend": "Canciamentu testuali pàggini taliati",
-       "watchlistedit-raw-explain": "Ccassutta cci su' li tìtuli ntâ to lista talïata, chi' si po' canciari agghiuncennu e livannu tituli, unu pi' riga.\nQuannu hai finutu, clicca \"{{int:Watchlistedit-raw-submit}}\".\nPoi puru [[Special:EditWatchlist|canciari a lista dâ pàggina tradizziunali]].",
+       "watchlistedit-raw-explain": "Ccassutta cci su' li tìtuli ntâ to lista taliata, chi' si po' canciari agghiuncennu e livannu tituli, unu pi' riga.\nQuannu hai finutu, clicca \"{{int:Watchlistedit-raw-submit}}\".\nPoi puru [[Special:EditWatchlist|canciari a lista dâ pàggina tradizziunali]].",
        "watchlistedit-raw-titles": "Pàggini:",
        "watchlistedit-raw-submit": "Aggiorna la lista",
        "watchlistedit-raw-done": "La tò lista dê pàggini taliati vinni aggiurnata.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Fu junciuta na pàggina|Foru junciuti $1 pàggini}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|&nbsp;Vinni scancillata na pàggina|Foru scancillati $1 pàggini}}:",
-       "watchlistedit-clear-title": "Lista talïata svacantata",
-       "watchlistedit-clear-legend": "Svacanta a lista talïata",
-       "watchlistedit-clear-explain": "Tutti i tìtuli sarannu livati da to lista talïata",
+       "watchlistedit-clear-title": "Lista taliata svacantata",
+       "watchlistedit-clear-legend": "Svacanta la lista taliata",
+       "watchlistedit-clear-explain": "Tutti li tìtuli sarrannu livati da to lista taliata",
        "watchlistedit-clear-titles": "Tìtuli:",
-       "watchlistedit-clear-submit": "Svacanta a lista talïata (Sta cosa è difinitiva!)",
-       "watchlistedit-clear-done": "A to lista talïata fu svacantata.",
+       "watchlistedit-clear-submit": "Svacanta la lista taliata (Sta cosa è difinitiva!)",
+       "watchlistedit-clear-done": "La tò lista taliata fu svacantata.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|Un tìtulu fu'|$1 tìtuli furu}} livati:",
        "watchlistedit-too-many": "Cci su' troppu pàggini p'ammustràrili cca.",
-       "watchlisttools-clear": "Svacanta a lista talïata",
+       "watchlisttools-clear": "Svacanta la lista taliata",
        "watchlisttools-view": "Talìa li canciamenti rilivanti",
        "watchlisttools-edit": "Talìa e cancia la lista",
        "watchlisttools-raw": "Cancia la lista 'n forma testuali",
        "version-parser-function-hooks": "Hook pi funzioni dû parser",
        "version-hook-name": "Nomu di l'hook",
        "version-hook-subscribedby": "Suttascrizzioni",
-       "version-version": "(Virsioni $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[nuddu nomu]",
        "version-license": "Licenza di MediaWiki",
        "version-ext-license": "Licenza",
        "version-poweredby-others": "autri",
        "version-poweredby-translators": "i tradutturi di translatewiki.net",
        "version-credits-summary": "Vulemu ricanusciri u cuntribbutu di sti pirsuni a' [[Special:Version|MediaWiki]].",
-       "version-license-info": "MediaWiki è software lìbbiru; si po' ri-distribbüiri e/o mudificari sutta ê tèrmini dâ GNU General Public License comu pubblicata dâ Free Software Foundation; o la virsioni 2 dâ Licenza, o (a' propia scelta) na virsioni succissiva quali è jè.\n\nMediaWiki veni distribuùtu ntâ spiranza chi' sia ùtili, però SENZA NUDDA GARANZÌA; mancu chidda implìcita di NIGUZZIABBILITÀ o di APPLICABBILITÀ PI' NU SCOPU PARTICULARI. Si talïassi la GNU General Public License pi' maggiuri dittagghî.\n\nS'avissi a' avìri ricivutu [{{SERVER}}{{SCRIPTPATH}}/COPYING na copia dâ GNU General Public License] nsèmmula a' stu prugramma; si' no, si po' scrìviri â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html la si po' lèggiri in linia].",
+       "version-license-info": "MediaWiki è software lìbbiru; si po' ri-distribbuiri e/o mudificari sutta ê tèrmini dâ GNU General Public License comu pubblicata dâ Free Software Foundation; o la virsioni 2 dâ Licenza, o (a' propia scelta) na virsioni succissiva quali è jè.\n\nMediaWiki veni distribuùtu ntâ spiranza chi' sia ùtili, però SENZA NUDDA GARANZÌA; mancu chidda implìcita di NIGUZZIABBILITÀ o di APPLICABBILITÀ PI' NU SCOPU PARTICULARI. Si taliassi la GNU General Public License pi' maggiuri dittagghî.\n\nS'avissi a' avìri ricivutu [{{SERVER}}{{SCRIPTPATH}}/COPYING na copia dâ GNU General Public License] nsèmmula a' stu prugramma; si' no, si po' scrìviri â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html la si po' lèggiri in linia].",
        "version-software": "Software nstallatu",
        "version-software-product": "Prodottu",
        "version-software-version": "Virsioni",
        "fileduplicatesearch-info": "$1 × $2 pixel<br />Diminzioni: $3<br />Tipu MIME: $4",
        "fileduplicatesearch-result-1": "Non ci sunnu duppiuni li stissi dû file \"$1\".",
        "fileduplicatesearch-result-n": "{{PLURAL:$2|C'è ggià nu duppiuni lu stissu|Ci sunnu ggià $2 duppiuni li stissi}} dû file \"$1\".",
-       "fileduplicatesearch-noresults": "Nuddu file chiamatu \"$1\" fu' truvatu.",
+       "fileduplicatesearch-noresults": "Nuddu file chiamatu \"$1\" fu truvatu.",
        "specialpages": "Pàggini spiciali",
        "specialpages-note-top": "Legenda",
        "specialpages-note": "* Pàggini spiciali nurmali.\n* <span class=\"mw-specialpagerestricted\">Pàggini spiciali risirvati.</strong>",
        "specialpages-group-maintenance": "Resocunti di manutinzioni",
        "specialpages-group-other": "Autri pàggini spiciali",
-       "specialpages-group-login": "Trasuta / crïazzioni di cunti",
+       "specialpages-group-login": "Trasuta / criazzioni di cunti",
        "specialpages-group-changes": "Ùrtimi canciamenti e riggistra",
        "specialpages-group-media": "File multimidiali - caricamentu e rennicunti",
        "specialpages-group-users": "Utenti e diritti",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|spustau}} a pàggina $3 nta $4 ô postu dûn rimannu senza lassari nu rimannu",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|marcau}} a virsioni $4 dâ pàggina $3 comu battugghiata",
        "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|marcau}} di manera autumàtica a virsioni $4 dâ pàggina $3 comu battugghiata",
-       "logentry-newusers-newusers": "U cuntu di l'utenti $1 fu' {{GENDER:$2|crïatu}}",
-       "logentry-newusers-create": "U cuntu di l'utenti $1 fu' {{GENDER:$2|crïatu}}",
-       "logentry-newusers-create2": "U cuntu di l'utenti $3 fu' {{GENDER:$2|crïatu}} di $1",
-       "logentry-newusers-byemail": "U cuntu di l'utenti $3 fu' {{GENDER:$2|crïatu}} di $1 e a password fu' mannata via posta elittrònica",
-       "logentry-newusers-autocreate": "U cuntu di l'utenti $1 fu' {{GENDER:$2|crïatu}} di manera autumàtica",
+       "logentry-newusers-newusers": "U cuntu di l'utenti $1 fu {{GENDER:$2|criatu}}",
+       "logentry-newusers-create": "U cuntu di l'utenti $1 fu' {{GENDER:$2|criatu}}",
+       "logentry-newusers-create2": "U cuntu di l'utenti $3 fu' {{GENDER:$2|criatu}} di $1",
+       "logentry-newusers-byemail": "U cuntu di l'utenti $3 fu' {{GENDER:$2|criatu}} di $1 e a password fu' mannata via posta elittrònica",
+       "logentry-newusers-autocreate": "U cuntu di l'utenti $1 fu' {{GENDER:$2|criatu}} di manera autumàtica",
        "logentry-rights-rights": "$1 {{GENDER:$2|canciau}} l'appartinenza di $3 dû gruppu $4 ô gruppu $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|canciau}} l'appartinenza a' gruppi di $3",
        "logentry-rights-autopromote": "$1 fu' {{GENDER:$2|prumuvutu|prumuvuta}} di manera autumatica di $4 a' $5",
        "logentry-upload-revert": "$1 {{GENDER:$2|carricau}} $3",
        "rightsnone": "(nuddu)",
        "revdelete-summary": "riassuntu dô canciamentu",
+       "feedback-adding": "Agghiuncimentu dû cummentu â pàggina...",
+       "feedback-bugcheck": "Bonu! Sulu cuntrolla chi' nun è unu dî [$1 bug già canusciuti].",
+       "feedback-bugnew": "Cuntrullai. Signala nu bug novu",
        "feedback-bugornote": "Si' si' bonu a' discrìviri un prubblema tècnicu di manera dittagghiata, pi' favuri [$1 signala nu bug].\nSi' no, poi adupirari u mòdulu facilitatu ccassutta. U to cummentu sarravi agghiunciutu â pàggina \"[$3 $2]\", nsemmula ô to nomu utenti.",
-       "feedback-subject": "Oggettu:",
-       "feedback-message": "Missaggiu:",
        "feedback-cancel": "Annulla",
-       "feedback-submit": "Manna u cummentu",
-       "feedback-adding": "Agghiuncimentu dû cummentu â pàggina...",
+       "feedback-close": "Finutu",
        "feedback-error1": "Erruri: Risultatu di l'API nun ricanusciutu",
        "feedback-error2": "Erruri: A mudìfica nun riniscìu",
        "feedback-error3": "Erruri: Nudda risposta di l'API",
+       "feedback-message": "Missaggiu:",
+       "feedback-subject": "Oggettu:",
+       "feedback-submit": "Manna",
        "feedback-thanks": "Grazzî! U to cummentu fu' affissu ntâ pàggina \"[$2 $1]\".",
-       "feedback-close": "Finutu",
-       "feedback-bugcheck": "Bonu! Sulu cuntrolla chi' nun è unu dî [$1 bug già canusciuti].",
-       "feedback-bugnew": "Cuntrullai. Signala nu bug novu",
        "searchsuggest-search": "Risciduta",
        "searchsuggest-containing": "chi' cunteni...",
        "api-error-badaccess-groups": "Nun hai u pirmissu di carricari file nta sta wiki.",
        "api-error-duplicate-archive-popup-title": "{{PLURAL:$1|File duppiuni|File duppiuni}} chi' già {{PLURAL:$1|havi statu cancillatu|hannu statu cancillati}}.",
        "api-error-duplicate-popup-title": "File {{PLURAL:$1|duppiuni}}.",
        "api-error-empty-file": "U file chi' mannasti era vacanti.",
-       "api-error-emptypage": "Crïari pàggini novi e vacanti nun è cunsintutu.",
+       "api-error-emptypage": "Criari pàggini novi e vacanti nun è cunsintutu.",
        "api-error-fetchfileerror": "Erruri nternu: Quarchi' cosa nun funziunau mentri chi' si carricava u file.",
        "api-error-fileexists-forbidden": "Nu file chi' si chiama \"$1\" già esisti, e nun si po' suprascrìviri.",
        "api-error-fileexists-shared-forbidden": "Nu file chi' si chiama \"$1\" già esisti ntô dipòsitu cunnivisu, e nun si po' suprascrìviri.",
        "api-error-unknown-warning": "Avvirtimentu scanusciutu: \"$1\".",
        "api-error-unknownerror": "Erruri scanusciutu: \"$1\".",
        "api-error-uploaddisabled": "U carricamentu è disattivatu nta sta wiki.",
-       "api-error-verification-error": "U file purrìa èssiri rüinatu, o puru aviri l'estinsioni sbagghiata.",
+       "api-error-verification-error": "Lu file purrìa èssiri ruinatu, o puru aviri l'estinsioni sbagghiata.",
        "duration-seconds": "$1 {{PLURAL:$1|sicunnu|sicunni}}",
        "duration-minutes": "$1 {{PLURAL:$1|minutu|minuti}}",
        "duration-hours": "$1 {{PLURAL:$1|ura|uri}}",
        "limitreport-title": "Dati di prufilazzioni di l'analizzaturi sintatticu:",
        "limitreport-cputime": "Usu di tempu dâ CPU",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|sicunnu|sicunni}}",
-       "limitreport-walltime": "Usu di tempu rïàli",
+       "limitreport-walltime": "Usu di tempu riàli",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|sicunnu|sicunni}}",
        "limitreport-ppvisitednodes": "Cuntiggiu dî gruppi visitati dû priprucissuri",
        "limitreport-ppgeneratednodes": "Cuntiggiu dî gruppi ginirati dû priprucissuri",
        "log-name-pagelang": "Riggistru dî canci di lingua",
        "log-description-pagelang": "Chistu è nu riggistru dî canciamenti â lingua dî pàggini.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|canciau}} a lingua dâ pàggina $3 di $4 a' $5.",
-       "default-skin-not-found": "Whoops! A peddi pridifinuta dâ to wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nA' quantu pari la to installazzioni ncludi i peddi ccasutta. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manüali: Cunfigurazzioni dî peddi] p'istruzzioni supra a' comu s'attìvunu e comu si scegghî chidda pridifinuta.\n\n$2\n\n; Si' hai installatu MediaWiki ora ora:\n: E' prubbàbbili chi' l'installasti dû git, o direttamenti dû còdici surgenti nta quarchi' autra manera. Allura sta cosa è privista. Prova e installa quarchi' peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archìviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download u prugramma d'installazzioni in furmatu tar], chi' cunteni tanti peddi ed estinsioni. Poi cupiari e ncuddari a cartella <code>skins/</code> di ddadintra.\n:* Scàrrica a' una a' una quarchi' peddi in furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clona via git unu dî dipòsiti <code>mediawiki/skins/*</code> ntâ cartella <code dir=\"ltr\">skins/</code> dâ to installazzioni di MediaWiki.\n: Fari accussì' nun avissi a' ntirfirìri cû to dipòsitu git si' si' nu sviluppaturi di MediaWiki.\n\n; Si' hai aggiurnatu MediaWiki ora ora:\n: MediaWiki virsioni 1.24 e succissivi nun attìvunu cchiu' di manera autumàtica i peddi installati (talìa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manüali: Scuperta autumatica dî peddi]). Poi cupiari e ncuddari sti righi nta <code>LocalSettings.php</code> p'attivari tutti i peddi chi' sunnu pi' com'ora installati:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si' hai mudificatu <code>LocalSettings.php</code> ora ora:\n: Cuntrolla chi' nun sbagghiasti a' scriviri i nomi dî peddi.",
+       "default-skin-not-found": "Whoops! La peddi pridifinuta dâ to wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nA' quantu pari la to installazzioni ncludi li peddi ccasutta. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuali: Cunfigurazzioni dî peddi] p'istruzzioni supra a' comu s'attìvunu e comu si scegghî chidda pridifinuta.\n\n$2\n\n; Si' hai installatu MediaWiki ora ora:\n: E' prubbàbbili chi' l'installasti dû git, o direttamenti dû còdici surgenti nta quarchi' autra manera. Allura sta cosa è privista. Prova e installa quarchi' peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archìviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download lu prugramma d'installazzioni in furmatu tar], chi' cunteni tanti peddi ed estinsioni. Poi cupiari e ncuddari la cartella <code>skins/</code> di ddadintra.\n:* Scàrrica a' una a' una quarchi' peddi in furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clona via git unu dî dipòsiti <code>mediawiki/skins/*</code> ntâ cartella <code dir=\"ltr\">skins/</code> dâ to installazzioni di MediaWiki.\n: Fari accussì' nun avissi a' ntirfirìri cû to dipòsitu git si' si' nu sviluppaturi di MediaWiki.\n\n; Si' hai aggiurnatu MediaWiki ora ora:\n: MediaWiki virsioni 1.24 e succissivi nun attìvunu cchiu' di manera autumàtica i peddi installati (talìa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manüali: Scuperta autumatica dî peddi]). Poi cupiari e ncuddari sti righi nta <code>LocalSettings.php</code> p'attivari tutti li peddi chi' sunnu pi' com'ora installati:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si' hai mudificatu <code>LocalSettings.php</code> ora ora:\n: Cuntrolla chi' nun sbagghiasti a' scriviri li nomi dî peddi.",
        "default-skin-not-found-no-skins": "Whoops! La peddi pridifinuta dâ to wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nNun hai nudda peddi installata.\n\n; Si' hai installatu o puru aggiurnatu MediaWiki ora ora:\n: E' prubbàbbili chi' l'installasti dû git, o direttamenti dû còdici surgenti nta quarchi' autra manera. Allura sta cosa è privista. MediaWiki virsioni 1.24 e succissivi nun cuntènunu nudda peddi ntô dipòsitu principali. Prova e installa quarchi' peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archìviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download u prugramma d'installazzioni in furmatu tar], chi' cunteni tanti peddi ed estinsioni. Poi cupiari e ncuddari a cartella <code>skins/</code> di ddadintra.\n:* Scàrrica a' una a' una quarchi' peddi in furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clona via git unu dî dipòsiti <code>mediawiki/skins/*</code> ntâ cartella <code dir=\"ltr\">skins/</code> dâ to installazzioni di MediaWiki.\n: Fari accussì' nun avissi a' ntirfirìri cû to dipòsitu git si' si' nu sviluppaturi di MediaWiki. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manüali: Cunfigurazzioni dî peddi] p'istruzzioni supra a' comu s'attìvunu i peddi e comu si scegghî chidda pridifinuta.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (attivata)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disattivata''')",
        "mediastatistics-header-archive": "Furmati cumpressi",
        "json-warn-trailing-comma": "$1 {{PLURAL:$1|vìrgula finali fu' livata|vìrguli finali furu livati}} dû JSON",
        "json-error-unknown": "Mmattìu un prubblema cû JSON. Erruri: $1",
-       "json-error-depth": "Fu' passatu u massimu funnu dû stack",
+       "json-error-depth": "Fu passatu lu massimu funnu dû stack",
        "json-error-state-mismatch": "JSON nun vàlidu o malfurmatu",
        "json-error-ctrl-char": "Caràttiri di cuntrollu nun privistu, forsi cudificatu mali",
        "json-error-syntax": "Erruri di sintassi",
        "json-error-utf8": "Caràttiri UTF-8 nun vàlidi, forsi cudificati mali",
        "json-error-recursion": "U valuri di cudificari havi unu o cchiu' ssai rifirimenti ricursivi",
        "json-error-inf-or-nan": "U valuri di cudificari havi unu o cchiu' ssai valuri NAN o INF",
-       "json-error-unsupported-type": "Fu' passatu nu valuri dûn tipu chi' nun si po' cudificari"
+       "json-error-unsupported-type": "Fu' passatu nu valuri dûn tipu chi' nun si po' cudificari",
+       "special-characters-group-latin": "Latinu",
+       "special-characters-group-latinextended": "Latinu estinnutu",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Sìmmuli",
+       "special-characters-group-greek": "Grecu",
+       "special-characters-group-cyrillic": "Cirillicu",
+       "special-characters-group-arabic": "Àrabbu",
+       "special-characters-group-persian": "Persianu",
+       "special-characters-group-hebrew": "Ebbreu",
+       "special-characters-group-bangla": "Bengalisi",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalisi",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-thai": "Tailannisi",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index 8a4d124..7fde9ab 100644 (file)
@@ -17,7 +17,9 @@
                        "sco.wikipedia.org editors",
                        "לערי ריינהארט",
                        "아라",
-                       "PiRSquared17"
+                       "PiRSquared17",
+                       "Macofe",
+                       "Caliburn"
                ]
        },
        "tog-underline": "Unnerline airtins:",
        "disclaimers": "Disclamation",
        "disclaimerpage": "Project:General_disclamation",
        "edithelp": "Eeditin help",
+       "helppage-top-gethelp": "Help",
        "mainpage": "Main Page",
        "mainpage-description": "Main Page",
        "policy-url": "Project:Policie",
        "deleteprotected": "Ye canna delyte this page cause it's been fended.",
        "deleting-backlinks-warning": "'''Warnishment:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Ither pages]] airt til or transcluide the page ye'r aboot tae delyte.",
        "rollback": "Row back eedits",
-       "rollback_short": "Rowback",
        "rollbacklink": "rowback",
        "rollbacklinkcount": "rowback $1 {{PLURAL:$1|eedit|eedits}}",
        "rollbacklinkcount-morethan": "rowback mair than $1 {{PLURAL:$1|eedit|eedits}}",
        "import-logentry-interwiki": "transwikied $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|reveesion|reveesions}} importit fae $2",
        "javascripttest": "JavaScript testin",
-       "javascripttest-title": "Rinnin $1 tests",
        "javascripttest-pagetext-noframework": "This page is reserved fer rinnin JavaScript tests.",
        "javascripttest-pagetext-unknownframework": "Onkent testin framewairk \"$1\".",
        "javascripttest-pagetext-frameworks": "Please chuise yin o the follaein testin framewairks: $1",
        "javascripttest-pagetext-skins": "Chuise ae skin tae rin the tests wi:",
        "javascripttest-qunit-intro": "See [$1 testin documentation] oan mediawiki.org.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
        "tooltip-pt-userpage": "Yer uiser page",
        "tooltip-pt-anonuserpage": "The uiser page fer the IP address that ye'r eeditin aes",
        "tooltip-pt-mytalk": "Yer tauk page",
        "logentry-upload-revert": "$1 {{GENDER:$2|uplaidit}} $3",
        "rightsnone": "(nane)",
        "revdelete-summary": "eedit the ootline",
+       "feedback-adding": "Eikin feedback til page...",
+       "feedback-bugcheck": "Wunnerfu! Just check that it's na awreadie yin o the [$1 knawn bugs].",
+       "feedback-bugnew": "Ah checkt. Report ae new bug",
        "feedback-bugornote": "Gif yer readie tae describe ae techneecal proablem in detail please [$1 report ae bug].\nItherwise, ye can uiss the easie form ablo. Yer comment will be eikit til the page \"[$3 $2]\", alang wi yer uisername.",
-       "feedback-subject": "Aneat:",
-       "feedback-message": "Message:",
        "feedback-cancel": "Cancel",
-       "feedback-submit": "Haund Feedback In",
-       "feedback-adding": "Eikin feedback til page...",
+       "feedback-close": "Dun",
        "feedback-error1": "Mistak: Onrecognised ootcome fae API",
        "feedback-error2": "Mistak: Eedit failed",
        "feedback-error3": "Mistak: Naw response fae API",
+       "feedback-message": "Message:",
+       "feedback-subject": "Aneat:",
+       "feedback-submit": "Haun-in",
        "feedback-thanks": "Thanks! Yer feedback haes been posted til the page \"[$2 $1]\".",
-       "feedback-close": "Dun",
-       "feedback-bugcheck": "Wunnerfu! Just check that it's na awreadie yin o the [$1 knawn bugs].",
-       "feedback-bugnew": "Ah checkt. Report ae new bug",
        "searchsuggest-search": "Rake",
        "searchsuggest-containing": "containin...",
        "api-error-badaccess-groups": "Ye'r na permittit tae uplaid files til this wiki.",
index c517d95..8ec5156 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Songhay"
+                       "Songhay",
+                       "Macofe"
                ]
        },
        "tog-underline": "Dobu ganda-žeeriyan:",
        "deleteprotected": "War ši hin ka moɲoo woo tuusu zam'a ma jejebandi.",
        "deleting-backlinks-warning": "'''Warning:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Moo taney]] ga dobu wal'i huru moɲoo kaŋ war ga baa k'a barmay dogoo ra.",
        "rollback": "Yee banda fasalyaney \\",
-       "rollback_short": "Yee banda",
        "rollbacklink": "yee banda",
        "rollbacklinkcount": "{{PLURAL:$1|Fasalyan}} $1 yee banda",
        "rollbacklinkcount-morethan": "Kaŋ ga bisa {{PLURAL:$1|fasalyan}} $1 yee banda",
        "import-rootpage-nosubpage": "$1 maafarroo kaŋ goo linji moo se ši moo-izeyaŋ duɲe. \\",
        "importlogpage": "Taariki dam",
        "importlogpagetext": "Juwalkaw ga moɲey dam nda fasalyan taariki ka hun wiki waaniyaŋ ga.",
-       "import-logentry-upload": "na [[$1]] dam nda tuku zijandiyan",
        "import-logentry-upload-detail": "{{PLURAL:$1|Filla}} $1 ka huru",
-       "import-logentry-interwiki": "$1 huru transwiki bande \\",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Filla}} $1 huru ka hun $2 ga",
        "javascripttest": "JavaScript šiiyan",
-       "javascripttest-title": "Goo ma $1 šii",
        "javascripttest-pagetext-noframework": "Moɲoo woo n' ka lanbandi ka JavaScript šiiyaney tee.",
        "javascripttest-pagetext-unknownframework": "Kungagoy \"$1\" šiiyan ši bayandi.",
        "javascripttest-pagetext-frameworks": "Šiiyan kungagoy šiiyaney wey affoo suuba: $1",
        "javascripttest-pagetext-skins": "Kuuru foo suuba ka šiiyaney tee nd'a:",
        "javascripttest-qunit-intro": "Guna [$1 šiiyan fahamandi tiira] mediawiki.org ga.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit šiiyan margari",
        "tooltip-pt-userpage": "War goykaw moɲoo",
        "tooltip-pt-anonuserpage": "Goykaw moo IP aderesoo kaŋ war goo m'a fasal sanda",
        "tooltip-pt-mytalk": "War deede moɲoo",
        "logentry-upload-revert": "$1 na $3 {{GENDER:$2|zijandi}}",
        "rightsnone": "(baffoo)",
        "revdelete-summary": "duurandi fasal",
+       "feedback-adding": "Goo ma willandi tonton moɲoo ga…",
+       "feedback-bugcheck": "A boori! Koroši de wala woo manti [hasaraw bayrandi $1] affaa. \\",
+       "feedback-bugnew": "Ay n'a koroši. Hasaraw bayrandi sanba",
        "feedback-bugornote": "Nda war soolu ka dabari šenday šilbay ka tonton, [$1 hasaraw bayrandi hantum].\nNd'a manti woo, war ga hin ka goy nda takkada faalaa ne ganda. War laasaaboo ka tonton \"[$3 $2]\" moɲoo ga, war goykawmaaɲoo bande.",
-       "feedback-subject": "Teekaw",
-       "feedback-message": "Alhabar:",
        "feedback-cancel": "Naŋ",
-       "feedback-submit": "Willandi sanba",
-       "feedback-adding": "Goo ma willandi tonton moɲoo ga…",
+       "feedback-close": "A ben",
        "feedback-error1": "Firka: hunyan šibayante porogaram hantumyan gunaridoo (API) ga",
        "feedback-error2": "Firka: fasalyan kaŋ",
        "feedback-error3": "Firka: Zaabi kul ši hun API do",
+       "feedback-message": "Alhabar:",
+       "feedback-subject": "Teekaw",
+       "feedback-submit": "Sanba",
        "feedback-thanks": "Foo nda goy! War willandoo n' ka wallafandi \"[$2 $1]\" moɲoo ga.",
-       "feedback-close": "A ben",
-       "feedback-bugcheck": "A boori! Koroši de wala woo manti [hasaraw bayrandi $1] affaa. \\",
-       "feedback-bugnew": "Ay n'a koroši. Hasaraw bayrandi sanba",
        "searchsuggest-search": "Ceeci",
        "searchsuggest-containing": "goo nda…",
        "api-error-badaccess-groups": "War ši nda fondo ka tukey zijandi wikiyoo woo ga.",
index 50073d8..23a59ac 100644 (file)
@@ -7,7 +7,8 @@
                        "OC Ripper",
                        "לערי ריינהארט",
                        "아라",
-                       "Milicevic01"
+                       "Milicevic01",
+                       "Macofe"
                ]
        },
        "tog-underline": "Podvuci linkove:",
        "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.",
        "rollback": "Vrati izmjene",
-       "rollback_short": "Vrati",
        "rollbacklink": "vrati",
        "rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}",
        "rollbacklinkcount-morethan": "vrati više od $1 {{PLURAL:$1|izmjene|izmjene|izmjena}}",
        "import-rootpage-nosubpage": "Imenski prostor „$1“ osnovne stranice ne dozvoljava podstranice.",
        "importlogpage": "Evidencija uvoza stranica",
        "importlogpagetext": "Administrativni uvozi stranica s historijom izmjena sa drugih wikija.",
-       "import-logentry-upload": "uvezen/a [[$1]] postavljanjem datoteke",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizija|revizije|revizija}}",
-       "import-logentry-interwiki": "uveženo (\"transwikied\") $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revizija|revizije|revizija}} sa $2",
        "javascripttest": "Javaskript test",
        "javascripttest-pagetext-noframework": "Ova stranica je rezervisana za izvršavanje javaskript testova.",
        "version-parser-function-hooks": "Kuke parserske funkcije",
        "version-hook-name": "Naziv kuke",
        "version-hook-subscribedby": "Pretplaćeno od",
-       "version-version": "(Verzija $1)",
+       "version-version": "($1)",
        "version-license": "Licenca",
        "version-poweredby-credits": "Ova wiki je zasnovana na '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
        "version-poweredby-others": "ostali",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|je automatski unaprijeđen|je automatski unaprijeđena}} iz $4 u $5",
        "rightsnone": "(nema)",
        "revdelete-summary": "sažetak izmjene",
+       "feedback-adding": "Dodajem povratne informacije na stranicu...",
+       "feedback-bugcheck": "Izvrsno! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
+       "feedback-bugnew": "Provereno. Prijavi novu grešku",
        "feedback-bugornote": "Ako ste spremni da detaljno opišete tehnički problem, onda [$1 prijavite grešku].\nU suprotnom, poslužite se jednostavnim obrascem ispod. Vaš komentar će stajati na stranici „[$3 $2]“, zajedno s korisničkim imenom i pregledačem koji koristite.",
-       "feedback-subject": "Tema:",
-       "feedback-message": "Poruka:",
        "feedback-cancel": "Odustani",
-       "feedback-submit": "Pošalji povratnu informaciju",
-       "feedback-adding": "Dodajem povratne informacije na stranicu...",
+       "feedback-close": "Gotovo",
        "feedback-error1": "Greška: neprepoznat rezultat od API-ja",
        "feedback-error2": "Greška: Uređivanje nije uspjelo",
        "feedback-error3": "Greška: nema odgovora od API-ja",
+       "feedback-message": "Poruka:",
+       "feedback-subject": "Tema:",
+       "feedback-submit": "Unesi",
        "feedback-thanks": "Hvala! Vaša povratna informacija je postavljena na stranicu „[$2 $1]“.",
-       "feedback-close": "Gotovo",
-       "feedback-bugcheck": "Izvrsno! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
-       "feedback-bugnew": "Provereno. Prijavi novu grešku",
        "searchsuggest-search": "Traži",
        "searchsuggest-containing": "sadrži...",
        "api-error-badaccess-groups": "Nemate ovlasti da postavljate datoteke na ovoj wiki.",
index fb15742..ce40d75 100644 (file)
@@ -27,7 +27,8 @@
                        "Indunil Chamara",
                        "Susith Chandira Gts",
                        "Thanushka",
-                       "Thirsty"
+                       "Thirsty",
+                       "Macofe"
                ]
        },
        "tog-underline": "සබැඳි යටීර කිරීම:",
        "import-rootpage-invalid": "ලබා දුන් මූල පිටුව වැරදි ශීර්ෂයක් වේ.",
        "importlogpage": "ලඝු-සටහන් ආයාත කරන්න",
        "importlogpagetext": "අනෙකුත් විකියන්ගෙන් සංස්කරණ ඉතිහාසයන් ඇති පිටු වල පරිපාලනමය ආයාත කිරීම්.",
-       "import-logentry-upload": "ගොනු උඩුගත කිරීමක් මගින් [[$1]] ආයාත කෙරිණි",
        "import-logentry-upload-detail": " {{PLURAL:$1|සංශෝධනය|සංශෝධන $1 ක්}}",
-       "import-logentry-interwiki": "$1 අන්තර්විකීකරණය කරන ලදි",
        "import-logentry-interwiki-detail": "$2 වෙතින් {{PLURAL:$1|එක් සංශෝධනයක්|සංශෝධන $1 ක්}}",
        "javascripttest": "ජාවාස්ක්‍රිප්ට් පරික්ෂාකරමින්",
        "javascripttest-pagetext-noframework": "මෙම පිටුව ජාවාස්ක්‍රිප්ට් පරික්ෂණ සිදුකිරීම සඳහා වෙන්කර ඇත.",
        "version-parser-function-hooks": "වයාකරණ විග්‍රහක ශ්‍රිත හසුරු",
        "version-hook-name": "හසුරු නම",
        "version-hook-subscribedby": "දායකවී ඇත්තේ",
-       "version-version": "(අනුවාදය $1)",
+       "version-version": "($1)",
        "version-license": "වරපත",
        "version-poweredby-credits": "මෙම විකිය '''[https://www.mediawiki.org/ MediaWiki]''' මගින් බලගන්වා ඇත, copyright © 2001-$1 $2.",
        "version-poweredby-others": "අනෙකුත්",
        "logentry-newusers-autocreate": "$1 ගිණුම ස්වංක්‍රීයව නිර්මිතය",
        "rightsnone": "(කිසිවක් නොමැත)",
        "revdelete-summary": "සංස්කරණ සාරාංශය",
-       "feedback-subject": "විෂයය:",
-       "feedback-message": "පණිවුඩය:",
-       "feedback-cancel": "අවලංගු කරන්න",
-       "feedback-submit": "ප්‍රතිචාරය යවන්න",
        "feedback-adding": "ප්‍රතිචාරය පිටුවට එක් කරමින් ...",
+       "feedback-bugcheck": "කදිමයි! දැන් එය දැනටමත් [$1 හඳුනාගත් දෝෂ]වල තිබේ දැයි පිරික්සන්න.",
+       "feedback-bugnew": "මම පරික්ෂා කළා. නව දෝෂය වාර්තා කරන්න",
+       "feedback-cancel": "අවලංගු කරන්න",
+       "feedback-close": "හරි",
        "feedback-error1": "දෝෂය: API ගෙන් හදුනානොගත් ප්‍රතිපල",
        "feedback-error2": "දෝෂය: සංස්කරණය අසාර්ථකයි",
        "feedback-error3": "දෝෂය: API ගෙන් ප්‍රතිචාරයක් නොමැත",
+       "feedback-message": "පණිවුඩය:",
+       "feedback-subject": "විෂයය:",
+       "feedback-submit": "යොමන්න",
        "feedback-thanks": "ස්තුතියි! ඔබේ ප්‍රතිචාරය \"[$2 $1]\" පිටුවට එක් කරන ලදී.",
-       "feedback-close": "හරි",
-       "feedback-bugcheck": "කදිමයි! දැන් එය දැනටමත් [$1 හඳුනාගත් දෝෂ]වල තිබේ දැයි පිරික්සන්න.",
-       "feedback-bugnew": "මම පරික්ෂා කළා. නව දෝෂය වාර්තා කරන්න",
        "searchsuggest-search": "ගවේශණය කරන්න",
        "searchsuggest-containing": "ඇතුළත් වෙමින් පවතී...",
        "api-error-badaccess-groups": "මෙම විකියට ගොනු උඩුගතකිරීම සඳහා ඔබට අවසර නැත.",
        "expand_templates_remove_comments": "පරිකථනයන්  ඉවත්කරන්න",
        "expand_templates_remove_nowiki": "ප්‍රතිපලයෙහි <nowiki> ටැග යටපත් කරන්න",
        "expand_templates_generate_xml": "XML ව්‍යාකරණ විග්‍රහ රුක පෙන්වන්න",
-       "expand_templates_preview": "පෙරදසුන"
+       "expand_templates_preview": "පෙරදසුන",
+       "special-characters-group-latin": "ලතින් අක්ෂර",
+       "special-characters-group-latinextended": "දීර්ඝ කළ ලතින් අක්ෂර",
+       "special-characters-group-ipa": "IPA(ජාත්‍යන්තර වාග්විෂයක හෝඩිය)",
+       "special-characters-group-symbols": "සංකේත",
+       "special-characters-group-greek": "ග්‍රීක අක්ෂර",
+       "special-characters-group-cyrillic": "සිරිලික් අක්ෂර",
+       "special-characters-group-arabic": "අරාබි අක්ෂර",
+       "special-characters-group-arabicextended": "අරාබි දීර්ඝ කල",
+       "special-characters-group-persian": "පර්සියානු",
+       "special-characters-group-hebrew": "හෙබ්‍රෙව් අක්ෂර",
+       "special-characters-group-bangla": "බංග්ලා",
+       "special-characters-group-tamil": "දෙමළ",
+       "special-characters-group-telugu": "තෙලිඟු අක්ෂර",
+       "special-characters-group-sinhala": "සිංහල",
+       "special-characters-group-gujarati": "ගුජරාටි",
+       "special-characters-group-devanagari": "දේවනගරි",
+       "special-characters-group-thai": "තායි",
+       "special-characters-group-lao": "ලාඕ",
+       "special-characters-group-khmer": "ඛෙමර්",
+       "special-characters-title-endash": "en තේජස",
+       "special-characters-title-emdash": "em තේජස",
+       "special-characters-title-minus": "ඍණ ලකුණ"
 }
index 13e3d1b..b1eeec0 100644 (file)
@@ -28,7 +28,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Matthew Greg",
-                       "Ата"
+                       "Ата",
+                       "Macofe"
                ]
        },
        "tog-underline": "Podčiarkovať odkazy:",
        "delete-toobig": "Táto stránka má veľkú históriu úprav, viac ako $1 {{PLURAL:$1|revíziu|revízie|revízií}}. Mazanie takýchto stránok bolo obmedzené, aby sa zabránilo náhodnému poškodeniu {{GRAMMAR:genitív|{{SITENAME}}}}.",
        "delete-warning-toobig": "Táto stránka má veľkú históriu úprav, viac ako $1 {{PLURAL:$1|revíziu|revízie|revízií}}. Jej zmazanie by mohlo narušiť databázové operácie {{GRAMMAR:genitív|{{SITENAME}}}}; postupujte opatrne.",
        "rollback": "Vrátiť späť úpravy",
-       "rollback_short": "Vrátiť",
        "rollbacklink": "vrátiť",
        "rollbacklinkcount": "vrátenie $1 {{PLURAL:$1|úpravy|úprav}}",
        "rollbacklinkcount-morethan": "vrátiť viac ako $1 {{PLURAL:$1|úpravu|úprav}}",
        "import-rootpage-nosubpage": "Menný priestor „$1“ koreňovej stránky nepodporuje podstránky.",
        "importlogpage": "Záznam importov",
        "importlogpagetext": "Administratívny import stránok vrátane histórie úprav z iných wiki.",
-       "import-logentry-upload": "importoval [[$1]] nahraním súboru",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revízia|revízie|revízií}}",
-       "import-logentry-interwiki": "Transwiki import $1 úspešný",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revízia|revízie|revízií}} z $2",
        "javascripttest": "Testovanie JavaScriptu",
-       "javascripttest-title": "Beží $1 testov",
        "javascripttest-pagetext-noframework": "Táto stránka je vyhradená pre testy JavaScriptu.",
        "javascripttest-pagetext-unknownframework": "Neznáma testovacia platfoma „$1“.",
        "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.",
-       "javascripttest-qunit-heading": "Testovacia sada QUnit JavaScriptu MediaWiki",
        "tooltip-pt-userpage": "Vaša používateľská stránka",
        "tooltip-pt-anonuserpage": "Používateľská stránka pre ip adresu, ktorú upravujete ako",
        "tooltip-pt-mytalk": "Vaša diskusná stránka",
        "version-parser-function-hooks": "Prípojné body funkcií syntaktického analyzátora",
        "version-hook-name": "Názov prípojného bodu",
        "version-hook-subscribedby": "Pripojené",
-       "version-version": "(Verzia $1)",
+       "version-version": "($1)",
        "version-license": "Licencia",
        "version-ext-license": "Licencia",
        "version-ext-colheader-name": "Rozšírenie",
        "logentry-rights-autopromote": "$1 bol automaticky povýšený z $4 na $5",
        "rightsnone": "(žiadne)",
        "revdelete-summary": "zhrnutie úprav",
+       "feedback-adding": "Pridáva sa komentár na stránku...",
+       "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-subject": "Predmet:",
-       "feedback-message": "Správa:",
        "feedback-cancel": "Zrušiť",
-       "feedback-submit": "Odoslať komentár",
-       "feedback-adding": "Pridáva sa komentár na stránku...",
+       "feedback-close": "Hotovo",
        "feedback-error1": "Chyba: Nerozpoznaný výsledok z API",
        "feedback-error2": "Chyba: Úprava sa nepodarila",
        "feedback-error3": "Chyba: Žiadna odpoveď z API",
+       "feedback-message": "Správa:",
+       "feedback-subject": "Predmet:",
+       "feedback-submit": "Odoslať",
        "feedback-thanks": "Ďakujeme. Váš komentár bol odoslaný na stránku „[$2 $1]“.",
-       "feedback-close": "Hotovo",
-       "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.",
        "searchsuggest-search": "Hľadať",
        "searchsuggest-containing": "obsahuje...",
        "api-error-badaccess-groups": "Nemáte oprávnenie nahrávať súbory na tejto wiki.",
        "mediastatistics-header-office": "Kancelárske súbory",
        "mediastatistics-header-text": "Text",
        "mediastatistics-header-executable": "Spustiteľné súbory",
-       "mediastatistics-header-archive": "Komprimované formáty"
+       "mediastatistics-header-archive": "Komprimované formáty",
+       "headline-anchor-title": "Odkaz na túto sekciu",
+       "special-characters-group-latin": "Latinka",
+       "special-characters-group-latinextended": "Latina rozšírené",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symboly",
+       "special-characters-group-greek": "Grécke",
+       "special-characters-group-cyrillic": "Azbuka",
+       "special-characters-group-arabic": "Arabské",
+       "special-characters-group-arabicextended": "Arabské rozšírené",
+       "special-characters-group-persian": "Perzský",
+       "special-characters-group-hebrew": "Hebrejské",
+       "special-characters-group-bangla": "Bengálčina",
+       "special-characters-group-telugu": "Telugčina",
+       "special-characters-group-sinhala": "sinhalčina",
+       "special-characters-group-gujarati": "gudžarátčina",
+       "special-characters-group-thai": "Thajské",
+       "special-characters-group-lao": "Laoské",
+       "special-characters-group-khmer": "Khmer"
 }
index 8f5acaa..56a2eed 100644 (file)
        "disclaimers": "Zanikanja odgovornosti",
        "disclaimerpage": "Project:Splošno zanikanje odgovornosti",
        "edithelp": "Pomoč pri urejanju",
+       "helppage-top-gethelp": "Pomoč",
        "mainpage": "Glavna stran",
        "mainpage-description": "Glavna stran",
        "policy-url": "Project:Pravila",
        "readonly_lag": "Podatkovna zbirka se je samodejno zaklenila, dokler se podrejeni strežniki ne uskladijo z glavnim.",
        "internalerror": "Notranja napaka",
        "internalerror_info": "Notranja napaka: $1",
+       "internalerror-fatal-exception": "Usodna izjema vrste »$1«",
        "filecopyerror": "Datoteke »$1« ni mogoče prepisati v »$2«.",
        "filerenameerror": "Datoteke »$1« ni mogoče preimenovati v »$2«.",
        "filedeleteerror": "Datoteke »$1« ni mogoče izbrisati.",
        "wrongpassword": "Vnesli ste napačno geslo. Prosimo, poskusite znova.",
        "wrongpasswordempty": "Vpisali ste prazno geslo. Prosimo, poskusite znova.",
        "passwordtooshort": "Geslo mora imeti najmanj $1 {{PLURAL:$1|znak|znaka|znake|znakov|znakov}}.",
+       "passwordtoolong": "Gesla ne morejo biti daljša od {{PLURAL:$1|1 znaka|$1 znakov}}.",
        "password-name-match": "Vaše geslo se mora razlikovati od vašega uporabniškega imena.",
        "password-login-forbidden": "Uporaba tega uporabniškega imena in gesla je prepovedana.",
        "mailmypassword": "Ponastavitev gesla",
        "missingcommentheader": "'''Opozorilo:''' Niste vnesli zadeve/naslova za ta komentar.\nČe boste ponovno kliknili »{{int:savearticle}}«, bo vaše urejanje shranjeno brez le-tega.",
        "summary-preview": "Predogled povzetka",
        "subject-preview": "Predogled zadeve/naslova:",
+       "previewerrortext": "Med poskusom prikaza predogleda vaših sprememb je prišlo do napake.",
        "blockedtitle": "Uporabnik je blokiran",
        "blockedtext": "'''Urejanje z vašim uporabniškim imenom oziroma IP-naslovom je onemogočeno.'''\n\nBlokiral vas je $1.\nPodani razlog je ''$2''.\n\n* začetek blokade: $8\n* potek blokade: $6\n* blokirani uporabnik: $7\n\nO blokiranju se lahko pogovorite z uporabnikom/-co $1 ali katerim drugim [[{{MediaWiki:Grouppage-sysop}}|administratorjem]].\nVedite, da lahko ukaz »Pošlji uporabniku e-pismo« uporabite le, če ste v [[Special:Preferences|nastavitvah]] vpisali in potrdili svoj elektronski naslov in ta ni blokiran.\nVaš IP-naslov je $3, številka blokade pa #$5.\nProsimo, vključite ju v vse morebitne poizvedbe.",
        "autoblockedtext": "Vaš IP-naslov je bil samodejno blokiran, saj je bil uporabljen s strani drugega uporabnika, ki ga je blokiral $1.\nRazlog za to je bil naslednji:\n\n:''$2''\n\n* Začetek blokade: $8\n* Konec blokade: $6\n* Blokirani uporabnik: $7\n\nKontaktirate lahko $1 ali katerega od drugih [[{{MediaWiki:Grouppage-sysop}}|administratorjev]], da razpravljate o blokadi.\n\nVedite, da lahko funkcijo »{{:MediaWiki:Emailuser/sl}}« uporabljate le, če ste v svoje [[Special:Preferences|uporabniške nastavitve]] vnesli veljaven e-poštni naslov, in vam njena uporaba ni bila preprečena.\n\nVaš trenutni IP-naslov je $3, ID blokiranja pa #$5. Prosimo, vključite ta ID v vsako zastavljeno vprašanje.",
        "notextmatches": "Iskanih besed ne vsebuje nobeno besedilo članka",
        "prevn": "{{PLURAL:$1|prejšnja|prejšnji|prejšnje|prejšnjih|prejšnjih}} $1",
        "nextn": "{{PLURAL:$1|naslednja|naslednji|naslednjih|naslednjih|naslednjih}} $1",
+       "prev-page": "prejšnja stran",
+       "next-page": "naslednja stran",
        "prevn-title": "{{PLURAL:$1|Prejšnji rezultat|Prejšnja $1 rezultata|Prejšnji $1 rezultati|Prejšnjih $1 rezultatov}}",
        "nextn-title": "{{PLURAL:$1|Naslednji rezultat|Naslednja $1 rezultata|Naslednji $1 rezultati|Naslednjih $1 rezultatov}}",
        "shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata|rezultate|rezultatov}} na stran",
        "right-override-export-depth": "Izvoz strani, vključno s povezaimi straneh do globine 5",
        "right-sendemail": "Pošiljanje e-pošte drugim uporabnikom",
        "right-passwordreset": "Ogled e-pošt ponastavitve gesel",
+       "right-managechangetags": "Ustvarjanje in brisanje [[Special:Tags|oznak]] iz zbirke podatkov",
        "newuserlogpage": "Dnevnik registracij uporabnikov",
        "newuserlogpagetext": "Prikazan je dnevnik nedavnih registracij novih uporabnikov.",
        "rightslog": "Dnevnik uporabniških pravic",
        "action-viewmyprivateinfo": "ogled svojih zasebnih informacij",
        "action-editmyprivateinfo": "urejanje svojih zasebnih informacij",
        "action-editcontentmodel": "urejanje vsebinskega modela strani",
+       "action-managechangetags": "ustvarjanje in brisanje oznak iz zbirke podatkov",
        "nchanges": "$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb|sprememb}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od zadnjega obiska}}",
        "enhancedrc-history": "zgodovina",
        "unusedimages": "Osirotele datoteke",
        "wantedcategories": "Želene kategorije",
        "wantedpages": "Želene strani",
+       "wantedpages-summary": "Seznam neobstoječih strani z največ povezavami, ki kažejo na njih, izključujoč preusmeritve. Za seznam neobstoječih strani, ki so ciljne strani preusmeritev, glejte [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Neveljaven naslov v končnem nizu: $1",
        "wantedfiles": "Želene datoteke",
        "wantedfiletext-cat": "Naslednje datoteke so uporabljene, vendar ne obstajajo. Navedene so morda tudi datoteke iz zunanjih hramb, čeprav obstajajo. Vsi takšni lažni pozitivi bodo <del>prečrtani</del>. Poleg tega so strani, ki vključujejo neobstoječe datoteke, navedene na [[:$1]].",
        "emailccsubject": "Kopija tvojega sporočila iz $1: $2",
        "emailsent": "E-pismo je poslano!",
        "emailsenttext": "E-pismo je poslano.",
-       "emailuserfooter": "To e-poštno sporočilo je bilo poslano od $1 uporabniku $2 preko funkcije »{{int:emailpage}}« na {{GRAMMAR:dative|{{SITENAME}}}}.",
+       "emailuserfooter": "To e-poštno sporočilo je bilo poslal(-a) $1 uporabniku $2 s funkcijo »{{int:emailpage}}« na {{GRAMMAR:dative|{{SITENAME}}}}.",
        "usermessage-summary": "Pusti sistemsko sporočilo.",
        "usermessage-editor": "Sistemski sporočevalec",
        "watchlist": "Spisek nadzorov",
        "thumbnail_image-missing": "Kaže, da datoteka manjka: $1",
        "thumbnail_image-failure-limit": "Nedavno je bilo preveč spodletelih poskusov ($1 ali več) izdelave sličice. Prosimo, poskusite znova pozneje.",
        "import": "Uvoz strani",
-       "importinterwiki": "Uvoz transwiki",
-       "import-interwiki-text": "Izberite wiki in naslov strani za uvoz.\nDatumi in imena urejevalcev redakcij bodo ohranjena.\nVsi uvozi med wikiji so zabeleženi v [[Special:Log/import|dnevniku uvozov]].",
+       "importinterwiki": "Uvoz z drugega wikija",
+       "import-interwiki-text": "Izberite wiki in naslov strani za uvoz.\nDatumi in imena urejevalcev redakcij bodo ohranjena.\nVsi uvozi z drugih wikijev so zabeleženi v [[Special:Log/import|dnevniku uvozov]].",
        "import-interwiki-sourcewiki": "Izvorni wiki:",
        "import-interwiki-sourcepage": "Izvorna stran:",
        "import-interwiki-history": "Kopiraj vse dosedanje redakcije te strani",
        "importcantopen": "Neuspešno odpiranje uvožene datoteke",
        "importbadinterwiki": "Slaba jezikovna povezava",
        "importsuccess": "Uspešno uvoženo!",
-       "importnosources": "Na tem wikiju je ta možnost onemogočena.",
+       "importnosources": "Naveden ni noben wiki za uvažanje in neposredno nalaganje zgodovine je onemogočeno.",
        "importnofile": "Uvožena ni bila nobena datoteka.",
        "importuploaderrorsize": "Nalaganje datoteke za uvoz ni uspelo.\nDatoteka je večja od dovoljene velikosti nalaganja.",
        "importuploaderrorpartial": "Nalaganje datoteke za uvoz ni uspelo.\nDatoteka je bila prenesena samo delno.",
        "import-rootpage-nosubpage": "Imenski prostor »$1« korenske strani ne dovoli podstrani.",
        "importlogpage": "Dnevnik uvozov",
        "importlogpagetext": "Administrativni uvozi strani z zgodovino urejanja iz drugih wikijev.",
-       "import-logentry-upload": "uvozil [[$1]] z nalaganjem datoteke",
        "import-logentry-upload-detail": "{{PLURAL:$1|Uvožena $1 redakcija|Uvoženi $1 redakciji|Uvožene $1 redakcije|Uvoženih $1 redakcij}}",
-       "import-logentry-interwiki": "prenesel $1 med wikiji",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Uvožena $1 redakcija|Uvoženi $1 redakciji|Uvožene $1 redakcije|Uvoženih $1 redakcij}} z $2",
        "javascripttest": "Preizkušanje JavaScripta",
        "javascripttest-pagetext-noframework": "Stran je rezervirana za poganjanje preizkusov JavaScript.",
        "version-parser-function-hooks": "Funkcije razširitev razčlenjevalnika",
        "version-hook-name": "Ime razširitve",
        "version-hook-subscribedby": "Naročen s strani",
-       "version-version": "(Različica $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[brez imena]",
        "version-license": "Dovoljenje MediaWiki",
        "version-ext-license": "Dovoljenje",
        "tags-tag": "Ime oznake",
        "tags-display-header": "Prikaz na seznamu sprememb",
        "tags-description-header": "Polni opis pomena",
+       "tags-source-header": "Vir",
        "tags-active-header": "Dejavno?",
        "tags-hitcount-header": "Etiketirane spremembe",
+       "tags-actions-header": "Dejanja",
        "tags-active-yes": "Da",
        "tags-active-no": "Ne",
+       "tags-source-extension": "Opredeljuje jo razširitev",
+       "tags-source-manual": "Ročno jo uporabljajo uporabniki in boti",
+       "tags-source-none": "Se ne uporablja več",
        "tags-edit": "uredi",
+       "tags-delete": "izbriši",
+       "tags-activate": "aktiviraj",
+       "tags-deactivate": "dezaktiviraj",
        "tags-hitcount": "$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb|sprememb}}",
+       "tags-manage-no-permission": "Nimate dovoljenja za upravljanje z oznakami sprememb.",
+       "tags-create-heading": "Ustvari novo oznako",
+       "tags-create-explanation": "Privzeto bodo novo ustvarjene oznake na voljo uporabnikom in botom.",
+       "tags-create-tag-name": "Ime oznake:",
+       "tags-create-reason": "Razlog:",
+       "tags-create-submit": "Ustvari",
+       "tags-create-no-name": "Določiti morate ime oznake.",
+       "tags-create-invalid-chars": "Imena oznak ne smejo vsebovati vejic (<code>,</code>) ali desnih poševnic (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Imena oznak ne smejo vsebovati znakov, ki jih ni mogoče uporabiti v naslovih strani.",
+       "tags-create-already-exists": "Oznaka »$1« že obstaja.",
+       "tags-create-warnings-above": "Pri poskusu ustvarjanja oznake »$1« smo naleteli na {{PLURAL:$2|naslednje opozorilo|naslednji opozorili|naslednja opozorila}}:",
+       "tags-create-warnings-below": "Želite nadaljevati z ustvarjanjem oznake?",
+       "tags-delete-title": "Izbriši oznako",
+       "tags-delete-explanation-initial": "Nameravate izbrisati oznako »$1« iz zbirke podatkov.",
+       "tags-delete-explanation-in-use": "Odstranjena bo iz {{PLURAL:$2|$2 redakcije ali dnevniškega vnosa|vseh $2 redakcij in/ali dnevniških vnosov}}, ki jo trenutno uporabljajo.",
+       "tags-delete-explanation-warning": "Dejanje je <strong>nepovratno</strong> in <strong>ga ni mogoče razveljaviti</strong>; tega ne morejo storiti niti upravljavci zbirke podatkov. Prepričajte se, da oznako zares želite izbrisati.",
+       "tags-delete-explanation-active": "<strong>Oznaka »$1« je že vedno aktivna in bo uporabljana tudi v bodoče.</strong> Da to preprečite, pojdite na mesto, kjer je oznaka določena za uporabo, in jo tam onemogočite.",
+       "tags-delete-reason": "Razlog:",
+       "tags-delete-submit": "Nepovratno izbriši oznako",
+       "tags-delete-not-allowed": "Oznak, ki jih določijo razširitve, ni mogoče izbrisati, razen če razširitve to izrecno dovolijo.",
+       "tags-delete-not-found": "Oznaka »$1« ne obstaja.",
+       "tags-delete-too-many-uses": "Oznaka »$1« je uporabljena pri več kot $2 {{PLURAL:$2|redakciji|redakcijah}}, kar pomeni, da je ni mogoče izbrisati.",
+       "tags-delete-warnings-after-delete": "Oznako »$1« smo uspešno izbrisali, vendar smo naleteli na {{PLURAL:$2|naslednjo težavo|naslednji težavi|naslednje težave}}:",
+       "tags-activate-title": "Aktiviraj oznako",
+       "tags-activate-question": "Aktivirali boste oznako »$1«.",
+       "tags-activate-reason": "Razlog:",
+       "tags-activate-not-allowed": "Oznake »$1« ni možno aktivirati.",
+       "tags-activate-not-found": "Oznaka »$1« ne obstaja.",
+       "tags-activate-submit": "Aktiviraj",
+       "tags-deactivate-title": "Dezaktiviraj oznako",
+       "tags-deactivate-question": "Dezaktivirali boste oznako »$1«.",
+       "tags-deactivate-reason": "Razlog:",
+       "tags-deactivate-not-allowed": "Oznake »$1« ni možno dezaktivirati.",
+       "tags-deactivate-submit": "Dezaktiviraj",
        "comparepages": "Primerjaj strani",
        "compare-page1": "Stran 1",
        "compare-page2": "Stran 2",
        "revdelete-uname-unhid": "uporabniško ime je ponovno prikazano",
        "revdelete-restricted": "uveljavljene omejitve administratorjev",
        "revdelete-unrestricted": "odstranjene omejitve administratorjev",
+       "logentry-block-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} s časom poteka $5 $6",
+       "logentry-block-unblock": "$1 je {{GENDER:$2|odblokiral|odblokirala|odblokiral(-a)}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} nastavitve blokade za {{GENDER:$4|$3}} s časomspremenil poteka $5 $6",
+       "logentry-suppress-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} s časom poteka $5 $6",
+       "logentry-suppress-reblock": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} nastavitve blokade za {{GENDER:$4|$3}} s časom poteka $5 $6",
+       "logentry-import-upload": "$1 je {{GENDER:$2|uvozil|uvozila|uvozil(-a)}} $3 z nalaganjem datoteke",
+       "logentry-import-interwiki": "$1 je {{GENDER:$2|uvozil|uvozila|uvozil(-a)}} $3 z drugega wikija",
        "logentry-merge-merge": "$1 je {{GENDER:$2|združil|združila|združil(-a)}} $3 z $4 (redakcije do $5)",
        "logentry-move-move": "$1 je {{GENDER:$2|premaknil|premaknila|premaknil(-a)}} stran $3 na $4",
        "logentry-move-move-noredirect": "$1 je {{GENDER:$2|prestavil|prestavila|prestavil(-a)}} stran $3 na $4 brez preusmeritve",
        "logentry-upload-upload": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} $3",
        "logentry-upload-overwrite": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} novo različico $3",
        "logentry-upload-revert": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} $3",
+       "log-name-managetags": "Dnevnik upravljanja oznak",
+       "log-description-managetags": "Stran navaja opravila upravljanja, povezana z [[Special:Tags|oznakami]]. Dnevnik vsebuje samo dejanja, ki so jih ročno izvedli administratorji; oznake je lahko ustvarilo ali izbrisalo tudi programje wiki brez zabeleženega vnosa v tem dnevniku.",
+       "logentry-managetags-create": "$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} oznako »$4«",
+       "logentry-managetags-delete": "$1 je {{GENDER:$2|izbrisal|izbrisala|izbrisal(-a)}} oznako »$4« (odstranjena iz $5 {{PLURAL:$5|redakcije ali dnevniškega vnosa|redakcij in/ali dnevniških vnosov}})",
+       "logentry-managetags-activate": "$1 je {{GENDER:$2|aktiviral|aktivirala|aktiviral(-a)}} oznako »$4« za uporabnike in bote",
+       "logentry-managetags-deactivate": "$1 je {{GENDER:$2|dezaktiviral|dezaktivirala|dezaktiviral(-a)}} oznako »$4« za uporabnike in bote",
        "rightsnone": "(nobeno)",
        "revdelete-summary": "povzetek urejanja",
+       "feedback-adding": "Dodajanje povratne informacije na stran ...",
+       "feedback-back": "Nazaj",
+       "feedback-bugcheck": "Izvrstno! Samo preverite, da ne gre za enega od [$1 že znanih hroščev].",
+       "feedback-bugnew": "Sem preveril. Prijavi nov hrošč",
        "feedback-bugornote": "Če ste pripravljeni podrobno opisati tehnično težavo, vložite [$1 poročilo o hrošču].\nV nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bomo dodali na stran »[$3 $2]«, skupaj z vašim uporabniškim imenom in podatkom o brskalniku, ki ga uporabljate.",
-       "feedback-subject": "Zadeva:",
-       "feedback-message": "Sporočilo:",
        "feedback-cancel": "Prekliči",
-       "feedback-submit": "Pošlji povratno informacijo",
-       "feedback-adding": "Dodajanje povratne informacije na stran ...",
+       "feedback-close": "Urejeno",
+       "feedback-external-bug-report-button": "Vloži tehnično opravilo",
+       "feedback-dialog-title": "Pošljite povratne informacije",
+       "feedback-dialog-intro": "Spodnji enostavni obrazec lahko uporabite za pošiljanje povratnih informacij. Vašo pripombo bomo dodali na stran »$1« skupaj z vašim uporabniškim imenom.",
+       "feedback-error-title": "Napaka",
        "feedback-error1": "Napaka: Neznan rezultat iz API",
        "feedback-error2": "Napaka: Urejanje je spodletelo",
        "feedback-error3": "Napaka: Ni odgovora od API",
+       "feedback-error4": "Napaka: Ne morem objaviti navedenega naslova povratnih informacij",
+       "feedback-message": "Sporočilo:",
+       "feedback-subject": "Zadeva:",
+       "feedback-submit": "Pošlji",
+       "feedback-terms": "Razumem, da podatek o uporabniškem agentu vsebuje točne informacije o mojem brskalniku in različici operacijskega sistema ter da bo javno prikazan skupaj z mojimi povratnimi informacijami.",
+       "feedback-termsofuse": "Strinjam se, da posredujem povratne informacije v skladu s Pogoji uporabe.",
        "feedback-thanks": "Havala! Vaše povratne informacije smo objavili na strani »[$2 $1]«.",
-       "feedback-close": "Urejeno",
-       "feedback-bugcheck": "Izvrstno! Samo preverite, da ne gre za enega od [$1 že znanih hroščev].",
-       "feedback-bugnew": "Sem preveril. Prijavi nov hrošč",
+       "feedback-thanks-title": "Hvala!",
+       "feedback-useragent": "Uporabniški agent:",
        "searchsuggest-search": "Iskanje",
        "searchsuggest-containing": "vsebujoč ...",
        "api-error-badaccess-groups": "Nalaganje datotek na ta wiki vam ni dovoljeno.",
        "json-error-utf8": "Nepravilno oblikovani znaki UTF-8; morda so nepravilno zakodirani",
        "json-error-recursion": "En ali več rekurzivnih sklicev v vrednosti za zakodirati",
        "json-error-inf-or-nan": "Ena ali več vrednosti NAN ali INF v vrednosti za zakodirati",
-       "json-error-unsupported-type": "Podana je bila vrsta, ki je ni mogoče zakodirati"
+       "json-error-unsupported-type": "Podana je bila vrsta, ki je ni mogoče zakodirati",
+       "headline-anchor-title": "Povezava na razdelek",
+       "special-characters-group-latin": "Latinica",
+       "special-characters-group-latinextended": "Razširjena latinica",
+       "special-characters-group-ipa": "Mednarodna fonetična abeceda (IPA)",
+       "special-characters-group-symbols": "Simboli",
+       "special-characters-group-greek": "Grški",
+       "special-characters-group-cyrillic": "Cirilica",
+       "special-characters-group-arabic": "Arabski",
+       "special-characters-group-arabicextended": "Razširjena arabščina",
+       "special-characters-group-persian": "Perzijski",
+       "special-characters-group-hebrew": "Hebrejski",
+       "special-characters-group-bangla": "Bengalščina",
+       "special-characters-group-tamil": "tamilščina",
+       "special-characters-group-telugu": "Telugijski",
+       "special-characters-group-sinhala": "Singalščina",
+       "special-characters-group-gujarati": "Gudžarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Tajski",
+       "special-characters-group-lao": "Laoški",
+       "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"
 }
index c566705..fc870a2 100644 (file)
@@ -26,7 +26,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Gertakapllani",
-                       "OrvenBregu"
+                       "OrvenBregu",
+                       "Macofe"
                ]
        },
        "tog-underline": "Nënvizo lidhjet:",
        "thu": "Enj",
        "fri": "Pr",
        "sat": "Sht",
-       "january": "Janar",
-       "february": "Shkurt",
-       "march": "Mars",
-       "april": "Prill",
+       "january": "janar",
+       "february": "shkurt",
+       "march": "mars",
+       "april": "prill",
        "may_long": "Maj",
-       "june": "Qershor",
-       "july": "Korrik",
-       "august": "Gusht",
-       "september": "Shtator",
-       "october": "Tetor",
-       "november": "Nëntor",
-       "december": "Dhjetor",
-       "january-gen": "Janar",
-       "february-gen": "Shkurt",
-       "march-gen": "Mars",
-       "april-gen": "Prill",
-       "may-gen": "Maj",
-       "june-gen": "Qershor",
+       "june": "qershor",
+       "july": "korrik",
+       "august": "gusht",
+       "september": "shtator",
+       "october": "tetor",
+       "november": "nëntor",
+       "december": "dhjetor",
+       "january-gen": "janar",
+       "february-gen": "shkurt",
+       "march-gen": "mars",
+       "april-gen": "prill",
+       "may-gen": "maj",
+       "june-gen": "qershor",
        "july-gen": "korrik",
-       "august-gen": "Gusht",
-       "september-gen": "Shtator",
-       "october-gen": "Tetor",
-       "november-gen": "Nëntor",
-       "december-gen": "Dhjetor",
+       "august-gen": "gusht",
+       "september-gen": "shtator",
+       "october-gen": "tetor",
+       "november-gen": "nëntor",
+       "december-gen": "dhjetor",
        "jan": "Jan",
        "feb": "Shku",
        "mar": "Mar",
        "apr": "Pri",
-       "may": "Maj",
+       "may": "maj",
        "jun": "Qer",
        "jul": "Korr",
        "aug": "Gush",
        "oct": "Tet",
        "nov": "Nën",
        "dec": "Dhje",
-       "january-date": "$1 Janar",
-       "february-date": "Shkurt, <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
-       "march-date": "Mars <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
-       "april-date": "Prill <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
-       "may-date": "$1 Maj",
-       "june-date": "$1 Qershor",
-       "july-date": "$1 Korrik",
-       "august-date": "$1 Gusht",
-       "september-date": "$1 Shtator",
-       "october-date": "$1 Tetor",
-       "november-date": "$1 Nëntor",
-       "december-date": "$1 Dhjetor",
+       "january-date": "$1 janar",
+       "february-date": "$1 shkurt",
+       "march-date": "$1 mars",
+       "april-date": "$1 prill",
+       "may-date": "$1 maj",
+       "june-date": "$1 qershor",
+       "july-date": "$1 korrik",
+       "august-date": "$1 gusht",
+       "september-date": "$1 shtator",
+       "october-date": "$1 tetor",
+       "november-date": "$1 nëntor",
+       "december-date": "$1 dhjetor",
        "pagecategories": "{{PLURAL:$1|Kategoria|Kategoritë}}",
        "category_header": "Artikuj në kategorinë \"$1\"",
        "subcategories": "Nën-kategori",
        "delete-toobig": "Kjo faqe ka një historik të madh redaktimesh, më shumë se $1 {{PLURAL:$1|version|versione}}.\nGrisja e faqeve të tilla ka qenë kufizuar për të parandaluar përçarjen aksidentale të {{SITENAME}}.",
        "delete-warning-toobig": "Kjo faqe ka një historik të madh redaktimesh, më shumë se $1 {{PLURAL:$1|version|versione}}.\nGrisja e saj mund të ndërpresë operacionet e bazës së të dhënave të {{SITENAME}};\nvazhdoni me kujdes.",
        "rollback": "Riktheji mbrapsh redaktimet",
-       "rollback_short": "Riktheje",
        "rollbacklink": "riktheje",
        "rollbacklinkcount": "riktheni $1 {{PLURAL:$1|ndryshimin|ndryshiemt}}",
        "rollbacklinkcount-morethan": "riktheni më tepër $1 {{PLURAL:$1|ndryshim|ndryshime}}",
        "import-error-invalid": "Faqja \"$1\" nuk është importuar sepse emri i saj është i palejueshëm.",
        "importlogpage": "Regjistri i importeve",
        "importlogpagetext": "Importimet administrative të faqeve me historik redaktimi nga wiki-t e tjera.",
-       "import-logentry-upload": "importoi [[$1]] nëpërmjet ngarkimit të skedave",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versione}}",
-       "import-logentry-interwiki": "transwikoji $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$!1|version|versione}} nga $2",
        "javascripttest": "Duke testuar JavaScript",
-       "javascripttest-title": "Duke kryer testet $1",
        "javascripttest-pagetext-noframework": "Kjo faqe është rezervuar për kryerjen e testimeve JavaScript.",
        "javascripttest-pagetext-unknownframework": "Kornizë pune e panjohur testuese \"$1\".",
        "javascripttest-pagetext-frameworks": "Ju lutemi zgjidhni njërën nga kornizat vijuese punuese të testimit: $1",
        "javascripttest-pagetext-skins": "Zgjidhni një mostër për t'i kryer testimet:",
        "javascripttest-qunit-intro": "Shiko [$1 dokumentacionin e testimit] në mediawiki.org.",
-       "javascripttest-qunit-heading": "Platforma testuese JavaScript QUnit",
        "tooltip-pt-userpage": "Faqja juaj e përdoruesit",
        "tooltip-pt-anonuserpage": "Faqja e përdoruesve anonim nga kjo adresë IP",
        "tooltip-pt-mytalk": "Faqja juaj e diskutimeve",
        "version-parser-function-hooks": "Parser goditjet e funksionit",
        "version-hook-name": "Emri i goditjes",
        "version-hook-subscribedby": "Abonuar nga",
-       "version-version": "(Versioni $1)",
+       "version-version": "($1)",
        "version-license": "Licensa",
        "version-poweredby-credits": "Ky wiki është mundësuar nga '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "të tjerë",
        "logentry-newusers-autocreate": "Llogaria $1 u krijua automatikisht",
        "rightsnone": "(asgjë)",
        "revdelete-summary": "përmbledhja redaktimit",
+       "feedback-adding": "Duke shtuar përshtypjen te faqja...",
+       "feedback-bugcheck": "Shumë mirë! Thjesht kontrolloni që nuk është një nga [$1 problemet e njohura].",
+       "feedback-bugnew": "E kontrollova. Raporto një problem të ri",
        "feedback-bugornote": "Nëse jeni gati për të përshkruar një problem teknik me detaje ju lutemi [$1 raportoni një problem].\nPërndryshe, ju mund të formularin e thjeshtë më poshtë. Komenti juaj do të shtohet te faqja \"[$3 $2]\"\", së bashku me emrin tuaj të përdoruesit dhe shfletuesin të cilin jeni duke përdorur.",
-       "feedback-subject": "Subjekti:",
-       "feedback-message": "Mesazhi:",
        "feedback-cancel": "Anulo",
-       "feedback-submit": "Paraqit përshtypjet",
-       "feedback-adding": "Duke shtuar përshtypjen te faqja...",
+       "feedback-close": "Përfunduar",
        "feedback-error1": "Gabim: Rezultat i panjohur nga API",
        "feedback-error2": "Gabim: Redaktimi dështoi",
        "feedback-error3": "Gabim: Nuk ka përgjigje nga API",
+       "feedback-message": "Mesazhi:",
+       "feedback-subject": "Subjekti:",
+       "feedback-submit": "Dërgo",
        "feedback-thanks": "Faleminderit! Përshtypja juaj është postuar në faqen \"[$2 $1]\".",
-       "feedback-close": "Përfunduar",
-       "feedback-bugcheck": "Shumë mirë! Thjesht kontrolloni që nuk është një nga [$1 problemet e njohura].",
-       "feedback-bugnew": "E kontrollova. Raporto një problem të ri",
        "searchsuggest-search": "Kërko",
        "searchsuggest-containing": "përmban ...",
        "api-error-badaccess-groups": "Ju nuk lejoheni të ngarkoni skeda në këtë wiki.",
        "expand_templates_input": "Teksti me stampa:",
        "expand_templates_output": "Parapamja",
        "expand_templates_ok": "Shko",
-       "expand_templates_remove_comments": "Hiq komentet"
+       "expand_templates_remove_comments": "Hiq komentet",
+       "special-characters-group-latin": "Latinisht",
+       "special-characters-group-latinextended": "Latanisht, zgjeruar",
+       "special-characters-group-ipa": "Alfabeti Fonetik Ndërkombëtar (IPA)",
+       "special-characters-group-symbols": "Simbolet",
+       "special-characters-group-greek": "Grezisht",
+       "special-characters-group-cyrillic": "Cirilik",
+       "special-characters-group-arabic": "Arabisht",
+       "special-characters-group-persian": "Persisht",
+       "special-characters-group-hebrew": "Hebraisht",
+       "special-characters-group-bangla": "Bengalisht",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singhalisht",
+       "special-characters-group-gujarati": "Guxharati",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index 9d2c85e..dfce20e 100644 (file)
        "disclaimers": "Одрицање одговорности",
        "disclaimerpage": "Project:Одрицање одговорности",
        "edithelp": "Помоћ при уређивању",
+       "helppage-top-gethelp": "Помоћ",
        "mainpage": "Главна страна",
        "mainpage-description": "Главна страна",
        "policy-url": "Project:Правила",
        "editold": "уреди",
        "viewsourceold": "изворни код",
        "editlink": "уреди",
-       "viewsourcelink": "Ð\98звоÑ\80",
-       "editsectionhint": "Уредите одељак „$1“",
+       "viewsourcelink": "извоÑ\80ни ÐºÐ¾Ð´",
+       "editsectionhint": "Уреди одељак „$1“",
        "toc": "Садржај",
        "showtoc": "прикажи",
        "hidetoc": "сакриј",
        "missing-article": "Текст странице под називом „$1“ ($2) није пронађен.\n\nУзрок ове грешке је обично застарела измена или веза до обрисане странице.\n\nАко се не ради о томе, онда сте вероватно пронашли грешку у софтверу.\nПријавите је [[Special:ListUsers/sysop|администратору]] уз одговарајућу везу.",
        "missingarticle-rev": "(измена#: $1)",
        "missingarticle-diff": "(разлика: $1, $2)",
-       "readonly_lag": "Ð\91аза Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\98е Ð·Ð°ÐºÑ\99Ñ\83Ñ\87ана Ð´Ð¾Ðº Ñ\81е Ñ\81поÑ\80едни Ð±Ð°Ð·Ð½Ð¸ Ñ\81еÑ\80веÑ\80и Ð½Ðµ Ñ\83Ñ\81кладе с главним.",
+       "readonly_lag": "Ð\91аза Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\98е Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð·Ð°ÐºÑ\99Ñ\83Ñ\87ана Ð´Ð° Ð±Ð¸ Ñ\81е Ñ\81екÑ\83ндаÑ\80ни Ñ\81еÑ\80веÑ\80и Ð±Ð°Ð·Ðµ Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\83Ñ\81кладили с главним.",
        "internalerror": "Унутрашња грешка",
        "internalerror_info": "Унутрашња грешка: $1",
        "filecopyerror": "Не могу да умножим датотеку „$1“ у „$2“.",
        "invalidtitle-knownnamespace": "Неисправан наслов с именским простором „$2“ и текстом „$3“",
        "invalidtitle-unknownnamespace": "Неисправан наслов с именским простором бр. $1 и текстом „$2“",
        "exception-nologin": "Нисте пријављени",
-       "exception-nologin-text": "[[Special:Userlogin|Пријавите се]] да бисте приступили овој страници или радњи.",
+       "exception-nologin-text": "Пријавите се да бисте приступили овој страници или радњи.",
        "exception-nologin-text-manual": "Морате бити $1 да бисте приступили овој страници или радњи.",
        "virus-badscanner": "Неисправна поставка: непознати скенер за вирусе: ''$1''",
        "virus-scanfailed": "неуспешно скенирање (код $1)",
        "createaccount-text": "Неко је отворио налог с вашом е-адресом на {{SITENAME}} ($4) под именом $2 и лозинком $3.\nПријавите се и промените своју лозинку.\n\nАко је ово грешка, занемарите ову поруку.",
        "login-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
        "login-abort-generic": "Неуспешна пријава – прекинуто",
+       "login-migrated-generic": "Ваш налог је мигриран и ваше корисничко више не постоји на овом викију.",
        "loginlanguagelabel": "Језик: $1",
        "suspicious-userlogout": "Ваш захтев за одјаву је одбијен јер је послат од стране неисправног прегледача или посредника.",
        "createacct-another-realname-tip": "Право име није обавезно.\nАко изаберете да га унесете, оно ће бити коришћено за приписивање вашег рада.",
        "summary-preview": "Преглед описа:",
        "subject-preview": "Преглед теме/наслова:",
        "blockedtitle": "Корисник је блокиран",
-       "blockedtext": "<strong>Ваше корисничко име или ИП адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог: <em>$2</em>.\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварања било каквих упита.",
+       "blockedtext": "<strong>Ваше корисничко име или ИП адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог: <em>$2</em>.\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварању било каквих упита.",
        "autoblockedtext": "Ваша ИП адреса је блокирана јер ју је употребљавао други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\n\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана ИП адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
        "blockednoreason": "разлог није наведен",
        "whitelistedittext": "За уређивање странице је потребно да будете $1.",
        "templatesused": "{{PLURAL:$1|Шаблон|Шаблони}} на овој страници:",
        "templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} у овом прегледу:",
        "templatesusedsection": "{{PLURAL:$1|Шаблон|Шаблони}} у овом одељку:",
-       "template-protected": "(заштићен)",
-       "template-semiprotected": "(полузаштићен)",
+       "template-protected": "(заштићено)",
+       "template-semiprotected": "(полузаштићено)",
        "hiddencategories": "Ова страница је члан {{PLURAL:$1|једне скривене категорије|$1 скривене категорије|$1 скривених категорија}}:",
        "edittools": "<!-- Овај текст ће бити приказан испод обрасца за уређивање и отпремање. -->",
        "edittools-upload": "-",
        "sectioneditnotsupported-title": "Уређивање одељка није подржано",
        "sectioneditnotsupported-text": "Уређивање одељка није подржано на овој страници.",
        "permissionserrors": "Грешка у дозволи",
-       "permissionserrorstext": "Немате овлашћење за ту радњу из {{PLURAL:$1|следећег|следећих}} разлога:",
+       "permissionserrorstext": "Немате овлашћење за ову радњу из {{PLURAL:$1|1=следећег|следећих}} разлога:",
        "permissionserrorstext-withaction": "Немате дозволу за $2 из {{PLURAL:$1|следећег|следећих}} разлога:",
        "recreate-moveddeleted-warn": "'''Упозорење: поново правите страницу која је претходно обрисана.'''\n\nРазмотрите да ли је прикладно да наставите с уређивањем ове странице.\nОвде је наведена историја брисања и премештања с образложењем:",
        "moveddeleted-notice": "Ова страница је обрисана.\nИсторија њеног брисања и премештања налази се испод:",
        "content-failed-to-parse": "Не могу да рашчланим садржај типа $2 за модел $1: $3",
        "invalid-content-data": "Неисправни подаци садржаја",
        "content-not-allowed-here": "Садржај модела „$1“ није дозвољен на страници [[$2]]",
-       "editwarning-warning": "Ако напустите ову страницу, изгубићете све измене које сте направили.\nАко сте пријављени, можете онемогућити ово упозорење у својим подешавањима, у одељку „{{int:prefs-editing}}“.",
+       "editwarning-warning": "Ако напустите ову страницу, изгубићете све измене које сте направили. Ако сте пријављени, можете онемогућити ово упозорење у својим подешавањима, у одељку „{{int:prefs-editing}}“.",
        "editpage-notsupportedcontentformat-title": "Формат садржаја није подржан",
        "content-model-wikitext": "викитекст",
        "content-model-text": "чист текст",
        "history-feed-item-nocomment": "$1 у $2",
        "history-feed-empty": "Тражена страница не постоји.\nМогуће да је обрисана с викија или је преименована.\nПокушајте да [[Special:Search|претражите вики]] за сличне странице.",
        "rev-deleted-comment": "(опис измене уклоњен)",
-       "rev-deleted-user": "(коÑ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ñ\98е Ñ\83клоÑ\9aено)",
-       "rev-deleted-event": "(иÑ\81Ñ\82оÑ\80иÑ\98а Ñ\98е Ñ\83клоÑ\9aена)",
+       "rev-deleted-user": "(корисничко име уклоњено)",
+       "rev-deleted-event": "(деÑ\82аÑ\99и Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÐ° Ñ\83клоÑ\9aени)",
        "rev-deleted-user-contribs": "[корисничко име или ИП адреса је уклоњена – измена је сакривена са списка доприноса]",
        "rev-deleted-text-permission": "Измена ове странице је '''обрисана'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
        "rev-deleted-text-unhide": "Измена ове странице је '''обрисана'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].\nИпак можете да [$1 видите ову измену] ако желите да наставите.",
        "rev-suppressed-unhide-diff": "Једна од измена ове разлике је '''сакривена'''.\nДетаљи се налазе у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].\nИпак можете да [$1 видите ову разлику] ако желите да наставите.",
        "rev-deleted-diff-view": "Једна од измена ове разлике је '''обрисана'''.\nИпак можете да видите ову разлику; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
        "rev-suppressed-diff-view": "Једна од измена ове разлике је '''сакривена'''.\nИпак можете да видите ову разлику; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].",
-       "rev-delundel": "пÑ\80икажи/Ñ\81акÑ\80иÑ\98",
+       "rev-delundel": "пÑ\80омени Ð²Ð¸Ð´Ñ\99ивоÑ\81Ñ\82",
        "rev-showdeleted": "прикажи",
        "revisiondelete": "Обриши/врати измене",
        "revdelete-nooldid-title": "Нема тражене измене",
        "revdelete-text-text": "Избрисане измене ће и даље бити видљиве у историји странице, али делови њиховог садржаја неће бити јавно доступну.",
        "revdelete-text-file": "Избрисане верзије датотеке ће и даље бити видљиве у историји датотеке, али делови њиховог садржаја неће бити јавно доступну.",
        "logdelete-text": "Избрисани уноси у дневницима ће и даље бити видљиви у дневницима, али делови њиховог садржаја неће бити јавно доступну.",
+       "revdelete-text-others": "Остали администратори ће и даље моћи да приступе скривеном садржају и врате га, осим ако се поставе додатна ограничења.",
        "revdelete-confirm": "Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
-       "revdelete-suppress-text": "Сакривање измена би требало користити '''само''' у следећим случајевима:\n* Злонамерни или погрдни подаци\n* Неприкладни лични подаци\n*: ''кућна адреса и број телефона, број банковне картице итд.''",
+       "revdelete-suppress-text": "Сакривање измена би требало користити <strong>само</strong> у следећим случајевима:\n* злонамерни или погрдни подаци\n* неприкладни лични подаци\n*: <em>кућна адреса и број телефона, број кредитне картице, ЈМБГ итд.</em>",
        "revdelete-legend": "Ограничења видљивости",
        "revdelete-hide-text": "Сакриј текст измене",
        "revdelete-hide-image": "Сакриј садржај датотеке",
        "shown-title": "Прикажи $1 {{PLURAL:$1|резултат|резултата|резултата}} по страници",
        "viewprevnext": "Погледај ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Постоји и чланак под називом „[[:$1]]“.'''",
-       "searchmenu-new": "<strong>Ð\9dапÑ\80авиÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 â\80\9e[[:$1]]â\80\9c!</strong> {{PLURAL:$2|0=|Ð\92иди Ñ\82акоÑ\92е Ñ\80азултате претраге.}}",
+       "searchmenu-new": "<strong>Ð\9dапÑ\80авиÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 â\80\9e[[:$1]]â\80\9c!</strong> {{PLURAL:$2|0=|Ð\92иди Ñ\82акоÑ\92е Ñ\80езултате претраге.}}",
        "searchprofile-articles": "Чланци",
        "searchprofile-images": "Датотеке",
        "searchprofile-everything": "Све",
        "prefs-diffs": "Разлике",
        "prefs-help-prefershttps": "Ова подешавања ће ступити на снагу при следећој пријави.",
        "prefswarning-warning": "Променили сте ваша подешавања али нисте их још сачували.\nАко не притиснете „$1“ ваша подешавања ће бити изгубљена.",
+       "prefs-tabs-navigation-hint": "Савет: можете користити типке са левом и десном стрелицом за кретање кроз картице.",
        "email-address-validity-valid": "Е-адреса је исправна",
        "email-address-validity-invalid": "Унесите исправну е-адресу",
        "userrights": "Управљање корисничким правима",
        "userrights-changeable-col": "Групе које можете да промените",
        "userrights-unchangeable-col": "Групе које не можете да промените",
        "userrights-irreversible-marker": "$1*",
+       "userrights-conflict": "Сукоб промена корисничких права! Молимо проверите ваше измене.",
        "userrights-removed-self": "Успешно сте себи скинули права. Због тога није вам дозвољен приступ овој страници.",
        "group": "Група:",
        "group-user": "Корисници",
        "right-override-export-depth": "извоз страница укључујући и повазене странице до дубине од пет веза",
        "right-sendemail": "слање е-порука другим корисницима",
        "right-passwordreset": "прегледање порука за обнављање лозинке",
+       "right-managechangetags": "прављење и/или брисање [[Special:Tags|ознака]] из базе података",
        "newuserlogpage": "Дневник нових корисника",
        "newuserlogpagetext": "Ово је историја нових корисника.",
        "rightslog": "Дневник корисничких права",
        "uploaderror": "Грешка при отпремању",
        "upload-recreate-warning": "'''Упозорење: датотека с тим називом је обрисана или премештена.'''\n\nИсторија брисања и премештања се налази испод:",
        "uploadtext": "Користите образац испод да бисте отпремили датотеке.\nЗа преглед или претрагу постојећих датотека, погледајте [[Special:FileList|списак отпремљених датотека]], поновна отпремања су наведена у [[Special:Log/upload|дневнику отпремања]], а брисања у [[Special:Log/delete|дневнику брисања]].\n\nДатотеку додајете на жељену страницу користећи следеће обрасце:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Слика.jpg]]</nowiki></code>''' за верзију слике у пуној величини\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Слика.png|200п|мини|лево|опис]]</nowiki></code>''' за верзију слике с величином од 200 пиксела која је приказана у засебном оквиру, заједно с описом.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Датотека.ogg]]</nowiki></code>''' за директно повезивање с датотеком без њеног приказивања",
-       "upload-permitted": "Дозвољени типови датотека: $1.",
-       "upload-preferred": "Препоручени типови датотека: $1.",
-       "upload-prohibited": "Забрањени типови датотека: $1.",
+       "upload-permitted": "Дозвољени {{PLURAL:$2|тип|типови}} датотека: $1.",
+       "upload-preferred": "Препоручени {{PLURAL:$2|тип|типови}} датотека: $1.",
+       "upload-prohibited": "Забрањени {{PLURAL:$2|тип|типови}} датотека: $1.",
        "uploadlogpage": "Дневник отпремања",
        "uploadlogpagetext": "Испод је списак скорашњих слања.\nПогледајте [[Special:NewFiles|галерију нових датотека]] за лепши преглед.",
        "filename": "Назив датотеке",
        "license": "Лиценца:",
        "license-header": "Лиценца:",
        "nolicense": "није изабрано",
+       "licenses-edit": "Уреди избор лиценци",
        "license-nopreview": "(преглед није доступан)",
        "upload_source_url": "(ваша изабрана датотека од исправних и јавно доступних адреса)",
        "upload_source_file": "(ваша одабрана датотека са вашег рачунара)",
        "randomincategory-invalidcategory": "„$1“ није ваљано име категорије",
        "randomincategory-nopages": "Нема страница у категорији [[:Category:$1|$1]].",
        "randomincategory-category": "Категорија:",
+       "randomincategory-legend": "Случајна страница у категорији",
        "randomredirect": "Случајно преусмерење",
        "randomredirect-nopages": "Нема преусмерења у именском простору „$1“.",
        "statistics": "Статистике",
        "unusedimages": "Некоришћене датотеке",
        "wantedcategories": "Тражене категорије",
        "wantedpages": "Тражене странице",
+       "wantedpages-summary": "Списак непостојећих страница са највише веза до њих, на овом списку се не налазе странице до којих воде преусмерења. За списак покварених преусмерења погледајте [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Неисправан наслов у низу резултата: $1",
        "wantedfiles": "Тражене датотеке",
        "wantedfiletext-cat": "Следеће датотеке се користе, али не постоје. Датотеке из других ризница могу бити наведене иако не постоје. Такве датотеке ће бити <del>поништене</del> са списка. Поред тога, странице које садрже непостојеће датотеке се налазе [[:$1|овде]].",
        "wantedtemplates": "Тражени шаблони",
        "mostlinked": "Странице с највише веза",
        "mostlinkedcategories": "Категорије с највише веза",
-       "mostlinkedtemplates": "Шаблони с највише веза",
+       "mostlinkedtemplates": "СÑ\82Ñ\80аниÑ\86е с највише веза",
        "mostcategories": "Странице с највише категорија",
        "mostimages": "Датотеке с највише веза",
        "mostinterwikis": "Странице са највише међувикија",
        "listgrouprights-namespaceprotection-namespace": "Именски простор",
        "listgrouprights-namespaceprotection-restrictedto": "Права потребна за уређивање",
        "trackingcategories-name": "Име поруке",
+       "trackingcategories-desc": "Које странице се налазе у категорији",
+       "noindex-category-desc": "Странице које у себи имају магичну реч <code><nowiki>__NOINDEX__</nowiki></code>.",
+       "index-category-desc": "Странице које у себи имају магичну реч <code><nowiki>__INDEX__</nowiki></code> и самим тим су индексиране од стране робота.",
+       "broken-file-category-desc": "Странице које имају везе до непостојећих датотека.",
+       "hidden-category-category-desc": "Категорије које у себи имају магичну реч <code><nowiki>__HIDDENCAT__</nowiki></code> и самим тим се не приказују у одељку за категорије на страницама.",
        "trackingcategories-nodesc": "Опис није доступан.",
        "trackingcategories-disabled": "Категорија је онемогућена",
        "mailnologin": "Нема адресе за слање",
        "import-rootpage-nosubpage": "Именски простор „$1“ основне странице не дозвољава подстранице.",
        "importlogpage": "Дневник увоза",
        "importlogpagetext": "Административни увози страница с историјама измена с других викија.",
-       "import-logentry-upload": "је увезао [[$1]] отпремањем датотеке",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|измена увезена|измене увезене|измена увезено}}",
-       "import-logentry-interwiki": "је увезао $1 с другог викија",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|измена увезена|измене увезене|измена увезено}} из $2",
        "javascripttest": "Јаваскрипт тест",
        "javascripttest-pagetext-noframework": "Ова страница је резервисана за извршавање јаваскрипт тестова.",
        "tooltip-pt-mycontris": "Списак ваших доприноса",
        "tooltip-pt-login": "Препоручујемо вам да се пријавите, иако то није обавезно.",
        "tooltip-pt-logout": "Одјавите се",
+       "tooltip-pt-createaccount": "Охрабрујемо вас да отворите налог и пријавите се али то није обавезно",
        "tooltip-ca-talk": "Разговор о страници са садржајем",
        "tooltip-ca-edit": "Можете да уређујете ову страницу. Користите претпреглед пре снимања",
        "tooltip-ca-addsection": "Започните нови одељак",
        "creditspage": "Аутори странице",
        "nocredits": "Не постоје подаци о аутору ове странице.",
        "spamprotectiontitle": "Филтер за заштиту од непожељних порука",
-       "spamprotectiontext": "СÑ\82Ñ\80аниÑ\86а ÐºÐ¾Ñ\98Ñ\83 Ð¶ÐµÐ»Ð¸Ñ\82е Ð´Ð° Ñ\81аÑ\87Ñ\83ваÑ\82е Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана Ð¾Ð´ Ñ\84илÑ\82еÑ\80а Ð¿Ñ\80оÑ\82ив Ð½ÐµÐ¿Ð¾Ð¶ÐµÑ\99ниÑ\85 Ð¿Ð¾Ñ\80Ñ\83ка.\nОво је вероватно изазвано везом до спољашњег сајта који се налази на црној листи.",
-       "spamprotectionmatch": "СледеÑ\9bи Ñ\82екÑ\81Ñ\82 Ñ\98е Ð¸Ð·Ð°Ð·Ð²ао наш филтер за нежељене поруке: $1",
+       "spamprotectiontext": "ФилÑ\82еÑ\80а Ð¿Ñ\80оÑ\82ив Ð½ÐµÐ¶ÐµÑ\99ениÑ\85 Ð¿Ð¾Ñ\80Ñ\83ка Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ао Ñ\87Ñ\83ваÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е.\nОво је вероватно изазвано везом до спољашњег сајта који се налази на црној листи.",
+       "spamprotectionmatch": "СледеÑ\9bи Ñ\82екÑ\81Ñ\82 Ñ\98е Ð°ÐºÑ\82ивиÑ\80ао наш филтер за нежељене поруке: $1",
        "spambot_username": "Чишћење непожељних порука у Медијавикији",
        "spam_reverting": "Враћам на последњу измену која не садржи везе до $1",
        "spam_blanking": "Све измене садрже везе до $1. Чистим",
        "hours-ago": "Пре $1 {{PLURAL:$1|сат|сата|сати}}",
        "minutes-ago": "Пре $1 {{PLURAL:$1|минут|минута}}",
        "seconds-ago": "Пре $1 {{PLURAL:$1|секунда|секунди}}",
-       "monday-at": "Понедељак у $1",
-       "tuesday-at": "Уторак у $1",
-       "wednesday-at": "Среда у $1",
-       "thursday-at": "Четвртак у $1",
-       "friday-at": "Петак у $1",
-       "saturday-at": "Субота у $1",
-       "sunday-at": "Недеља у $1",
+       "monday-at": "у понедељак у $1",
+       "tuesday-at": "у уторак у $1",
+       "wednesday-at": "у среду у $1",
+       "thursday-at": "у четвртак у $1",
+       "friday-at": "у петак у $1",
+       "saturday-at": "у суботу у $1",
+       "sunday-at": "у недељу у $1",
        "yesterday-at": "Јуче у $1",
        "bad_image_list": "Формат је следећи:\n\nРазматрају се само набрајања (редови који почињу са звездицом).\nПрва веза у реду мора да буде веза до неисправне датотеке.\nСве даљње везе у истом реду сматрају се изузецима.",
        "variantname-zh-hans": "hans",
        "lag-warn-high": "Због преоптерећења базе података, измене новије од $1 {{PLURAL:$1|секунда|секунде}} неће бити приказане.",
        "watchlistedit-normal-title": "Уређивање списка надгледања",
        "watchlistedit-normal-legend": "Уклањање наслова са списка надгледања",
-       "watchlistedit-normal-explain": "Наслови на вашем списку надгледања су приказани испод.\nДа бисте уклонили наслов, означите кућицу до њега и кликните на „{{int:Watchlistedit-normal-submit}}“.\nМожете и да [[Special:EditWatchlist/raw|уредите сиров списак]].",
+       "watchlistedit-normal-explain": "Наслови на вашем списку надгледања су приказани испод.\nДа бисте уклонили наслов, означите квадратић до њега и кликните на „{{int:Watchlistedit-normal-submit}}“.\nМожете и да [[Special:EditWatchlist/raw|уредите сиров списак]].",
        "watchlistedit-normal-submit": "Уклони наслове",
        "watchlistedit-normal-done": "{{PLURAL:$1|1=Једна страница је уклоњена|$1 странице су уклоњене|$1 страница је уклоњено}} с вашег списка надгледања:",
        "watchlistedit-raw-title": "Измени сиров списак надгледања",
        "watchlistedit-raw-done": "Ваш списак надгледања је ажуриран.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1=Додат је један наслов|Додата су $1 наслова|Додато је $1 наслова}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 наслов је уклоњен|Уклоњена су $1 наслова|Уклоњено је $1 наслова}}:",
-       "watchlistedit-clear-title": "Ð\98Ñ\81пÑ\80азни Ñ\81пиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа",
+       "watchlistedit-clear-title": "СпиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа Ð¸Ñ\81пÑ\80ажÑ\9aен",
        "watchlistedit-clear-legend": "Испразни списак надгледања",
        "watchlistedit-clear-explain": "Сви наслови ће бити уклоњени из вашег списка надгледања.",
        "watchlistedit-clear-titles": "Наслови:",
        "version-parser-function-hooks": "Куке",
        "version-hook-name": "Назив куке",
        "version-hook-subscribedby": "Пријављено од",
-       "version-version": "(издање $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[нема имена]",
        "version-svn-revision": "(изм. $2)",
        "version-license": "Медијавики лиценца",
        "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-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-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-found": "Ознака „$1“ не постоји.",
        "tags-activate-title": "Активирање ознака",
        "tags-activate-question": "Активирате ознаку „$1“.",
+       "tags-activate-reason": "Разлог:",
        "tags-activate-not-allowed": "Није могуће активирати ознаку „$1“.",
        "tags-activate-not-found": "Ознака „$1“ не постоји.",
+       "tags-activate-submit": "Активирај",
        "tags-deactivate-title": "Деактивирање ознака",
+       "tags-deactivate-question": "Деактивирате ознаку „$1“.",
+       "tags-deactivate-reason": "Разлог:",
+       "tags-deactivate-not-allowed": "Није могуће деактивирати ознаку „$1“.",
+       "tags-deactivate-submit": "Декативирај",
        "comparepages": "Упоређивање страница",
        "compare-page1": "Страница 1",
        "compare-page2": "Страница 2",
        "compare-revision-not-exists": "Наведена измена не постоји.",
        "dberr-problems": "Дошло је до техничких проблема.",
        "dberr-again": "Сачекајте неколико минута и поново учитајте страницу.",
-       "dberr-info": "(не Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\81е Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ñ\81а Ñ\81еÑ\80веÑ\80ом Ð±Ð°Ð·Ðµ података: $1)",
-       "dberr-info-hidden": "(не Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\81е Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ñ\81а Ñ\81еÑ\80веÑ\80ом Ð±Ð°Ð·Ðµ података)",
+       "dberr-info": "(Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð¿Ñ\80иÑ\81Ñ\82Ñ\83пиÑ\82и Ð±Ð°Ð·Ð¸ података: $1)",
+       "dberr-info-hidden": "(Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð¿Ñ\80иÑ\81Ñ\82Ñ\83пиÑ\82и Ð±Ð°Ð·Ð¸ података)",
        "dberr-usegoogle": "У међувремену, покушајте да претражите помоћу Гугла.",
        "dberr-outofdate": "Имајте на уму да њихови примерци нашег садржаја могу бити застарели.",
        "dberr-cachederror": "Ово је привремено меморисан примерак стране који можда није ажуран.",
        "revdelete-uname-unhid": "корисничко име је откривено",
        "revdelete-restricted": "примењена ограничења за администраторе",
        "revdelete-unrestricted": "уклоњена ограничења за администраторе",
+       "logentry-block-block": "$1 је {{GENDER:$2|блокирао|блокирала}} {{GENDER:$4|$3}} у трајању од $5 $6",
+       "logentry-block-unblock": "$1 је {{GENDER:$2|деблокирао|деблокирала}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 је {{GENDER:$2|променио|променила}} подешавања за блокирање {{GENDER:$4|корисника|кориснице}} {{GENDER:$4|$3}} у трајању од $5 $6",
+       "logentry-suppress-block": "$1 је {{GENDER:$2|блокирао|блокирала}} {{GENDER:$4|$3}} у трајању од $5 $6",
+       "logentry-suppress-reblock": "$1 је {{GENDER:$2|променио|променила}} подешавања за блокирање {{GENDER:$4|корисника|кориснице}} {{GENDER:$4|$3}} у трајању од $5 $6",
+       "logentry-import-upload": "$1 је {{GENDER:$2|увезао|увезла}} $3 отпремањем датотеке",
+       "logentry-import-interwiki": "$1 је {{GENDER:$2|увезао|увезла}} $3 с другог викија",
        "logentry-merge-merge": "$1 је {{GENDER:$2|спојио|спојила}} $3 у $4 (све до измене $5)",
        "logentry-move-move": "$1 је {{GENDER:$2|преместио|преместила}} страницу $3 на $4",
        "logentry-move-move-noredirect": "$1 је {{GENDER:$2|преместио|преместила}} страницу $3 на $4 без остављања преусмерења",
        "logentry-newusers-newusers": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог",
        "logentry-newusers-create": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог",
        "logentry-newusers-create2": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3",
-       "logentry-newusers-byemail": "$1 Ñ\98е {{GENDER:$2|напÑ\80авио|напÑ\80авила}} кориснички налог $3 и лозинка је послата на е-пошту",
+       "logentry-newusers-byemail": "$1 Ñ\98е {{GENDER:$2|оÑ\82воÑ\80ио|оÑ\82воÑ\80ила}} кориснички налог $3 и лозинка је послата на е-пошту",
        "logentry-newusers-autocreate": "Кориснички налог $1 је аутоматски {{GENDER:$2|отворен}}",
        "logentry-rights-rights": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3 из $4 у $5",
        "logentry-rights-rights-legacy": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3",
        "logentry-upload-upload": "$1 је {{GENDER:$2|послао|послала}} $3",
        "logentry-upload-overwrite": "$1 је {{GENDER:$2|послао|послала}} нову верзију $3",
        "logentry-upload-revert": "$1 је {{GENDER:$2|послао|послала}} $3",
+       "log-name-managetags": "Дневник ознака",
+       "log-description-managetags": "Овај дневник садржи списак измена у вези [[Special:Tags|ознака]]. Дневник садржи само радње извршене од стране администратора; уноси за ознаке направљене или обрисане од стране вики софтвера се не налазе у овом дневнику.",
        "logentry-managetags-create": "$1 је {{GENDER:$2|направио|направила}} ознаку „$4“",
        "logentry-managetags-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} ознаку „$4“ (уклоњена је из $5 {{PLURAL:$5|измене или дневника|измена и/или дневника}})",
        "logentry-managetags-activate": "$1 је {{GENDER:$2|активирао|активирала}} ознаку „$4“ за употребу од стране корисника и ботова",
        "logentry-managetags-deactivate": "$1 је {{GENDER:$2|деактивирао|деактивирала}} ознаку „$4“ за употребу од стране корисника и ботова",
        "rightsnone": "(нема)",
        "revdelete-summary": "опис измене",
+       "feedback-adding": "Додајем повратну информацију на страницу…",
+       "feedback-back": "Назад",
+       "feedback-bugcheck": "Одлично! Проверите да ли је грешка [$1 позната од пре].",
+       "feedback-bugnew": "Проверено. Пријави нову грешку",
        "feedback-bugornote": "Ако сте спремни да детаљно опишете технички проблем, онда [$1 пријавите грешку].\nУ супротном, послужите се једноставним обрасцем испод. Ваш коментар ће стајати на страници „[$3 $2]“, заједно с корисничким именом и прегледачем који користите.",
-       "feedback-subject": "Наслов:",
-       "feedback-message": "Порука:",
        "feedback-cancel": "Откажи",
-       "feedback-submit": "Пошаљи повратну информацију",
-       "feedback-adding": "Додајем повратну информацију на страницу…",
+       "feedback-close": "Урађено",
+       "feedback-error-title": "Грешка",
        "feedback-error1": "Грешка: непрепознат резултат од АПИ-ја",
        "feedback-error2": "Грешка: уређивање није успело",
        "feedback-error3": "Грешка: нема одговора од АПИ-ја",
+       "feedback-message": "Порука:",
+       "feedback-subject": "Наслов:",
+       "feedback-submit": "Пошаљи",
        "feedback-thanks": "Хвала! Ваша повратна информација је постављена на страницу „[$2 $1]“.",
-       "feedback-close": "Урађено",
-       "feedback-bugcheck": "Одлично! Проверите да ли је грешка [$1 позната од пре].",
-       "feedback-bugnew": "Проверено. Пријави нову грешку",
+       "feedback-thanks-title": "Хвала вам!",
        "searchsuggest-search": "Претрага",
        "searchsuggest-containing": "садржи...",
        "api-error-badaccess-groups": "Није вам дозвољено да отпремате датотеке на овај вики.",
        "pagelang-select-lang": "Изабери језик",
        "right-pagelang": "мењање језика странице",
        "action-pagelang": "промену језика странице",
+       "logentry-pagelang-pagelang": "$1 је {{GENDER:$2|променио|променила}} језик странице $3 из $4 у $5.",
        "mediastatistics": "Статистика датотека",
        "mediastatistics-summary": "Статистике о типовима послатих датотека. Овде су урачунате само најновије верзије датотека. Старе или обрисане верзије нису урачунате.",
        "mediastatistics-table-mimetype": "MIME тип",
        "mediastatistics-header-text": "Текстуалне",
        "mediastatistics-header-executable": "Извршне",
        "mediastatistics-header-archive": "Компресоване",
-       "json-error-syntax": "Грешка у синтакси"
+       "json-error-syntax": "Грешка у синтакси",
+       "headline-anchor-title": "Веза до овог одељка",
+       "special-characters-group-latin": "латиница",
+       "special-characters-group-latinextended": "проширена латиница",
+       "special-characters-group-ipa": "ИПА",
+       "special-characters-group-symbols": "симболи",
+       "special-characters-group-greek": "грчки",
+       "special-characters-group-cyrillic": "ћирилица",
+       "special-characters-group-arabic": "арапски",
+       "special-characters-group-arabicextended": "проширени арапски",
+       "special-characters-group-persian": "персијски",
+       "special-characters-group-hebrew": "хебрејски",
+       "special-characters-group-bangla": "бенгалски",
+       "special-characters-group-tamil": "тамилски",
+       "special-characters-group-telugu": "телугу",
+       "special-characters-group-sinhala": "синхалски",
+       "special-characters-group-gujarati": "гуџарати",
+       "special-characters-group-thai": "тајландски",
+       "special-characters-group-lao": "лаоски",
+       "special-characters-group-khmer": "кмерски"
 }
index d0342f1..a226dca 100644 (file)
        "disclaimers": "Odricanje odgovornosti",
        "disclaimerpage": "Project:Odricanje odgovornosti",
        "edithelp": "Pomoć pri uređivanju",
+       "helppage-top-gethelp": "Pomoć",
        "mainpage": "Glavna strana",
        "mainpage-description": "Glavna strana",
        "policy-url": "Project:Pravila",
        "editold": "uredi",
        "viewsourceold": "izvorni kod",
        "editlink": "uredi",
-       "viewsourcelink": "Izvor",
-       "editsectionhint": "Uredite odeljak „$1“",
+       "viewsourcelink": "izvorni kod",
+       "editsectionhint": "Uredi odeljak „$1“",
        "toc": "Sadržaj",
        "showtoc": "prikaži",
        "hidetoc": "sakrij",
        "missing-article": "Tekst stranice pod nazivom „$1“ ($2) nije pronađen.\n\nUzrok ove greške je obično zastarela izmena ili veza do obrisane stranice.\n\nAko se ne radi o tome, onda ste verovatno pronašli grešku u softveru.\nPrijavite je [[Special:ListUsers/sysop|administratoru]] uz odgovarajuću vezu.",
        "missingarticle-rev": "(izmena#: $1)",
        "missingarticle-diff": "(razlika: $1, $2)",
-       "readonly_lag": "Baza podataka je zaključana dok se sporedni bazni serveri ne usklade s glavnim.",
+       "readonly_lag": "Baza podataka je automatski zaključana da bi se sekundarni serveri baze podataka uskladili s glavnim.",
        "internalerror": "Unutrašnja greška",
        "internalerror_info": "Unutrašnja greška: $1",
        "filecopyerror": "Ne mogu da umnožim datoteku „$1“ u „$2“.",
        "invalidtitle-knownnamespace": "Neispravan naslov s imenskim prostorom „$2“ i tekstom „$3“",
        "invalidtitle-unknownnamespace": "Neispravan naslov s imenskim prostorom br. $1 i tekstom „$2“",
        "exception-nologin": "Niste prijavljeni",
-       "exception-nologin-text": "[[Special:Userlogin|Prijavite se]] da biste pristupili ovoj stranici ili radnji.",
+       "exception-nologin-text": "Prijavite se da biste pristupili ovoj stranici ili radnji.",
        "exception-nologin-text-manual": "Morate biti $1 da biste pristupili ovoj stranici ili radnji.",
        "virus-badscanner": "Neispravna postavka: nepoznati skener za viruse: ''$1''",
        "virus-scanfailed": "neuspešno skeniranje (kod $1)",
        "createaccount-text": "Neko je otvorio nalog s vašom e-adresom na {{SITENAME}} ($4) pod imenom $2 i lozinkom $3.\nPrijavite se i promenite svoju lozinku.\n\nAko je ovo greška, zanemarite ovu poruku.",
        "login-throttled": "Previše puta ste pokušali da se prijavite. \nMolimo vas da sačekate $1 pre nego što pokušate ponovo.",
        "login-abort-generic": "Neuspešna prijava – prekinuto",
+       "login-migrated-generic": "Vaš nalog je migriran i vaše korisničko više ne postoji na ovom vikiju.",
        "loginlanguagelabel": "Jezik: $1",
        "suspicious-userlogout": "Vaš zahtev za odjavu je odbijen jer je poslat od strane neispravnog pregledača ili posrednika.",
        "createacct-another-realname-tip": "Pravo ime nije obavezno.\nAko izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rada.",
        "summary-preview": "Pregled opisa:",
        "subject-preview": "Pregled teme/naslova:",
        "blockedtitle": "Korisnik je blokiran",
-       "blockedtext": "<strong>Vaše korisničko ime ili IP adresa je blokirana.</strong>\n\nBlokiranje je {{GENDER:$4|izvršio|izvršila}} $1.\nRazlog: <em>$2</em>.\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\nNe možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].\nVaša blokirana IP adresa je $3, a ID blokiranja $5.\nNavedite sve podatke iznad pri stvaranja bilo kakvih upita.",
+       "blockedtext": "<strong>Vaše korisničko ime ili IP adresa je blokirana.</strong>\n\nBlokiranje je {{GENDER:$4|izvršio|izvršila}} $1.\nRazlog: <em>$2</em>.\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\nNe možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].\nVaša blokirana IP adresa je $3, a ID blokiranja $5.\nNavedite sve podatke iznad pri stvaranju bilo kakvih upita.",
        "autoblockedtext": "Vaša IP adresa je blokirana jer ju je upotrebljavao drugi korisnik, koga je {{GENDER:$4|blokirao|blokirala}} $1.\nRazlog:\n\n:<em>$2</em>\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\n\nNe možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].\n\nVaša blokirana IP adresa je $3, a ID $5.\nNavedite sve podatke iznad pri stvaranju bilo kakvih upita.",
        "blockednoreason": "razlog nije naveden",
        "whitelistedittext": "Za uređivanje stranice je potrebno da budete $1.",
        "templatesused": "{{PLURAL:$1|Šablon|Šabloni}} na ovoj stranici:",
        "templatesusedpreview": "{{PLURAL:$1|Šablon|Šabloni}} u ovom pregledu:",
        "templatesusedsection": "{{PLURAL:$1|Šablon|Šabloni}} u ovom odeljku:",
-       "template-protected": "(zaštićen)",
-       "template-semiprotected": "(poluzaštićen)",
+       "template-protected": "(zaštićeno)",
+       "template-semiprotected": "(poluzaštićeno)",
        "hiddencategories": "Ova stranica je član {{PLURAL:$1|jedne skrivene kategorije|$1 skrivene kategorije|$1 skrivenih kategorija}}:",
        "edittools": "<!-- Ovaj tekst će biti prikazan ispod obrasca za uređivanje i otpremanje. -->",
        "edittools-upload": "-",
        "sectioneditnotsupported-title": "Uređivanje odeljka nije podržano",
        "sectioneditnotsupported-text": "Uređivanje odeljka nije podržano na ovoj stranici.",
        "permissionserrors": "Greška u dozvoli",
-       "permissionserrorstext": "Nemate ovlašćenje za tu radnju iz {{PLURAL:$1|sledećeg|sledećih}} razloga:",
+       "permissionserrorstext": "Nemate ovlašćenje za ovu radnju iz {{PLURAL:$1|1=sledećeg|sledećih}} razloga:",
        "permissionserrorstext-withaction": "Nemate dozvolu za $2 iz {{PLURAL:$1|sledećeg|sledećih}} razloga:",
        "recreate-moveddeleted-warn": "<strong>Upozorenje: ponovo pravite stranicu koja je prethodno obrisana.</strong>\n\nRazmotrite da li je prikladno da nastavite s uređivanjem ove stranice.\nOvde je navedena istorija brisanja i premeštanja s obrazloženjem:",
        "moveddeleted-notice": "Ova stranica je obrisana.\nIstorija njenog brisanja i premeštanja nalazi se ispod:",
        "content-failed-to-parse": "Ne mogu da raščlanim sadržaj tipa $2 za model $1: $3",
        "invalid-content-data": "Neispravni podaci sadržaja",
        "content-not-allowed-here": "Sadržaj modela „$1“ nije dozvoljen na stranici [[$2]]",
-       "editwarning-warning": "Ako napustite ovu stranicu, izgubićete sve izmene koje ste napravili.\nAko ste prijavljeni, možete onemogućiti ovo upozorenje u svojim podešavanjima, u odeljku „{{int:prefs-editing}}“.",
+       "editwarning-warning": "Ako napustite ovu stranicu, izgubićete sve izmene koje ste napravili. Ako ste prijavljeni, možete onemogućiti ovo upozorenje u svojim podešavanjima, u odeljku „{{int:prefs-editing}}“.",
        "editpage-notsupportedcontentformat-title": "Format sadržaja nije podržan",
        "content-model-wikitext": "vikitekst",
        "content-model-text": "čist tekst",
        "history-feed-item-nocomment": "$1 u $2",
        "history-feed-empty": "Tražena stranica ne postoji.\nMoguće da je obrisana s vikija ili je preimenovana.\nPokušajte da [[Special:Search|pretražite viki]] za slične stranice.",
        "rev-deleted-comment": "(opis izmene uklonjen)",
-       "rev-deleted-user": "(korisničko ime je uklonjeno)",
-       "rev-deleted-event": "(istorija je uklonjena)",
+       "rev-deleted-user": "(korisničko ime uklonjeno)",
+       "rev-deleted-event": "(detalji dnevnika uklonjeni)",
        "rev-deleted-user-contribs": "[korisničko ime ili IP adresa je uklonjena – izmena je sakrivena sa spiska doprinosa]",
        "rev-deleted-text-permission": "Izmena ove stranice je '''obrisana'''.\nDetalje možete videti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} istoriji brisanja].",
        "rev-deleted-text-unhide": "Izmena ove stranice je '''obrisana'''.\nDetalje možete videti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} istoriji brisanja].\nIpak možete da [$1 vidite ovu izmenu] ako želite da nastavite.",
        "revdelete-text-text": "Izbrisane izmene će i dalje biti vidljive u istoriji stranice, ali delovi njihovog sadržaja neće biti javno dostupnu.",
        "revdelete-text-file": "Izbrisane verzije datoteke će i dalje biti vidljive u istoriji datoteke, ali delovi njihovog sadržaja neće biti javno dostupnu.",
        "logdelete-text": "Izbrisani unosi u dnevnicima će i dalje biti vidljivi u dnevnicima, ali delovi njihovog sadržaja neće biti javno dostupnu.",
+       "revdelete-text-others": "Ostali administratori će i dalje moći da pristupe skrivenom sadržaju i vrate ga, osim ako se postave dodatna ograničenja.",
        "revdelete-confirm": "Potvrdite da nameravate ovo uraditi, da razumete posledice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
-       "revdelete-suppress-text": "Sakrivanje izmena bi trebalo koristiti '''samo''' u sledećim slučajevima:\n* Zlonamerni ili pogrdni podaci\n* Neprikladni lični podaci\n*: ''kućna adresa i broj telefona, broj bankovne kartice itd.''",
+       "revdelete-suppress-text": "Sakrivanje izmena bi trebalo koristiti <strong>samo</strong> u sledećim slučajevima:\n* zlonamerni ili pogrdni podaci\n* neprikladni lični podaci\n*: <em>kućna adresa i broj telefona, broj kreditne kartice, JMBG itd.</em>",
        "revdelete-legend": "Ograničenja vidljivosti",
        "revdelete-hide-text": "Sakrij tekst izmene",
        "revdelete-hide-image": "Sakrij sadržaj datoteke",
        "shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata|rezultata}} po stranici",
        "viewprevnext": "Pogledaj ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Postoji i članak pod nazivom „[[:$1]]“.'''",
-       "searchmenu-new": "<strong>Napravite stranicu „[[:$1]]“!</strong> {{PLURAL:$2|0=|Vidi takođe razultate pretrage.}}",
+       "searchmenu-new": "<strong>Napravite stranicu „[[:$1]]“!</strong> {{PLURAL:$2|0=|Vidi takođe rezultate pretrage.}}",
        "searchprofile-articles": "Članci",
        "searchprofile-images": "Datoteke",
        "searchprofile-everything": "Sve",
        "preferences": "Podešavanja",
        "mypreferences": "Podešavanja",
        "prefs-edits": "Broj izmena:",
-       "prefsnologintext2": "Morate biti $1 da biste menjali svoja podešavanja.",
+       "prefsnologintext2": "Morate biti prijavljeni da biste menjali svoja podešavanja.",
        "prefs-skin": "Tema",
        "skin-preview": "Pregledaj",
        "datedefault": "Svejedno",
        "prefs-personal": "Profil",
        "prefs-rc": "Skorašnje izmene",
        "prefs-watchlist": "Spisak nadgledanja",
+       "prefs-editwatchlist": "Uređivanje spiska nadgledanja",
+       "prefs-editwatchlist-label": "Uređivanje spiska:",
+       "prefs-editwatchlist-edit": "Uredi spisak",
+       "prefs-editwatchlist-raw": "Uredi sirov spisak",
+       "prefs-editwatchlist-clear": "Isprazni spisak",
        "prefs-watchlist-days": "Broj dana u spisku nadgledanja:",
        "prefs-watchlist-days-max": "Najviše $1 {{PLURAL:$1|dan|dana|dana}}",
        "prefs-watchlist-edits": "Najveći broj izmena u proširenom spisku nadgledanja:",
        "prefs-diffs": "Razlike",
        "prefs-help-prefershttps": "Ova podešavanja će stupiti na snagu pri sledećoj prijavi.",
        "prefswarning-warning": "Promenili ste vaša podešavanja ali niste ih još sačuvali.\nAko ne pritisnete „$1“ vaša podešavanja će biti izgubljena.",
+       "prefs-tabs-navigation-hint": "Savet: možete koristiti tipke sa levom i desnom strelicom za kretanje kroz kartice.",
        "email-address-validity-valid": "E-adresa je ispravna",
        "email-address-validity-invalid": "Unesite ispravnu e-adresu",
        "userrights": "Upravljanje korisničkim pravima",
        "userrights-changeable-col": "Grupe koje možete da promenite",
        "userrights-unchangeable-col": "Grupe koje ne možete da promenite",
        "userrights-irreversible-marker": "$1*",
+       "userrights-conflict": "Sukob promena korisničkih prava! Molimo proverite vaše izmene.",
        "userrights-removed-self": "Uspešno ste sebi skinuli prava. Zbog toga nije vam dozvoljen pristup ovoj stranici.",
        "group": "Grupa:",
        "group-user": "Korisnici",
        "right-override-export-depth": "izvoz stranica uključujući i povazene stranice do dubine od pet veza",
        "right-sendemail": "slanje e-poruka drugim korisnicima",
        "right-passwordreset": "pregledanje poruka za obnavljanje lozinke",
+       "right-managechangetags": "pravljenje i/ili brisanje [[Special:Tags|oznaka]] iz baze podataka",
        "newuserlogpage": "Dnevnik novih korisnika",
        "newuserlogpagetext": "Ovo je istorija novih korisnika.",
        "rightslog": "Dnevnik korisničkih prava",
        "action-viewmywatchlist": "pregled vašeg spisak nadgledanja",
        "action-viewmyprivateinfo": "pregledanje vaših ličnih podataka",
        "action-editmyprivateinfo": "uređivanje vaših ličnih podataka",
+       "action-managechangetags": "pravljenje i/ili brisanje oznaka iz baze podataka",
        "nchanges": "$1 {{PLURAL:$1|izmena|izmene|izmena}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|izmena od vaše poslednje posete}}",
        "enhancedrc-history": "istorija",
        "uploaderror": "Greška pri otpremanju",
        "upload-recreate-warning": "'''Upozorenje: datoteka s tim nazivom je obrisana ili premeštena.'''\n\nIstorija brisanja i premeštanja se nalazi ispod:",
        "uploadtext": "Koristite obrazac ispod da biste otpremili datoteke.\nZa pregled ili pretragu postojećih datoteka, pogledajte [[Special:FileList|spisak otpremljenih datoteka]], ponovna otpremanja su navedena u [[Special:Log/upload|dnevniku otpremanja]], a brisanja u [[Special:Log/delete|dnevniku brisanja]].\n\nDatoteku dodajete na željenu stranicu koristeći sledeće obrasce:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Slika.jpg]]</nowiki></code>''' za verziju slike u punoj veličini\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Slika.png|200p|mini|levo|opis]]</nowiki></code>''' za verziju slike s veličinom od 200 piksela koja je prikazana u zasebnom okviru, zajedno s opisom.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datoteka.ogg]]</nowiki></code>''' za direktno povezivanje s datotekom bez njenog prikazivanja",
-       "upload-permitted": "Dozvoljeni tipovi datoteka: $1.",
-       "upload-preferred": "Preporučeni tipovi datoteka: $1.",
-       "upload-prohibited": "Zabranjeni tipovi datoteka: $1.",
+       "upload-permitted": "Dozvoljeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
+       "upload-preferred": "Preporučeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
+       "upload-prohibited": "Zabranjeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
        "uploadlogpage": "Dnevnik otpremanja",
        "uploadlogpagetext": "Ispod je spisak skorašnjih slanja.\nPogledajte [[Special:NewFiles|galeriju novih datoteka]] za lepši pregled.",
        "filename": "Naziv datoteke",
        "license": "Licenca:",
        "license-header": "Licenca:",
        "nolicense": "nije izabrano",
+       "licenses-edit": "Uredi izbor licenci",
        "license-nopreview": "(pregled nije dostupan)",
        "upload_source_url": "(vaša izabrana datoteka od ispravnih i javno dostupnih adresa)",
        "upload_source_file": "(vaša odabrana datoteka sa vašeg računara)",
        "randomincategory-invalidcategory": "„$1“ nije valjano ime kategorije",
        "randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
        "randomincategory-category": "Kategorija:",
+       "randomincategory-legend": "Slučajna stranica u kategoriji",
        "randomredirect": "Slučajno preusmerenje",
        "randomredirect-nopages": "Nema preusmerenja u imenskom prostoru „$1“.",
        "statistics": "Statistike",
        "unusedimages": "Nekorišćene datoteke",
        "wantedcategories": "Tražene kategorije",
        "wantedpages": "Tražene stranice",
+       "wantedpages-summary": "Spisak nepostojećih stranica sa najviše veza do njih, na ovom spisku se ne nalaze stranice do kojih vode preusmerenja. Za spisak pokvarenih preusmerenja pogledajte [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Neispravan naslov u nizu rezultata: $1",
        "wantedfiles": "Tražene datoteke",
        "wantedfiletext-cat": "Sledeće datoteke se koriste, ali ne postoje. Datoteke iz drugih riznica mogu biti navedene iako ne postoje. Takve datoteke će biti <del>poništene</del> sa spiska. Pored toga, stranice koje sadrže nepostojeće datoteke se nalaze [[:$1|ovde]].",
        "wantedtemplates": "Traženi šabloni",
        "mostlinked": "Stranice s najviše veza",
        "mostlinkedcategories": "Kategorije s najviše veza",
-       "mostlinkedtemplates": "Šabloni s najviše veza",
+       "mostlinkedtemplates": "Stranice s najviše veza",
        "mostcategories": "Stranice s najviše kategorija",
        "mostimages": "Datoteke s najviše veza",
        "mostinterwikis": "Stranice sa najviše međuvikija",
        "listgrouprights-namespaceprotection-namespace": "Imenski prostor",
        "listgrouprights-namespaceprotection-restrictedto": "Prava potrebna za uređivanje",
        "trackingcategories-name": "Ime poruke",
+       "trackingcategories-desc": "Koje stranice se nalaze u kategoriji",
+       "noindex-category-desc": "Stranice koje u sebi imaju magičnu reč <code><nowiki>__NOINDEX__</nowiki></code>.",
+       "index-category-desc": "Stranice koje u sebi imaju magičnu reč <code><nowiki>__INDEX__</nowiki></code> i samim tim su indeksirane od strane robota.",
+       "broken-file-category-desc": "Stranice koje imaju veze do nepostojećih datoteka.",
+       "hidden-category-category-desc": "Kategorije koje u sebi imaju magičnu reč <code><nowiki>__HIDDENCAT__</nowiki></code> i samim tim se ne prikazuju u odeljku za kategorije na stranicama.",
        "trackingcategories-nodesc": "Opis nije dostupan.",
        "trackingcategories-disabled": "Kategorija je onemogućena",
        "mailnologin": "Nema adrese za slanje",
        "import-rootpage-nosubpage": "Imenski prostor „$1“ osnovne stranice ne dozvoljava podstranice.",
        "importlogpage": "Dnevnik uvoza",
        "importlogpagetext": "Administrativni uvozi stranica s istorijama izmena s drugih vikija.",
-       "import-logentry-upload": "je uvezao [[$1]] otpremanjem datoteke",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|izmena uvezena|izmene uvezene|izmena uvezeno}}",
-       "import-logentry-interwiki": "je uvezao $1 s drugog vikija",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|izmena uvezena|izmene uvezene|izmena uvezeno}} iz $2",
        "javascripttest": "Javaskript test",
        "javascripttest-pagetext-noframework": "Ova stranica je rezervisana za izvršavanje javaskript testova.",
        "tooltip-pt-mycontris": "Spisak vaših doprinosa",
        "tooltip-pt-login": "Preporučujemo vam da se prijavite, iako to nije obavezno.",
        "tooltip-pt-logout": "Odjavite se",
+       "tooltip-pt-createaccount": "Ohrabrujemo vas da otvorite nalog i prijavite se ali to nije obavezno",
        "tooltip-ca-talk": "Razgovor o stranici sa sadržajem",
        "tooltip-ca-edit": "Možete da uređujete ovu stranicu. Koristite pretpregled pre snimanja",
        "tooltip-ca-addsection": "Započnite novi odeljak",
        "creditspage": "Autori stranice",
        "nocredits": "Ne postoje podaci o autoru ove stranice.",
        "spamprotectiontitle": "Filter za zaštitu od nepoželjnih poruka",
-       "spamprotectiontext": "Stranica koju želite da sačuvate je blokirana od filtera protiv nepoželjnih poruka.\nOvo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj listi.",
-       "spamprotectionmatch": "Sledeći tekst je izazvao naš filter za neželjene poruke: $1",
+       "spamprotectiontext": "Filtera protiv neželjenih poruka je blokirao čuvanje ove stranice.\nOvo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj listi.",
+       "spamprotectionmatch": "Sledeći tekst je aktivirao naš filter za neželjene poruke: $1",
        "spambot_username": "Čišćenje nepoželjnih poruka u Medijavikiji",
        "spam_reverting": "Vraćam na poslednju izmenu koja ne sadrži veze do $1",
        "spam_blanking": "Sve izmene sadrže veze do $1. Čistim",
        "hours-ago": "Pre $1 {{PLURAL:$1|sat|sata|sati}}",
        "minutes-ago": "Pre $1 {{PLURAL:$1|minut|minuta}}",
        "seconds-ago": "Pre $1 {{PLURAL:$1|sekunda|sekundi}}",
-       "monday-at": "Ponedeljak u $1",
-       "tuesday-at": "Utorak u $1",
-       "wednesday-at": "Sreda u $1",
-       "thursday-at": "Četvrtak u $1",
-       "friday-at": "Petak u $1",
-       "saturday-at": "Subota u $1",
-       "sunday-at": "Nedelja u $1",
+       "monday-at": "u ponedeljak u $1",
+       "tuesday-at": "u utorak u $1",
+       "wednesday-at": "u sredu u $1",
+       "thursday-at": "u četvrtak u $1",
+       "friday-at": "u petak u $1",
+       "saturday-at": "u subotu u $1",
+       "sunday-at": "u nedelju u $1",
        "yesterday-at": "Juče u $1",
        "bad_image_list": "Format je sledeći:\n\nRazmatraju se samo nabrajanja (redovi koji počinju sa zvezdicom).\nPrva veza u redu mora da bude veza do neispravne datoteke.\nSve daljnje veze u istom redu smatraju se izuzecima.",
        "variantname-zh-hans": "hans",
        "lag-warn-high": "Zbog preopterećenja baze podataka, izmene novije od $1 {{PLURAL:$1|sekunde|sekundi}} neće biti prikazane.",
        "watchlistedit-normal-title": "Uređivanje spiska nadgledanja",
        "watchlistedit-normal-legend": "Uklanjanje naslova sa spiska nadgledanja",
-       "watchlistedit-normal-explain": "Naslovi na vašem spisku nadgledanja su prikazani ispod.\nDa biste uklonili naslov, označite kućicu do njega i kliknite na „{{int:Watchlistedit-normal-submit}}“.\nMožete i da [[Special:EditWatchlist/raw|uredite sirov spisak]].",
+       "watchlistedit-normal-explain": "Naslovi na vašem spisku nadgledanja su prikazani ispod.\nDa biste uklonili naslov, označite kvadratić do njega i kliknite na „{{int:Watchlistedit-normal-submit}}“.\nMožete i da [[Special:EditWatchlist/raw|uredite sirov spisak]].",
        "watchlistedit-normal-submit": "Ukloni naslove",
        "watchlistedit-normal-done": "{{PLURAL:$1|1=Jedna stranica je uklonjena|$1 stranice su uklonjene|$1 stranica je uklonjeno}} s vašeg spiska nadgledanja:",
        "watchlistedit-raw-title": "Izmeni sirov spisak nadgledanja",
        "watchlistedit-raw-done": "Vaš spisak nadgledanja je ažuriran.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1=Dodat je jedan naslov|Dodata su $1 naslova|Dodato je $1 naslova}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 naslov je uklonjen|Uklonjena su $1 naslova|Uklonjeno je $1 naslova}}:",
-       "watchlistedit-clear-title": "Isprazni spisak nadgledanja",
+       "watchlistedit-clear-title": "Spisak nadgledanja ispražnjen",
        "watchlistedit-clear-legend": "Isprazni spisak nadgledanja",
        "watchlistedit-clear-explain": "Svi naslovi će biti uklonjeni iz vašeg spiska nadgledanja.",
        "watchlistedit-clear-titles": "Naslovi:",
        "version-parser-function-hooks": "Kuke",
        "version-hook-name": "Naziv kuke",
        "version-hook-subscribedby": "Prijavljeno od",
-       "version-version": "(izdanje $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[nema imena]",
        "version-svn-revision": "(izm. $2)",
        "version-license": "Medijaviki licenca",
        "version-entrypoints": "Adrese ulazne tačke",
        "version-entrypoints-header-entrypoint": "Ulazna tačka",
        "version-entrypoints-header-url": "Adresa",
+       "version-libraries": "Instalirane biblioteke",
+       "version-libraries-library": "Biblioteka",
+       "version-libraries-version": "Verzija",
        "redirect": "Preusmerenje na datoteku, korisnika, stranicu ili izmenu",
        "redirect-legend": "Preusmeri na datoteku ili stranicu",
        "redirect-submit": "Idi",
        "tags-tag": "Naziv oznake",
        "tags-display-header": "Izgled na spiskovima izmena",
        "tags-description-header": "Opis značenja",
+       "tags-source-header": "Izvor",
        "tags-active-header": "Aktivna?",
        "tags-hitcount-header": "Označene izmene",
+       "tags-actions-header": "Radnje",
        "tags-active-yes": "Da",
        "tags-active-no": "Ne",
+       "tags-source-none": "Van upotrebe",
        "tags-edit": "uredi",
+       "tags-delete": "obriši",
+       "tags-activate": "aktiviraj",
+       "tags-deactivate": "dekativiraj",
        "tags-hitcount": "$1 {{PLURAL:$1|izmena|izmene|izmena}}",
+       "tags-manage-no-permission": "Nemate dozvolu da menjate oznake.",
+       "tags-create-heading": "Nova oznaka",
+       "tags-create-tag-name": "Naziv oznake:",
+       "tags-create-reason": "Razlog:",
+       "tags-create-submit": "Napravi",
+       "tags-create-no-name": "Morate navesti naziv oznake.",
+       "tags-create-already-exists": "Oznaka „$1“ već postoji.",
+       "tags-create-warnings-below": "Pravite novu oznaku, želite li da nastavite?",
+       "tags-delete-title": "Brisanje oznaka",
+       "tags-delete-explanation-initial": "Brišete oznaku „$1“ iz baze podataka.",
+       "tags-delete-reason": "Razlog:",
+       "tags-delete-submit": "Nepovratno obriši ovu oznaku",
+       "tags-delete-not-found": "Oznaka „$1“ ne postoji.",
+       "tags-activate-title": "Aktiviranje oznaka",
+       "tags-activate-question": "Aktivirate oznaku „$1“.",
+       "tags-activate-reason": "Razlog:",
+       "tags-activate-not-allowed": "Nije moguće aktivirati oznaku „$1“.",
+       "tags-activate-not-found": "Oznaka „$1“ ne postoji.",
+       "tags-activate-submit": "Aktiviraj",
+       "tags-deactivate-title": "Deaktiviranje oznaka",
+       "tags-deactivate-question": "Deaktivirate oznaku „$1“.",
+       "tags-deactivate-reason": "Razlog:",
+       "tags-deactivate-not-allowed": "Nije moguće deaktivirati oznaku „$1“.",
+       "tags-deactivate-submit": "Dekativiraj",
        "comparepages": "Upoređivanje stranica",
        "compare-page1": "Stranica 1",
        "compare-page2": "Stranica 2",
        "compare-revision-not-exists": "Navedena izmena ne postoji.",
        "dberr-problems": "Došlo je do tehničkih problema.",
        "dberr-again": "Sačekajte nekoliko minuta i ponovo učitajte stranicu.",
-       "dberr-info": "(ne mogu da se povežem sa serverom baze podataka: $1)",
-       "dberr-info-hidden": "(ne mogu da se povežem sa serverom baze podataka)",
+       "dberr-info": "(Ne mogu pristupiti bazi podataka: $1)",
+       "dberr-info-hidden": "(Ne mogu pristupiti bazi podataka)",
        "dberr-usegoogle": "U međuvremenu, pokušajte da pretražite pomoću Gugla.",
        "dberr-outofdate": "Imajte na umu da njihovi primerci našeg sadržaja mogu biti zastareli.",
        "dberr-cachederror": "Ovo je privremeno memorisan primerak strane koji možda nije ažuran.",
        "revdelete-uname-unhid": "korisničko ime je otkriveno",
        "revdelete-restricted": "primenjena ograničenja za administratore",
        "revdelete-unrestricted": "uklonjena ograničenja za administratore",
+       "logentry-block-block": "$1 je {{GENDER:$2|blokirao|blokirala}} {{GENDER:$4|$3}} u trajanju od $5 $6",
+       "logentry-block-unblock": "$1 je {{GENDER:$2|deblokirao|deblokirala}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 je {{GENDER:$2|promenio|promenila}} podešavanja za blokiranje {{GENDER:$4|korisnika|korisnice}} {{GENDER:$4|$3}} u trajanju od $5 $6",
+       "logentry-suppress-block": "$1 je {{GENDER:$2|blokirao|blokirala}} {{GENDER:$4|$3}} u trajanju od $5 $6",
+       "logentry-suppress-reblock": "$1 je {{GENDER:$2|promenio|promenila}} podešavanja za blokiranje {{GENDER:$4|korisnika|korisnice}} {{GENDER:$4|$3}} u trajanju od $5 $6",
+       "logentry-import-upload": "$1 je {{GENDER:$2|uvezao|uvezla}} $3 otpremanjem datoteke",
+       "logentry-import-interwiki": "$1 je {{GENDER:$2|uvezao|uvezla}} $3 s drugog vikija",
        "logentry-merge-merge": "$1 je {{GENDER:$2|spojio|spojila}} $3 u $4 (sve do izmene $5)",
        "logentry-move-move": "$1 je {{GENDER:$2|premestio|premestila}} stranicu $3 na $4",
        "logentry-move-move-noredirect": "$1 je {{GENDER:$2|premestio|premestila}} stranicu $3 na $4 bez ostavljanja preusmerenja",
        "logentry-newusers-newusers": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog",
        "logentry-newusers-create": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog",
        "logentry-newusers-create2": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog $3",
-       "logentry-newusers-byemail": "$1 je {{GENDER:$2|napravio|napravila}} korisnički nalog $3 i lozinka je poslata na e-poštu",
+       "logentry-newusers-byemail": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog $3 i lozinka je poslata na e-poštu",
        "logentry-newusers-autocreate": "Korisnički nalog $1 je automatski {{GENDER:$2|otvoren}}",
        "logentry-rights-rights": "$1 je {{GENDER:$2|promenio|promenila}} članstvo grupe za $3 iz $4 u $5",
        "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promenio|promenila}} čalnstvo grupe za $3",
        "logentry-upload-upload": "$1 je {{GENDER:$2|poslao|poslala}} $3",
        "logentry-upload-overwrite": "$1 je {{GENDER:$2|poslao|poslala}} novu verziju $3",
        "logentry-upload-revert": "$1 je {{GENDER:$2|poslao|poslala}} $3",
+       "log-name-managetags": "Dnevnik oznaka",
+       "log-description-managetags": "Ovaj dnevnik sadrži spisak izmena u vezi [[Special:Tags|oznaka]]. Dnevnik sadrži samo radnje izvršene od strane administratora; unosi za oznake napravljene ili obrisane od strane viki softvera se ne nalaze u ovom dnevniku.",
+       "logentry-managetags-create": "$1 je {{GENDER:$2|napravio|napravila}} oznaku „$4“",
+       "logentry-managetags-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} oznaku „$4“ (uklonjena je iz $5 {{PLURAL:$5|izmene ili dnevnika|izmena i/ili dnevnika}})",
+       "logentry-managetags-activate": "$1 je {{GENDER:$2|aktivirao|aktivirala}} oznaku „$4“ za upotrebu od strane korisnika i botova",
+       "logentry-managetags-deactivate": "$1 je {{GENDER:$2|deaktivirao|deaktivirala}} oznaku „$4“ za upotrebu od strane korisnika i botova",
        "rightsnone": "(nema)",
        "revdelete-summary": "opis izmene",
+       "feedback-adding": "Dodajem povratnu informaciju na stranicu…",
+       "feedback-back": "Nazad",
+       "feedback-bugcheck": "Odlično! Proverite da li je greška [$1 poznata od pre].",
+       "feedback-bugnew": "Provereno. Prijavi novu grešku",
        "feedback-bugornote": "Ako ste spremni da detaljno opišete tehnički problem, onda [$1 prijavite grešku].\nU suprotnom, poslužite se jednostavnim obrascem ispod. Vaš komentar će stajati na stranici „[$3 $2]“, zajedno s korisničkim imenom i pregledačem koji koristite.",
-       "feedback-subject": "Naslov:",
-       "feedback-message": "Poruka:",
        "feedback-cancel": "Otkaži",
-       "feedback-submit": "Pošalji povratnu informaciju",
-       "feedback-adding": "Dodajem povratnu informaciju na stranicu…",
+       "feedback-close": "Urađeno",
+       "feedback-error-title": "Greška",
        "feedback-error1": "Greška: neprepoznat rezultat od API-ja",
        "feedback-error2": "Greška: uređivanje nije uspelo",
        "feedback-error3": "Greška: nema odgovora od API-ja",
+       "feedback-message": "Poruka:",
+       "feedback-subject": "Naslov:",
+       "feedback-submit": "Pošalji",
        "feedback-thanks": "Hvala! Vaša povratna informacija je postavljena na stranicu „[$2 $1]“.",
-       "feedback-close": "Urađeno",
-       "feedback-bugcheck": "Odlično! Proverite da li je greška [$1 poznata od pre].",
-       "feedback-bugnew": "Provereno. Prijavi novu grešku",
+       "feedback-thanks-title": "Hvala vam!",
        "searchsuggest-search": "Pretraga",
        "searchsuggest-containing": "sadrži...",
        "api-error-badaccess-groups": "Nije vam dozvoljeno da otpremate datoteke na ovaj viki.",
        "pagelang-select-lang": "Izaberi jezik",
        "right-pagelang": "menjanje jezika stranice",
        "action-pagelang": "promenu jezika stranice",
+       "logentry-pagelang-pagelang": "$1 je {{GENDER:$2|promenio|promenila}} jezik stranice $3 iz $4 u $5.",
        "mediastatistics": "Statistika datoteka",
        "mediastatistics-summary": "Statistike o tipovima poslatih datoteka. Ovde su uračunate samo najnovije verzije datoteka. Stare ili obrisane verzije nisu uračunate.",
        "mediastatistics-table-mimetype": "MIME tip",
        "mediastatistics-header-text": "Tekstualne",
        "mediastatistics-header-executable": "Izvršne",
        "mediastatistics-header-archive": "Kompresovane",
-       "json-error-syntax": "Greška u sintaksi"
+       "json-error-syntax": "Greška u sintaksi",
+       "headline-anchor-title": "Veza do ovog odeljka",
+       "special-characters-group-latin": "latinica",
+       "special-characters-group-latinextended": "proširena latinica",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simboli",
+       "special-characters-group-greek": "grčki",
+       "special-characters-group-cyrillic": "ćirilica",
+       "special-characters-group-arabic": "arapski",
+       "special-characters-group-arabicextended": "prošireni arapski",
+       "special-characters-group-persian": "persijski",
+       "special-characters-group-hebrew": "jevrejsko",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "tamilski",
+       "special-characters-group-telugu": "telugu",
+       "special-characters-group-sinhala": "sinhalski",
+       "special-characters-group-gujarati": "Gudžarati",
+       "special-characters-group-thai": "tajlandski",
+       "special-characters-group-lao": "laoski",
+       "special-characters-group-khmer": "kmerski"
 }
index 5563bfd..2e483ca 100644 (file)
        "delete-toobig": "Disse Siede häd mäd moor as $1 {{PLURAL:$1|Version|Versionen}} ne gjucht loange Versionsgeskichte. Dät Läskjen fon sukke Sieden wuud ienskränkt, uum ne toufällige Uurlastenge fon {{SITENAME}} tou ferhinnerjen.",
        "delete-warning-toobig": "Disse Siede häd mäd moor as $1 {{PLURAL:$1|Version|Versione}} ne gjucht loange Versionsgeskichte. Dät Läskjen kon tou Stöörengen in {{SITENAME}} fiere.",
        "rollback": "Touräächsätten fon do Annerengen",
-       "rollback_short": "Touräächsätte",
        "rollbacklink": "touräächsätte",
        "rollbackfailed": "Touräächsätten misglukked",
        "cantrollback": "Disse Annerenge kon nit touräächstoald wäide; deer et naan fröieren Autor rakt.",
        "watchlisttools-view": "Beooboachtengslieste: Annerengen",
        "watchlisttools-edit": "normoal beoarbaidje",
        "watchlisttools-raw": "Liestenformoat beoarbaidje (Import/Export)",
-       "unknown_extension_tag": "Uunbekoanden Extension-Tag „$1“",
        "duplicate-defaultsort": "Paas ap: Die Sortierengskoai „$2“ uurskrift dän toufoarne ferwoanden Koai „$1“.",
        "version": "Version",
        "version-extensions": "Installierde Ärwiederengen",
        "version-parser-function-hooks": "Parser-Funktione",
        "version-hook-name": "Snitsteedennoome",
        "version-hook-subscribedby": "Aproup fon",
-       "version-version": "(Version $1)",
+       "version-version": "($1)",
        "version-license": "Lizenz",
        "version-poweredby-credits": "Disse Website nutset '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
        "version-poweredby-others": "uur",
        "specialpages-group-wiki": "Systemdoaten un Reewen",
        "specialpages-group-redirects": "Fäärelaitjende Spezioalsieden",
        "specialpages-group-spam": "Spam-Reewen",
+       "specialpages-group-developer": "Äntwiklerreewen",
        "blankpage": "Loose Siede",
        "intentionallyblankpage": "Disse Siede is apsichtelk sunner Inhoold. Ju wäd foar Benchmarks ferwoand.",
        "external_image_whitelist": "#Disse Riege nit ferannerje<pre>\n#Unnerstoundend konnen Fragmente fon reguläre Uutdrukke (die Deel twiske do //) ienroat wäide.\n#Disse wäide mäd do URLs fon Bielden uut externe Wällen ferglieked\n#N positiven Fergliek fiert tou Anwiesenge fon ju Bielde, uurs wäd ju Bielde bloot as Link anwiesd\n#Riegen, do der mäd n # ounfange, wäide as Kommentoar behonneld\n#Der wäd nit twiske Groot- un Littikskrieuwenge unnerskat\n\n#Fragmente fon reguläre Uutdrukke ätter disse Riege iendreege. Disse Riege nit ferannerje</pre>",
index 6253392..01819be 100644 (file)
        "svg-long-desc": "Koropak SVG, nominalna $1 × $2 piksel, ukuranana $3",
        "show-big-image": "Berkas asli",
        "show-big-image-preview": "Ukuran ieu pramidang: $1.",
-       "show-big-image-other": "Résolusi lianna: $1.",
+       "show-big-image-other": "{{PLURAL:$2|Resolusi}} lianna: $1.",
        "show-big-image-size": "$1 × $2 pixel",
        "newimages": "Galeri gambar anyar",
        "imagelisttext": "Di handap ieu daptar '''$1''' {{PLURAL:$1|gambar|gambar}} nu disusun $2.",
        "version-parser-extensiontags": "Tag éksténsi parser",
        "version-hook-name": "Ngaran kait",
        "version-hook-subscribedby": "Didaptarkeun ku",
-       "version-version": "(Vérsi $1)",
+       "version-version": "($1)",
        "version-license": "Lisénsi MediaWiki",
        "version-poweredby-translators": "darmamurcaya translatewiki.net",
        "version-software": "Sopwér nu geus diinstal",
        "revdelete-unrestricted": "Watesan akses kuncén dihapuskeun",
        "rightsnone": "(euweuh)",
        "revdelete-summary": "ringkesan ngédit",
-       "feedback-subject": "Ngeunaan:",
-       "feedback-message": "Surat:",
        "feedback-cancel": "Bolay",
+       "feedback-message": "Surat:",
+       "feedback-subject": "Ngeunaan:",
        "searchsuggest-search": "Sungsi",
        "searchsuggest-containing": "ngandung...",
        "api-error-file-too-large": "Berkas nu dikirim gedé teuing.",
index f4550bf..c74e637 100644 (file)
                        "Platinawolf",
                        "Albinomamba",
                        "Stens51",
-                       "Boom"
+                       "Boom",
+                       "Marfuas",
+                       "Macofe",
+                       "Aaoo"
                ]
        },
        "tog-underline": "Stryk under länkar:",
        "disclaimers": "Förbehåll",
        "disclaimerpage": "Project:Allmänt förbehåll",
        "edithelp": "Redigeringshjälp",
+       "helppage-top-gethelp": "Hjälp",
        "mainpage": "Huvudsida",
        "mainpage-description": "Huvudsida",
        "policy-url": "Project:Riktlinjer",
        "readonly_lag": "Databasen har automatiskt skrivskyddats medan slavdatabasservrarna synkroniseras med huvudservern.",
        "internalerror": "Internt fel",
        "internalerror_info": "Internt fel: $1",
+       "internalerror-fatal-exception": "Allvarligt undantag av typen \"$1\"",
        "filecopyerror": "Kunde inte kopiera filen \"$1\" till \"$2\".",
        "filerenameerror": "Kunde inte byta namn på filen \"$1\" till \"$2\".",
        "filedeleteerror": "Kunde inte radera filen \"$1\".",
        "wrongpassword": "Lösenordet du angav är felaktigt. Försök igen.",
        "wrongpasswordempty": "Lösenordet som angavs var blankt. Var god försök igen.",
        "passwordtooshort": "Lösenord måste innehålla minst {{PLURAL:$1|$1 tecken}}.",
+       "passwordtoolong": "Lösenord kan inte vara längre än {{PLURAL:$1|1 tecken|$1 tecken}}.",
        "password-name-match": "Ditt lösenord måste vara olikt ditt användarnamn.",
        "password-login-forbidden": "Användningen av dessa användarnamn och lösenord har förbjudits.",
        "mailmypassword": "Återställ lösenord",
        "missingcommentheader": "<strong>Påminnelse:</strong> Du har inte skrivit något ämne/rubrik för den här kommentaren.\nOm du trycker på \"{{int:savearticle}}\" igen kommer din redigering sparas utan rubrik.",
        "summary-preview": "Förhandsgranskning av sammanfattning:",
        "subject-preview": "Rubrikförhandsgranskning:",
+       "previewerrortext": "Ett fel uppstod när dina ändringar skulle förhandsgranskas.",
        "blockedtitle": "Användaren är blockerad",
        "blockedtext": "'''Din IP-adress eller ditt användarnamn är blockerat.'''\n\nBlockeringen utfördes av $1 med motiveringen: ''$2''.\n\n* Blockeringen startade: $8\n* Blockeringen gäller till: $6.\n* Blockeringen var avsedd för: $7.\n\nDu kan kontakta $1 eller någon annan av [[{{MediaWiki:Grouppage-sysop}}|administratörerna]] för att diskutera blockeringen.\nOm du är inloggad och har uppgivit en e-postadress i dina [[Special:Preferences|inställningar]] så kan du använda funktionen 'Skicka e-post till den här användaren', såvida du inte blivit blockerad från funktionen.\n\nDin IP-adress är $3 och blockerings-ID är #$5.\nVänligen ange informationen ovan i alla förfrågningar som du gör i ärendet.",
        "autoblockedtext": "Din IP-adress har blockerats automatiskt eftersom den har använts av en annan användare som blockerats av $1.\nMotiveringen av blockeringen var:\n\n:''$2''\n\n* Blockeringen startade: $8\n* Blockeringen gäller till: $6\n* Blockeringen är avsedd för: $7\n\nDu kan kontakta $1 eller någon annan [[{{MediaWiki:Grouppage-sysop}}|administratör]] för att diskutera blockeringen.\n\nObservera att du inte kan använda dig av funktionen \"skicka e-post till användare\" om du inte har registrerat en giltig e-postadress i [[Special:Preferences|dina inställningar]] eller om du har blivit blockerad från att skicka e-post.\n\nDin nuvarande IP-adress är $3, och blockerings-ID är #$5.\nVänligen ange informationen ovan i alla förfrågningar som du gör i ärendet.",
        "diff-multi-sameuser": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av samma användare visas inte)",
        "diff-multi-otherusers": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av {{PLURAL:$2|en annan användare|$2 användare}} visas inte)",
        "diff-multi-manyusers": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av mer än $2 användare visas inte)",
-       "difference-missing-revision": "{{PLURAL:$2|En version|$2 versioner}} av denna skillnad ($1) kunde inte hittas.\n\nDetta orsakas vanligtvis av att följa en utgången difflänk till en sida som har raderats.\nDetaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
+       "difference-missing-revision": "Det gick inte att hitta {{PLURAL:$2|en version|$2 versioner}} av den här differensen ($1).\n\nDetta beror oftast på att du har försökt följa en utgången difflänk till en sida som har raderats.\nMer detaljerad information finns i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
        "searchresults": "Sökresultat",
        "searchresults-title": "Sökresultat för \"$1\"",
        "titlematches": "Träffar i sidtitlar",
        "notextmatches": "Inga artikeltexter matchar sökningen",
        "prevn": "föregående {{PLURAL:$1|$1}}",
        "nextn": "nästa {{PLURAL:$1|$1}}",
+       "prev-page": "föregående sida",
+       "next-page": "nästa sida",
        "prevn-title": "Föregående $1 {{PLURAL:$1|resultat|resultat}}",
        "nextn-title": "Nästa $1 {{PLURAL:$1|resultat|resultat}}",
        "shown-title": "Visa $1 {{PLURAL:$1|resultat|resultat}} per sida",
        "prefs-help-signature": "Kommentarer på diskussionssidor ska signeras med \"<nowiki>~~~~</nowiki>\", vilket konverteras till din signatur och tidpunkt.",
        "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 bli adresserad?",
-       "gender-unknown": "Jag föredrar att inte specificera",
+       "yourgender": "Hur vill du att andra refererar till dig?",
+       "gender-unknown": "Jag föredrar att inte uppge det",
        "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.",
        "prefs-displayrc": "Visningsalternativ",
        "prefs-displaywatchlist": "Visningalternativ",
        "prefs-tokenwatchlist": "Nyckel",
-       "prefs-diffs": "Skillnader",
+       "prefs-diffs": "Versiondifferenser",
        "prefs-help-prefershttps": "Ändringar av denna inställning börjar gälla nästa gång du loggar in",
        "prefswarning-warning": "Du har gjort ändringar i dina inställningarna som inte har sparats ännu.\nOm du lämnar denna sida utan att klicka på \"$1\" kommer dina inställningar inte att uppdateras.",
        "prefs-tabs-navigation-hint": "Tips: Du kan använda vänster och höger piltangenterna för att navigera mellan flikarna i listan flikar.",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|medlem|medlemmar}}",
        "nrevisions": "$1 {{PLURAL:$1|version|versioner}}",
        "nviews": "$1 {{PLURAL:$1|visning|visningar}}",
-       "nimagelinks": "Använd på $1 {{PLURAL:$1|sida|sidor}}",
-       "ntransclusions": "använd på $1 {{PLURAL:$1|sida|sidor}}",
+       "nimagelinks": "Används på $1 {{PLURAL:$1|sida|sidor}}",
+       "ntransclusions": "används på $1 {{PLURAL:$1|sida|sidor}}",
        "specialpage-empty": "Den här sidan är tom.",
        "lonelypages": "Föräldralösa sidor",
        "lonelypagestext": "Följande sidor länkas inte till eller inkluderas på någon annan sida på {{SITENAME}}.",
        "unusedimages": "Oanvända filer",
        "wantedcategories": "Önskade kategorier",
        "wantedpages": "Önskade sidor",
+       "wantedpages-summary": "Lista över obefintliga sidor som är mest länkade, exklusive sidor som endast är länkade med omdirigeringar. För en lista över obefintliga sidor som endast är länkade med omdirigeringar, se [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Ogiltig titel bland resultaten: $1",
        "wantedfiles": "Önskade filer",
        "wantedfiletext-cat": "Följande filer används men finns inte. Filer från utländska databaser kan vara listade trots att de inte finns. Sådana falska realiteter kommer att <del>tas bort</del>. Sidor som bäddar in filer som inte finns listas upp på [[:$1]].",
        "thumbnail_image-missing": "Fil verkar saknas: $1",
        "thumbnail_image-failure-limit": "Det har nyligen förekommit alltför många misslyckade ($1 eller fler) försök skapa den här miniatyrbilden. Försök igen senare.",
        "import": "Importera sidor",
-       "importinterwiki": "Transwiki-import",
-       "import-interwiki-text": "Välj en wiki och sidtitel att importera.\nVersionshistorik (datum och redaktörer) kommer att bevaras.\nAll överföring mellan wikier (transwiki) listas i  [[Special:Log/import|importloggen]].",
+       "importinterwiki": "Importera från en annan wiki",
+       "import-interwiki-text": "Välj en wiki och sidtitel att importera.\nVersionshistorikens datum och redigerare kommer att bevaras.\nAll importering från andra wikis listas i [[Special:Log/import|importloggen]].",
        "import-interwiki-sourcewiki": "Källwiki:",
        "import-interwiki-sourcepage": "Källsida:",
        "import-interwiki-history": "Kopiera hela versionshistoriken för denna sida",
        "importcantopen": "Misslyckades med att öppna importfilen.",
        "importbadinterwiki": "Felaktig interwiki-länk",
        "importsuccess": "Importen är genomförd!",
-       "importnosources": "Inga källor för transwiki-import har angivits, och direkt uppladdning av historik har stängts av.",
+       "importnosources": "Inga källor från vilka import ska göras har angivits och direkt uppladdning av historik har stängts av.",
        "importnofile": "Ingen fil att importera har laddats upp.",
        "importuploaderrorsize": "Uppladdningen av importfilen misslyckades. Filen är större än vad som är tillåtet att ladda upp.",
        "importuploaderrorpartial": "Uppladdningen av importfilen misslyckades. Bara en del av filen laddades upp.",
        "import-rootpage-nosubpage": "Namnrymden \"$1\" till grundsidan tillåter inte undersidor.",
        "importlogpage": "Importlogg",
        "importlogpagetext": "Administrativa sidimporter med versionshistorik från andra wikier.",
-       "import-logentry-upload": "importerade [[$1]] genom filuppladdning",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versioner}} importerades",
-       "import-logentry-interwiki": "överförde $1 mellan wikier",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versioner}} importerades från $2",
        "javascripttest": "JavaScript-testning",
        "javascripttest-pagetext-noframework": "Denna sida är reserverat för att köra JavaScript-tester.",
        "version-parser-function-hooks": "Parserfunktioner",
        "version-hook-name": "Namn på hook",
        "version-hook-subscribedby": "Används av",
-       "version-version": "(Version $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[inget namn]",
        "version-license": "MediaWiki-licens",
        "version-ext-license": "Licens",
        "tags-actions-header": "Handlingar",
        "tags-active-yes": "Ja",
        "tags-active-no": "Nej",
-       "tags-source-extension": "Definieras av en förlängning",
+       "tags-source-extension": "Definieras av ett tillägg",
+       "tags-source-manual": "Används manuellt av användare och robotar",
        "tags-source-none": "Används inte längre",
        "tags-edit": "redigera",
        "tags-delete": "radera",
        "tags-create-warnings-below": "Vill du fortsätta att skapa taggen?",
        "tags-delete-title": "Radera tagg",
        "tags-delete-explanation-initial": "Du är på väg att ta bort taggen \"$1\" från databasen.",
+       "tags-delete-explanation-in-use": "Den kommer att tas bort från {{PLURAL:$2|$2 sidversioner eller loggposter|alla $2 sidversioner och/eller loggposter}} som den för närvarande används på.",
        "tags-delete-explanation-warning": "Denna åtgärd är <strong>oåterkallelig</strong> och <strong>kan inte ångras</strong>, inte ens av databasadministratörer. Var säker på att detta är den tagg du vill radera.",
        "tags-delete-explanation-active": "<strong>Taggen\" $1 \" är fortfarande aktiv, och kommer att fortsätta att appliceras i framtiden.</strong> För att hindra detta, gå till den eller de platser där taggen är inställd att användas, och inaktivera den där.",
        "tags-delete-reason": "Anledning:",
        "revdelete-uname-unhid": "användarnamn synligt",
        "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-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",
+       "logentry-import-upload": "$1 {{GENDER:$2|importerade}} $3 genom filuppladdning",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|importerade}} $3 från en annan wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|slog ihop}} $3 i $4 (versioner t.o.m. $5)",
        "logentry-move-move": "$1 {{GENDER:$2|flyttade}} sidan $3 till $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|flyttade}} sidan $3 till $4 utan att lämna en omdirigering",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|laddade upp}} en ny version av $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|laddade upp}} $3",
        "log-name-managetags": "Tagghanterings logg",
+       "log-description-managetags": "Denna sida innehåller administrativa [[Special:Tags|märke]]srelaterade uppgifter. Loggen innehåller bara åtgärder som utförts manuellt av en administratör; märken kan skapas eller raderas av wikins mjukvara utan att en post registreras i loggen.",
        "logentry-managetags-create": "$1 {{GENDER:$2|skapade}} taggen \"$4\"",
        "logentry-managetags-delete": "$1 {{GENDER:$2|raderade}} taggen \"$4\" (borttagen från $5 {{PLURAL:$5|version eller loggpost|versioner och/eller loggposter}})",
        "logentry-managetags-activate": "$1 {{GENDER:$2|aktiverade}} taggen \"$4\" för användning av användare och botar.",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|inaktiverade}} taggen \"$4\" för användning av användare och botar.",
        "rightsnone": "(inga)",
        "revdelete-summary": "sammanfattning",
+       "feedback-adding": "Ge feedback till sida...",
+       "feedback-back": "Tillbaka",
+       "feedback-bugcheck": "Jättebra! Bara kontrollera att det inte är en av de [$1 kända buggarna].",
+       "feedback-bugnew": "Jag kontrollerade. Rapportera ett nytt fel",
        "feedback-bugornote": "Om du har möjlighet att ge en detaljerad teknisk beskrivning av felet kan du lämna en [$1 buggrapport]. \nAnvänd annars formuläret nedan. Din kommentar kommer att läggas till på sidan \"[$3 $2]\", tillsammans med ditt användarnamn.",
-       "feedback-subject": "Ämne:",
-       "feedback-message": "Meddelande:",
        "feedback-cancel": "Avbryt",
-       "feedback-submit": "Skicka in feedback",
-       "feedback-adding": "Ge feedback till sida...",
+       "feedback-close": "Färdig",
+       "feedback-external-bug-report-button": "Registrera en teknisk uppgift",
+       "feedback-dialog-title": "Skicka återkoppling",
+       "feedback-dialog-intro": "Du kan använda det enkla formuläret nedan för att skicka in din återkoppling. Din kommentar kommer att läggas till på sidan \"$1\" tillsammans med ditt användarnamn.",
+       "feedback-error-title": "Fel",
        "feedback-error1": "Fel: Okänt resultat från API",
        "feedback-error2": "Fel: Redigeringen misslyckades",
        "feedback-error3": "Fel: Inget svar från API",
+       "feedback-message": "Meddelande:",
+       "feedback-subject": "Ämne:",
+       "feedback-submit": "Skicka",
+       "feedback-terms": "Jag förstår att min användaragentsinformation innehåller information om min webbläsare och operativsystemets version samt kommer att delas offentligt tillsammans med min återkoppling.",
+       "feedback-termsofuse": "Jag samtycker med att ge återkoppling enligt användarvillkoren.",
        "feedback-thanks": "Tack! Din feedback har skickats till sidan \"[$2 $1]\".",
-       "feedback-close": "Färdig",
-       "feedback-bugcheck": "Jättebra! Bara kontrollera att det inte är en av de [$1 kända buggarna].",
-       "feedback-bugnew": "Jag kontrollerade. Rapportera ett nytt fel",
+       "feedback-thanks-title": "Tack!",
+       "feedback-useragent": "Användaragent:",
        "searchsuggest-search": "Sök",
        "searchsuggest-containing": "innehåller...",
        "api-error-badaccess-groups": "Du får inte ladda upp filer till denna wiki.",
        "json-error-utf8": "Felaktiga UTF-8-tecken, möjligen felkodade",
        "json-error-recursion": "En eller flera rekursiva referenser i värde som ska kodas",
        "json-error-inf-or-nan": "En eller flera NAN- eller INF-värden i värdet som ska kodas",
-       "json-error-unsupported-type": "Ett värde av en typ som inte kan kodas angavs"
+       "json-error-unsupported-type": "Ett värde av en typ som inte kan kodas angavs",
+       "headline-anchor-title": "Länka till detta avsnitt",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Utökad latin",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Symboler",
+       "special-characters-group-greek": "Grekiska",
+       "special-characters-group-cyrillic": "Kyrilliskt",
+       "special-characters-group-arabic": "Arabiska",
+       "special-characters-group-arabicextended": "Arabiska utökade",
+       "special-characters-group-persian": "Persiska",
+       "special-characters-group-hebrew": "Hebreiska",
+       "special-characters-group-bangla": "Bengali",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalesiska",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devenagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Laotisk",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "tankstreck",
+       "special-characters-title-emdash": "långt tankstreck",
+       "special-characters-title-minus": "minustecken"
 }
index be5d21c..878be69 100644 (file)
@@ -14,7 +14,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Baba Tabita",
-                       "Rich Farmbrough"
+                       "Rich Farmbrough",
+                       "Kipala"
                ]
        },
        "tog-underline": "Wekea mstari viungo:",
        "delete-toobig": "Ukurasa huu una historia ya kuhariri ndefu sana, yenye {{PLURAL:$1|badiliko|mabadiliko}} zaidi na $1.\nUfutaji wa kurasa hizi moja kwa moja umezuluiwa ili {{SITENAME}} isivurugwe kwa bahati mbaya.",
        "delete-warning-toobig": "Ukurasa huu unao mapitio mengi, zaida ya {{PLURAL:$1|pitio|mapitio}} $1.\nUkiufuta labda itavuruga uendeshaji wa hifadhidata ya {{SITENAME}};\nendelea kwa uangalifu.",
        "rollback": "Rejesha masahihisho",
-       "rollback_short": "Rejesha",
        "rollbacklink": "rejesha",
        "rollbackfailed": "Haikufaulu kurejesha",
        "cantrollback": "Haiwezekana kujesha sahihisho;\nukurasa huu una mhariri mmoja tu.",
        "version-specialpages": "Kurasa maalum",
        "version-variables": "Vibadili",
        "version-other": "Zingine",
-       "version-version": "(Toleo $1)",
+       "version-version": "($1)",
        "version-license": "Ruhusa",
        "version-ext-colheader-description": "Ufafanuzi",
        "version-poweredby-credits": "Wiki hii inaendeshwa na bidhaa pepe ya '''[https://www.mediawiki.org/ MediaWiki]''', hakimiliki © 2001-$1 $2.",
        "logentry-newusers-autocreate": "Akaunti ya mtumiaji $1 ilianzishwa na mashine",
        "rightsnone": "(hana)",
        "revdelete-summary": "muhtasari wa kuhariri",
-       "feedback-subject": "Mada:",
-       "feedback-message": "Ujumbe:",
-       "feedback-cancel": "Batilisha",
-       "feedback-submit": "Tuma maoni yako",
        "feedback-adding": "Maoni yako yanaongezwa katika ukurasa...",
+       "feedback-back": "Rudi",
+       "feedback-cancel": "Batilisha",
+       "feedback-close": "Tayari",
+       "feedback-error-title": "Kosa",
        "feedback-error1": "Hitilafu: Matokeo ya API hayafahamiki",
        "feedback-error2": "Hitilafu: Hiririo halikufaulu",
        "feedback-error3": "Hitilafu: API ya wiki haiitiki",
+       "feedback-message": "Ujumbe:",
+       "feedback-subject": "Mada:",
+       "feedback-submit": "Wasilisha",
        "feedback-thanks": "Ahsante! Maoni yako yamewekwa kwenye ukurasa wa \"[$2 $1]\".",
-       "feedback-close": "Tayari",
+       "feedback-thanks-title": "Asante!",
        "searchsuggest-search": "Kutafuta",
        "searchsuggest-containing": "ya maneno...",
        "api-error-empty-file": "Faili ulilowasilisha ni tupu.",
index 7edb633..16a5a19 100644 (file)
        "permalink": "Link do tyj wersyje zajty",
        "print": "Drukuj",
        "view": "Podglůnd",
+       "view-foreign": "Uobejrzij we {{grammar:MS.lp|$1}}",
        "edit": "Sprowjej",
        "create": "Stwůrz",
+       "create-local": "Wkludź lokalny uopis",
        "editthispage": "Sprowjej ta zajta",
        "create-this-page": "Stwůrz ta zajta",
        "delete": "Wyćep",
        "otherlanguages": "We inkszych godkach",
        "redirectedfrom": "(Punkńyńto ze $1)",
        "redirectpagesub": "Zajta przekerowujůnco",
+       "redirectto": "Przekerowańy do:",
        "lastmodifiedat": "Ta zajta bůła uostatńo sprowjano $2, $1.",
        "viewcount": "W ta zajta filowano {{PLURAL:$1|tylko roz|$1 rozůw}}.",
        "protectedpage": "Zajta zawarto",
        "loginlanguagelabel": "Godka: $1",
        "suspicious-userlogout": "Polecyńe wylogowańo uostoło uodćepńynte skiż tygo co wyglůnda, aże uostoło posłane bez uszkodzůna przeglůndarka abo buforujůncy serwer proxy.",
        "createacct-another-realname-tip": "Wszkryflańy twojigo mjana a nazwiska ńy je końyczne.\nKej bydźesz chćoł je podoć, bydům użyte, coby dokůmyntowoć Twoje autorstwo.",
+       "pt-login": "Zaloguj śe",
+       "pt-createaccount": "Twůrz nowe kůnto",
        "php-mail-error-unknown": "Ńyznany feler we funkcyji mail()",
        "user-mail-no-addy": "Průba posłańo e‐brifa bez adresu uodbjorcy",
        "user-mail-no-body": "Bůła průba posłańo e-brifa uo blank abo krůtkim tekśće.",
        "preview": "Uobźyrańy",
        "showpreview": "Uobźyrej",
        "showdiff": "Pozdrzyj na půmjyńańy",
-       "anoneditwarning": "Ńy jeżeś terozki zalogowany. We gyszichće sprowjyń tyj zajty bydźe naszkryflůny twůj ausdruk IP.",
+       "anoneditwarning": "<strong>Dej pozůr:</strong> Ńy jeżeś zalogůwany. Twůj IP ausdruk bydźe bez wszyjskich widoczny eli zrobisz egal jako půmjana. Eli <strong>[$1 zalogůjesz śe]</strong> abo <strong>[$2 stworzisz kůnto]</strong>, Twoje půmjany bydům przipisane do kůnta, wroz ze inkszymi korzyśćůma.",
        "anonpreviewwarning": "Ńy jeżeś zalogowany. Twój IP ausdruk uostańy spamjyntany, eli ty bydźesz sprowjać zajte.",
        "missingsummary": "'''Pozůr:''' Ńy wprowadźůł żeś uopisu pomjyńań. Kej go ńy chcesz wprowadzać, naćiś knefel Spamjyntej jeszcze roz.",
        "missingcommenttext": "Wćepej kůmyntorz půńiżyj.",
        "shown-title": "Ukoż $1 {{PLURAL:$1|wynik|wyniki|wynikůw}} lo zajta",
        "viewprevnext": "Uobźyrej ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Ńy ma zajty uo mjańy \"[[:$1]]\" na tyj wiki'''",
-       "searchmenu-new": "'''Stwůrz zajta „[[:$1|$1]]” na tyj wiki!'''",
+       "searchmenu-new": "<strong>Stwůrz zajta „[[:$1]]” na tyj wiki!</strong> {{PLURAL:$2|0=|Uobejrzij tyż zajta ze wyńikůma sznupańo.|Uobejrzij tyż wyńiki sznupańo.}}",
        "searchprofile-articles": "Zajty",
        "searchprofile-images": "Multimedyja",
        "searchprofile-everything": "Wszyjsko",
        "right-siteadmin": "Zawjerańy i uodmykańy bazy danych",
        "newuserlogpage": "Nowe użytkowniki",
        "newuserlogpagetext": "To je rejer uostatńo utworzůnych kůnt użytkowńikůw",
-       "rightslog": "Uprawńyńa",
+       "rightslog": "Uprawńyńo",
        "rightslogtext": "Rejer půmjyńań uprawńyń užytkowńikůw.",
        "action-read": "přeglůndańo tyj zajty",
        "action-edit": "sprowjańo tyj zajty",
-       "action-createpage": "twořyńo zajtůw",
-       "action-createtalk": "twořyńo zajtůw godki",
+       "action-createpage": "tworzyńo zajtůw",
+       "action-createtalk": "tworzyńo zajtůw godki",
        "action-createaccount": "utwořyńo tygo kůnta užytkowńika",
        "action-minoredit": "do uoznačyńo tygo sprowjyńo kej drobne půmjyńańe",
        "action-move": "přećepańe tyj zajty",
        "action-userrights-interwiki": "sprowjańo uprowńyń sprowjořy na inkšych witrynach wiki",
        "action-siteadmin": "zawarćo a uodymkńyńćo bazy danych",
        "nchanges": "$1 {{PLURAL:$1|pomjyńańe|pomjyńańa|pomjyńań}}",
+       "enhancedrc-history": "gyszichta",
        "recentchanges": "Ńydowno půmjyńane",
        "recentchanges-legend": "Uopcyje ńydowno půmjyńanych",
        "recentchanges-summary": "Ta zajta ukozuje gyszichta uostatńich půmjyńań na tyj wiki.",
        "recentchanges-label-minor": "To je ńywjelge sprowjyńy",
        "recentchanges-label-bot": "To sprowjyńy bůło zrobjůne uod bota",
        "recentchanges-label-unpatrolled": "To sprowjyńy ńy bůło jeszcze uowjerzůne",
+       "recentchanges-label-plusminus": "Půmjyńono mjara zajty we bajtach",
+       "recentchanges-legend-heading": "'''Legynda:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (uobejrzij tyż [[Special:NewPages|lista nowych zajt]])",
        "rcnotefrom": "Půńiżej pokazano půmjyńańo zrobjůne pů <b>$2</b> (ńy wjyncyj kej <b>$1</b> pozycji).",
        "rclistfrom": "Ukoż půmjyńańa uod $3 $2",
        "rcshowhideminor": "$1 drobne půmjyńańa",
+       "rcshowhideminor-hide": "Schrůń",
        "rcshowhidebots": "$1 boty",
+       "rcshowhidebots-show": "Pokoż",
        "rcshowhideliu": "$1 zaregisztrowanych",
+       "rcshowhideliu-hide": "Schrůń",
        "rcshowhideanons": "$1 anůńimowych",
+       "rcshowhideanons-hide": "Schrůń",
        "rcshowhidepatr": "$1 uowjerzůne",
        "rcshowhidemine": "$1 uody mje sprowjůne",
+       "rcshowhidemine-hide": "Schrůń",
        "rclinks": "Ukoż uostatńe $1 sprowjyń bez uostatńe $2 dńi.<br />$3",
        "diff": "zmj.",
        "hist": "gysz.",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|dowajůncy pozůr užytkowńik|dowajůncych pozůr užytkowńikůw}}]",
        "rc_categories": "Uůgrańič do katygorii (oddźelej za půmocům \"|\")",
        "rc_categories_any": "Wšyskie",
+       "rc-change-size-new": "$1 {{PLURAL:$1|bajt|bajty|bajtůw}} po půmjyńyńu",
        "newsectionsummary": "/* $1 */ nowo tajla",
        "rc-enhanced-expand": "Pokoż szczygůły",
        "rc-enhanced-hide": "Schrůń detajle",
        "sharedupload": "Tyn plik je wćepńynty na $1 a inksze projekty tyż go mogům używać.",
        "sharedupload-desc-here": "Tyn plik śe nałoźi na $1 a idzie go użyć we inkszych projektach.\nNiżyj sům informacyje ze [$2 zajty popisu] tygo pliku.",
        "uploadnewversion-linktext": "Wćepńij nowšo wersyjo tygo plika",
+       "upload-disallowed-here": "Ńy moges nadpisać tygo plika.",
        "filerevert": "Přiwracańy $1",
        "filerevert-legend": "Přiwracańy poprzedńy wersje plika",
        "filerevert-intro": "Zamjeřoš přiwrůćić '''[[Media:$1|$1]]''' do wersje z [$4 $3, $2].",
        "undelete-show-file-submit": "Ja",
        "namespace": "Raum mjan:",
        "invert": "Wybjer na uopy",
+       "tooltip-invert": "Uoznacz te pole, coby ukryć půmjany na zajtach we uobranych raumach mjan (a powjůnzanych ze ńimi inkszymi raumami mjan, eli uoznaczůno)",
+       "namespace_association": "powjůnzany raum mjan",
+       "tooltip-namespace_association": "Uoznacz te pole, coby uwzglyndńić zajty dyskusyji i tyjmy powjůnzane ze uobranymi raumami mjan",
        "blanknamespace": "(przodńo)",
        "contributions": "Ajnzac {{GENDER:$1|używocza|używoczki}}",
        "contributions-title": "Wkłod użytkowńika $1",
        "tooltip-pt-mycontris": "Lista uody mje sprowjonych",
        "tooltip-pt-login": "Chćeli by my, cobyś śe nalogowoł, nale to ńy je powinne",
        "tooltip-pt-logout": "Uodloguj śe ze wiki",
+       "tooltip-pt-createaccount": "Namawjůmy do stworzyńo kůnta a zalogůwańo śa, atoli niy je to uobowjůnzkowe",
        "tooltip-ca-talk": "Dyskusyjo uo tym artiklu",
        "tooltip-ca-edit": "Mogesz sprowjać ta zajta. Podwjela spamjyntosz půmjyńańo, klikńij we knefel \"Uobźyrej\".",
        "tooltip-ca-addsection": "Przidej nowy temat",
        "spambot_username": "MediaWiki – wyćepywańe spamu",
        "spam_reverting": "Přiwracańy uostatńij wersyji we kerej ńy bůuo linkůw do $1",
        "spam_blanking": "Wšyjstke wersyje zawjerouy uodnośńiki do $1. Čyščyńy zajty.",
+       "simpleantispam-label": "Filter antyspamowy.\n'''ŃY''' szrajbůj sam ńic!",
+       "pageinfo-toolboxlink": "Informacyjo uo tyj zajće",
        "markaspatrolleddiff": "uoznoč sprawjyńy kej „sprawdzůne”",
        "markaspatrolledtext": "Uoznoč tyn artikel kej „sprawdzůny”",
        "markedaspatrolled": "Sprawdzůne",
        "file-nohires": "Wjynksze wymjyry ńy sům dostympne",
        "svg-long-desc": "Plik SVG, nůminalńe $1 × $2 pixelůw, rozmior plika: $3",
        "show-big-image": "Pjyrwy wymjor",
+       "show-big-image-preview": "Mjara podglůndu – $1.",
+       "show-big-image-other": "{{PLURAL:$2|Inkszo rozdźelczość|Inksze rozdźelczośći}}: $1.",
+       "show-big-image-size": "$1 x $2 pikselůw",
        "newimages": "Galerjo nowych uobrozkůw",
        "imagelisttext": "Půnižyj na {{PLURAL:$1||posortowanyj $2}} liśće {{PLURAL:$1|znojdowo|znojdujům|znojdowo}} śe '''$1''' {{PLURAL:$1|plik|pliki|plikůw}}.",
        "newimages-summary": "Na tyj ekstra zajće prezyntowane sům uostatńo wćepńynte pliki.",
        "version-parser-function-hooks": "Fůnkcyje hokůw analizatora skuadńi (ang. parser function hooks)",
        "version-hook-name": "Mjano haka (ang. hook name)",
        "version-hook-subscribedby": "Zapotřebowany bez",
-       "version-version": "(Wersjo $1)",
+       "version-version": "($1)",
        "version-license": "Licencjo",
        "version-software": "Zainstalowane uoprůgramowańy",
        "version-software-product": "Mjano",
        "intentionallyblankpage": "Ta zajta nauůmyślńy uostoua śe pusto",
        "external_image_whitelist": "#Leave this line exactly as it is<pre>\n#Wstow půńiżyj tajle wyrażyń regularnych (jyno to, co znojduje śe mjyndzy //)\n#Wyrażyńa te uostanům przipasowane ku URL-ům zewnyntrznym (bezpostrzredńo linkowanych) grafik\n#Dopasowane URL-e zostanům wyśwjetlůne kej grafiki, w przećiwnym raźe bydźe pokozany yno link ku grafice\n#Lińje kere s anfanga majům # sům traktowane kej kůmyntorze\n\n#Put all regex fragments above this line. Leave this line exactly as it is</pre>",
        "tag-filter": "Filter [[Special:Tags|tagůw]]",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Uoznaczyńe|Uoznaczyńo}}]]: $2)",
+       "logentry-delete-delete": "$1 {{GENDER:$2|wyćepoł|wyćepała}} zajta $3",
        "revdelete-restricted": "naštaluj uograničyńo do administratorůw",
        "revdelete-unrestricted": "wycofej uograničyńo do administratorůw",
+       "logentry-newusers-create": "Kůnto {{GENDER:$2|używocza}} $1 uostało stworzůne",
        "rightsnone": "podstawowo",
        "revdelete-summary": "uopis pomjyńań",
+       "searchsuggest-search": "Sznupej",
        "expand_templates_ok": "OK"
 }
index 68d08aa..97a26b9 100644 (file)
@@ -35,7 +35,8 @@
                        "Thamiziniyan",
                        "아라",
                        "Kalyanasundar",
-                       "தமிழ்த்தம்பி"
+                       "தமிழ்த்தம்பி",
+                       "Macofe"
                ]
        },
        "tog-underline": "இணைப்புகளுக்கு அடிக்கோடிடு",
        "delete-toobig": "இப்பக்கம் அதிகமான திருத்தங்களை கொண்டுள்ளது, குறிப்பாக $1 {{PLURAL:$1|திருத்தத்திற்கு|திருத்தங்களிற்கு}} மேல்.\n{{SITENAME}} தளத்தின் தரவுகள் தற்செயலாக அழிந்துப்போவதை தடுப்பதற்க்காக இவ்வாறான பக்கங்கள் நீக்கப்படுவது முடக்கப்பட்டுள்ளது.",
        "delete-warning-toobig": "இப்பக்கம் அதிகமான திருத்தங்களை கொண்டுள்ளது, குறிப்பாக $1 {{PLURAL:$1|திருத்தத்திற்கு|திருத்தங்களிற்கு}} மேல்.\nஇப்பக்கத்தை நீக்குவது {{SITENAME}} தளத்தின் தரவுவழங்கனின் செயற்பாட்டை பாதிக்கலாம்;\nகவனத்துடன் முன்னெடுக்கவும்.",
        "rollback": "முன்நிலையாக்கத் தொகுப்புகள்",
-       "rollback_short": "முன்நிலையாக்கு",
        "rollbacklink": "முன்நிலையாக்கு",
        "rollbacklinkcount": "$1 {{PLURAL:$1|தொகுப்பை|தொகுப்புகளை}} முன்நிலையாக்குக",
        "rollbacklinkcount-morethan": "$1-க்கும் மேற்பட்ட {{PLURAL:$1|தொகுப்பை|தொகுப்புகளை}} முன்நிலையாக்குக",
        "import-rootpage-invalid": "கொடுக்கப்பட்ட மூலப்பக்கம் செல்லாத தலைப்பாகும்.",
        "importlogpage": "இறக்குமதி பதிகை",
        "importlogpagetext": "வேறு விக்கிகளிலில் தொகுப்பு வரலாற்றைக் கொண்டப் பக்கங்களின் மேலாண்மை இறக்குமதிகள்.",
-       "import-logentry-upload": "கோப்பு பதிவேற்றத்தின் மூலம் [[$1]] இறக்கப்பட்டது",
        "import-logentry-upload-detail": "{{PLURAL:$1|ஒரு திருத்தம்|$1 திருத்தங்கள்}}",
-       "import-logentry-interwiki": "transwikied$1",
        "import-logentry-interwiki-detail": "$2 இலிருந்து {{PLURAL:$1|ஒரு திருத்தம்|$1 திருத்தங்கள்}}",
        "javascripttest": "சாவாநிரல் சோதனை நடக்கின்றது",
-       "javascripttest-title": "$1 சோதனைகள் நடக்கின்றன",
        "javascripttest-pagetext-noframework": "இந்த பக்கம் JavaScript பரிசோதனை ஓட்டத்திற்காக ஒதுக்கப்பட்டுள்ளது",
        "javascripttest-pagetext-skins": "சோதனைகளை நடத்த முகப்புறை ஒன்றைத் தேர்வுசெய்:",
        "tooltip-pt-userpage": "உங்கள் பயனர் பக்கம்",
        "version-parser-function-hooks": "இலக்கணப் பாகுபடுத்தி செயற்பாட்டு கொக்கிகள்",
        "version-hook-name": "கொக்கியின் பெயர்",
        "version-hook-subscribedby": "பயன்பாடு",
-       "version-version": "(பதிப்பு $1)",
+       "version-version": "($1)",
        "version-license": "மீடியாவிக்கி உரிமம்",
        "version-poweredby-credits": "இந்த் விக்கி '''[https://www.mediawiki.org/ MediaWiki]''' இதன் மூலம் வழங்கப்படுகிறது, காப்புரிமை © 2001-$1 $2.",
        "version-poweredby-others": "பிறர்",
        "logentry-newusers-autocreate": "பயனர் கணக்கு $1 தானாக உருவாக்கப்பட்டது",
        "rightsnone": "(எதுவுமில்லை)",
        "revdelete-summary": "தொகுப்பு சுருக்கத்தை",
+       "feedback-adding": "பக்கத்தில் கருத்தைச் சேர்க்கிறது...",
+       "feedback-bugcheck": "சிறப்பு! அது ஏற்கனவே  [ $1 தெரிந்த  bugs ] என்பதை மட்டும்  சரிபார்க்கவும்,",
+       "feedback-bugnew": "நான் சரிபார்த்தாயிற்று. புதிய bug பற்றி கூறு.",
        "feedback-bugornote": "நீங்கள் ஒரு தொழில்நுட்பக் கோளாறு குறித்து விரிவாக விளக்க தாயாராக இருந்தால் தயவுசெய்து [ $1  ஒரு bug பற்றி கூறு].\nஇல்லையெனில், நீங்கள் கீழேயுள்ள எளிதான படிவத்தை பயன்படுத்தலாம்.உங்கள் கருத்துரை \"[$3 $2]\" பக்கத்தில் உங்கள் பயனர் பெயர் மற்றும் உங்கள் உலாவியின் பெயருடன் சேர்க்கப்படும்.",
-       "feedback-subject": "பொருள்:",
-       "feedback-message": "தகவல்:",
        "feedback-cancel": "விட்டுவிடு",
-       "feedback-submit": "கருத்தைச் சமர்ப்பிக்கவும்",
-       "feedback-adding": "பக்கத்தில் கருத்தைச் சேர்க்கிறது...",
+       "feedback-close": "முடிந்தது",
        "feedback-error1": "பிழை: API லிருந்து அங்கீகரிக்கப்படாத முடிவு.",
        "feedback-error2": "பிழை: திருத்தல்  தோல்வியடைந்தது",
        "feedback-error3": "பிழை: API லிருந்து பதிற்குறிப்பு எதுவும் இல்லை.",
+       "feedback-message": "தகவல்:",
+       "feedback-subject": "பொருள்:",
+       "feedback-submit": "சமர்ப்பி",
        "feedback-thanks": "நன்றி! உங்கள் கருத்துகள் \"[$2 $1]\" பக்கத்தில்பதிவு செய்யப்பட்டுள்ளது .",
-       "feedback-close": "முடிந்தது",
-       "feedback-bugcheck": "சிறப்பு! அது ஏற்கனவே  [ $1 தெரிந்த  bugs ] என்பதை மட்டும்  சரிபார்க்கவும்,",
-       "feedback-bugnew": "நான் சரிபார்த்தாயிற்று. புதிய bug பற்றி கூறு.",
        "searchsuggest-search": "தேடு",
        "searchsuggest-containing": "கொண்டுள்ளது...",
        "api-error-badaccess-groups": "இந்த விக்கிக்குக் கோப்புகளைப் பதிவேற்றுவதற்கு நீங்கள் அனுமதிக்கப்படவில்லை.",
        "expand_templates_remove_comments": "கருத்துரைகளை நீக்கு",
        "expand_templates_preview": "முன்தோற்றம்",
        "mediastatistics-header-unknown": "அறியப்படாதது",
-       "mediastatistics-header-video": "காணொளிகள்"
+       "mediastatistics-header-video": "காணொளிகள்",
+       "special-characters-group-latin": "இலத்தீன்",
+       "special-characters-group-latinextended": "இலத்தீன் விரிவு",
+       "special-characters-group-ipa": "பன்னாட்டு ஒலிப்பு அரிச்சுவடி",
+       "special-characters-group-symbols": "குறியீடுகள்",
+       "special-characters-group-greek": "கிரேக்கம்",
+       "special-characters-group-cyrillic": "சைரிலிக் (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": "கெமெர்"
 }
index f070329..73b3b6a 100644 (file)
@@ -4,7 +4,8 @@
                        "NamwikiTL",
                        "VASANTH S.N.",
                        "VinodSBangera",
-                       "아라"
+                       "아라",
+                       "Vishwanatha Badikana"
                ]
        },
        "tog-underline": "ಲಿಂಕ್’ಲೆದ ತಿರ್ತ್ ಗೆರೆ(ಅಂಡರ್ ಲೈನ್) ಪಾಡ್’ಲೆ",
        "actions": "ಕ್ರಿಯೆಕ್ಕುಲು",
        "namespaces": "ಪುದರ್ ದ ವರ್ಗೊಲು",
        "variants": "ರೂಪಾಂತರ ಹೊಂದ್‘ನ",
+       "navigation-heading": "ಸಂಚರಣೆ ಮೆನು",
        "errorpagetitle": "ದೋಷ",
        "returnto": "$1 ಗ್ ಪಿರ ಪೋಲೆ.",
        "tagline": "{{SITENAME}} ರ್ದ್",
        "permalink": "ಸ್ಥಿರ ಸಂಪರ್ಕ",
        "print": "ಪ್ರಿ೦ಟ್ ಮನ್ಪುಲೆ",
        "view": "ತೂಲೆ",
+       "view-foreign": "$1ಡ್ ತೂಲೆ",
        "edit": "ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ(Edit this page)",
        "create": "ಸೃಷ್ಟಿಸಾಲೆ",
+       "create-local": "ಸ್ಥಳೀಯ ವಿವರಣೆ ಸೇರಾಲೆ",
        "editthispage": "ಈ ಪುಟೊನು ಬದಲಾಯಿಸಾಲೆ",
        "create-this-page": "ಈ ಪುಟೊನು ಸೃಷ್ಟಿಸಾಲೆ",
        "delete": "ದೆತ್ತ್ ಪಾಡ್ಲೆ",
        "articlepage": "ಲೇಖನ ಪುಟೊನು ತೂಲೆ",
        "talk": "ಚರ್ಚೆ",
        "views": "ನೋಟಲು",
-       "toolbox": "ಉಪಕರಣ(ಟೂಲ್)",
+       "toolbox": "ಉಪಕರಣೊಲು",
        "userpage": "ಸದಸ್ಯೆರ್ನ ಪುಟೊನು ತೂಲೆ",
        "projectpage": "ಪ್ರೊಜೆಕ್ಟ್ ಪುಟೊನು ತೂಲೆ",
        "imagepage": "ಮೀಡಿಯ ಪುಟೊನು ತೂಲೆ",
        "ns-specialprotected": "ವಿಶೇಷ ಪುಟ‘ಕ್‘ಲೆನ್ ಸಂಪಾದನೆ ಮಲ್ಪರೆ ಆಪುಜಿ",
        "logouttext": "ಈರ್ ಇತ್ತೆ ಲಾಗ್ ಔಟ್ ಆತರ್.\nಈರ್ {{SITENAME}} ನ್ ಅನಾಮಧೇಯರಾತ್ ಉಪಯೋಗ ಮಲ್ಪೊಲಿ,ಅಥವಾ ಕೂಡ ಉಂದುವೇ ಪುದರ್‘ಡ್ ಯಾ ಬೇತೆ ಪುದರ್‘ಡ್ ಉಪಯೋಗ ಮಲ್ಪೊಲಿ.\nಗಮನಿಸಾಲೆ: ಈರೆನ ಬ್ರೌಸರ್‘ಡ್ ಮಾಜುನಾಡೆ ಮುಟ್ಟ ಕೆಲವು ಪುಟಕ್‘ಲು ಈರ್ ಇತ್ತೆಲಾ ಲಾಗ್ ಇನ್ ಆಯಿಲೆಕ್ಕನೇ ತೋಜಾವು.",
        "yourname": "ಸದಸ್ಯೆರ್ನ ಪುದರ್:",
+       "userlogin-yourname": "ಸದಸ್ಯೆರ್ನ ಪುದರ್",
+       "userlogin-yourname-ph": "ಈರೆನೆ ಸದಸ್ಯನಾಮ ಬರೆಲೆ",
        "yourpassword": "ಪಾಸ್-ವರ್ಡ್:",
+       "userlogin-yourpassword": "ಪ್ರವೇಶಪದೊ",
+       "userlogin-yourpassword-ph": "ಪ್ರವೇಶ ಪದೊನ್ ನಮೂದಿಸಾಲೆ",
+       "createacct-yourpassword-ph": "ಪ್ರವೇಶ ಪದೊನ್ ನಮೂದಿಸಾಲೆ",
        "yourpasswordagain": "ಪಾಸ್ವರ್ಡ್ ಪಿರ ಟೈಪ್ ಮಲ್ಪುಲೆ",
+       "createacct-yourpasswordagain": "ಪ್ರವೇಶಪದೊನ್ ಧೃಡೀಕರಣ ಮಲ್ಪುಲೆ",
+       "createacct-yourpasswordagain-ph": "ಪ್ರವೇಶಪದೊನು ನನ ಒರ ನಮೂದಿಸಾಲೆ",
        "remembermypassword": "ಈ ಕಂಪ್ಯೂಟರ್’ಡ್ ಎನ್ನ ಪ್ರವೇಶ ಪದೊನು ನೆನಪು ದೀಲ",
+       "userlogin-remembermypassword": "ಎನನ್ ಲಾಗಿನ್ ಆತೇ ದೀಡ್ಲೆ",
        "yourdomainname": "ಈರೆನ ಕಾರ್ಯಕ್ಷೇತ್ರ",
        "login": "ಲಾಗ್ ಇನ್",
        "nav-login-createaccount": "ಲಾಗ್-ಇನ್ / ಅಕೌಂಟ್ ಸೃಷ್ಟಿ ಮಲ್ಪುಲೆ",
        "logout": "ಲಾಗ್ ಔಟ್",
        "userlogout": "ಲಾಗ್ ಔಟ್",
        "notloggedin": "ಲಾಗಿನ್ ಆತ್‘ಜ್ಜರ್",
+       "userlogin-noaccount": "ಈರೆನ ಖಾತೆ ಇಜ್ಜೇ?",
+       "userlogin-joinproject": "{{SITENAME}}ಗ್ ಸೇರ್ಲೆ",
        "nologin": "ಈರೆನ ಖಾತೆ ಇಜ್ಜೇ?'''$1'''",
        "nologinlink": "ಪೊಸ ಖಾತೆ ಸುರು ಮಲ್ಪುಲೆ",
        "createaccount": "ಪೊಸ ಅಕ್ಕೌಂಟ್ ಸುರು ಮಲ್ಪುಲೆ",
        "gotaccount": "ಈರೆನ ಖಾತೆ ಉಂಡೇ?'''$1'''",
        "gotaccountlink": "ಲಾಗಿನ್ ಆಲೆ",
        "userlogin-resetlink": "ಈರೆನ ಲಾಗಿನ್ ವಿವರ ಮರತ್ತ್ಂಡೇ?",
+       "userlogin-resetpassword-link": "ಈರೆನೆ ಪ್ರವೇಶಪದೊ ಮರತ್ತ್‍ಂಡಾ?",
+       "userlogin-helplink2": "ಲಾಗಿನ್ ಆವೊರೆ ಸಹಾಯ",
+       "createacct-emailoptional": "ಮಿಂಚಂಚೆ ವಿಳಾಸೊ (ಐಚ್ಛಿಕ)",
+       "createacct-email-ph": "ಇರೆನ ಇ-ಅಂಚೆ ವಿಳಾಸೊನ್ ನಮೂದಿಸಾಲೆ.",
        "createaccountmail": "ಇ ಮೈಲ್ ಮೂಲಕ",
        "createaccountreason": "ಕಾರಣ",
+       "createacct-submit": "ಪೊಸ ಖಾತೆ ಸುರು ಮಲ್ಪುಲೆ",
+       "createacct-benefit-body1": "{{PLURAL:$1|ಸಂಪಾದನೆ|ಸಂಪಾದನೆಲು}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|ಪುಟ|ಪುಟಕ್ಕುಲು}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|ಕೊಡುಗೆ|ಕೊಡುಗೆಲು}}",
        "badretype": "ಈರ್ ಕೊರ್ನ ಪ್ರವೇಶ ಪದೆ ಬೇತೆ ಬೇತೆ ಅತ್ಂಡ್",
        "userexists": "ಈರ್ ಕೊರ್ನ ಸದಸ್ಯರ ಪುದರ್ ಬಳಕೆಡ್ ಉಂಡು. ದಯದೀದ್ ಬೇತೆ ಪುದರ್ ಕೊರ್ಲೆ",
        "loginerror": "ಲಾಗಿನ್ ದೋಷ",
        "accountcreated": "ಖಾತೆ ಸೃಷ್ಟಿಯಾತ್‘ಂಡ್.",
        "login-abort-generic": "ಇರೆನ ಲಾಗ್ ಇನ್ ವಿಫಲ ವಾತ್‘ಂಡ್",
        "loginlanguagelabel": "ಭಾಷೆ: $1",
+       "pt-login": "ಲಾಗಿನ್",
+       "pt-login-button": "ಲಾಗಿನ್ ಆಲೆ",
+       "pt-createaccount": "ಪೊಸ ಖಾತೆ ಸುರು ಮಲ್ಪುಲೆ",
+       "pt-userlogout": "ಲಾಗ್ ಔಟ್",
        "changepassword": "ಪ್ರವೇಶಪದೊನ್ ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
        "resetpass_header": "ಈ ಖಾತೆದ ಪ್ರವೇಶಪದ ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
        "oldpassword": "ಪರ ಪ್ರವೇಶಪದ",
        "userpage-userdoesnotexist": "ಬಳಕೆದಾರ ಖಾತೆ \"<nowiki>$1</nowiki>\" ದಾಖಲಾತ್‘ಜ್ಜಿ. ಈರ್ ಉಂದುವೇ ಪುಟನ್ ಸಂಪಾದನೆ ಮಲ್ಪರ ಉಂಡಾಂದ್ ಖಾತ್ರಿ ಮಲ್ತೊನಿ.",
        "previewnote": "'''ಉಂದು ಕೇವಲ ಮುನ್ನೋಟ; ಪುಟೊನು ನನಲ ಒರಿಪಾದಿಜಿ ಪನ್ಪುನೇನ್ ಮರಪೊರ್ಚಿ!'''",
        "editing": "$1 ಲೇಖನೊನು ಈರ್ ಸಂಪಾದನೆ ಮಲ್ತೊಂದುಲ್ಲರ್",
+       "creating": "$1 ನ್ನು ಸೃಷ್ಟಿಸಾವೊದುಂಡು",
        "editingsection": "$1 (ವಿಭಾಗೊನು) ಸಂಪಾದನೆ ಮಲ್ತೊಂದುಲ್ಲರ್",
        "yourtext": "ಇರೆನ ಸಂಪಾದನೆ",
        "yourdiff": "ವ್ಯತ್ಯಾಸೊಲು",
        "copyrightwarning": "ದಯಮಲ್ತ್’ದ್ ಗಮನಿಸ್’ಲೆ: {{SITENAME}} ಸೈಟ್’ಡ್ ಇರೆನ ಪೂರಾ ಕಾಣಿಕೆಲುಲಾ $2 ಅಡಿಟ್ ಬಿಡುಗಡೆ ಆಪುಂಡು (ಮಾಹಿತಿಗ್ $1 ನ್ ತೂಲೆ). ಇರೆನ ಸಂಪಾದನೆಲೆನ್ ಬೇತೆಕುಲು ನಿರ್ಧಾಕ್ಷಿಣ್ಯವಾದ್ ಬದಲ್ ಮಲ್ತ್’ದ್ ಬೇತೆ ಕಡೆಲೆಡ್ ಪಟ್ಟೆರ್. ಇಂದೆಕ್ ಇರೆನ ಒಪ್ಪಿಗೆ ಇತ್ತ್’ನ್ಡ ಮಾತ್ರ ಮುಲ್ಪ ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ.<br />\nಅತ್ತಂದೆ ಇರೆನ ಸಂಪಾದನೆಲೆನ್ ಈರ್ ಸ್ವತಃ ಬರೆತರ್, ಅತ್ತ್’ನ್ಡ ಕೃತಿಸ್ವಾಮ್ಯತೆ ಇಜ್ಜಂದಿನ ಕಡೆರ್ದ್ ದೆತೊನ್ದರ್ ಪಂಡ್’ದ್ ಪ್ರಮಾಣಿಸೊಂದುಲ್ಲರ್.\n'''ಕೃತಿಸ್ವಾಮ್ಯತೆದ ಅಡಿಟುಪ್ಪುನಂಚಿನ ಕೃತಿಲೆನ್ ಒಪ್ಪಿಗೆ ಇಜ್ಜಂದೆ ಮುಲ್ಪ ಪಾಡೊಚಿ!'''",
-       "templatesused": "à²\88 à²ªà³\81à²\9fà³\8aà²\9fà³\81 à²\89ಪಯà³\8bà²\97 à²®à²²à³\8dತಿನ à²«à²²à²\95à³\8aಲà³\81:",
+       "templatesused": "à²\88 à²ªà³\81à²\9fà³\8aà²\9fà³\8d à²\89ಪಯà³\8bà²\97 à²®à²²à³\8dತಿನ {{PLURAL:$1|à²\9fà³\86à²\82ಪà³\8dಲà³\87à²\9fà³\81|à²\9fà³\86à²\82ಪà³\8dಲà³\87à²\9fà³\81à²\97ಳà³\81}}:",
        "templatesusedpreview": "ಈ ಮುನ್ನೋಟೊಡು ಉಪಯೋಗ ಮಲ್ತಿನ ಟೆಂಪ್ಲೇಟ್’ಲು:",
        "template-protected": "(ಸಂರಕ್ಷಿತ)",
        "template-semiprotected": "(ಅರೆ-ಸಂರಕ್ಷಿತ)",
        "currentrev": "ಇತ್ತೆದ ಆವೃತ್ತಿ",
        "currentrev-asof": "$1 ದ ಮುಟ್ಟ ಇತ್ತೆದ ಆವೃತ್ತಿ",
        "revisionasof": "$1 ದಿನೊತ ಆವೃತ್ತಿ",
+       "revision-info": "ಬದಲಾವಣೆ $1 ಲೆಕ್ಕೊ {{GENDER:$6|$2}} ಇಂಬೆರೆಡ್‍ದ್$7",
        "previousrevision": "←ದುಂಬುದ ಆವೃತ್ತಿ",
        "nextrevision": "ಪೊಸ ಮರು-ಆವೃತ್ತಿ",
        "currentrevisionlink": "ಇತ್ತೆದ ಆವೃತ್ತಿ",
        "mergehistory-from": "ಮೂಲ ಪುಟ",
        "mergehistory-reason": "ಕಾರಣ:",
        "revertmerge": "ಅನ್-ಮರ್ಜ್ ಮಲ್ಪುಲೆ",
-       "history-title": "\"$1\" ಪುಟೊತ ಆವೃತ್ತಿ ಇತಿಹಾಸ",
+       "history-title": "\"$1\" ಪುಟೊತ ಆವೃತ್ತಿ ಇತಿಹಾಸ",
        "lineno": "$1 ನೇ ಸಾಲ್:",
        "compareselectedversions": "ಆಯ್ಕೆ ಮಲ್ತಿನ ಆವೃತ್ತಿಲೆನ್ ಹೊಂದಾಣಿಕೆ ಮಲ್ತ್ ತೂಲೆ",
        "editundo": "ದುಂಬುದಲೆಕ",
        "notextmatches": "ವಾ ಪುಟೊತ ಪಠ್ಯೊಡುಲಾ ಹೋಲಿಕೆ ಇಜ್ಜಿ",
        "prevn": "ದುಂಬುದ {{PLURAL:$1|$1}}",
        "nextn": "ಬೊಕ್ಕದ {{PLURAL:$1|$1}}",
+       "shown-title": "ಪ್ರತಿ ಪುಟೊಡುಲಾ $1 {{PLURAL:$1|result|results}} ತೋಜಿಪಾವು",
        "viewprevnext": "ತೂಲೆ ($1 {{int:pipe-separator}} $2) ($3)",
        "searchprofile-articles": "ಲೇಖನ ಪುಟೊ",
        "searchprofile-images": "ಬಹುಮಾಧ್ಯಮ",
        "search-interwiki-more": "(ಮಸ್ತ್)",
        "searchrelated": "ಸ೦ಬ೦ಧ ಇತ್ತಿನ",
        "searchall": "ಮಾತಾ",
+       "search-nonefound": "ಈರೆನ ವಿಚಾರಣೆಗ್ ತಕ್ಕುದಾಯಿನ ಪಲಿತಾಂಶೊಲು ಇಜ್ಜಿ.",
        "powersearch-legend": "ಅಡ್ವಾನ್ಸ್’ಡ್ ಸರ್ಚ್",
        "powersearch-ns": "ನೇಮ್-ಸ್ಪೇಸ್’ಲೆಡ್ ನಾಡ್ಲೆ",
        "powersearch-toggleall": "ಮಾತಾ",
        "preferences": "ಪ್ರಾಶಸ್ತ್ಯೊಲು",
-       "mypreferences": "à²\8eನà³\8dನ à²ªà³\8dರಾಶಸà³\8dತà³\8dಯಲು",
+       "mypreferences": "ಪà³\8dರಾಶಸà³\8dತà³\8dಯà³\8aಲು",
        "prefs-rc": "ಇಂಚಿಪದ ಬದಲಾವಣೆಲು",
        "prefs-resetpass": "ಪ್ರವೇಶಪದೊನ್ ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
        "prefs-changeemail": "ಇ-ಅಂಚೆ ವಿಳಾಸೊನು ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
        "action-deleterevision": "ಈ ಆವೃತ್ತಿನ್ ಮಾಜಾಲೆ",
        "action-sendemail": "ಇ-ಅಂಚೆ ಕಡಪುಡುಲೆ",
        "nchanges": "$1 {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಲು}}",
+       "enhancedrc-history": "ಇತಿಹಾಸೊ",
        "recentchanges": "ಇಂಚಿಪದ ಬದಲಾವಣೆಲು",
        "recentchanges-legend": "ಇಂಚಿಪದ ಬದಲಾವಣೆಲು ಆಯ್ಕೆಲು",
        "recentchanges-summary": "ಈ ವಿಕಿಟ್ ಇಂಚಿಪ್ಪ ಆತಿನ ಬದಲಾವಣೆನ್ ಟ್ರಾಕ್ ಮಲ್ಪುಲೆ",
        "recentchanges-feed-description": "ಈ ಫೀಡ್’ಡ್ ವಿಕಿಕ್ ಇಂಚಿಪ್ಪ ಆತಿನಂಚಿನ ಬದಲಾವಣೆಲೆನ್ ಟ್ರ್ಯಾಕ್ ಮಲ್ಪುಲೆ.",
        "recentchanges-label-newpage": "ಇರ್ನ ಈ ಬದಲಾವಣೆ ಪೊಸ ಪುಟೊನು ಸುರು ಮಲ್ಪುಂಡು",
        "recentchanges-label-minor": "ಉಂದು ಎಲ್ಯ ಬದಲಾವಣೆ",
+       "recentchanges-label-bot": "ಈ ಸಂಪಾದನೆನ್ ಒಂಜಿ ಬಾಟ್ ಮಲ್ತ್‍ದುಂಡು",
+       "recentchanges-label-unpatrolled": "ಈ ಸಂಪಾದನೆನ್ ನನಲಾ ಪರೀಕ್ಷೆ ಮಲ್ತ್‍ದಿಜ್ಜಿ.",
        "rclistfrom": "$3 $2 ರ್ದ್ ಶುರುವಾತಿನ ಪೊಸ ಬದಲಾವಣೆಲೆನ್ ತೊಜ್ಪಾವು",
        "rcshowhideminor": "$1 ಎಲ್ಯೆಲ್ಯ ಬದಲಾವಣೆಲು",
+       "rcshowhideminor-show": "ತೋಜಾಲೆ",
+       "rcshowhideminor-hide": "ದೆಂಗಾವು",
        "rcshowhidebots": "$1 ಬಾಟ್",
+       "rcshowhidebots-show": "ತೊಜಾವು",
+       "rcshowhidebots-hide": "ದೆಂಗಾಲೆ",
        "rcshowhideliu": "ಲಾಗ್-ಇನ್ ಆತಿನಂಚಿನ ಸದಸ್ಯೆರ್ $1",
+       "rcshowhideliu-hide": "ದೆಂಗಾವು",
        "rcshowhideanons": "ಅನಾಮಧೇಯ ಸದಸ್ಯೆರ್ $1",
+       "rcshowhideanons-show": "ತೋಜಾಲೆ",
+       "rcshowhideanons-hide": "ದೆಂಗಾವು",
        "rcshowhidepatr": "$1 ಪರೀಕ್ಷಿಸಾದಿನ ಸಂಪಾದನೆಲು",
        "rcshowhidemine": "ಎನ್ನ ಸಂಪಾದನೆಲೆನ್ $1",
+       "rcshowhidemine-show": "ತೋಜಾಲೆ",
+       "rcshowhidemine-hide": "ದೆಂಗಾವು",
        "rclinks": "ದುಂಬುದ $2 ದಿನೊಲೆಡ್ ಮಲ್ತಿನ $1 ಕಡೆತ ಬದಲಾವಣೆಲೆನ್ ತೂಲೆ <br />$3",
        "diff": "ವ್ಯತ್ಯಾಸ",
        "hist": "ಇತಿಹಾಸ",
        "newpageletter": "ಪೊ",
        "boteditletter": "ಬಾ",
        "rc_categories_any": "ಒವ್ವೇ",
+       "rc-change-size-new": "$1 {{ಬಹುವಚನೊ:$1|ಬೈಟ್|ಬೈಟ್‍ಲು}}ಬದಲಾವಣೆದ ಬುಕ್ಕೊ",
        "newsectionsummary": "\n/* $1 */ಪೊಸ ವಿಭಾಗ",
        "rc-enhanced-expand": "ವಿವರೊಲೆನ್ ತೊಜ್ಪಾವು (ಜಾವ ಸ್ಕ್ರಿಪ್ಟ್ ಬೋಡಾಪುಂಡು)",
        "rc-enhanced-hide": "ವಿವರೊಲೆನ್ ದೆಂಗಾವು",
        "filehist-comment": "ಕಮೆಂಟ್",
        "imagelinks": "ಫೈಲ್ ಲಿಂಕ್’ಲು",
        "linkstoimage": "ಈ ಫೈಲ್’ಗ್ ತಿರ್ತ್’ದ ಈ {{PLURAL:$1|ಪುಟ|$1 ಪುಟೊಲು}} ಲಿಂಕ್ ಕೊರ್ಪುಂಡು.",
+       "nolinkstoimage": "ಈ ಫೈಲ್‍ಗ್ ಸಂಪರ್ಕ ಉಪ್ಪುನ ವಾ ಪುಟಲಾ ಇಜ್ಜಿ.",
        "sharedupload": "ಈ ಫೈಲ್’ನ್ ಮಸ್ತ್ ಜನ ಪಟ್ಟ್’ದುಲ್ಲೆರ್ ಅಂಚೆನೆ ಉಂದು ಮಸ್ತ್ ಪ್ರೊಜೆಕ್ಟ್’ಲೆಡ್ ಉಪಯೋಗಡುಪ್ಪು.",
+       "upload-disallowed-here": "ಈರ್ ಈ ಕಡತನ್ ಕುಡ ಬರೆವರೆ ಸಾದ್ಯ ಇಜ್ಜಿ.",
        "filedelete-comment": "ಕಾರಣ",
        "filedelete-submit": "ಮಾಜಾಲೆ",
        "randompage": "ಯಾದೃಚ್ಛಿಕ ಪುಟ",
        "pager-older-n": "{{PLURAL:$1|ಪರತ್ತ್ ೧|ಪರತ್ತ್ $1}}",
        "booksources": "ಪುಸ್ತಕೊಲ್ದ ಮೂಲ",
        "booksources-search-legend": "ಪುಸ್ತಕೊದ ಮೂಲೊನು ನಾಡ್ಲ",
+       "booksources-search": "ನಾಡ್‘ಲೆ",
        "log": "ದಾಖಲೆಲು",
        "allpages": "ಪೂರಾ ಪೂಟೊಲು",
        "allpagesfrom": "ಇಂದೆರ್ದ್ ಶುರುವಾಪುನ ಪುಟೊಲೆನ್ ತೊಜ್ಪಾವು:",
        "allpagesto": "ಇಂದೆರ್ದ್ ಅಂತ್ಯ ಆಪುನ ಪುಟೊಲೆನ್ ತೊಜ್ಪಾವು:",
        "allarticles": "ಪೂರಾ ಲೇಖನೊಲು",
        "allpagessubmit": "ಪೋ",
+       "categories": "ವರ್ಗೊಲು",
        "listgrouprights-members": "(ಸದಸ್ಯೆರ್ನ ಪಟ್ಟಿ)",
        "emailuser": "ಈ ಸದಸ್ಯೆರೆಗ್ ಇ-ಮೈಲ್ ಕಡಪುಡ್ಲೆ",
        "watchlist": "ವೀಕ್ಷಣಾ ಪಟ್ಟಿ",
        "namespace": "ನೇಮ್-ಸ್ಪೇಸ್:",
        "invert": "ಆಯ್ಕೆನ್ ತಿರ್ಗಾಲೆ",
        "blanknamespace": "(ಮುಖ್ಯ)",
-       "contributions": "ಸದಸ್ಯೆರ್ನ ಕಾಣಿಕೆಲು",
+       "contributions": "{{$1ಸದಸ್ಯೆರ್ನ}} ಕಾಣಿಕೆಲು",
        "contributions-title": "$1 ಗ್ ಸದಸ್ಯೆರ್ನ ಕಾಣಿಕೆ",
        "mycontris": "ಎನ್ನ ಕಾಣಿಕೆಲು",
        "contribsub2": "$1 ($2) ಗ್",
        "nolinkshere": "'''[[:$1]]''' ಗ್ ವಾ ಪುಟೊಲುಲಾ ಲಿಂಕ್ ಕೊರ್ಪುಜಿ.",
        "isredirect": "ಪುನರ್ನಿರ್ದೇಶನ ಪುಟ",
        "istemplate": "ಸೇರ್ಪಡೆ",
-       "isimage": "à²\9aಿತà³\8dರ à²\95à³\8aà²\82ಡಿ",
+       "isimage": "ಫà³\88ಲà³\8dâ\80\8dದ à²²à²¿à³¦à²\95à³\8d",
        "whatlinkshere-prev": "{{PLURAL:$1|ದುಂಬುದ|ದುಂಬುದ $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|ಬೊಕ್ಕದ|ಬೊಕ್ಕದ $1}}",
        "whatlinkshere-links": "← ಲಿಂಕ್’ಲು",
        "tooltip-pt-mycontris": "ಎನ್ನ ಕಾಣಿಕೆಲ್ದ ಪಟ್ಟಿ",
        "tooltip-pt-login": "ಈರ್ ಲಾಗ್ ಇನ್ ಆವೊಡುಂದು ಕೋರೊಂದುಲ್ಲ, ಆಂಡ ಉಂದು ದಾಲ ಕಡ್ಡಾಯ ಅತ್ತ್.",
        "tooltip-pt-logout": "ಲಾಗ್ ಔಟ್",
+       "tooltip-pt-createaccount": "ನಿಕುಲು ಪೊಸ ಖಾತೆ ಸುರುಮಲ್ತ್‍ದ್ ಲಾಗಿನ್ ಆಪುನೈನ್ ಸ್ವಾಗತ ಮಲ್ಪುವೊ, ಆಂಡಲಾ ಉಂದು ಕಡ್ಡಾಯ ಅತ್ತ್.",
        "tooltip-ca-talk": "ಮಾಹಿತಿ ಪುಟೊತ ಬಗ್ಗೆ ಚರ್ಚೆ",
        "tooltip-ca-edit": "ಈ ಪುಟೊನು ಈರ್ ಸಂಪಾದನೆ ಮಲ್ಪೊಲಿ. ಸೇವ್ ಮಲ್ಪುನ ದುಂಬು ಮುನ್ನೋಟದ ಉಪಯೊಗ ಮನ್ತೊನ್ಲೆ.",
        "tooltip-ca-addsection": "ಪೊಸ ಸೆಶನ್ನ್ ಶರು ಮಲ್ಪುಲೆ",
        "tooltip-upload": "ಅಪ್ಲೋಡ್ ಸುರು ಮಲ್ಪು",
        "tooltip-rollback": "\"Rollback\", ಈ ಪುಟದ ಕರಿನ ಬದಾಲವಣೆಗ್ ಒ೦ಜಿ ಕ್ಲಿಕ್ ಡ್ ಕೊನೊಪು೦ಡು",
        "tooltip-undo": "\"Undo\" ಈ ಬದಲಾವಣೆನ್ ದೆತೊನುಜಿ ಬುಕ ಪ್ರಿವ್ಯೂ ಮೋಡ್ ಡ್ ಬದಲಾವಣೆ ಮಲ್ಪೆರ್ ಕೊನೊಪು೦ಡು. ಅ೦ಚೆನೆ ಸಮ್ಮರಿ ಡ್ ಬದಲಾವಣೆ ಗ್ ಕಾರಣ ಕೊರ್ರ್‍ಎ ಆಪು೦ಡು.",
+       "tooltip-summary": "ಒಂಜಿ ಎಲ್ಯ ಸಾರಾಂಶ ಕೊರ್ಲೆ",
+       "pageinfo-toolboxlink": "ಪುಟೊತ ಮಾಹಿತಿ",
        "previousdiff": "← ದುಂಬುದ ಸಂಪಾದನೆ",
        "nextdiff": "ಪೊಸ ಎಡಿಟ್ →",
        "file-info-size": "$1 × $2 ಪಿಕ್ಸೆಲ್, ಫೈಲ್’ದ ಗಾತ್ರ: $3, MIME ಪ್ರಕಾರ: $4",
        "file-nohires": "ಇಂದೆರ್ದ್ ಜಾಸ್ತಿ ವಿವರವಾಯಿನ ನೋಟ ಇಜ್ಜಿ.",
        "svg-long-desc": "ಎಸ್.ವಿ.ಜಿ ಫೈಲ್, ಸುಮಾರಾದ್ $1 × $2 ಪಿಕ್ಸೆಲ್, ಫೈಲ್’ದ ಗಾತ್ರ: $3",
-       "show-big-image": "ಪೂರ್ತಿ ರೆಸೊಲ್ಯೂಶನ್",
+       "show-big-image": "ಮೂಲ ಕಡತ",
+       "show-big-image-size": "$1 × $2 ಪಿಕ್ಸೆಲ್‌ಸ್",
        "bad_image_list": "ವ್ಯವಸ್ಥೆದ ಆಕಾರ ಈ ರೀತಿ ಉಂಡು:\n\nಪಟ್ಟಿಡುಪ್ಪುನಂಚಿನ ದಾಖಲೆಲೆನ್ (* ರ್ದ್ ಶುರು ಆಪುನ ಸಾಲ್’ಲು) ಮಾತ್ರ ಪರಿಗಣನೆಗ್ ದೆತೊನೆರಾಪುಂಡು.\nಪ್ರತಿ ಸಾಲ್’ದ ಶುರುತ ಲಿಂಕ್ ಒಂಜಿ ದೋಷ ಉಪ್ಪುನಂಚಿನ ಫೈಲ್’ಗ್ ಲಿಂಕಾದುಪ್ಪೊಡು.\nಅವ್ವೇ ಸಾಲ್’ದ ಶುರುತ ಪೂರಾ ಲಿಂಕ್’ಲೆನ್ ಪರಿಗನೆರ್ದ್ ದೆಪ್ಪೆರಾಪುಂಡು, ಪಂಡ ಓವು ಪುಟೊಲೆಡ್ ಫೈಲ್’ದ ಬಗ್ಗೆ ಬರ್ಪುಂಡೋ ಔಲು.",
        "metadata": "ಮೇಲ್ದರ್ಜೆ ಮಾಹಿತಿ",
        "metadata-help": "ಈ ಫೈಲ್’ಡ್ ಜಾಸ್ತಿ ಮಾಹಿತಿ ಉಂಡು. ಪ್ರಾಯಶಃ ಫೈಲ್’ನ್ ಉಂಡು ಮಲ್ಪೆರೆ ಉಪಯೋಗ ಮಲ್ತಿನ ಡಿಜಿಟಲ್ ಕ್ಯಾಮೆರರ್ದ್ ಅತ್ತ್’ನ್ಡ ಸ್ಕ್ಯಾನರ್ ರ್ದ್ ಈ ಮಾಹಿತಿ ಬೈದ್’ನ್ಡ್.\nಮೂಲಪ್ರತಿರ್ದ್ ಈ ಫೈಲ್ ಬದಲಾದಿತ್ತ್’ನ್ಡ, ಈ ಮಾಹಿತಿ ಬದಲಾತಿನ ಫೈಲ್’ದ ವಿವರೊಲೆಗ್ ಸರಿಯಾದ್ ಹೊಂದಂದೆ ಉಪ್ಪು.",
        "metadata-expand": "ವಿಸ್ತಾರವಾಯಿನ ವಿವರೊಲೆನ್ ತೊಜ್ಪಾವು",
        "metadata-collapse": "ವಿಸ್ತಾರವಾಯಿನ ವಿವರೊಲೆನ್ ದೆಂಗಾವು",
-       "metadata-fields": "ಈ ಸಂದೇಶೊಡು ಪಟ್ಟಿ ಮಲ್ತಿನಂಚಿನ EXIF ಮೆಟಡೇಟ ಮಾಹಿತಿನ್ ಚಿತ್ರ ಪುಟೊಕು ಸೇರ್ಪಾಯೆರೆ ಆವೊಂದುಂಡು. ಪುಟೊಟು ಮೆಟಡೇಟ ಮಾಹಿತಿದ ಪಟ್ಟಿನ್ ದೆಪ್ಪುನಗ ಉಂದು ತೋಜುಂಡು.\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",
+       "metadata-fields": "ಈ ಸಂದೇಶೊಡು ಪಟ್ಟಿ ಮಲ್ತಿನಂಚಿನ EXIF ಮಿತ್ತ ದರ್ಜೆದ ಮಾಹಿತಿನ್ ಚಿತ್ರ ಪುಟೊಕು ಸೇರ್ಪಾಯೆರೆ ಆವೊಂದುಂಡು. ಪುಟೊಟು ಮಿತ್ತ ದರ್ಜೆ ಮಾಹಿತಿದ ಪಟ್ಟಿನ್ ದೆಪ್ಪುನಗ ಉಂದು ತೋಜುಂಡು.\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-datetime": "ಕಡೊತೊನು ಬದಲಾವಣೆ ಮಲ್ತ್‍ನ ದಿನಾಂಕೊ ಬೊಕ್ಕ ಸಮಯೊ",
+       "exif-make": "ಕ್ಯಾಮೆರಾದ ತಯಾರೆಕೆರ್",
+       "exif-model": "ಕ್ಯಾಮೆರಾ ಮಾದರಿ",
+       "exif-software": "ಉಪಯೋಗ ಮಲ್ತಿನ ತಂತ್ರಾಂಶ",
+       "exif-exifversion": "Exif ಆವೃತ್ತಿ",
+       "exif-datetimeoriginal": "ಮಾಹಿತಿ ಸೃಷ್ಟಿಯಾಯಿನ ದಿನಾಂಕೊ ಬೊಕ್ಕ ಸಮಯ",
+       "exif-datetimedigitized": "ಗಣಕೀಕರಣದ ದಿನಾಂಕೊ ಬೊಕ್ಕ ಸಮಯೊ",
+       "exif-orientation-1": "ಸಾಧಾರಣ",
        "namespacesall": "ಪೂರಾ",
        "monthsall": "ಪೂರಾ",
        "watchlisttools-view": "ಪ್ರಸ್ತುತ ಬದಲಾವಣೆಲ್ ತೋಜಾಲೆ",
        "watchlisttools-edit": "ವೀಕ್ಷಣಾಪಟ್ಟಿನ್ ತೂಲೆ ಬೊಕ್ಕ ಎಡಿಟ್ ಮಲ್ಪುಲೆ",
-       "specialpages": "ವಿಷೇಶ ಪುಟೊಲು"
+       "specialpages": "ವಿಷೇಶ ಪುಟೊಲು",
+       "tag-list-wrapper": "([[ವಿಸೇಸೊ:ಟ್ಯಾಗುಲು|{{ಬಹುವಚನೊ:$1|ಟ್ಯಾಗ್|ಟ್ಯಾಗುಲು}}]]:$2)",
+       "logentry-delete-delete": "$1 {{GENDER:$2|ಮಾಜಾದ್‍ಂಡ್}} ಪುಟ $3",
+       "logentry-newusers-create": "ಬಳಕೆದಾರ ಖಾತೆ $1 ನ್ನು {{GENDER:$2|ಸೃಷ್ಟಿ ಮಲ್ತ್‍ದುಂಡು}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ಅಪ್ಲೋಡ್ ಮಲ್ತ್‍ದೆರ್}} $3",
+       "searchsuggest-search": "ನಾಡ್‍ಲೆ"
 }
index a265a76..9838a43 100644 (file)
@@ -20,7 +20,9 @@
                        "לערי ריינהארט",
                        "రహ్మానుద్దీన్",
                        "రాకేశ్వర",
-                       "వైజాసత్య"
+                       "వైజాసత్య",
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "లంకె క్రీగీత:",
        "otherlanguages": "ఇతర భాషలలో",
        "redirectedfrom": "($1 నుండి మళ్ళించబడింది)",
        "redirectpagesub": "దారిమార్పు పేజీ",
+       "redirectto": "దారి మళ్ళింపు:",
        "lastmodifiedat": "ఈ పేజీలో చివరి మార్పు $1 న $2 కు జరిగింది.",
        "viewcount": "ఈ పేజీ {{PLURAL:$1|ఒక్క సారి|$1 సార్లు}} దర్శించబడింది.",
        "protectedpage": "సంరక్షణలోని పేజీ",
        "searchall": "అన్నీ",
        "showingresults": "#<strong>$2</strong> నుండి మొదలుకొని {{PLURAL:$1|</strong>ఒక్క</strong> ఫలితాన్ని|<strong>$1</strong> ఫలితాలను}} కింద చూపించాం.",
        "showingresultsinrange": "#<strong>$2</strong> నుండి  #<strong>$3</strong> వరకు ఉన్న ఫలితాల శ్రేణి నుండి {{PLURAL:$1|<strong>ఒక్క</strong> ఫలితం|<strong>$1</strong> ఫలితాల}} వరకు కింద చూపించాం.",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong>{{PLURAL:$3|కి|లో}} <strong>$1</strong> ఫలితం|<strong>$3</strong>లో <strong>$1 - $2</strong> ఫలితాలు}}",
        "search-nonefound": "మీ ప్రశ్నకి సరిపోలిన ఫలితాలేమీ లేవు.",
        "powersearch-legend": "నిశితమైన అన్వేషణ",
        "powersearch-ns": "ఈ పేరుబరుల్లో వెతుకు:",
        "recentchanges-legend-heading": "'''సూచిక :'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|కొత్త పేజీల జాబితా]]ను కూడా చూడండి)",
        "rcnotefrom": "<strong>$2</strong> నుండి జరిగిన మార్పులు (<strong>$1</strong> వరకు) కింద చూపబడ్డాయి.",
-       "rclistfrom": "$3, $2 à°¨à±\81à°\82à°¡à°¿ జరిగిన మార్పులను చూపించు",
+       "rclistfrom": "$3, $2 à°\95à±\81 à°®à±\81à°\82à°¦à±\81  జరిగిన మార్పులను చూపించు",
        "rcshowhideminor": "చిన్న మార్పులను $1",
        "rcshowhideminor-show": "చూపించు",
        "rcshowhideminor-hide": "దాచు",
        "delete-warning-toobig": "ఈ పేజీకి $1 {{PLURAL:$1|కూర్పుకు|కూర్పులకు}} మించిన, చాలా పెద్ద దిద్దుబాటు చరితం ఉంది. దాన్ని తొలగిస్తే {{SITENAME}}కి చెందిన డేటాబేసు కార్యాలకు ఆటంకం కలగొచ్చు; అప్రమత్తతో ముందుకుసాగండి.",
        "deleting-backlinks-warning": "'''హెచ్చరిక:''' మీరు తొలగించబోతున్న పేజీకి [[Special:WhatLinksHere/{{FULLPAGENAME}}|ఇతర పేజీల]] నుండి లింకులు ఉన్నాయి లేదా ఇక్కడ నుండి ట్రాన్స్‍క్లూడు అవుతున్నాయి.",
        "rollback": "దిద్దుబాట్లను రద్దుచేయి",
-       "rollback_short": "రద్దుచేయి",
        "rollbacklink": "రద్దుచేయి",
        "rollbacklinkcount": "$1 {{PLURAL:$1|మార్పును|మార్పులను}} రద్దుచేయి",
        "rollbacklinkcount-morethan": "$1 కంటే ఎక్కువ {{PLURAL:$1|మార్పును|మార్పులను}} రద్దుచేయి",
        "import-rootpage-nosubpage": "మూలపేజీ యొక్క పేరుబరి \"$1\" ఉపపేజీలను అనుమతించదు.",
        "importlogpage": "దిగుమతుల చిట్టా",
        "importlogpagetext": "ఇతర వికీల నుండీ మార్పుల చరిత్రతోసహా తెచ్చిన నిర్వహణా దిగుమతులు.",
-       "import-logentry-upload": "[[$1]]ను ఫైలు అప్లోడు ద్వారా దిగుమతి చేసాం",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|కూర్పు|కూర్పులు}}",
-       "import-logentry-interwiki": "ఇతర వికీల నుండి $1",
        "import-logentry-interwiki-detail": "$2 నుండి {{PLURAL:$1|ఒక కూర్పు|$1 కూర్పులు}}",
        "javascripttest": "జావాస్క్రిప్ట్ పరీక్ష",
-       "javascripttest-title": "$1 పరీక్షలు నడుస్తున్నాయి",
        "javascripttest-pagetext-noframework": "ఈ పేజీ JavaScript పరీక్షల కోసం ఉద్దేశించబడింది.",
        "javascripttest-pagetext-unknownframework": "తెలియని పరీక్షా ఫ్రేమ్‍వర్కు \"$1\".",
        "javascripttest-pagetext-frameworks": "కింది పరీక్షా ఫ్రేమ్‍వర్కులలో ఒకదాన్ని ఎంచుకోండి: $1",
        "tooltip-pt-mycontris": "మీ మార్పుచేర్పుల జాబితా",
        "tooltip-pt-login": "మిమ్మల్ని లాగినవమని ప్రోత్సహిస్తున్నాం; కానీ అది తప్పనిసరేమీ కాదు.",
        "tooltip-pt-logout": "లాగౌటవండి",
+       "tooltip-pt-createaccount": "మీరొక ఖాతాని సృష్టించుకొని ప్రవేశించటాన్ని సమర్ధిస్తున్నాము; కానీ, అది అవసరం కాదు, ఐచ్ఛికం మాత్రమే.",
        "tooltip-ca-talk": "విషయపు పేజీ గురించి చర్చ",
        "tooltip-ca-edit": "ఈ పేజీని మీరు సరిదిద్దవచ్చు. భద్రపరచే ముందు మునుజూపు బొత్తాన్ని వాడండి.",
        "tooltip-ca-addsection": "కొత్త విభాగాన్ని మొదలుపెట్టండి",
        "pageinfo-robot-policy": "రోబోట్లచే ఇండెక్సవుతోంది",
        "pageinfo-robot-index": "అనుమతించబడింది",
        "pageinfo-robot-noindex": "అనుమతించబడలేదు",
-       "pageinfo-watchers": "à°ªà±\87à°\9cà±\80 à°µà±\80à°\95à±\8dà°·à°\95ుల సంఖ్య",
+       "pageinfo-watchers": "à°ªà±\87à°\9cà±\80 à°\97మనిà°\82à°ªà±\81దారుల సంఖ్య",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|వీక్షకుడి|వీక్షకుల}} కంటే తక్కువ",
        "pageinfo-redirects-name": "ఈ పేజీకి ఉన్న దారిమార్పుల సంఖ్య",
        "pageinfo-subpages-name": "ఈ పేజీకి ఉన్న ఉపపేజీల సంఖ్య",
        "version-parser-function-hooks": "పార్సరుకు కొక్కాలు",
        "version-hook-name": "కొక్కెం పేరు",
        "version-hook-subscribedby": "ఉపయోగిస్తున్నవి",
-       "version-version": "(కూర్పు $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[పేరు లేదు]",
        "version-license": "MediaWiki లైసెన్సు",
        "version-ext-license": "లైసెన్సు",
        "logentry-rights-rights": "$1, $3 యొక్క గుంపు సభ్యత్వాన్ని $4 నుండి $5 కు {{GENDER:$2|మార్చారు}}",
        "logentry-rights-rights-legacy": "$1, $3 యొక్క గుంపు సభ్యత్వాన్ని {{GENDER:$2|మార్చారు}}",
        "logentry-rights-autopromote": "$1, $4 నుండి $5 కు ఆటోమేటిగ్గా {{GENDER:$2|ప్రమోటు చెయ్యబడ్డారు}}",
+       "logentry-upload-upload": "$1 $3 ను {{GENDER:$2|ఎక్కించారు}}",
        "rightsnone": "(ఏమీలేవు)",
        "revdelete-summary": "మార్పు సంగ్రహం",
+       "feedback-adding": "ఫీడ్‍బ్యాకును పేజీలోకి చేరుస్తున్నాం...",
+       "feedback-bugcheck": "అద్భుతం! ఇది ఇప్పటికే [$1 తెలిసిన బగ్గుల]లో లేదని సరిచూసుకోండి.",
+       "feedback-bugnew": "చూసాను. కొత్త బగ్గును నివేదించు",
        "feedback-bugornote": "ఏదైనా సాంకేతిక సమస్యను మీరు వివరించదలిస్తే [$1 లోపంపై ఫిర్యాదు చెయ్యండి].\nలేదంటే, కింద ఉన్న సులువైన ఫారాన్ని వాడండి. మీ వ్యాఖ్య మీ వాడుకరిపేరుతో సహా  \"[$3 $2]\" పేజీలో చేర్చబడుతుంది.",
-       "feedback-subject": "విషయం:",
-       "feedback-message": "సందేశం:",
        "feedback-cancel": "రద్దుచేయి",
-       "feedback-submit": "ప్రతిస్పందనను దాఖలుచేయి",
-       "feedback-adding": "ఫీడ్‍బ్యాకును పేజీలోకి చేరుస్తున్నాం...",
+       "feedback-close": "పూర్తయ్యింది",
        "feedback-error1": "లోపం: API నుండి గుర్తుపట్టలేని ఫలితం",
        "feedback-error2": "దోషము: సవరణ విఫలమైంది",
        "feedback-error3": "లోపం: API నుండి ప్రతిస్పందన లేదు",
+       "feedback-message": "సందేశం:",
+       "feedback-subject": "విషయం:",
+       "feedback-submit": "దాఖలుచెయ్యి",
        "feedback-thanks": "కృతజ్ఞతలు! మీ ప్రతిస్పందనను “[$2 $1]” పేజీలో చేర్చాం.",
-       "feedback-close": "పూర్తయ్యింది",
-       "feedback-bugcheck": "అద్భుతం! ఇది ఇప్పటికే [$1 తెలిసిన బగ్గుల]లో లేదని సరిచూసుకోండి.",
-       "feedback-bugnew": "చూసాను. కొత్త బగ్గును నివేదించు",
        "searchsuggest-search": "వెతుకు",
        "searchsuggest-containing": "కలిగియున్న...",
        "api-error-badaccess-groups": "ఈ వికీ లోనికి దస్త్రాలను ఎక్కించే అనుమతి మీకు లేదు.",
        "expand_templates_preview": "మునుజూపు",
        "pagelang-name": "పేజీ",
        "pagelang-language": "భాష",
-       "pagelang-use-default": "అప్రమేయ భాషను వాడు"
+       "pagelang-use-default": "అప్రమేయ భాషను వాడు",
+       "special-characters-group-latin": "లాటిన్",
+       "special-characters-group-latinextended": "విస్తరిత లాటిన్",
+       "special-characters-group-ipa": "ఐపిఎ",
+       "special-characters-group-symbols": "గుర్తులు",
+       "special-characters-group-greek": "గ్రీకు",
+       "special-characters-group-cyrillic": "సిరిలిక్",
+       "special-characters-group-arabic": "అరబిక్",
+       "special-characters-group-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 e60a27d..5687b5c 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "MF-Warburg",
                        "Nemo bis",
-                       "Reedy"
+                       "Reedy",
+                       "아라"
                ]
        },
        "tog-underline": "Subliña ligasaun sira:",
        "version": "Versaun",
        "version-specialpages": "Pájina espesiál",
        "version-other": "Seluk",
-       "version-version": "(Versaun $1)",
+       "version-version": "($1)",
        "version-license": "Lisensa",
        "version-poweredby-others": "ema seluk",
        "version-software-product": "Produtu",
index 22b84d5..44b6978 100644 (file)
@@ -10,7 +10,8 @@
                        "Soroush",
                        "Urhixidur",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Пайвандҳо хаткашида:",
        "delete-toobig": "Ин саҳифа таърихчаи бузурге дорад, ки шомили беш аз $1 вироиш аст. Ҳазфи ин гуна саҳифаҳо барои пешгири аз шикастани тасодуфӣ дар {{SITENAME}} маҳдуд шудааст.",
        "delete-warning-toobig": "Ин саҳифа таърихи бузурге дорад, ки шомили беш аз $1 вироиш аст. Ҳазфи ин саҳифа метавонад ихтилол ба амалгари пойгоҳи додаи {{SITENAME}} бишавад; лутфан бо эҳтиёт иқдом кунед.",
        "rollback": "Вогардонии вироишҳо",
-       "rollback_short": "Вогард",
        "rollbacklink": "вогардони",
        "rollbackfailed": "Вогардони нашуд",
        "cantrollback": "Наметавон вироишро вогардонд; охирин ҳиссагузор танҳо муаллифи ин мақола аст.",
        "import-invalid-interwiki": "Аз викии мушаххасшуда наметавон воридот кард.",
        "importlogpage": "Вориди гузоришҳо",
        "importlogpagetext": "Ворид кардани саҳифаҳо бо ҳамроҳи таърихчаи вироиши онҳо аз викиҳои дигар.",
-       "import-logentry-upload": "[[$1]] аз тариқи боргузории парванда, ворид шуд",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|нусха|нусха}}",
-       "import-logentry-interwiki": "$1 трансвикишуда",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|нусха|нусха}} аз $2",
        "tooltip-pt-userpage": "Саҳифаи корбарии шумо",
        "tooltip-pt-anonuserpage": "Саҳифаи корбари IP, ки бо он шумо вироиш мекунед",
        "iranian-calendar-m10": "Ҷадӣ",
        "iranian-calendar-m11": "Далв",
        "iranian-calendar-m12": "Ҳут",
-       "unknown_extension_tag": "Бачасби ношиноси афзунаи \"$1\"",
        "version": "Нусхаи Медиавики",
        "version-extensions": "Афзунаҳои насбшуда",
        "version-specialpages": "Саҳифаҳои вижа",
        "version-parser-function-hooks": "Қолабҳои амалгарҳои таҷзеҳгар",
        "version-hook-name": "Номи қолаб",
        "version-hook-subscribedby": "Воридшуда тавассути",
-       "version-version": "(Нусха $1)",
+       "version-version": "($1)",
        "version-license": "Иҷозатномаи МедиаВики",
        "version-ext-colheader-license": "Иҷозатнома",
        "version-ext-colheader-credits": "Муаллифон",
        "specialpages-group-pagetools": "Абзорҳои саҳифа",
        "specialpages-group-wiki": "Додаҳо ва абзорҳо",
        "specialpages-group-redirects": "Дар ҳоли тағйири масири саҳифаҳои вижа",
+       "specialpages-group-developer": "Абзорҳои тавсиядиҳандагон",
        "blankpage": "Саҳифаи холӣ",
        "tag-filter": "Филтри [[Special:Tags|барчасбҳо]]:",
        "tags-active-header": "Фаъол?",
        "revdelete-unrestricted": "маҳдудиятҳо аз мудирон бардошта шуданд",
        "rightsnone": "(ҳеҷ)",
        "revdelete-summary": "вироиши хулоса",
-       "feedback-subject": "Мавзӯъ:",
-       "feedback-message": "Пайём:",
        "feedback-cancel": "Лағв",
-       "feedback-submit": "Ирсоли Пешниҳод",
        "feedback-close": "Анҷом шуд.",
+       "feedback-message": "Пайём:",
+       "feedback-subject": "Мавзӯъ:",
+       "feedback-submit": "Ирсол",
        "expandtemplates": "Бастдодани шаблонҳо",
        "expand_templates_intro": "Ин саҳифаи вижа матнеро дарёфт карда ва тамоми шаблонҳои ба кор рафта дар онро ба таври бозгаште баст медиҳад. Ҳамчунин тобеҳои таҷзеҳ\n<nowiki>{{</nowiki>#language:...}}, ва мутағйирҳое чун\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash;ро ҳам баст медиҳад – дар воқеъ тақрибан ҳар чиро ки дохили ду акулот бошад.\nИн кор бо садо задани марҳилаи таҷзеҳи марбут дар худи МедиаВики сурат мегирад.",
        "expand_templates_title": "Унвони мавзӯъ, барои {{FULLPAGENAME}} ва ғайра.:",
index 76ef9bd..c3dff49 100644 (file)
        "deletereason-dropdown": "*Dalelhoi umumiji hazf\n** Darxosti korbar\n** Naqzi haqqi taksir\n** Xarobkorī",
        "delete-edit-reasonlist": "Viroiş hazf dalelho",
        "rollback": "Vogardoniji viroişho",
-       "rollback_short": "Vogard",
        "rollbacklink": "vogardoni",
        "rollbackfailed": "Vogardoni naşud",
        "cantrollback": "Nametavon viroişro vogardond; oxirin hissaguzor tanho muallifi in maqola ast.",
        "iranian-calendar-m10": "Çadī",
        "iranian-calendar-m11": "Dalv",
        "iranian-calendar-m12": "Hut",
-       "unknown_extension_tag": "Bacasbi noşinosi afzunai \"$1\"",
        "version": "Nusxai Mediaviki",
        "version-extensions": "Afzunahoi nasbşuda",
        "version-specialpages": "Sahifahoi viƶa",
        "version-parser-function-hooks": "Qolabhoi amalgarhoi taçzehgar",
        "version-hook-name": "Nomi qolab",
        "version-hook-subscribedby": "Voridşuda tavassuti",
-       "version-version": "(Nusxa $1)",
+       "version-version": "($1)",
        "version-license": "Içozatnoma",
        "version-software": "Nusxai nasbşuda",
        "version-software-product": "Mahsul",
        "specialpages-group-pagetools": "Abzorhoi sahifa",
        "specialpages-group-wiki": "Viki dodaho va abzorho",
        "specialpages-group-redirects": "Dar holi taƣjiri masiri sahifahoi viƶa",
+       "specialpages-group-developer": "Abzorhoi tavsijadihandagon",
        "blankpage": "Sahifai xolī",
        "tags-edit": "viroiş",
        "dberr-info": "(Imkoni barqarori irtibot bo pojgohi doda vuçud nadorad: $1)",
index c4e7449..33c7d5c 100644 (file)
@@ -20,7 +20,9 @@
                        "לערי ריינהארט",
                        "จักรกฤช วงศ์สระหลวง (Jakkrit Vongsraluang) / PaePae",
                        "วรากร อึ้งวิเชียร (Varakorn Ungvichian)",
-                       "아라"
+                       "아라",
+                       "Pphongpan355",
+                       "Macofe"
                ]
        },
        "tog-underline": "การขีดเส้นใต้ลิงก์:",
        "site-atom-feed": "ฟีดอะตอม $1",
        "page-rss-feed": "ฟีดอาร์เอสเอส \"$1\"",
        "page-atom-feed": "ฟีดอะตอม \"$1\"",
-       "red-link-title": "$1 (หà¸\99à¹\89าà¸\99ีà¹\89à¹\84มà¹\88มี)",
+       "red-link-title": "$1 (à¹\84มà¹\88มีหà¸\99à¹\89า)",
        "sort-descending": "เรียงจากมากไปน้อย",
        "sort-ascending": "เรียงจากน้อยไปมาก",
        "nstab-main": "หน้า",
        "createacct-imgcaptcha-ph": "กรอกข้อความที่คุณเห็นด้านบน",
        "createacct-submit": "สร้างบัญชีของคุณ",
        "createacct-another-submit": "สร้างอีกบัญชี",
-       "createacct-benefit-heading": "{{SITENAME}}สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99à¸\88าà¸\81à¸\84à¸\99à¹\80à¸\8aà¹\88à¸\99à¸\84ุà¸\93",
+       "createacct-benefit-heading": "{{SITENAME}}สร้างจากคนเช่นคุณ",
        "createacct-benefit-body1": "$1 การแก้ไข",
        "createacct-benefit-body2": "$1 หน้า",
        "createacct-benefit-body3": "$1 ผู้ร่วมเขียนล่าสุด",
        "media_tip": "เชื่อมโยงไฟล์",
        "sig_tip": "ลายเซ็นของคุณพร้อมตราเวลา",
        "hr_tip": "เส้นนอน (ใช้อย่างจำกัด)",
-       "summary": "à¸\84ำอà¸\98ิà¸\9aายà¹\82à¸\94ยย่อ:",
+       "summary": "à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ย่อ:",
        "subject": "เรื่อง/พาดหัว:",
        "minoredit": "เป็นการแก้ไขเล็กน้อย",
        "watchthis": "เฝ้าดูหน้านี้",
-       "savearticle": "บันทึก",
+       "savearticle": "บันทึกหน้า",
        "preview": "ตัวอย่าง",
        "showpreview": "แสดงตัวอย่าง",
-       "showdiff": "à¹\81สà¸\94à¸\87à¸\84วามเปลี่ยนแปลง",
+       "showdiff": "à¹\81สà¸\94à¸\87à¸\81ารเปลี่ยนแปลง",
        "blankarticle": "<strong>คำเตือน:</strong> หน้าที่คุณกำลังสร้างว่าง หากคุณคลิก \"{{int:savearticle}}\" อีกครั้ง จะสร้างหน้าโดยไม่มีเนื้อหาใด",
        "anoneditwarning": "<strong>คำเตือน:</strong> คุณมิได้ล็อกอิน สาธารณะจะเห็นเลขที่อยู่ไอพีของคุณหากคุณแก้ไข หากคุณ<strong>[$1 ล็อกอิน]</strong>หรือ<strong>[$2 สร้างบัญชี]</strong> การแก้ไขของคุณจะถือว่าเป็นของชื่อผู้ใช้ของคุณ ร่วมกับประโยชน์อื่น",
        "anonpreviewwarning": "<em>คุณมิได้ล็อกอิน การบันทึกจะเก็บเลขที่อยู่ไอพีของคุณในประวัติการแก้ไขของหน้านี้</em>",
        "shown-title": "แสดง $1 ผลลัพธ์ต่อหน้า",
        "viewprevnext": "ดู ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "<strong>มีหน้าชื่อ \"[[:$1]]\" บนวิกินี้</strong>\n{{PLURAL:$2|0=|ดูผลการค้นหาอื่นที่พบเพิ่มเติม}}",
-       "searchmenu-new": "<strong>สรà¹\89าà¸\87หà¸\99à¹\89า \"[[:$1]]\" à¸\9aà¸\99วิà¸\81ิà¸\99ีà¹\89!</strong> {{PLURAL:$2|0=|à¸\94ูหà¸\99à¹\89าà¸\97ีà¹\88à¸\9eà¸\9aà¸\94à¹\89วยà¸\81ารà¸\84à¹\89à¸\99หาà¸\82อà¸\87à¸\84ุà¸\93|à¸\94ูà¸\9cลà¸\81ารà¸\84à¹\89à¸\99หาà¸\97ีà¹\88à¸\9eà¸\9aà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม}}",
+       "searchmenu-new": "<strong>สรà¹\89าà¸\87หà¸\99à¹\89า \"[[:$1]]\" à¸\9aà¸\99วิà¸\81ิà¸\99ีà¹\89!</strong> {{PLURAL:$2|0=|à¸\94ูหà¸\99à¹\89าà¸\97ีà¹\88à¸\81ารà¸\84à¹\89à¸\99หาà¸\82อà¸\87à¸\84ุà¸\93à¸\9eà¸\9aà¹\80à¸\9eิà¹\88ม|à¸\94ูà¸\9cลà¸\81ารà¸\84à¹\89à¸\99หาà¸\97ีà¹\88à¸\9eà¸\9aà¹\80à¸\9eิà¹\88ม}}",
        "searchprofile-articles": "หน้าเนื้อหา",
        "searchprofile-images": "สื่อประสม",
        "searchprofile-everything": "ทุกอย่าง",
        "recentchanges-feed-description": "ติดตามการปรับปรุงล่าสุดในวิกินี้ในฟีดนี้",
        "recentchanges-label-newpage": "การแก้ไขนี้สร้างหน้าใหม่",
        "recentchanges-label-minor": "เป็นการแก้ไขเล็กน้อย",
-       "recentchanges-label-bot": "à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89à¸\81ระà¸\97ำà¹\82à¸\94ยà¸\9aอà¸\95",
+       "recentchanges-label-bot": "à¸\9aอà¸\95à¸\81ระà¸\97ำà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89",
        "recentchanges-label-unpatrolled": "การแก้ไขนี้ยังไม่ได้ตรวจสอบ",
-       "recentchanges-label-plusminus": "à¸\82à¸\99าà¸\94à¸\82อà¸\87หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¹\84à¸\9bà¸\94à¹\89วยà¸\88ำà¸\99วà¸\99à¹\84à¸\9aà¸\95à¹\8cà¹\80à¸\97à¹\88าà¸\99ีà¹\89",
+       "recentchanges-label-plusminus": "ขนาดของหน้าเปลี่ยนไปจำนวนไบต์เท่านี้",
        "recentchanges-legend-heading": "'''คำอธิบายสัญลักษณ์:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ดูเพิ่มที่ [[Special:NewPages|รายชื่อหน้าใหม่]])",
        "rcnotefrom": "ด้านล่างเป็นการเปลี่ยนแปลงตั้งแต่ <strong>$3, $4</strong> (แสดงมากสุด <strong>$1</strong>)",
        "recentchangeslinked-title": "การปรับปรุงที่โยงกับ \"$1\"",
        "recentchangeslinked-summary": "นี่คือรายการเปลี่ยนแปลงล่าสุดของหน้าที่ถูกลิงก์จากหน้าเฉพาะ (หรือไปสมาชิกของหมวดหมู่เฉพาะ)\nหน้าใน[[Special:Watchlist|รายการเฝ้าดู]]แสดงเป็น<strong>ตัวหนา</strong>",
        "recentchangeslinked-page": "ชื่อหน้า:",
-       "recentchangeslinked-to": "à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\84à¸\9bยัà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87มายัà¸\87หน้าที่ระบุแทน",
+       "recentchangeslinked-to": "à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\84à¸\9bหà¸\99à¹\89าà¸\8bึà¹\88à¸\87à¹\82ยà¸\87à¹\84à¸\9bหน้าที่ระบุแทน",
        "upload": "อัปโหลดไฟล์",
        "uploadbtn": "อัปโหลดไฟล์",
        "reuploaddesc": "ยกเลิกการอัปโหลดและกลับไปยังแบบอัปโหลด",
        "listfiles-latestversion-no": "ไม่",
        "file-anchor-link": "ไฟล์",
        "filehist": "ประวัติไฟล์",
-       "filehist-help": "à¸\81à¸\94à¹\80ลือà¸\81วัà¸\99/เวลาเพื่อดูไฟล์ที่ปรากฏในขณะนั้น",
+       "filehist-help": "à¸\84ลิà¸\81วัà¸\99à¸\97ีà¹\88/เวลาเพื่อดูไฟล์ที่ปรากฏในขณะนั้น",
        "filehist-deleteall": "ลบทั้งหมด",
        "filehist-deleteone": "ลบ",
        "filehist-revert": "ย้อน",
        "filehist-current": "ปัจจุบัน",
-       "filehist-datetime": "วัน/เวลา",
+       "filehist-datetime": "วันที่/เวลา",
        "filehist-thumb": "รูปย่อ",
        "filehist-thumbtext": "รูปย่อสำหรับรุ่นเมื่อ $1",
        "filehist-nothumb": "ไม่มีรูปย่อ",
        "filehist-filesize": "ขนาดไฟล์",
        "filehist-comment": "ความเห็น",
        "imagelinks": "การใช้ไฟล์",
-       "linkstoimage": "มี $1 หน้าเชื่อมโยงมายังไฟล์นี้:",
+       "linkstoimage": "$1 หน้าต่อไปนี้โยงมาไฟล์นี้:",
        "linkstoimage-more": "มีหน้าเชื่อมโยงมาไฟล์นี้กว่า $1 หน้า\nรายการต่อไปนี้แสดงการเชื่อมโยง $1 หน้าแรกที่มายังไฟล์นี้เท่านั้น\nมี[[Special:WhatLinksHere/$2|รายการเต็ม]]",
        "nolinkstoimage": "ไม่มีหน้าเชื่อมโยงมายังไฟล์นี้",
        "morelinkstoimage": "ดู[[Special:WhatLinksHere/$1|การเชื่อมโยง]]มายังไฟล์นี้เพิ่มเติม",
        "allpagesto": "แสดงหน้าจบที่:",
        "allarticles": "หน้าทั้งหมด",
        "allinnamespace": "หน้าทั้งหมด (เนมสเปซ $1)",
-       "allpagessubmit": "à¸\94ู",
+       "allpagessubmit": "à¹\84à¸\9b",
        "allpagesprefix": "แสดงหน้าที่ขึ้นต้นด้วย:",
        "allpagesbadtitle": "ชื่อเรื่องนี้ไม่ถูกต้องหรือมีคำเติมหน้าข้ามภาษาหรือข้ามโครงการ \nอาจมีอักขระที่ไม่สามารถใช้ในชื่อเรื่องได้",
        "allpages-bad-ns": "{{SITENAME}} ไม่มีเนมสเปซ \"$1\"",
        "whatlinkshere-prev": "{{PLURAL:$1|ก่อนหน้า|ก่อนหน้า $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|ถัดไป|ถัดไป $1}}",
        "whatlinkshere-links": "← ลิงก์",
-       "whatlinkshere-hideredirs": "$1หà¸\99à¹\89าเปลี่ยนทาง",
+       "whatlinkshere-hideredirs": "$1à¸\81ารเปลี่ยนทาง",
        "whatlinkshere-hidetrans": "$1 ถูกรวมอยู่",
        "whatlinkshere-hidelinks": "$1 ลิงก์",
        "whatlinkshere-hideimages": "$1ลิงก์ไฟล์",
        "import-rootpage-nosubpage": "เนมสเปซ \"$1\" ของหน้าต้นทางไม่อนุญาตหน้าย่อย",
        "importlogpage": "ปูมการนำเข้า",
        "importlogpagetext": "นำเข้าไฟล์จากวิกิอื่น โดยผ่านทางผู้ดูแลระบบ",
-       "import-logentry-upload": "นำเข้า [[$1]] ผ่านการอัปโหลดแล้ว",
        "import-logentry-upload-detail": "นำเข้า $1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}",
-       "import-logentry-interwiki": "นำเข้าข้ามวิกิ $1 แล้ว",
        "import-logentry-interwiki-detail": "นำเข้า $1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}จาก $2",
        "javascripttest": "การทดสอบจาวาสคริปต์",
        "javascripttest-pagetext-noframework": "หน้านี้สงวนไว้สำหรับดำเนินงานการทดสอบจาวาสคริปต์",
        "tooltip-pt-anonuserpage": "หน้าผู้ใช้ของเลขที่อยู่ไอพีที่คุณกำลังใช้แก้ไข",
        "tooltip-pt-mytalk": "หน้าพูดคุยของคุณ",
        "tooltip-pt-anontalk": "อภิปรายเกี่ยวกับการแก้ไขจากเลขที่อยู่ไอพีนี้",
-       "tooltip-pt-preferences": "à¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99สà¹\88วà¸\99à¸\95ัว",
-       "tooltip-pt-watchlist": "รายà¸\81ารหà¸\99à¹\89าà¸\97ีà¹\88à¸\84ุà¸\93à¹\80à¸\9dà¹\89าà¸\94ูà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82",
+       "tooltip-pt-preferences": "à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\82อà¸\87à¸\84ุà¸\93",
+       "tooltip-pt-watchlist": "รายà¸\81ารหà¸\99à¹\89าà¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87à¹\80à¸\9dà¹\89าà¸\94ูà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81ลà¸\9bà¸\87",
        "tooltip-pt-mycontris": "รายการหน้าที่คุณเขียน",
-       "tooltip-pt-login": "ไม่จำเป็นต้องล็อกอินในการแก้ไข แต่แนะนำอย่างยิ่งให้ล็อกอิน",
+       "tooltip-pt-login": "ไม่จำเป็นต้องล็อกอิน แต่แนะนำอย่างยิ่งให้ล็อกอิน",
        "tooltip-pt-logout": "ล็อกเอาต์",
        "tooltip-pt-createaccount": "สนับสนุนให้คุณสร้างบัญชีและล็อกอิน แต่ไม่บังคับ",
        "tooltip-ca-talk": "อภิปรายเกี่ยวกับหน้าเนื้อหา",
        "tooltip-ca-watch": "เพิ่มหน้านี้เข้ารายการเฝ้าดู",
        "tooltip-ca-unwatch": "นำหน้านี้ออกจากรายการเฝ้าดู",
        "tooltip-search": "ค้นหา {{SITENAME}}",
-       "tooltip-search-go": "à¸\95รà¸\87à¹\84à¸\9bยัà¸\87หน้าที่ตรงกับชื่อนี้ (ถ้ามี)",
+       "tooltip-search-go": "à¹\84à¸\9bหน้าที่ตรงกับชื่อนี้ (ถ้ามี)",
        "tooltip-search-fulltext": "ค้นหาหน้าที่มีข้อความนี้",
        "tooltip-p-logo": "เยี่ยมชมหน้าหลัก",
        "tooltip-n-mainpage": "เยี่ยมชมหน้าหลัก",
        "tooltip-t-recentchangeslinked": "รายการปรับปรุงล่าสุดในหน้าที่ลิงก์จากหน้านี้",
        "tooltip-feed-rss": "ฟีดชนิดอาร์เอสเอส (RSS) ของหน้านี้",
        "tooltip-feed-atom": "ฟีดอะตอม (Atom) ของหน้านี้",
-       "tooltip-t-contributions": "รายà¸\81ารà¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¹\80à¸\82ียà¸\99à¹\82à¸\94ยà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89",
+       "tooltip-t-contributions": "รายà¸\81ารà¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\80à¸\82ียà¸\99",
        "tooltip-t-emailuser": "ส่งอีเมลถึงผู้ใช้นี้",
        "tooltip-t-info": "สารสนเทศเพิ่มเติมเกี่ยวกับหน้านี้",
        "tooltip-t-upload": "อัปโหลดไฟล์",
        "tooltip-ca-nstab-project": "ดูหน้าโครงการ",
        "tooltip-ca-nstab-image": "ดูหน้าภาพไฟล์",
        "tooltip-ca-nstab-mediawiki": "ดูข้อความระบบ",
-       "tooltip-ca-nstab-template": "à¸\94ูหà¸\99à¹\89าà¹\81มà¹\88à¹\81à¸\9aà¸\9a",
+       "tooltip-ca-nstab-template": "ดูแม่แบบ",
        "tooltip-ca-nstab-help": "ดูหน้าคำอธิบาย",
        "tooltip-ca-nstab-category": "ดูหน้าหมวดหมู่",
        "tooltip-minoredit": "ทำเครื่องหมายเป็นการแก้ไขเล็กน้อย",
-       "tooltip-save": "บันทึกการแก้ไข",
+       "tooltip-save": "บันทึกการแก้ไขของคุณ",
        "tooltip-preview": "แสดงตัวอย่างการเปลี่ยนแปลงของคุณ กรุณาใช้คำสั่งนี้ก่อนบันทึก!",
        "tooltip-diff": "แสดงการเปลี่ยนการต่อข้อความ",
        "tooltip-compareselectedversions": "แสดงความแตกต่างระหว่างสองรุ่นที่เลือกของหน้านี้",
        "tooltip-recreate": "สร้างหน้านี้อีกครั้งแม้เคยถูกลบ",
        "tooltip-upload": "เริ่มอัปโหลด",
        "tooltip-rollback": "\"ย้อนกลับฉุกเฉิน\" ใช้ย้อนการแก้ไขในหน้านี้ของผู้เขียนคนล่าสุดในคลิกเดียว",
-       "tooltip-undo": "\"ยà¹\89อà¸\99\" ย้อนการแก้ไขนี้และเปิดแบบแก้ไขในภาวะตัวอย่าง เปิดให้เพิ่มเหตุผลในคำอธิบาย",
+       "tooltip-undo": "\"à¸\81ารà¸\97ำà¸\81ลัà¸\9a\" ย้อนการแก้ไขนี้และเปิดแบบแก้ไขในภาวะตัวอย่าง เปิดให้เพิ่มเหตุผลในคำอธิบาย",
        "tooltip-preferences-save": "บันทึกการตั้งค่า",
-       "tooltip-summary": "à¹\83สà¹\88à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อสั้น ๆ",
+       "tooltip-summary": "à¹\83สà¹\88สรุà¸\9bสั้น ๆ",
        "common.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทุกสกิน */",
        "print.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ข้อมูลส่งออกเป็นสิ่งพิมพ์ */",
        "noscript.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ปิดการใช้งานจาวาสคริปต์ */",
        "file-info-size-pages": "$1 × $2 พิกเซล, ขนาดไฟล์: $3, ประเภท MIME: $4, $5 {{PLURAL:$5|หน้า|หน้า}}",
        "file-nohires": "ไม่มีความละเอียดสูงกว่านี้",
        "svg-long-desc": "ไฟล์ SVG, $1 × $2 พิกเซล พอเป็นพิธี, ขนาดไฟล์: $3",
+       "svg-long-desc-animated": "ไฟล์ SVG ขนาด $1 x $2 ขนาดไฟล์ $3",
        "svg-long-error": "ไฟล์ SVG ไม่ถูกต้อง: $1",
        "show-big-image": "ไฟล์ต้นฉบับ",
-       "show-big-image-other": "อื่นๆ {{PLURAL:$2|resolution|resolutions}}: $1.",
+       "show-big-image-preview": "ขนาดของตัวอย่างนี้: $1",
+       "show-big-image-other": "{{PLURAL:$2|ความละเอียด|ความละเอียด}}อื่น: $1",
        "show-big-image-size": "$1 × $2 พิกเซล",
        "file-info-gif-looped": "วนซ้ำ",
        "file-info-gif-frames": "$1 {{PLURAL:$1|เฟรม|เฟรม}}",
        "yesterday-at": "เมื่อวานเมื่อ $1 น.",
        "bad_image_list": "รูปแบบแสดงต่อไปนี้:\n\nเฉพาะรายการที่แสดง (ในแถวขึ้นต้นด้วย *) โดยลิงก์แรกของแต่ละแถวเป็นลิงก์ไปยังภาพที่เสีย\nโดยลิงก์ถัดไปเป็นข้อยกเว้น เช่น บทความที่ภาพถูกจัดในบรรทัดเดียวกับส่วนข้อความ",
        "metadata": "ข้อมูลแนบ",
-       "metadata-help": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มีà¸\82à¹\89อมูลà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิมà¹\81à¸\99à¸\9aà¹\84วà¹\89 à¸­à¸²à¸\88à¸\88ะมาà¸\88าà¸\81 à¸\81ลà¹\89อà¸\87à¸\94ิà¸\88ิà¸\97ัล à¸ªà¹\81à¸\81à¸\99à¹\80à¸\99อรà¹\8c à¸«à¸£à¸·à¸­à¹\80à¸\84รืà¹\88อà¸\87รัà¸\9aสà¹\88à¸\87à¸\88ีà¸\9eีà¹\80อส à¸­à¸¢à¹\88าà¸\87à¹\84รà¸\81à¹\87à¸\95ามà¸\82à¹\89อมูลà¸\97ีà¹\88à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89อาà¸\88à¸\96ูà¸\81à¸\94ัà¸\94à¹\81à¸\9bลà¸\87à¸\96à¹\89าà¹\84à¸\9fลà¹\8cà¸\95à¹\89à¸\99à¸\89à¸\9aัà¸\9aà¸\96ูà¸\81à¹\81à¸\81à¹\89à¹\84à¸\82à¸\88าà¸\81à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cอืà¹\88à¸\99",
+       "metadata-help": "à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89มีสารสà¸\99à¹\80à¸\97ศà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม à¸­à¸²à¸\88à¹\80à¸\9eิà¹\88มà¸\88าà¸\81à¸\81ลà¹\89อà¸\87à¸\96à¹\88ายรูà¸\9bà¸\94ิà¸\88ิà¸\97ัลหรือสà¹\81à¸\81à¸\99à¹\80à¸\99อรà¹\8cà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88อสรà¹\89าà¸\87หรือà¹\81à¸\9bลà¸\87ภาà¸\9eà¹\80à¸\9bà¹\87à¸\99à¸\94ิà¸\88ิà¸\97ัล\nหาà¸\81à¹\84à¸\9fลà¹\8cà¸\99ีà¹\89à¸\96ูà¸\81à¸\94ัà¸\94à¹\81à¸\9bรà¸\88าà¸\81สà¸\96าà¸\99ะà¸\95à¹\89à¸\99à¸\89à¸\9aัà¸\9a à¸£à¸²à¸¢à¸¥à¸°à¹\80อียà¸\94à¸\9aาà¸\87อยà¹\88าà¸\87อาà¸\88à¹\84มà¹\88สะà¸\97à¹\89อà¸\99à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\96ูà¸\81à¸\94ัà¸\94à¹\81à¸\9bลอยà¹\88าà¸\87สมà¸\9aูรà¸\93à¹\8c",
        "metadata-expand": "แสดงรายละเอียดขยาย",
        "metadata-collapse": "ซ่อนรายละเอียดขยาย",
        "metadata-fields": "เขตข้อมูลเมทาเดตาของภาพดังที่แสดงรายการไว้ในข้อความนี้ จะถูกรวมบนหน้าภาพเมื่อตารางเมทาเดตาถูกยุบ เขตข้อมูลอื่น ๆ จะถูกซ่อนโดยปริยาย\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-primarychromaticities": "โครมาติกของไพรมาริตี",
        "exif-ycbcrcoefficients": "สัมประสิทธิเมทริกซ์การเปลียนแปลงของสเปซสี",
        "exif-referenceblackwhite": "คู่จุดสีขาวและดำสำหรับอ้างอิง",
-       "exif-datetime": "วัà¸\99à¸\97ีà¹\88à¹\81ละà¹\80วลาà¸\9bรัà¸\9aà¸\9bรุà¸\87",
+       "exif-datetime": "วัà¸\99à¸\97ีà¹\88à¹\81ละà¹\80วลาà¹\80à¸\9bลีà¹\88ยà¸\99à¹\84à¸\9fลà¹\8c",
        "exif-imagedescription": "ชื่อภาพ",
        "exif-make": "ผู้ผลิตกล้อง",
-       "exif-model": "รุ่นกล้อง",
+       "exif-model": "รุ่นกล้องถ่ายรูป",
        "exif-software": "ซอฟต์แวร์ที่ใช้",
        "exif-artist": "ผู้สร้างสรรค์",
        "exif-copyright": "ผู้ทรงลิขสิทธิ์",
        "exif-pixelxdimension": "ความสูงของภาพ",
        "exif-usercomment": "ความเห็นผู้ใช้",
        "exif-relatedsoundfile": "ไฟล์เสียงที่เกี่ยวข้อง",
-       "exif-datetimeoriginal": "วัà¸\99à¸\97ีà¹\88à¹\81ละà¹\80วลาà¸\97ีà¹\88สรà¹\89าà¸\87",
-       "exif-datetimedigitized": "วัà¸\99à¸\97ีà¹\88à¹\81ละà¹\80วลาà¸\97ีà¹\88à¸\94ิà¸\88ิà¹\84à¸\97à¸\8bà¹\8c",
+       "exif-datetimeoriginal": "วัà¸\99à¸\97ีà¹\88à¹\81ละà¹\80วลาà¸\81ารà¸\81à¹\88อà¸\81ำà¹\80à¸\99ิà¸\94à¸\82à¹\89อมูล",
+       "exif-datetimedigitized": "วัà¸\99à¸\97ีà¹\88à¹\81ละà¹\80วลาà¸\81ารà¹\81à¸\9bลà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\94ิà¸\88ิà¸\97ัล",
        "exif-subsectime": "เสี้ยววินาที วันที่ เวลา",
        "exif-subsectimeoriginal": "เสี้ยววินาที วันที่ เวลาต้นฉบับ",
        "exif-subsectimedigitized": "เสี้ยววินาที วันที่ เวลาที่ดิจิไทซ์",
        "version-parser-function-hooks": "ฮุกที่มีฟังก์ชันตัวแจงส่วน",
        "version-hook-name": "ชื่อฮุก",
        "version-hook-subscribedby": "สนับสนุนโดย",
-       "version-version": "(รุ่น $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[ไม่มีชื่อ]",
        "version-license": "สัญญาอนุญาตมีเดียวิกิ",
        "version-poweredby-credits": "วิกินี้จัดทำโดย '''[https://www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2",
        "revdelete-uname-unhid": "ชื่อผู้ใช้ถูกแสดง",
        "revdelete-restricted": "เพิ่มการจำกัดกับผู้ดูแลระบบ",
        "revdelete-unrestricted": "ยกเลิกการจำกัดแก่ผู้ดูแลระบบ",
+       "logentry-block-block": "$1 บล็อก $3 โดยมีเวลาหมดอายุเมื่อ $5 $6",
+       "logentry-block-unblock": "$1 ปลดบล็อก $3",
+       "logentry-block-reblock": "$1 เปลี่ยนการตั้งค่าการบล็อกสำหรับ $3 โดยมีเวลาหมดอายุเมื่อ $5 $6",
+       "logentry-suppress-block": "$1 บล็อก $3 โดยมีเวลาหมดอายุเมื่อ $5 $6",
+       "logentry-suppress-reblock": "$1 เปลี่ยนการตั้งค่าการบล็อกสำหรับ $3 โดยมีเวลาหมดอายุเมื่อ $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|รวม}} $3 เข้ากับ $4 (รุ่นถึง $5)",
        "logentry-move-move": "$1 ย้ายหน้า $3 ไปยัง $4",
        "logentry-move-move-noredirect": "$1 ย้ายหน้า $3 ไปยัง $4 โดยไม่สร้างหน้าเปลี่ยนทางตามมา",
        "logentry-patrol-patrol": "$1 ทำเครื่องหมายว่ารุ่น $4 ของหน้า $3 ได้รับการตรวจสอบแล้ว",
        "logentry-patrol-patrol-auto": "$1 ทำเครื่องหมายโดยอัตโนมัติว่ารุ่น $4 ของหน้า $3 ได้รับการตรวจสอบแล้ว",
        "logentry-newusers-newusers": "บัญชีผู้ใช้ $1 ถูกสร้าง",
-       "logentry-newusers-create": "บัญชีผู้ใช้ $1 ถูกสร้างขึ้น",
+       "logentry-newusers-create": "บัญชีผู้ใช้ $1 ถูกสร้าง",
        "logentry-newusers-create2": "บัญชีผู้ใช้ $3 ถูกสร้างขึ้นโดย $1",
        "logentry-newusers-byemail": "บัญชีผู้ใช้ $3 ถูกสร้างขึ้นโดย $1 และส่งรหัสผ่านไปทางอีเมลแล้ว",
        "logentry-newusers-autocreate": "บัญชีผู้ใช้ $1 ถูกสร้างขึ้นอัตโนมัติ",
        "logentry-upload-revert": "$1 อัปโหลด $3",
        "rightsnone": "(ไม่มี)",
        "revdelete-summary": "คำอธิบายโดยย่อ",
-       "feedback-bugornote": "หากคุณได้อธิบายปัญหาทางเทคนิคในรายละเอียดแล้ว โปรด[$1 รายงานจุดบกพร่อง]\nมิฉะนั้น คุณสามารถแบบอย่างง่ายด้านล่าง ความเห็นของคุณจะถูกเพิ่มเข้าสู่ \"[$3 $2]\" ร่วมกับชื่อผู้ใช้ของคุณ",
-       "feedback-subject": "เรื่อง:",
-       "feedback-message": "ข้อความ:",
-       "feedback-cancel": "ยกเลิก",
-       "feedback-submit": "ส่งคำติชม",
        "feedback-adding": "เพิ่มคำติชมเข้าไปที่หน้า...",
-       "feedback-thanks": "ขอบคุณ! ผลป้อนกลับของคุณถูกโพสต์ไปยังหน้า \"[$2 $1]\" แล้ว",
-       "feedback-close": "เสร็จสิ้น",
        "feedback-bugcheck": "ยอดเยี่ยม! เพียงตรวจสอบว่าจุดบกพร่องนั้นมิใช่หนึ่งใน[$1 จุดบกพร่องที่ทราบแล้ว]",
        "feedback-bugnew": "ฉันตรวจสอบแล้ว รายงานจุดบกพร่องใหม่",
+       "feedback-bugornote": "หากคุณได้อธิบายปัญหาทางเทคนิคในรายละเอียดแล้ว โปรด[$1 รายงานจุดบกพร่อง]\nมิฉะนั้น คุณสามารถแบบอย่างง่ายด้านล่าง ความเห็นของคุณจะถูกเพิ่มเข้าสู่ \"[$3 $2]\" ร่วมกับชื่อผู้ใช้ของคุณ",
+       "feedback-cancel": "ยกเลิก",
+       "feedback-close": "เสร็จสิ้น",
+       "feedback-message": "ข้อความ:",
+       "feedback-subject": "เรื่อง:",
+       "feedback-submit": "ตกลง",
+       "feedback-thanks": "ขอบคุณ! ผลป้อนกลับของคุณถูกโพสต์ไปยังหน้า \"[$2 $1]\" แล้ว",
        "searchsuggest-search": "ค้นหา",
        "searchsuggest-containing": "มี...",
        "api-error-badaccess-groups": "คุณไม่ได้รับอนุญาตให้อัปโหลดไฟล์มายังวิกินี้",
        "mediastatistics-header-unknown": "ไม่ทราบ",
        "mediastatistics-header-drawing": "ภาพวาดเส้น (ภาพเวกเตอร์)",
        "mediastatistics-header-audio": "เสียง",
-       "mediastatistics-header-video": "วิดีทัศน์"
+       "mediastatistics-header-video": "วิดีทัศน์",
+       "headline-anchor-title": "โยงมาส่วนนี้",
+       "special-characters-group-latin": "ละติน",
+       "special-characters-group-latinextended": "ละตินส่วนขยาย",
+       "special-characters-group-ipa": "สัทอักษรสากล",
+       "special-characters-group-symbols": "สัญลักษณ์",
+       "special-characters-group-greek": "กรีก",
+       "special-characters-group-cyrillic": "ซีริลลิก",
+       "special-characters-group-arabic": "อาหรับ",
+       "special-characters-group-hebrew": "ฮีบรู",
+       "special-characters-group-bangla": "บังคลา",
+       "special-characters-group-telugu": "เตลูกู",
+       "special-characters-group-sinhala": "สิงหล",
+       "special-characters-group-gujarati": "คุชราต"
 }
index d90b67e..ce14aea 100644 (file)
        "delete-toobig": "Bu sahypanyň $1 {{PLURAL:$1|wersiýadan|wersiýadan}} agdyk uly özgerdiş geçmişi bar.\n{{SITENAME}} saýtynyň atdanlykda bökdelmegine ýol bermezlik maksady bilen beýle sahypalaryň öçürilmegi çäklendirilýär.",
        "delete-warning-toobig": "Bu sahypanyň $1 {{PLURAL:$1|wersiýadan|wersiýadan}} agdyk uly özgerdiş geçmişi bar.\nMuny öçürmek {{SITENAME}} maglumat bazasynyň amallaryna päsgel berip biler;\nseresaplyk bilen hereket ediň.",
        "rollback": "Özgerdişleri öňki katdyna getir",
-       "rollback_short": "Öňki katdyna getir",
        "rollbacklink": "öňki katdyna getir",
        "rollbackfailed": "Öňki katdyna getirmeklik şowsuz",
        "cantrollback": "Özgerdişi yzyna getirip bolmaýar;\niň soňky goşant goşan ulanyjy bu sahypanyň ýeke-täk awtory bolup durýar.",
        "watchlisttools-view": "Degişli üýtgeşmeleri görkez",
        "watchlisttools-edit": "Gözegçilik sanawyna göz aýla we redaktirle",
        "watchlisttools-raw": "Işlenmedik gözegçilik sanawyny redaktirle",
-       "unknown_extension_tag": "Näbelli giňeltme belligi \"$1\"",
        "duplicate-defaultsort": "'''Duýduryş''': Gaýybana \"$2\" sortlaýyş açary mundan ozalky \"$1\" sortlaýyş açaryny aradan aýyrýar.",
        "version": "Wersiýa",
        "version-extensions": "Gurulgy giňeltmeler",
        "version-parser-function-hooks": "Analizator funsiýasynyň ilgençekleri",
        "version-hook-name": "Ilgençegiň ady",
        "version-hook-subscribedby": "Abuna ýazylan",
-       "version-version": "(Wersiýa $1)",
+       "version-version": "($1)",
        "version-license": "Ygtyýarnama",
        "version-poweredby-credits": "Bu wiki '''[https://www.mediawiki.org/ MediaWiki]''' arkaly üpjün edilýär, awtorlyk hukugy © 2001-$1 $2.",
        "version-poweredby-others": "beýlekiler",
        "specialpages-group-wiki": "Wiki maglumatlar we gurallar",
        "specialpages-group-redirects": "Gönükdirmeli ýörite sahypalar",
        "specialpages-group-spam": "Spam gurallary",
+       "specialpages-group-developer": "Ösdürimçi gurallary",
        "blankpage": "Boş sahypa",
        "intentionallyblankpage": "Bu sahypa ýörite boş goýuldy.",
        "external_image_whitelist": "#Bu setiri bolşy ýaly goýuň<pre>\n#Tertipli aňlatma fragmentlerini (diňe // aralygyndaky bölegi) aşak goşuň\n#Bular daşarky (hotlink) suratlaryň URL-leri bilen deňeşdiriljekdir\n#Deň gelenler surat bolup görüner, galanlary bolsa diňe suratyň çykgydy hökmünde görkeziler\n# # bilen başlaýan setirler teswir hasap ediljekdir\n#Setirler baş we setir harplara duýgur däldir\n\n#Ähli tertipli aňlatma fragmentlerini bu setiriň üstüne goşuň. Bu setiri bolşy ýaly goýuň</pre>",
index e62c635..649f8e9 100644 (file)
@@ -13,7 +13,8 @@
                        "tl.wikipedia.org sysops",
                        "לערי ריינהארט",
                        "아라",
-                       "Ianlopez1115"
+                       "Ianlopez1115",
+                       "Leeheonjin"
                ]
        },
        "tog-underline": "Pagsasalungguhit ng link:",
        "disclaimers": "Mga pagtatanggi",
        "disclaimerpage": "Project:Pangkalahatang pagtatanggi",
        "edithelp": "Tulong sa pagbabago",
+       "helppage-top-gethelp": "Tulong",
        "mainpage": "Unang Pahina",
        "mainpage-description": "Unang Pahina",
        "policy-url": "Project:Patakaran",
        "delete-toobig": "May isang malaking kasaysayan ng pagbabago ang pahinang ito, mahigit sa $1 {{PLURAL:$1|pagbabago|mga pagbabago}}.\nIpanagbabawal ang pagbura ng ganyang mga pahina upang maiwasan ang hindi sinasadyang pagantala/paggambala sa {{SITENAME}}.",
        "delete-warning-toobig": "May malaking kasaysayan ng pagbabago ang pahinang ito, mahigit sa $1 {{PLURAL:$1|pagbabago|mga pagbabago}}.\nMaaaring makagambala/makaabala sa pagpapatakbo sa kalipunan ng dato ng {{SITENAME}};\nmagpatuloy na may pagiingat.",
        "rollback": "Mga pagbabagong may kaugnayan sa pagpapagulong na pabalik sa (mas) dati",
-       "rollback_short": "Pagulunging pabalik sa (mas) dati",
        "rollbacklink": "pagulunging pabalik sa (mas) dati",
        "rollbacklinkcount": "pagulunging pabalik ang $1 {{PLURAL:$1|pagbabago|mga pagbabago}}",
        "rollbacklinkcount-morethan": "pagulunging pabalik ang mahigit sa $1 {{PLURAL:$1|pagbabago|mga pagbabago}}",
        "import-logentry-interwiki": "Na-i-transwiki na ang $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|pagbabago|mga pagbabago}} mula sa $2",
        "javascripttest": "Pagsubok sa JavaScript",
-       "javascripttest-title": "Pinatatakbo ang mga pagsubok ng $1",
        "javascripttest-pagetext-noframework": "Nakalaan ang pahinang ito para sa pagpapatakbo ng mga pagsubok ng JavaScript.",
        "javascripttest-pagetext-unknownframework": "Hindi napag-aalamang balangkas ng pagsubok na \"$1\".",
        "javascripttest-pagetext-frameworks": "Mangyaring pumili ng isa sa sumusunod na mga  balangkas na pangsubok: $1",
        "javascripttest-pagetext-skins": "Pumili ng isang pabalat na patatakbuhan ng mga pagsubok:",
        "javascripttest-qunit-intro": "Tingnan ang [$1 dokumentasyon ng pagsubok] sa mediawiki.org.",
-       "javascripttest-qunit-heading": "Pook na subukan ng QUnit ng JavaScript ng MediaWiki",
        "tooltip-pt-userpage": "Ang iyong pahina ng tagagamit",
        "tooltip-pt-anonuserpage": "Ang pahina ng tagagamit para sa IP na iyong binabago bilang",
        "tooltip-pt-mytalk": "Ang iyong pahina ng usapan",
        "version-parser-function-hooks": "Mga pangkawit ng/sa tungkuling pambanghay (''parser'')",
        "version-hook-name": "Pangalan ng pangkawit",
        "version-hook-subscribedby": "Sinuskribi ng/ni/nina",
-       "version-version": "(Bersyon $1)",
+       "version-version": "($1)",
        "version-svn-revision": "(r$2)",
        "version-license": "Lisensiya",
        "version-poweredby-credits": "Ang wiking ito ay pinapatakbo ng '''[https://www.mediawiki.org/ MediaWiki]''', karapatang-ari © 2001-$1 $2.",
        "tags-tag": "Tatakan ang pangalan",
        "tags-display-header": "Anyo sa ibabaw ng mga talaan ng pagbabago",
        "tags-description-header": "Buong paglalarawan ng kahulugan",
+       "tags-source-header": "Pinagmulan",
        "tags-hitcount-header": "Natatakang mga pagbabago",
+       "tags-actions-header": "Mga hakbang",
+       "tags-source-none": "Hindi na ginagamit pa",
        "tags-edit": "baguhin",
+       "tags-delete": "Burahin",
        "tags-hitcount": "$1 {{PLURAL:$1|pagbabago|mga pagbabago}}",
+       "tags-create-reason": "Dahilan:",
+       "tags-create-submit": "Lumikha/Lumalang",
+       "tags-activate-reason": "Dahilan:",
+       "tags-deactivate-reason": "Dahilan:",
        "comparepages": "Paghambingin ang mga pahina",
        "compare-page1": "Pahina 1",
        "compare-page2": "Pahina 2",
        "logentry-newusers-autocreate": "Automatikong {{GENDER:$2|inilikha}} ang account ng tagagamit na $1",
        "rightsnone": "(wala)",
        "revdelete-summary": "buod ng pagbabago",
+       "feedback-adding": "Idinaragdag ang pakaing-tugon sa pahina...",
+       "feedback-back": "Magbalik",
+       "feedback-bugcheck": "Mahusay! Suriin lang na hindi pa ito isa sa [$1 nalalamang mga depekto].",
+       "feedback-bugnew": "Sinuri ko na. Mag-ulat ng panibagong sira",
        "feedback-bugornote": "Kung handa ka nang detalyadong maglarawan ng isang suliraning teknikal mangyaring [$1 iulat ang kamalian].\nO kaya, maaari mo ring gamitin ang pinadaling pormularyo sa ibaba.  Madadagdagan ang komento mo sa pahinang \"[$3 $2]\", kasama ang iyong pangalan ng tagagamit.",
-       "feedback-subject": "Paksa:",
-       "feedback-message": "Mensahe:",
        "feedback-cancel": "Huwag ituloy",
-       "feedback-submit": "Magbigay ng komento",
-       "feedback-adding": "Idinaragdag ang pakaing-tugon sa pahina...",
+       "feedback-close": "Nagawa na",
+       "feedback-external-bug-report-button": "Mag-habla ng teknikal na gawain",
+       "feedback-dialog-title": "I-sumite ang katugunan",
+       "feedback-dialog-intro": "Maaari mo nang gamitin ang madaling pormularyo na nasa ibaba upang i-sumite ang iyong katugunan. Madadagdag ang iyong komento sa pahinang $1, kasama ang iyong ngalan-tagagamit.",
+       "feedback-error-title": "Kamalian",
        "feedback-error1": "Kamalian: Hindi nakikilalang kinalabasan mula sa API",
        "feedback-error2": "Kamalian: Nabigo ang pagpatnugot",
        "feedback-error3": "Kamalian: Walang tugon mula sa API",
+       "feedback-message": "Mensahe:",
+       "feedback-subject": "Paksa:",
+       "feedback-submit": "I-sumite",
+       "feedback-termsofuse": "Pumapayag ako na magbibigay ng katugunan sang-ayon sa mga Tuntunin sa Paggamit.",
        "feedback-thanks": "Salamat! Ang katugunan mo ay naipaskil na sa pahinang \"[$2 $1]\".",
-       "feedback-close": "Nagawa na",
-       "feedback-bugcheck": "Mahusay! Suriin lang na hindi pa ito isa sa [$1 nalalamang mga depekto].",
-       "feedback-bugnew": "Sinuri ko na. Mag-ulat ng panibagong sira",
+       "feedback-useragent": "Ahente ng tagagamit:",
        "searchsuggest-search": "Maghanap",
        "searchsuggest-containing": "naglalaman ng ...",
        "api-error-badaccess-groups": "Hindi ka pinapayagang makapagkarga ng mga talaksan papunta sa wiking ito.",
index 9da0024..fbe35b5 100644 (file)
                        "Violetanka",
                        "Trockya",
                        "Aşilleus",
-                       "BatuhanBensoy"
+                       "BatuhanBensoy",
+                       "Mavrikant",
+                       "Ayrıntılı Bilgi",
+                       "Gokalpselamet",
+                       "Macofe"
                ]
        },
        "tog-underline": "Bağlantıların altını çiz:",
        "disclaimers": "Sorumluluk reddi",
        "disclaimerpage": "Project:Genel sorumluluk reddi",
        "edithelp": "Nasıl değiştirilir?",
+       "helppage-top-gethelp": "Yardım",
        "mainpage": "Ana Sayfa",
        "mainpage-description": "Ana sayfa",
        "policy-url": "Project:İlkeler",
        "readonly_lag": "Yedek sunucular ana sunucu ile güncellenmeye çalışılırken veritabanı otomatik olarak kilitlendi.",
        "internalerror": "Yazılım hatası",
        "internalerror_info": "İç hata: $1",
+       "internalerror-fatal-exception": "Tip \"$1\" hayati hata",
        "filecopyerror": "\"$1\"  \"$2\" dosyasına kopyalanamıyor.",
        "filerenameerror": "\"$1\" dosyasının ismi \"$2\" olarak değiştirilemedi.",
        "filedeleteerror": "\"$1\" dosyası silinemedi.",
        "createacct-benefit-heading": "{{SITENAME}} sizin gibi insanlar tarafından oluşturulur.",
        "createacct-benefit-body1": "{{PLURAL:$1|düzenleme|düzenleme}}",
        "createacct-benefit-body2": "{{PLURAL:$1|sayfa|sayfa}}",
-       "createacct-benefit-body3": "en son {{PLURAL:$1|katkıda bulunan|katkıda bulunan}}",
+       "createacct-benefit-body3": "en son {{PLURAL:$1|katkıda bulunan|katkıda bulunan}} kişi sayısı",
        "badretype": "Girdiğiniz şifreler birbirleriyle uyuşmuyor.",
        "userexists": "Girdiğiniz kullanıcı adı zaten kullanımda.\nLütfen farklı bir kullanıcı adı seçiniz.",
        "loginerror": "Oturum açma hatası.",
        "rev-deleted-event": "(kayıt ayrıntıları silindi)",
        "rev-deleted-user-contribs": "[kullanıcı adı veya IP adresi çıkarıldı - değişiklik katkılardan gizlendi]",
        "rev-deleted-text-permission": "Bu sayfa revizyonu '''silinmiş'''.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Silme kayıtlarında] ayrıntıları bulunabilir.",
+       "rev-suppressed-text-permission": "Sayfanın bu sürümü <strong>gizlenmiştir</strong>.\nAyrıntılar: [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
        "rev-deleted-text-unhide": "Bu sayfa revizyonu '''silinmiş'''.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Silme kayıtlarında] ayrıntıları bulunabilir.\nBir hizmetli olarak eğer devam ederseniz [$1 bu revizyonu hala görebilirsiniz].",
        "rev-suppressed-text-unhide": "Bu sayfa revizyonu '''bastırılmış'''.\n[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Durdurma kayıtlarında] ayrıntıları bulunabilir.\nBir hizmetli olarak eğer devam ederseniz [$1 bu revizyonu hala görebilirsiniz].",
        "rev-deleted-text-view": "Bu sayfa revizyonu '''silinmiş'''.\nBir hizmetli olarak sayfayı görebilirsiniz; [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silme kayıtlarında] ayrıntılar bulunabilir.",
        "prefs-personal": "Kullanıcı bilgileri",
        "prefs-rc": "Son değişiklikler",
        "prefs-watchlist": "İzleme listesi",
+       "prefs-editwatchlist": "İzleme listesini düzenle",
+       "prefs-editwatchlist-edit": "İzleme listesini gör ve düzenle",
+       "prefs-editwatchlist-raw": "Ham izleme listesini düzenle",
+       "prefs-editwatchlist-clear": "İzleme listesini temizle",
        "prefs-watchlist-days": "İzleme listesinde görüntülenecek gün sayısı:",
        "prefs-watchlist-days-max": "en fazla $1 {{PLURAL:$1|gün|gün}}",
        "prefs-watchlist-edits": "Genişletilmiş izleme listesinde gösterilecek değişiklik sayısı:",
        "prefs-help-signature": "Tartışma sayfalarındaki yorumlar \"<nowiki>~~~~</nowiki>\" ile imzalanmalıdır, bu imzanıza ve zaman damgasına dönüştürülür.",
        "badsig": "Geçersiz ham imza; HTML etiketlerini kontrol edin.",
        "badsiglength": "İmzanız çok uzun.\n$1 {{PLURAL:$1|karakterin|karakterin}} altında olmalı.",
-       "yourgender": "Nasıl açıklamayı tercih edersiniz?",
-       "gender-unknown": "Söylemek istemiyorsanız",
-       "gender-male": "Viki sayfalarını erkek olarak düzenliyorum",
-       "gender-female": "Viki sayfalarını kadın olarak düzenliyorum",
+       "yourgender": "Cinsel kimlik?",
+       "gender-unknown": "Açıklamak istemiyorum",
+       "gender-male": "Erkek",
+       "gender-female": "Kadın",
        "prefs-help-gender": "Bu tercih ayarı isteğe bağlıdır.\nYazılımda söz değerlerinin başlarında bulunan cinsiyete uygun gramerler için kullanılır.\nBu bilgiler herkes tarafından görülebilir.",
        "email": "E-posta",
        "prefs-help-realname": "Gerçek ismi vermek isteğe bağlıdır.\nEğer verirseniz yaptığınız çalışmalara ithafen kullanılabilir.",
        "import-rootpage-nosubpage": "Kök sayfanın \"$1\" ad alanı alt sayfalara izin vermiyor.",
        "importlogpage": "Aktarım günlüğü",
        "importlogpagetext": "Diğer vikilerden sayfaların değişiklik geçmişiyle idari içe aktarımları.",
-       "import-logentry-upload": "[[$1]] dosya yüklemesiyle içe aktarıldı",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizyon|revizyon}} içe aktarıldı",
-       "import-logentry-interwiki": "$1 transvikileşmiş",
        "import-logentry-interwiki-detail": "$2 sayfasından $1 {{PLURAL:$1|revizyon|revizyon}} içe aktarıldı",
        "javascripttest": "JavaScript denemesi",
        "javascripttest-pagetext-noframework": "Bu sayfa JavaScript testleri çalıştırmak için ayrılmıştır.",
        "javascripttest-pagetext-skins": "Testleri koşmak için bir tema seçin:",
        "javascripttest-qunit-intro": "mediawiki.org üzerinden [$1 deneme belgelerine] bakınız.",
        "tooltip-pt-userpage": "Kullanıcı sayfanız",
-       "tooltip-pt-anonuserpage": "The user page for the ip you",
+       "tooltip-pt-anonuserpage": "IP adresine ait bir kullanıcı sayfasını düzenliyorsunuz",
        "tooltip-pt-mytalk": "Mesaj sayfanız",
        "tooltip-pt-anontalk": "Bu IP adresinden yapılmış değişiklikleri tartış",
        "tooltip-pt-preferences": "Tercihleriniz (ayarlarınız)",
        "version-parser-function-hooks": "Derleyici fonksiyon çengelleri",
        "version-hook-name": "Çengel adı",
        "version-hook-subscribedby": "Abone olan",
-       "version-version": "($1 sürümü)",
+       "version-version": "($1)",
        "version-no-ext-name": "[isim yok]",
        "version-license": "MediaWiki Lisansı",
        "version-ext-license": "Lisans",
        "revdelete-uname-unhid": "kullanıcı adı gösterildi",
        "revdelete-restricted": "hizmetliler için uygulanmış kısıtlamalar",
        "revdelete-unrestricted": "hizmetliler için kaldırılmış kısıtlamalar",
+       "logentry-block-block": "$1 {{GENDER:$2|engelledi}} {{GENDER:$4|$3}} engelleme süresi: $5 $6",
+       "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} engelleme süresi $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} engelleme süresi $5 $6",
        "logentry-move-move": "$1, $3 sayfasını $4 sayfasına {{GENDER:$2|taşıdı}}",
        "logentry-move-move-noredirect": "$1, $3 sayfasını $4 sayfasına yönlendirme olmaksızın {{GENDER:$2|taşıdı}}",
        "logentry-move-move_redir": "$1, $3 sayfasını $4 sayfasına yönlendirme üzerinden {{GENDER:$2|taşıdı}}",
        "logentry-upload-overwrite": "$1 $3 dosyasının yeni bir sürümünü {{GENDER:$2|yükledi}}",
        "rightsnone": "(hiçbiri)",
        "revdelete-summary": "değişiklik özeti",
+       "feedback-adding": "Sayfaya geribildirim ekleniyor...",
+       "feedback-back": "Geri",
+       "feedback-bugcheck": "Harika! Sadece [bilinen $1 hatalarından] olmadığını kontrol et.",
+       "feedback-bugnew": "Kontrol ettim. Yeni hata bildir",
        "feedback-bugornote": "Eğer teknik bir problemi detaylarıyla açıklamaya hazırsanız lütfen [$1 bir hata raporlayın]. Diğer taraftan, aşağıdaki kolay formu kullanabilirsiniz. Yorumunuz, kullanıcı adınızla beraber \"[$3 $2]\" sayfasına eklenecektir.",
-       "feedback-subject": "Konu:",
-       "feedback-message": "Mesaj:",
        "feedback-cancel": "İptal",
-       "feedback-submit": "Geribildirimi Gönder",
-       "feedback-adding": "Sayfaya geribildirim ekleniyor...",
+       "feedback-close": "Tamamlandı",
        "feedback-error1": "Hata: Bilinmeyen API sonucu",
        "feedback-error2": "Hata: Düzenleme başarısız oldu",
        "feedback-error3": "Hata: API'den yanıt yok",
+       "feedback-message": "Mesaj:",
+       "feedback-subject": "Konu:",
+       "feedback-submit": "Gönder",
        "feedback-thanks": "Teşekkürler! Görüşleriniz \"[$2 $1]\" sayfasında paylaşılmıştır.",
-       "feedback-close": "Tamamlandı",
-       "feedback-bugcheck": "Harika! Sadece [bilinen $1 hatalarından] olmadığını kontrol et.",
-       "feedback-bugnew": "Kontrol ettim. Yeni hata bildir",
        "searchsuggest-search": "Ara",
        "searchsuggest-containing": "içeren...",
        "api-error-badaccess-groups": "Bu wiki için dosya yüklemenize izin verilmiyor.",
        "json-error-utf8": "Hatalı biçimlendirilmiş UTF-8 karakterleri bulundu, muhtemelen yanlış kodlanmış",
        "json-error-recursion": "Kodlanacak değeri bir veya daha fazla tekrarlı başvurular",
        "json-error-inf-or-nan": "Değerde kodlanacak bir veya daha fazla NAN veya INF değerleri",
-       "json-error-unsupported-type": "Kodlanamaz bir değer çeşidi girildi"
+       "json-error-unsupported-type": "Kodlanamaz bir değer çeşidi girildi",
+       "headline-anchor-title": "Bu bölüme bağlantı",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Genişletilmiş Latince",
+       "special-characters-group-ipa": "UFA",
+       "special-characters-group-symbols": "Simgeler",
+       "special-characters-group-greek": "Yunan",
+       "special-characters-group-cyrillic": "Kiril",
+       "special-characters-group-arabic": "Arap",
+       "special-characters-group-arabicextended": "Genişletilmiş Arapça",
+       "special-characters-group-persian": "Fars",
+       "special-characters-group-hebrew": "İbrani",
+       "special-characters-group-bangla": "Bengalce",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gücerat",
+       "special-characters-group-thai": "Tay",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Kmer"
 }
index 98dc382..49d66ac 100644 (file)
@@ -21,7 +21,8 @@
                        "Рашат Якупов",
                        "Умар",
                        "아라",
-                       "Derslek"
+                       "Derslek",
+                       "Macofe"
                ]
        },
        "tog-underline": "Сылтамаларның астына сызу:",
        "mypage": "Бит",
        "mytalk": "Бәхәс бите",
        "anontalk": "Бу IP адресы өчен бәхәс бите",
-       "navigation": "Ð\9aÒ¯Ñ\87Ò¯",
+       "navigation": "Ð\9dавигаÑ\86иÑ\8f",
        "and": "&#32;һәм",
        "qbfind": "Эзләү",
        "qbbrowse": "Карау",
        "history": "Битнең тарихы",
        "history_short": "Тарих",
        "updatedmarker": "соңгы керүемнән соң яңартылган",
-       "printableversion": "Бастыру версиясе",
+       "printableversion": "Басма версиясе",
        "permalink": "Даими сылтама",
        "print": "Бастыру",
        "view": "Карау",
        "pool-timeout": "Кысылуның  вакыты узды",
        "pool-queuefull": "Сорауларны саклау  бите тулы",
        "pool-errorunknown": "Билгесез  хата",
+       "poolcounter-usage-error": "$1: куллану хатасы",
        "aboutsite": "{{SITENAME}} турында",
        "aboutpage": "Project:Тасвирлама",
-       "copyright": "Мәгълүмат $1 буенча таратыла.",
+       "copyright": "Мәгълүмат $1 буенча таратыла (әгәр башкасы күрсәтелмәсә).",
        "copyrightpage": "{{ns:project}}:Авторлык хокуклары",
        "currentevents": "Хәзерге вакыйгалар",
        "currentevents-url": "Project:Хәзерге вакыйгалар",
        "disclaimers": "Җаваплылыктан баш тарту",
        "disclaimerpage": "Project:Җаваплылыктан баш тарту",
        "edithelp": "Үзгәртү буенча ярдәм",
+       "helppage-top-gethelp": "Ярдәм",
        "mainpage": "Баш бит",
        "mainpage-description": "Баш бит",
        "policy-url": "Project:Кагыйдәләр",
        "privacypage": "Project:Яшеренлек сәясәте",
        "badaccess": "Керү хатасы",
        "badaccess-group0": "Сез сораган гамәлне башкара алмыйсыз.",
-       "badaccess-groups": "Соралган гамәлне $1 {{PLURAL:$2|1=төркеменең|төркеменең}} кулланучылары гына башкара ала.",
+       "badaccess-groups": "Соралган гамәлне $1 {{PLURAL:$2|1=төркеме|төркемнәренең}} кулланучылары гына башкара ала.",
        "versionrequired": "MediaWikiның $1 версиясе таләп ителә",
        "versionrequiredtext": "Бу бит белән эшләү өчен MediaWikiның $1 версиясе кирәк. [[Special:Version|Кулланылучы программа версиясе турында мәгълүмат битен]] кара.",
        "ok": "OK",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "retrievedfrom": "Чыганагы — \"$1\"",
        "youhavenewmessages": "Сездә $1 бар ($2).",
-       "youhavenewmessagesfromusers": "Сезгә {{PLURAL:$3|$3 кулланучыдан}} $1 килде ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Сезгә}} {{PLURAL:$3|$3 кулланучыдан}} $1 килде ($2).",
        "youhavenewmessagesmanyusers": "Сез бик күп кулланучыдан $1 алдыгыз ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|яңа хәбәр}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|1=соңгы үзгәртү|соңгы үзгәртүләр}}",
+       "newmessageslinkplural": "{{PLURAL:$1|яңа хәбәр|999=яңа хәбәрләр}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|1=соңгы үзгәртү|соңгы үзгәртүләр}}\nсоңгы {{PLURAL:$1|үзгәртү|999=үзгәртү}}",
        "youhavenewmessagesmulti": "Сезгә монда яңа хәбәрләр бар: $1",
        "editsection": "үзгәртү",
        "editold": "үзгәртү",
        "hidetoc": "яшерү",
        "collapsible-collapse": "Төрү",
        "collapsible-expand": "Ачу",
+       "confirmable-confirm": "{{GENDER:$1|Шулаймы}}?",
        "confirmable-yes": "Әйе",
        "confirmable-no": "Юк",
        "thisisdeleted": "$1 карарга яки торгызырга телисезме?",
        "viewdeleted": "$1 карарга телисезме?",
-       "restorelink": "{{PLURAL:$1|1=1 бетерелгән үзгәртүне|$1 бетерелгән үзгәртүне}}",
+       "restorelink": "{{PLURAL:$1|бер бетерелгән үзгәртүне|$1 бетерелгән үзгәртүне}}",
        "feedlinks": "Шушылай:",
        "feed-invalid": "Язылу каналы тибы ялгыш",
        "feed-unavailable": "Синдикация тасмасы ябык",
        "nospecialpagetext": "<strong>Сез сорый торган махсус бит юк.</strong>\n\nМахсус битләр исемлеген карагыз: [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Хата",
        "databaseerror": "Мәгълүматлар базасында хата",
+       "databaseerror-textcl": "Мәгълүмат базасында хата чыкты",
+       "databaseerror-query": "Сорату: $1",
+       "databaseerror-function": "Функция: $1",
+       "databaseerror-error": "Хата: $1",
        "laggedslavemode": "Игътибар: биттә соңгы яңартулар күрсәтелмәгән булырга мөмкин.",
        "readonly": "Мәгълүматлар базасына язу ябылган",
        "enterlockreason": "Ябылу сәбәбен һәм вакытын күрсәтегез.",
        "filerenameerror": "«$1» файлының исемен «$2» исеменә алыштырып булмый.",
        "filedeleteerror": "«$1» файлын бетереп булмый.",
        "directorycreateerror": "«$1» директориясен ясап булмый.",
+       "directoryreadonlyerror": "«$1» каталогы уку өчен генә.",
+       "directorynotreadableerror": "«$1» каталогы укылмый.",
        "filenotfound": "«$1» файлын табып булмый.",
        "unexpected": "Көтелмәгән кыймәт: «$1»=«$2».",
        "formerror": "Хата: форма мәгълүматларын тапшырып булмый",
        "delete-hook-aborted": "Үзгәртү махсус процедура тарафыннан кире кагыла.\nСәбәпләре китерелми.",
        "badtitle": "Яраксыз исем",
        "badtitletext": "Битнең соралган исеме дөрес түгел, буш яисә телъара яки интервики исеме дөрес күрсәтелмәгән. Исемдә тыелган символлар кулланылган булырга мөмкин.",
-       "perfcached": "Бу мәгълүматлар кэштан алынган, аларда соңгы үзгәртүләр булмаска мөмкин. Кэшта иң күбе {{PLURAL:$1|язма}} саклана.",
-       "perfcachedts": "Бу мәгълүматлар кэштан алынган, ул соңгы тапкыр $1 яңартылды. Кэшта иң күбе  {{PLURAL:$4|язма}} саклана",
+       "perfcached": "Бу мәгълүматлар кэштан алынган, аларда соңгы үзгәртүләр булмаска мөмкин. Кэшта иң күбе {{PLURAL:$1|язма|$1 язмалар}}  саклана.",
+       "perfcachedts": "Бу мәгълүматлар кэштан алынган, ул соңгы тапкыр $1 яңартылды. Кэшта иң күбе {{PLURAL:$4|язма}} саклана",
        "querypage-no-updates": "Хәзер бу битне яңартып булмый. Монда күрсәтелгән мәгълүматлар кабул ителмәячәк.",
        "viewsource": "Карау",
        "viewsource-title": "$1 битенең яхма текстын карау",
        "viewsourcetext": "Сез бу битнең башлангыч текстын карый һәм күчерә аласыз:",
        "viewyourtext": "Сез '''үз төзәтмәләрегезне''' бу сәхифәдә карый һәм чыгарылма текстны күчермәли аласыз:",
        "protectedinterface": "Бу биттә программа тәэминатының интерфейс хәбәрләре бар. Вандализмга каршы көрәш сәбәпле, бу битне үзгәртү тыела. Әлеге хәбәрнең тәрҗемәсен өстәү яки үзгәртү өчен, зинһар өчен, MediaWiki [//translatewiki.net/ translatewiki.net] тәрҗемәләү сайтын кулланыгыз.",
-       "editinginterface": "'''Игътибар:''' Сез программа тәэминатының интерфейс тексты булган битне үзгәртәсез. Бу башка кулланучыларга да тәэсир итәчәк. Тәрҗемә өчен [//translatewiki.net/wiki/Main_Page?setlang=tt-cyrl translatewiki.net] локализацияләү проектын кулланыгыз.",
+       "editinginterface": "<strong>Игътибар:</strong> Сез программа тәэминатының интерфейс тексты булган битне үзгәртәсез. Бу башка кулланучыларга да тәэсир итәчәк.",
+       "translateinterface": "Бу хәбәрнең текстын үзгәртү өчен яки өстәмәләр кертү өчен MediaWiki җирләштерү сайтын кулланыгыз [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "Бу бит үзгәртүләрдән сакланган, чөнки ул каскадлы саклау кабул ителгән {{PLURAL:$1|1=биткә|битләргә}} өстәлгән:\n$2",
        "namespaceprotected": "'''$1''' исем киңлегендәге битләрне үзгәртү өчен сезнең рөхсәтегез юк.",
        "customcssprotected": "Сез бу CSS-сәхифәне үзгәртә алмыйсыз, чөнки монда башка кулланучының шәхси көйләнмәләре саклана",
        "createacct-email-ph": "Электрон почта юлламагызны языгыз",
        "createaccountmail": "электрон почта аша",
        "createaccountreason": "Сәбәп:",
+       "createacct-submit": "Хисап язмасы төзү",
+       "createacct-benefit-heading": "{{SITENAME}} — сезнең шикелле кешеләрнең хезмәте.",
+       "createacct-benefit-body1": "{{PLURAL:$1|төзәтмә}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|мәкалә}}",
+       "createacct-benefit-body3": "Соңгы вакытта {{PLURAL:$1|кулланучы}}",
        "badretype": "Кертелгән серсүзләр бер үк түгел.",
        "userexists": "Кертелгән исем кулланыла.\nЗинһар, башка исем сайлагыз.",
        "loginerror": "Керү хатасы",
        "loginlanguagelabel": "Тел: $1",
        "suspicious-userlogout": "Сезнең эшчәнлекне бетерү соравыгыз кире кагылды, чөнки ул ялгыш браузер яисә кэшлаучы прокси аша җибәрелергэ мөмкин.",
        "pt-login": "Керү",
+       "pt-login-button": "Керү",
        "pt-createaccount": "Яңа кулланучыны теркәү",
        "pt-userlogout": "Чыгу",
        "php-mail-error-unknown": "PHP mail() функциясендә билгесез хата",
        "semiprotectedpagewarning": "'''Кисәтү:''' бу бит якланган. Аны теркәлгән кулланучылар гына үзгәртә ала.\nАста бу битне күзәтү көндәлеге бирелгән:",
        "cascadeprotectedwarning": "'''Кисәтү:''' Бу битне идарәчеләр гына үзгәртә ала. Сәбәбе: ул {{PLURAL:$1|каскадлы яклау исемлегенә кертелгән}}:",
        "titleprotectedwarning": "'''Кисәтү: Мондый исемле бит якланган, аны үзгәртү өчен [[Special:ListGroupRights|тиешле хокукка]] ия булу зарур.'''\nАста күзәтү көндәлегендәге соңгы язма бирелгән:",
-       "templatesused": "Бу биттә кулланылган {{PLURAL:$1|1=үрнәк|үрнәкләр}}:",
+       "templatesused": "Бу биттә кулланылган {{PLURAL:$1|1=калып|калыплар}} :",
        "templatesusedpreview": "Алдан каралучы биттә кулланылган {{PLURAL:$1|1=үрнәк|үрнәкләр}}:",
        "templatesusedsection": "Бу бүлектә кулланылган {{PLURAL:$1|1=үрнәк|үрнәкләр}}:",
        "template-protected": "(якланган)",
        "template-semiprotected": "(өлешчә якланган)",
-       "hiddencategories": "Бу бит $1 {{PLURAL:$1|яшерен төркемгә}} керә:",
+       "hiddencategories": "Бу бит $1 {{PLURAL:$1|яшерен төркемгә|$1 яшерен төркемнәргә}} керә:",
        "nocreatetext": "{{SITENAME}}: сайтта яңа битләр төзү чикләнгән.\nСез артка кайтып, төзелгән битне үзгәртә аласыз. [[Special:UserLogin|Керергә яисә теркәлергә]] тәгъдим ителә.",
        "nocreate-loggedin": "Сезгә яңа битләр төзү хокукы бирелмәгән.",
        "sectioneditnotsupported-title": "Бүлекләрне үзгәртү рөхсәт ителми.",
        "currentrev": "Хәзерге юрама",
        "currentrev-asof": "Хәзерге юрама, $1",
        "revisionasof": "$1 юрамасы",
-       "revision-info": "Юрама: $1; $2",
+       "revision-info": "$1 юрамасы; {{GENDER:$6|$2}}$7",
        "previousrevision": "← Алдагы юрама",
        "nextrevision": "Чираттагы юрама →",
        "currentrevisionlink": "Хәзерге юрама",
        "mergelog": "Берләштерүләр көндәлеге",
        "revertmerge": "Бүлү",
        "history-title": "$1 битенең үзгәртү тарихы",
+       "difference-title": "$1 — юрамалар арасындагы аермалар",
        "lineno": "$1 юл:",
        "compareselectedversions": "Сайланган юрамаларны чагыштыру",
        "showhideselectedversions": "Сайланган юрамаларны күрсәтү/яшерү",
        "editundo": "үткәрмәү",
+       "diff-multi-sameuser": "(шул ук кулланучының {{PLURAL:$1|бер арадаш юрамасы|$1 арадаш юрамасы}} күрсәтелмәгән)",
+       "diff-multi-otherusers": "({{PLURAL:$2|Башка бер кулланучының|$2 кулланучының}} {{PLURAL:$1|бер арадаш юрамасы|$1 арадаш юрамасы}} күрсәтелмәгән)",
+       "diff-multi-manyusers": "($2 күбрәк {{PLURAL:$2|кулланучының|кулланучының}} {{PLURAL:$1|Бер арадаш юрамасы|$1 арадаш юрамасы}} күрсәтелмәгән)",
        "searchresults": "Эзләү нәтиҗәләре",
        "searchresults-title": "«$1» өчен эзләү нәтиҗәләре",
        "notextmatches": "Тиңдәш текстлы битләр юк",
        "prevn": "алдагы {{PLURAL:$1|$1}}",
        "nextn": "чираттагы {{PLURAL:$1|$1}}",
        "prevn-title": "Алдагы $1  {{PLURAL:$1|язма}}",
-       "nextn-title": "Киләсе $1  {{PLURAL:$1|язма}}",
+       "nextn-title": "Киләсе $1 {{PLURAL:$1|язма|язма}}",
        "shown-title": "Сәхифәдә $1 {{PLURAL:$1|1=язма|язма}} күрсәтелсен",
        "viewprevnext": "Күрсәтелүе: ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-exists": "'''Бу вики-проекта «[[:$1]]» исемле бит бар инде'''",
+       "searchmenu-exists": "<strong>Бу вики-проектта «[[:$1]]» исемле бит бар инде</strong>{{PLURAL:$2|0=|Башка эзләү нәтиҗәләрен дә карап ал.}}",
        "searchmenu-new": "'''«[[:$1]]»  исемле яңа бит ясау'''",
-       "searchprofile-articles": "Төп битләр",
+       "searchprofile-articles": "Төп битләр (мәкаләләр)",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Һәркайда",
        "searchprofile-advanced": "Киңәйтелгән",
        "searchprofile-articles-tooltip": "$1 дә эзләү",
        "searchprofile-images-tooltip": "Файллар эзләү",
-       "searchprofile-everything-tooltip": "Барлык битләрдә дә эзләү",
+       "searchprofile-everything-tooltip": "Барлык битләрдән эзләү",
        "searchprofile-advanced-tooltip": "Бирелгән исемнәр мәйданында эзләү",
-       "search-result-size": "$1 ({{PLURAL:$2|$2 сүз}})",
+       "search-result-size": "$1 ({{PLURAL:$2|1 сүз|$2 сүз}})",
        "search-result-category-size": "{{PLURAL:$1|1=1 әгъза|$1 әгъза}} ({{PLURAL:$2|1=1 асттөркем|$2 асттөркем}}, {{PLURAL:$3|1=1 файл|$3 файл}})",
        "search-redirect": "(юнәлтү $1)",
        "search-section": "($1 бүлеге)",
+       "search-category": "($1 категориясе)",
+       "search-file-match": "(файл эчтәлеге белән туры килә)",
        "search-suggest": "Бәлки, сез моны эзлисез: $1",
        "search-interwiki-caption": "Тугандаш проектлар",
        "search-interwiki-default": "$1 нәтиҗә:",
        "search-interwiki-more": "(тагын)",
-       "search-relatedarticle": "Бәйләнгән",
-       "searchrelated": "бәйләнгән",
+       "search-relatedarticle": "Бәйле",
+       "searchrelated": "бәйле",
        "searchall": "барлык",
        "showingresults": "Аста № '''$2''' {{PLURAL:$1|башлап}} '''$1''' {{PLURAL:$1|результат}} күрсәтелгән.",
-       "search-nonefound": "Сорауга туры килгән җаваплар табылмады.",
+       "search-nonefound": "Сорауга туры килгән нәтиҗәләр табылмады.",
        "powersearch-legend": "Өстәмә эзләү",
        "powersearch-ns": "исемнәрендә эзләү",
-       "powersearch-togglelabel": "Ð\9aиÑ\80е ÐºÐ°Ð³Ñ\8bÑ\83:",
+       "powersearch-togglelabel": "ТамгалаÑ\80га:",
        "powersearch-toggleall": "Барысы",
-       "powersearch-togglenone": "Бирни дә юк",
-       "search-external": "Тышкы эзләү",
+       "powersearch-togglenone": "Берни юк",
+       "powersearch-remember": "Сайланганны алдагы эзләүләр өчен истә калдырырга",
+       "search-external": "Читтән эзләү",
+       "search-error": "Эзләгән вакытта хата килеп чыкты:$1",
        "preferences": "Көйләнмәләр",
        "mypreferences": "Көйләнмәләр",
-       "prefs-edits": "Үзгәртүләр исәбе:",
+       "prefs-edits": "Төзәтмәләр саны:",
+       "prefsnologintext2": "Көйләнмәләрне үзгәртү өчен хисап язмагыз белән керегез",
        "prefs-skin": "Күренеш",
        "skin-preview": "Алдан карау",
-       "datedefault": "Баштагы көйләнмәләр",
+       "datedefault": "Башлангыч көйләнмәләр",
        "prefs-labs": "Сынаулы мөмкинчелекләр",
-       "prefs-personal": "Шәхси мәгълүматлар",
-       "prefs-rc": "Соңгы үзгәртүләр",
+       "prefs-user-pages": "Кулланучы битләре",
+       "prefs-personal": "Шәхси мәгълүмат",
+       "prefs-rc": "Соңгы төзәтмәләр",
        "prefs-watchlist": "Күзәтү исемлеге",
-       "prefs-watchlist-days": "Күзәтү исемлегендә күрсәтелгән көн саны:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|1=day|days}}",
-       "prefs-watchlist-edits": "Киңәйтелгән күзәтү исемлегендә үзгәртүләрнең иң югары исәбе:",
+       "prefs-editwatchlist": "Күзәтү исемлеген үзгәртү",
+       "prefs-editwatchlist-label": "Күзәтү исемлеге язмаларын үзгәртү:",
+       "prefs-editwatchlist-edit": "Күзәтү исемлегеннән исемнәрне карау һәм сөртү",
+       "prefs-editwatchlist-raw": "Күзәтү исемлеген текстсыман үзгәртү",
+       "prefs-editwatchlist-clear": "Күзәтү исемлеген тазарту",
+       "prefs-watchlist-days": "Күзәтү исемлегендә көннәр санын күрсәтергә:",
+       "prefs-watchlist-days-max": "Иң күбе $1 {{PLURAL:$1|1=көн|көн}}",
+       "prefs-watchlist-edits": "Киңәйтелгән күзәтү исемлегендә күрсәтелүче төзәтмәләрнең максималь саны:",
        "prefs-watchlist-edits-max": "Максимум сан: 1000",
        "prefs-watchlist-token": "Күзәтү исемлеге токены:",
        "prefs-misc": "Башка көйләнмәләр",
        "prefs-resetpass": "Серсүзне үзгәртү",
-       "prefs-email": "E-mail көйләүләре",
+       "prefs-email": "E-mail көйләнмәләре",
        "prefs-rendering": "Күренеш",
        "saveprefs": "Саклау",
-       "restoreprefs": "Баштагы көйләнмәләрне кире кайтару",
-       "prefs-editing": "Үзгәртү",
+       "restoreprefs": "Башлангыч көйләнмәләрне кире кайтару",
+       "prefs-editing": "Төзәтү",
        "rows": "Юллар:",
        "columns": "Баганалар:",
        "searchresultshead": "Эзләү",
        "userrights-lookup-user": "Кулланучы төркемнәре белән идарә итү",
        "userrights-user-editname": "Кулланучының исемен кертегез:",
        "editusergroup": "Кулланучының төркемнәрен алмаштыру",
-       "editinguser": "'''[[User:$1|$1]]''' кулланучысының хокукларын үзгәртү ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+       "editinguser": "Кулланучы <strong>[[User:$1|$1]]</strong> $2 хокукларын үзгәртү",
        "userrights-editusergroup": "Кулланучының төркемнәрен алмаштыру",
        "saveusergroups": "Кулланучы төркемнәрен саклау",
        "userrights-groupsmember": "Әгъза:",
        "userrights-reason": "Сәбәп:",
        "userrights-no-interwiki": "Сезнең башка викиларда кулланучыларның хокукларын үзгәртергә хокукларыгыз юк.",
        "userrights-nodatabase": "Бирелгән $1 базасы юк яисә  локаль булып тормый.",
-       "userrights-changeable-col": "Сезнең тарафтан үзгәртә ала торган төркемнәр",
-       "userrights-unchangeable-col": "Сезнең тарафтан үзгәртә алмый торган төркемнәр",
+       "userrights-nologin": "Кулланучыларга вәкаләтләр билгеләү өчен идарәче хисап язмасы белән [[Special:UserLogin|керергә кирәк]]",
+       "userrights-notallowed": "Сезнең кулланучыларга вәкаләтләр тапшырырга яки кире алырга хокукы юк.",
+       "userrights-changeable-col": "Сезнең тарафтан үзгәртелми торган төркемнәр",
+       "userrights-unchangeable-col": "Сезнең тарафтан үзгәртелми торган төркемнәр",
        "userrights-irreversible-marker": "$1*",
+       "userrights-conflict": "Кулланучы хокукларын үзгәртү конфликты! Төзәтмәләрегезне тикшерегез, аннары кабатлагыз.",
+       "userrights-removed-self": "Сез үзегезне хокукларыгыздан мәхрүм иттегез. Шул сәбәпле сез бу сәхифәгә башка керә алмыйсыз.",
        "group": "Төркем:",
        "group-user": "Кулланучылар",
        "group-autoconfirmed": "Авторасланган кулланучы",
        "group-bot": "Ботлар",
        "group-sysop": "Идарәчеләр",
        "group-bureaucrat": "Бюрократлар",
-       "group-suppress": "ТикÑ\88еÑ\80Ò¯Ñ\87еләр",
+       "group-suppress": "Ð\9dазиÑ\80ләр",
        "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|ТикÑ\88еÑ\80Ò¯Ñ\87е}}",
+       "group-suppress-member": "{{GENDER:$1|Ð\9dазиÑ\80}}",
        "grouppage-user": "{{ns:project}}:Кулланучылар",
        "grouppage-autoconfirmed": "{{ns:project}}:Авторасланган кулланучылар",
        "grouppage-bot": "{{ns:project}}:Ботлар",
        "grouppage-sysop": "{{ns:project}}:Идарәчеләр",
        "grouppage-bureaucrat": "{{ns:project}}:Бюрократлар",
-       "grouppage-suppress": "{{ns:project}}:ТикÑ\88еÑ\80Ò¯Ñ\87еләр",
+       "grouppage-suppress": "{{ns:project}}:Ð\9dазиÑ\80ләр",
        "right-read": "Битләрне карау",
        "right-edit": "Битләрне үзгәртү",
        "right-createpage": "битләр ясау (бәхәс булмаганнарын)",
        "right-createtalk": "бәхәс битен ясау",
-       "right-createaccount": "яңа кулланучы битен ясау",
-       "right-minoredit": "\"кече үзгәртү\" тамгасын кую",
+       "right-createaccount": "яңа кулланучы хисап язмасын ясау",
+       "right-minoredit": "\"кече төзәтмә\" тамгасын кую",
        "right-move": "Битләрне күчерү",
+       "right-move-subpages": "Битләрне асбитләр белән бергә күчерү",
+       "right-move-categorypages": "төркемдәге битләрне күчерү",
        "right-movefile": "файлларның исемен алмаштыру",
+       "right-suppressredirect": "Элекке исемнән юнәлтү ясамыйча исемне алмаштыру",
        "right-upload": "файлларны йөкләү",
+       "right-reupload": "Булган файллар өстеннән язарга",
        "right-delete": "битләрне бетерү",
        "right-editinterface": "Кулланучы интерфейсын үзгәртү",
        "newuserlogpage": "Кулланучыларны теркәү көндәлеге",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|күзәтеп тора кулланучы}}]",
        "rc_categories": "Төркемнәрдә генә тора («|» бүлүче)",
        "rc_categories_any": "Һәрбер",
+       "rc-change-size-new": "Төзәтмәдән соң күләме: $1 {{PLURAL:$1|байт|байт|байт}}",
        "newsectionsummary": "/* $1 */ яңа бүлек",
        "rc-enhanced-expand": "Ваклыкларны күрсәтү",
        "rc-enhanced-hide": "Ваклыкларны яшерү",
        "suppress": "Яшерү",
        "booksources": "Китап чыганаклары",
        "booksources-search-legend": "Китап чыганакларыны эзләү",
+       "booksources-search": "Эзләү",
        "booksources-text": "Әлеге биттә күрсәтелгән сылтамалар ярәмендә сезнең кызыксындырган китап буенча өстәмә мәгълүматлар табарга мөмкин. Болар интернет-кибетләр һәм китапханә җыентыгында эзләүче системалар.",
        "booksources-invalid-isbn": "Бирелгән ISBN саны бәлки хаталдыр. Зинһар, бирелгән саннарны яңадан тикшерегез.",
        "specialloguserlabel": "Кулланучы:",
        "deletereason-dropdown": "* Бетерүнең сәбәпләре\n** вандаллык\n** автор соравы буенча\n** автор хокукларын бозу",
        "delete-edit-reasonlist": "Сәбәпләр исемлеген үзгәртү",
        "rollbacklink": "кире кайтару",
+       "rollbacklinkcount": "$1 {{PLURAL:$1|төзәтмәне}} кире кагу",
        "editcomment": "Үзгәртү өчен тасвир: \"''$1''\".",
        "revertpage": "[[Special:Contributions/$2|$2]] үзгәртүләре ([[User talk:$2|бәхәс]])  [[User:$1|$1]] юрамасына кадәр кире кайтарылды",
        "protectlogpage": "Яклану көндәлеге",
        "import-revision-count": "$1 {{PLURAL:$1|юрама|юрама|юрама}}",
        "importnopages": "Импортлау өчен битләр юк.",
        "importlogpage": "Кертү көндәлеге",
-       "import-logentry-interwiki": "«$1» — викиара  импортлау",
        "tooltip-pt-userpage": "Кулланучы битегез",
        "tooltip-pt-mytalk": "Бәхәс битегез",
        "tooltip-pt-preferences": "Көйләнмәләрегез",
        "tooltip-pt-mycontris": "Сезнең кертеменгезне исемлеге",
        "tooltip-pt-login": "Сез хисап язмасы төзи алыр идегез, әмма бу мәҗбүри түгел.",
        "tooltip-pt-logout": "Чыгу",
+       "tooltip-pt-createaccount": "Сезгә аккаунт ясарга һәм системага керергә киңәш итәбез, әмма бу мәҗбүри түгел.",
        "tooltip-ca-talk": "Битнең эчтәлеге турында бәхәс",
        "tooltip-ca-edit": "Сез бу бит үзгәртә аласыз. Зинһар, саклаганчы карап алуны кулланыгыз.",
        "tooltip-ca-addsection": "Яңа бүлек башлау",
        "tooltip-t-emailuser": "Бу кулланучыга хат җибәрү",
        "tooltip-t-upload": "Файлларны йөкләү",
        "tooltip-t-specialpages": "Барлык махсус битләр исемлеге",
-       "tooltip-t-print": "Бу битнең бастыру версиясе",
+       "tooltip-t-print": "Бу битнең басма версиясе",
        "tooltip-t-permalink": "Битнең бу юрамасына даими сылтама",
        "tooltip-ca-nstab-main": "Мәкаләнең эчтәлеге",
        "tooltip-ca-nstab-user": "Кулланучының шәхси бите",
        "file-nohires": "Югары ачыклык белән юрама юк.",
        "svg-long-desc": "SVG файлы, шартлы $1 × $2 нокта, файлның зурлыгы: $3",
        "show-big-image": "Тулы ачыклык",
+       "show-big-image-size": "$1 × $2 пиксель",
        "newimages": "Яңа сүрәтләр җыелмасы",
        "newimages-legend": "Фильтр",
        "ilsubmit": "Эзләү",
        "revdelete-uname-unhid": "кулланучының исеме ачылган",
        "revdelete-restricted": "чикләүләр идарәчеләргә дә кулланыла",
        "revdelete-unrestricted": "чикләүләр идарәчеләр өчен бетерелгән",
-       "logentry-move-move": "$1 $3 сәхифәсен $4 итеп үзгәртте",
+       "logentry-move-move": "$1 {{GENDER:$2|итеп күчерде}} $3 сәхифәсен $4",
        "logentry-move-move-noredirect": "$1 $3 сәхифәсен $4 итеп үзгәртте һәм юнәлтүне калдырмады",
        "logentry-move-move_redir": "$1 $3 сәхифәсен $4 юнәлтү аша үзгәртте",
        "logentry-move-move_redir-noredirect": "$1 $3 сәхифәсен $4 юнәлтү аша үзгәртте һәм юнәлтүне калдырмады",
        "logentry-newusers-create": "$1 хисап язмасы төзеде",
        "logentry-newusers-create2": "$1 $3 кулланучы хисап язмасын төзеде",
        "logentry-newusers-autocreate": "Автоматик рәвештә $1 хисап язмасы төзелде.",
+       "logentry-upload-upload": "$1 {{GENDER:$2|йөкләде}} $3",
        "rightsnone": "(юк)",
        "revdelete-summary": "үзгәртүләр тасвирламасы",
+       "feedback-adding": "Фикерне сәхифәгә өстәү ...",
+       "feedback-bugnew": "Мин тикшердем. Яңа хата турында хәбәр итү",
        "feedback-bugornote": "Әгәр дә сез техник проблеманы җентекләп тасвирларга әзер икәнсез, зинһар өчен, [$1 хата турында хәбәр итегез].\nБашка очракта сез түбәндәге гади форманы куллана аласыз. Сезнең шәрехләмә \"[$3 $2]\" сәхифәсенә сезнең кулланучы исеме һәм сез кулланган браузер исеме белән бергә өстәләчәк.",
-       "feedback-subject": "Тема:",
-       "feedback-message": "Хәбәр:",
        "feedback-cancel": "Баш тарту",
-       "feedback-submit": "Фикер җибәрү",
-       "feedback-adding": "Фикерне сәхифәгә өстәү ...",
+       "feedback-close": "Әзер",
        "feedback-error1": "Хата. APIдан билгесез нәтиҗә",
        "feedback-error2": "Хата: төзәтү уңышсыз килеп чыкты",
        "feedback-error3": "Хата: APIдан җавап юк.",
+       "feedback-message": "Хәбәр:",
+       "feedback-subject": "Тема:",
+       "feedback-submit": "Җибәрү",
        "feedback-thanks": "Рәхмәт! Сезнең фикер \"[$2 $1]\" сәхифәсенә куелды.",
-       "feedback-close": "Әзер",
-       "feedback-bugnew": "Мин тикшердем. Яңа хата турында хәбәр итү",
        "searchsuggest-search": "Эзләү",
        "searchsuggest-containing": "эчтәлек...",
        "api-error-badaccess-groups": "Сезгә бу викигә файллар өстәү рөхсәт ителмәгән",
        "api-error-uploaddisabled": "Бу викидә файллар йөкләү мөмкинлеге сүндерелгән.",
        "api-error-verification-error": "Бәлки, бу файл бозылгандыр яки дөрес түгел киңәйтелмәгә ия.",
        "expandtemplates": "Үрнәкләрне ачу",
-       "expand_templates_ok": "OK"
+       "expand_templates_ok": "OK",
+       "special-characters-group-latin": "Латин",
+       "special-characters-group-latinextended": "Латин (киңәйтелгән)",
+       "special-characters-group-ipa": "ХФӘ (IPA)",
+       "special-characters-group-symbols": "Тамгалар",
+       "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-telugu": "Телугу",
+       "special-characters-group-sinhala": "Сингаль",
+       "special-characters-group-gujarati": "Гуҗарати",
+       "special-characters-group-thai": "Таиланд",
+       "special-characters-group-lao": "Лаос",
+       "special-characters-group-khmer": "Кһмер"
 }
index 4fd905f..bd1e1a9 100644 (file)
@@ -7,7 +7,8 @@
                        "Reedy",
                        "Urhixidur",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Amire80"
                ]
        },
        "tog-underline": "Sıltamalarnıñ astına sızu:",
        "mytalk": "Bäxäsem",
        "anontalk": "Bu IP adresı öçen bäxäs bite",
        "navigation": "Küçü",
-       "and": " häm",
+       "and": "&#32;häm",
        "qbfind": "Ezläw",
        "qbbrowse": "Qaraw",
        "qbedit": "Üzgärtü",
        "deletereasonotherlist": "Başqa säbäp",
        "deletereason-dropdown": "* Beterüneñ säbäpläre\n** vandallıq\n** avtor sorawı buyınça\n** avtor xoquqların bozu",
        "delete-edit-reasonlist": "Säbäplär isemlegen üzgärtü",
-       "rollback_short": "Kire qaytaru",
        "rollbacklink": "kire qaytaru",
        "editcomment": "Üzgärtü öçen taswir: \"''$1''\".",
        "revertpage": "[[Special:Contributions/$2|$2]] üzgärtüläre ([[User talk:$2|bäxäs]])  [[User:$1|$1]] yuramasına kire qaytarıldı",
index 86973bf..849def9 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Nemo bis",
-                       "Rberchie"
+                       "Rberchie",
+                       "MF-Warburg"
                ]
        },
        "sun": "Kwasiada",
@@ -37,7 +38,7 @@
        "searchprofile-everything": "Biribiara",
        "searchprofile-articles-tooltip": "Hwehwe wo dola baako mu",
        "searchall": "Biribiara",
-       "diff": "NSONSOE",
+       "diff": "nsonsoe",
        "hide": "Fa sie",
        "watch": "Hwe",
        "undeleteviewlink": "Hwe",
index 902c9c1..2c73fb5 100644 (file)
@@ -9,7 +9,8 @@
                        "Sahran",
                        "Tel'et",
                        "بىلگە",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "ئۇلانما ئاستى سىزىقى:",
        "delete-toobig": "بۇ بەتنىڭ بەك كۆپ تەھرىرلەش تارىخى بار، {{PLURAL:$1|تۈزىتىلگەن نەشرى|تۈزىتىلگەن نەشرى}} قېتىمدىن ئارتۇق. {{SITENAME}} قالايمىقانچىلىقنىڭ ئالدىنى ئېلىش ئۈچۈن بۇ خىل بەتلەرنى ئۆچۈرۈش مەشغۇلاتى چەكلەندى.",
        "delete-warning-toobig": "بۇ بەتنىڭ تەھرىرلەش تارىخى بەك كۆپ، {{PLURAL:$1|تۈزىتىلگەن نەشرى|تۈزىتىلگەن نەشرى}} قېتىمدىن ئارتۇق.\nبۇ بەت ئۆچۈرۈلسە {{SITENAME}} ساندانىنىڭ مەشغۇلاتىنى قالايمىقانلاشتۇرۇۋېتىشى مۇمكىن؛\nبۇ مەشغۇلاتنى داۋاملاشتۇرۇشتىن ئىلگىرى ئېھتىيات قىلىڭ.",
        "rollback": "تەھرىر ئەسلىگە قايتۇر",
-       "rollback_short": "ئەسلىگە قايتۇر",
        "rollbacklink": "ئەسلىگە قايتۇر",
        "rollbacklinkcount": "$1 {{PLURAL:$1|تەھرىر}}نى ئەسلىگە قايتۇر",
        "rollbacklinkcount-morethan": "$1 دىن كۆپ {{PLURAL:$1|تەھرىر}}نى ئەسلىگە قايتۇر",
        "import-rootpage-nosubpage": "\"$1\" ئات بوشلۇقىنىڭ غول بېتى تارماق بەتكە يول قويمايدۇ.",
        "importlogpage": "ئەكىرىش خاتىرىسى",
        "importlogpagetext": "باشقا wiki دىن تارىخ خاتىرىسىنى قوشۇپ باشقۇرغۇچى سۈپىتىدە ئەكىرىش.",
-       "import-logentry-upload": "ھۆججەت يۈكلەپ [[$1]] ئەكىرىلدى",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|تۈزىتىش|تۈزىتىش}}",
-       "import-logentry-interwiki": "wiki ھالقىغان $1",
        "import-logentry-interwiki-detail": "$2 دىن كەلگەن $1 {{PLURAL:$1|تۈزىتىش|تۈزىتىش}}",
        "javascripttest": "JavaScript سىناش",
-       "javascripttest-title": "$1 نى تەكشۈرۈش يۈرگۈزۈۋاتىدۇ",
        "javascripttest-pagetext-noframework": "بۇ بەت JavaScript ئىجرا قىلىپ سىناشقا قالدۇرۇلغان.",
        "javascripttest-pagetext-unknownframework": "يوچۇن سىناق قۇرۇلما \"$1\".",
        "javascripttest-pagetext-frameworks": "تۆۋەندىكى قۇرۇلمىدىن بىرنى تاللاڭ: $1",
        "javascripttest-pagetext-skins": "بىر تېرە تاللاپ سىناقنى ئىجرا قىلىڭ:",
        "javascripttest-qunit-intro": "mediawiki.org دىكى [$1 سىناش قوللانمىسى]نى كۆرۈڭ.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit سىناش يۈرۈشلۈكى",
        "tooltip-pt-userpage": "ئىشلەتكۈچى بېتىڭىز",
        "tooltip-pt-anonuserpage": "بۇ بېكەتنى تەھرىرلىگەندە ئىشلەتكەن IP ماس كەلگەن ئىشلەتكۈچى بېتى",
        "tooltip-pt-mytalk": "مۇنازىرە بېتىڭىز",
        "watchlisttools-edit": "كۆزەت تىزىملىكىنى كۆرۈپ تەھرىرلەش",
        "watchlisttools-raw": "ئەسلى كۆزەت تىزىملىك تەھرىرى",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|سۆزلىشىش]])",
-       "unknown_extension_tag": "نامەلۇم كېڭەيتىلگەن خەتكۈچ \"$1\"",
        "duplicate-defaultsort": "'''ئاگاھلاندۇرۇش:''' كۆڭۈلدىكى تەرتىپلەش كۇنۇپكىسى \"$2\" ئىلگىرىكى كۆڭۈلدىكى تەرتىپلەش كۇنۇپكىسى \"$1\" نى قاپلىۋېتىدۇ.",
        "version": "نەشرى",
        "version-extensions": "قاچىلانغان كېڭەيتىلمە",
        "version-parser-function-hooks": "تەھلىلچى فونكسىيە ئىلمىكى",
        "version-hook-name": "ئىلمەك ئاتى",
        "version-hook-subscribedby": "ئىمزا قويغۇچى",
-       "version-version": "(نەشرى $1)",
+       "version-version": "($1)",
        "version-license": "ئىجازەتنامە",
        "version-poweredby-credits": "بۇ ۋىكىنى '''[https://www.mediawiki.org/ MediaWiki]''' تېخنىكىلىق قوللايدۇ، نەشر ھوقۇقى © 2001-$1 $2",
        "version-poweredby-others": "باشقا",
        "logentry-rights-autopromote": "$1 نىڭ ئىشلەتكۈچى گۇرۇپپىسى ئۆزلۈكىدىن $4 دىن $5 غا يۈكسەلدى",
        "rightsnone": "(يوق)",
        "revdelete-summary": "ئۈزۈندە تەھرىرلە",
+       "feedback-adding": "قايتۇرما ئىنكاسنى بەتكە قوشۇۋاتىدۇ…",
+       "feedback-bugcheck": "قالتىس! كەمتۈكنىڭ ئاللىبۇرۇن يوللانغان [$1 مەلۇملۇق كەمتۈك] ياكى ئەمەسلىكىنى تەكشۈرۈڭ.",
+       "feedback-bugnew": "تەكشۈردۈم. يېڭى بىر كەمتۈك دوكلات قىل",
        "feedback-bugornote": "ئەگەر بىر تېخنىكىلىق مەسىلىنى تەپسىلىي بايان قىلىشقا تەييارلانماقچى بولسىڭىز، [$1 خاتالىق دوكلات]ى يوللاڭ. ياكى تۆۋەندىكى ئاددىي جەدۋەلنى ئىشلىتىڭ. ئىنكاسىڭىز \"[$3 $2]\" بەتكە قوشۇلىدۇ، ئىشلەتكۈچى ئاتىڭىز ۋە ئىشلەتكەن توركۆرگۈڭىز قوشۇپ قويۇلىدۇ.",
-       "feedback-subject": "تېما:",
-       "feedback-message": "ئۇچۇر:",
        "feedback-cancel": "ۋاز كەچ",
-       "feedback-submit": "قايتۇرما ئىنكاس يوللا",
-       "feedback-adding": "قايتۇرما ئىنكاسنى بەتكە قوشۇۋاتىدۇ…",
+       "feedback-close": "تامام",
        "feedback-error1": "خاتالىق: API دىن كەلگەن تونۇيالمايدىغان نەتىجە",
        "feedback-error2": "خاتا:تەھرىرلەش مەغلۇپ بولدى",
        "feedback-error3": "خاتالىق: API دىن ئىنكاس يوق",
+       "feedback-message": "ئۇچۇر:",
+       "feedback-subject": "تېما:",
+       "feedback-submit": "تاپشۇر",
        "feedback-thanks": "كۆپ رەھمەت! قايتۇرما ئىنكاسىڭىز \"[$2 $1]\" بەتكە يوللاندى.",
-       "feedback-close": "تامام",
-       "feedback-bugcheck": "قالتىس! كەمتۈكنىڭ ئاللىبۇرۇن يوللانغان [$1 مەلۇملۇق كەمتۈك] ياكى ئەمەسلىكىنى تەكشۈرۈڭ.",
-       "feedback-bugnew": "تەكشۈردۈم. يېڭى بىر كەمتۈك دوكلات قىل",
        "searchsuggest-search": "ئىزدەش",
        "searchsuggest-containing": "ئىچىدە…",
        "api-error-badaccess-groups": "ھۆججەتنى بۇ ۋىكىغا يۈكلەش ھوقۇقىڭىز يوق.",
        "expand_templates_remove_nowiki": "نەتىجىسىدە <nowiki> خەتكۈچ كۆرۈنمىسۇن",
        "expand_templates_generate_xml": "XML گىرامماتىكىسىنى كۆرسەت",
        "expand_templates_generate_rawhtml": "ئەسلى HTML نى كۆرسەت",
-       "expand_templates_preview": "ئالدىن كۆزەت"
+       "expand_templates_preview": "ئالدىن كۆزەت",
+       "special-characters-group-latin": "لاتىنچە",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "بەلگىلەر",
+       "special-characters-group-greek": "گىرېكچە",
+       "special-characters-group-cyrillic": "سلاۋيانچە",
+       "special-characters-group-arabic": "ئەرەبچە",
+       "special-characters-group-persian": "پارىسچە",
+       "special-characters-group-hebrew": "ئىبرانىچە",
+       "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 44cf5e7..46c7b43 100644 (file)
@@ -55,7 +55,9 @@
                        "Piramidion",
                        "Andygol",
                        "Ypryima",
-                       "Purodha"
+                       "Purodha",
+                       "Green Zero",
+                       "Macofe"
                ]
        },
        "tog-underline": "Підкреслювання посилань:",
        "tuesday": "вівторок",
        "wednesday": "середа",
        "thursday": "четвер",
-       "friday": "пятниця",
+       "friday": "п'ятниця",
        "saturday": "субота",
        "sun": "Нд",
        "mon": "Пн",
        "article": "Стаття",
        "newwindow": "(відкривається в новому вікні)",
        "cancel": "Скасувати",
-       "moredotdotdot": "Ð\94еÑ\82алÑ\8cнÑ\96ше…",
+       "moredotdotdot": "Ð\91Ñ\96лÑ\8cше…",
        "morenotlisted": "Цей список неповний.",
        "mypage": "Сторінка",
        "mytalk": "Обговорення",
        "permalink": "Постійне посилання",
        "print": "Друк",
        "view": "Перегляд",
-       "view-foreign": "Переглянути на $1",
+       "view-foreign": "Переглянути сторінку {{grammar:locative|$1}}",
        "edit": "Редагувати",
        "edit-local": "Редагувати локальний опис",
        "create": "Створити",
        "disclaimers": "Відмова від відповідальності",
        "disclaimerpage": "Project:Відмова від відповідальності",
        "edithelp": "Довідка про редагування",
+       "helppage-top-gethelp": "Довідка",
        "mainpage": "Головна сторінка",
        "mainpage-description": "Головна сторінка",
        "policy-url": "Project:Правила",
        "readonly_lag": "База даних автоматично заблокована від змін, доки вторинний сервер бази даних не синхронізується з первинним.",
        "internalerror": "Внутрішня помилка",
        "internalerror_info": "Внутрішня помилка: $1",
+       "internalerror-fatal-exception": "Критичний виняток типу «$1»",
        "filecopyerror": "Не вдалося скопіювати файл «$1» в «$2».",
        "filerenameerror": "Не вдалося перейменувати файл «$1» на «$2».",
        "filedeleteerror": "Не вдалося вилучити файл «$1».",
        "wrongpassword": "Ви ввели хибний пароль. Спробуйте ще раз.",
        "wrongpasswordempty": "Ви не ввели пароль. Будь ласка, спробуйте ще раз.",
        "passwordtooshort": "Ваш пароль закороткий, він має містити принаймні $1 {{PLURAL:$1|символ|символи|символів}}.",
+       "passwordtoolong": "Пароль не може бути довшим ніж {{PLURAL:$1|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\nЗверніть увагу, що ви не зможете надіслати листа адміністратору, якщо ви не зареєстровані або не підтвердили свою електронну адресу в [[Special:Preferences|особистих налаштуваннях]], а також якщо вам було заборонено надсилати листи при блокуванні.\n\nВаша поточна IP-адреса — $3, ідентифікатор блокування — #$5. Будь ласка, зазначайте ці дані у своїх запитах.",
        "autoblockedtext": "Ваша IP-адреса автоматично заблокована у зв'язку з тим, що вона раніше використовувалася кимось із заблокованих користувачів. Адміністратор ($1), що її заблокував, зазначив наступну причину блокування:\n\n:''$2''\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Блокування виконав: $7\n\nВи можете надіслати листа користувачеві $1 або будь-якому іншому [[{{MediaWiki:Grouppage-sysop}}|адміністратору]], щоб обговорити блокування.\n\nЗверніть увагу, що ви не зможете надіслати листа адміністраторові, якщо ви не зареєстровані у проекті або не підтвердили свою електронну адресу в [[Special:Preferences|особистих налаштуваннях]], а також якщо вам було заборонено надсилати листи при блокуванні.\n\nВаша поточна IP-адреса — $3, ідентифікатор блокування — #$5. Будь ласка, зазначайте його у своїх запитах.",
        "continue-editing": "Продовжити редагування",
        "previewconflict": "Цей попередній перегляд відображає текст з верхнього вікна редагування так, як він буде виглядати, якщо ви вирішите зберегти його.",
        "session_fail_preview": "'''Система не може зберегти ваші редагування, оскільки втрачені дані сеансу. Будь ласка, повторіть вашу спробу.\nЯкщо помилка буде повторюватись, спробуйте [[Special:UserLogout|вийти з системи]] і увійти знову.'''",
-       "session_fail_preview_html": "<strong>Вибачте! Неможливо зберегти ваші зміни через втрату даних HTML-сесії.</strong>\n\n''Оскільки {{SITENAME}} дозволяє використовувати чистий HTML, попередній перегляд відключено, щоб попередити JavaScript-атаки.''\n\n<strong>Якщо це легітимна спроба редагування, будь ласка, спробуйте ще раз. Якщо не вийде знову, - спробуйте [[Special:UserLogout|завершити сеанс роботи]] й ще раз ввійти до системи.</strong>",
+       "session_fail_preview_html": "<strong>Вибачте! Неможливо зберегти ваші зміни через втрату даних HTML-сесії.</strong>\n\n''Оскільки {{SITENAME}} дозволяє використовувати чистий HTML, попередній перегляд відключено, щоб попередити JavaScript-атаки.''\n\n<strong>Якщо це легітимна спроба редагування, будь ласка, спробуйте ще раз. Якщо не вийде знову,  спробуйте [[Special:UserLogout|завершити сеанс роботи]] й ще раз ввійти до системи.</strong>",
        "token_suffix_mismatch": "'''Ваше редагування було відхилене, оскільки ваша програма неправильно обробляє знаки пунктуації у вікні редагування. Редагування було скасоване для запобігання спотворенню тексту статті.\nПодібні проблеми можуть виникати при використанні анонімізуючих веб-проксі, що містять помилки.'''",
        "edit_form_incomplete": "'''Частина даних із форми редагування не досягла сервера. Уважно перевірте, чи не пошкоджені ваші правки і спробуйте ще раз.'''",
        "editing": "Редагування $1",
        "notextmatches": "Немає збігів у текстах сторінок",
        "prevn": "{{PLURAL:$1|попередня $1|попередні $1|попередні $1}}",
        "nextn": "наступні {{PLURAL:$1|$1}}",
+       "prev-page": "попередня сторінка",
+       "next-page": "наступна сторінка",
        "prevn-title": "{{PLURAL:$1|Попередній $1 запис|Попередні $1 записи|Попередні $1 записів}}",
        "nextn-title": "{{PLURAL:$1|Наступний $1 запис|Наступні $1 записи|Наступні $1 записів}}",
        "shown-title": "Показувати $1 {{PLURAL:$1|запис|записи|записів}} на сторінці",
        "searchrelated": "пов'язаний",
        "searchall": "усі",
        "showingresults": "Нижче {{PLURAL:$1|показане|показані|показані}} '''$1''' {{PLURAL:$1|результат|результати|результатів}}, починаючи з №&nbsp;'''$2'''",
-       "showingresultsinrange": "Нижче показано до {{PLURAL:$1|<strong>1</strong> результата|<strong>$1</strong> результатів|<strong>$1</strong> результати}} у діапазоні від #<strong>$2</strong> до #<strong>$3</strong>.",
+       "showingresultsinrange": "Нижче показано до {{PLURAL:$1|<strong>1</strong> результату|<strong>$1</strong> результатів}} у діапазоні від #<strong>$2</strong> до #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Результат <strong>$1</strong> із <strong>$3</strong>|Результати <strong>$1 — $2</strong> із <strong>$3</strong>}}",
        "search-nonefound": "Не знайдено результатів, що відповідають запиту.",
        "powersearch-legend": "Розширений пошук",
        "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": "Кількість редагувань для відображення у розширеному списку спостереження:",
        "gender-unknown": "Не визначена",
        "gender-male": "Чоловіча",
        "gender-female": "Жіноча",
-       "prefs-help-gender": "Задання цього параметру - необов'язкове. Застосовується рушієм у тих звертаннях до користувача, які залежать від статі.\nЦя інформація загальнодоступна.",
+       "prefs-help-gender": "Задання цього параметру  необов'язкове. Застосовується рушієм у тих звертаннях до користувача, які залежать від статі.\nЦя інформація загальнодоступна.",
        "email": "Електронна пошта",
        "prefs-help-realname": "Справжнє ім'я вказувати необов'язково.\nЯкщо ви його зазначите, то саме з ним може бути пов'язаний увесь ваш доробок.",
        "prefs-help-email": "Адреса електронної пошти не є обов'язковою, але необхідна для скидання пароля, якщо ви його забудете.",
        "grouppage-sysop": "{{ns:project}}:Адміністратори",
        "grouppage-bureaucrat": "{{ns:project}}:Бюрократи",
        "grouppage-suppress": "{{ns:project}}:Ревізори",
-       "right-read": "Ð\9fерегляд сторінок",
-       "right-edit": "Редагування сторінок",
-       "right-createpage": "Створення сторінок (але не обговорень)",
-       "right-createtalk": "Створення обговорень сторінок",
-       "right-createaccount": "Створення нових облікових записів",
-       "right-minoredit": "Ð\9fозначення редагувань як незначні",
-       "right-move": "Ð\9fерейменування сторінок",
-       "right-move-subpages": "Ð\9fерейменування сторінок і їх підсторінок",
-       "right-move-rootuserpages": "Ð\9fеÑ\80ейменÑ\83ваÑ\82и ÐºÐ¾Ñ\80еневÑ\96 Ñ\81Ñ\82оÑ\80Ñ\96нки користувачів",
-       "right-move-categorypages": "Ð\9fеÑ\80ейменÑ\83ваннÑ\8f Ñ\81Ñ\82оÑ\80Ñ\96нок ÐºÐ°Ñ\82егоÑ\80Ñ\96Ñ\97.",
-       "right-movefile": "перейменувати файли",
-       "right-suppressredirect": "Ð\9dестворення перенаправлення зі старої назви на нову при перейменуванні сторінки",
-       "right-upload": "Ð\97авантаження файлів",
-       "right-reupload": "Ð\9fерезаписування існуючих файлів",
-       "right-reupload-own": "Ð\9fерезаписування існуючих файлів, завантажених тим самим користувачем",
-       "right-reupload-shared": "Ð\9fідміна файлів зі спільного сховища локальними",
+       "right-read": "перегляд сторінок",
+       "right-edit": "редагування сторінок",
+       "right-createpage": "створення сторінок (але не обговорень)",
+       "right-createtalk": "створення обговорень сторінок",
+       "right-createaccount": "створення нових облікових записів",
+       "right-minoredit": "позначення редагувань як незначні",
+       "right-move": "перейменування сторінок",
+       "right-move-subpages": "перейменування сторінок і їх підсторінок",
+       "right-move-rootuserpages": "пеÑ\80ейменÑ\83ваннÑ\8f ÐºÐ¾Ñ\80еневиÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок користувачів",
+       "right-move-categorypages": "пеÑ\80ейменÑ\83ваннÑ\8f Ñ\81Ñ\82оÑ\80Ñ\96нок ÐºÐ°Ñ\82егоÑ\80Ñ\96й",
+       "right-movefile": "перейменування файлів",
+       "right-suppressredirect": "нестворення перенаправлення зі старої назви на нову при перейменуванні сторінки",
+       "right-upload": "завантаження файлів",
+       "right-reupload": "перезаписування існуючих файлів",
+       "right-reupload-own": "перезаписування існуючих файлів, завантажених тим самим користувачем",
+       "right-reupload-shared": "підміна файлів зі спільного сховища локальними",
        "right-upload_by_url": "Завантаження файлів за URL-адресами",
-       "right-purge": "Ð\9eÑ\87иÑ\89еннÑ\8f ÐºÐµÑ\88Ñ\83 Ð´Ð»Ñ\8f Ñ\81Ñ\82оÑ\80Ñ\96нки Ð±ÐµÐ· Ñ\81Ñ\82оÑ\80Ñ\96нки підтвердження",
-       "right-autoconfirmed": "Ð\91ез обмежень швидкості за IP",
-       "right-bot": "Ð\90втоматична обробка",
-       "right-nominornewtalk": "Ð\9dезначні редагування на сторінках обговорень користувачів не викликають попередження про нові повідомлення",
-       "right-apihighlimits": "Розширення обмежень на виконання API-запитів",
-       "right-writeapi": "Ð\92икористання API для запису",
-       "right-delete": "Ð\92илучення сторінок",
+       "right-purge": "оÑ\87иÑ\89еннÑ\8f ÐºÐµÑ\88Ñ\83 Ñ\81Ñ\82оÑ\80Ñ\96нки Ð±ÐµÐ· Ð½ÐµÐ¾Ð±Ñ\85Ñ\96дноÑ\81Ñ\82Ñ\96 підтвердження",
+       "right-autoconfirmed": "без обмежень швидкості за IP",
+       "right-bot": "автоматична обробка",
+       "right-nominornewtalk": "незначні редагування на сторінках обговорень користувачів не викликають попередження про нові повідомлення",
+       "right-apihighlimits": "розширення обмежень на виконання API-запитів",
+       "right-writeapi": "використання API для запису",
+       "right-delete": "вилучення сторінок",
        "right-bigdelete": "Вилучення сторінок з великою історією",
-       "right-deletelogentry": "Ð\92илучення та відновлення окремих записів журналу",
-       "right-deleterevision": "Ð\92илÑ\83Ñ\87еннÑ\8f Ñ\96 відновлення окремих версій сторінок",
-       "right-deletedhistory": "Ð\9fерегляд історії вилучених сторінок без перегляду вилученого тексту",
+       "right-deletelogentry": "вилучення та відновлення окремих записів журналу",
+       "right-deleterevision": "вилÑ\83Ñ\87еннÑ\8f Ñ\82а відновлення окремих версій сторінок",
+       "right-deletedhistory": "перегляд історії вилучених сторінок без перегляду вилученого тексту",
        "right-deletedtext": "перегляд вилученого тексту та змін між вилученими версіями",
-       "right-browsearchive": "Ð\9fошук вилучених сторінок",
-       "right-undelete": "Ð\92ідновлення сторінок",
-       "right-suppressrevision": "Ð\9fеÑ\80еглÑ\8fд, Ð¿Ñ\80иÑ\85овання та відновлення конкретних змін сторінок від будь-якого користувача",
+       "right-browsearchive": "пошук вилучених сторінок",
+       "right-undelete": "відновлення сторінок",
+       "right-suppressrevision": "пеÑ\80еглÑ\8fд, Ð¿Ñ\80иÑ\85овÑ\83вання та відновлення конкретних змін сторінок від будь-якого користувача",
        "right-viewsuppressed": "Перегляд змін, приховаих від усіх користувачів",
-       "right-suppressionlog": "Ð\9fерегляд приватних журналів",
-       "right-block": "Ð\97аборона редагувань для інших дописувачів",
+       "right-suppressionlog": "перегляд приватних журналів",
+       "right-block": "заборона редагувань для інших дописувачів",
        "right-blockemail": "Блокування користувачам надсилання електронної пошти",
        "right-hideuser": "Блокування імені користувача і приховування його",
-       "right-ipblock-exempt": "Уникнення блокування за IP-адресою, автоблокування і блокування діапазонів",
-       "right-proxyunbannable": "Уникнення автоматичного блокування проксі-серверів",
-       "right-unblockself": "Розблоковувати себе",
-       "right-protect": "Ð\97мÑ\96на Ñ\80Ñ\96внÑ\96в Ð·Ð°Ñ\85иÑ\81Ñ\82Ñ\83 Ñ\82а Ñ\80едагÑ\83ваннÑ\8f Ð·Ð°Ñ\85иÑ\89ениÑ\85 ÐºÐ°Ñ\81кадно сторінок",
-       "right-editprotected": "Редагування сторінок з рівнем захисту \"{{int:protect-level-sysop}}\"",
-       "right-editsemiprotected": "Редагування сторінок з рівнем захисту \"{{int:protect-level-autoconfirmed}}\"",
+       "right-ipblock-exempt": "уникнення блокування за IP-адресою, автоблокування і блокування діапазонів",
+       "right-proxyunbannable": "уникнення автоматичного блокування проксі-серверів",
+       "right-unblockself": "розблоковування себе",
+       "right-protect": "змÑ\96на Ñ\80Ñ\96внÑ\96в Ð·Ð°Ñ\85иÑ\81Ñ\82Ñ\83 Ñ\82а Ñ\80едагÑ\83ваннÑ\8f ÐºÐ°Ñ\81кадно Ð·Ð°Ñ\85иÑ\89ениÑ\85 сторінок",
+       "right-editprotected": "редагування сторінок з рівнем захисту «{{int:protect-level-sysop}}»",
+       "right-editsemiprotected": "редагування сторінок з рівнем захисту «{{int:protect-level-autoconfirmed}}»",
        "right-editcontentmodel": "Редагувати модель вмісту сторінки",
-       "right-editinterface": "Редагування інтерфейсу користувача",
-       "right-editusercssjs": "Редагування CSS- і JS-файлів інших користувачів",
-       "right-editusercss": "Редагування CSS-файлів інших користувачів",
-       "right-edituserjs": "Редагування JS-файлів інших користувачів",
-       "right-editmyusercss": "Редагування власних CSS-файлів користувача",
-       "right-editmyuserjs": "Редагування власних JavaScript-файлів користувача",
-       "right-viewmywatchlist": "Ð\9fеÑ\80еглÑ\8fдаÑ\82и Ð²Ð»Ð°Ñ\81ний Ñ\81пиÑ\81ок спостереження",
-       "right-editmywatchlist": "Редагувати власний список спостереження. Зверніть увагу, що деякі дії будуть додавати сторінки навіть без такого права.",
-       "right-viewmyprivateinfo": "Ð\9fерегляд власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
-       "right-editmyprivateinfo": "Редагування власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
-       "right-editmyoptions": "Редагування власних налаштувань",
-       "right-rollback": "Швидкий відкіт редагувань останнього користувача, який редагував сторінку",
-       "right-markbotedits": "Ð\9fозначення відкинутих редагувань як редагування бота",
-       "right-noratelimit": "Ð\9dема обмежень за швидкістю",
-       "right-import": "Імпорт сторінок з інших вікі",
+       "right-editinterface": "редагування інтерфейсу користувача",
+       "right-editusercssjs": "редагування CSS- і JS-файлів інших користувачів",
+       "right-editusercss": "редагування CSS-файлів інших користувачів",
+       "right-edituserjs": "редагування JS-файлів інших користувачів",
+       "right-editmyusercss": "редагування власних CSS-файлів користувача",
+       "right-editmyuserjs": "редагування власних JavaScript-файлів користувача",
+       "right-viewmywatchlist": "пеÑ\80еглÑ\8fд Ð²Ð»Ð°Ñ\81ного Ñ\81пиÑ\81кÑ\83 спостереження",
+       "right-editmywatchlist": "редагування власного списку спостереження; зверніть увагу, що деякі дії будуть додавати сторінки навіть без такого права.",
+       "right-viewmyprivateinfo": "перегляд власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
+       "right-editmyprivateinfo": "редагування власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
+       "right-editmyoptions": "редагування власних налаштувань",
+       "right-rollback": "швидкий відкіт редагувань останнього користувача, який редагував сторінку",
+       "right-markbotedits": "позначення відкинутих редагувань як редагування бота",
+       "right-noratelimit": "нема обмежень за швидкістю",
+       "right-import": "імпорт сторінок з інших вікі",
        "right-importupload": "Імпорт сторінок через завантаження файлів",
-       "right-patrol": "Ð\9fозначення редагувань патрульованими",
-       "right-autopatrol": "Ð\90втоматичне позначення редагувань патрульованими",
+       "right-patrol": "позначення редагувань патрульованими",
+       "right-autopatrol": "автоматичне позначення редагувань патрульованими",
        "right-patrolmarks": "Перегляд патрульованих сторінок у нових редагуваннях",
-       "right-unwatchedpages": "Ð\9fерегляд списку сторінок, за якими ніхто не спостерігає",
-       "right-mergehistory": "Ð\9eб'єднання історій редагувань сторінок",
+       "right-unwatchedpages": "перегляд списку сторінок, за якими ніхто не спостерігає",
+       "right-mergehistory": "об'єднання історій редагувань сторінок",
        "right-userrights": "Зміна всіх прав користувачів",
        "right-userrights-interwiki": "Зміна прав користувачів у інших вікі",
        "right-siteadmin": "Блокування і розблокування бази даних",
        "right-override-export-depth": "експорт сторінок, включаючи пов'язані сторінки з глибиною до 5",
-       "right-sendemail": "вÑ\96дпÑ\80авлÑ\8fÑ\82и Ð¿Ð¾Ñ\88Ñ\82Ñ\83 іншим користувачам",
+       "right-sendemail": "надÑ\81иланнÑ\8f ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\97 Ð¿Ð¾Ñ\88Ñ\82и іншим користувачам",
        "right-passwordreset": "Перегляд повідомлень електронної пошти для зміни паролю",
+       "right-managechangetags": "створення та вилучення [[Special:Tags|міток]] з бази даних",
        "newuserlogpage": "Журнал нових користувачів",
        "newuserlogpagetext": "Список нещодавно зареєстрованих користувачів.",
        "rightslog": "Журнал прав користувача",
        "action-move": "перейменування цієї сторінки",
        "action-move-subpages": "перейменування цієї сторінки з усіма її підсторінками",
        "action-move-rootuserpages": "перейменувати кореневі сторінки користувачів",
-       "action-move-categorypages": "перейменування сторінок категорії",
+       "action-move-categorypages": "перейменування сторінок категорій",
        "action-movefile": "перейменувати цей файл",
        "action-upload": "завантаження цього файлу",
        "action-reupload": "перезапис існуючого файлу",
        "action-viewmyprivateinfo": "перегляд своєї приватної інформації",
        "action-editmyprivateinfo": "редагування своєї приватної інформації",
        "action-editcontentmodel": "редагувати модель вмісту сторінки",
+       "action-managechangetags": "створення та вилучення міток з бази даних",
        "nchanges": "$1 {{PLURAL:$1|зміна|зміни|змін}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|зміна з останнього візиту|зміни з останнього візиту|змін з останнього візиту}}",
        "enhancedrc-history": "історія",
        "uploaderror": "Помилка завантаження файлу",
        "upload-recreate-warning": "'''Увага. Файл з такою назвою був раніше вилучений або перейменований.''\n\nДалі наведено журнал вилучень і перейменувань цього файлу:",
        "uploadtext": "За допомогою цієї форми ви можете завантажити файли на сервер.\n\nЯкщо файл із зазначеною вами назвою вже існує в проекті, то його буде замінено без попередження. Тому, якщо ви не збираєтесь оновлювати файл,\nбуло б непогано перевірити, чи такий файл уже існує.\n\nЩоби переглянути вже завантажені файли,\nзайдіть на: [[Special:FileList|список завантажених файлів]].\n\nЗавантаження відображаються в [[Special:Log/upload|журналі завантажень]], вилучення – у [[Special:Log/delete|журналі вилучень]].\n\nДля вставки зображень в статті можна використовувати такі рядки:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:Назва_зображення.jpg<nowiki>]]</nowiki></code>''', щоб використати повну версію файлу\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:Назва_зображення.png|200px|thumb|left|Підпис під зображенням<nowiki>]]</nowiki></code>''', щоб використати зображення у рамці зліва сторінки з підписом під зображенням\n\nдля інших медіа-файлів використовуйте рядок виду:\n* '''<code><nowiki>[[</nowiki>{{ns:media}}:Назва_файлу.ogg<nowiki>]]</nowiki></code>'''.",
-       "upload-permitted": "Дозволені типи файлів: $1.",
-       "upload-preferred": "Бажані типи файлів: $1.",
-       "upload-prohibited": "Заборонені типи файлів: $1.",
+       "upload-permitted": "Дозволен{{PLURAL:$2|ий тип|і типи}} файлів: $1.",
+       "upload-preferred": "Бажан{{PLURAL:$2|ий тип|і типи}} файлів: $1.",
+       "upload-prohibited": "Заборонен{{PLURAL:$2|ий тип|і типи}} файлів: $1.",
        "uploadlogpage": "Журнал завантажень",
        "uploadlogpagetext": "Нижче наведено список останніх завантажених файлів.\nГляньте [[Special:NewFiles|галерею нових зображень]] для більш візуального огляду.",
        "filename": "Назва файлу",
        "watchthisupload": "Спостерігати за цим файлом",
        "filewasdeleted": "Файл з такою назвою вже існував, але був вилучений.\nВам слід перевірити $1 перед повторним завантаженням.",
        "filename-bad-prefix": "Назва завантажуваного файлу починається на '''«$1»''' і, можливо, є шаблонною назвою, яку цифрова фотокамера дає знімкам. Будь ласка, виберіть назву, яка краще описуватиме вміст файлу.",
-       "filename-prefix-blacklist": " #<!-- Ð½Ðµ Ð¼Ñ\96нÑ\8fйÑ\82е Ñ\86ей Ñ\80Ñ\8fдок --> <pre>\n# Ð¡Ð¸Ð½Ñ\82акÑ\81иÑ\81 Ñ\82акий:\n#   * Ð\92Ñ\81е, Ñ\89о Ð¿Ð¾Ñ\87инаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ð· Ñ\81имволÑ\83 Â«#» Ð²Ð²Ð°Ð¶Ð°Ñ\94Ñ\82Ñ\8cÑ\81Ñ\8f ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80ем (до ÐºÑ\96нÑ\86Ñ\8f Ñ\80Ñ\8fдка)\n#   * Ð\9aожен Ð½ÐµÐ¿Ð¾Ñ\80ожнÑ\96й Ñ\80Ñ\8fдок - Ð¿Ñ\80еÑ\84Ñ\96кÑ\81 Ñ\81Ñ\82андаÑ\80Ñ\82ноÑ\97 Ð½Ð°Ð·Ð²Ð¸ Ñ\84айлÑ\83, Ñ\8fкÑ\83 Ð·Ð°Ð·Ð²Ð¸Ñ\87ай Ð´Ð°Ñ\94 Ñ\86иÑ\84Ñ\80ова ÐºÐ°Ð¼ÐµÑ\80а\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # Ð´ÐµÑ\8fкÑ\96 Ð¼Ð¾Ð±Ñ\96лÑ\8cнÑ\96 Ñ\82елеÑ\84они\nIMG # Ð·Ð°Ð³Ð°Ð»Ñ\8cне\nJD # Jenoptik\nMGP # Pentax\nPICT # Ñ\80Ñ\96знÑ\96\n #</pre> <!-- Ð½Ðµ Ð¼Ñ\96нÑ\8fйте цей рядок -->",
+       "filename-prefix-blacklist": " #<!-- Ð½Ðµ Ð·Ð¼Ñ\96нÑ\8eйÑ\82е Ñ\86ей Ñ\80Ñ\8fдок --> <pre>\n# Ð¡Ð¸Ð½Ñ\82акÑ\81иÑ\81 Ñ\82акий:\n#   * Ð\92Ñ\81е, Ñ\89о Ð¿Ð¾Ñ\87инаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ð· Ñ\81имволÑ\83 Â«#» Ð²Ð²Ð°Ð¶Ð°Ñ\94Ñ\82Ñ\8cÑ\81Ñ\8f ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80ем (до ÐºÑ\96нÑ\86Ñ\8f Ñ\80Ñ\8fдка)\n#   * Ð\9aожен Ð½ÐµÐ¿Ð¾Ñ\80ожнÑ\96й Ñ\80Ñ\8fдок â\80\94 Ð¿Ñ\80еÑ\84Ñ\96кÑ\81 Ñ\81Ñ\82андаÑ\80Ñ\82ноÑ\97 Ð½Ð°Ð·Ð²Ð¸ Ñ\84айлÑ\83, Ñ\8fкÑ\83 Ð·Ð°Ð·Ð²Ð¸Ñ\87ай Ð´Ð°Ñ\94 Ñ\86иÑ\84Ñ\80ова ÐºÐ°Ð¼ÐµÑ\80а\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # Ð´ÐµÑ\8fкÑ\96 Ð¼Ð¾Ð±Ñ\96лÑ\8cнÑ\96 Ñ\82елеÑ\84они\nIMG # Ð·Ð°Ð³Ð°Ð»Ñ\8cне\nJD # Jenoptik\nMGP # Pentax\nPICT # Ñ\80Ñ\96знÑ\96\n #</pre> <!-- Ð½Ðµ Ð·Ð¼Ñ\96нÑ\8eйте цей рядок -->",
        "upload-success-subj": "Завантаження успішно завершено",
        "upload-success-msg": "Ваше завантаження з [$2] було успішним. Воно доступне тут: [[:{{ns:file}}:$1]]",
        "upload-failure-subj": "Проблема із завантаженням",
        "listredirects": "Список перенаправлень",
        "listduplicatedfiles": "Список файлів з дублікатами",
        "listduplicatedfiles-summary": "Це список файлів, де остання версія файлу вважається дублікатом останньої версії деяких інших файлів. Враховуються тільки локальні файли.",
-       "listduplicatedfiles-entry": "У файлу [[:File:$1|$1]] - [[$3|{{PLURAL:$2|один дублікат|$2 дублікатів|$2 дублікат}}]].",
+       "listduplicatedfiles-entry": "У файлу [[:File:$1|$1]]  [[$3|{{PLURAL:$2|один дублікат|$2 дублікатів|$2 дублікат}}]].",
        "unusedtemplates": "Шаблони, що не використовуються",
        "unusedtemplatestext": "На цій сторінці показані всі сторінки простору назв «{{ns:template}}», які не включені до інших сторінок. Не забувайте перевірити відсутність інших посилань на шаблон, перш ніж вилучити його.",
        "unusedtemplateswlh": "інші посилання",
        "unusedimages": "Файли, що не використовуються",
        "wantedcategories": "Необхідні категорії",
        "wantedpages": "Необхідні статті",
+       "wantedpages-summary": "Список неіснуючих сторінок із найбільшою кількістю посилань на них, за винятком тих сторінок, на які ведуть лише перенаправлення. Щоб отримати список неіснуючих сторінок, на які ведуть перенаправлення, перегляньте [[{{#special:BrokenRedirects}}]].",
        "wantedpages-badtitle": "Неправильний заголовок у результатах запиту: $1",
        "wantedfiles": "Необхідні файли",
        "wantedfiletext-cat": "Наступні файли використовують, але вони не існують. У цей список можуть помилково потрапити файли, що знаходяться на зовнішніх сховищах. Такі хибні моменти помічаються <del>перекреслюванням</del>. Крім того, сторінки, що використовують неіснуючі файли, перелічені в [[:$1]].",
        "listgrouprights-members": "(список членів)",
        "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
        "listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
-       "listgrouprights-addgroup": "може додавати в {{PLURAL:$2|1=групу|групи}}: $1",
-       "listgrouprights-removegroup": "може виключати з {{PLURAL:$2|1=групи|груп}}: $1",
-       "listgrouprights-addgroup-all": "може додавати до всіх груп",
-       "listgrouprights-removegroup-all": "може Ð²Ð¸ÐºÐ»Ñ\8eÑ\87аÑ\82и Ð·Ñ\96 Ð²сіх груп",
+       "listgrouprights-addgroup": "можливÑ\96Ñ\81Ñ\82Ñ\8c додавати в {{PLURAL:$2|1=групу|групи}}: $1",
+       "listgrouprights-removegroup": "можливÑ\96Ñ\81Ñ\82Ñ\8c виключати з {{PLURAL:$2|1=групи|груп}}: $1",
+       "listgrouprights-addgroup-all": "можливÑ\96Ñ\81Ñ\82Ñ\8c додавати до всіх груп",
+       "listgrouprights-removegroup-all": "можливÑ\96Ñ\81Ñ\82Ñ\8c Ð²Ð¸ÐºÐ»Ñ\8eÑ\87аÑ\82и Ð· Ñ\83сіх груп",
        "listgrouprights-addgroup-self": "може додавати {{PLURAL:$2|1=групу|групи}} до свого облікового запису: $1",
-       "listgrouprights-removegroup-self": "може Ð²Ð¸Ð»Ñ\83Ñ\87аÑ\82и {{PLURAL:$2|1=гÑ\80Ñ\83пÑ\83|гÑ\80Ñ\83пи}} Ð·Ñ\96 Ñ\81вого Ð¾Ð±Ð»Ñ\96кового Ð·Ð°Ð¿Ð¸Ñ\81Ñ\83: $1",
+       "listgrouprights-removegroup-self": "Ð\9cожливÑ\96Ñ\81Ñ\82Ñ\8c Ð²Ð¸Ð»Ñ\83Ñ\87иÑ\82и Ð·Ñ\96 Ñ\81вого Ð¾Ð±Ð»Ñ\96кового Ð·Ð°Ð¿Ð¸Ñ\81Ñ\83 {{PLURAL:$2|1=гÑ\80Ñ\83пÑ\83|гÑ\80Ñ\83пи}}: $1",
        "listgrouprights-addgroup-self-all": "Може додавати всі групи до свого облікового запису",
        "listgrouprights-removegroup-self-all": "може вилучати всі групи зі свого облікового запису",
        "listgrouprights-namespaceprotection-header": "Обмеження простору імен",
        "emailuser-title-notarget": "Надіслати електронного листа користувачеві",
        "emailpage": "Лист користувачеві",
        "emailpagetext": "Заповнивши наведену нижче форму, можна надіслати повідомлення {{GENDER:$1|цьому користувачу|цій користувачці}}.\nЕлектронна адреса, яку Ви зазначили у [[Special:Preferences|своїх налаштуваннях]], буде зазначена в полі «Від кого» листа, тому одержувач матиме можливість відповісти безпосередньо вам.",
-       "defemailsubject": "{{SITENAME}} - електронний лист від користувача \" $1 \"",
+       "defemailsubject": "{{SITENAME}} — електронний лист від користувача «$1»",
        "usermaildisabled": "Електронне листування між користувачами вимкнене",
        "usermaildisabledtext": "Ви не можете надсилати електронні листи іншим користувачам цієї вікі",
        "noemailtitle": "Відсутня адреса електронної пошти",
        "namespace": "Простір назв:",
        "invert": "Крім вибраного",
        "tooltip-invert": "Встановіть цей прапорець, щоб приховати зміни на сторінках, в межах обраного простору імен (і пов'язаних просторів імен, за потреби)",
+       "tooltip-whatlinkshere-invert": "Поставте цю галочку, щоб приховати зміни на сторінках із обраного простору назв.",
        "namespace_association": "Пов'язаний простір назв",
        "tooltip-namespace_association": "Встановіть цей прапорець, щоб додати простір імен обговорень, пов'язаних з обраним простором імен",
        "blanknamespace": "(Основний)",
        "thumbnail_image-missing": "Очевидно, відсутній файл $1",
        "thumbnail_image-failure-limit": "Там було дуже багато недавніх невдалих спроб ($1 або більше) для візуалізації цього ескізу. Будь ласка, спробуйте ще раз пізніше.",
        "import": "Імпорт статей",
-       "importinterwiki": "Ð\9cÑ\96жвÑ\96кÑ\96 Ñ\96мпоÑ\80Ñ\82",
-       "import-interwiki-text": "Вкажіть вікі й назву імпортованої сторінки.\nДати змін й імена авторів буде збережено.\nУсі операції міжвікі-імпорту реєструються в [[Special:Log/import|відповідному протоколі]].",
+       "importinterwiki": "Ð\86мпоÑ\80Ñ\82Ñ\83ваÑ\82и Ð· Ñ\96нÑ\88оÑ\97 Ð²Ñ\96кÑ\96",
+       "import-interwiki-text": "Вкажіть вікі й назву імпортованої сторінки.\nДати змін й імена авторів буде збережено.\nУсі імпорти з інших вікі реєструються у [[Special:Log/import|відповідному журналі]].",
        "import-interwiki-sourcewiki": "Джерело вікі:",
        "import-interwiki-sourcepage": "Вихідна сторінка:",
        "import-interwiki-history": "Копіювати всю історію змін цієї сторінки",
        "importcantopen": "Неможливо відкрити файл імпорту",
        "importbadinterwiki": "Невірне інтервікі-посилання",
        "importsuccess": "Імпорт виконано!",
-       "importnosources": "Ð\9dе Ð±Ñ\83ло Ð²Ð¸Ð±Ñ\80ане Ð´Ð¶ÐµÑ\80ело Ð¼Ñ\96жвÑ\96кÑ\96\96мпоÑ\80Ñ\82Ñ\83, Ð¿Ñ\80Ñ\8fме Ð·Ð°Ð²Ð°Ð½Ñ\82аженнÑ\8f Ñ\96Ñ\81Ñ\82оÑ\80Ñ\96Ñ\97 Ð·Ð¼Ñ\96н Ð²Ð¸Ð¼ÐºÐ½Ñ\83Ñ\82е.",
+       "importnosources": "Ð\9fÑ\80Ñ\8fме Ð·Ð°Ð²Ð°Ð½Ñ\82аженнÑ\8f Ñ\96Ñ\81Ñ\82оÑ\80Ñ\96Ñ\97 Ð·Ð¼Ñ\96н Ð±Ñ\83ло Ð²Ð¸Ð¼ÐºÐ½Ñ\83Ñ\82е, Ð¾Ñ\81кÑ\96лÑ\8cки Ð½Ðµ Ð±Ñ\83ла Ð²Ð¸Ð±Ñ\80ана Ð²Ñ\96кÑ\96, Ð· Ñ\8fкоÑ\97 Ð¼Ð¾Ð¶Ð½Ð° Ð±Ñ\83ло Ð± Ñ\96мпоÑ\80Ñ\82Ñ\83ваÑ\82и.",
        "importnofile": "Файл імпорту не було завантажено.",
        "importuploaderrorsize": "Не вдалося завантажити або імпортувати файл. Розмір файлу перевищує встановлену межу.",
        "importuploaderrorpartial": "Не вдалося завантажити або імпортувати файл. Він був завантажений лише частково.",
        "import-rootpage-nosubpage": "В просторі назв вказаної кореневої сторінки «$1» заборонені підсторінки",
        "importlogpage": "Журнал імпорту",
        "importlogpagetext": "Імпорт адміністраторами сторінок з історією редагувань з інших вікі.",
-       "import-logentry-upload": "«[[$1]]» — імпорт з файлу",
        "import-logentry-upload-detail": "Імпортовано $1 {{PLURAL:$1|версія|версії|версій}}",
-       "import-logentry-interwiki": "«$1» — міжвікі імпорт",
        "import-logentry-interwiki-detail": "Імпортовано $1 {{PLURAL:$1|версія|версії|версій}} з $2",
        "javascripttest": "Тестування JavaScript",
        "javascripttest-pagetext-noframework": "Ця сторінка призначений для тестування JavaScript.",
        "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-explanation": "За замовчуванням, новостворені мітки будуть доступні для використання користувачами і ботами.",
+       "tags-create-tag-name": "Назва мітки:",
+       "tags-create-reason": "Причина:",
+       "tags-create-submit": "Створити",
+       "tags-create-no-name": "Ви повинні вказати назву мітки.",
+       "tags-create-invalid-chars": "Назви міток не повинні містити коми (<code>,</code>) або косі риски (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Назви міток не повинні містити символи, які не можна використовувати в назвах сторінок.",
+       "tags-create-already-exists": "Мітка «$1» вже існує.",
+       "tags-create-warnings-above": "При спробі створити мітку «$1» {{PLURAL:$2|з'явились такі|1=з'явилось таке}} попередження:",
+       "tags-create-warnings-below": "Ви хочете продовжити створення мітки?",
+       "tags-delete-title": "Вилучити мітку",
+       "tags-delete-explanation-initial": "Ви збираєтеся вилучити мітку «$1» з бази даних.",
+       "tags-delete-explanation-in-use": "Його буде вилучено з {{PLURAL:$2|$2 версії/запису журналу|усіх $2 версій та/або записів журналів}}, у яких він зараз застосовується.",
+       "tags-delete-explanation-warning": "Ця дія є <strong>незворотною</strong> і <strong>не може бути скасована</strong>, навіть адміністраторами бази даних. Переконайтеся, що Ви хочете вилучити саме цю мітку.",
+       "tags-delete-explanation-active": "<strong>Мітка «$1» все ще активна і буде застосовуватися надалі.</strong> Щоб припинити це, перейдіть туди, де вказане її застосування і вимкніть її там.",
+       "tags-delete-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": "Активувати мітку",
+       "tags-activate-question": "Ви збираєтеся активувати мітку «$1».",
+       "tags-activate-reason": "Причина:",
+       "tags-activate-not-allowed": "Неможливо активувати мітку «$1».",
+       "tags-activate-not-found": "Мітка «$1» не існує.",
+       "tags-activate-submit": "Активувати",
+       "tags-deactivate-title": "Вимкнути мітку",
+       "tags-deactivate-question": "Ви збираєтеся вимкнути мітку «$1».",
+       "tags-deactivate-reason": "Причина:",
+       "tags-deactivate-not-allowed": "Неможливо вимкнути мітку «$1».",
+       "tags-deactivate-submit": "Вимкнути",
        "comparepages": "Порівняння сторінок",
        "compare-page1": "Сторінка 1",
        "compare-page2": "Сторінка 2",
        "revdelete-uname-unhid": "ім'я користувача відкрито",
        "revdelete-restricted": "застосовані обмеження для адміністраторів",
        "revdelete-unrestricted": "зняті обмеження для адміністраторів",
+       "logentry-block-block": "$1 {{GENDER:$2|заблокував|заблокувала}} {{GENDER:$4|$3}} на термін $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|розблокував|розблокувала}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|переблокував|переблокувала}} {{GENDER:$4|$3}} на термін $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|заблокував}} {{GENDER:$4|$3}} строком на $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|змінив}} блокування для {{GENDER:$4|$3}} на період $5 $6",
+       "logentry-import-upload": "$1 імпортува{{GENDER:$2|в|ла}} $3 через завантаження файлів",
+       "logentry-import-interwiki": "$1 імпортува{{GENDER:$2|в|ла}} $3 з іншої вікі",
        "logentry-merge-merge": "$1 {{GENDER:$2|приєднав|приєднала}} $3 до $4 (версії до $5)",
        "logentry-move-move": "$1 {{GENDER:$2|перейменував|перейменувала}} сторінку з $3 на $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|перейменував|перейменувала}} сторінку з $3 на $4 без створення перенаправлення",
        "logentry-upload-upload": "$1 {{GENDER:$2|завантажив|завантажила}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|завантажив|завантажила}} нову версію $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|завантажив|завантажила}} $3",
+       "log-name-managetags": "Журнал управління мітками",
+       "log-description-managetags": "На цій сторінці перераховані завдання управління, пов'язані з [[Special:Tags|мітками]]. Журнал містить тільки дії, виконані вручну адміністратором; мітки можуть бути створені або видалені програмним забезпеченням вікі без запису в цей журнал.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|створив|створила}} мітку «$4»",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|вилучив|вилучила}} мітку «$4» (вилучено з $5 {{PLURAL:$5|версії чи запису журналу|версій та/або записів журналу}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|активував|активувала}} мітку «$4» для використання користувачами і ботами",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|вимкнув|вимкнула}} мітку «$4» для використання користувачами і ботами",
        "rightsnone": "(нема)",
        "revdelete-summary": "коментар до редагування",
+       "feedback-adding": "Додавання відгуку на сторінку ...",
+       "feedback-back": "Назад",
+       "feedback-bugcheck": "Чудово! Просто перевірте, що це не одна з вже [$1 відомих помилок].",
+       "feedback-bugnew": "Я перевірив. Повідомити про нову помилку",
        "feedback-bugornote": "Якщо ви готові описати технічні проблеми в деталях, будь ласка, [$1 повідомте про помилку].\nАбо можете використати форму нижче. Ваш коментар буде додано на сторінку \"[$3  $2]\", разом з іменем користувача.",
-       "feedback-subject": "Тема:",
-       "feedback-message": "Повідомлення:",
        "feedback-cancel": "Скасувати",
-       "feedback-submit": "Надіслати відгук",
-       "feedback-adding": "Додавання відгуку на сторінку ...",
+       "feedback-close": "Виконано",
+       "feedback-external-bug-report-button": "Повідомити про технічну проблему",
+       "feedback-dialog-title": "Надіслати відгук",
+       "feedback-dialog-intro": "Для надсилання відгуку Ви можете скористатись простою формою внизу. Ваш коментар буде залишений на сторінці «$1», разом із Вашим іменем користувача (або IP-адресою).",
+       "feedback-error-title": "Помилка",
        "feedback-error1": "Помилка: Невідомий результаті API",
        "feedback-error2": "Помилка: Збій редагувань",
        "feedback-error3": "Помилка: Немає відповіді від API",
+       "feedback-message": "Повідомлення:",
+       "feedback-subject": "Тема:",
+       "feedback-submit": "Надіслати",
+       "feedback-terms": "Я розумію, що мій ідентифікатор User Agent містить інформацію про тип мого браузера та версію операційної системи, і ця інформація після залишення відгуку перебуватиме в публічному доступі.",
+       "feedback-termsofuse": "Я погоджуюсь залишити відгук у відповідності до Умов використання.",
        "feedback-thanks": "Дякуємо! Ваші відгук розміщено на сторінці \"[$2 $1]\".",
-       "feedback-close": "Виконано",
-       "feedback-bugcheck": "Чудово! Просто перевірте, що це не одна з вже [$1 відомих помилок].",
-       "feedback-bugnew": "Я перевірив. Повідомити про нову помилку",
+       "feedback-thanks-title": "Дякуємо!",
+       "feedback-useragent": "User Agent:",
        "searchsuggest-search": "Пошук",
        "searchsuggest-containing": "що містять...",
        "api-error-badaccess-groups": "Вам не дозволено завантажувати файли до цього вікіпроекту.",
        "pagelang-language": "Мова",
        "pagelang-use-default": "Мова за замовчуванням",
        "pagelang-select-lang": "Оберіть мову",
-       "right-pagelang": "Ð\97мÑ\96ниÑ\82и Ð¼Ð¾Ð²Ñ\83 сторінки",
+       "right-pagelang": "змÑ\96на Ð¼Ð¾Ð²Ð¸ сторінки",
        "action-pagelang": "змінити мову сторінки",
        "log-name-pagelang": "Журнал змін мови",
        "log-description-pagelang": "Це журнал змін мови сторінок.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|змінив|змінила}} мову сторінки для $3 з $4 на $5.",
        "default-skin-not-found": "Ой! Типова тема оформлення для вашої вікі <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nВаша установка, вірогідно, містить наступні теми оформлення. Див.  [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для отримання інформації про те, як включити теми оформлення і вибрати типову тему.\n\n\n$2\n\n\n; Якщо ви щойно встановили MediaWiki:\n: Ви, мабуть, зробили це з Git або безпосередньо з вихідного коду, використовуючи інший спосіб. Тоді можливе наступне. Спробуйте встановити деякі теми з [https://www.mediawiki.org/wiki/Category:All_skins каталогу тем оформлення сайту mediawiki.org]:\n:* Завантаживши [https://www.mediawiki.org/wiki/Download архів файлів], який містить декілька тем оформлення і розширень. Ви можете скопіювати теку <code>skins/</code> з нього.\n:* Завантаживши архіви окремих тем оформлення з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Склонувавши один з репозиторіїв <code>mediawiki/skins/*</code> через git у підтеку <code dir=\"ltr\">skins/</code> теки, де встановлена MediaWiki.\n: Це не повинно зашкодити вашому сховищу, якщо ви MediaWiki-розробник. Див. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для отримання інформації про те, як включити теми оформлення і вибрати типову тему.\n\n; Якщо ви щойно оновили MediaWiki:\n: MediaWiki версії 1.24 і новійша більше не включає автоматично встановлені теми (див. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nВи можете вставити наступні рядки в <code>LocalSettings.php</code>, щоб включити всі встановлені теми оформлення: \n\n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Якщо ви щойно змінили <code>LocalSettings.php</code>:\n: Повторно перевірте назви тем на наявність помилок.",
-       "default-skin-not-found-no-skins": "Ð\9eй! Ð¢Ð¸Ð¿Ð¾Ð²Ð° Ñ\82ема Ð¾Ñ\84оÑ\80мленнÑ\8f Ð´Ð»Ñ\8f Ð²Ð°Ñ\88оÑ\97 Ð²Ñ\96кÑ\96 <code>$wgDefaultSkin</code>, <code>$1</code> Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пна.\n\n\nУ Ð²Ð°Ñ\81 Ð½ÐµÐ¼Ð°Ñ\94 Ð²Ñ\81Ñ\82ановлениÑ\85 Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f.\n\n\n; Ð¯ÐºÑ\89о Ð²Ð¸ Ñ\89ойно Ð²Ñ\81Ñ\82ановили Ð°Ð±Ð¾ Ð¾Ð½Ð¾Ð²Ð¸Ð»Ð¸ MediaWiki:\n: Ð\92и, Ð¼Ð°Ð±Ñ\83Ñ\82Ñ\8c, Ð·Ñ\80обили Ñ\86е Ð· Git Ð°Ð±Ð¾ Ð±ÐµÐ·Ð¿Ð¾Ñ\81еÑ\80еднÑ\8cо Ð· Ð²Ð¸Ñ\85Ñ\96дного ÐºÐ¾Ð´Ñ\83, Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83Ñ\8eÑ\87и Ñ\96нÑ\88ий Ñ\81поÑ\81Ñ\96б. Ð¢Ð¾Ð´Ñ\96 Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ Ñ\82аке. MediaWiki Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97 1.24 Ð°Ð±Ð¾ Ð½Ð¾Ð²Ñ\96Ñ\88а Ð½Ðµ Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ñ\82еми Ð¾Ñ\84оÑ\80мленнÑ\8f Ð² Ð¾Ñ\81новномÑ\83 Ñ\80епозиÑ\82оÑ\80Ñ\96Ñ\97. Ð¡Ð¿Ñ\80обÑ\83йÑ\82е Ð²Ñ\81Ñ\82ановиÑ\82и Ð´ÐµÑ\8fкÑ\96 Ñ\82еми Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алогÑ\83 Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\81айÑ\82Ñ\83 mediawiki.org]:\n:* Ð\97аванÑ\82аживÑ\88и [https://www.mediawiki.org/wiki/Download Ð°Ñ\80Ñ\85Ñ\96в Ñ\84айлÑ\96в], Ñ\8fкий Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ð´ÐµÐºÑ\96лÑ\8cка Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\96 Ñ\80озÑ\88иÑ\80енÑ\8c. Ð\92и Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81копÑ\96Ñ\8eваÑ\82и Ñ\82екÑ\83 <code>skins/</code> Ð· Ð½Ñ\8cого.\n:* Ð¡ÐºÐ»Ð¾Ð½Ñ\83вавÑ\88и Ð¾Ð´Ð¸Ð½ Ð· Ñ\80епозиÑ\82оÑ\80Ñ\96Ñ\97в <code>mediawiki/skins/*</code> Ñ\87еÑ\80ез git Ð² Ð¿Ñ\96дÑ\82екÑ\83 <code dir=\"ltr\">skins/</code> Ñ\82еки, Ð´Ðµ Ð²Ñ\81Ñ\82ановлена MediaWiki.\n: Ð¦Ðµ Ð½Ðµ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð¾ Ð·Ð°Ñ\88кодиÑ\82и Ð²Ð°Ñ\88омÑ\83 Ñ\81Ñ\85овиÑ\89Ñ\83, Ñ\8fкÑ\89о Ð²Ð¸ MediaWiki-Ñ\80озÑ\80обник. Ð\94ив. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] Ð´Ð»Ñ\8f Ð¾Ñ\82Ñ\80иманнÑ\8f Ñ\96нÑ\84оÑ\80маÑ\86Ñ\96Ñ\97 Ð¿Ñ\80о Ñ\82е, Ñ\8fк Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82и Ñ\82еми Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\96 Ð²Ð¸Ð±Ñ\80аÑ\82и Ñ\82иповÑ\83 Ñ\82емÑ\83.",
+       "default-skin-not-found-no-skins": "Ð\9eй! Ð¢ÐµÐ¼Ð° Ð¾Ñ\84оÑ\80мленнÑ\8f Ð´Ð»Ñ\8f Ð\92аÑ\88оÑ\97 Ð²Ñ\96кÑ\96 Ð·Ð° Ð·Ð°Ð¼Ð¾Ð²Ñ\87Ñ\83ваннÑ\8fм, Ð²Ð¸Ð·Ð½Ð°Ñ\87ена Ñ\83 <code>$wgDefaultSkin</code> Ñ\8fк <code>$1</code> Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пна.\n\n\nУ Ð\92аÑ\81 Ð½ÐµÐ¼Ð°Ñ\94 Ð²Ñ\81Ñ\82ановлениÑ\85 Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f.\n\n\n; Ð¯ÐºÑ\89о Ð\92и Ñ\89ойно Ð²Ñ\81Ñ\82ановили Ð°Ð±Ð¾ Ð¾Ð½Ð¾Ð²Ð¸Ð»Ð¸ MediaWiki:\n: Ð\92и, Ð¼Ð°Ð±Ñ\83Ñ\82Ñ\8c, Ð·Ñ\80обили Ñ\86е Ð· Git Ð°Ð±Ð¾ Ð±ÐµÐ·Ð¿Ð¾Ñ\81еÑ\80еднÑ\8cо Ð· Ð²Ð¸Ñ\85Ñ\96дного ÐºÐ¾Ð´Ñ\83, Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83Ñ\8eÑ\87и Ñ\96нÑ\88ий Ñ\81поÑ\81Ñ\96б. Ð¢Ð¾Ð´Ñ\96 Ñ\86е Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾. MediaWiki Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97 1.24 Ð°Ð±Ð¾ Ð½Ð¾Ð²Ñ\96Ñ\88а Ð½Ðµ Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ñ\82еми Ð¾Ñ\84оÑ\80мленнÑ\8f Ð² Ð¾Ñ\81новномÑ\83 Ñ\80епозиÑ\82оÑ\80Ñ\96Ñ\97. Ð¡Ð¿Ñ\80обÑ\83йÑ\82е Ð²Ñ\81Ñ\82ановиÑ\82и Ð´ÐµÑ\8fкÑ\96 Ñ\82еми Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алогÑ\83 Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\81айÑ\82Ñ\83 mediawiki.org]:\n:* Ð\97аванÑ\82аживÑ\88и [https://www.mediawiki.org/wiki/Download Ð°Ñ\80Ñ\85Ñ\96в Ñ\84айлÑ\96в], Ñ\8fкий Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ð´ÐµÐºÑ\96лÑ\8cка Ñ\82ем Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\96 Ñ\80озÑ\88иÑ\80енÑ\8c. Ð\92и Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81копÑ\96Ñ\8eваÑ\82и Ñ\82екÑ\83 <code>skins/</code> Ð· Ð½Ñ\8cого.\n:* Ð\97аванÑ\82аживÑ\88и Ð¾ÐºÑ\80емÑ\96 Ð°Ñ\80Ñ\85Ñ\96ви Ñ\82ем Ð· [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Ð\9aлонÑ\83вавÑ\88и Ð¾Ð´Ð¸Ð½ Ð· Ñ\80епозиÑ\82оÑ\80Ñ\96Ñ\97в <code>mediawiki/skins/*</code> Ñ\87еÑ\80ез Git Ð² Ð¿Ñ\96дÑ\82екÑ\83 <code dir=\"ltr\">skins/</code> Ñ\82еки, Ð´Ðµ Ð²Ñ\81Ñ\82ановлена MediaWiki.\n: Ð¦Ðµ Ð½Ðµ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð¾ Ð·Ð°Ñ\88кодиÑ\82и Ð\92аÑ\88омÑ\83 Ñ\81Ñ\85овиÑ\89Ñ\83, Ñ\8fкÑ\89о Ð\92и MediaWiki-Ñ\80озÑ\80обник. Ð\94ив. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] Ð´Ð»Ñ\8f Ð¾Ñ\82Ñ\80иманнÑ\8f Ñ\96нÑ\84оÑ\80маÑ\86Ñ\96Ñ\97 Ð¿Ñ\80о Ñ\82е, Ñ\8fк Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82и Ñ\82еми Ð¾Ñ\84оÑ\80мленнÑ\8f Ñ\96 Ð²Ð¸Ð±Ñ\80аÑ\82и Ñ\82емÑ\83 Ð·Ð° Ð·Ð°Ð¼Ð¾Ð²Ñ\87Ñ\83ваннÑ\8fм.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (увімкнено)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''вимкнено''')",
        "mediastatistics": "Медіа-статистика",
        "mediastatistics-header-drawing": "Малюнки (векторні зображення)",
        "mediastatistics-header-audio": "Звук",
        "mediastatistics-header-video": "Відео",
-       "mediastatistics-header-multimedia": "Мішана мультимедія",
+       "mediastatistics-header-multimedia": "Мішана мультимедіа",
        "mediastatistics-header-office": "Офіс",
        "mediastatistics-header-text": "Текст",
        "mediastatistics-header-executable": "Виконувані файли",
        "json-error-utf8": "Спотворені символи UTF-8, можливо, неправильно закодовано",
        "json-error-recursion": "Необхідність закодувати одне чи більше рекурсивних посилань",
        "json-error-inf-or-nan": "Необхідність закодувати одне чи більше значення NAN або INF",
-       "json-error-unsupported-type": "Було вказано значення типу, який не вдається закодувати"
+       "json-error-unsupported-type": "Було вказано значення типу, який не вдається закодувати",
+       "headline-anchor-title": "Посилання на цей розділ",
+       "special-characters-group-latin": "Латинські",
+       "special-characters-group-latinextended": "Розширена латинська",
+       "special-characters-group-ipa": "МФА (IPA)",
+       "special-characters-group-symbols": "Символи",
+       "special-characters-group-greek": "Грецькі",
+       "special-characters-group-cyrillic": "Кирилиця",
+       "special-characters-group-arabic": "Арабські",
+       "special-characters-group-arabicextended": "Арабська розширена",
+       "special-characters-group-persian": "Перські",
+       "special-characters-group-hebrew": "Іврит",
+       "special-characters-group-bangla": "Бенгальські",
+       "special-characters-group-tamil": "Тамільська",
+       "special-characters-group-telugu": "Телугу",
+       "special-characters-group-sinhala": "Сингальська",
+       "special-characters-group-gujarati": "Гуджараті",
+       "special-characters-group-devanagari": "Деванагарі",
+       "special-characters-group-thai": "Тайські",
+       "special-characters-group-lao": "Лаоські",
+       "special-characters-group-khmer": "Кхмерські",
+       "special-characters-title-endash": "коротке тире",
+       "special-characters-title-emdash": "довге тире",
+       "special-characters-title-minus": "мінус"
 }
index c508fed..87dd1a9 100644 (file)
@@ -21,7 +21,8 @@
                        "아라",
                        "Calak",
                        "عرفان ارشد",
-                       "Obaid Raza"
+                       "Obaid Raza",
+                       "عثمان خان شاہ"
                ]
        },
        "tog-underline": "ربط کی خط کشیدگی:",
        "history_short": "تاریخچہ",
        "updatedmarker": "میری آخری آمد تک جدید",
        "printableversion": "قابل طبع نسخہ",
-       "permalink": "مستقل کڑی",
+       "permalink": "مستقل ربط",
        "print": "طباعت",
        "view": "منظر",
        "view-foreign": "$1 پر دیکھیں",
        "pool-errorunknown": "نامعلوم خطا",
        "poolcounter-usage-error": "استعمال میں خامی: $1",
        "aboutsite": "تعارف {{SITENAME}}",
-       "aboutpage": "Project:تعارف",
+       "aboutpage": "منصوبہ:تعارف",
        "copyright": "تمام مواد $1 کے تحت میسر ہے، جب تک کوئی دوسری وجہ نا ہو۔",
        "copyrightpage": "{{ns:project}}:حقوق تصانیف",
        "currentevents": "حالیہ واقعات",
        "perfcachedts": "ذیلی ڈیٹا ابطن شدہ ہے (cached) اور آخری بار اِس کی بتاریخیت $1 کو ہوئی. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "اِس صفحہ کیلئے بتاریخات فی الحال ناقابل بنائی گئی ہیں.\nیہاں کا ڈیٹا ابھی تازہ نہیں کیا جائے گا.",
        "viewsource": "مسودہ",
+       "viewsource-title": "$1 کا مسودہ دیکھیں",
        "actionthrottled": "Action throttled",
        "actionthrottledtext": "بطورِ ایک ضدسپم تدبیر، آپ کو مختصر وقت میں کئی بار یہ عمل بجا لانے سے محدود کیا گیا، اور آپ یہ حد پار کرچکے ہیں.\nبراہِ کرم، کچھ منٹ بعد کوشش کیجئے.",
        "protectedpagetext": "اس صفحہ کو تدوین سے محفوظ رکھنے کیلیے مقفل کر دیا گیا ہے۔",
        "virus-scanfailed": "تفریس ناکام (رمز $1)",
        "virus-unknownscanner": "انجان ضدوائرس:",
        "logouttext": "'''اب آپ خارج ہوچکے ہیں'''\n\nآپ گمنام طور پر {{SITENAME}}  کا استعمال جاری رکھ سکتے ہیں، یا دوبارہ اسی نام یا مختلف نام سے <span class='plainlinks'>[$1 دوبارہ داخلِ نوشتہ]</span> بھی ہو سکتے ہیں۔  یہ یاد آوری کرلیجیۓ کہ کچھ صفحات ایسے نظر آتے رہیں گے کہ جیسے ابھی آپ خارج نہیں ہوئے ، جب تک آپ اپنے متصفح کا ابطن صاف نہ کردیں۔",
+       "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": "پاس ورڈ پھر داخل کریں",
        "remembermypassword": "اِس متصفح پر میرے داخلِ نوشتگی معلومات یاد رکھو (زیادہ سے زیادہ $1 {{PLURAL:$1|دِن|ایام}} کیلئے)",
+       "userlogin-remembermypassword": "مجھے داخل رکھے",
        "yourdomainname": "آپکا ڈومین",
        "password-change-forbidden": "آپ اس ویکی پر پارلفظ (پاس روڈ) تبدیل نہیں کر سکتے",
        "externaldberror": "یا تو توثیقی ڈیٹابیس میں خطا واقع ہوئی اور یا آپ کو بیرونی کھاتہ بتاریخ کرنے کی اِجازت نہیں ہے.",
        "logout": "اخراج",
        "userlogout": "خارج ہوجائیں",
        "notloggedin": "داخلہ نہیں ہوا",
+       "userlogin-noaccount": "کیا آپ نے کھاتہ نہیں بنایا ہوا؟",
+       "userlogin-joinproject": "منسلک ہو {{SITENAME}} سے",
        "nologin": "کیا آپ نے کھاتہ نہیں بنایا ہوا؟ '''$1'''۔",
        "nologinlink": "کھاتا بنائیں",
        "createaccount": "کھاتہ کھولیں",
        "gotaccount": "پہلے سے کھاتہ بنا ہوا ہے? '''$1'''.",
        "gotaccountlink": "داخل ہوجائیے",
        "userlogin-resetlink": "داخلِ نوشتہ ہونے کی تفاصیل بھول گئے ہیں؟",
+       "userlogin-resetpassword-link": "کلمہ شناخت بھول گئے؟",
        "createacct-emailrequired": "ای میل پتہ",
        "createacct-emailoptional": "ای میل ایڈریس (اختیاری)",
        "createacct-email-ph": "اپنا برقی پتہ لکھیں",
        "createacct-reason": "وجہ",
        "createacct-captcha": "حفاظتی تدبیر",
        "createacct-imgcaptcha-ph": "آپ اوپر دیکھ متن داخل کریں",
+       "createacct-submit": "آپ کا کھاتا بنائیں",
        "createacct-benefit-heading": "{{SITENAME}} آپ جیسے لوگوں کی طرف سے بنایا گیا ہے ۔",
        "createacct-benefit-body1": "ترمیم",
-       "createacct-benefit-body2": "صفحات",
+       "createacct-benefit-body2": "$1 {{PLURAL:$1|صفحہ|صفحات}}",
        "createacct-benefit-body3": "شرکت کرنے والے اس ماہ کے",
        "badretype": "درج شدہ کلمۂ شناخت اصل سے مطابقت نہیں رکھتا۔",
        "userexists": "داخل کردہ اسم صارف پہلے سے مستعمل ہے۔\nبراہِ کرم! کوئی دوسرا اسم منتخب کیجئے۔",
        "createaccount-text": "کسی نے {{SITENAME}} ($4) پر \"$2\" کے نام سے اور \"$3\" پارلفظ کے ساتھ آپ کا برقی پتہ استعمال کرتے ہوئے کھاتہ بنایا ہے.\nآپ کو چاہئے کہ ابھی داخلِ نوشتہ ہوکر اپنا پارلفظ تبدیل کردیں.\n\nاگر یہ کھاتہ غلطی سے بنا تھا تو آپ یہ پیغام نظرانداز کرسکتے ہیں.",
        "login-throttled": "آپ نے داخلِ نوشتہ ہونے کیلئے بہت زیادہ حالیہ کوششیں کیں.\nدوبارہ کوشش کرنے سے پہلے انتظار فرمائیے.",
        "loginlanguagelabel": "زبان: $1",
+       "pt-login": "داخل ہوجائیے",
+       "pt-login-button": "داخل ہو",
+       "pt-createaccount": "کھاتا بنائیں",
+       "pt-userlogout": "خارج ہوجائیں",
        "user-mail-no-addy": "برقی ڈاک بھیجنے کی کوشش بغیر برقی ڈاک پتہ",
        "changepassword": "کلمۂ شناخت تبدیل کریں",
        "resetpass_announce": "آپ ایک برقی ارسال کردہ عارضی رمز کے ساتھ داخل ہوئے ہیں.\nداخلِ نوشتہ کے عمل کو مکمل کرنے کیلئے آپ کو یہاں نیا پارلفظ متعین کرنا ہوگا:",
        "previewnote": "'''یاد رکھیں، یہ صرف نمائش ہے ۔آپ کی ترامیم ابھی محفوظ نہیں کی گئیں۔'''",
        "session_fail_preview": "معاف کیجئے! نشست کے مواد میں خامی کی وجہ سے آپکی  ترمیم پر عمل نہیں کیا جاسکا.\nبرائے مہربانی دوبارہ کوشش کیجئے.\nاگر آپکو پھر بھی مشکل پیش آرہی ہے تو [[Special:UserLogout|خارجِ نوشتہ]] ہوکر واپس داخلِ نوشتہ ہوجایئے.",
        "editing": "آپ \"$1\" میں ترمیم کر رہے ہیں۔",
+       "creating": "زیر تخلیق $1",
        "editingsection": "$1 کے قطعہ کی تدوین",
        "editingcomment": "زیرترمیم $1 (تبصرہ)",
        "editconflict": "تنازعہ ترمیم:$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": "سب کچھ",
        "grouppage-sysop": "{{ns:project}}:منتظمین",
        "grouppage-bureaucrat": "بیورو کریٹ",
        "right-upload": "ملفات زبراثقال (اپ لوڈ) کریں",
+       "right-writeapi": "اے پی آئی لکھائی کا استعمال",
        "right-delete": "صفحات حذف کریں",
        "right-sendemail": "دیگر صارفین کو برقی ڈاک بھیجیں",
        "newuserlogpage": "نوشتۂ آمد صارف",
        "rightslogtext": "یہ صارفی اختیارات میں تبدیلیوں کا نوشتہ ہے۔",
        "action-edit": "اس صفحہ میں ترمیم کریں",
        "nchanges": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
+       "enhancedrc-history": "تاریخچہ",
        "recentchanges": "حالیہ تبدیلیاں",
        "recentchanges-legend": "اِختیاراتِ حالیہ تبدیلیاں",
        "recentchanges-summary": "اس صفحے پر ویکی میں ہونے والی تازہ تریں تبدیلیوں کا مشاہدہ کیجیۓ۔",
        "recentchanges-label-minor": "یہ ایک معمولی ترمیم ہے",
        "recentchanges-label-bot": "یہ ایک روبالہ سے سرانجام شدہ ترمیم ہے",
        "recentchanges-label-unpatrolled": "اس ترمیم کی اب تک مراجعت نہیں کی گئی",
+       "recentchanges-label-plusminus": "صفحہ کا حجم تبدیل شدہ بلحاظ بائٹ مقدار",
        "rcnotefrom": "ذیل میں '''$2''' سے کی گئی تبدیلیاں ہیں ('''$1''' تبدیلیاں دکھائی جارہی ہیں)۔",
        "rclistfrom": "$3 $2 سےنئی تبدیلیاں دکھانا شروع کریں",
        "rcshowhideminor": "معمولی ترامیم $1",
+       "rcshowhideminor-show": "دکھائیں",
+       "rcshowhideminor-hide": "چھپائیں",
        "rcshowhidebots": "خودکار صارف $1",
+       "rcshowhidebots-show": "دکھائیں",
+       "rcshowhidebots-hide": "چھپائیں",
        "rcshowhideliu": "داخل شدہ صارف $1",
        "rcshowhideliu-show": "دکھاؤ",
        "rcshowhideliu-hide": "چھپائیں",
        "recentchangeslinked-feed": "متعلقہ تبدیلیاں",
        "recentchangeslinked-toolbox": "متعلقہ تبدیلیاں",
        "recentchangeslinked-title": "\"$1\" سے متعلقہ تبدیلیاں",
-       "recentchangeslinked-summary": "یہ ان تبدیلیوں کی فہرست ہے جو حال ہی میں کسی مخصوص صفحہ سے مربوط صفحات (یا مخصوص زمرہ کے اراکین) میں کی گئی ہیںـ \n\n[[SpecialWatchlist | آپ کی زیر نظر فہرست]] میں یہ صفحات متجل (bold) نظر آئیں گےـ",
+       "recentchangeslinked-summary": "یہ ان تبدیلیوں کی فہرست ہے جو حال ہی میں کسی مخصوص صفحہ سے مربوط صفحات (یا مخصوص زمرہ کے اراکین) میں کی گئی ہیںـ \n\n[[Special:Watchlist | آپ کی زیر نظر فہرست]] میں یہ صفحات متجل (bold) نظر آئیں گےـ",
        "recentchangeslinked-page": "صفحۂ منصوبہ دیکھئے",
        "upload": "فائل اثقال",
        "uploadbtn": "زبراثقال ملف (اپ لوڈ فائل)",
        "watchthisupload": "یہ صفحہ زیر نظر کریں",
        "license": "اجازہ:",
        "license-header": "اجازہ کاری",
+       "imgfile": "ملف",
        "listfiles": "فہرست فائل",
        "listfiles_date": "تاریخ",
        "listfiles_name": "نام",
        "listfiles-latestversion": "موجودہ ورژن",
        "listfiles-latestversion-yes": "ہاں",
        "listfiles-latestversion-no": "نہیں",
-       "file-anchor-link": "مسل",
+       "file-anchor-link": "ملف",
        "filehist": "ملف کی تاریخ",
        "filehist-help": "یہ دیکھنے کیلئے کہ کسی خاص وقت پر ملف کس طرح ظاہر ہوتا تھا اُس تاریخ یا وقت پر طق کیجئے۔",
        "filehist-deleteall": "سب حذف",
        "imagelinks": "ملف کا استعمال",
        "linkstoimage": "اِس ملف کے ساتھ درج ذیل {{PLURAL:$1|صفحہ مربوط ہے|$1 صفحات مربوط ہیں}}",
        "nolinkstoimage": "ایسے کوئی صفحات نہیں جو اس ملف (فائل) سے رابطہ رکھتے ہوں۔",
+       "upload-disallowed-here": "آپ اوپر چھڑا کر اس ملف کو نہیں لکھ سکتے۔",
        "filedelete-comment": "وجہ:",
        "filedelete-submit": "حذف کریں",
        "filedelete-success": " (\"اقدام مکمل ہوا\")۔",
        "undeleteviewlink": "دکھاؤ",
        "undeleteinvert": "انتخاب بالعکس",
        "undeletecomment": "وجہ:",
-       "namespace": "جاۓ نام:",
+       "namespace": "فضائے نام:",
        "invert": "انتخاب بالعکس",
+       "namespace_association": "متعلقہ فضا",
        "blanknamespace": "(مرکز)",
-       "contributions": "صارف کا حصہ",
+       "contributions": "{{جنس:$1|صارف}} شراکتیں",
        "contributions-title": "مساہماتِ صارف برائے $1",
        "mycontris": "میرا حصہ",
        "contribsub2": "براۓ $1 ($2)",
        "tooltip-pt-mycontris": "آپ کی شراکت کی فہرست",
        "tooltip-pt-login": "آپ کیلئے داخلِ نوشتہ ہونا اچھا ہے؛ تاہم، یہ ضروری نہیں",
        "tooltip-pt-logout": "خارجِ نوشتہ ہوجائیں",
+       "tooltip-pt-createaccount": "آپ کو مدعو کیا جاتا ہے کہ کھاتہ بنائیں۔تاہم کھاتہ بنانا لازم نہیں۔",
        "tooltip-ca-talk": "مضمون بارے تبادلۂ خیال",
        "tooltip-ca-edit": "آپ اس صفحہ میں ترمیم کرسکتے ہیں.\nبرائے مہربانی! اپنی ترمیمات محفوظ کرنے سے پہلے نمائش کا بٹن استعمال کیجئے",
        "tooltip-ca-addsection": "نیا قطعہ شروع کیجئے",
        "tooltip-search-fulltext": "اس متن کیلئے صفحات تلاش کریں",
        "tooltip-p-logo": "سرورق پر جائیے",
        "tooltip-n-mainpage": "اصل صفحہ پر جائیے",
-       "tooltip-n-mainpage-description": "اصÙ\84 ØµÙ\81Ø­Û\81 پر جائیے",
+       "tooltip-n-mainpage-description": "صÙ\81Ø­Û\81 Ø§Ù\88Ù\84 پر جائیے",
        "tooltip-n-portal": "منصوبہ کے متعلق، آپ کیا کرسکتے ہیں، چیزیں کہاں ڈھونڈنی ہیں",
        "tooltip-n-currentevents": "حالیہ واقعات پر پس منظری معلومات دیکھیئے",
        "tooltip-n-recentchanges": "ویکی میں حالیہ تبدیلیوں کی فہرست",
        "tooltip-summary": "مختصر خلاصہ درج کریں",
        "anonymous": "{{SITENAME}} گمنام صارف",
        "others": "دیگر",
+       "pageinfo-toolboxlink": "معلومات صفحہ",
        "markaspatrolledtext": "اس صفحہ کو بطور مراجعت شدہ نشان زد کریں",
        "deletedrevision": "حذف شدہ پرانی ترمیم $1۔",
        "previousdiff": "← پُرانی تدوین",
        "nextdiff": "صفحہ کا نام:",
        "file-info-size": "\n$1 × $2 عکصر (پکسلز)، حجم ملف: $3، MIME قسم: $4",
        "file-nohires": "اس سے بڑی تصمیم دستیاب نہیں۔",
-       "show-big-image": "مکمل تصمیم",
+       "show-big-image": "اصل ملف",
+       "show-big-image-preview": "اس نمائش کا حجم:$1",
+       "show-big-image-size": "$1 × $2 pixels",
        "newimages": "نئی فائلوں کی گیلری",
        "ilsubmit": "تلاش",
        "bydate": "بالحاظ تاریخ",
        "bad_image_list": "شکلبند درج ذیل ہے:\n\nصرف فہرستی عناصر (* سے شروع ہونے والی لکیری) شامل کی جاتی ہیں۔\nکسی لکیر میں پہلا ربط کوئی خراب ملف کا ہونا چاہئے۔\nاُسی لکیر میں باقی آنے والے ربط کو مستثنیٰ قرار دیا جاتا ہے، مثلاً صفحات جہاں ملف لکیر کے وسط میں آسکتا ہے۔",
        "metadata": "میٹا ڈیٹا",
        "metadata-collapse": "طویل تفاصیل چھپاؤ",
+       "exif-orientation": "پیشکش",
+       "exif-xresolution": "چھوڑاوی دکھاوت",
+       "exif-yresolution": "لمباوی دکھاوت",
+       "exif-datetime": "ملف کے تبدیلی کا تاریخ او وقت",
+       "exif-make": "کیمرے کا صانع",
+       "exif-model": "کیمرے کا ماڈل",
+       "exif-software": "سافٹویئر استعمال",
+       "exif-exifversion": "اکزیف ورژن",
+       "exif-colorspace": "رنگ فضا",
+       "exif-datetimeoriginal": "ڈیٹا بنانے کا تاریخ اور وقت",
+       "exif-datetimedigitized": "معددی کا تاریخ اور وقت",
+       "exif-orientation-1": "عام",
        "exif-meteringmode-0": "نامعلوم",
        "namespacesall": "تمام",
        "monthsall": "تمام",
        "hijri-calendar-m12": "ذوالحجہ",
        "version": "ورژن",
        "specialpages": "خصوصی صفحات",
+       "tag-filter": "[[Special:Tags|لوحہ]] فلٹر:",
+       "logentry-delete-delete": "$1 {{GENDER:$2|حذف کیا گیا}} صفحہ $3",
+       "logentry-newusers-create": "صارف کھاتہ $1 {{GENDER:$2|بنایا گیا}}",
        "rightsnone": "(کچھ نہیں)",
        "revdelete-summary": "خلاصۂ تدوین",
        "searchsuggest-search": "تلاش",
        "expand_templates_output": "نتیجہ",
        "expand_templates_ok": "ٹھیک ہے",
        "expand_templates_remove_comments": "تبصرے حذف کریں",
-       "expand_templates_preview": "پیش نظارہ"
+       "expand_templates_preview": "پیش نظارہ",
+       "special-characters-group-latin": "لاطینی محارف",
+       "special-characters-group-latinextended": "وسیع لاطینی",
+       "special-characters-group-symbols": "علامات",
+       "special-characters-group-greek": "یونانی",
+       "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-thai": "سیامی",
+       "special-characters-group-lao": "لاوسی",
+       "special-characters-group-khmer": "کھمیری"
 }
index 9a5782b..84dae98 100644 (file)
        "accmailtitle": "Maxfiy soʻz joʻnatildi",
        "newarticle": "(Yangi)",
        "newarticletext": "Bu sahifa hali mavjud emas.\nSahifani yaratish uchun quyida matn kiritishingiz mumkin (qoʻshimcha axborot uchun [$1 yordam sahifasini] koʻring).\nAgar bu sahifaga xatolik sabab kelib qolgan boʻlsangiz brauzeringizning '''orqaga''' tugmasini bosing.",
-       "anontalkpagetext": "----''Ushbu munozara sahifasi hali hisob yozuvini yaratmagan, yoki undan foydalanmaydigan anonim ishtirokchiga tegishli.\nShu sababli tenglashtirish uchun raqamli IP-manzildan foydalaniladi.\nUshbu manzilning oʻzi bir nechta boshqa ishtirokchilarga ham mos kelishi mumkin.\nAgar siz anonim ishtirokchi boʻlsangiz va siz oʻzingizga yoʻnaltirilmagan xabar oldim deb taxmin qilsangiz, iltimos, boshqa anonim ishtirokchilar bilan mumkin boʻlgan chalkashliklarni chetlab oʻtish uchun [[Special:UserLogin/signup|hisob yozuvi yarating]] yoki [[Special:UserLogin|tizimga kiring]].''",
+       "anontalkpagetext": "----\n<em>Ushbu munozara sahifasi hisob yozuvi yaratmagan (yoki yaratishni xohlamaydigan) anonim foydalanuvchiga tegishli.</em>\n\nShu sababli, uni aniqlash uchun raqamli IP-manzildan foydalaniladi.\nUshbu IP-manzil bir nechta foydalanuvchilarga tegishli boʻlishi mumkin.\nAgar siz anonim foydalanuvchi boʻlsangiz va qoldirilgan xabarlar sizga yoʻnaltirilmagan deb hisoblasangiz, iltimos, boshqa anonim foydalanuvchilar bilan adashtirib yubormasliklari uchun [[Special:UserLogin/signup|hisob yozuvi yarating]] yoki [[Special:UserLogin|tizimga kiring]].",
        "noarticletext": "Bu sahifada hozircha hech qanday matn yoʻq. Siz bu sarlavhani boshqa sahifalardan [[Special:Search/{{PAGENAME}}|qidirishingiz]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tegishli qaydlarga qarashingiz] yoki bu sahifani [{{fullurl:{{FULLPAGENAME}}|action=edit}} tahrirlashingiz]</span> mumkin.",
        "userpage-userdoesnotexist-view": "\"$1\" foydalanuvchi hisobi roʻyxatga olinmagan.",
        "clearyourcache": "'''Eslatma.''' Saqlaganingizdan so'ng o'zgarishlarni ko'rish uchun siz o'z brauzeringiz keshini tozalashingizga to'gri kelishi mumkin.\n* '''Firefox / Safari:''' ''Shift'' tugmasini bosgan holda, ''Yangilash'' unsurlar darchasini bosing, yoki ''Ctrl-F5'' yoki ''Ctrl-R'' (Macda ''⌘-R'') ni bosing\n* '''Google Chrome:''' ''Ctrl-Shift-R'' (Macda ''⌘-Shift-R'') ni bosing\n* '''Internet Explorer:''' ''Ctrl''ni bosgan holda, ''Yangilash''ni bosing, yoki ''Ctrl-F5''ni bosing\n* '''Opera:''' ''Asboblar → Moslamalar'' menyusidan keshni tozalashni tanlang",
        "note": "'''Izoh:'''",
        "previewnote": "'''Bu shunchaki koʻrib chiqish.''' Oʻzgartirishlar hali saqlangani yoʻq!",
        "continue-editing": "tahrirlashni davom ettirish",
+       "session_fail_preview": "<strong>Afsuski, sizning tahriringiz texnik nosozlik yuzaga kelgani sabab saqlanmadi.</strong>\nIltimos, yana bir bor urinib koʻring.\nAgar shu xato yana takrorlansa, hisob yozuvingizdan [[Special:UserLogout|chiqishni amalga oshiring]] va qaytadan kiring.",
+       "session_fail_preview_html": "<strong>Afsuski, sizning tahriringiz texnik nosozlik yuzaga kelgani sabab saqlanmadi.</strong>\n\n<em>Chunki {{SITENAME}}da faqat HTMLdan foydalanish mumkin, JavaScript-hujumlardan saqlanish maqsadida koʻrib chiqish imkoniyati oʻchirib qoʻyilgan.</em>\n\n<strong>Agar foydali tahrir kiritmoqchi boʻlgan boʻlsangiz, yana bir bor urinib koʻring.</strong>\nAgar shundayam xato takrorlansa, hisob yozuvingizdan [[Special:UserLogout|chiqishni amalga oshiring]] va qaytadan kiring.",
        "editing": "Tahrirlanmoqda — $1",
        "creating": "«$1» sahifasini yaratish",
        "editingsection": "Tahrirlanmoqda — $1 (boʻlimi)",
        "history-feed-title": "Oʻzgarishlar tarixi",
        "history-feed-description": "Vikidagi mazkur sahifaning oʻzgarishlar tarixi",
        "history-feed-item-nocomment": "$1 $2 da",
-       "rev-deleted-comment": "(tahrir izohi o'chirildi)",
+       "rev-deleted-comment": "(tahrir izohi oʻchirilgan)",
        "rev-deleted-user": "(muallif nomi oʻchirilgan)",
        "rev-deleted-event": "(jurnal tafsilotlari o‘chirildi)",
        "rev-delundel": "koʻrsatish/yashirish",
        "prefs-displayrc": "Tasvirlash moslamalari",
        "prefs-displaywatchlist": "Tasvirlash moslamalari",
        "prefs-diffs": "Versiyalar farqi",
+       "userrights": "Foydalanuvchining huquqlarini boshqarish",
        "userrights-user-editname": "Foydalanuvchi nomi:",
        "editusergroup": "Guruhlardagi aʼzoligini oʻzgartirish",
        "userrights-groupsmember": "Aʼzolik:",
        "delete-edit-reasonlist": "Sabablar roʻyxatini tahrirlash",
        "deleting-backlinks-warning": "'''Ogohlantirish:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Baʼzi bir sahifalar]] siz oʻchirmoqchi boʻlayotgan sahifaga bogʻlangan.",
        "rollback": "Oʻzgarishlarni ortga qaytarish",
-       "rollbacklink": "ortga qaytarish",
-       "rollbacklinkcount": "$1 ta tahrirni ortga qaytarish",
-       "rollbacklinkcount-morethan": "$1 tadan koʻp tahrirni ortga qaytarish",
+       "rollbacklink": "qaytarish",
+       "rollbacklinkcount": "$1 {{PLURAL:$1|tahrirni}} qaytarish",
+       "rollbacklinkcount-morethan": "$1 tadan koʻp {{PLURAL:$1|tahrirni}} qaytarish",
        "rollbackfailed": "Eski holiga keltirishda xatolik",
        "revertpage": "[[Special:Contributions/$2|$2]] tahrirlari [[User:$1|$1]] versiyasiga qaytarildi",
        "sessionfailure-title": "Seansda xatolik",
        "whatlinkshere": "Bu sahifaga bog'langan sahifalar",
        "whatlinkshere-title": "\"$1\"ga bogʻlangan sahifalar",
        "whatlinkshere-page": "Sahifa:",
-       "linkshere": "Quyidagi sahifalar '''[[:$1]]''' sahifasiga bog'langan:",
+       "linkshere": "Quyidagi sahifalar '''[[:$1]]''' sahifasiga bogʻlangan:",
        "nolinkshere": "'''[[:$1]]''' sahifasiga hech qaysi sahifa bog‘lanmagan.",
        "nolinkshere-ns": "Tanlangan nomfazoda '''[[:$1]]'''ga bog‘langan sahifalar mavjud emas.",
        "isredirect": "yoʻnaltiruvchi sahifa",
        "whatlinkshere-hideimages": "faylga havolalarini $1",
        "whatlinkshere-filters": "Filtrlar",
        "autoblockid": "Avtochetlashtirish #$1",
-       "block": "Foydalanuvchini muhosara qilish",
+       "block": "Foydalanuvchini chetlashtirish",
        "unblock": "Foydalanuvchiga yo'l ochish",
-       "blockip": "Foydalanuvchini chetlashtir",
-       "blockip-legend": "Foydalanuvchini muhosara qilish",
+       "blockip": "{{GENDER:$1|Foydalanuvchini}} chetlashtirish",
+       "blockip-legend": "Foydalanuvchini chetlashtirish",
        "ipaddressorusername": "IP-manzil yoki foydalanuvchi nomi:",
        "ipbexpiry": "Tugash muddati:",
        "ipbreason": "Sabab:",
        "thumbnail-more": "Kattalashtir",
        "thumbnail_error": "Tasvir yaratishda xatolik: $1",
        "importlogpage": "Import qilish qaydlari",
-       "import-logentry-upload": "\"[[$1]]\"ni yuklash yo'li bilan import qildi",
        "tooltip-pt-userpage": "Foydalanuvchi sahifangiz",
        "tooltip-pt-anonuserpage": "Siznig ip manzilingiz foydalanuvchi sahifasi",
        "tooltip-pt-mytalk": "Suhbat sahifangiz",
        "pageinfo-toolboxlink": "Sahifa haqida maʼlumot",
        "pageinfo-redirectsto": "Qayta yoʻnaltirish",
        "markaspatrolledtext": "Bu sahifani tekshirilgan deb belgilash",
+       "markedaspatrolledtext": "[[:$1]] sahifasining ushbu versiyasi tekshirilgan deb belgilandi.",
+       "markedaspatrollednotify": "[[:$1]] sahifasidagi ushbu oʻzgarish tekshirilgan deb belgilandi.",
        "patrol-log-page": "Patrullash qaydlari",
        "previousdiff": "← Avvalgi tahrir",
        "nextdiff": "Keyingi tahrir →",
        "searchsuggest-containing": "ichida bu boʻlgan...",
        "api-error-unknown-code": "Noaniq xato: \"$1\".",
        "api-error-unknownerror": "Noaniq xato: \"$1\".",
-       "limitreport-title": "Tahlillagich maʼlumotlari:"
+       "limitreport-title": "Tahlillagich maʼlumotlari:",
+       "special-characters-group-latin": "Lotin",
+       "special-characters-group-latinextended": "Lotin kengaytirilgan",
+       "special-characters-group-ipa": "XFA (MFA)",
+       "special-characters-group-symbols": "Belgilar",
+       "special-characters-group-greek": "Yunon",
+       "special-characters-group-cyrillic": "Kirill",
+       "special-characters-group-arabic": "Arab",
+       "special-characters-group-arabicextended": "Arab kengaytirilgan",
+       "special-characters-group-persian": "Forsiy",
+       "special-characters-group-hebrew": "Yahudiy",
+       "special-characters-group-bangla": "Bengal",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singal",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Tay",
+       "special-characters-group-lao": "Laos",
+       "special-characters-group-khmer": "Kxmer",
+       "special-characters-title-emdash": "uzun tire",
+       "special-characters-title-minus": "minus belgisi"
 }
index d0b29db..2df5ff4 100644 (file)
@@ -17,7 +17,8 @@
                        "Urhixidur",
                        "Vajotwo",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Sotołinea i cołegamenti:",
        "delete-toobig": "La cronologia de sta pagina la xe longa assè (oltre $1 {{PLURAL:$1|revision|revisioni}}). La so scancelazion la xe stà limità par evitar de crear acidentalmente dei problemi de funzionamento al database de {{SITENAME}}.",
        "delete-warning-toobig": "La cronologia de sta pagina le xe longa assè (oltre $1 {{PLURAL:$1|revision|revisioni}}). La so scancelazion la pode crear dei problemi de funzionamento al database de {{SITENAME}}; procedi con cautela.",
        "rollback": "Anuła łe modifighe",
-       "rollback_short": "Rollback",
        "rollbacklink": "tira indrìo i canbiamenti",
        "rollbacklinkcount": "rollback de {{PLURAL:$1|na modifega|$1 modifeghe}}",
        "rollbacklinkcount-morethan": "rollback de pì de {{PLURAL:$1|na modifega|$1 modifeghe}}",
        "import-rootpage-nosubpage": "El namespace \"$1\" de ła pàjina prinsipałe nó 'l permete de 'ver sotopajine.",
        "importlogpage": "Inportassion",
        "importlogpagetext": "Registro de łe inportazion d'ufiçio de pàxene provenienti da altre wiki, conplete de cronołogia.",
-       "import-logentry-upload": "gà inportà $1 tramite caricamento de file",
        "import-logentry-upload-detail": "{{PLURAL:$1|una revixion importà|$1 revixion importae}}",
-       "import-logentry-interwiki": "gà trasferìo da altra wiki ła pàxena $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|una revixion importà|$1 revixion importae}} da $2",
        "javascripttest": "Sperimentasion JavaScript",
-       "javascripttest-title": "In execusion test par $1",
        "javascripttest-pagetext-noframework": "Sta pàjina ła xe riservà a l'execusion de test de JavaScript.",
        "javascripttest-pagetext-unknownframework": "Framework de test sconosùo \"$1\".",
        "javascripttest-pagetext-frameworks": "Par piasere, siełi uno de i seguenti framework pa' i test: $1",
        "javascripttest-pagetext-skins": "Siełi na skin có cui exeguir i test:",
        "javascripttest-qunit-intro": "Varda so mediawiki.org ła [$1 documentasion rivardante i test].",
-       "javascripttest-qunit-heading": "Suite de test de JavaScript par QUnit in MediaWiki",
        "tooltip-pt-userpage": "La to pagina utente",
        "tooltip-pt-anonuserpage": "La pàxena utente de sto indirizo IP",
        "tooltip-pt-mytalk": "La to pagina de discussion",
        "version-parser-function-hooks": "Hook par funzioni del parser",
        "version-hook-name": "Nome de l'hook",
        "version-hook-subscribedby": "Sotoscrizioni",
-       "version-version": "(Version $1)",
+       "version-version": "($1)",
        "version-license": "Licensa MediaWiki",
        "version-ext-license": "Licensa",
        "version-ext-colheader-name": "Estension",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|el|la}} xe stà automategamente promoso/a da $4 a $5",
        "rightsnone": "(nissun)",
        "revdelete-summary": "modifica ogeto",
+       "feedback-adding": "Inserimento del feedback inte ła pàjina...",
+       "feedback-bugcheck": "Otimo! Verifega che nó 'l sia xà infrà i [$1 bug conosui].",
+       "feedback-bugnew": "Controło efetuà. Segnała un novo bug",
        "feedback-bugornote": "Se se xe in grado de descrivare el problema tenico riscontrà in maniera precixa, [$1 segnałare el bug]. In alternadiva, se pol doparar el moduło senplifegà cuà soto. El comento inserio el sarà xontà a ła pàjina \"[$3 $2]\", insieme al propio nome utente.",
-       "feedback-subject": "Ogeto:",
-       "feedback-message": "Messajo:",
        "feedback-cancel": "Anuła",
-       "feedback-submit": "Invia feedback",
-       "feedback-adding": "Inserimento del feedback inte ła pàjina...",
+       "feedback-close": "Fato",
        "feedback-error1": "Eror: Da ła API xe rivà un rexultà nó riconosùo",
        "feedback-error2": "Eror: Nó xe sta posibiłe exeguir ła modifega",
        "feedback-error3": "Errore: Nisuna risposta da ła API",
+       "feedback-message": "Messajo:",
+       "feedback-subject": "Ogeto:",
+       "feedback-submit": "Manda",
        "feedback-thanks": "Grasie! El to feedback el xe sta publicà a ła pàjina \"[$2 $1]\".",
-       "feedback-close": "Fato",
-       "feedback-bugcheck": "Otimo! Verifega che nó 'l sia xà infrà i [$1 bug conosui].",
-       "feedback-bugnew": "Controło efetuà. Segnała un novo bug",
        "searchsuggest-search": "Serca",
        "searchsuggest-containing": "che contien...",
        "api-error-badaccess-groups": "Nó te si autorixà a cargar documenti so sta wiki.",
        "expand_templates_remove_comments": "Ignora i comenti",
        "expand_templates_remove_nowiki": "Cava i tag <nowiki> dal risultato",
        "expand_templates_generate_xml": "Mostra àlbaro sintàtico XML",
-       "expand_templates_preview": "Anteprima"
+       "expand_templates_preview": "Anteprima",
+       "special-characters-group-latin": "Latìn",
+       "special-characters-group-latinextended": "Latìn estexo",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Sìnboli",
+       "special-characters-group-greek": "Grego",
+       "special-characters-group-cyrillic": "Cirìlico",
+       "special-characters-group-arabic": "Àrabo",
+       "special-characters-group-arabicextended": "Arabo estexo",
+       "special-characters-group-persian": "Persian",
+       "special-characters-group-hebrew": "Abràego",
+       "special-characters-group-bangla": "Bengałexe",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalese",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thaiłandexe",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "lineeta ene",
+       "special-characters-title-emdash": "lineeta eme",
+       "special-characters-title-minus": "segno meno"
 }
index bd9b398..36f1788 100644 (file)
        "delete-toobig": "Necil lehtpolel om avar redaktiruinadan istorii - enamba {{PLURAL:$1|versii|versijad}}.\nMugoižiden lehtpoliden čudand om kel'tud, miše sait radaiži normaližikš.",
        "delete-warning-toobig": "Necil lehtpolel om avar redaktiruinadan istorii - enamba $1 {{PLURAL:$1|versii|versijad}}.\nMugoižiden lehtpoliden čudand voiži telustada {{SITENAME}}-saitan andmuzbazan normaližele radole.\nTehkat kaik varumujandanke!",
        "rollback": "Endištada toižetused",
-       "rollback_short": "Endištuz",
        "rollbacklink": "Endištada",
        "rollbackfailed": "Endištuz om keskustadud petusen tagut.",
        "cantrollback": "Ei voi endištada toižetusid;\nJäl'gmäine toižetai om üksjäižen lehtpolen avtoran.",
        "hijri-calendar-m1": "Muharram",
        "hijri-calendar-m2": "Safar",
        "hijri-calendar-m3": "Rabi al-aual",
-       "unknown_extension_tag": "Tundmatoi \"$1\"-ližanvirg",
        "duplicate-defaultsort": "'''Varutuz:''' Sortiruindan avadim äugotižjärgendusen mödhe \"$2\" toižetab edeližen avadimen äugotižjärgendusen mödhe \"$1\".",
        "version": "Versii",
        "version-extensions": "Seižutadud ližad",
        "version-parser-function-hooks": "Sintaksižen analizatoran funkcijoiden sabutajad",
        "version-hook-name": "Sabustajan nimi",
        "version-hook-subscribedby": "Ezipakitoitajad",
-       "version-version": "(Versii $1)",
+       "version-version": "($1)",
        "version-license": "Licenzii",
        "version-poweredby-others": "toižed",
        "version-software": "Seižutadud programmišt",
        "revdelete-unrestricted": "kaidendused heittud administratoriden täht",
        "rightsnone": "(ei ole)",
        "revdelete-summary": "kaik toižetused",
-       "feedback-subject": "Tem:",
-       "feedback-message": "Tedotuz:",
        "feedback-cancel": "Heitta pätand",
+       "feedback-close": "Vaumiž",
        "feedback-error2": "Petuz. Ei voi redaktiruida",
        "feedback-error3": "Petuz. API ei anda vastust",
-       "feedback-close": "Vaumiž",
+       "feedback-message": "Tedotuz:",
+       "feedback-subject": "Tem:",
        "searchsuggest-search": "Ectä",
        "searchsuggest-containing": "mülütajad...",
        "api-error-empty-file": "Teil oigetud fail om pall'az.",
index 76b05b3..21f39b2 100644 (file)
@@ -27,7 +27,8 @@
                        "아라",
                        "Tranquanganh",
                        "Max20091",
-                       "Dinhxuanduyet"
+                       "Dinhxuanduyet",
+                       "Macofe"
                ]
        },
        "tog-underline": "Gạch chân liên kết:",
        "disclaimers": "Phủ nhận",
        "disclaimerpage": "Project:Phủ nhận chung",
        "edithelp": "Trợ giúp sửa đổi",
+       "helppage-top-gethelp": "Trợ giúp",
        "mainpage": "Trang Chính",
        "mainpage-description": "Trang Chính",
        "policy-url": "Project:Quy định và hướng dẫn",
        "readonly_lag": "Cơ sở dữ liệu bị khóa tự động trong khi các máy chủ cập nhật thông tin của nhau.",
        "internalerror": "Lỗi nội bộ",
        "internalerror_info": "Lỗi nội bộ: $1",
+       "internalerror-fatal-exception": "Ngoại lệ chí tử loại “$1”",
        "filecopyerror": "Không thể chép tập tin “$1” đến “$2”.",
        "filerenameerror": "Không thể đổi tên tập tin “$1” thành “$2”.",
        "filedeleteerror": "Không thể xóa tập tin “$1”.",
        "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-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]].",
        "thumbnail_image-missing": "Hình như tập tin mất tích: $1",
        "thumbnail_image-failure-limit": "Việc tạo ra hình thu nhỏ này đã bị thất bại nhiều lần quá gần đây ($1 lần trở lên). Xin vui lòng thử lại sau.",
        "import": "Nhập các trang",
-       "importinterwiki": "Nhập giữa các wiki",
-       "import-interwiki-text": "Chọn tên trang và wiki để nhập trang vào.\nNgày của phiên bản và tên người viết trang sẽ được giữ nguyên.\nTất cả những lần nhập trang từ wiki khác được ghi lại ở [[Special:Log/import|nhật trình nhập trang]].",
+       "importinterwiki": "Nhập trang từ wiki khác",
+       "import-interwiki-text": "Chọn một wiki và tên trang để nhập.\nNgày của phiên bản và tên những người viết trang sẽ được giữ nguyên.\nTất cả những lần nhập trang từ wiki khác được ghi lại ở [[Special:Log/import|nhật trình nhập trang]].",
        "import-interwiki-sourcewiki": "Wiki nguồn:",
        "import-interwiki-sourcepage": "Trang nguồn:",
        "import-interwiki-history": "Sao chép tất cả các phiên bản cũ của trang này",
        "importcantopen": "Không thể mở tập tin để nhập vào",
        "importbadinterwiki": "Liên kết liên wiki sai",
        "importsuccess": "Nhập thành công!",
-       "importnosources": "Không có nguồn nhập giữa wiki và việc nhập lịch sử bị tắt.",
+       "importnosources": "Không chỉ định wiki nguồn để nhập, và việc nhập lịch sử trực tiếp bị vô hiệu.",
        "importnofile": "Không tải được tập tin nào lên.",
        "importuploaderrorsize": "Không thể tải tập tin nhập trang. Tập tin lớn hơn kích thước cho phép tải lên.",
        "importuploaderrorpartial": "Không thể tải tập tin nhập trang. Tập tin mới chỉ tải lên được một phần.",
        "version-parser-function-hooks": "Hook cho hàm cú pháp trong bộ xử lý",
        "version-hook-name": "Tên hook",
        "version-hook-subscribedby": "Được theo dõi bởi",
-       "version-version": "(Phiên bản $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[không tên]",
        "version-license": "Giấy phép MediaWiki",
        "version-ext-license": "Giấy phép",
        "tags-delete-explanation-initial": "Bạn muốn xóa thẻ \"$1\" từ cơ sở dữ liệu.",
        "tags-delete-explanation-in-use": "Nó sẽ được gỡ bỏ từ {{PLURAL:$2|$2 mục sửa đổi hoặc mục đăng nhập|tất cả $2 bản sửa đổi và/hoặc đăng nhập các mục}} mà nó hiện đang áp dụng.",
        "tags-delete-explanation-warning": "Hành động này là <strong>không thể đảo ngược</strong> và <strong>không thể hoàn tác</strong>, ngay cả bởi người quản trị cơ sở dữ liệu. Hãy chắc chắn đây là thẻ mà bạn muốn xóa.",
+       "tags-delete-explanation-active": "<strong>Thẻ “$1” vẫn còn kích hoạt.</strong> Để ngừng áp dụng thẻ này trong tương lai, đi đến những nơi áp dụng thẻ và vô hiệu nó tại đấy.",
        "tags-delete-reason": "Lý do:",
        "tags-delete-submit": "Không thể phục hồi xóa thẻ này",
        "tags-delete-not-allowed": "Thẻ được định nghĩa bởi một mở rộng không thể bị xóa trừ khi mở rộng đặc biệt cho phép điều đó xảy ra.",
        "tags-delete-not-found": "Thẻ \"$1\" không tồn tại.",
        "tags-delete-too-many-uses": "Từ khóa \"$1\" được áp dụng cho hơn $2 {{PLURAL:$2|phiên bản}}, có nghĩa là nó không thể bị xóa.",
+       "tags-delete-warnings-after-delete": "Thẻ “$1” bị xóa thành công, nhưng gặp {{PLURAL:$2|cảnh báo|các cảnh báo}} sau:",
        "tags-activate-title": "Kích hoạt thẻ",
        "tags-activate-question": "Bạn sắp sửa kích hoạt thẻ \"$1\".",
        "tags-activate-reason": "Lý do:",
        "revdelete-uname-unhid": "đã hiện tên người dùng",
        "revdelete-restricted": "đã áp dụng hạn chế cho bảo quản viên",
        "revdelete-unrestricted": "đã gỡ bỏ hạn chế cho bảo quản viên",
+       "logentry-block-block": "$1 {{GENDER:$2}}đã cấm {{GENDER:$4}}$3 hết hạn $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2}}đã bỏ cấm {{GENDER:$4}}$3",
+       "logentry-block-reblock": "$1 {{GENDER:$2}}đã cấu hình lại vụ cấm {{GENDER:$4}}$3 hết hạn $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2}}đã cấm {{GENDER:$4}}$3 hết hạn $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2}}đã cấu hình lại vụ cấm {{GENDER:$4}}$3 hết hạn $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2}}đã hợp nhất $3 vào $4 (các phiên bản cho tới $5)",
        "logentry-move-move": "$1 {{GENDER:$2}}đã đổi $3 thành $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2}}đã đổi $3 thành $4 (đã tắt đổi hướng)",
        "logentry-upload-overwrite": "$1 {{GENDER:$2}}đã tải lên một phiên bản mới của $3",
        "logentry-upload-revert": "$1 {{GENDER:$2}}đã tải lên $3",
        "log-name-managetags": "Danh sách quản lý thẻ",
+       "log-description-managetags": "Trang này có các công việc quản lý [[Special:Tags|thẻ]]. Nhật trình chỉ bao gồm các tác vụ do bảo quản viên thực hiện thủ công; phần mềm wiki có thể tạo hoặc xóa thẻ mà không ghi tác vụ vào nhật trình này.",
        "logentry-managetags-create": "$1 {{GENDER:$2| đã tạo}} thẻ \"$4\"",
+       "logentry-managetags-delete": "$1 {{GENDER:$2}}đã xóa thẻ “$4” (và gỡ nó khỏi $5 phiên bản hoặc mục nhật trình)",
        "logentry-managetags-activate": "$1 {{GENDER:$2|đã kích hoạt}} tag \"$4\" để sử dụng bởi người dùng và các bot",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|đã vô hiệu}} thẻ \"$4\" để sử dụng bởi người dùng và các bot",
        "rightsnone": "(không có)",
        "revdelete-summary": "tóm lược sửa đổi",
+       "feedback-adding": "Đang thêm thông tin phản hồi vào trang…",
+       "feedback-back": "Lùi",
+       "feedback-bugcheck": "Tuyệt! Chỉ cần kiểm tra nó chưa được [$1 báo cáo trước đây].",
+       "feedback-bugnew": "Tôi đã kiểm tra – báo cáo lỗi mới",
        "feedback-bugornote": "Nếu bạn đã sẵn sàng để miêu tả các chi tiết của một vấn đề kỹ thuật, xin vui lòng [$1 báo cáo lỗi].\nNếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới. Lời ghi của bạn sẽ được đăng lên trang “[$3 $2]”, cùng với tên người dùng và trình duyệt của bạn.",
-       "feedback-subject": "Tiêu đề:",
-       "feedback-message": "Thông điệp:",
        "feedback-cancel": "Hủy bỏ",
-       "feedback-submit": "Gửi phản hồi",
-       "feedback-adding": "Đang thêm thông tin phản hồi vào trang…",
+       "feedback-close": "Xong",
+       "feedback-external-bug-report-button": "Tạo một công việc kỹ thuật",
+       "feedback-dialog-title": "Gửi phản hồi",
+       "feedback-dialog-intro": "Bạn có thể gửi phản hồi dễ dàng qua biểu mẫu bên dưới. Thông tin phản hồi của bạn sẽ được bổ sung vào trang “$1” cùng với tên người dùng của bạn.",
+       "feedback-error-title": "Lỗi",
        "feedback-error1": "Hủy bỏ",
        "feedback-error2": "Lỗi: Sửa đổi thất bại",
        "feedback-error3": "Lỗi: API không có phản ứng",
+       "feedback-message": "Thông điệp:",
+       "feedback-subject": "Tiêu đề:",
+       "feedback-submit": "Gửi",
+       "feedback-terms": "Tôi hiểu rằng thông tin tác nhân người dùng của tôi bao gồm đúng phiên bản của trình duyệt và hệ điều hành của tôi, và rằng các thông tin này sẽ được chia sẻ công khai bên cạnh thông tin phản hồi của tôi.",
+       "feedback-termsofuse": "Tôi đồng ý cung cấp thông tin phản hồi theo các Điều khoản Sử dụng.",
        "feedback-thanks": "Cảm ơn! Phản hồi của bạn đã được đăng lên trang “[$2 $1]”.",
-       "feedback-close": "Xong",
-       "feedback-bugcheck": "Tuyệt! Chỉ cần kiểm tra nó chưa được [$1 báo cáo trước đây].",
-       "feedback-bugnew": "Tôi đã kiểm tra – báo cáo lỗi mới",
+       "feedback-thanks-title": "Cảm ơn!",
+       "feedback-useragent": "Tác nhân người dùng:",
        "searchsuggest-search": "Tìm kiếm",
        "searchsuggest-containing": "có chứa…",
        "api-error-badaccess-groups": "Bạn không được phép tải tập tin lên wiki này.",
        "json-error-utf8": "Ký tự UTF-8 sai dạng, có lẽ đã mã hóa không chính xác",
        "json-error-recursion": "Giá trị để mã hóa có tham chiếu đệ quy",
        "json-error-inf-or-nan": "Giá trị để mã hóa có giá trị NAN (không phải số) hoặc INF (vô tận)",
-       "json-error-unsupported-type": "Đã đưa vào giá trị có kiểu không thể mã hóa"
+       "json-error-unsupported-type": "Đã đưa vào giá trị có kiểu không thể mã hóa",
+       "headline-anchor-title": "Liên kết đến phần này"
 }
index 7541c02..d51a5fc 100644 (file)
        "permalink": "Yüm laidüpik",
        "print": "Bükön",
        "view": "Logön",
+       "view-foreign": "Logön su $1",
        "edit": "Redakön",
        "create": "Jafön",
        "editthispage": "Redakolöd padi at",
        "disclaimers": "Nuneds",
        "disclaimerpage": "Project:Gididimiedükam valemik",
        "edithelp": "Redakamayuf",
+       "helppage-top-gethelp": "Yuf",
        "mainpage": "Cifapad",
        "mainpage-description": "Cifapad",
        "policy-url": "Project:Dunamod",
        "youhavenewmessages": "Su pad ola binons $1 ($2).",
        "youhavenewmessagesfromusers": "Labol $1 de {{PLURAL:$3|geban votik|gebans $3}} ($2).",
        "youhavenewmessagesmanyusers": "Labol $1 de gebans mödik ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|nuni nulik|nunis nulik}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|votükam|votükams}} lätik",
+       "newmessageslinkplural": "{{PLURAL:$1|nuni nulik|999=nunis nulik}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|votükam|999=votükams}} lätik",
        "youhavenewmessagesmulti": "Labol nunis nulik su $1",
        "editsection": "redakön",
        "editold": "redakön",
        "toc": "Ninäd",
        "showtoc": "jonön",
        "hidetoc": "klänedön",
+       "confirmable-yes": "Si!",
+       "confirmable-no": "Nö!",
        "thisisdeleted": "Jonön u sädunön moükami $1?",
        "viewdeleted": "Logön eli $1?",
        "restorelink": "{{PLURAL:$1|redakama bal|redakamas $1}}",
        "gotaccount": "Ya labol-li kali? '''$1'''.",
        "gotaccountlink": "Nunädolös obi",
        "userlogin-resetlink": "Eglömol-li nünis kala olik?",
-       "userlogin-resetpassword-link": "Dönuvälön letavödi olik",
+       "userlogin-resetpassword-link": "Eglömol-li letavödi olik?",
        "createacct-emailrequired": "Ladet leäktronik",
        "createaccountmail": "me pot leäktronik",
        "createaccountreason": "Kod:",
        "wrongpassword": "Letavöd neveräton. Steifülolös dönu.",
        "wrongpasswordempty": "Letavöd vagon. Steifülolös dönu.",
        "passwordtooshort": "Letavöds mutons binädon me {{PLURAL:$1|malat|malats}} pu $1.",
-       "mailmypassword": "Sedön letavödi nulik",
+       "mailmypassword": "Dönuvälön letavödi",
        "passwordremindertitle": "Letavöd nulik nelaidik in {{SITENAME}}",
        "passwordremindertext": "Ek (luveratiko ol, se ladet-IP: $1) ebegon sedi letavöda nulik pro {{SITENAME}} ($4). Letavöd nelaidüpik pejafon pro geban: „$2“ me ninäd: „$3“. If atos ejenon ma vil olik, mutol anu nunädön oli e välön letavödi nulik. Letavöd nelaidüpik ola odulon dü {{PLURAL:$5|del bal|dels $5}}.\n\nIf pösod votik edunon begi at, ud if anu memol letavödi olik e no plu vilol votükön oni, dalol nedemön penedi at e laigebön letavödi rigik ola.",
        "noemail": "Ladet leäktronik nonik peregistaron pro geban \"$1\".",
        "mailerror": "Pöl dü sedam pota: $1",
        "acct_creation_throttle_hit": "Visitans vüka at, gebölo ladeti-IP olik, ejafons {{PLURAL:$1|kali bal|kalis $1}} dü del lätik, kelos binon num gretikün kalas jafovik dü timaperiod at.\nSekü atos, visitans ladeti-IP at geböls no dalons jafön kalis pluik ün atim.",
        "emailauthenticated": "Ladet leäktronik olik päfümükon tü düp $2 ün $3.",
-       "emailnotauthenticated": "Ladet leäktronik ola no nog pefümedon. Pened nonik posedon me pads sököl.",
+       "emailnotauthenticated": "Ladet leäktronik ola no nog pefümedon.\nPened nonik posedon me lienäds sököl.",
        "noemailprefs": "Givolös ladeti leäktronik, dat pads at okanons pagebön.",
        "emailconfirmlink": "Fümedolös ladeti leäktronik ola",
        "invalidemailaddress": "Ladet leäktronik no kanon pazepön bi fomät onik jiniko no lonöfon.\nPenolös ladeti labü fomät lonöföl, u vagükolös penamaspadi.",
        "accountcreatedtext": "Gebanakal pro [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|bespik]]) pejafon.",
        "createaccount-title": "Kalijafam in {{SITENAME}}",
        "createaccount-text": "Ek ejafon kali pro ladet leäktronik ola in {{SITENAME}} ($4) labü nem: „$2“ e letavöd: „$3“. Kanol nunädön oli e votükön letavödi olik anu.\n\nKanol nedemön penedi at, üf jafam kala at binon pöl.",
-       "login-throttled": "Esteifülol tumödikna ad nunädön oli änu.\nStebedolös büä osteifülol nogna.",
+       "login-throttled": "Esteifülol tumödikna ad nunädön oli änu.\nStebedolös $1 büä osteifülol nogna.",
        "loginlanguagelabel": "Pük: $1",
+       "pt-login": "Nunädön oki",
+       "pt-login-button": "Nunädön oki",
+       "pt-createaccount": "Jafön kali",
+       "pt-userlogout": "Senunädön oki",
        "changepassword": "Votükön letavödi",
-       "resetpass_announce": "Enunädol oli me kot nelaidüpik pisedöl ole. Ad finükön nunädami, mutol välön letavödi nulik is:",
+       "resetpass_announce": "Ad finükön nunädami, mutol välön letavödi nulik.",
        "resetpass_header": "Votükön kalaletavödi",
        "oldpassword": "Letavöd büik:",
        "newpassword": "Letavöd nulik:",
        "currentrev": "Fomam anuik",
        "currentrev-asof": "Fomam nuik tü $1",
        "revisionasof": "Fomam dätü $1",
-       "revision-info": "Fomam timü $1 fa el $2",
+       "revision-info": "Fomam timü $1 fa {{GENDER:$6|hiel|jiel|el}} $2($7)",
        "previousrevision": "←Fomam vönedikum",
        "nextrevision": "Fomam nulikum→",
        "currentrevisionlink": "Fomam anuik",
        "revdelete-hide-text": "Klänedön vödemi revida",
        "revdelete-hide-image": "Klänedön ragivaninädi",
        "revdelete-hide-name": "Klänedön duni e zeili",
-       "revdelete-hide-comment": "Klänedön redakamaküpeti",
+       "revdelete-hide-comment": "Redakön küpeti",
        "revdelete-hide-user": "Klänedön gebananemi u ladeti-IP redakana",
        "revdelete-hide-restricted": "Gebön miedükamis at i demü guvans e lökofärmükön fometi at",
        "revdelete-radio-same": "(no votükolös)",
        "compareselectedversions": "Leigodolöd fomamis pevälöl",
        "showhideselectedversions": "Jonön/klänedön fomamis pevälöl",
        "editundo": "sädunön",
+       "diff-empty": "(Nen difs)",
        "searchresults": "Sukaseks",
        "searchresults-title": "Sukaseks pro: \"$1\"",
        "titlematches": "Leigon ko padatiäd",
        "search-result-category-size": "{{PLURAL:$1|liman 1|limans $1}} ({{PLURAL:$2|donaklad 1|donaklads $2}}, {{PLURAL:$3|ragiv 1|ragivs $3}})",
        "search-redirect": "(lüodüköm: $1)",
        "search-section": "(diläd: $1)",
+       "search-category": "(klad: $1)",
        "search-suggest": "Ediseinol-li: $1 ?",
        "search-interwiki-caption": "Svistaproyegs",
        "search-interwiki-default": "Seks se $1:",
        "prefs-personal": "Gebananüns",
        "prefs-rc": "Votükams nulik",
        "prefs-watchlist": "Galädalised",
+       "prefs-editwatchlist": "Redakön galädalisedi",
        "prefs-watchlist-days": "Num delas ad pajonön in galädalised:",
        "prefs-watchlist-days-max": "Maxum: {{PLURAL:$1|del|dels}} $1",
        "prefs-watchlist-edits": "Num redakamas ad pajonön in galädalised pestäänüköl:",
        "action-userrights-interwiki": "redakön gebanagitätis gebanas vükas votik",
        "action-siteadmin": "lökofärmükön u maifükön nünodemi",
        "nchanges": "{{PLURAL:$1|votükam|votükams}} $1",
+       "enhancedrc-history": "jenotem",
        "recentchanges": "Votükams nulik",
        "recentchanges-legend": "Votükams nulik: paramets",
        "recentchanges-summary": "Su pad at binons votükams nulikün in vüki at.",
        "recentchanges-label-minor": "Atos binon redakam pülik",
        "recentchanges-label-bot": "Redakam at pädunon fa el bot",
        "recentchanges-label-unpatrolled": "Redakam at no nog pekontrolon",
-       "recentchanges-legend-newpage": "$1 - pad nulik",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (logolös i [[Special:NewPages|lisedi padas nulik]])",
        "rcnotefrom": "Is palisedons votükams sis '''$2''' (jü '''$1''').",
        "rclistfrom": "Jonön votükamis nulik, primölo tü düp $3 $2",
        "rcshowhideminor": "$1 votükamis pülik",
+       "rcshowhideminor-show": "Jonön",
+       "rcshowhideminor-hide": "Klänedön",
        "rcshowhidebots": "$1 elis bot",
-       "rcshowhideliu": "$1 gebanis penunädöl",
+       "rcshowhidebots-show": "Jonön",
+       "rcshowhidebots-hide": "Klänedön",
+       "rcshowhideliu": "$1 gebanis registaröl",
+       "rcshowhideliu-show": "Jonön",
+       "rcshowhideliu-hide": "Klänedön",
        "rcshowhideanons": "$1 gebanis nennemik",
+       "rcshowhideanons-show": "Jonön",
+       "rcshowhideanons-hide": "Klänedön",
        "rcshowhidepatr": "Redakams $1 pekontrolons",
+       "rcshowhidepatr-show": "Jonön",
+       "rcshowhidepatr-hide": "Klänedön",
        "rcshowhidemine": "$1 redakamis obik",
+       "rcshowhidemine-show": "Jonön",
+       "rcshowhidemine-hide": "Klänedön",
        "rclinks": "Jonön votükamis lätik $1 ün dels lätik $2<br />$3",
        "diff": "dif",
        "hist": "jen",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|geban|gebans}} galädöl $1]",
        "rc_categories": "Te klads fovik (ditolös me el \"|\")",
        "rc_categories_any": "Alseimik",
+       "rc-change-size-new": "{{PLURAL:$1|jölät|jöläts}} $1 po votükam",
        "newsectionsummary": "/* $1 */ diläd nulik",
        "rc-enhanced-expand": "Jonön patis",
        "rc-enhanced-hide": "Klänedön patis",
        "suppress": "Lovelogam",
        "booksources": "Bukafons",
        "booksources-search-legend": "Sukön bukafonis:",
+       "booksources-search": "Sukön",
        "booksources-text": "Is palisedons bevüresodatopäds votik, kels selons bukis nulik e pegebölis, e kels ba labons nünis pluik dö buks fa ol pasuköls:",
        "booksources-invalid-isbn": "El ISBN at jiniko no lonöfon; kontrololös pökis po kopiedam se rigafonät.",
        "specialloguserlabel": "Dunan:",
        "protectedarticle": "ejelon padi: „[[$1]]“",
        "modifiedarticleprotection": "evotükon jelanivodi pada: „[[$1]]“",
        "unprotectedarticle": "esäjelon padi: \"[[$1]]\"",
-       "movedarticleprotection": "mengubah pengaturan perlindungan dari „[[$2]]“ ke „[[$1]]“",
        "protect-title": "lonon jelanivodi pada: „$1“",
        "prot_1movedto2": "[[$1]] petopätükon lü [[$2]]",
        "protect-legend": "Fümedolös jeli",
        "thumbnail_invalid_params": "Paramets magodila no lonöfons",
        "thumbnail_dest_directory": "No emögos ad jafön zeilaragiviäri",
        "import": "Nüveigön padis",
-       "importinterwiki": "Nüveigam vü vüks",
+       "importinterwiki": "Nüveigön de vük votik",
        "import-interwiki-text": "Levälolös vüki e padatiädi ad nüveigön.\nDäts fomamas e nems redakanas pokipedons.\nNüveigs vüvükik valik pajonons su [[Special:Log/import|nüveigamalised]].",
        "import-interwiki-history": "Kopiedön fomamis valik jenotema pada at",
        "import-interwiki-templates": "Keninükön samafomotis valik",
        "import-parse-failure": "Pöl pö nüveigam ela XML",
        "import-noarticle": "Pad nüveigabik nonik!",
        "import-nonewrevisions": "Fomams valik ya pinüveigons.",
-       "xml-error-string": "$1 pö lien: $2, kolum: $3 (jölat: $4): $5",
+       "xml-error-string": "$1 pö lien: $2, kolum: $3 (jölät: $4): $5",
        "import-upload": "Löpükön nünodis-XML",
        "import-token-mismatch": "Redakamanünods peperons. Steifülolös dönu.",
        "import-invalid-interwiki": "Nüveigam se vük pavilöl no mögon.",
        "importlogpage": "Jenotalised nüveigamas",
        "importlogpagetext": "Nüveigam guverik padas labü redakamajenotem se vüks votik",
-       "import-logentry-upload": "pad: [[$1]] penüveigon medü ragivilöpükam",
        "import-logentry-upload-detail": "{{PLURAL:$1|fomam|fomams}} $1",
-       "import-logentry-interwiki": "pevotavükükon: $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|fomam|fomams}} $1 se $2",
        "tooltip-pt-userpage": "Gebanapad olik",
        "tooltip-pt-anonuserpage": "Gebanapad ladeta-IP, me kel redakol",
        "file-nohires": "Gretot gudikum no pagebidon.",
        "svg-long-desc": "ragiv in fomät: SVG, magodaziöbs $1 × $2, gretot: $3",
        "svg-long-error": "Ragiv 'SVG' ne lonöfon: $1",
-       "show-big-image": "Gretot gudikün",
+       "show-big-image": "Ragiv rigik",
        "newimages": "Pänotem ragivas nulik",
        "imagelisttext": "Dono binon lised '''$1''' {{PLURAL:$1|ragiva|ragivas}} $2 pedilädölas.",
        "newimages-summary": "Pad patik at lisedon ragivis pelöpüköl lätik.",
        "watchlisttools-view": "Logön votükamis teföl",
        "watchlisttools-edit": "Logön e redakön galädalisedi",
        "watchlisttools-raw": "Redakön galädalisedi nen fomät",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|bespik]])",
        "duplicate-defaultsort": "Nüned: Leodükamakik kösömik: „$2“ buon bu leodükamakik kösömik büik: „$1“.",
        "version": "Fomam",
        "version-extensions": "Veitükumams pestitöl",
        "version-hooks": "Huköms",
        "version-hook-name": "Hukömanem",
        "version-hook-subscribedby": "Pagebon fa",
-       "version-version": "(Fomam $1)",
        "version-license": "Dälazöt",
        "version-poweredby-others": "votikans",
        "version-software": "Programs pestitöl",
        "htmlform-selectorother-other": "Votik",
        "htmlform-no": "Nö",
        "htmlform-yes": "Si",
+       "logentry-delete-delete": "$1 emoükon padi: $3",
        "revdelete-restricted": "miedükams pelonöfükons pro guvans",
        "revdelete-unrestricted": "miedükams pro guvans pemoükons",
+       "logentry-block-unblock": "$1 {{GENDER:$2|eblokon}} {{GENDER:$4|hieli $3|jieli $3|eli $3}}",
+       "logentry-newusers-create": "Gebanakal: $1 pejafon",
        "rightsnone": "(nonik)",
        "revdelete-summary": "plän redakama",
+       "feedback-error-title": "Pöl",
        "feedback-subject": "Yegäd:",
        "searchsuggest-search": "Suk",
        "searchsuggest-containing": "ninädöl...",
index e4c02cf..a65ac57 100644 (file)
        "watchlisttools-raw": "Toimõndaq lätteteedüstüt",
        "duplicate-defaultsort": "'''Hoiatus:''' Sortmisvõti \"$2\" tühistäs ärq innembädse sortmisvõtmõ \"$1\".",
        "version": "Kujo",
-       "version-version": "(Kujo $1)",
+       "version-version": "($1)",
        "version-software-version": "Kujo",
        "fileduplicatesearch-filename": "Teedüstünimi:",
        "fileduplicatesearch-submit": "Otsiq",
index d7cd777..939fbe3 100644 (file)
@@ -5,7 +5,8 @@
                        "Srtxg",
                        "Urhixidur",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Sorlignî les loyéns:",
        "xml-error-string": "$1 al roye $2, colone $3 (octet $4): $5",
        "importlogpage": "Djournå des ristitchaedjes",
        "importlogpagetext": "Ristitchaedjes (import) administratifs di pådjes avou leus istorikes di candjmints, a pårti d' ôtes wikis.",
-       "import-logentry-upload": "a ristitchî [[$1]] avou èn eberwetaedje di fitchî",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|modêye|modêyes}}",
-       "import-logentry-interwiki": "a ristitchî $1 foû d' èn ôte wiki",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|modêye|modêyes}} foû di $2",
        "tooltip-pt-userpage": "Pådje d' uzeu da minne",
        "tooltip-pt-anonuserpage": "Li pådje d' uzeu po l' adresse IP ki vos eployîz pol moumint",
        "logentry-newusers-create2": "$1 a-st ahivé on conte d' uzeu $3",
        "logentry-newusers-autocreate": "li conte $1 a stî ahivé otomaticmint",
        "rightsnone": "(nouk)",
-       "feedback-subject": "Sudjet",
-       "feedback-message": "Messaedje",
-       "feedback-cancel": "Rinoncî",
-       "feedback-submit": "Evoyî l' vosse",
        "feedback-adding": "Vosse messaedje a stî håyné sol pådje...",
-       "feedback-error2": "Aroke : Li candjaedje n' a nén stî",
+       "feedback-cancel": "Rinoncî",
        "feedback-close": "Fwait",
+       "feedback-error2": "Aroke : Li candjaedje n' a nén stî",
+       "feedback-message": "Messaedje",
+       "feedback-subject": "Sudjet",
+       "feedback-submit": "Evoyî",
        "searchsuggest-search": "Cweri",
        "searchsuggest-containing": "ki contént...",
        "api-error-badaccess-groups": "Vos n' avoz nén l' droet d' eberweter des fitchîs so ç' wiki cial",
index ad7f250..d2df113 100644 (file)
        "deletereason-dropdown": "*Agsob nga rason hin pagpara\n** Spam\n** Bandalismo\n** Pagtalapas ha katungod hin pagtatag-iya (''copyright'')\n** Tugon han manunurat\n** Utod nga redirek",
        "delete-edit-reasonlist": "Igliwat an mga rason han pagpara",
        "rollback": "Mga libot-pabalik nga pagliwat",
-       "rollback_short": "Libot-pabalik",
        "rollbacklink": "libot-pabalik",
        "rollbackfailed": "Diri malinamposon an paglibot-pabalik",
        "revertpage": "Ginpabalik an ginliwat ni [[Special:Contributions/$2|$2]] ([[User talk:$2|hiruhimangraw]]) ngadto ha urhi nga pagliwat ni [[User:$1|$1]]",
        "version-mediahandlers": "Mga nakapot han medya",
        "version-hooks": "Mga kawil",
        "version-hook-name": "Ngaran han kawil",
-       "version-version": "(Bersion $1)",
+       "version-version": "($1)",
        "version-license": "MediaWiki nga Lisensya",
        "version-poweredby-credits": "Ini nga wiki in pinapaandar han '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "mga iba",
        "logentry-newusers-create2": "An gumaramit nga akawnt nga $3 {{GENDER:$2|ginhimo}} ni $1",
        "logentry-newusers-autocreate": "An gumaramit nga akawnt nga $1 in lugaring nga {{GENDER:$2|ginhimo}}",
        "rightsnone": "(waray)",
-       "feedback-subject": "Himangrawon:",
-       "feedback-message": "Mensahe:",
        "feedback-cancel": "Pasagdi",
-       "feedback-error2": "Sayop: Pakyas an pagliwat",
        "feedback-close": "Human na.",
+       "feedback-error2": "Sayop: Pakyas an pagliwat",
+       "feedback-message": "Mensahe:",
+       "feedback-subject": "Himangrawon:",
        "searchsuggest-search": "Pamilnga",
        "searchsuggest-containing": "nagsusulod. . .",
        "api-error-badaccess-groups": "Diri ka gintutugotan pagkarga paigbaw ha dinhi nga wiki.",
index 5ff81b7..fa623c1 100644 (file)
@@ -12,7 +12,8 @@
                        "לערי ריינהארט",
                        "פוילישער",
                        "아라",
-                       "Har-wradim"
+                       "Har-wradim",
+                       "Amire80"
                ]
        },
        "tog-underline": "שטרייכט אונטער לינקען",
        "disclaimers": "געזעצליכע אויפֿקלערונג",
        "disclaimerpage": "Project:קלארשטעלונג",
        "edithelp": "הילף וויאזוי צו ענדערן",
+       "helppage-top-gethelp": "הילף",
        "mainpage": "הויפט זייט",
        "mainpage-description": "הויפט זייט",
        "policy-url": "Project:פאליסי",
        "readonly_lag": "די דאטעבאזע איז געווארן אויטאמטיש אפגעשפארט כדי צו דערמעגליכן פאר די אונטער דאטע באזע סערווערס צו ווערן דערהיינטיגט פון דעם אויבער סערווער.",
        "internalerror": "אינערלעכער פעלער",
        "internalerror_info": "אינערלעכער פֿעלער: $1",
+       "internalerror-fatal-exception": "פאטאלער  אויסנאם־פעלער פון טיפ \"$1\"",
        "filecopyerror": "האט נישט געקענט קאפירן \"$1\" צו \"$2\".",
        "filerenameerror": "נאמען טויש פֿאַר \"$1\" צו \"$2\" איז נישט אדורכגעגאנגען.",
        "filedeleteerror": "אויסמעקן \"$1\" נישט דורך.",
        "userlogin-yourname": "באַניצער נאָמען",
        "userlogin-yourname-ph": "גיט אריין אייער באניצער נאמען",
        "createacct-another-username-ph": "אריינגעבן באניצער נאמען",
-       "yourpassword": "פאסווארט",
+       "yourpassword": "פּאַסװאָרט",
        "userlogin-yourpassword": "פאַסווארט",
        "userlogin-yourpassword-ph": "אַרײַנגעבן אײַער פאַסווארט",
        "createacct-yourpassword-ph": "אַרײַנגעבן א פאַסווארט",
        "prefs-watchlist": "אויפפאסונג ליסטע",
        "prefs-editwatchlist": "רעדאַקטירן די אויפֿפאַסונג ליסטע",
        "prefs-editwatchlist-label": "רעדאקטירן ארטיקלען אויף אײַער אויפפאסונג־ליסטע:",
+       "prefs-editwatchlist-edit": "באקוקן און אראפנעמען קעפלעך אויף אייער אויפפאסונג־לעסטע",
        "prefs-editwatchlist-raw": "רעדאַקטירן די רויע אויפֿפאַסונג ליסטע",
        "prefs-editwatchlist-clear": "ליידיגן אייער אויפפאסונג ליסטע",
        "prefs-watchlist-days": "טעג צו ווייזן אין דער אויפפאסונג ליסטע:",
        "username": "{{GENDER:$1|באַניצער־נאָמען}}:",
        "prefs-memberingroups": "{{GENDER:$2|מיטגליד}} אין {{PLURAL:$1|גרופע|גרופעס}}:",
        "prefs-registration": "אײַנשרײַבן צײַט:",
-       "yourrealname": "עכטער נאמען *:",
+       "yourrealname": "עכטער נאָמען:",
        "yourlanguage": "שפּראַך:",
        "yourvariant": "אינהאַלט שפּראַך וואַריאַנט:",
        "prefs-help-variant": "אײַער פרעפֿערירטער וואַריאַנט אדער ארטאגראַפֿיע צו צייגן די אינהאַלט בלעטער פֿון דער וויקי.",
        "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 טעקעס",
        "right-editmyusercss": "רעדאקטירע אײַערע אייגענע באניצער CSS טעקעס",
        "right-editmyuserjs": "רעדאקטירן אײַערע אייגענע באניצער JavaScript טעקעס",
        "right-viewmywatchlist": "באקוקן אייער אייגענע אויפפאסונג ליסטע",
-       "right-editmywatchlist": "רעדאקטירן אייער אייגענע אויפפאסונג ליסטער. טייל פעולות וועלן דאך צולייגן בלעטער אפילו אן דעם רעכט.",
+       "right-editmywatchlist": "רעדאקטירן אייער אייגענע אויפפאסונג ליסטע. טייל פעולות וועלן דאך צולייגן בלעטער אפילו אן דעם רעכט.",
        "right-viewmyprivateinfo": "באקוקן אײַער אייגענע פריוואטע דאטן (צ\"ב ע־פאסט אדרעס, אמתער נאמען)",
        "right-editmyprivateinfo": "רעדאקטירן אײַער אייגענע פריוואטע דאטן (צ\"ב ע־פאסט אדרעס, אמתער נאמען)",
        "right-editmyoptions": "רעדאקטירן אײַערע אייגענע פרעפערענצן",
        "right-override-export-depth": "עקספארטירן בלעטער כולל געלינקטע בלעטער ביז א טיף פון 5",
        "right-sendemail": "שיקן ע-פאסט צו אנדערע באניצער",
        "right-passwordreset": "באַקוקן פאַסווארט צוריקשטעלן ע־בריוו",
+       "right-managechangetags": " [[Special:Tags|טאגן]] פון דעם שאפן און אויסמעקן",
        "newuserlogpage": "נייע באַניצערס לאָג-בוך",
        "newuserlogpagetext": "דאס איז א לאג פון באַניצערס אײַנשרײַבונגען.",
        "rightslog": "באַניצער רעכטן לאג",
        "action-viewmywatchlist": "באקוקן אײַער אויפֿפאסונג ליסטע",
        "action-viewmyprivateinfo": "באקוקן אײַער פריוואטע אינפארמאציע",
        "action-editmyprivateinfo": "רעדאקטירן אײַער פריוואטע אינפארמאציע",
+       "action-editcontentmodel": "רעדאקטירן אינהאלט־מאדעל פון א בלאט",
        "action-managechangetags": "שאפן און אויסמעקן טאגן פון דער דאטנבאזע",
        "nchanges": "{{PLURAL:$1|ענדערונג|$1 ענדערונגען}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|זײַט לעצטן וויזיט}}",
        "undelete-show-file-submit": "יא",
        "namespace": "נאמענטייל:",
        "invert": "ווײַז אַלע אויסער די",
+       "tooltip-invert": "באצייכנט דאס קעסטל צו באהאלטן ענדערונגען צו בלעטער אין דעם געקליבענעם נאמענטייל",
        "tooltip-whatlinkshere-invert": "מארקירט דאס קעסטל צו באהאלטן לינקען פון בלעטער אינעם אויסגעקליבענעם נאמענטייל.",
        "namespace_association": "אָנגעבונדענער נאָמענטייל",
        "tooltip-namespace_association": "צייכנט דאס קעסטל כדי איינשליסן דעם שמועס אדער סוביעקט נאמענטייל וואס געהערט צום אויסגעקליבענעם נאמענטייל",
        "thumbnail_gd-library": "אומפולשטענדיקע קאנפיגוראציע פאר דער GD-ביבליאטעק: פונקציע $1 פעלט",
        "thumbnail_image-missing": "טעקע פֿעלט אייגנטלעך: $1",
        "import": "אימפארטירן בלעטער",
-       "importinterwiki": "×\90ר×\99×\91ער×\95×\95×\99ק×\99 ×\90×\99×\9eפ×\90ר×\98",
-       "import-interwiki-text": "ק×\9c×\95×\99×\91×\98 ×\90×\95×\99ס ×\90 ×\95×\95×\99ק×\99 ×\90×\95×\9f ×\90×\9f ×\90ר×\98×\99ק×\9c ×§×¢×¤×\9c ×¦×\95 ×\90×\99×\9eפ×\90ר×\98×\99ר×\9f.\n×\93×\99 ×\93×\90×\98עס ×\90×\95×\9f ×\93×\99 × ×¢×\9e×¢×\9f ×¤×\95×\9f ×\93×\99 ×¨×¢×\93×\90ק×\98×\90ר×\9f ×\95×\95×¢×\98 ×\95×\95ער×\9f ×\92×¢×\94×\99×\98×\9f.\n×\90×\9c×¢ ×¦×\95×\95×\99שנ×\95×\95×\99ק×\99 ×\90×\99×\9eפ×\90ר×\98 ×\90קצ×\99×¢ס ווערן פארשריבן אינעם   [[Special:Log/import|אימפארט לאג]].",
+       "importinterwiki": "×\90×\99×\9eפ×\90ר×\98×\99ר×\9f ×¤Ö¿×\95×\9f ×\90Ö·×\9f ×\90Ö·× ×\93ער ×\95×\95×\99ק×\99",
+       "import-interwiki-text": "ק×\9c×\95×\99×\91×\98 ×\90×\95×\99ס ×\90 ×\95×\95×\99ק×\99 ×\90×\95×\9f ×\90×\9f ×\90ר×\98×\99ק×\9c ×§×¢×¤×\9c ×¦×\95 ×\90×\99×\9eפ×\90ר×\98×\99ר×\9f.\n×\93×\99 ×\93×\90×\98עס ×\90×\95×\9f ×\93×\99 × ×¢×\9e×¢×\9f ×¤×\95×\9f ×\93×\99 ×¨×¢×\93×\90ק×\98×\90ר×\9f ×\95×\95×¢×\98 ×\95×\95ער×\9f ×\92×¢×\94×\99×\98×\9f.\n×\90×\9c×¢ ×\90×\99×\9eפ×\90ר×\98×\9f ×¤×\95×\9f ×\90× ×\93ערע ×\95×\95×\99ק×\99ס ווערן פארשריבן אינעם   [[Special:Log/import|אימפארט לאג]].",
        "import-interwiki-sourcewiki": "מקור וויקי:",
        "import-interwiki-sourcepage": "מקור בלאַט:",
        "import-interwiki-history": "קאפירן אלע היסטאריע ווערסיעס פאר דעם בלאט",
        "importcantopen": "נישט געקענט עפֿענען אימפארט טעקע",
        "importbadinterwiki": "שלעכטע אינטערוויקי לינק",
        "importsuccess": "!אימפארט אדורכגעפירט מיט דערפאלג!",
-       "importnosources": "ק×\99×\99×\9f ×\9eק×\95ר×\95ת ×¤Ö¿×\90ַר ×¦×\95×\95×\99ש×\9fÖ¾×\95×\95×\99ק×\99 ×\90×\99×\9eפ×\90רט, און דירעקט היסטאריע אַרויפֿלאָדן איז נישט דערמעגלעכט אַצינד.",
+       "importnosources": "ק×\99×\99×\9f ×\95×\95×\99ק×\99ס ×¤Ö¿×\95×\9f ×\95×\95×¢×\9e×¢×\9f ×¦×\95 ×\90×\99×\9eפ×\90ר×\98×\99ר×\9f ×\96×¢× ×¢×\9f ×\93עפ×\99× ×\99רט, און דירעקט היסטאריע אַרויפֿלאָדן איז נישט דערמעגלעכט אַצינד.",
        "importnofile": "קיין אימפארט טעקע איז נישט ארויפֿגעלאדן.",
        "importuploaderrorsize": "אַרויפֿלאָדן פֿון אימפארט טעקע דורכגעפֿאלן.\nדי טעקע איז גרעסער פֿון דער דערלויבטער אַרויפֿלאָדן גרייס.",
        "importuploaderrorpartial": "אַרויפֿלאָדן פֿון אימפארט טעקע דורכגעפֿאלן.\nדי טעקע איז נאר טיילווייז אַרויפֿגעלאָדן.",
        "import-rootpage-nosubpage": "נאמענטייל \"$1\" פונעם שטאמבלאט ערלויבט נישט קיין אונטערבלעטער.",
        "importlogpage": "אימפארט לאגבוך",
        "importlogpagetext": "אַדמיניסטראַטיווער אימפארט פון בלעטער מיט רעדאַגירן היסטאריע פֿון ​​אַנדערע וויקיס.",
-       "import-logentry-upload": "האט אימפארטירט [[$1]] דורך טעקע אַרויפֿלאָדן",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}} אימפארטירט",
-       "import-logentry-interwiki": "אריבערגעוויקיט $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}} אימפארטירט פֿון $2",
        "javascripttest": "JavaScript טעסט",
        "javascripttest-pagetext-noframework": " דער בלאט איז רעזערווירט פאר JavaScript. פרואוון.",
        "tooltip-pt-mycontris": "ליסטע פון אייערע ביישטייערונגען",
        "tooltip-pt-login": "עס איז רעקאָמענדירט זיך אײַנשרײַבן; ס'איז אבער נישט קיין פֿליכט",
        "tooltip-pt-logout": "ארויסלאגירן",
+       "tooltip-pt-createaccount": "איר ווערט דערמוטיגט צו שאפן א קאנטע און אריינלאגירן; ס'איז אביר נישט אבליגאטאריש",
        "tooltip-ca-talk": "שמועס וועגן דעם אינהאַלט בלאַט",
        "tooltip-ca-edit": "איר קענט ענדערן דעם בלאט. ביטע באניצט דעם ''פֿארויסקוק'' קנעפל בעפֿארן אפהיטן",
        "tooltip-ca-addsection": "אָנהייבן א נײַע אָפטיילונג",
        "version-hooks": "Hook סטרוקטורן",
        "version-parser-extensiontags": "פארזער פארברייטערן טאַגן",
        "version-hook-name": "נאמען פון hook",
-       "version-version": "(ווערסיע $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[קיין נאמען]",
        "version-license": "מעדיעוויקי ליצענץ",
        "version-ext-license": "ליצענץ",
        "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": "צולייגן פֿידבעק צו בלאַט...",
+       "feedback-bugcheck": "געוואלדיק! אבער זייט בודק אז עס איז נישט איינער פון די [$1 באוואוסטע באגן].",
+       "feedback-bugnew": "כ'האב בודק געווען. רעפארטירט א נייעם באג.",
        "feedback-bugornote": "ווען איר זענט גרייט צו באשרייבן א טעכנישן פראבלעם ביטע [$1 מעלדט א פעלער].\nאנדערש, קענט איר ניצן די גרינגע פארעם אונטן. מען וועט צולייגן אייער הערה צום בלאט \"[$3 $2]\", צוזאמען מיט אייער באניצער נאמען און וועלכן בלעטערער איר ניצט.",
-       "feedback-subject": "טעמע:",
-       "feedback-message": "מעלדונג:",
        "feedback-cancel": "אַנולירן",
-       "feedback-submit": "ארײַנגעבן פֿידבעק",
-       "feedback-adding": "צולייגן פֿידבעק צו בלאַט...",
+       "feedback-close": "ערליידיקט",
        "feedback-error1": "טעות: אומבאַקאַנטער רעזולטאַט פון API",
        "feedback-error2": "טעות: רעדאַקטירן דורכפֿאַל",
        "feedback-error3": "טעות: קיין ענטפֿער פון API",
+       "feedback-message": "מעלדונג:",
+       "feedback-subject": "טעמע:",
+       "feedback-submit": "אײַנגעבן",
        "feedback-thanks": "ייש\"כ! אײַער פֿידבעק איז געווארן ארויפגעלעגט צום בלאט \"[$2 $1]\".",
-       "feedback-close": "ערליידיקט",
-       "feedback-bugcheck": "געוואלדיק! אבער זייט בודק אז עס איז נישט איינער פון די [$1 באוואוסטע באגן].",
-       "feedback-bugnew": "כ'האב בודק געווען. רעפארטירט א נייעם באג.",
        "searchsuggest-search": "זוכן",
        "searchsuggest-containing": "כולל…",
        "api-error-badaccess-groups": "איר האט נישט קיין רעכטן אַרויפֿלאָדן טעקעס אויף דער וויקי.",
        "expand_templates_xml_output": "XML אויסגאָב",
        "expand_templates_ok": "אויספֿירן",
        "expand_templates_remove_comments": "אראפנעמען הערות",
-       "expand_templates_preview": "פֿאראויסשטעלונג"
+       "expand_templates_preview": "פֿאראויסשטעלונג",
+       "special-characters-group-latin": "לאַטייניש",
+       "special-characters-group-latinextended": "לאַטייַן פֿאַרברייטערט",
+       "special-characters-group-ipa": "אינטערנאַציאנאלער פֿאנעטישער אלפֿאבעט (IPA)",
+       "special-characters-group-symbols": "סימבאלן",
+       "special-characters-group-greek": "גריכיש",
+       "special-characters-group-cyrillic": "ציריליש",
+       "special-characters-group-arabic": "אראביש",
+       "special-characters-group-arabicextended": "פארברייטערטע אראביש",
+       "special-characters-group-persian": "פּערסיש",
+       "special-characters-group-hebrew": "העברעיש",
+       "special-characters-group-bangla": "בענגאַליש",
+       "special-characters-group-tamil": "טאַמיליש",
+       "special-characters-group-telugu": "טעלוגו",
+       "special-characters-group-sinhala": "סינהאַלאַ",
+       "special-characters-group-gujarati": "גודזשאַראַטי",
+       "special-characters-group-devanagari": "דעוואַנאַגאַרי",
+       "special-characters-group-thai": "טהאי",
+       "special-characters-group-lao": "לאַאטיש",
+       "special-characters-group-khmer": "כמער",
+       "special-characters-title-endash": "ען טירע",
+       "special-characters-title-emdash": "עם טירע",
+       "special-characters-title-minus": "מינוס"
 }
index 21dc246..4106e1b 100644 (file)
@@ -5,7 +5,8 @@
                        "Kaganer",
                        "Meno25",
                        "Urhixidur",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Ìfàlàsábẹ́ àwọn àjápọ̀:",
        "delete-toobig": "Ojúewé yìí ní ìtàn àtúnṣe tótóbi, ó pọ̀ ju {{PLURAL:$1|àtúnyẹ̀wò}} $1 lọ.\nÌparẹ́ irú àwọn ojúewé báyìí ti jẹ́ dídílọ́nà láti dènà àsìṣe ìdílọ́wọ́ sí {{SITENAME}}.",
        "delete-warning-toobig": "Ojúewé yìí ní ìtàn àtúnṣe tótóbi, ó pọ̀ ju {{PLURAL:$1|àtúnyẹ̀wò}} $1 lọ.\nÌparẹ́ rẹ̀ le dí ìsiṣẹ́ ibùdó dátà lọ́wọ́ lórí {{SITENAME}}; ẹ ṣè fura.",
        "rollback": "Yí àwọn àtúnṣe sẹ́yìn",
-       "rollback_short": "Yísẹ́yìn",
        "rollbacklink": "yísẹ́yìn",
        "rollbacklinkcount": "ìyíṣẹ́yìn {{PLURAL:$1|àtúnṣe|àtúnṣe}} $1",
        "rollbacklinkcount-morethan": "ìyíṣẹ́yìn {{PLURAL:$1|àtúnṣe|àtúnṣe}} tó ju $1 lọ",
        "import-rootpage-nosubpage": "Orúkọàyè \"$1\" fún ipasẹ̀ ojúewé kò gba ojúewé abẹ́ ní àyè.",
        "importlogpage": "Ìgbéwọlé àkọọ́lẹ̀",
        "importlogpagetext": "Ìkówọlé olùmójútó àwọn ojúewé pẹ̀lú ìtàn àtúnṣe láti àwọn wiki míràn.",
-       "import-logentry-upload": "ìkówọlé [[$1]] pẹ̀lú ìrùsókè fáìlì",
        "import-logentry-upload-detail": "{{PLURAL:$1|Àtúnyẹ̀wò|Àwọn àtúnyẹ̀wò}} $1",
-       "import-logentry-interwiki": "mú $1 wá láti inú wiki míràn",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Àtúnyẹ̀wò|Àwọn àtúnyẹ̀wò}} $1 láti $2",
        "javascripttest": "Ìdánwò JavaScript",
-       "javascripttest-title": "Únṣe ìdánwò $1",
        "javascripttest-pagetext-noframework": "Ojúewé yìí jẹ́ dídásílẹ̀ fún ṣíṣe ìdánwò JavaScript.",
        "javascripttest-pagetext-skins": "Ẹ mú irú ojú ara tí ẹ fẹ́ lò láti ṣe àdánwò náà:",
        "javascripttest-qunit-intro": "Ẹ wo [$1 ìwé aṣàlàyé ìdánwò] ní mediawiki.org.",
-       "javascripttest-qunit-heading": "Ibi ìdánwò QUnit JavaScript MediaWiki",
        "tooltip-pt-userpage": "Ojúewé oníṣe yín",
        "tooltip-pt-anonuserpage": "Ojúewé oníṣe fún àdírẹ́ẹ̀sì IP tí ẹ únlò láti ṣàtúnṣe",
        "tooltip-pt-mytalk": "Ojúewé ọ̀rọ̀ yín",
        "watchlisttools-edit": "Ìwò àti àtúnṣe ìmójútó",
        "watchlisttools-raw": "Ẹ ṣ'àtúnṣe àkójọ ìmójútó látìbẹ̀rẹ̀",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ọ̀rọ̀]])",
-       "unknown_extension_tag": "Àlẹ̀mọ́ ìfàgùn àìdámọ̀ \"$1\"",
        "duplicate-defaultsort": "'''Ìkìlọ̀:''' Bọ́tìnì ìtò àkọ́kọ́ṣe \"$2\" dípò Bọ́tìnì ìtò àkọ́kọ́ṣe \"$1\" tẹ́lẹ̀.",
        "version": "Àtẹ̀jáde",
        "version-extensions": "Àwọn ìfàgùn kíkànsínú",
        "version-other": "Òmíràn",
        "version-hooks": "Àwọn hook",
        "version-hook-name": "Orúkọ hook",
-       "version-version": "(Àtẹ̀jáde $1)",
+       "version-version": "($1)",
        "version-license": "Ìwé àṣẹ",
        "version-poweredby-credits": "Agbára ìṣiṣẹ́ wiki yìí wá látọwọ́ '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "àwọn mìíràn",
        "logentry-rights-autopromote": "$1 jẹ́ {{GENDER:$2|gbígbénípòga}} nífúnraẹni láti $4 sí $5",
        "rightsnone": "(kòsí)",
        "revdelete-summary": "àkótán àtúnṣe",
+       "feedback-adding": "Ìfikún ìdáhùn sí ojúewé...",
+       "feedback-bugcheck": "Ó dáa bẹ́ẹ̀! Ẹ rí pé kò í ṣe ìkan nínú [$1 àwọn ìsòrò tí a ti mọ̀ tẹ́lẹ̀].",
+       "feedback-bugnew": "Mo ti yẹ́wò. Fi ìsòrò sùn",
        "feedback-bugornote": "Tí ẹ bá ti ṣetán láti ṣàlàyé ìsòrò iṣẹ́ẹ̀rọ́ lẹ́ẹ̀kúnrẹ́rẹ́ ẹ jọ̀wọ́ [$1 ẹ sọ irú ìsòro náà]\nBíbẹ̀ẹ̀kọ́, ẹ le lo fọ́ọ̀mù ìsàlẹ̀. Ẹjọ́ yín yíò jẹ́ fífikún mọ́ ojúewé \"[$3 $2]\", bákannáà mọ́ orúkọ oníṣe yín.",
-       "feedback-subject": "Oríọ̀rọ̀:",
-       "feedback-message": "Ìránṣẹ́:",
        "feedback-cancel": "Fagilé",
-       "feedback-submit": "Ìfisílẹ̀ ìdáhùn",
-       "feedback-adding": "Ìfikún ìdáhùn sí ojúewé...",
+       "feedback-close": "Ṣetán",
        "feedback-error1": "Àsìṣe: Èsì aláìdámọ́ látọ̀dọ̀ API",
        "feedback-error2": "Àsìṣe: Àtúnṣe kùnà",
        "feedback-error3": "Àsìṣe: Kò sí ìdáhùn látọ̀dọ̀ API",
+       "feedback-message": "Ìránṣẹ́:",
+       "feedback-subject": "Oríọ̀rọ̀:",
+       "feedback-submit": "Fúnsílẹ̀",
        "feedback-thanks": "Adúpẹ́! Ìdáhùn yín ti jẹ́ fífikún sí ojúewé \"[$2 $1]\".",
-       "feedback-close": "Ṣetán",
-       "feedback-bugcheck": "Ó dáa bẹ́ẹ̀! Ẹ rí pé kò í ṣe ìkan nínú [$1 àwọn ìsòrò tí a ti mọ̀ tẹ́lẹ̀].",
-       "feedback-bugnew": "Mo ti yẹ́wò. Fi ìsòrò sùn",
        "searchsuggest-search": "Ṣàwárí",
        "searchsuggest-containing": "tó ní...",
        "api-error-badaccess-groups": "Ẹ kò ní àṣẹ láti ru fáìlì wọlé sí orí wiki yìí.",
        "duration-centuries": "{{PLURAL:$1|ọ̀rúndún|ọ̀rúndún}} $1",
        "duration-millennia": "{{PLURAL:$1|ẹ̀rúndún|ẹ̀rúndún}} $1",
        "rotate-comment": "Àwòrán jẹ́ mímúyípo ní {{PLURAL:$1|degree|ìyí}} $1 bíi ọwọ́ ago",
-       "expand_templates_preview": "Àkọ́yẹ̀wò"
+       "expand_templates_preview": "Àkọ́yẹ̀wò",
+       "special-characters-group-latin": "Látìnì",
+       "special-characters-group-latinextended": "Látìnì títóbi",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Àwọn àmì ìdámọ̀",
+       "special-characters-group-greek": "Gíríkì",
+       "special-characters-group-cyrillic": "Kíúrílíkì",
+       "special-characters-group-arabic": "Lárúbáwá",
+       "special-characters-group-persian": "Èdè Pẹrsíà",
+       "special-characters-group-hebrew": "Hébérù",
+       "special-characters-group-bangla": "Bánglà",
+       "special-characters-group-telugu": "Tèlúgù",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index 0924acb..d1a9784 100644 (file)
@@ -22,7 +22,8 @@
                        "Mywood",
                        "Impersonator 1",
                        "Cedric tsan cantonais",
-                       "Liuxinyu970226"
+                       "Liuxinyu970226",
+                       "Yueman"
                ]
        },
        "tog-underline": "連結加底線:",
@@ -39,6 +40,7 @@
        "tog-watchdefault": "將我修改嘅頁同檔案加入監視清單",
        "tog-watchmoves": "將我移動嘅頁同檔案加入監視清單",
        "tog-watchdeletion": "將我刪除嘅頁同檔案加入監視清單",
+       "tog-watchrollback": "將我反轉過嘅頁加落監視清單",
        "tog-minordefault": "預設全部編輯做小修改",
        "tog-previewontop": "喺修改欄上方顯示預覽",
        "tog-previewonfirst": "第一次修改時顯示預覽",
        "pool-queuefull": "隊池已滿",
        "pool-errorunknown": "未知嘅錯誤",
        "pool-servererror": "用唔到程序計數服務 ($1)。",
+       "poolcounter-usage-error": "用法出錯:$1",
        "aboutsite": "關於{{SITENAME}}",
        "aboutpage": "Project:關於",
        "copyright": "除非另外講明,響呢版度嘅內容係根據$1嘅條款發佈。",
        "disclaimers": "免責聲明",
        "disclaimerpage": "Project:一般免責聲明",
        "edithelp": "編輯協助",
+       "helppage-top-gethelp": "幫手",
        "mainpage": "頭版",
        "mainpage-description": "頭版",
        "policy-url": "Project:政策",
        "readonly_lag": "當從伺服器追緊主伺服器時,資料庫會自動被鎖",
        "internalerror": "內部錯誤",
        "internalerror_info": "內部錯誤: $1",
+       "internalerror-fatal-exception": "嚴重例外類型「$1」",
        "filecopyerror": "檔案 \"$1\" 抄唔到去 \"$2\"。",
        "filerenameerror": "檔案 \"$1\" 唔改得做 \"$2\"。",
        "filedeleteerror": "檔案 \"$1\" 唔刪得。",
        "wrongpassword": "密碼唔啱,麻煩你再試多次。",
        "wrongpasswordempty": "你都未入密碼,唔該再試多次啦。",
        "passwordtooshort": "你嘅密碼最少要有$1個半形字元。",
+       "passwordtoolong": "密碼唔可以長過{{PLURAL:$1|1個字元|$1個字元}}。",
        "password-name-match": "你嘅密碼一定要同你嘅用戶名唔一樣。",
        "password-login-forbidden": "呢個用戶名同密碼嘅利用係被禁止嘅。",
        "mailmypassword": "重設密碼",
        "anoneditwarning": "'''警告:'''閣下重未登入。閣下嘅 IP 地址會喺爾一版嘅修訂歷史裡邊記錄落嚟。",
        "anonpreviewwarning": "''你重未登入,你嘅 IP 位址會喺呢個頁面嘅修訂歷史中記錄落嚟。''",
        "missingsummary": "'''提醒:''' 你未提供編輯摘要。如果你再撳多一下「{{int:savearticle}}」嘅話,咁你儲存嘅編輯就會無摘要。",
+       "selfredirect": "<strong>警告:</strong> 你個跳轉彈返去自己度。\n你可能設錯咗跳轉目標,或者改錯咗版。\n如果你再撳多「{{int:savearticle}}」一下,就會照幫你開呢個跳轉。",
        "missingcommenttext": "請輸入一個註解。",
        "missingcommentheader": "'''提醒:'''你響呢個註解度並無提供一個主題/標題。如果你再撳一次「{{int:savearticle}}」,你嘅編輯就會無題。",
        "summary-preview": "摘要預覽:",
        "subject-preview": "標題/頭條預覽:",
+       "previewerrortext": "預覽你嘅修改嗰陣出錯。",
        "blockedtitle": "用戶已經封鎖",
        "blockedtext": "你嘅用戶名或者 IP 位址已經被 $1 封咗。\n\n呢次封鎖係由$1所封嘅。當中嘅原因係''$2''。\n\n* 呢次封鎖嘅開始時間係:$8\n* 呢次封鎖嘅到期時間係:$6\n* 對於被封鎖者:$7\n\n你可以聯絡 $1 或者其他嘅[[{{MediaWiki:Grouppage-sysop}}|管理員]],討論呢次封鎖。\n除非你已經響你嘅[[Special:Preferences|戶口喜好設定]]入面設定咗有效嘅電郵地址,否則你係唔可以用「電郵呢個用戶」嘅功能。當設定咗一個有效嘅電郵地址之後,呢個功能係唔會封鎖嘅。\n\n你現時嘅 IP 位址係 $3 ,而個封鎖 ID 係 #$5。 請你喺你嘅查詢都註明以上封鎖嘅資料。",
        "autoblockedtext": "你嘅IP地址已經被自動封鎖,由於之前嘅另一位用戶係畀$1封咗。\n而封鎖嘅原因係:\n\n:''$2''\n\n* 呢次封鎖嘅開始時間係:$8\n* 呢次封鎖嘅到期時間係:$6\n* 對於被封鎖者:$7\n\n你可以聯絡 $1 或者其他嘅[[{{MediaWiki:Grouppage-sysop}}|管理員]],討論呢次封鎖。\n\n除非你已經響你嘅[[Special:Preferences|戶口喜好設定]]入面設定咗有效嘅電郵地址,否則你係唔可以用「電郵呢個用戶」嘅功能。當設定咗一個有效嘅電郵地址之後,呢個功能係唔會封鎖嘅。\n\n你現時用緊嘅 IP 地址係 $3,個封鎖 ID 係 #$5。 請喺你嘅查詢都註明呢個封鎖上面嘅資料。",
        "postedit-confirmation-saved": "呢版經已儲存咗。",
        "edit-already-exists": "唔可以開一新版。\n佢已經存在。",
        "defaultmessagetext": "預設訊息文字",
+       "invalid-content-data": "無效嘅內容資料",
        "content-not-allowed-here": "「$1」唔可以輸入[[$2]]。",
        "editwarning-warning": "離開爾一版會令到閣下嘅修改唔見咗。\n閣下可以喺喜好設定嘅\"{{int:prefs-editing}}\"小節度停用爾個警告。",
        "editpage-notsupportedcontentformat-title": "唔支持爾種內容格式。",
        "content-model-text": "純文字",
        "content-model-javascript": "JavaScript程式語言",
        "content-model-css": "層疊樣式表",
+       "content-json-empty-object": "吉嘅嘢",
+       "content-json-empty-array": "吉嘅陣列",
        "duplicate-args-category": "模用重複參數嘅嘅版面",
        "expensive-parserfunction-warning": "警告: 呢一版有太多耗費嘅語法功能呼叫。\n\n佢應該少過$2次呼叫,佢而家係$1次呼叫。",
        "expensive-parserfunction-category": "響版度有太多嘅耗費嘅語法功能呼叫",
        "undo-success": "呢個編輯可以取消。請檢查一下個差異去確認呢個係你要去做嘅,跟住儲存下面嘅更改去完成編輯。",
        "undo-failure": "呢個編輯唔能夠取消,由於同途中嘅編輯有衝突。",
        "undo-norev": "呢個編輯唔能夠取消,由於佢唔存在或者刪除咗。",
+       "undo-nochange": "呢個編輯睇嚟經已一早取消咗。",
        "undo-summary": "取消由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])所做嘅修訂 $1",
+       "undo-summary-username-hidden": "取消匿埋咗嘅用戶嘅修改版本 $1",
        "cantcreateaccounttitle": "唔可以開新戶口",
        "cantcreateaccount-text": "由呢個IP地址 ('''$1''') 開嘅新戶口已經被[[User:$3|$3]]封鎖。\n\n當中俾$3封鎖嘅原因係''$2''",
+       "cantcreateaccount-range-text": "由呢個IP地址範圍'''$1'''(包括你個IP '''$4''')開嘅新戶口已經畀[[User:$3|$3]]封鎖咗。\n\n$3畀嘅理由係''$2''",
        "viewpagelogs": "睇呢頁嘅日誌",
        "nohistory": "呢版冇歷史。",
        "currentrev": "最新嘅修訂",
        "revdelete-no-file": "指定嘅檔案未存在。",
        "revdelete-show-file-confirm": "你係咪真係想去睇響$2 $3刪咗 \"$1\" 嘅檔案修訂?",
        "revdelete-show-file-submit": "係",
+       "revdelete-selected-text": "揀咗[[:$2]]嘅$1個版本:",
+       "revdelete-selected-file": "揀咗[[:$2]]嘅$1個檔案版本:",
        "logdelete-selected": "揀咗嘅日誌事件:",
+       "revdelete-text-text": "刪咗嘅版本重喺修改紀錄度,但入面嘅內容唔畀公眾睇。",
+       "revdelete-text-file": "刪咗嘅檔案版本重喺檔案修改紀錄度,但入面嘅內容唔畀公眾睇。",
+       "logdelete-text": "刪咗嘅日誌項目重喺日誌度,但入面嘅內容唔畀公眾睇。",
+       "revdelete-text-others": "其他管理員可以睇收埋咗嘅內容同埋恢復返佢,除非設咗額外條件。",
        "revdelete-confirm": "請確認你肯定去做嘅話,你就要明白到後果,同埋呢個程序符合[[{{MediaWiki:Policy-url}}|政策]]。",
        "revdelete-suppress-text": "壓制'''只'''應該響下面嘅情況之下進行:\n* 可能係誹謗嘅資料\n* 唔合適嘅個人資料\n*: ''屋企地址、電話號碼、身份證號碼等。''",
        "revdelete-legend": "設定可見性嘅限制",
        "mergehistory-empty": "無修訂可以合併",
        "mergehistory-success": "[[:$1]]嘅$3次修訂已經成功噉合併到[[:$2]]。",
        "mergehistory-fail": "歷史合併唔到,請重新檢查嗰一版同埋時間參數。",
+       "mergehistory-fail-toobig": "唔能夠合併編輯紀錄,因為入面超過咗$1個版本嘅上限。",
        "mergehistory-no-source": "來源頁$1唔存在。",
        "mergehistory-no-destination": "目的頁$1唔存在。",
        "mergehistory-invalid-source": "來源頁一定要係一個有效嘅標題。",
        "revertmerge": "反合併",
        "mergelogpagetext": "下面係一個最近由一版嘅修訂記錄合併到另一個嘅一覽。",
        "history-title": "「$1」嘅修訂歷史",
+       "difference-title": "\"$1\" 版本嘅差別",
+       "difference-title-multipage": "「$1」同「$2」嘅差別",
        "difference-multipage": "(版之間嘅差異)",
        "lineno": "第$1行:",
        "compareselectedversions": "比較被選嘅修訂",
        "showhideselectedversions": "顯示/隱藏揀咗嘅修訂",
        "editundo": "復原",
+       "diff-empty": "(無差別)",
+       "diff-multi-sameuser": "(無顯示同一用戶中途改嘅 $1 個版本)",
+       "diff-multi-otherusers": "(無顯示{{PLURAL:$2|另一個用戶|另外$2個用戶}}中途改嘅 $1 個版本)",
        "diff-multi-manyusers": "(由$2位更多用戶所做嘅$1個中途修訂冇顯示到)",
        "searchresults": "搵嘢結果",
        "searchresults-title": "對\"$1\"嘅搵嘢結果",
        "notextmatches": "冇頁面文字符合",
        "prevn": "前$1",
        "nextn": "後{{PLURAL:$1|$1}}",
+       "prev-page": "上一版",
+       "next-page": "下一版",
        "prevn-title": "前$1項結果",
        "nextn-title": "後$1項結果",
        "shown-title": "每版顯示$1項結果",
        "search-result-category-size": "$1位成員 ($2個細類,$3個檔案)",
        "search-redirect": "(跳轉 $1)",
        "search-section": "(小節 $1)",
+       "search-category": "(類 $1)",
+       "search-file-match": "(夾啱樓案内容)",
        "search-suggest": "你係唔係搵: $1",
        "search-interwiki-caption": "姊妹計劃",
-       "search-interwiki-default": "$1項結果:",
+       "search-interwiki-default": "嚟自$1嘅結果:",
        "search-interwiki-more": "(更多)",
        "search-relatedarticle": "有關",
        "searchrelated": "有關",
        "searchall": "全部",
        "showingresults": "'自#'''$2'''起顯示最多'''$1'''個結果。",
+       "showingresultsinrange": "下面顯示由第 <strong>$2</strong> 個到第 <strong>$3</strong> 個入面嘅第 {{PLURAL:$1|<strong>$1</strong> 個結果}}:",
+       "search-showingresults": "{{PLURAL:$4|第 <strong>$1</strong>個結果,一共有 <strong>$3</strong> 個|第 <strong>$1 - $2</strong> 個結果,一共有 <strong>$3</strong> 個}}",
        "search-nonefound": "響個查詢度無結果配合。",
        "powersearch-legend": "進階搵嘢",
        "powersearch-ns": "喺以下嘅空間名度搵:",
        "powersearch-togglelabel": "检查:",
        "powersearch-toggleall": "全部",
        "powersearch-togglenone": "無",
+       "powersearch-remember": "記住今次選擇方便第時搵嘢用返",
        "search-external": "出面搵嘢",
        "searchdisabled": "{{SITENAME}}嘅搜尋功能已經關閉。你可以利用Google嚟搵。不過佢哋對{{SITENAME}}嘅索引可能唔係最新嘅。",
+       "search-error": "搵嘢嗰陣出錯:$1",
        "preferences": "喜好設定",
        "mypreferences": "自訂喜好",
        "prefs-edits": "編輯數:",
+       "prefsnologintext2": "請簽到去改你嘅自訂喜好。",
        "prefs-skin": "畫面",
        "skin-preview": "預覽",
        "datedefault": "冇喜好",
        "prefs-labs": "實驗性嘅特色",
+       "prefs-user-pages": "用戶頁",
        "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": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "最多 $1 日",
        "prefs-watchlist-edits": "喺加強版監視清單度嘅最多顯示更改數:",
        "prefs-watchlist-edits-max": "最大數量:1000",
        "prefs-watchlist-token": "監視清單幣:",
        "prefs-misc": "雜項",
        "prefs-resetpass": "改密碼",
+       "prefs-changeemail": "改電郵地址",
+       "prefs-setemail": "入電郵地址",
        "prefs-email": "電郵選項",
        "prefs-rendering": "外觀",
        "saveprefs": "儲存",
-       "restoreprefs": "恢復全部預設設定",
+       "restoreprefs": "恢復全部預設設定(喺所有項目)",
        "prefs-editing": "編輯中",
        "rows": "行數:",
        "columns": "列數:",
        "recentchangesdays-max": "最多 $1 日",
        "recentchangescount": "預設顯示嘅編輯數:",
        "prefs-help-recentchangescount": "呢個包埋最近修改、頁歷史同埋日誌紀錄。",
+       "prefs-help-watchlist-token2": "呢個係網上訂閱你個監視清單嘅密匙。\n任何人只要知道個密匙,就會睇到你個監視清單,所以唔好畀人知。\n如果有需要嘅話,[[Special:ResetTokens|你可以重設佢]]。",
        "savedprefs": "你嘅喜好設定已經儲存。",
        "timezonelegend": "時區:",
        "localtime": "本地時間:",
-       "timezoneuseserverdefault": "用伺服器預設值",
+       "timezoneuseserverdefault": "用維基預設值($1)",
        "timezoneuseoffset": "其他 (指定偏移)",
        "servertime": "伺機器時間:",
        "guesstimezone": "由瀏覽器填上",
        "timezoneregion-indian": "印度洋",
        "timezoneregion-pacific": "太平洋",
        "allowemail": "由其它用戶啟用電子郵件",
-       "prefs-searchoptions": "搵嘢選項",
+       "prefs-searchoptions": "搵嘢",
        "prefs-namespaces": "空間名",
        "default": "預設",
        "prefs-files": "檔案",
        "prefs-reset-intro": "你可以用呢版去重設你嘅喜好設定到網站預設值。呢個動作無得番轉頭。",
        "prefs-emailconfirm-label": "電郵確認:",
        "youremail": "電郵:",
-       "username": "用戶名:",
-       "prefs-memberingroups": "{{PLURAL:$1|一|多}}組嘅成員:",
+       "username": "{{GENDER:$1|用戶名}}:",
+       "prefs-memberingroups": "{{PLURAL:$1|組}}嘅{{GENDER:$2|成員}}:",
        "prefs-registration": "註冊時間:",
        "yourrealname": "真名:",
        "yourlanguage": "話:",
-       "yourvariant": "變換:",
+       "yourvariant": "內容語言變換:",
+       "prefs-help-variant": "你想喺呢度嘅內容顯示嘅語言變換。",
        "yournick": "新花名:",
        "prefs-help-signature": "響討論版嘅評論應該要用 \"<nowiki>~~~~</nowiki>\" 簽名,噉就會轉做你嘅簽名同埋一個時間截記。",
        "badsig": "無效嘅程式碼簽名。檢查吓 HTML 有無錯。",
        "badsiglength": "你嘅花名太長喇。\n唔長得過$1個字元。",
-       "yourgender": "性別:",
-       "gender-unknown": "æ\9cªæ\8c\87å®\9a",
-       "gender-male": "",
-       "gender-female": "女",
-       "prefs-help-gender": "å\8f¯é\81¸: ç\94¨å\9a\9fæ\95´è»\9f件æ\80§å\88¥æ\8c\87å®\9aã\80\82呢項資料將會被公開。",
+       "yourgender": "你想點畀人稱呼?",
+       "gender-unknown": "æ\88\91å\94\94æ\83³è¬\9b",
+       "gender-male": "佢寫維基",
+       "gender-female": "å§\96寫維å\9fº",
+       "prefs-help-gender": "å\91¢é \85å\8f¯ä»¥è\87ªå·±æ\8f\80å¡«å®\9aå\94\94å¡«ã\80\82\n系統æ\9c\83ç\94¨å\91¢é \85è³\87æ\96\99å\9a\9få\88¤æ\96·é»\9eç\94¨é\81©ç\95¶èª\9eæ³\95å\8e»ç¨±å\91¼ä½ ã\80\82\n呢項資料將會被公開。",
        "email": "電郵",
-       "prefs-help-realname": "真名可以唔填。\n如果你畀埋佢,有需要嘅時候會用佢來標示你嘅工夫。",
+       "prefs-help-realname": "真名可以揀填定唔填。\n如果你畀埋佢,可能會用佢嚟標示你嘅貢獻。",
        "prefs-help-email": "電郵地址可以唔填,但當你唔記得咗你個密碼嗰陣需要利用電郵地址將新密碼重設寄番畀你。",
        "prefs-help-email-others": "亦可以響人哋唔知你電郵地址嘅情況之下都可以聯絡你。",
        "prefs-help-email-required": "需要電郵地址。",
        "prefs-signature": "簽名",
        "prefs-dateformat": "日期格式",
        "prefs-timeoffset": "時間偏移",
-       "prefs-advancedediting": "進階選項",
+       "prefs-advancedediting": "普通選項",
+       "prefs-editor": "編輯",
+       "prefs-preview": "預覽",
        "prefs-advancedrc": "進階選項",
        "prefs-advancedrendering": "進階選項",
        "prefs-advancedsearchoptions": "進階選項",
        "prefs-advancedwatchlist": "進階選項",
        "prefs-displayrc": "顯示選項",
        "prefs-displaywatchlist": "顯示選項",
+       "prefs-tokenwatchlist": "密匙",
        "prefs-diffs": "差異",
+       "prefs-help-prefershttps": "呢項喜好設定會喺你下次簽到先至開始生效。",
+       "prefswarning-warning": "你改嘅喜好設定改動重未記低。\n如果你未撳「$1」就走咗,你嘅喜好設定唔會有更新。",
        "email-address-validity-valid": "電郵地址睇嚟有效",
        "email-address-validity-invalid": "請打一個有效嘅電郵地址",
        "userrights": "用戶權限管理",
        "userrights-lookup-user": "管理用戶組",
        "userrights-user-editname": "輸入一個用戶名:",
        "editusergroup": "編輯用戶組",
-       "editinguser": "改緊用戶'''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]]) 嘅用戶權限",
+       "editinguser": "改緊<strong>[[User:$1|$1]]</strong>嘅用戶權限 $2",
        "userrights-editusergroup": "編輯用戶組",
        "saveusergroups": "儲存用戶組",
        "userrights-groupsmember": "屬於:",
        "userrights-no-interwiki": "你並無權限去編輯響其它wiki嘅用戶權限。",
        "userrights-nodatabase": "資料庫$1唔存在或者唔係本地嘅。",
        "userrights-nologin": "你一定要以操作員戶口[[Special:UserLogin|登入]]咗之後先可以指定用戶權限。",
-       "userrights-notallowed": "你嘅戶口無權限去指定用戶權限。",
+       "userrights-notallowed": "你無權限去加減用戶權限。",
        "userrights-changeable-col": "你可以改嘅組",
        "userrights-unchangeable-col": "你唔可以改嘅組",
        "group": "組:",
        "group-bureaucrat": "事務員",
        "group-suppress": "監督",
        "group-all": "(全部)",
-       "group-user-member": "用戶",
-       "group-autoconfirmed-member": "自動確認用戶",
+       "group-user-member": "{{GENDER:$1|用戶}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|自動確認用戶}}",
        "group-bot-member": "{{GENDER:$1|機械人}}",
        "group-sysop-member": "{{GENDER:$1|管理員}}",
-       "group-bureaucrat-member": "事務員",
-       "group-suppress-member": "監督",
+       "group-bureaucrat-member": "{{GENDER:$1|事務員}}",
+       "group-suppress-member": "{{GENDER:$1|監督}}",
        "grouppage-user": "{{ns:project}}:用戶",
        "grouppage-autoconfirmed": "{{ns:project}}:自動確認用戶",
        "grouppage-bot": "{{ns:project}}:機械人",
        "right-reupload-shared": "於本地無視共用媒體檔案庫上嘅檔案",
        "right-upload_by_url": "由一個URL上載檔案",
        "right-purge": "唔需要確認之下清除網站快取",
-       "right-autoconfirmed": "編輯半保護版",
+       "right-autoconfirmed": "唔受IP嘅利用率限制影響",
        "right-bot": "視為一個自動程序",
        "right-nominornewtalk": "小編輯唔引發新信息提示",
        "right-apihighlimits": "響API查詢度用更高嘅上限",
        "right-deletedtext": "睇刪咗嘅修訂度嘅已刪嘅字同更改",
        "right-browsearchive": "搵刪咗嘅版",
        "right-undelete": "反刪版",
-       "right-suppressrevision": "睇同恢復由操作員隱藏嘅修訂",
+       "right-suppressrevision": "睇下、收埋同恢復任何用戶指定頁面版本",
        "right-suppressionlog": "去睇私人嘅日誌",
        "right-block": "封鎖其他用戶唔畀編輯",
        "right-blockemail": "封鎖用戶唔畀寄電郵",
        "right-hideuser": "封鎖用戶名,對公眾隱藏",
        "right-ipblock-exempt": "繞過IP封鎖、自動封鎖同埋範圍封鎖",
        "right-proxyunbannable": "繞過Proxy嘅自動封鎖",
-       "right-unblockself": "解封佢哋自己",
-       "right-protect": "改保護等級同埋編輯保護版",
-       "right-editprotected": "編輯ä¿\9dè­·ç\89\88ï¼\88ç\84¡é\80£ä¸²ä¿\9dè­·ï¼\89",
+       "right-unblockself": "解封自己",
+       "right-protect": "改保護等級同埋編輯流水保護版",
+       "right-editprotected": "ç\94¨ã\80\8c{{int:protect-level-sysop}}ã\80\8dæ¬\8aé\99\90å\8e»ç·¨è¼¯ä¿\9dè­·ç\89\88",
        "right-editinterface": "編輯用戶界面",
        "right-editusercssjs": "編輯其他用戶嘅CSS同埋JavaScript檔",
        "right-editusercss": "編輯其他用戶嘅CSS檔",
        "action-suppressionlog": "睇呢個私有日誌",
        "action-block": "封鎖呢位用戶嘅編輯",
        "action-protect": "改呢版嘅保護等級",
-       "action-import": "ç\94±å\8f¦ä¸\80å\80\8bwikiå\80\92å\85¥å\91¢ä¸\80版",
-       "action-importupload": "由一個檔案上載倒入呢一版",
+       "action-import": "ç\94±å\85¶å®\83wiki度å\80\92å\85¥版",
+       "action-importupload": "由檔案上載度倒入版",
        "action-patrol": "標示其它嘅編輯做已巡查嘅",
        "action-autopatrol": "將你嘅編輯標示做已巡查嘅",
        "action-unwatchedpages": "睇未畀人監視嘅版",
        "action-userrights": "編輯全部嘅權限",
        "action-userrights-interwiki": "編輯響其它wiki用戶嘅權限",
        "action-siteadmin": "鎖同解鎖資料庫",
+       "action-sendemail": "送電郵",
+       "action-editmywatchlist": "改監視清單",
+       "action-viewmywatchlist": "睇監視清單",
+       "action-viewmyprivateinfo": "睇你嘅私人資料",
+       "action-editmyprivateinfo": "改你嘅私人資料",
        "nchanges": "$1次更改",
+       "enhancedrc-since-last-visit": "{{PLURAL:$1|你上次嚟之後}}有 $1 個",
+       "enhancedrc-history": "歷史",
        "recentchanges": "最近改過嘅嘢",
        "recentchanges-legend": "最近更改選項",
        "recentchanges-summary": "追蹤對哩一個 wiki 嘅最後更改。",
+       "recentchanges-noresult": "喺指定時段無符合呢啲條件嘅改動。",
        "recentchanges-feed-description": "追蹤對哩一個 wiki 度呢個集合嘅最後更改。",
        "recentchanges-label-newpage": "呢次編輯開咗一個新版",
        "recentchanges-label-minor": "呢個係一個細編輯",
        "recentchanges-label-bot": "呢次編輯係由機械人進行",
        "recentchanges-label-unpatrolled": "呢次編輯重未巡查過",
-       "recentchanges-legend-newpage": "$1 - 新版",
-       "rcnotefrom": "以下係自'''$2'''嘅更改(顯示到'''$1''')。",
+       "recentchanges-label-plusminus": "頁面位元組大細變化",
+       "recentchanges-legend-heading": "'''標記:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (睇埋[[Special:NewPages|新開版]])",
+       "rcnotefrom": "下面嘅{{PLURAL:$5|改動}}由 <strong>$3 $4</strong> 開始(顯示到'''$1''')。",
        "rclistfrom": "顯示由$3 $2嘅新更改",
        "rcshowhideminor": "$1小編輯",
+       "rcshowhideminor-show": "顯示",
+       "rcshowhideminor-hide": "收埋",
        "rcshowhidebots": "$1機械人",
-       "rcshowhideliu": "$1登入咗嘅用戶",
+       "rcshowhidebots-show": "顯示",
+       "rcshowhidebots-hide": "收埋",
+       "rcshowhideliu": "$1登記咗嘅用戶",
+       "rcshowhideliu-show": "顯示",
+       "rcshowhideliu-hide": "收埋",
        "rcshowhideanons": "$1匿名用戶",
+       "rcshowhideanons-show": "顯示",
+       "rcshowhideanons-hide": "收埋",
        "rcshowhidepatr": "$1巡邏過嘅編輯",
+       "rcshowhidepatr-show": "顯示",
+       "rcshowhidepatr-hide": "收埋",
        "rcshowhidemine": "$1我嘅編輯",
+       "rcshowhidemine-show": "顯示",
+       "rcshowhidemine-hide": "收埋",
        "rclinks": "顯示最後$1次喺$2日內嘅更改<br />$3",
        "diff": "差異",
        "hist": "歷史",
        "number_of_watching_users_pageview": "[$1位用戶監視]",
        "rc_categories": "限定到分類(以\"|\"作分隔)",
        "rc_categories_any": "任何",
+       "rc-change-size-new": "改完後係$1位元組",
        "newsectionsummary": "/* $1 */ 新小節",
-       "rc-enhanced-expand": "顯示細節 (需要 JavaScript)",
+       "rc-enhanced-expand": "顯示細節",
        "rc-enhanced-hide": "隱藏細節",
+       "rc-old-title": "原先標題係「$1」",
        "recentchangeslinked": "連結頁嘅更改",
        "recentchangeslinked-feed": "連結頁嘅更改",
        "recentchangeslinked-toolbox": "連結頁嘅更改",
        "reuploaddesc": "取消上載再返到去上載表格",
        "upload-tryagain": "遞交改咗嘅檔案描述",
        "uploadnologin": "重未登入",
-       "uploadnologintext": "你必須先[[Special:UserLogin|登入]]去上載檔案。",
+       "uploadnologintext": "請$1去上載檔案。",
        "upload_directory_missing": "嗰個上載嘅目錄 ($1) 唔見咗,唔可以由網頁伺服器建立。",
        "upload_directory_read_only": "嗰個上載嘅目錄 ($1) 而家唔能夠被網頁伺服器寫入。",
        "uploaderror": "上載錯誤",
        "upload-recreate-warning": "'''警告:一個同名嘅檔案曾經被刪除過或者搬走咗。'''\n\n呢版嘅刪除同移動日誌響呢度提供以便參考:",
        "uploadtext": "用下面嘅表格嚟上載檔案。\n要睇或者搵嘢之前上載嘅圖像請去[[Special:FileList|已上載檔案一覽]],(再)上載嘅動作會喺[[Special:Log/upload|上載日誌]]裏面記錄落嚟,而刪除嘅動作會喺[[Special:Log/delete|刪除日誌]]裏面記錄落嚟。\n\n如果要喺頁面度引入呢張圖像,可以使用以下其中一種方式嘅連結:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:file.jpg<nowiki>]]</nowiki></code>'''去用檔案嘅完整版\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:file.png|200px|thumb|left|替代文字<nowiki>]]</nowiki></code>'''去用200像素比例闊,靠左邊加盒,響描述度加'替代文字'\n* '''<code><nowiki>[[</nowiki>{{ns:media}}:file.ogg<nowiki>]]</nowiki></code>''' 直接連結到檔案而唔顯示個檔案。",
-       "upload-permitted": "准許嘅檔案類型: $1。",
-       "upload-preferred": "建議嘅檔案類型: $1。",
-       "upload-prohibited": "禁止嘅檔案類型: $1。",
+       "upload-permitted": "准許嘅檔案{{PLURAL:$2|類型}}:$1。",
+       "upload-preferred": "建議嘅檔案{{PLURAL:$2|類型}}:$1。",
+       "upload-prohibited": "禁止嘅檔案{{PLURAL:$2|類型}}:$1。",
        "uploadlogpage": "上載日誌",
        "uploadlogpagetext": "以下係最近檔案上載嘅一覽表。\n睇[[Special:NewFiles|新圖像畫廊]]去睇更詳細嘅總覽。",
        "filename": "檔名",
        "ignorewarnings": "忽略任何警告",
        "minlength1": "檔名必須最少要有一個字。",
        "illegalfilename": "檔名「$1」含有頁面標題所唔允許嘅字。請試下改檔名再上載。",
+       "filename-toolong": "檔案名唔可以長過240位元組。",
        "badfilename": "檔名已經更改成「$1」。",
        "filetype-mime-mismatch": "檔案擴展名 \".$1\" 唔搭偵測到檔案嘅MIME類型 ($2)。",
        "filetype-badmime": "「$1」嘅MIME類型檔案係唔容許上載嘅。",
        "large-file": "建議檔案嘅大細唔好大過$1 bytes,呢個檔案有$2 bytes",
        "largefileserver": "呢個檔案超過咗伺服器設定允許嘅大細。",
        "emptyfile": "你上載嘅檔案似乎係空嘅。噉樣可能係因為你打錯咗個檔名。請檢查吓你係唔係真係要上載呢個檔案。",
-       "fileexists": "呢個檔名已經存在,如果你唔肯定係唔係要更改<strong>[[:$1]]</strong>,請先檢查佢。 [[$1|thumb]]",
+       "windows-nonascii-filename": "呢個維基唔支援有特殊字元嘅檔案名。",
+       "fileexists": "呢個檔名已經存在,如果你唔肯定係唔係要更改,請先檢查<strong>[[:$1]]</strong>。 [[$1|thumb]]",
        "filepageexists": "呢個檔嘅描述頁已經響<strong>[[:$1]]</strong>開咗,但係呢個名嘅檔案重未存在。你輸入咗嘅摘要係唔會顯示響個描述頁度。要令到個摘要響嗰度出現,你就要手動噉去改佢。\n[[$1|thumb]]",
-       "fileexists-extension": "一個相似檔名嘅檔案已經存在: [[$2|thumb]]\n* 上載檔案嘅檔名: <strong>[[:$1]]</strong>\n* 現有檔案嘅檔名: <strong>[[:$2]]</strong>\n請揀一個唔同嘅名。",
+       "fileexists-extension": "一個相似檔名嘅檔案已經存在: [[$2|thumb]]\n* 上載檔案嘅檔名:<strong>[[:$1]]</strong>\n* 現有檔案嘅檔名:<strong>[[:$2]]</strong>\n你係咪要揀返個唔同嘅名?",
        "fileexists-thumbnail-yes": "呢個檔案好似係一幅圖像縮細咗嘅版本''(縮圖)''。 [[$1|thumb]]\n請檢查清楚個檔案<strong>[[:$1]]</strong>。\n如果檢查咗嘅檔案係同原本幅圖個大細係一樣嘅話,就唔使再上載多一幅縮圖。",
        "file-thumbnail-no": "個檔名係以<strong>$1</strong>開始。佢好似係一幅圖像嘅縮細版本''(縮圖)''。\n如果你有呢幅圖像嘅完整大細,唔係嘅話請再改過個檔名。",
        "fileexists-forbidden": "呢個檔案嘅名已經存在,唔可以覆蓋;麻煩返轉去用第二個名嚟上載呢個檔案。[[File:$1|thumb|center|$1]]",
        "upload-http-error": "一個HTTP錯誤發生咗: $1",
        "backend-fail-notexists": "檔案$1唔存在。",
        "backend-fail-delete": "刪唔到檔案「$1」。",
+       "backend-fail-alreadyexists": "檔案「$1」已經喺度。",
+       "backend-fail-store": "檔案「$1」存唔到去「$2」。",
+       "backend-fail-copy": "檔案「$1」抄唔到去「$2」。",
+       "backend-fail-move": "檔案「$1」搬唔到去「$2」。",
+       "backend-fail-opentemp": "唔能夠開個臨時檔案。",
+       "backend-fail-writetemp": "唔能夠寫個臨時檔案。",
+       "backend-fail-closetemp": "唔能夠閂個臨時檔案。",
+       "backend-fail-read": "讀唔到檔案「$1」。",
+       "backend-fail-create": "寫唔到檔案「$1」。",
+       "backend-fail-maxsize": "寫唔到檔案「$1」,因為佢大過$2個位元組。",
+       "backend-fail-readonly": "儲存後臺「$1」而家只能夠唯讀。理由係:「<em>$2</em>」",
+       "backend-fail-synced": "檔案「$1」喺內部儲存後臺入面狀態唔一致。",
+       "backend-fail-connect": "連唔到儲存後臺「$1」",
+       "backend-fail-internal": "儲存後臺「$1」唔知點解出錯",
+       "backend-fail-contenttype": "確定唔到存喺儲存後臺「$1」嘅內容類型。",
+       "lockmanager-notlocked": "唔可以解鎖「$1」;佢都無鎖住到。",
        "zip-file-open-error": "在開啟檔案進行ZIP檢查時出錯。",
        "zip-wrong-format": "呢個唔係一個ZIP檔案。",
        "zip-bad": "呢個係不可讀嘅ZIP檔案。\n因為呢個原因,唔可以進行保安檢查。",
        "uploadstash-errclear": "清除檔案唔成功。",
        "uploadstash-refresh": "更新檔案清單",
        "img-auth-accessdenied": "拒絕通行",
-       "img-auth-nopathinfo": "PATH_INFO唔見咗。\n你嘅伺服器重未設定呢個資料。\n佢可能係CGI為本,唔支援img_auth。\n睇吓 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
+       "img-auth-nopathinfo": "PATH_INFO唔見咗。\n你嘅伺服器重未設定呢個資料。\n佢可能係CGI為本,唔支援img_auth。\n睇吓 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 。",
        "img-auth-notindir": "所請求嘅路徑唔響個已經設定咗嘅上載目錄。",
        "img-auth-badtitle": "唔能夠由\"$1\"整一個有效標題。",
        "img-auth-nologinnWL": "你而家無登入,\"$1\"唔響個白名單度。",
        "license": "協議:",
        "license-header": "協議",
        "nolicense": "未揀",
+       "licenses-edit": "改牌照選項",
        "license-nopreview": "(無預覽可以用得到)",
-       "upload_source_url": " (啱嘅,公開嘅網址)",
-       "upload_source_file": " (你部電腦裏面嘅一個檔案)",
-       "listfiles-summary": "呢個特別版顯示全部上載過嘅檔案。\n響預設最後上載嘅檔案會顯示響呢個表嘅最頂。\n撳一欄嘅標題去改個排列。",
+       "upload_source_url": "(你個檔案來源嚟自一個啱嘅、公開嘅網址)",
+       "upload_source_file": "(你個檔案來源嚟自你部電腦裏面)",
+       "listfiles-delete": "刪除",
+       "listfiles-summary": "呢個特別頁顯示全部上載咗嘅檔案。",
        "listfiles_search_for": "搵媒體名:",
        "imgfile": "檔案",
        "listfiles": "檔案清單",
        "listfiles_size": "大細",
        "listfiles_description": "描述",
        "listfiles_count": "版本",
+       "listfiles-show-all": "包埋圖像舊版",
+       "listfiles-latestversion": "而家嘅版本",
+       "listfiles-latestversion-yes": "係",
+       "listfiles-latestversion-no": "唔係",
        "file-anchor-link": "檔案",
        "filehist": "檔案歷史",
        "filehist-help": "撳個日期/時間去睇響嗰個時間出現過嘅檔案。",
        "linkstoimage-more": "多過$1版連過去呢個檔案。\n下面嘅表只係列示咗連去呢個檔案嘅最頭$1版。\n一個[[Special:WhatLinksHere/$2|完整嘅表]]可以提供。",
        "nolinkstoimage": "冇個頁面連結到呢個檔案。",
        "morelinkstoimage": "去睇連到呢個檔案嘅[[Special:WhatLinksHere/$1|更多連結]]。",
+       "linkstoimage-redirect": "$1(檔案跳轉)$2",
        "duplicatesoffile": "下面嘅$1個檔案係同呢個檔案重覆 ([[Special:FileDuplicateSearch/$2|更多細節]]):",
        "sharedupload": "呢個檔案係出自$1,可以喺其他計劃中使用。",
        "sharedupload-desc-there": "呢個檔案係出自$1,可以喺其他計劃中使用。\n更多資訊請睇[$2 檔案描述頁]。",
        "uploadnewversion-linktext": "上載呢個檔案嘅一個新版本",
        "shared-repo-from": "出自 $1",
        "shared-repo": "一個共用檔案庫",
+       "upload-disallowed-here": "你無得衾咗個檔案。",
        "filerevert": "回復$1",
        "filerevert-legend": "回復檔案",
        "filerevert-intro": "你而家回復緊個檔案'''[[Media:$1|$1]]'''到[$4 響$2 $3嘅版本]。",
        "filedelete-reason-dropdown": "\n*常用刪除原因\n** 侵犯版權\n** 重覆檔案",
        "filedelete-edit-reasonlist": "編輯刪除原因",
        "filedelete-maintenance": "響維護嗰陣已經暫時停用檔案刪除同恢復。",
+       "filedelete-maintenance-title": "刪唔到檔案",
        "mimesearch": "MIME 搜尋",
-       "mimesearch-summary": "呢一版可以過濾有關檔案嘅MIME類型。輸入方法:contenttype/subtype,例如 <code>image/jpeg</code>。",
+       "mimesearch-summary": "呢一版可以過濾有關檔案嘅MIME類型。\n輸入方法:contenttype/subtype 或者 contenttype/*,例如 <code>image/jpeg</code>。",
        "mimetype": "MIME 類型:",
        "download": "下載",
        "unwatchedpages": "未監視嘅頁面",
        "listredirects": "彈嚟彈去一覽",
+       "listduplicatedfiles": "重覆檔案一覽",
        "unusedtemplates": "未用嘅模",
        "unusedtemplatestext": "呢一頁列示喺{{ns:template}}空間名未包括喺其它頁面嘅全部頁面。請記得喺刪除佢哋之前檢查其它連結到呢個模嘅頁面。",
        "unusedtemplateswlh": "其它連結",
        "randompage": "隨便一版",
        "randompage-nopages": "響下面嘅{{PLURAL:$2|空間名}}度搵唔到一版: $1",
+       "randomincategory": "類入面是但一版",
+       "randomincategory-invalidcategory": "「$1」唔係有效嘅類名。",
+       "randomincategory-nopages": "[[:Category:$1|$1]]類入面無嘢。",
+       "randomincategory-category": "類:",
+       "randomincategory-legend": "類入面是但一版",
        "randomredirect": "隨便彈",
        "randomredirect-nopages": "響 \"$1\" 空間名度冇一個彈去版。",
        "statistics": "統計",
        "statistics-users": "註冊咗嘅[[Special:ListUsers|用戶]]",
        "statistics-users-active": "活躍用戶",
        "statistics-users-active-desc": "響$1日前做過動作嘅用戶",
+       "pageswithprop": "有屬性嘅頁",
+       "pageswithprop-legend": "有屬性嘅頁",
+       "pageswithprop-prop": "屬性名:",
+       "pageswithprop-submit": "去",
        "doubleredirects": "雙重跳轉",
        "doubleredirectstext": "每一行都順次序寫住第一頁名,佢嘅目的頁,同埋目的頁再指去邊度。改嘅時候,應該將第一個跳轉頁轉入第三頁。\n<del>劃咗</del>嘅項目係已經解決咗嘅。",
-       "double-redirect-fixed-move": "[[$1]]已經搬好咗,佢而家跳轉過去[[$2]]。",
-       "double-redirect-fixed-maintenance": "修復[[$1]]嘅重定向到[[$2]]。",
+       "double-redirect-fixed-move": "[[$1]]已經搬好咗。\n佢自動更新咗,而家跳轉過去[[$2]]。",
+       "double-redirect-fixed-maintenance": "喺維護工作度自動修復[[$1]]嘅跳轉到[[$2]]。",
        "double-redirect-fixer": "跳轉修正器",
        "brokenredirects": "破碎嘅跳轉",
        "brokenredirectstext": "以下嘅跳轉係指向唔存在嘅頁面:",
        "fewestrevisions": "有最少修改嘅版",
        "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "ncategories": "$1 個分類",
+       "ninterwikis": "$1 {{PLURAL:$1|個跨維基連結}}",
        "nlinks": "$1 條連結",
        "nmembers": "$1 位成員",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|位成員}}",
        "nrevisions": "$1 次修訂",
        "nviews": "$1 次瀏覽",
        "nimagelinks": "用響$1版",
        "wantedpages": "被徵求嘅頁面",
        "wantedpages-badtitle": "響結果組嘅無效標題: $1",
        "wantedfiles": "被徵求嘅檔案",
+       "wantedfiletext-nocat-noforeign": "下面檔案有用到,但係唔存在。",
        "wantedtemplates": "被徵求嘅模",
        "mostlinked": "有最多連結嘅頁面",
        "mostlinkedcategories": "有最多連結嘅分類",
-       "mostlinkedtemplates": "有最多連結嘅模",
+       "mostlinkedtemplates": "有最多嵌入嘅版",
        "mostcategories": "有最多分類嘅頁面",
        "mostimages": "有最多連結嘅檔案",
+       "mostinterwikis": "有最多跨維基連結嘅頁面",
        "mostrevisions": "有最多修改嘅頁面",
        "prefixindex": "全部頁嘅前綴",
        "shortpages": "短頁",
        "protectedpages": "保護頁",
        "protectedpages-indef": "只有無期保謢頁",
        "protectedpages-cascade": "只有連串保護頁",
+       "protectedpages-noredirect": "收埋跳轉",
        "protectedpagesempty": "響呢啲參數度,現時無頁面響度保護緊。",
+       "protectedpages-timestamp": "時間",
+       "protectedpages-page": "版",
+       "protectedpages-expiry": "到期",
+       "protectedpages-performer": "保護用戶",
+       "protectedpages-params": "保護參數",
        "protectedpages-reason": "原因",
+       "protectedpages-unknown-timestamp": "唔知",
+       "protectedpages-unknown-performer": "未知嘅用戶",
        "protectedtitles": "保護咗嘅標題",
        "protectedtitlesempty": "響呢啲參數之下並無標題保護住。",
        "listusers": "用戶一覽",
        "listusers-editsonly": "只顯示有編輯嘅用戶",
        "listusers-creationsort": "按建立日期排序",
+       "listusers-desc": "反向排序",
        "usereditcount": "$1次編輯",
        "usercreated": "響$1 $2{{GENDER:$3|建立}}",
        "newpages": "新頁",
        "pager-older-n": "舊$1次",
        "suppress": "監督",
        "querypage-disabled": "呢個特別版基於效能嘅原因停用咗。",
+       "apihelp": "API幫手",
+       "apihelp-no-such-module": "搵唔到模組「$1」。",
        "booksources": "書籍來源",
        "booksources-search-legend": "搵書源",
+       "booksources-search": "搵",
        "booksources-text": "以下嘅連結清單列出其它一啲賣新書同二手書嘅網站,可能可以提供到有關你想搵嘅書嘅更多資料:",
        "booksources-invalid-isbn": "個ISBN無效;請檢查原來源複製落來嘅錯。",
-       "specialloguserlabel": "用戶:",
+       "specialloguserlabel": "執行人:",
        "speciallogtitlelabel": "目標(題目或者用戶):",
        "log": "日誌",
        "all-logs-page": "全部嘅公共日誌",
        "allpagesprefix": "用以下開頭嘅頁面:",
        "allpagesbadtitle": "提供嘅頁面名無效,又或者有一個跨語言或跨wiki嘅字頭。佢可能包括一個或多個字係唔可以用響標題度嘅。",
        "allpages-bad-ns": "{{SITENAME}}係無一個空間名叫做\"$1\"。",
+       "allpages-hide-redirects": "收埋跳轉",
+       "cachedspecial-refresh-now": "睇最新。",
        "categories": "類",
        "categoriespagetext": "下面嘅{{PLURAL:$1|類}}有版或媒體。\n[[Special:UnusedCategories|未用類]]唔會響呢度列示。\n請同時參閱[[Special:WantedCategories|需要嘅分類]]。",
        "categoriesfrom": "顯示由呢項起嘅類:",
        "deletedcontributions": "已經刪除咗嘅用戶貢獻",
        "deletedcontributions-title": "已經刪除咗嘅用戶貢獻",
        "sp-deletedcontributions-contribs": "貢獻",
-       "linksearch": "外部連結",
+       "linksearch": "搵出面嘅連結",
        "linksearch-pat": "搵嘅形態:",
        "linksearch-ns": "空間名",
        "linksearch-ok": "搵",
-       "linksearch-text": "可以用類似\"*.wikipedia.org\"嘅萬用字元。<br />\n支援嘅協議: <code>$1</code>",
+       "linksearch-text": "可以用類似「*.wikipedia.org」嘅萬用字元。\n需要至少一個頂級域名,好似「*.org」。<br />\n支援嘅{{PLURAL:$2|協議}}:<code>$1</code> (預設用 http:// 如果唔指定協議)",
        "linksearch-line": "$1 連自 $2",
        "linksearch-error": "萬用字元只可以響主機名嘅開頭度用。",
        "listusersfrom": "顯示由呢個字開始嘅用戶:",
        "listusers-blocked": "(封鎖咗)",
        "activeusers": "活躍用戶名單",
        "activeusers-intro": "呢個係響最近$1日之內有一啲動作嘅用戶名單。",
-       "activeusers-count": "響$3日之內嘅$1次編輯",
+       "activeusers-count": "響{{PLURAL:$3|$3日}}之內嘅$1次{{PLURAL:$1|編輯}}",
        "activeusers-from": "顯示用戶開始於:",
        "activeusers-hidebots": "隱藏機械人",
        "activeusers-hidesysops": "隱藏管理員",
        "activeusers-noresult": "搵唔到用戶。",
        "listgrouprights": "用戶組權限",
        "listgrouprights-summary": "下面係一個響呢個wiki定義咗嘅用戶權限一覽,同埋佢哋嘅存取權。\n更多有關個別權限嘅[[{{MediaWiki:Listgrouprights-helppage}}|更多細節]]可以響嗰度搵到。",
-       "listgrouprights-key": "* <span class=\"listgrouprights-granted\">畀咗嘅權限</span>\n* <span class=\"listgrouprights-revoked\">拎咗嘅權限</span>",
+       "listgrouprights-key": "說明:\n* <span class=\"listgrouprights-granted\">畀咗嘅權限</span>\n* <span class=\"listgrouprights-revoked\">拎咗嘅權限</span>",
        "listgrouprights-group": "組",
        "listgrouprights-rights": "權",
        "listgrouprights-helppage": "Help:組權限",
        "listgrouprights-removegroup-self": "響自己嘅戶口度拎走嘅{{PLURAL:$2|一|多}}組: $1",
        "listgrouprights-addgroup-self-all": "加入全部組到自己嘅戶口度",
        "listgrouprights-removegroup-self-all": "響自己嘅戶口度可以拎走全部組",
+       "listgrouprights-namespaceprotection-header": "空間名限制",
+       "listgrouprights-namespaceprotection-namespace": "空間名",
+       "listgrouprights-namespaceprotection-restrictedto": "容許用戶改文嘅權",
+       "trackingcategories": "追蹤類",
+       "trackingcategories-msg": "追蹤類",
+       "trackingcategories-name": "訊息名",
+       "trackingcategories-nodesc": "冇解說資料",
+       "trackingcategories-disabled": "類停用咗",
        "mailnologin": "冇傳送地址",
        "mailnologintext": "你一定要[[Special:UserLogin|登入咗]]同埋喺你嘅[[Special:Preferences|喜好設定]]度有個有效嘅電郵地址先可以傳送電郵畀其他用戶。",
        "emailuser": "發電郵畀呢位用戶",
+       "emailuser-title-target": "電郵畀呢個{{GENDER:$1|用戶}}",
+       "emailuser-title-notarget": "發電郵畀用戶",
        "emailpage": "發電郵畀用戶",
-       "emailpagetext": "你可以用下面嘅表去寄一封電郵畀呢位用戶。\n你喺[[Special:Preferences|你嘅用戶喜好設定]]入面填寫嘅電郵地址會出現喺呢封電郵「由」嘅地址度,以便收件人可以回覆到。",
-       "defemailsubject": "{{SITENAME}} 電郵",
+       "emailpagetext": "你可以用下面嘅表去寄一封電郵畀呢位{{GENDER:$1|用戶}}。\n你喺[[Special:Preferences|你嘅用戶喜好設定]]入面填寫嘅電郵地址會出現喺呢封電郵「由」嘅地址度,方便收件人可以直接回覆你。",
+       "defemailsubject": "由用戶「$1」送嘅 {{SITENAME}} 電郵",
        "usermaildisabled": "用戶電郵已停用",
        "usermaildisabledtext": "你唔可以發送電郵到響呢個wiki度嘅其他用戶",
        "noemailtitle": "無電郵地址",
        "noemailtext": "呢個用戶重未指定一個有效嘅電郵地址。",
        "nowikiemailtext": "呢位用戶揀咗唔收其他用戶畀佢嘅電郵。",
+       "emailnotarget": "收件人填錯名。",
+       "emailtarget": "入收件人嘅用戶名",
+       "emailusername": "用戶名:",
+       "emailusernamesubmit": "遞交",
        "email-legend": "寄電郵畀另一位{{SITENAME}}用戶",
        "emailfrom": "由:",
        "emailto": "到:",
        "mywatchlist": "監視清單",
        "watchlistfor2": "$1嘅監視清單 $2",
        "nowatchlist": "你嘅監視清單度並冇任何項目。",
-       "watchlistanontext": "請先$1去睇或者改響你監視清單度嘅項目。",
+       "watchlistanontext": "請先簽到去睇或者改響你監視清單度嘅項目。",
        "watchnologin": "未登入",
-       "addedwatchtext": "頁面「[[:$1]]」已加入到你嘅[[Special:Watchlist|監視清單]]度。\n呢個頁面以及佢個討論頁以後嘅修改都會列喺嗰度,佢喺[[Special:RecentChanges|最近更改清單]]度會以'''粗體'''顯示,等你可以容易啲睇到佢。",
+       "addwatch": "加到監視清單",
+       "addedwatchtext": "頁面「[[:$1]]」已加入到你嘅[[Special:Watchlist|監視清單]]度。\n呢個頁面以及佢個討論頁以後嘅修改都會列喺嗰度。",
+       "addedwatchtext-short": "「$1」呢一版已經加咗入監視清單。",
+       "removewatch": "響監視清單度拎走",
        "removedwatchtext": "頁面「[[:$1]]」已經喺[[Special:Watchlist|你嘅監視清單]]度刪除。",
+       "removedwatchtext-short": "「$1」呢一版已經由監視清單度拎走咗。",
        "watch": "監視",
        "watchthispage": "監視呢頁",
        "unwatch": "唔使監視",
        "unwatchthispage": "停止監視",
        "notanarticle": "唔係一個內容頁",
        "notvisiblerev": "上次由唔同用戶嘅修訂已經刪除咗",
-       "watchlist-details": "唔計討論頁,有 $1 響你個監視清單度。",
-       "wlheader-enotif": "電子郵件通知已經啟用。",
-       "wlheader-showupdated": "'''粗體字'''嘅頁響你上次嚟之後被人改過",
-       "wlnote": "以ä¸\8bä¿\82最近'''$2'''個鐘之內嘅最新$1次修改。",
-       "wlshowlast": "顯示最近 $1 個鐘 $2 日  嘅修改",
+       "watchlist-details": "唔計討論頁,有 $1 {{PLURAL:$1|版}}響你個監視清單度。",
+       "wlheader-enotif": "電郵通知已經啟用咗。",
+       "wlheader-showupdated": "標'''粗體字'''嘅頁響你上次嚟之後畀人改過。",
+       "wlnote": "ä¸\8bé\9d¢ä¿\82ç\9b´å\88°$3 $4ç\82ºæ­¢ï¼\8c最近'''$2'''個鐘之內嘅最新$1次修改。",
+       "wlshowlast": "顯示最近 $1 個鐘 $2 日",
        "watchlist-options": "監視清單選項",
        "watching": "監視緊...",
        "unwatching": "唔再監視緊...",
+       "watcherrortext": "更改「$1」嘅監視清單嗰陣出錯。",
        "enotif_reset": "將所有頁面標成已視察",
        "enotif_impersonal_salutation": "{{SITENAME}}用戶",
+       "enotif_subject_deleted": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|刪咗}}。",
+       "enotif_subject_created": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|開咗}}。",
+       "enotif_subject_moved": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|搬咗}}。",
+       "enotif_subject_restored": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|恢復咗}}。",
+       "enotif_subject_changed": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|改咗}}。",
+       "enotif_body_intro_deleted": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|刪咗}}。睇下 $3 。",
+       "enotif_body_intro_created": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|開咗}}。睇下而家個版本 $3 。",
+       "enotif_body_intro_moved": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|搬咗}}。睇下而家個版本 $3 。",
+       "enotif_body_intro_restored": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|恢復咗}}。睇下而家個版本 $3 。",
+       "enotif_body_intro_changed": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|改咗}}。睇下而家個版本 $3 。",
        "enotif_lastvisited": "你上次視察以嚟嘅修改請睇$1。",
        "enotif_lastdiff": "睇$1去睇吓呢一次更改。",
        "enotif_anon_editor": "匿名用戶$1",
        "exbeforeblank": "喺清空之前嘅內容係:「$1」",
        "delete-confirm": "刪除\"$1\"",
        "delete-legend": "刪除",
-       "historywarning": "警告:你要刪除嘅頁面有大約$1次嘅修訂:",
+       "historywarning": "<strong>警告:</strong>你要刪除嘅頁面有大約$1次嘅修訂:",
        "confirmdeletetext": "你準備刪除一個頁面或者圖像,包括佢嘅所有歷史版本。\n請確認你打算噉做,而且你知道後果係點,加上確認你噉做冇違反到[[{{MediaWiki:Policy-url}}]]。",
        "actioncomplete": "操作完成",
        "actionfailed": "操作失敗",
        "deletecomment": "原因:",
        "deleteotherreason": "其它/附加嘅原因:",
        "deletereasonotherlist": "其它原因",
-       "deletereason-dropdown": "*常用刪除原因\n** 作者請求\n** 侵犯版權\n** 破壞",
+       "deletereason-dropdown": "*常用刪除原因\n** 垃圾訊息\n** 破壞\n** 侵犯版權\n** 作者請求\n** 壞咗嘅跳轉",
        "delete-edit-reasonlist": "編輯刪除原因",
        "delete-toobig": "呢一版有一個好大量嘅編輯歷史,過咗$1次修訂。刪除呢類版嘅動作已經限制咗,以防止響{{SITENAME}}嘅意外擾亂。",
        "delete-warning-toobig": "呢一版有一個好大量嘅編輯歷史,過咗$1次修訂。刪除佢可能會擾亂{{SITENAME}}嘅資料庫操作;響繼續嗰陣請小心。",
+       "deleteprotected": "你唔可以刪呢版,因為佢畀人保護咗。",
        "rollback": "反轉修改",
        "rollbacklink": "反轉",
+       "rollbacklinkcount": "反轉 $1 次修改",
        "rollbackfailed": "反轉唔到",
        "cantrollback": "反轉唔到;上一位貢獻者係唯一修改過呢版嘅人。",
        "alreadyrolled": "無法反轉[[User:$2|$2]]([[User talk:$2|留言]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])對[[:$1]]嘅最後編輯;有人已經修改過或者反轉咗呢個頁面。\n\n上次對呢版嘅編輯係由[[User:$3|$3]]([[User talk:$3|留言]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])做嘅。",
        "editcomment": "編輯摘要係:「'''$1'''」。",
        "revertpage": "已經反轉由[[Special:Contributions/$2|$2]]([[User talk:$2|對話]])所寫嘅編輯到[[User:$1|$1]]嘅最後修訂。",
-       "revertpage-nouser": "已經反轉由(刪咗用戶名)所寫嘅編輯到[[User:$1|$1]]所寫嘅最後修訂。",
+       "revertpage-nouser": "已經反轉咗由收埋咗嘅用戶名所寫嘅編輯,到[[User:$1|$1]]所寫嘅最後修訂版本。",
        "rollback-success": "已經反轉由$1所寫嘅編輯;恢復到$2嘅最後修訂。",
        "sessionfailure-title": "會話失敗",
        "sessionfailure": "你嘅登入會話 (session) 好似有啲問題;\n為咗防止會話劫持,呢個操作已經取消。\n請返去之前嗰版,重新載入嗰版然後再試。",
        "protectlogpage": "保護日誌",
-       "protectlogtext": "下面係一個保護同埋解除保護頁面嘅一覽表。睇吓[[Special:ProtectedPages|保護頁面一覽]]去搵鎖咗嘅頁。",
+       "protectlogtext": "下面係一個保護同埋解除保護頁面改動嘅一覽表。\n睇吓[[Special:ProtectedPages|保護頁面一覽]]去搵而家鎖咗嘅頁。",
        "protectedarticle": "已經保護 \"[[$1]]\"",
        "modifiedarticleprotection": "已經改咗 \"[[$1]]\" 嘅保護等級",
-       "unprotectedarticle": "已經唔再保護 \"[[$1]]\"",
+       "unprotectedarticle": "已經唔再保護「[[$1]]」",
        "movedarticleprotection": "已經改咗由「[[$2]]」到「[[$1]]」嘅保護設定",
        "protect-title": "改緊「$1」嘅保護等級",
+       "protect-title-notallowed": "睇下「$1」嘅保護等級",
        "prot_1movedto2": "[[$1]]搬到去[[$2]]",
+       "protect-badnamespace-title": "保護唔到嘅空間名",
+       "protect-badnamespace-text": "呢個空間名嘅版面保護唔到。",
+       "protect-norestrictiontypes-title": "保護唔到嘅頁",
        "protect-legend": "確認保護",
        "protectcomment": "原因:",
        "protectexpiry": "到期:",
        "protect-locked-blocked": "當你響被封鎖嗰陣唔可以改呢版嘅保護等級。\n呢個係'''$1'''版嘅現時設定:",
        "protect-locked-dblock": "響資料庫主動鎖住咗嗰陣係唔可以改呢版嘅保護等級。\n呢個係'''$1'''版嘅現時設定:",
        "protect-locked-access": "你嘅戶口係無權限去改呢版嘅保護等級。\n呢個係'''$1'''版嘅現時設定:",
-       "protect-cascadeon": "呢一版現時正響度保護緊,因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗,而當中又開咗連串保護。你可以更改呢一版嘅保護等級,但係呢個修改係唔會影響到嗰個連串保護。",
+       "protect-cascadeon": "呢一版現時正響度保護緊,因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗,而當中又開咗連串保護。更改呢一版嘅保護等級唔會影響到嗰個連串保護。",
        "protect-default": "容許全部用戶",
-       "protect-fallback": "需要\"$1\"嘅許可",
+       "protect-fallback": "只容許有「$1」許可嘅用戶",
        "protect-level-autoconfirmed": "只限已經自動確認嘅用戶",
        "protect-level-sysop": "只限管理員",
        "protect-summary-cascade": "連串保護",
        "protect-expiring": "響 $1 (UTC) 到期",
+       "protect-expiring-local": "$1 到期",
        "protect-expiry-indefinite": "唔定",
        "protect-cascade": "保護包含響呢一版嘅頁面 (連串保護)",
        "protect-cantedit": "你唔可以改呢版嘅保護等級,因為你無權限去編輯佢。",
        "protect-othertime": "其它時間:",
        "protect-othertime-op": "其它時間",
        "protect-existing-expiry": "現時到期嘅時間: $2 $3",
+       "protect-existing-expiry-infinity": "到期時間:無限期",
        "protect-otherreason": "其它/附加嘅原因:",
        "protect-otherreason-op": "其它原因",
        "protect-dropdown": "*通用保護原因\n** 過量嘅破壞\n** 過量嘅灌水\n** 反生產性編輯戰\n** 高流量頁",
        "viewdeletedpage": "去睇被刪除咗嘅頁面",
        "undeletepagetext": "以下嘅$1個頁面已經刪除,但係重喺檔庫度可以恢復。檔案庫可能會定時清理。",
        "undelete-fieldset-title": "恢復修訂",
-       "undeleteextrahelp": "要恢復成個頁面,唔好剔任何嘅核選盒,再撳'''''{{int:undeletebtn}}'''''。\n要恢復已經選擇咗嘅修訂,將要恢復代表有關修訂嘅核選盒剔上,再撳'''''{{int:undeletebtn}}'''''。\n撳'''''{{int:undeletereset}}'''''會清除註解文字同埋全部嘅核選盒。",
+       "undeleteextrahelp": "要恢復成個頁面,唔好剔任何嘅核選盒,再撳<strong><em>{{int:undeletebtn}}</em></strong>。\n要恢復已經選擇咗嘅修訂,將要恢復代表有關修訂嘅核選盒剔上,再撳<strong><em>{{int:undeletebtn}}</em></strong>。",
        "undeleterevisions": "$1個修訂都已經存檔",
        "undeletehistory": "如果你恢復呢個頁面,佢嘅所有修改歷史都會恢復返到嗰篇頁面嘅歷史度。如果喺佢刪除之後又新開咗同名嘅頁面,你恢復嘅修改歷史會顯示喺先前歷史度。",
        "undeleterevdel": "如果響最新修訂度部份刪除,噉就反刪除唔到。如果遇到呢種情況,你一定要反選或者反隱藏最新刪除咗嘅修訂。",
        "undeletedrevisions": "$1個修訂已經救返",
        "undeletedrevisions-files": "$1個修訂同$2個檔案已經救返",
        "undeletedfiles": "$1個檔案已經救返",
-       "cannotundelete": "æ\95\91å\94\94å\88°ï¼\9bå\8f¯è\83½æ\9c\89å\85¶ä»\96人已ç¶\93æ\95\91è¿\94å\97°é \81ã\80\82",
+       "cannotundelete": "æ\95\91å\94\94å\88°ï¼\9a\n$1",
        "undeletedpage": "'''$1已經成功救返'''\n\n最近嘅刪除同恢復記錄請睇[[Special:Log/delete]]。",
        "undelete-header": "睇吓[[Special:Log/delete|刪除日誌]]去睇之前刪除嘅頁頁。",
+       "undelete-search-title": "搵刪咗嘅版",
        "undelete-search-box": "搵刪除咗嘅頁面",
        "undelete-search-prefix": "顯示由以下開頭嘅頁面:",
        "undelete-search-submit": "搵嘢",
        "undelete-bad-store-key": "唔能夠刪除帶有時間截記嘅檔案修訂 $1: 檔案響刪除之前唔見咗。",
        "undelete-cleanup-error": "刪除無用嘅歸檔檔案 \"$1\" 時出錯。",
        "undelete-missing-filearchive": "由於檔案歸檔 ID $1 唔響個數據庫度,唔能夠響個檔案歸檔恢復。佢可能已經反刪除咗。",
+       "undelete-error": "還原刪版出錯",
        "undelete-error-short": "反刪除檔案嗰陣出錯: $1",
        "undelete-error-long": "當反刪除緊個檔案嗰陣遇到錯誤:\n\n$1",
        "undelete-show-file-confirm": "你係咪肯定你想去睇響 $2 $3 嘅 \"<nowiki>$1</nowiki>\" 檔案?",
        "undelete-show-file-submit": "係",
        "namespace": "空間名:",
        "invert": "反選",
+       "tooltip-invert": "剔呢個格就可以收埋揀咗嘅命名空間嘅頁面改動(如果剔埋相關命名空間,亦都會一齊收埋)",
+       "namespace_association": "相關命名空間",
+       "tooltip-namespace_association": "剔呢個格就可以收埋相關嘅討論頁命名空間",
        "blanknamespace": "(主)",
        "contributions": "{{GENDER:$1|用戶}}貢獻",
        "contributions-title": "$1嘅用戶貢獻",
        "mycontris": "個人貢獻",
-       "contribsub2": "$1嘅貢獻 ($2)",
+       "contribsub2": "{{GENDER:$3|$1}}嘅貢獻 ($2)",
+       "contributions-userdoesnotexist": "用戶「$1」未有註冊。",
        "nocontribs": "搵唔到符合呢啲條件嘅修改。",
-       "uctop": "(最頂)",
+       "uctop": "(而家)",
        "month": "由呢個月 (同更早):",
        "year": "由呢一年 (同更早):",
        "sp-contributions-newbies": "只顯示新戶口嘅貢獻",
        "sp-contributions-newbies-sub": "新戶口嘅貢獻",
        "sp-contributions-newbies-title": "新戶口嘅用戶貢獻",
        "sp-contributions-blocklog": "封鎖日誌",
+       "sp-contributions-suppresslog": "壓制咗嘅用戶貢獻",
        "sp-contributions-deleted": "已經刪除咗嘅用戶貢獻",
        "sp-contributions-uploads": "上載",
        "sp-contributions-logs": "日誌",
        "sp-contributions-search": "搵貢獻",
        "sp-contributions-username": "IP地址或用戶名:",
        "sp-contributions-toponly": "只顯示最新修訂嘅編輯",
+       "sp-contributions-newonly": "只顯示開新版嘅編輯",
        "sp-contributions-submit": "搵",
        "whatlinkshere": "有乜嘢連結來呢度",
        "whatlinkshere-title": "連到「$1」嘅頁",
        "whatlinkshere-hidelinks": "$1連結",
        "whatlinkshere-hideimages": "$1檔案連結",
        "whatlinkshere-filters": "過濾器",
-       "blockip": "封鎖用戶",
+       "autoblockid": "自動封鎖 #$1",
+       "block": "封鎖用戶",
+       "unblock": "解封用戶",
+       "blockip": "封鎖{{GENDER:$1|用戶}}",
        "blockip-legend": "封鎖用戶",
        "blockiptext": "使用以下嘅表格嚟去阻止指定嘅IP地址或用戶名嘅寫權限。\n僅當僅當為咗避免有版畀人惡意破壞嘅時候先可以使用,而且唔可以違反[[{{MediaWiki:Policy-url}}|政策]]。\n喺下面填寫阻止嘅確切原因(比如:引用咗某啲已經破壞咗嘅頁面)。",
        "ipaddressorusername": "IP地址或用戶名:",
        "ipbexpiry": "期限:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*共用封鎖原因\n** 插入錯嘅資料\n** 響頁面度拎走\n** 亂加入外部連結\n** 響頁度加入冇意義嘅嘢\n** 嚇人/騷擾\n** 濫用多個戶口\n** 唔能夠接受嘅用戶名",
+       "ipb-hardblock": "唔畀簽到用戶用呢個IP位址去改文",
        "ipbcreateaccount": "防止開新戶口",
        "ipbemailban": "防止用戶傳送電郵",
        "ipbenableautoblock": "自動封鎖呢個用戶上次用過嘅IP地址,同埋佢地做過編輯嘅IP地址",
        "ipboptions": "兩個鐘頭:2 hours,一日:1 day,三日:3 days,一個禮拜:1 week,兩個禮拜:2 weeks,一個月:1 month,三個月:3 months,六個月:6 months,一年:1 year,終身:infinite",
        "ipbhidename": "響編輯同名單度隱藏用戶名",
        "ipbwatchuser": "監視呢位用戶嘅用戶頁同埋佢嘅討論頁",
+       "ipb-disableusertalk": "唔畀封鎖緊嘅用戶去改自己個用戶討論頁",
        "ipb-change-block": "用呢啲設定重新封鎖用戶",
+       "ipb-confirm": "確認封鎖",
        "badipaddress": "無效嘅IP地址",
        "blockipsuccesssub": "封鎖成功",
-       "blockipsuccesstext": "[[Special:Contributions/$1|$1]]已經封鎖。<br />\n去[[Special:BlockList|IP封鎖清單]]睇返封鎖名單。",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]]已經封鎖。<br />\n去[[Special:BlockList|封鎖清單]]睇返封鎖。",
+       "ipb-blockingself": "你將會封鎖自己!你肯定要咁做?",
+       "ipb-confirmaction": "如果你肯定要咁做,請剔下低嘅「{{int:ipb-confirm}}」格。",
        "ipb-edit-dropdown": "改封鎖原因",
        "ipb-unblock-addr": "解封$1",
        "ipb-unblock": "解封一個用戶名或IP地址",
        "ipb-blocklist": "去睇現時嘅封鎖",
-       "ipb-blocklist-contribs": "$1嘅貢獻",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}}嘅貢獻",
        "unblockip": "解封用戶",
        "unblockiptext": "使用以下表格恢復之前阻止嘅某個IP地址或者某個用戶名嘅寫權限。",
        "ipusubmit": "拎走呢個封鎖",
        "unblocked": "\"[[User:$1|$1]]\"已經解封",
+       "unblocked-range": "$1 已經解鎖咗。",
        "unblocked-id": "$1嘅封鎖已經拎走咗",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] 已經解鎖咗。",
+       "blocklist": "封鎖用戶",
        "ipblocklist": "封咗嘅用戶",
        "ipblocklist-legend": "搵一位封咗嘅用戶",
+       "blocklist-userblocks": "收埋戶口封鎖",
+       "blocklist-tempblocks": "收埋臨時封鎖",
+       "blocklist-addressblocks": "收埋單一IP封鎖",
+       "blocklist-rangeblocks": "收埋大範圍IP封鎖",
+       "blocklist-timestamp": "時間",
+       "blocklist-target": "目標",
+       "blocklist-expiry": "到期",
+       "blocklist-by": "封鎖管理員",
+       "blocklist-params": "封鎖參數",
+       "blocklist-reason": "原因",
        "ipblocklist-submit": "搵",
        "ipblocklist-localblock": "本地封鎖",
        "ipblocklist-otherblocks": "其他{{PLURAL:$1|封鎖|封鎖}}",
        "unblocklink": "解封",
        "change-blocklink": "改封",
        "contribslink": "貢獻",
-       "autoblocker": "已經自動封鎖,因為你嘅IP地址冇幾耐之前\"[[User:$1|$1]]\"使用過。$1\\嘅封鎖原因係: 「$2」",
+       "emaillink": "送電郵",
+       "autoblocker": "已經自動封鎖咗,因為你嘅IP地址冇幾耐之前畀「[[User:$1|$1]]」用過。\n$1嘅封鎖原因係「$2」",
        "blocklogpage": "封鎖日誌",
        "blocklog-showlog": "呢位用戶已經響之前被封鎖過。響下面提供咗封鎖紀錄以便參考:",
        "blocklog-showsuppresslog": "呢位用戶已經響之前被封鎖同隱藏過。響下面提供咗廢止紀錄以便參考:",
        "blocklogentry": "已封鎖[[$1]],到期時間為$2 $3",
        "reblock-logentry": "已改[[$1]]嘅封鎖設定,到期時間為$2 $3",
-       "blocklogtext": "呢個係封鎖同埋解封動作嘅日誌。自動封鎖IP地址嘅動作冇列出嚟。去[[Special:BlockList|IP封鎖名單]]睇現時生效嘅封鎖名單",
+       "blocklogtext": "呢個係封鎖同埋解封動作嘅日誌。\n自動封鎖IP地址嘅動作冇列出嚟。\n去[[Special:BlockList|封鎖名單]]睇現時生效嘅封鎖名單",
        "unblocklogentry": "已經解封$1",
        "block-log-flags-anononly": "只限匿名用戶",
        "block-log-flags-nocreate": "停用開新戶口",
        "range_block_disabled": "操作員嘅建立範圍封鎖已經停用。",
        "ipb_expiry_invalid": "無效嘅期限。",
        "ipb_expiry_temp": "隱藏用戶名封鎖定一定係要永久性嘅。",
-       "ipb_hide_invalid": "唔能夠壓止呢個戶口;佢可能有太多編輯。",
+       "ipb_hide_invalid": "唔能夠壓止呢個戶口;佢有多過{{PLURAL:$1|一次編輯|$1次編輯}}。",
        "ipb_already_blocked": "\"$1\"已經封鎖咗",
        "ipb-needreblock": "$1已經被封鎖。你係咪想更改呢個設定?",
        "ipb-otherblocks-header": "其他{{PLURAL:$1|封鎖|封鎖}}",
+       "unblock-hideuser": "你唔可以解鎖呢個用戶,因為佢個用戶名收埋咗。",
        "ipb_cant_unblock": "錯誤:搵唔到封鎖ID$1。可能已經解封咗。",
        "ipb_blocked_as_range": "錯誤:個IP $1 無直接封鎖,唔可以解封。但係佢係響 $2 嘅封鎖範圍之內,嗰段範圍係可以解封嘅。",
        "ip_range_invalid": "無效嘅IP範圍",
        "delete_and_move": "刪除並移動",
        "delete_and_move_text": "==需要刪除==\n\n目標頁「[[:$1]]」已經存在。你要唔要刪咗佢空個位出嚟畀個搬文動作?",
        "delete_and_move_confirm": "好,刪咗嗰個頁面",
-       "delete_and_move_reason": "已經刪咗嚟畀位畀個搬文動作",
+       "delete_and_move_reason": "已經刪咗「[[$1]]」嚟畀位畀個搬文動作",
        "selfmove": "原始標題同目的標題一樣;唔可以將個頁面搬返去自己度。",
        "immobile-source-namespace": "唔可以響空間名「$1」度搬版",
        "immobile-target-namespace": "唔可以將版搬到「$1」度",
        "thumbnail_gd-library": "未完成嘅GD設定: 功能唔見咗 $1",
        "thumbnail_image-missing": "檔案似乎唔見咗: $1",
        "import": "倒入頁面",
-       "importinterwiki": "Transwiki 倒入",
+       "importinterwiki": "由其它wiki度倒入",
        "import-interwiki-text": "揀一個 wiki 同埋一頁去倒入。\n修訂日期同編輯者會被保存落嚟。\n所有 transwiki 嘅倒入動作會響[[Special:Log/import|倒入日誌]]度記錄落嚟。",
        "import-interwiki-history": "複製呢一頁所有嘅歷史修訂",
        "import-interwiki-templates": "包含全部嘅模",
        "import-interwiki-namespace": "目的空間名:",
        "import-upload-filename": "檔名:",
        "import-comment": "註解:",
-       "importtext": "請由原 wiki 嘅[[Special:Export|匯出工具]]匯出成檔案。\n儲存喺你個磁碟度,然後再上載到呢度。",
+       "importtext": "請由原 wiki 嘅[[Special:Export|匯出工具]]匯出成檔案。\n儲存喺你部電腦度,然後再上載到呢度。",
        "importstart": "倒入緊...",
        "import-revision-count": "$1次修訂",
        "importnopages": "冇頁面去倒入。",
        "importcantopen": "唔能夠開個倒入檔案",
        "importbadinterwiki": "壞嘅跨 wiki 連結",
        "importsuccess": "已經完成倒入!",
-       "importnosources": "未定義 transwiki 嘅匯入來源,同埋歷史嘅直接上載已經停用。",
+       "importnosources": "未定義匯入來源,同埋歷史嘅直接上載已經停用。",
        "importnofile": "冇上載到任何要倒入嘅檔案。",
        "importuploaderrorsize": "上載要倒入嘅檔案失敗。個檔案大過可以容許嘅上載大細。",
        "importuploaderrorpartial": "上載要倒入嘅檔案失敗。個檔案只係部份上載咗。",
        "importuploaderrortemp": "上載要倒入嘅檔案失敗。個臨時資料夾唔見咗。",
        "import-parse-failure": "XML倒入語法失敗",
        "import-noarticle": "無版去倒入!",
-       "import-nonewrevisions": "全部嘅修訂已經響之前倒入咗。",
+       "import-nonewrevisions": "無修訂倒入(全部嘅修訂已經響之前倒入咗,或者因為出錯而跳咗唔做)。",
        "xml-error-string": "$1 響行$2,欄$3 ($4 bytes): $5",
        "import-upload": "上載XML資料",
        "import-token-mismatch": "小節資料遺失。請再試過。",
        "import-invalid-interwiki": "唔能夠響指定嘅wiki倒入。",
        "importlogpage": "倒入日誌",
        "importlogpagetext": "管理員由其它嘅 wiki 倒入頁面同埋佢哋嘅編輯歷史記錄。",
-       "import-logentry-upload": "由檔案上載倒入咗 [[$1]]",
-       "import-logentry-upload-detail": "$1個修訂",
-       "import-logentry-interwiki": "transwiki咗 $1",
-       "import-logentry-interwiki-detail": "由$2嘅$1個修訂",
+       "import-logentry-upload-detail": "$1個修訂都已經倒入咗",
+       "import-logentry-interwiki-detail": "由$2倒入嘅$1個修訂",
        "tooltip-pt-userpage": "你嘅用戶頁",
        "tooltip-pt-anonuserpage": "你編輯呢個IP嘅對應用戶頁",
        "tooltip-pt-mytalk": "你嘅對話頁",
        "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-protect": "保護呢一頁",
-       "tooltip-ca-unprotect": "唔再保護呢一頁",
+       "tooltip-ca-unprotect": "改呢版保護",
        "tooltip-ca-delete": "刪除呢一頁",
        "tooltip-ca-undelete": "將呢個頁面還原到被刪除之前嘅狀態",
        "tooltip-ca-move": "移動呢一頁",
        "spambot_username": "MediaWiki垃圾清除",
        "spam_reverting": "恢復返去最後一個唔包含指去$1嘅連結嘅嗰個修訂。",
        "spam_blanking": "全部版本都含有指去$1嘅連結,留空",
-       "simpleantispam-label": "反垃圾檢查。\n'''唔好'''加入呢個!",
+       "simpleantispam-label": "反垃圾檢查。\n'''唔好'''填呢個!",
+       "pageinfo-toolboxlink": "頁面資訊",
        "markaspatrolleddiff": "標示為已巡查嘅",
        "markaspatrolledtext": "標示呢版做查咗嘅",
        "markedaspatrolled": "已經標示做已巡查嘅",
        "file-info-size": "$1 × $2 像素,檔案大細:$3 ,MIME類型:$4",
        "file-nohires": "冇更高解像度嘅圖像。",
        "svg-long-desc": "SVG檔案,表面大細: $1 × $2 像素,檔案大細:$3",
-       "show-big-image": "完整解像度",
+       "show-big-image": "原本檔案",
+       "show-big-image-preview": "預覽大細:$1。",
+       "show-big-image-other": "第啲{{PLURAL:$2|解像度}}:$1。",
+       "show-big-image-size": "$1 × $2 像素",
        "file-info-gif-looped": "循環",
        "file-info-gif-frames": "$1格",
        "file-info-png-looped": "循環",
        "exif-colorspace": "色彩空間",
        "exif-componentsconfiguration": "每個部份嘅意思",
        "exif-compressedbitsperpixel": "影像壓縮模式",
-       "exif-pixelydimension": "影像有效闊度",
-       "exif-pixelxdimension": "影像有效高度",
+       "exif-pixelydimension": "影像闊度",
+       "exif-pixelxdimension": "影像高度",
        "exif-usercomment": "用家註腳",
        "exif-relatedsoundfile": "相關聲音檔",
        "exif-datetimeoriginal": "原創日期時間",
        "exif-exposureprogram": "曝光程序",
        "exif-spectralsensitivity": "光譜敏感度",
        "exif-isospeedratings": "ISO 速率",
-       "exif-shutterspeedvalue": "快門速度",
-       "exif-aperturevalue": "光圈",
-       "exif-brightnessvalue": "光度",
+       "exif-shutterspeedvalue": "APEX快門速度",
+       "exif-aperturevalue": "APEX光圈",
+       "exif-brightnessvalue": "APEX光度",
        "exif-exposurebiasvalue": "曝光偏壓",
        "exif-maxaperturevalue": "最大陸地孔徑",
        "exif-subjectdistance": "主體距離",
        "exif-orientation-3": "轉一百八十度",
        "exif-orientation-4": "上下倒轉",
        "exif-orientation-5": "逆時針轉九十度,再上下倒轉",
-       "exif-orientation-6": "é \86æ\99\82é\87\9dè½\89ä¹\9då\8d\81度",
+       "exif-orientation-6": "é\80\86æ\99\82é\87\9dè½\89ä¹\9då\8d\81度",
        "exif-orientation-7": "順時針轉九十度,再上下倒轉",
-       "exif-orientation-8": "é\80\86æ\99\82é\87\9dè½\89ä¹\9då\8d\81度",
+       "exif-orientation-8": "é \86æ\99\82é\87\9dè½\89ä¹\9då\8d\81度",
        "exif-planarconfiguration-1": "chunky 格式",
        "exif-planarconfiguration-2": "planar 格式",
        "exif-componentsconfiguration-0": "根本無",
        "watchlisttools-view": "睇吓有關嘅更改",
        "watchlisttools-edit": "睇吓同埋編輯監視清單",
        "watchlisttools-raw": "編輯原始監視清單",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|傾偈]])",
        "duplicate-defaultsort": "警告: 預設嘅排序鍵 \"$2\" 覆蓋之前嘅預設排序鍵 \"$1\"。",
        "version": "版本",
        "version-extensions": "裝咗嘅擴展",
-       "version-skins": "畫面",
+       "version-skins": "裝咗嘅畫面",
        "version-specialpages": "特別頁",
        "version-parserhooks": "語法鈎",
        "version-variables": "變數",
        "version-parser-function-hooks": "語法函數鈎",
        "version-hook-name": "鈎名",
        "version-hook-subscribedby": "利用於",
-       "version-version": "(版本 $1)",
-       "version-license": "牌照",
+       "version-version": "($1)",
+       "version-license": "MediaWiki牌照",
        "version-poweredby-credits": "呢個 Wiki 係由 '''[https://www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
        "version-poweredby-others": "其他",
        "version-license-info": "MediaWiki係自由軟件;你可以根據Free Software Foundation所發表嘅GNU General Public License條款規定,就本程式再發佈同/或修改;無論你根據嘅係呢個牌照嘅第二版或(任你揀)任一日之後發行嘅版本。\n\nMediaWiki是基於使用目的而加以發佈,但係就唔會負上任何嘅責任;亦都唔會對適售性或都係特定目的適用性嘅默示性擔保。詳情請目睇GNU General Public License。\n\n你應該已經收到跟往呢個程式嘅[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License嘅副本];如果冇嘅話,請寫信到至Free Software Foundation, Inc.:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或[//www.gnu.org/licenses/old-licenses/gpl-2.0.html 上網睇]。",
        "fileduplicatesearch-result-n": "個檔案 \"$1\" 有$2項完全相同嘅重覆。",
        "fileduplicatesearch-noresults": "檔案名\"$1\"找不到",
        "specialpages": "特別頁",
-       "specialpages-note": "* 標準特別頁。\n* <strong class=\"mw-specialpagerestricted\">有限制嘅特別頁。</strong>",
+       "specialpages-note": "* 標準特別頁。\n* <span class=\"mw-specialpagerestricted\">有限制嘅特別頁。</span>",
        "specialpages-group-maintenance": "維護報告",
        "specialpages-group-other": "其它特別頁",
-       "specialpages-group-login": "ç\99»å\85¥ï¼\8fé\96\8b戶口",
+       "specialpages-group-login": "ç°½å\88°ï¼\8fé\96\8bæ\96°戶口",
        "specialpages-group-changes": "最近更改同日誌",
        "specialpages-group-media": "媒體報告同上載",
        "specialpages-group-users": "用戶同權限",
        "specialpages-group-highuse": "高度使用頁",
        "specialpages-group-pages": "頁面一覽",
        "specialpages-group-pagetools": "版工具",
-       "specialpages-group-wiki": "Wiki資料同工具",
+       "specialpages-group-wiki": "資料同工具",
        "specialpages-group-redirects": "跳轉特別頁",
        "specialpages-group-spam": "反垃圾工具",
        "specialpages-group-developer": "開發者工具",
        "tags": "有效更改過嘅標籤",
        "tag-filter": "[[Special:Tags|標籤]]過濾器:",
        "tag-filter-submit": "過濾器",
+       "tag-list-wrapper": "([[Special:Tags|$1個標籤]]:$2)",
        "tags-title": "標籤",
        "tags-intro": "呢一版列示咗個軟件標示嘅編輯,同埋佢哋嘅解釋。",
        "tags-tag": "標籤名",
        "compare-submit": "比較",
        "dberr-problems": "對唔住!呢一版出現咗一啲技術性問題。",
        "dberr-again": "試吓等多幾分種然後開試。",
-       "dberr-info": "(唔能夠連繫個資料伺服器: $1)",
+       "dberr-info": "(唔能夠連繫個資料庫:$1)",
        "dberr-usegoogle": "響現階段你可以用 Google 去搵嘢。",
        "dberr-outofdate": "留意佢哋索引嘅內容可能會過時。",
        "dberr-cachederror": "呢個係所要求版嘅快取複本,可能會過時。",
        "htmlform-selectorother-other": "其他",
        "sqlite-has-fts": "$1 有全文搜尋支援",
        "sqlite-no-fts": "$1 冇全文搜尋支援",
+       "logentry-delete-delete": "$1 刪咗頁 $3",
        "revdelete-restricted": "已經應用限制到操作員",
        "revdelete-unrestricted": "已經拎走對於操作員嘅限制",
+       "logentry-move-move": "$1 {{GENDER:$2|搬咗}}頁面 $3 去到 $4",
+       "logentry-newusers-create": "戶口$1經已{{GENDER:$2|開咗}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|上傳咗}} $3",
        "rightsnone": "(冇)",
        "revdelete-summary": "編輯摘要",
        "searchsuggest-search": "搵嘢",
        "searchsuggest-containing": "名單傳送緊...",
        "duration-hours": "$1{{PLURAL:$1|個鐘}}",
        "expandtemplates": "展開模",
-       "expand_templates_intro": "呢個特別頁係用於將一啲文字中嘅模展開,包括響個模度引用嘅模。同時亦都展開解譯器函數好似<nowiki>{{</nowiki>#language:...}},以及一啲變數好似<nowiki>{{</nowiki>CURRENTDAY}}&mdash;實際上,幾乎所有響雙括弧中嘅內容都會被展開。呢個特別頁係通過使用MediaWiki嘅相關解釋階段嘅功能完成嘅。",
+       "expand_templates_intro": "呢個特別頁係用於將一啲文字中嘅模展開,包括響個模度引用嘅模。\n同時亦都展開解譯器函數好似\n<code><nowiki>{{</nowiki>#language:...}}</code>,同埋一啲變數好似\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,幾乎所有響雙括弧中嘅內容都會被展開。",
        "expand_templates_title": "內容標題,用於 {{FULLPAGENAME}} 等頁面:",
        "expand_templates_input": "輸入文字:",
        "expand_templates_output": "結果:",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "拎走注釋",
        "expand_templates_generate_xml": "顯示XML語法樹",
-       "expand_templates_preview": "預覽"
+       "expand_templates_preview": "預覽",
+       "special-characters-group-latin": "拉丁文",
+       "special-characters-group-latinextended": "Latin擴展左",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "符號",
+       "special-characters-group-greek": "希臘文",
+       "special-characters-group-cyrillic": "西里爾文",
+       "special-characters-group-arabic": "阿拉伯文",
+       "special-characters-group-hebrew": "希伯來文",
+       "special-characters-group-bangla": "Bangla\nBangla",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati"
 }
index 42d4ba1..285afdf 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "NJ",
                        "Ooswesthoesbes",
-                       "아라"
+                       "아라",
+                       "Robin0van0der0vliet"
                ]
        },
        "tog-underline": "Lienks onderstreepn:",
        "cancel": "Afbreke",
        "moredotdotdot": "Meêr …",
        "mypage": "Mien gebrukerspagina",
-       "mytalk": "Mien overleg",
+       "mytalk": "Overleg",
        "anontalk": "Discussie vò dit IP-adres",
        "navigation": "Navigaotie",
        "and": "&#32;en",
        "titleprotected": "'t Anmaeken van deêze pagina is beveiligd deur [[User:$1|$1]].\nDe heheven reeën is ''$2''.",
        "logouttext": "'''Je bin noe ofemeld.'''\n\nJe kan {{SITENAME}} noe anoniem gebruken of wee anmelden as dezelven of een aore gebruker.\nMeuhlijk worn nog een antal pagina's weereheven asof a je anemeld bin totda je de cache van je browser leeg.",
        "yourname": "Gebrukersnaem",
+       "userlogin-yourname": "Gebrukersnaem",
        "yourpassword": "Wachtwoôrd",
+       "userlogin-yourpassword": "Wachtwoôrd",
        "yourpasswordagain": "Heef je wachtwoôrd opnieuw in:",
        "remembermypassword": "Anmeldhehevens ontouwen (maximaal $1 {{PLURAL:$1|dag|daege}})",
        "yourdomainname": "Je domein:",
        "createaccount-title": "Gebrukers anmaeken voe {{SITENAME}}",
        "createaccount-text": "Iemand ei een gebruker op {{SITENAME}} ($4) anemikt mie de naem \"$2\" en joen e-mailadres. 't Wachtwoôrd voe \"$2\" is \"$3\". Mel jen eihen an en wiezig je wachtwoôrd.\n\nNeheer dit bericht as deêze gebruker zonder joe medeweten is anemikt.",
        "loginlanguagelabel": "Taele: $1",
+       "pt-login": "Anmelden",
+       "pt-login-button": "Anmelden",
+       "pt-userlogout": "Ofmelden",
        "changepassword": "Wachtwoôrd wiezigen",
        "resetpass_announce": "Je bin anemeld mie een tiedelijke code die a je per e-mail is toe-ezon'n. Voer een nieuw wachtwoôrd in om 't anmelden te voltooien:",
        "resetpass_header": "Wachtwoôrd herinstell'n",
        "search-external": "Extern zoeken",
        "searchdisabled": "Zoeken in {{SITENAME}} is nie meuhlijk.\nJe kan gebruuk maeken van Google.\nDe hehevens over {{SITENAME}} zien meuhlijk nie bie'ewerkt.",
        "preferences": "Vòkeuren",
-       "mypreferences": "Mien vòkeuren",
+       "mypreferences": "Vòkeuren",
        "prefs-edits": "Antal bewerkiengen:",
        "prefs-skin": "Vurmhevieng",
        "skin-preview": "Voevertoônienge",
        "watchthisupload": "Volg deêze bladzie",
        "license": "Licentie:",
        "license-header": "Licentie",
+       "imgfile": "bestand",
        "file-anchor-link": "Bestand",
        "filehist": "Bestandsgeschiedenisse",
        "filehist-help": "Klik op 'n datum/tied om 't bestand te zien zoas 't van d'r tied woas.",
        "emailuser": "E-mail deêze gebruker",
        "emailpage": "E-mail gebruker",
        "watchlist": "Volglieste",
-       "mywatchlist": "Mien volglieste",
+       "mywatchlist": "Volglieste",
        "watchlistfor2": "Vò $1 $2",
        "watchnologin": "Je bin nie angemolde.",
        "addedwatchtext": "De bladzie \"[[:$1]]\" is an je [[Special:Watchlist|Volglieste]] toegevoegd.\nVeranderiengen an deêze bladzie en de overlegbladzie die-a d'rbie oort zulle ierop zichtbaer ore\nen de bladzie komt '''vet''' te staen in de [[Special:RecentChanges|lieste van wat-a juust veranderd is]], daermee 't makkeliker te vinden is.\nA je de bladzie laeter weêr van je volglieste afaele wil, klik dan op \"nie meêr volge\" bovenan de bladzie.",
        "blanknamespace": "(Artikels)",
        "contributions": "Biedraegen gebruker",
        "contributions-title": "Biedraen van $1",
-       "mycontris": "Mien biedraegen",
+       "mycontris": "Biedraegen",
        "contribsub2": "Vò $1 ($2)",
        "uctop": "(laetste wiezigieng)",
        "month": "Von maend (en eêder):",
        "file-nohires": "Hin 'oôgere resolutie beschikbaer",
        "svg-long-desc": "SVG-bestand, nominaal $1 × $2 pixels, bestandshroôtte: $3",
        "show-big-image": "Volledige resolutie",
+       "show-big-image-size": "$1 × $2 pixels",
        "bad_image_list": "De opmaek is as vogt:\n\nAlleên regels in 'n lieste (regels die beginn'n mè *) worr'n verwarkt.\nDe eêste verwiezienge op 'n regel moe 'n verwiezienge zin nir 'n ongewenst bestand.\nAolle voggende verwieziengen die op dezelfde regel staen, worr'n behandeld as uutzonderienge, zoas bievòbild pagina's wirop 't bestand in de tekst is opgenaem'n.",
        "metadata": "Metadata",
        "metadata-help": "Dit bestand bevat anvullende informaotie, die deur 'n fotocaomera, scanner of fotobewarkiengsprogramma toegevoegd kan zien. As 't bestand angepast is, kommen details mogelijk nie overeên mei 't gewiezigde bestand.",
        "revdelete-restricted": "ei beperkiengen an beheêrders opeleid",
        "revdelete-unrestricted": "ei beperkiengen voe beheêrders opeheven",
        "rightsnone": "(hin)",
-       "revdelete-summary": "saemenvattieng bewerken"
+       "revdelete-summary": "saemenvattieng bewerken",
+       "searchsuggest-search": "Zoek"
 }
index 9b1f21e..846c6ff 100644 (file)
@@ -80,7 +80,9 @@
                        "Duolaimi",
                        "TianyinLee",
                        "NigelSoft",
-                       "Zhuyifei1999"
+                       "Zhuyifei1999",
+                       "Davidzdh",
+                       "LNDDYL"
                ]
        },
        "tog-underline": "链接下划线:",
        "disclaimers": "免责声明",
        "disclaimerpage": "Project:免责声明",
        "edithelp": "编辑帮助",
+       "helppage-top-gethelp": "帮助",
        "mainpage": "首页",
        "mainpage-description": "首页",
        "policy-url": "Project:方针",
        "readonly_lag": "附属数据库服务器正在将缓存更新到主服务器上,数据库已被自动锁定",
        "internalerror": "内部错误",
        "internalerror_info": "内部错误:$1",
+       "internalerror-fatal-exception": "类型“$1”的致命错误",
        "filecopyerror": "无法将文件“$1”复制到“$2”。",
        "filerenameerror": "无法将文件“$1”重命名为“$2”。",
        "filedeleteerror": "无法删除文件“$1”。",
        "wrongpassword": "您输入的密码错误。请重试。",
        "wrongpasswordempty": "密码输入为空。请重试。",
        "passwordtooshort": "您的密码至少需要$1个字符。",
+       "passwordtoolong": "密码不能超过{{PLURAL:$1|$1个字符}}。",
        "password-name-match": "您的密码必须和您的用户名不相同。",
        "password-login-forbidden": "这个用户名称及密码的使用是被禁止的。",
        "mailmypassword": "重置密码",
        "showpreview": "显示预览",
        "showdiff": "显示更改",
        "blankarticle": "<strong>警告</strong>:您创建的页面是空白的。如果您再次点击“{{int:savearticle}}”,您将真的创建没有任何内容的页面。",
-       "anoneditwarning": "<strong>警告:</strong>您没有登录。您做出任何编辑后您的IP地址会公开可见。如果您<strong>[$1 登陆]</strong>或<strong>[$2 注册]</strong>一个账户,您的编辑将归属于您的用户名,以及有其他好处。",
+       "anoneditwarning": "<strong>警告:</strong>您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您<strong>[$1 登陆]</strong>或<strong>[$2 创建]</strong>一个账户,您的编辑将归属于您的用户名,且将享受其他好处。",
        "anonpreviewwarning": "<em>你没有登录。保存会记录你的IP地址于该页面的编辑历史中。</em>",
        "missingsummary": "'''提示:'''你没有提供编辑摘要。如果你再次点击“{{int:savearticle}}”,你的编辑将不带编辑摘要保存。",
        "selfredirect": "<strong>警告:</strong>您正在将此页面重定向至它自己。\n您可能指定了错误的重定向目标,或者您正在编辑错误的页面。\n如果您再次点击“{{int:savearticle}}”,重定向将无论如何被创建。",
        "missingcommentheader": "'''提示:''' 您还没有为此评论提供一个标题。如果您再次点击“{{int:savearticle}}”,您的编辑将不带标题保存。",
        "summary-preview": "摘要预览:",
        "subject-preview": "标题预览:",
+       "previewerrortext": "尝试预览您的更改时发生未知错误。",
        "blockedtitle": "用户被封禁",
        "blockedtext": "<strong>你的用户名或IP地址已被封禁。</strong>\n\n执行封禁的管理员是$1。封禁原因是<em>$2</em>。\n\n* 开始时间:$8\n* 到期时间:$6\n* 目标用户:$7\n\n你可以联系$1或其他[[{{MediaWiki:Grouppage-sysop}}|管理员]]讨论该封禁。只有当你在[[Special:Preferences|系统设置]]确认了电子邮件地址且未被禁止使用“电邮联系”功能时,才可以使用它。你当前的IP地址是$3,该封禁ID是#$5。请在你的询问中包含上面的所有信息。",
        "autoblockedtext": "您的IP地址因曾被一位被$1封禁的用户使用而被自动封禁。封禁原因:\n\n:<em>$2</em>\n\n* 开始时间:$8\n* 到期时间:$6\n* 目标用户:$7\n\n您可以联系$1或其他[[{{MediaWiki:Grouppage-sysop}}|管理员]]申诉该封禁。\n\n请注意,只有当您已在[[Special:Preferences|系统设置]]确认了电子邮件地址且未被禁止使用“电邮联系”功能时,才能发送电子邮件联系管理员。\n\n您当前的IP地址为$3,该封禁ID为#$5。\n请您在申诉内容中说明以上所有信息。",
        "userpage-userdoesnotexist-view": "用户账户“$1”没有被注册。",
        "blocked-notice-logextract": "这位用户目前已被封禁。以下提供最近的封禁日志以供参考:",
        "clearyourcache": "'''注意:'''在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。\n* '''Firefox/Safari:'''按住“Shift”的同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)\n* '''Google Chrome:'''按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)\n* '''Internet Explorer:'''按住“Ctrl”的同时单击“刷新”,或按“Ctrl-F5”\n* '''Opera:'''在“工具→首选项”中清除缓存",
-       "usercssyoucanpreview": "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 CSS 。",
-       "userjsyoucanpreview": "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 JavaScript 。",
+       "usercssyoucanpreview": "<strong>提示:</strong>在保存前请用“{{int:showpreview}}”按钮来测试您新的 CSS 。",
+       "userjsyoucanpreview": "<strong>提示:</strong>在保存前请用“{{int:showpreview}}”按钮来测试您新的 JavaScript 。",
        "usercsspreview": "'''请记住你现在只是在预览你的用户CSS。它尚未保存!'''",
        "userjspreview": "'''请记住你现在只是在测试/预览你的用户JavaScript。它尚未保存!'''",
        "sitecsspreview": "'''请记住你现在只是在预览该CSS。它尚未保存!'''",
        "previewconflict": "该预览反映了上面文字编辑区中的文字在你保存后的显示状况。",
        "session_fail_preview": "'''对不起!由于会话数据丢失,我们无法处理你的编辑。'''请重试。如果仍然失败,请尝试[[Special:UserLogout|退出登录]]后重新登录。",
        "session_fail_preview_html": "'''对不起!由于会话数据丢失,我们无法处理你的编辑。'''\n\n''因为{{SITENAME}}已启用原始HTML,为了预防JavaScript攻击,预览被隐藏。''\n\n'''如果该编辑尝试合法,请重试。'''如果仍然失败,请尝试[[Special:UserLogout|退出登录]]后重新登录。",
-       "token_suffix_mismatch": "'''由于您用户端中的编辑令牌毁损了一些标点符号字元,您的编辑已经被拒绝。'''\n此次编辑被拒绝以防止页面文本损坏。\n这种情况通常在您使用含有故障的网页式匿名代理服务的时候出现。",
+       "token_suffix_mismatch": "<strong>由于您客户端中的编辑令牌毁损了一些标点符号字符,您的编辑已经被拒绝。</strong>\n此次编辑被拒绝以防止页面文本损坏。\n这种情况通常在您使用含有故障的网页式匿名代理服务的时候出现。",
        "edit_form_incomplete": "'''编辑表格的某些部分没有到达服务器,请检查你的编辑是否完整并重试。'''",
        "editing": "编辑“$1”",
        "creating": "创建“$1”",
        "viewpagelogs": "查看该页面的日志",
        "nohistory": "本页面没有编辑历史记录。",
        "currentrev": "最后版本",
-       "currentrev-asof": "$1的最版本",
+       "currentrev-asof": "$1的最版本",
        "revisionasof": "$1的版本",
        "revision-info": "{{GENDER:$6|$2}}$1的版本$7",
        "previousrevision": "←上一版本",
        "notextmatches": "没有页面内容匹配",
        "prevn": "前$1个",
        "nextn": "后$1个",
+       "prev-page": "上一页",
+       "next-page": "下一页",
        "prevn-title": "前$1个结果",
        "nextn-title": "后$1个结果",
        "shown-title": "每页显示$1项结果",
        "recentchanges-label-plusminus": "该页面字节数的前后变化",
        "recentchanges-legend-heading": "'''说明:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}(见[[Special:NewPages|新页面列表]])",
-       "recentchanges-legend-plusminus": "(''±123'')",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "下面{{PLURAL:$5|是}}<strong>$3 $4</strong>之后的更改(最多显示<strong>$1</strong>个)。",
        "rclistfrom": "显示$3 $2之后的新更改",
        "rcshowhideminor": "$1小编辑",
        "number_of_watching_users_pageview": "[$1个关注用户]",
        "rc_categories": "分类限制(用“|”分隔)",
        "rc_categories_any": "任意",
-       "rc-change-size-new": "更改后$1字节",
+       "rc-change-size-new": "更改后$1字节",
        "newsectionsummary": "/* $1 */ 新段落",
        "rc-enhanced-expand": "显示细节",
        "rc-enhanced-hide": "隐藏细节",
        "recentchangeslinked-feed": "相关更改",
        "recentchangeslinked-toolbox": "相关更改",
        "recentchangeslinked-title": "与“$1”有关的更改",
-       "recentchangeslinked-summary": "这是链接自指定页面(或至指定分类的成员)的页面的最近更改的列表。[[Special:Watchlist|你的监视列表]]中的页面以'''粗体'''显示。",
+       "recentchangeslinked-summary": "这是链接自指定页面(或至指定分类的成员)的页面的最近更改的列表。[[Special:Watchlist|你的监视列表]]中的页面以<strong>粗体</strong>显示。",
        "recentchangeslinked-page": "页面名称:",
        "recentchangeslinked-to": "显示链到所给出的页面",
        "upload": "上传文件",
        "unusedimages": "未使用文件",
        "wantedcategories": "需要的分类",
        "wantedpages": "需要的页面",
+       "wantedpages-summary": "被链接最多次的不存在页面的列表,除了只链接到这些页面的重定向页面。关于链接到不存在页面的重定向页面列表,参见[[{{#special:BrokenRedirects}}]]。",
        "wantedpages-badtitle": "在结果组上的无效标题:$1",
        "wantedfiles": "需要的文件",
        "wantedfiletext-cat": "以下文件被使用,但并不存在。来自外部库的文件即使存在也可能被列出。任何这类误报会用<del>删除线</del>标记。另外,插入不存在的文件的页面列于[[:$1]]。",
        "listusers-editsonly": "只显示有编辑的用户",
        "listusers-creationsort": "按创建日期排序",
        "listusers-desc": "降序排序",
-       "usereditcount": "$1个{{PLURAL:$1|编辑}}",
+       "usereditcount": "$1次编辑",
        "usercreated": "{{GENDER:$3|创建}}于$1 $2",
        "newpages": "新页面",
        "newpages-username": "用户名:",
        "emailccsubject": "您发送给$1的消息的副本:$2",
        "emailsent": "电子邮件已发送",
        "emailsenttext": "您的电子邮件已经发出。",
-       "emailuserfooter": "本电子邮件是通过{{SITENAME}}的“电邮联系”功能被$1发送至$2的。",
-       "usermessage-summary": "留下系统息。",
+       "emailuserfooter": "本电子邮件是通过{{SITENAME}}的“{{int:emailpage}}”功能被$1发送至$2的。",
+       "usermessage-summary": "留下系统息。",
        "usermessage-editor": "系统信息编辑器",
        "watchlist": "监视列表",
        "mywatchlist": "监视列表",
        "sp-contributions-newbies-sub": "新账户的贡献",
        "sp-contributions-newbies-title": "新账户的用户贡献",
        "sp-contributions-blocklog": "封禁日志",
-       "sp-contributions-suppresslog": "被压制的用户贡献",
+       "sp-contributions-suppresslog": "被隐藏的用户贡献",
        "sp-contributions-deleted": "被删除的用户贡献",
        "sp-contributions-uploads": "上传",
        "sp-contributions-logs": "日志",
        "whatlinkshere": "链入页面",
        "whatlinkshere-title": "链接至“$1”的页面",
        "whatlinkshere-page": "页面:",
-       "linkshere": "以下页面链接至'''[[:$1]]''':",
+       "linkshere": "以下页面链接至<strong>[[:$1]]</strong>:",
        "nolinkshere": "没有页面链接至'''[[:$1]]'''。",
        "nolinkshere-ns": "在所选的名字空间内没有页面链接到'''[[:$1]]'''。",
        "isredirect": "重定向页面",
        "thumbnail_image-missing": "文件可能丢失:$1",
        "thumbnail_image-failure-limit": "近期尝试生成此缩略图失败太多次($1次或更多)。请稍后再试。",
        "import": "导入页面",
-       "importinterwiki": "wiki导入",
-       "import-interwiki-text": "选择要导入的wiki和页面标题,导入版本的日期和编辑者名称会被保存。所有的跨wiki导入操作都将记录到[[Special:Log/import|导入日志]]。",
+       "importinterwiki": "从其他wiki导入",
+       "import-interwiki-text": "选择要导入的wiki和页面标题,导入版本的日期和编辑者名称会被保存。所有从其他wiki的导入都记录在[[Special:Log/import|导入日志]]中。",
        "import-interwiki-sourcewiki": "来源wiki:",
        "import-interwiki-sourcepage": "来源页面:",
        "import-interwiki-history": "复制此页的所有历史版本",
        "importcantopen": "无法打开导入文件",
        "importbadinterwiki": "无效的跨wiki链接",
        "importsuccess": "导入完成!",
-       "importnosources": "跨Wiki导入源没有定义,同时不允许直接的历史上传。",
+       "importnosources": "没有定义导入的来源wiki,且直接的历史上传被禁用。",
        "importnofile": "没有上传导入文件。",
        "importuploaderrorsize": "上传导入文件失败。文件大于可以允许的上传大小。",
        "importuploaderrorpartial": "上传导入文件失败。文件只有部份已经上传。",
        "import-rootpage-nosubpage": "名字空间为“$1”的根页面不允许子页面。",
        "importlogpage": "导入日志",
        "importlogpagetext": "管理性导入在其他wiki上有编辑历史的页面。",
-       "import-logentry-upload": "通过文件上传导入[[$1]]",
        "import-logentry-upload-detail": "导入$1个{{PLURAL:$1|版本}}",
-       "import-logentry-interwiki": "跨wiki导入页面$1",
        "import-logentry-interwiki-detail": "来自$2的$1个{{PLURAL:$1|版本}}已导入",
        "javascripttest": "JavaScript测试",
        "javascripttest-pagetext-noframework": "本页面被保留进行JavaScript测试。",
        "tooltip-pt-preferences": "你的设置",
        "tooltip-pt-watchlist": "你正在监视更改的页面的列表",
        "tooltip-pt-mycontris": "你的贡献的列表",
-       "tooltip-pt-login": "æ\88\91们é¼\93å\8a±æ\82¨ç\99»å½\95ï¼\8cä¸\8dè¿\87è¿\99ä¸\8dæ\98¯å¼ºå\88的",
+       "tooltip-pt-login": "æ\88\91们é¼\93å\8a±æ\82¨ç\99»å½\95ï¼\9bç\84¶è\80\8cï¼\8cè¿\99ä¸\8dæ\98¯å¼ºå\88¶æ\80§的",
        "tooltip-pt-logout": "退出登录",
-       "tooltip-pt-createaccount": "我们鼓励您创建一个账户并登录;然而这不是强制的",
+       "tooltip-pt-createaccount": "建议您创建一个账户并登录,但这不是强制的",
        "tooltip-ca-talk": "关于内容页面的讨论",
        "tooltip-ca-edit": "你可以编辑本页面。请在保存前使用预览按钮",
        "tooltip-ca-addsection": "开始新段落",
        "tooltip-ca-delete": "删除本页",
        "tooltip-ca-undelete": "将这个页面恢复到被删除以前的状态",
        "tooltip-ca-move": "移动本页",
-       "tooltip-ca-watch": "添加本页面至您的监视列表",
+       "tooltip-ca-watch": "将本页面添加至您的监视列表",
        "tooltip-ca-unwatch": "从你的监视列表删除本页面",
        "tooltip-search": "搜索{{SITENAME}}",
-       "tooltip-search-go": "如果相同的标题存在的话便直接前往该页面",
+       "tooltip-search-go": "若相同标题存在,则直接前往该页面",
        "tooltip-search-fulltext": "搜索含这些文字的页面",
        "tooltip-p-logo": "访问首页",
        "tooltip-n-mainpage": "访问首页",
        "tooltip-n-mainpage-description": "访问首页",
-       "tooltip-n-portal": "关于本项目,你可以做什么,在哪里找到你需要的事物",
+       "tooltip-n-portal": "关于本项目,你可做的事,何处找到你所需",
        "tooltip-n-currentevents": "查看当前事件的背景信息",
        "tooltip-n-recentchanges": "本wiki最近更改的列表",
        "tooltip-n-randompage": "载入一个随机页面",
        "tooltip-ca-nstab-special": "这是特殊页面,你无法编辑该页",
        "tooltip-ca-nstab-project": "查看项目页面",
        "tooltip-ca-nstab-image": "查看文件页面",
-       "tooltip-ca-nstab-mediawiki": "查看系统息",
+       "tooltip-ca-nstab-mediawiki": "查看系统息",
        "tooltip-ca-nstab-template": "查看模板",
        "tooltip-ca-nstab-help": "查看帮助页面",
        "tooltip-ca-nstab-category": "查看分类页面",
        "tooltip-watchlistedit-raw-submit": "更新监视列表",
        "tooltip-recreate": "重建该页面,无论是否被删除。",
        "tooltip-upload": "开始上传",
-       "tooltip-rollback": "单击“回退”恢复最后贡献者对该页面的编辑",
+       "tooltip-rollback": "单击“回退”恢复最后一位贡献者对该页面的编辑",
        "tooltip-undo": "“撤销”可以恢复该编辑并在预览模式下打开编辑表单。它允许在摘要中加入原因。",
        "tooltip-preferences-save": "保存系统设置",
        "tooltip-summary": "请输入简短的摘要",
        "spam_reverting": "恢复至不包含$1的链接的最后版本",
        "spam_blanking": "消隐所有包含链接至$1的版本",
        "spam_deleting": "正在删除所有包含至$1的版本",
-       "simpleantispam-label": "反垃圾检查。\n'''不要'''加入这个!",
+       "simpleantispam-label": "反垃圾检查。\n<strong>不要</strong>加入这个!",
        "pageinfo-title": "“$1”的信息",
        "pageinfo-not-current": "对不起,我们无法提供旧版本的该信息。",
        "pageinfo-header-basic": "基本信息",
        "version-parser-function-hooks": "解析器函数钩",
        "version-hook-name": "钩名",
        "version-hook-subscribedby": "署名",
-       "version-version": "(版本 $1)",
+       "version-version": "($1)",
        "version-no-ext-name": "[无名称]",
        "version-license": "MediaWiki协议",
        "version-ext-license": "许可协议",
        "htmlform-cloner-required": "至少一个值是必需的。",
        "sqlite-has-fts": "带全文搜索的版本$1",
        "sqlite-no-fts": "不带全文搜索的版本$1",
-       "logentry-delete-delete": "$1删除页面$3",
+       "logentry-delete-delete": "$1{{GENDER:$2|删除}}页面$3",
        "logentry-delete-restore": "$1{{GENDER:$2|还原}}页面$3",
        "logentry-delete-event": "$1{{GENDER:$2|更改}}$3的{{PLURAL:$5|$5个日志事件}}的可见性:$4",
        "logentry-delete-revision": "$1{{GENDER:$2|更改}}页面$3的{{PLURAL:$5|$5个版本}}的可见性:$4",
        "revdelete-uname-unhid": "公开用户名",
        "revdelete-restricted": "应用对管理员的限制",
        "revdelete-unrestricted": "删除对管理员的限制",
+       "logentry-block-block": "$1{{GENDER:$2|封禁了}}{{GENDER:$4|$3}},持续时间$5 $6",
+       "logentry-block-unblock": "$1{{GENDER:$2|解封了}}{{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1将{{GENDER:$4|$3}}的封禁设置{{GENDER:$2|更改为}}持续时间$5 $6",
+       "logentry-suppress-block": "$1{{GENDER:$2|封禁了}}{{GENDER:$4|$3}},持续时间$5 $6",
+       "logentry-suppress-reblock": "$1将{{GENDER:$4|$3}}的封禁设置{{GENDER:$2|更改为}}持续时间$5 $6",
+       "logentry-import-upload": "$1通过上传{{GENDER:$2|导入}}了$3",
+       "logentry-import-interwiki": "$1从其他wiki{{GENDER:$2|导入}}了$3",
        "logentry-merge-merge": "$1将$3{{GENDER:$2|合并}}至$4(修订版本至$5)",
        "logentry-move-move": "$1{{GENDER:$2|移动}}页面$3至$4",
        "logentry-move-move-noredirect": "$1{{GENDER:$2|移动}}页面$3至$4,不留重定向",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|停用了}}“$4”标签供用户和机器人使用",
        "rightsnone": "(无)",
        "revdelete-summary": "编辑摘要",
+       "feedback-adding": "正在添加反馈至页面...",
+       "feedback-back": "返回",
+       "feedback-bugcheck": "请检查本bug是否为[$1 已知bug]。",
+       "feedback-bugnew": "我检查了。报告新bug",
        "feedback-bugornote": "如果你准备好详细描述一个技术问题,请[$1 报告bug]。或者你可以使用下面的简单表格。你的评论将被添加至页面“[$3 $2]”,附有你的用户名。",
-       "feedback-subject": "主题:",
-       "feedback-message": "信息:",
        "feedback-cancel": "取消",
-       "feedback-submit": "提交反馈",
-       "feedback-adding": "正在添加反馈至页面...",
+       "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没有响应",
+       "feedback-error4": "错误:无法发布至指定的反馈标题",
+       "feedback-message": "信息:",
+       "feedback-subject": "主题:",
+       "feedback-submit": "提交",
+       "feedback-terms": "我理解我的用户代理信息包括有关我确切使用的浏览器和操作系统版本,并将在我的反馈旁公开分享。",
+       "feedback-termsofuse": "我同意依照使用条款提供反馈。",
        "feedback-thanks": "谢谢!你的反馈已发布至页面“[$2 $1]”。",
-       "feedback-close": "完成",
-       "feedback-bugcheck": "请检查本bug是否为[$1 已知bug]。",
-       "feedback-bugnew": "我检查了。报告新bug",
+       "feedback-thanks-title": "谢谢您!",
+       "feedback-useragent": "用户代理:",
        "searchsuggest-search": "搜索",
        "searchsuggest-containing": "含有...",
        "api-error-badaccess-groups": "您没有将文件上传到此 wiki 的权限。",
        "json-error-utf8": "不正确的UTF-8字符,可能是错误编码",
        "json-error-recursion": "要编码的数值中一个或更多递归引用",
        "json-error-inf-or-nan": "要编码的数值中一个或更多NAN或INF值",
-       "json-error-unsupported-type": "给出了不能编码的类型的值"
+       "json-error-unsupported-type": "给出了不能编码的类型的值",
+       "headline-anchor-title": "该段落的链接",
+       "special-characters-group-latin": "拉丁字母",
+       "special-characters-group-latinextended": "扩展拉丁字母",
+       "special-characters-group-ipa": "国际音标",
+       "special-characters-group-symbols": "符号",
+       "special-characters-group-greek": "希腊字母",
+       "special-characters-group-cyrillic": "西里尔字母",
+       "special-characters-group-arabic": "阿拉伯字母",
+       "special-characters-group-arabicextended": "扩展阿拉伯字母",
+       "special-characters-group-persian": "波斯语字母",
+       "special-characters-group-hebrew": "希伯来字母",
+       "special-characters-group-bangla": "孟加拉字母",
+       "special-characters-group-tamil": "泰米尔数字和符号",
+       "special-characters-group-telugu": "泰卢固字母",
+       "special-characters-group-sinhala": "僧伽罗语",
+       "special-characters-group-gujarati": "古吉拉特语",
+       "special-characters-group-devanagari": "梵文",
+       "special-characters-group-thai": "泰语",
+       "special-characters-group-lao": "老挝语",
+       "special-characters-group-khmer": "高棉语字母",
+       "special-characters-title-endash": "短划线",
+       "special-characters-title-emdash": "长划线",
+       "special-characters-title-minus": "减号"
 }
index cf8bd43..4b756d3 100644 (file)
@@ -59,7 +59,8 @@
                        "Cathypilot0117",
                        "NigelSoft",
                        "EagerLin",
-                       "Cbliu"
+                       "Cbliu",
+                       "Citizen01"
                ]
        },
        "tog-underline": "底線標示連結:",
@@ -67,7 +68,7 @@
        "tog-hidepatrolled": "隱藏近期變更中巡查過的編輯",
        "tog-newpageshidepatrolled": "隱藏新頁面清單中巡查過的頁面",
        "tog-extendwatchlist": "展開監視清單顯示包含最近以外的所有變更",
-       "tog-usenewrc": "依近期變更與監視清單頁面分類顯示變更",
+       "tog-usenewrc": "依近期變更與監視清單頁面分類顯示變更",
        "tog-numberheadings": "標題自動編號",
        "tog-showtoolbar": "顯示編輯工具列",
        "tog-editondblclick": "開啟滑鼠雙擊編輯頁面",
        "tog-enotifwatchlistpages": "當我的監視清單中的頁面或檔案有變更時,傳送電子郵件通知我",
        "tog-enotifusertalkpages": "當我的對話頁面有變更時,傳送電子郵件通知我",
        "tog-enotifminoredits": "當頁面與檔案有小修訂時,傳送電子郵件通知我",
-       "tog-enotifrevealaddr": "在通知信件中顯示我的電子郵件位址",
+       "tog-enotifrevealaddr": "在通知郵件中顯示我的電子郵件地址",
        "tog-shownumberswatching": "顯示正在監視的使用者數",
        "tog-oldsig": "現有簽名:",
        "tog-fancysig": "將簽名視為 Wikitext 語言 (不自動產生連結)",
        "tog-uselivepreview": "使用即時預覽",
        "tog-forceeditsummary": "未填寫編輯摘要時提示我",
-       "tog-watchlisthideown": "隱藏監視清單中我的編輯",
+       "tog-watchlisthideown": "隱藏監視清單中我自己的編輯",
        "tog-watchlisthidebots": "隱藏監視清單中機器人的編輯",
        "tog-watchlisthideminor": "隱藏監視清單中的小修訂",
        "tog-watchlisthideliu": "隱藏監視清單中已登入使用者的編輯",
        "searcharticle": "執行",
        "history": "頁面歷史",
        "history_short": "歷史",
-       "updatedmarker": "自我最後一次訪問以後的更新",
+       "updatedmarker": "自我上次參觀後的更新",
        "printableversion": "可列印版",
        "permalink": "靜態連結",
        "print": "列印",
        "deletethispage": "刪除此頁",
        "undeletethispage": "取消刪除此頁",
        "undelete_short": "取消刪除 $1 項修訂",
-       "viewdeleted_short": "檢視 $1 項已刪除的修訂",
+       "viewdeleted_short": "檢視 {{PLURAL:$1|1 項已刪除的修訂|$1 項已刪除的修訂}}",
        "protect": "保護",
        "protect_change": "變更",
        "protectthispage": "保護此頁面",
        "disclaimers": "免責聲明",
        "disclaimerpage": "Project:General disclaimer",
        "edithelp": "編輯説明",
+       "helppage-top-gethelp": "説明",
        "mainpage": "首頁",
        "mainpage-description": "首頁",
        "policy-url": "Project:Policy",
        "youhavenewmessages": "您有 $1 ($2)。",
        "youhavenewmessagesfromusers": "你有來自{{PLURAL:$3|另一位使用者|$3 位使用者}}的 $1 ($2)。",
        "youhavenewmessagesmanyusers": "你有來自多位使用者的 $1 ($2)。",
-       "newmessageslinkplural": "{{PLURAL:$1|ä¸\80å\80\8b新訊息|999=新訊息}}",
+       "newmessageslinkplural": "{{PLURAL:$1|ä¸\80å\89\87新訊息|999=新訊息}}",
        "newmessagesdifflinkplural": "最近{{PLURAL:$1|變更}}",
        "youhavenewmessagesmulti": "您在 $1 有新訊息",
        "editsection": "編輯",
        "readonly_lag": "資料庫已自動鎖定,正在等候次要資料庫同步資料到主要資料庫",
        "internalerror": "內部錯誤",
        "internalerror_info": "內部錯誤:$1",
+       "internalerror-fatal-exception": "嚴重例外類型 \"$1\"",
        "filecopyerror": "無法複製檔案 \"$1\" 至 \"$2\"。",
        "filerenameerror": "無法重新命名檔案 \"$1\" 為 \"$2\"。",
        "filedeleteerror": "無法刪除檔案 \"$1\"。",
        "cannotdelete": "無法刪除頁面或檔案 \"$1\"。\n它可能已經被其他人刪除。",
        "cannotdelete-title": "無法刪除頁面 \"$1\"",
        "delete-hook-aborted": "刪除已被 Hook 中止。\n且未回應無任何說明。",
-       "no-null-revision": "ç\84¡æ³\95å°\8dé \81é\9d¢ \"$1\" å»ºç«\8bæ\96°ç\9a\84空白修訂",
+       "no-null-revision": "ç\84¡æ³\95建ç«\8bé \81é\9d¢ \"$1\" ç\9a\84æ\96°空白修訂",
        "badtitle": "無效的標題",
        "badtitletext": "指定的頁面標題是無效、空白,或未正確連結的跨語言或跨 Wiki 的標題。\n標題中可能包含無法使用在標題的字元。",
        "perfcached": "以下為快取資料,可能不是最新的。 快取資料最多可儲存 {{PLURAL:$1|1 筆結果|$1 筆結果}}。",
        "ns-specialprotected": "特殊頁面無法編輯。",
        "titleprotected": "此標題已經被 [[User:$1|$1]] 保護以防止建立,原因是 \"<em>$2</em>\"。",
        "filereadonlyerror": "無法修改檔案 \"$1\" 因為檔案庫 \"$2\" 目前處於唯讀模式。\n\n鎖定的管理員說明:\"$3\"。",
-       "invalidtitle-knownnamespace": "無效的標題,命名空間 \"$2\" 與名稱 \"$3\"",
-       "invalidtitle-unknownnamespace": "無效的標題,不明的命名空間編號 $1 與名稱 \"$2\"",
+       "invalidtitle-knownnamespace": "命名空間 \"$2\" 與名稱 \"$3\" 是無效的標題",
+       "invalidtitle-unknownnamespace": "不明的命名空間編號 $1 與名稱 \"$2\" 是無效的標題",
        "exception-nologin": "未登入",
-       "exception-nologin-text": "請先登入以檢視或修改",
+       "exception-nologin-text": "您需要先登入方可存取或者操作此頁面。",
        "exception-nologin-text-manual": "請先 $1 以存取此頁面或操作。",
        "virus-badscanner": "錯誤的設定:不明的病毒掃瞄程式:<em>$1</em>",
        "virus-scanfailed": "掃瞄失敗 (代碼 $1)",
        "userlogin-helplink2": "登入協助",
        "userlogin-loggedin": "您目前已登入 {{GENDER:$1|$1}} 使用者,\n請使用下列表單改登入另一位使用者。",
        "userlogin-createanother": "建立另一個帳號",
-       "createacct-emailrequired": "電子郵件址",
-       "createacct-emailoptional": "電子郵件址 (選填)",
-       "createacct-email-ph": "輸入您的電子郵件址",
-       "createacct-another-email-ph": "輸入電子郵件址",
-       "createaccountmail": "使ç\94¨è\87¨æ\99\82ç\9a\84é\9a¨æ©\9få¯\86碼ï¼\8c並å°\87å®\83å\82³é\80\81å\88°æ\8c\87å®\9aç\9a\84é\9b»å­\90é\83µä»¶ä½\8d址",
+       "createacct-emailrequired": "電子郵件址",
+       "createacct-emailoptional": "電子郵件址 (選填)",
+       "createacct-email-ph": "輸入您的電子郵件址",
+       "createacct-another-email-ph": "輸入電子郵件址",
+       "createaccountmail": "使ç\94¨è\87¨æ\99\82ç\9a\84é\9a¨æ©\9få¯\86碼ï¼\8c並å°\87å®\83å¯\84è\87³æ\8c\87å®\9aç\9a\84é\9b»å­\90é\83µä»¶å\9c°址",
        "createacct-realname": "真實姓名 (選填)",
        "createaccountreason": "原因:",
        "createacct-reason": "原因",
        "wrongpassword": "您輸入的密碼錯誤,請再試一次。",
        "wrongpasswordempty": "輸入的密碼是空的。\n請再試一次。",
        "passwordtooshort": "您的密碼至少需要 $1 個字元。",
+       "passwordtoolong": "密碼不能超過 {{PLURAL:$1|1 個字元|$1 個字元}}。",
        "password-name-match": "您的密碼不可以跟使用者名稱相同。",
        "password-login-forbidden": "此使用者名稱和密碼已被禁止使用。",
        "mailmypassword": "重設密碼",
        "passwordremindertitle": "{{SITENAME}} 的新臨時密碼",
        "passwordremindertext": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼。\n給使用者 \"$2\" 的臨時密碼設為 \"$3\"。\n如果這個動作是您做的,您需要立即登入並設定一個新的密碼,\n您的臨時密碼將於{{PLURAL:$5|一|$5}}天內過期。\n\n如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
-       "noemail": "使ç\94¨è\80\85 \"$1\" æ\9cªç\99»è¨\98é\9b»å­\90é\83µä»¶ä½\8då\9d\80。",
-       "noemailcreate": "您需要提供一個有效的電子郵件址。",
-       "passwordsent": "使用者 \"$1\" 的新密碼已寄至當出登記的電子郵件位址,\n請稍後收到信件後再登入。",
+       "noemail": "使ç\94¨è\80\85 \"$1\" æ²\92æ\9c\89é\9b»å­\90é\83µä»¶å\9c°å\9d\80è¨\98é\8c\84。",
+       "noemailcreate": "您需要提供一個有效的電子郵件址。",
+       "passwordsent": "使用者 \"$1\" 的新密碼已寄至當出登記的電子郵件地址,\n請稍後收到郵件後再登入。",
        "blocked-mailpassword": "您的 IP 位址已被封鎖不允許編輯,密碼復原的功能也同樣被禁止使用以防止被濫用。",
        "eauthentsent": "已寄出一封確認信到您所設定的電子郵件位址。\n在未收到其它電子郵件前,您必須先依照郵件中的指示,確認這個帳號確實是您本人。",
        "throttled-mailpassword": "密碼重設的電子郵件已經在最近 $1 小時內寄出。\n為防止濫用,$1 小時內只能寄出一次密碼重設信件。",
        "mailerror": "傳送電子郵件錯誤:$1",
        "acct_creation_throttle_hit": "使用您目前的 IP 位址的訪客在最近一天建立了 {{PLURAL:$1|1 個帳號|$1 個帳號}},已超出系統允許的上限。\n因此,目前無法讓使用此 IP 位址的訪客建立帳號。",
-       "emailauthenticated": "您的電子郵件址已於 $2 $3 確認。",
-       "emailnotauthenticated": "您的電子郵件址尚未確認,\n尚不會寄出以下功能的電子郵件給您。",
-       "noemailprefs": "在您的偏好設定中設定電子郵件址,讓您可以使用這些功能。",
-       "emailconfirmlink": "確認您的電子郵件址",
-       "invalidemailaddress": "無法接受格式不正確的電子郵件位址,\n請輸入正確的電子郵件位址格式或略過填寫該欄位。",
-       "cannotchangeemail": "此 Wiki 不允許更改帳號的電子郵件址。",
+       "emailauthenticated": "您的電子郵件址已於 $2 $3 確認。",
+       "emailnotauthenticated": "您的電子郵件址尚未確認,\n尚不會寄出以下功能的電子郵件給您。",
+       "noemailprefs": "在您的偏好設定中設定電子郵件址,讓您可以使用這些功能。",
+       "emailconfirmlink": "確認您的電子郵件址",
+       "invalidemailaddress": "無法接受格式不正確的電子郵件地址,請輸入正確的電子郵件地址格式或略過填寫該欄位。",
+       "cannotchangeemail": "此 Wiki 不允許更改帳號的電子郵件址。",
        "emaildisabled": "此網站不能傳送電子郵件。",
        "accountcreated": "已建立帳號",
        "accountcreatedtext": "使用者帳號 [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|對話]]) 已建立。",
        "createaccount-title": "{{SITENAME}} 的帳號建立",
-       "createaccount-text": "不明人士使用您的電子郵件址在 {{SITENAME}} ($4) 建立了一個帳號名稱為 \"$2\",密碼為 \"$3\"。\n您應該立即登入並更改密碼。\n\n如果該帳號是建立錯誤的話,您可以忽略此訊息。",
+       "createaccount-text": "不明人士使用您的電子郵件址在 {{SITENAME}} ($4) 建立了一個帳號名稱為 \"$2\",密碼為 \"$3\"。\n您應該立即登入並更改密碼。\n\n如果該帳號是建立錯誤的話,您可以忽略此訊息。",
        "login-throttled": "您已經嘗試太多次的登入動作。\n請稍等 $1 後再試。",
        "login-abort-generic": "您登入失敗 - 已中止",
        "login-migrated-generic": "您的帳號已轉移,且此 Wiki 中您的使用者名稱已不存在。",
        "pt-createaccount": "建立帳號",
        "pt-userlogout": "登出",
        "php-mail-error-unknown": "PHP 的 mail() 函數發生不明錯誤。",
-       "user-mail-no-addy": "試圖傳送沒有電子郵件位址的信件。",
+       "user-mail-no-addy": "試圖傳送沒有電子郵件地址的郵件。",
        "user-mail-no-body": "試圖寄出內容為空的或異常簡短的電子郵件。",
        "changepassword": "變更密碼",
        "resetpass_announce": "要完成登入,您必須設定一個新密碼。",
        "passwordreset-domain": "網域名稱:",
        "passwordreset-capture": "檢視電子郵件內容?",
        "passwordreset-capture-help": "若您勾選此核選方塊,電子郵件 (包含臨時密碼) 將直接顯示,並寄給使用者。",
-       "passwordreset-email": "電子郵件址:",
+       "passwordreset-email": "電子郵件址:",
        "passwordreset-emailtitle": "於 {{SITENAME}} 的帳號詳細資訊",
-       "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件位址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
+       "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件地址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略本訊息並且繼續使用您原本的密碼。",
        "passwordreset-emailtext-user": "使用者 $1 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件位址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
        "passwordreset-emailelement": "使用者名稱:$1\n臨時密碼:$2",
        "passwordreset-emailsent": "已寄出重設密碼的電子郵件。",
        "passwordreset-emailsent-capture": "已寄出重設密碼的電子郵件,並於下方顯示。",
        "passwordreset-emailerror-capture": "下列為重設密碼的電子郵件內容,傳送給{{GENDER:$2|使用者}}失敗:$1",
-       "changeemail": "變更電子郵件址",
-       "changeemail-text": "完成此表單以修改您的電子郵件址,您需要輸入您的密碼來確認此次變更。",
+       "changeemail": "變更電子郵件址",
+       "changeemail-text": "完成此表單以修改您的電子郵件址,您需要輸入您的密碼來確認此次變更。",
        "changeemail-no-info": "您必須登入方可直接存取此頁面。",
-       "changeemail-oldemail": "目前的電子郵件址:",
-       "changeemail-newemail": "新的電子郵件址:",
+       "changeemail-oldemail": "目前的電子郵件址:",
+       "changeemail-newemail": "新的電子郵件址:",
        "changeemail-none": "(無)",
        "changeemail-password": "您於 {{SITENAME}} 的密碼:",
        "changeemail-submit": "變更電子郵件",
        "changeemail-throttled": "您最近嘗試了太多次登入。\n請等待 $1 後再試。",
-       "resettokens": "重設鑰",
+       "resettokens": "重設鑰",
        "resettokens-text": "您可以在此重設用來存取您帳號相關隱私資料的密鑰。\n\n若您不小心將您的密鑰分享給其他人或您的帳號已遭到入侵、破壞,應該要重設此密鑰。",
-       "resettokens-no-tokens": "沒有可重設的鑰。",
-       "resettokens-legend": "重設鑰",
-       "resettokens-tokens": "鑰:",
+       "resettokens-no-tokens": "沒有可重設的鑰。",
+       "resettokens-legend": "重設鑰",
+       "resettokens-tokens": "鑰:",
        "resettokens-token-label": "$1 (目前為 $2)",
        "resettokens-watchlist-token": "用來訂閱 [[Special:Watchlist|監視清單]] Atom/RSS 的密鑰",
-       "resettokens-done": "已重設鑰。",
-       "resettokens-resetbutton": "重設已選擇的鑰",
+       "resettokens-done": "已重設鑰。",
+       "resettokens-resetbutton": "重設已選擇的鑰",
        "bold_sample": "粗體文字",
        "bold_tip": "粗體文字",
        "italic_sample": "斜體文字",
        "missingcommentheader": "<strong>提醒:</strong>您未填寫此評論的主旨/標題。\n若您再點選 \"{{int:savearticle}}\" 一次,將略過主旨/標題直接儲存您的評論。",
        "summary-preview": "摘要預覽:",
        "subject-preview": "主旨/標題預覽:",
+       "previewerrortext": "嘗試預覽您的變更時發生錯誤。",
        "blockedtitle": "使用者已被封鎖",
-       "blockedtext": "<strong>æ\82¨ç\9a\84使ç\94¨è\80\85å\90\8d稱æ\88\96 IP ä½\8då\9d\80以被å°\81é\8e\96ã\80\82</strong>\n\næ\82¨è¢« $1 å°\81é\8e\96ï¼\8c\nå\8e\9få\9b ç\88² <em>$2</em>ã\80\82\n\n* å°\81é\8e\96é\96\8bå§\8bæ\99\82é\96\93ï¼\9a$8\n* å°\81é\8e\96çµ\90æ\9d\9fæ\99\82é\96\93ï¼\9a$6\n* ç\9b¸é\97\9cå°\81é\8e\96å°\8d象ï¼\9a$7\n\næ\82¨å\8f¯ä»¥è\81¯ç¹« $1 æ\88\96å\85¶ä»\96ç\9a\84 [[{{MediaWiki:Grouppage-sysop}}|管ç\90\86å\93¡]] è¨\8eè«\96å°\81é\8e\96ç\9a\84ç\9b¸é\97\9cå\95\8fé¡\8cã\80\82\nè\8b¥æ\82¨å·²å\9c¨ [[Special:Preferences|å\81\8f好設å®\9a]] ä¸­è¨­å®\9aäº\86ä¸\80å\80\8bæ\9c\89æ\95\88ç\9a\84é\9b»å­\90é\83µä»¶ä½\8då\9d\80ï¼\8cä¸\94å°\9aæ\9cªè¢«å°\81é\8e\96é\83µä»¶å\8a\9fè\83½ï¼\8cå\89\87æ\82¨å\8f¯é\80\8fé\81\8e \"å\82³é\80\81é\9b»å­\90é\83µä»¶çµ¦é\80\99ä½\8d使ç\94¨è\80\85\" ç\9a\84å\8a\9fè\83½ä¾\86è\81¯çµ¡ç\9b¸é\97\9c管ç\90\86å\93¡ã\80\82\næ\82¨ç\9b®å\88\96ç\9a\84 IP ä½\8då\9d\80æ\98¯ $3ï¼\8c此次å°\81é\8e\96ç\9a\84 ID ç\88² #$5。\n請您在詢問時附註以上詳細訊息。",
-       "autoblockedtext": "å\9b å\85\88å\89\8dç\9a\84å\8f¦ä¸\80ä½\8d使ç\94¨è\80\85被 $1 å°\81é\8e\96ï¼\8cæ\82¨ç\9a\84 IP ä½\8då\9d\80已被è\87ªå\8b\95å°\81é\8e\96ã\80\82\nå\8e\9få\9b æ\98¯ï¼\9a\n\n:<em>$2</em>\n\n* å°\81é\8e\96é\96\8bå§\8bæ\99\82é\96\93ï¼\9a$8\n* å°\81é\8e\96çµ\90æ\9d\9fæ\99\82é\96\93ï¼\9a$6\n* ç\9b¸é\97\9cå°\81é\8e\96å°\8d象ï¼\9a$7\n\næ\82¨å\8f¯ä»¥è\81¯ç¹« $1 æ\88\96å\85¶ä»\96ç\9a\84 [[{{MediaWiki:Grouppage-sysop}}|管ç\90\86å\93¡]] è¨\8eè«\96å°\81é\8e\96ç\9a\84ç\9b¸é\97\9cå\95\8fé¡\8cã\80\82\nè\8b¥æ\82¨å·²å\9c¨ [[Special:Preferences|å\81\8f好設å®\9a]] ä¸­è¨­å®\9aäº\86ä¸\80å\80\8bæ\9c\89æ\95\88ç\9a\84é\9b»å­\90é\83µä»¶ä½\8då\9d\80ï¼\8cä¸\94å°\9aæ\9cªè¢«å°\81é\8e\96é\83µä»¶å\8a\9fè\83½ï¼\8cå\89\87æ\82¨å\8f¯é\80\8fé\81\8e \"å\82³é\80\81é\9b»å­\90é\83µä»¶çµ¦é\80\99ä½\8d使ç\94¨è\80\85\" ç\9a\84å\8a\9fè\83½ä¾\86è\81¯çµ¡ç\9b¸é\97\9c管ç\90\86å\93¡ã\80\82\næ\82¨ç\9b®å\88\96ç\9a\84 IP ä½\8då\9d\80æ\98¯ $3ï¼\8c此次å°\81é\8e\96ç\9a\84 ID ç\88² #$5ã\80\82\nè«\8bæ\82¨å\9c¨è©¢å\95\8fæ\99\82é\99\84註以ä¸\8a詳細è¨\8aæ\81¯。",
+       "blockedtext": "<strong>æ\82¨ç\9a\84使ç\94¨è\80\85å\90\8d稱æ\88\96 IP ä½\8då\9d\80以被å°\81é\8e\96ã\80\82</strong>\n\næ\82¨è¢« $1 å°\81é\8e\96ï¼\8c\nå\8e\9få\9b ç\88² <em>$2</em>ã\80\82\n\n* å°\81é\8e\96é\96\8bå§\8bæ\99\82é\96\93ï¼\9a$8\n* å°\81é\8e\96çµ\90æ\9d\9fæ\99\82é\96\93ï¼\9a$6\n* ç\9b¸é\97\9cå°\81é\8e\96å°\8d象ï¼\9a$7\n\næ\82¨å\8f¯ä»¥è\81¯çµ¡ $1 æ\88\96å\85¶ä»\96ç\9a\84 [[{{MediaWiki:Grouppage-sysop}}|管ç\90\86å\93¡]] è¨\8eè«\96å°\81é\8e\96ç\9a\84ç\9b¸é\97\9cå\95\8fé¡\8cã\80\82\nè\8b¥æ\82¨å·²å\9c¨ [[Special:Preferences|å\81\8f好設å®\9a]] ä¸­è¨­å®\9aäº\86ä¸\80å\80\8bæ\9c\89æ\95\88ç\9a\84é\9b»å­\90é\83µç®±å\9c°å\9d\80ï¼\8cä¸\94å°\9aæ\9cªè¢«å°\81é\8e\96é\83µä»¶å\8a\9fè\83½ï¼\8cå\89\87æ\82¨å\8f¯é\80\8fé\81\8e \"Email è\81¯çµ¡æ­¤ä½¿ç\94¨è\80\85\" ç\9a\84å\8a\9fè\83½ä¾\86è\81¯çµ¡ç\9b¸é\97\9c管ç\90\86å\93¡ã\80\82\næ\82¨ç\9b®å\89\8dç\9a\84 IP ä½\8då\9d\80æ\98¯ $3ï¼\8c此次å°\81é\8e\96ç\9a\84 ID ç\82º #$5。\n請您在詢問時附註以上詳細訊息。",
+       "autoblockedtext": "å\9b å\85\88å\89\8dç\9a\84å\8f¦ä¸\80ä½\8d使ç\94¨è\80\85被 $1 å°\81é\8e\96ï¼\8cæ\82¨ç\9a\84 IP ä½\8då\9d\80已被è\87ªå\8b\95å°\81é\8e\96ã\80\82\nå\8e\9få\9b æ\98¯ï¼\9a\n\n:<em>$2</em>\n\n* å°\81é\8e\96é\96\8bå§\8bæ\99\82é\96\93ï¼\9a$8\n* å°\81é\8e\96çµ\90æ\9d\9fæ\99\82é\96\93ï¼\9a$6\n* ç\9b¸é\97\9cå°\81é\8e\96å°\8d象ï¼\9a$7\n\næ\82¨å\8f¯ä»¥è\81¯çµ¡ $1 æ\88\96å\85¶ä»\96ç\9a\84 [[{{MediaWiki:Grouppage-sysop}}|管ç\90\86å\93¡]] è¨\8eè«\96å°\81é\8e\96ç\9a\84ç\9b¸é\97\9cå\95\8fé¡\8cã\80\82\nè\8b¥æ\82¨å·²å\9c¨ [[Special:Preferences|å\81\8f好設å®\9a]] ä¸­è¨­å®\9aäº\86ä¸\80å\80\8bæ\9c\89æ\95\88ç\9a\84é\9b»å­\90é\83µç®±å\9c°å\9d\80ï¼\8cä¸\94å°\9aæ\9cªè¢«å°\81é\8e\96é\83µä»¶å\8a\9fè\83½ï¼\8cå\89\87æ\82¨å\8f¯é\80\8fé\81\8e \"Email è\81¯çµ¡æ­¤ä½¿ç\94¨è\80\85\" ç\9a\84å\8a\9fè\83½ä¾\86è\81¯çµ¡ç\9b¸é\97\9c管ç\90\86å\93¡ã\80\82\næ\82¨ç\9b®å\89\8dç\9a\84 IP ä½\8då\9d\80æ\98¯ $3ï¼\8c此次å°\81é\8e\96ç\9a\84 ID ç\82º #$5ã\80\82\nè«\8bæ\82¨å\9c¨è©¢å\95\8fæ\99\82é\99\84註以ä¸\8a詳細è³\87æ\96\99。",
        "blockednoreason": "未說明原因",
        "whitelistedittext": "請先 $1 才可編輯頁面。",
-       "confirmedittext": "在編輯此頁之前您必須確認您的電子郵件位址。\n請透過 [[Special:Preferences|偏好設定]] 設定並驗證您的電子郵件位址。",
+       "confirmedittext": "在編輯此頁之前您必須確認您的電子郵件地址。\n請透過 [[Special:Preferences|偏好設定]] 設定並驗證您的電子郵件地址。",
        "nosuchsectiontitle": "找不到章節",
        "nosuchsectiontext": "您嘗試編輯的章節並不存在。\n可能在您檢視頁面時已經移動或刪除。",
        "loginreqtitle": "需要登入",
        "accmailtitle": "密碼已寄出",
        "accmailtext": "[[User talk:$1|$1]] 的隨機密碼已經寄送至 $2,可登入後至 <em>[[Special:ChangePassword|變更密碼]] 頁面更改</em>。",
        "newarticle": "(新)",
-       "newarticletext": "æ\82¨æ­£é\80£çµ\90è\87³ä¸\80é \81ä¸\8då­\98å\9c¨é \81é\9d¢ã\80\82\nè¦\81建ç«\8b該é \81é\9d¢ï¼\8cè«\8bå\9c¨ä¸\8bæ\96¹ç\9a\84編輯æ¡\86中輸å\85¥å\85§å®¹ (詳æ\83\85è«\8bå\8f\83è\80\83 [$1 èª¬æ\98\8eé \81é\9d¢])。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
+       "newarticletext": "æ\82¨æ­£é\80£çµ\90è\87³ä¸\80é \81ä¸\8då­\98å\9c¨é \81é\9d¢ã\80\82\nè¦\81建ç«\8b該é \81é\9d¢ï¼\8cè«\8bå\9c¨ä¸\8bæ\96¹ç\9a\84編輯æ\96¹å¡\8a中輸å\85¥å\85§å®¹ (詳æ\83\85è«\8bå\8f\83è\80\83 [$1 èª¬æ\98\8eé \81é\9d¢]) 。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
        "anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識身份,但相同的 IP 位址可能由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請 [[Special:UserLogin/signup|建立新帳號]] 或 [[Special:UserLogin|登入]] 避免與其他匿名使用者混淆。",
        "noarticletext": "此頁面目前沒有內容,您可以在其它頁面中[[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>,但您沒有權限建立此頁面。",
        "userpage-userdoesnotexist-view": "使用者帳號 \"$1\" 尚未註冊。",
        "blocked-notice-logextract": "此使用者目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
        "clearyourcache": "<strong>注意:</strong>在您儲存之後您必須清除瀏覽器快取才可看到最新的變動。\n* <strong>Firefox / Safari:</strong>按住 <em>Shift</em> 時點選 <em>重新整理</em>,或按 <em>Ctrl-F5</em> 或 <em>Ctrl-R</em> (Mac 則為 <em>⌘-R</em>) \n* <strong>Google Chrome:</strong>按 <em>Ctrl-Shift-R</em> (Mac 則為 <em>⌘-Shift-R</em>) \n* <strong>Internet Explorer:</strong>按住 <em>Ctrl</em> 時點選 <em>重新整理</em>,或按 <em>Ctrl-F5</em>\n* <strong>Opera:</strong>進入 <em>工具 → 偏好設定</em> 中清除快取。",
-       "usercssyoucanpreview": "<strong>提示:</strong>在儲存之前使用 \"{{int:showpreview}}\" 按鈕來測試您的新 CSS。",
-       "userjsyoucanpreview": "<strong>提示:</strong>在儲存之前使用 \"{{int:showpreview}}\" 按鈕來測試您的新 JavaScript。",
+       "usercssyoucanpreview": "<strong>提示:</strong>在儲存之前使用 \"{{int:showpreview}}\" 按鈕來測試您的新 CSS 。",
+       "userjsyoucanpreview": "<strong>提示:</strong>在儲存之前使用 \"{{int:showpreview}}\" 按鈕來測試您的新 JavaScript 。",
        "usercsspreview": "<strong>您目前正預覽您的使用者 CSS,CSS 還尚未儲存!</strong>",
        "userjspreview": "<strong>您目前正預覽您的使用者 JavaScript,JavaScript 還尚未儲存!</strong>",
        "sitecsspreview": "<strong>您目前正預覽此 CSS,CSS 還尚未儲存!</strong>",
        "previewconflict": "此預覽顯示了您於上方文字編輯框中的內容儲存之後將會顯示的結果。",
        "session_fail_preview": "<strong>很抱歉!由於連線階段的資料遺失,我們無法處理您的編輯動作。</strong>\n請再試一次。\n如果仍然失敗,請 [[Special:UserLogout|登出]] 後重新登入。",
        "session_fail_preview_html": "<strong>很抱歉!由於連線階段的資料遺失,我們無法處理您的編輯動作。</strong>\n\n<em>由於 {{SITENAME}} 開啟了原始 HTML 模式,將不會顯示預覽畫面以避免 JavaScript 攻擊。</em>\n\n<strong>若這是符合規範的編輯動作,請再試一次。</strong>\n如果仍然有問題,請 [[Special:UserLogout|登出]] 後再重新登入一次。",
-       "token_suffix_mismatch": "<strong>您使用的瀏覽器刪除了編輯資訊中的特殊符號,已拒絕此編輯動作。</strong>\n為了避免破壞頁面內容,已拒絕此編輯動作,\n這通常是因為您使用了有問題的匿名網頁代理伺服器。",
+       "token_suffix_mismatch": "<strong>因您使用的瀏覽器破壞了編輯密鑰中的特殊符號,您的編輯已被拒絕。</strong>\n為了避免破壞頁面內容,已拒絕此次編輯動作,\n會發生這個問題通常是因為您使用了有問題的匿名網頁代理伺服器。",
        "edit_form_incomplete": "<strong>部份編輯的內容未送至伺服器,請檢查您的編輯內容是否完整並再試一次。</strong>",
        "editing": "正在編輯 $1",
        "creating": "正在建立 $1",
        "expensive-parserfunction-category": "使用了太多消耗系統資源的分析函數的頁面",
        "post-expand-template-inclusion-warning": "<strong>警告:</strong>引用樣板後大小超出限制。\n部份樣板內容將不會被使用。",
        "post-expand-template-inclusion-category": "引用樣板後大小超出限制的頁面",
-       "post-expand-template-argument-warning": "<strong>è­¦å\91\8aï¼\9a</strong>æ­¤é \81é\9d¢æ\9c\89ä¸\80å\80\8b以ä¸\8aç\9a\84樣板參數過長。\n過長的參數會被直接忽略。",
+       "post-expand-template-argument-warning": "<strong>è­¦å\91\8aï¼\9a</strong>æ­¤é \81é\9d¢æ\9c\89ä¸\80å\80\8b以ä¸\8aç\9a\84模板參數過長。\n過長的參數會被直接忽略。",
        "post-expand-template-argument-category": "樣板參數有部份被忽略的頁面",
        "parser-template-loop-warning": "偵測到樣板遞迴:[[$1]]",
        "parser-template-recursion-depth-warning": "超出樣板遞迴深度限制 ($1)",
        "last": "前筆",
        "page_first": "第一頁",
        "page_last": "最後頁",
-       "histlegend": "比較選擇的版本差異:選要比較修訂版本的單選方塊並點選網頁底部的按鈕進行比較。<br />\n符號說明:<strong>({{int:cur}})</strong> = 與最新的修訂版本比較,<strong>({{int:last}})</strong> = 與前一筆修訂版本比較,<strong>{{int:minoreditletter}}</strong> = 小修訂。",
+       "histlegend": "比對選擇的版本差異:選擇要比對修訂版本的單選方塊並點選底部的按鈕進行比對。<br />\n符號說明:<strong>({{int:cur}})</strong> = 與最新的修訂版本比對,<strong>({{int:last}})</strong> = 與前一筆修訂版本比對,<strong>{{int:minoreditletter}}</strong> = 小修訂。",
        "history-fieldset-title": "瀏覽歷史",
        "history-show-deleted": "只顯示已刪除的修訂",
        "histfirst": "最舊",
        "rev-suppressed-text-view": "此頁面修訂已被 <strong>禁止顯示</strong>。\n您可繼續檢視修訂,可至 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 禁止顯示日誌] 取得詳細資訊。",
        "rev-deleted-no-diff": "因頁面的其中一次修訂已被 <strong>刪除</strong>,您無法檢視差異。\n可至 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌] 取得詳細資訊。",
        "rev-suppressed-no-diff": "因頁面的其中一次修訂已被 <strong>刪除</strong>,您無法檢視差異。",
-       "rev-deleted-unhide-diff": "檢視差異的其中一個修訂已被 <strong>刪除</strong>。\n可至 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌] 取得詳細資。\n若您要繼續,您仍可以 [$1 檢視此差異]。",
+       "rev-deleted-unhide-diff": "檢視差異的其中一個修訂已被 <strong>刪除</strong>。\n可至 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌] 取得詳細資。\n若您要繼續,您仍可以 [$1 檢視此差異]。",
        "rev-suppressed-unhide-diff": "檢視差異的其中一個修訂已被 <strong>禁止顯示</strong>。\n可至 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 禁止顯示日誌] 取得詳細資訊。\n若您要繼續,您仍可以 [$1 檢視此差異]。",
        "rev-deleted-diff-view": "檢視差異的其中一個修訂已被 <strong>刪除</strong>。\n您可繼續檢視差異,可至 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌] 取得詳細資訊。",
        "rev-suppressed-diff-view": "檢視差異的其中一個修訂已被 <strong>禁止顯示</strong>。\n您可繼續檢視差異,可至 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 禁止顯示日誌] 取得詳細資訊。",
        "logdelete-selected": "已選擇{{PLURAL:$1|一筆|多筆}}日誌活動:",
        "revdelete-text-text": "已刪除的修訂仍會出現於頁面歷史中,但內容將不開放存取。",
        "revdelete-text-file": "已刪除的檔案版本仍會出現於檔案歷史中,但內容將不開放存取。",
-       "logdelete-text": "å·²å\88ªé\99¤ç\9a\84æ\97¥èª\8cæ´»å\8b\95ä»\8dæ\9c\83å\87ºç\8f¾æ\96¼æ\97¥èª\8c中ï¼\8cä½\86å\85§å®¹å°\87ä¸\8d開放存取。",
-       "revdelete-text-others": "若未æ\9c\89é¡\8då¤\96ç\9a\84設å®\9aé\99\90å\88¶ï¼\8cå\85¶ä»\96管ç\90\86å\93¡ä»\8dæ\9c\89æ¬\8aé\99\90檢è¦\96è\88\87å\8f\96æ¶\88å\88ªé\99¤é\9a±è\97\8fç\9a\84å\85§å®¹ã\80\82",
-       "revdelete-confirm": "請確認您是否明白此動作會造成的後果,\n以及您所做的動作是否符合 [[{{MediaWiki:Policy-url}}|政策]] 規範。",
-       "revdelete-suppress-text": "禁制顯示應<strong>只有</strong>在下述情形時使用:\n* 潛在誹謗的資訊\n* 不合適個人資料\n*: <em>住家地址、電話號碼、身分證字號等。</em>",
+       "logdelete-text": "å·²å\88ªé\99¤ç\9a\84æ\97¥èª\8cæ´»å\8b\95ä»\8dæ\9c\83å\87ºç\8f¾æ\96¼æ\97¥èª\8c中ï¼\8cä½\86å\85¶é\83¨å\88\86å\85§å®¹å°\87ä¸\8dæ\9c\83å\90\91å\85¬ç\9c¾開放存取。",
+       "revdelete-text-others": "若未設å®\9aé¡\8då¤\96æ¢\9d件ï¼\8cå\85¶ä»\96管ç\90\86å\93¡ä»\8dæ\9c\89æ¬\8aé\99\90檢è¦\96è\88\87å\8f\96æ¶\88å\88ªé\99¤é\9a±è\97\8fç\9a\84å\85§å®¹ã\80\82",
+       "revdelete-confirm": "請確認您是否明白此動作會造成的後果,以及您所做的動作是否符合[[{{MediaWiki:Policy-url}}|政策]]規範。",
+       "revdelete-suppress-text": "禁止顯示應<strong>只有</strong>在下述情形時使用:\n* 潛在誹謗的資訊\n* 不恰當的個人資料\n*: <em>住家地址、電話號碼、身分證號碼等。</em>",
        "revdelete-legend": "設定顯示限制",
        "revdelete-hide-text": "修訂文字",
        "revdelete-hide-image": "隱藏檔案內容",
        "revdelete-radio-same": "(請勿更改)",
        "revdelete-radio-set": "隱藏",
        "revdelete-radio-unset": "顯示",
-       "revdelete-suppress": "禁止顯示資料給管理者及其他使用者",
+       "revdelete-suppress": "禁止向管理者及其他使用者顯示資料",
        "revdelete-unsuppress": "移除已還原修訂上的顯示限制",
        "revdelete-log": "原因:",
        "revdelete-submit": "套用至已選取的{{PLURAL:$1|一筆|多筆}}修訂",
        "revertmerge": "取消合併",
        "mergelogpagetext": "以下是最近合併頁面歷史的清單。",
        "history-title": "\"$1\" 的修訂歷史",
-       "difference-title": "$1:修訂間的差異",
+       "difference-title": "\"$1\" 修訂間的差異",
        "difference-title-multipage": "頁面 \"$1\" 與 \"$2\" 間的差異",
        "difference-multipage": "(頁面間的差異)",
        "lineno": "行 $1:",
        "notextmatches": "沒有符合的頁面內容",
        "prevn": "前 $1 筆",
        "nextn": "後 {{PLURAL:$1|$1}} 筆",
+       "prev-page": "上一頁",
+       "next-page": "下一頁",
        "prevn-title": "前 $1 筆結果",
        "nextn-title": "後 $1 筆結果",
        "shown-title": "每頁顯示 $1 筆結果",
        "searchprofile-images-tooltip": "搜尋檔案",
        "searchprofile-everything-tooltip": "搜尋所有內容 (包含對話頁面)",
        "searchprofile-advanced-tooltip": "搜尋自訂命名空間",
-       "search-result-size": "$1 ($2 個字)",
+       "search-result-size": "$1 ({{PLURAL:$2|1 個字|$2 個字}})",
        "search-result-category-size": "$1 位成員 ($2 個子分類,$3 個檔案)",
        "search-redirect": "(重新導向自 $1)",
        "search-section": "(章節 $1)",
        "prefs-editwatchlist-edit": "檢視與移除在您監視清單上的標題",
        "prefs-editwatchlist-raw": "編輯原始監視清單",
        "prefs-editwatchlist-clear": "清除您的監視清單",
-       "prefs-watchlist-days": "監視清單中顯示的天數:",
+       "prefs-watchlist-days": "監視清單中顯示的天數:",
        "prefs-watchlist-days-max": "最多 $1 {{PLURAL:$1|天}}",
        "prefs-watchlist-edits": "展開監視清單中顯示的變更數量上限:",
        "prefs-watchlist-edits-max": "數量上限:1000",
-       "prefs-watchlist-token": "監視清單鑰:",
+       "prefs-watchlist-token": "監視清單鑰:",
        "prefs-misc": "其他",
        "prefs-resetpass": "變更密碼",
-       "prefs-changeemail": "變更電子郵件",
-       "prefs-setemail": "設定電子郵件址",
+       "prefs-changeemail": "變更電子郵件地址",
+       "prefs-setemail": "設定電子郵件址",
        "prefs-email": "電子郵件選項",
        "prefs-rendering": "外觀",
        "saveprefs": "儲存",
        "prefs-common-css-js": "所有外觀共用的 CSS/JavaScript:",
        "prefs-reset-intro": "您可以使用此頁面重設您的偏好設定為網站預設值。\n這個動作將無法復原。",
        "prefs-emailconfirm-label": "電子郵件確認:",
-       "youremail": "電子郵件:",
+       "youremail": "Email:",
        "username": "{{GENDER:$1|使用者名稱}}:",
        "prefs-memberingroups": "{{GENDER:$2|所屬}}{{PLURAL:$1|群組}}:",
        "prefs-registration": "註冊時間:",
        "gender-male": "他編輯了 Wiki 頁面",
        "gender-female": "她編輯了 Wiki 頁面",
        "prefs-help-gender": "此偏好設定為選填欄位。\n系統會使用您選擇的方式稱呼您,對他人提及您時也會使用適當語法稱呼。\n此項資訊會被公開。",
-       "email": "電子郵件",
+       "email": "Email",
        "prefs-help-realname": "真實姓名為選填欄位。\n若提供,真實姓名可能會用來作為您的作品的署名。",
-       "prefs-help-email": "電子郵件位址為選填欄位。\n但在重設密碼時會使用,而您很有可能會忘記密。",
-       "prefs-help-email-others": "您亦可以選擇讓其他使用者用電子郵件與您聯絡,透過您的使用者或對話頁面上方的連結。\n您的電子郵件位址不會實際告知給其他要聯絡您的使用者。",
+       "prefs-help-email": "電子郵件地址為選填欄位。\n但在重設密碼時會使用,而您很有可能會忘記密碼。",
+       "prefs-help-email-others": "您亦可以選擇讓其他使用者透過您的電子郵件、使用者頁面或對話頁面的連結與您聯絡。\n您的電子郵件地址不會洩漏給其他要聯絡您的使用者。",
        "prefs-help-email-required": "電子郵件地址是必填項目。",
        "prefs-info": "基本資訊",
        "prefs-i18n": "國際化",
        "prefs-advancedwatchlist": "進階選項",
        "prefs-displayrc": "顯示選項",
        "prefs-displaywatchlist": "顯示選項",
-       "prefs-tokenwatchlist": "鑰",
+       "prefs-tokenwatchlist": "鑰",
        "prefs-diffs": "差異",
        "prefs-help-prefershttps": "此偏好設定將於您下次登入時生效。",
        "prefswarning-warning": "您對您的偏好設定所做的變更尚未儲存。\n若您未點選 \"$1\" 離開此頁面,將不會更新您的偏好設定。",
        "prefs-tabs-navigation-hint": "提示:您可使用左、右方向鍵切換頁籤。",
-       "email-address-validity-valid": "電子郵件址有效",
-       "email-address-validity-invalid": "請輸入一個有效的電子郵件址",
+       "email-address-validity-valid": "電子郵件址有效",
+       "email-address-validity-invalid": "請輸入一個有效的電子郵件址",
        "userrights": "使用者權限管理",
        "userrights-lookup-user": "管理使用者群組",
        "userrights-user-editname": "請輸入使用者名稱:",
        "userrights-groupsmember-auto": "所屬隱含群組:",
        "userrights-groups-help": "您可以更改此使用者所屬的群組:\n* 已勾選的核選方塊代表該使用者屬於該群組。\n* 未勾選的核選方塊代表該使用者不屬於該群組。\n* 有 * 號標示代表一旦加入該群組後便不能移除,反之亦然。",
        "userrights-reason": "原因:",
-       "userrights-no-interwiki": "您沒有權限去編輯其它使用者在 Wiki 上的權限。",
+       "userrights-no-interwiki": "您沒有權限去編輯其他 Wiki 上的使用者權限。",
        "userrights-nodatabase": "資料庫 $1 不存在或不在本地主機的。",
        "userrights-nologin": "您必須 [[Special:UserLogin|登入]] 管理員帳號以指定使用者權限。",
        "userrights-notallowed": "您沒有權限加入或刪除使用者權限。",
        "group-bot-member": "機器人",
        "group-sysop-member": "{{GENDER:$1|管理員}}",
        "group-bureaucrat-member": "行政員",
-       "group-suppress-member": "監督員",
+       "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}}:監督",
+       "grouppage-suppress": "{{ns:project}}:監督",
        "right-read": "閱讀頁面",
        "right-edit": "編輯頁面",
        "right-createpage": "建立頁面 (不含討論頁面)",
        "right-editsemiprotected": "編輯保護層級為 \"{{int:protect-level-autoconfirmed}}\" 的頁面",
        "right-editcontentmodel": "編輯頁面的內容模型",
        "right-editinterface": "編輯使用者介面",
-       "right-editusercssjs": "編輯其他使用者的 CSS 和 JavaScript 檔案",
-       "right-editusercss": "編輯其他使用者的 CSS 檔",
-       "right-edituserjs": "編輯其他使用者的 JavaScript 檔",
+       "right-editusercssjs": "編輯其他使用者的 CSS 與 JavaScript 檔",
+       "right-editusercss": "編輯其他使用者的 CSS 檔",
+       "right-edituserjs": "編輯其他使用者的 JavaScript 檔",
        "right-editmyusercss": "編輯自己的使用者 CSS 檔",
        "right-editmyuserjs": "編輯自己的使用者 JavaScript 檔",
        "right-viewmywatchlist": "檢視自己的監視清單",
        "right-editmywatchlist": "編輯自己的監視清單。注意,即使無此權限,某些操作仍會新增頁面至監視清單。",
-       "right-viewmyprivateinfo": "檢視自己的私隱資料 (如:電子郵件址及真實姓名)",
-       "right-editmyprivateinfo": "編輯自己的隱私資料 (如:電子郵件址及真實姓名)",
+       "right-viewmyprivateinfo": "檢視自己的私隱資料 (如:電子郵件址及真實姓名)",
+       "right-editmyprivateinfo": "編輯自己的隱私資料 (如:電子郵件址及真實姓名)",
        "right-editmyoptions": "編輯自己的偏好設定",
        "right-rollback": "快速還原最後一位使用者對某一頁面的編輯",
        "right-markbotedits": "標示還原編輯為機械人編輯",
        "right-userrights-interwiki": "編輯使用者在其它 Wiki 上的權限",
        "right-siteadmin": "鎖定和解除鎖定資料庫",
        "right-override-export-depth": "匯出頁面包含連結內容,深度上限為 5 層",
-       "right-sendemail": "傳送電子郵件其他使用者",
+       "right-sendemail": "傳送電子郵件聯絡其他使用者",
        "right-passwordreset": "檢視重設密碼電子郵件",
        "right-managechangetags": "建立並自資料庫移除[[Special:Tags|標籤]]",
        "newuserlogpage": "建立使用者日誌",
        "action-editcontentmodel": "編輯頁面的內容模型",
        "action-managechangetags": "建立並自資料庫移除標籤",
        "nchanges": "$1 次變更",
-       "enhancedrc-since-last-visit": "自上次訪問已有 $1",
+       "enhancedrc-since-last-visit": "{{PLURAL:$1|自上次拜訪}}已有 $1",
        "enhancedrc-history": "歷史",
        "recentchanges": "近期變更",
        "recentchanges-legend": "近期變更選項",
        "recentchanges-summary": "追蹤 Wiki 中此頁面的近期變更。",
        "recentchanges-noresult": "於指定時間內沒有符合條件的變更。",
        "recentchanges-feed-description": "追蹤 Wiki 中此訂閱來源的近期變更。",
-       "recentchanges-label-newpage": "該編輯建立新頁面",
+       "recentchanges-label-newpage": "該編輯建立新頁面",
        "recentchanges-label-minor": "該編輯是一個小修訂",
        "recentchanges-label-bot": "該編輯由機器人執行",
        "recentchanges-label-unpatrolled": "該編輯尚未巡查",
        "rcshowhideliu": "$1 已註冊的使用者",
        "rcshowhideliu-show": "顯示",
        "rcshowhideliu-hide": "隱藏",
-       "rcshowhideanons": "$1 匿名的使用者",
+       "rcshowhideanons": "$1 位匿名使用者",
        "rcshowhideanons-show": "顯示",
        "rcshowhideanons-hide": "隱藏",
        "rcshowhidepatr": "$1 巡查過的編輯",
        "rcshowhidemine": "$1 我的編輯",
        "rcshowhidemine-show": "顯示",
        "rcshowhidemine-hide": "隱藏",
-       "rclinks": "顯示最近 $2 天內的 $1 次更改。<br />$3",
+       "rclinks": "顯示近期 $2 天內的 $1 次變更。<br />$3",
        "diff": "差異",
        "hist": "歷史",
        "hide": "隱藏",
        "upload-file-error": "內部錯誤",
        "upload-file-error-text": "嘗試在伺服器上建立暫存檔案時發生內部錯誤。\n請連絡 [[Special:ListUsers/sysop|管理員]]。",
        "upload-misc-error": "不明的上傳錯誤",
-       "upload-misc-error-text": "上傳時發生不明錯誤。\n請檢查您的 URL 是否有效且可存取,然後再重試一次。\n如果仍有問題,請聯絡 [[Special:ListUsers/sysop|管理員]]。",
+       "upload-misc-error-text": "上傳時發生不明錯誤。\n請檢查您的 URL 是否有效且可存取,然後再重試一次。\n如果仍有問題,請聯絡[[Special:ListUsers/sysop|管理員]]。",
        "upload-too-many-redirects": "該 URL 重新導向至太多其他位址",
        "upload-http-error": "發生 HTTP 錯誤:$1",
        "upload-copy-upload-invalid-domain": "此網域不允許複製上傳的檔案。",
        "uploadstash-refresh": "更新檔案清單",
        "invalid-chunk-offset": "無效區塊位置",
        "img-auth-accessdenied": "拒絕存取",
-       "img-auth-nopathinfo": "缺少 PATH_INFO 參數。\n您的伺服器環境未傳遞此資訊,\n您可能使用 CGI-based 的伺服器,不支援 img_auth。\n請參考 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
+       "img-auth-nopathinfo": "缺少 PATH_INFO 參數。\n您安裝的伺服器未傳遞此資訊,\n您可能使用 CGI 為基礎的伺服器,且不支援 img_auth 功能。\n請參考 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
        "img-auth-notindir": "已設定的上傳目錄清單中不存在您指定的路徑。",
        "img-auth-badtitle": "無法使用 \"$1\" 建立有效的標題。",
        "img-auth-nologinnWL": "您尚未登入,且 \"$1\" 並未在允許清單上。",
        "http-timed-out": "HTTP 請求已逾時。",
        "http-curl-error": "擷取 URL 時錯誤:$1",
        "http-bad-status": "進行 HTTP 請求發生問題:$1 $2",
-       "upload-curl-error6": "無法連線 URL",
-       "upload-curl-error6-text": "無法連線指定的 URL。\n請重新檢查 URL 是否正確,且確認網站是否正常運作。",
+       "upload-curl-error6": "無法連線 URL",
+       "upload-curl-error6-text": "無法連線至指定的 URL 。\n請重新檢查 URL 是否正確,且確認網站是否正常運作。",
        "upload-curl-error28": "上傳逾時",
        "upload-curl-error28-text": "網站超出回應時間限制。\n請檢查該網站是否正常運作,並稍候一會再試一次。\n建議您可在非網路尖峰時段再嘗試連線。",
        "license": "授權條款:",
        "nolicense": "尚未選擇",
        "licenses-edit": "編輯授權條款選項",
        "license-nopreview": "(不可預覽)",
-       "upload_source_url": "(您選擇的檔案來自有效可公開存取的 URL)",
+       "upload_source_url": "(您選擇的檔案來自有效可公開存取的 URL)",
        "upload_source_file": "(您在您的電腦上選擇的檔案)",
        "listfiles-delete": "刪除",
        "listfiles-summary": "此特殊頁面顯示所有已上傳的檔案。",
        "nolinkstoimage": "沒有頁面連結到此檔案。",
        "morelinkstoimage": "檢視連結到這個檔案的[[Special:WhatLinksHere/$1|更多連結]]。",
        "linkstoimage-redirect": "$1 (檔案重新導向) $2",
-       "duplicatesoffile": "以ä¸\8b $1 å\80\8bæª\94æ¡\88è\88\87æ­¤æª\94æ¡\88é\87\8dè¦\86 ([[Special:FileDuplicateSearch/$2|äº\86解詳細資訊]]):",
+       "duplicatesoffile": "以ä¸\8b $1 å\80\8bæª\94æ¡\88è\88\87æ­¤æª\94æ¡\88é\87\8dè¤\87 ([[Special:FileDuplicateSearch/$2|ç\9e­解詳細資訊]]):",
        "sharedupload": "此檔案來自 $1 且可能被其他專案所使用。",
-       "sharedupload-desc-there": "此檔案來自 $1 且可能被其他專案所使用。\n請參考 [$2 檔案描述頁面] 解進一步資訊。",
-       "sharedupload-desc-here": "æ­¤æª\94æ¡\88ä¾\86è\87ª $1 ä¸\94å\8f¯è\83½è¢«å\85¶ä»\96å°\88æ¡\88æ\89\80使ç\94¨ã\80\82\n以ä¸\8bç\82ºè©²æª\94æ¡\88æ\96¼ [$2 æª\94æ¡\88æ\8f\8fè¿°é \81é\9d¢] ç\9a\84å\85§å®¹æ\8f\8fè¿°。",
+       "sharedupload-desc-there": "此檔案來自 $1 且可能被其他專案所使用。\n請參考 [$2 檔案描述頁面] 解進一步資訊。",
+       "sharedupload-desc-here": "æ­¤æª\94æ¡\88ä¾\86è\87ª $1 ä¸\94å\8f¯è\83½è¢«å\85¶ä»\96å°\88æ¡\88æ\89\80使ç\94¨ã\80\82\nä¸\8bæ\96¹é¡¯ç¤ºæ­¤æª\94æ¡\88æ\96¼ [$2 æª\94æ¡\88æ\8f\8fè¿°é \81é\9d¢] ç\9a\84æ\8f\8fè¿°å\85§å®¹。",
        "sharedupload-desc-edit": "此檔案來自 $1 且可能被其他專案所使用。\n您可在該檔案的 [$2 檔案描述頁面] 上編輯內容描述。",
        "sharedupload-desc-create": "此檔案來自 $1 且可能被其他專案所使用。\n若您想要編輯內容描述可至 [$2 檔案描述頁面]。",
        "filepage-nofile": "不存在此名稱的檔案。",
        "filedelete-nofile-old": "查無 <strong>$1</strong> 擁有指定的屬性的封存版本。",
        "filedelete-otherreason": "其它/額外的原因:",
        "filedelete-reason-otherlist": "其它原因",
-       "filedelete-reason-dropdown": "*常è¦\8bç\9a\84å\88ªé\99¤å\8e\9få\9b \n** ä¾µç\8a¯ç\89\88æ¬\8a\n** æª\94æ¡\88é\87\8dè¦\86",
+       "filedelete-reason-dropdown": "*常è¦\8bç\9a\84å\88ªé\99¤å\8e\9få\9b \n** ä¾µç\8a¯ç\89\88æ¬\8a\n** æª\94æ¡\88é\87\8dè¤\87",
        "filedelete-edit-reasonlist": "編輯刪除原因",
        "filedelete-maintenance": "維護期間檔案刪除和還原暫停使用。",
        "filedelete-maintenance-title": "無法刪除檔案",
        "mimetype": "MIME 類型:",
        "download": "下載",
        "unwatchedpages": "未監視的頁面",
-       "listredirects": "重新導向頁面清單",
+       "listredirects": "重新導向清單",
        "listduplicatedfiles": "重複檔案清單",
        "listduplicatedfiles-summary": "此清單中包含最新版本的檔案與其他檔案重複的清單,本清單只顯示本地檔案。",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] 有[[$3|其他 $2 個重複檔案]]。",
-       "unusedtemplates": "æ\9cªä½¿ç\94¨ç\9a\84樣板",
+       "unusedtemplates": "æ\9cªä½¿ç\94¨ç\9a\84模板",
        "unusedtemplatestext": "此頁面列出所有於 {{ns:template}} 命名空間下未被其他頁面引用的模板。\n在刪除前,仍需檢查是否有連結這些模板的其他頁面。",
        "unusedtemplateswlh": "其他連結",
        "randompage": "隨機頁面",
        "pageswithprop-prophidden-long": "已隱藏過長的屬性值 ($1)",
        "pageswithprop-prophidden-binary": "已隱藏二進位屬性值 ($1)",
        "doubleredirects": "雙重的重新導向",
-       "doubleredirectstext": "此頁列出所有重新導向頁面連結到另一個重新導向頁面的頁面清單。每一列都包含第一次和第二次重新導向頁面的連結,以及第二次重新導向之後的目標,第二次重新導向之後的目標通常是 \"實際\" 的目標頁面,也是第一個重新導向頁面應該指向的頁面。\n<del>刪節線</del> 代表該項目的問題已經解決。",
+       "doubleredirectstext": "此頁列出重新導向至另一個重新導向頁面的頁面。每一列都包含第一次和第二次重新導向頁面的連結,以及第二次重新導向之後的目標,第二次重新導向之後的目標通常是「實際」的目標頁面,也是第一個重新導向頁面應該指向的頁面。\n<del>刪節線</del> 代表該項目的問題已經解決。",
        "double-redirect-fixed-move": "[[$1]] 已完成移動。\n此頁面已自動更新並重新導向至 [[$2]]。",
        "double-redirect-fixed-maintenance": "在維護作業時自動修正雙重的重新導向自 [[$1]] 至 [[$2]]。",
        "double-redirect-fixer": "重新導向修正者",
        "unusedimages": "未使用的檔案",
        "wantedcategories": "需要的分類",
        "wantedpages": "需要的頁面",
+       "wantedpages-summary": "以下為最多連結的不存在頁面,除只有重新導向連結的頁面外。 若要取得不存在的重新導向頁面,請至 [[{{#special:BrokenRedirects}}]]。",
        "wantedpages-badtitle": "結果集合中的標題無效:$1",
        "wantedfiles": "需要的檔案",
        "wantedfiletext-cat": "下列檔案被時用,但檔案不存在。 外部儲存庫的檔案儘管存在,但此清單仍會列出。 這類誤報的項目會以 <del>刪除線</del> 標示。 另外,頁面內嵌檔案不存在會於清單 [[:$1]] 中顯示。",
        "mostlinkedtemplates": "被引用最多的頁面",
        "mostcategories": "最多分類的頁面",
        "mostimages": "被連結最多的檔案",
-       "mostinterwikis": "最多跨 Wiki 的頁面",
+       "mostinterwikis": "最多跨 Wiki 連結的頁面",
        "mostrevisions": "最多修訂的頁面",
        "prefixindex": "所有頁面與字首",
        "prefixindex-namespace": "所有含字首的頁面 ($1 命名空間)",
        "nopagetext": "您所指定的目標頁面並不存在。",
        "pager-newer-n": "較新 $1 筆",
        "pager-older-n": "較舊 $1 筆",
-       "suppress": "監督",
+       "suppress": "失職",
        "querypage-disabled": "此特殊頁面因考量效能問題已被停用。",
        "apihelp": "API 說明",
        "apihelp-no-such-module": "查無模組 \"$1\"。",
        "listgrouprights-rights": "權限",
        "listgrouprights-helppage": "Help:Group rights",
        "listgrouprights-members": "(成員清單)",
-       "listgrouprights-addgroup": "加入{{PLURAL:$2|群組|群組}}:$1",
+       "listgrouprights-addgroup": "加入{{PLURAL:$2|群組}}:$1",
        "listgrouprights-removegroup": "移除{{PLURAL:$2|群組|群組}}:$1",
        "listgrouprights-addgroup-all": "加入所有群組",
        "listgrouprights-removegroup-all": "移除所有群組",
        "trackingcategories-nodesc": "沒有可用的描述。",
        "trackingcategories-disabled": "已停用分類",
        "mailnologin": "沒有傳送位址",
-       "mailnologintext": "您必須先 [[Special:UserLogin|登入]]\n並在 [[Special:Preferences|偏好設定]]\n中設定一個有效的電子郵件位址才可以傳送信件給其他使用者。",
-       "emailuser": "Email 此使用者",
-       "emailuser-title-target": "Email 給此{{GENDER:$1|使用者}}",
-       "emailuser-title-notarget": "E-mail 使用者",
+       "mailnologintext": "您必須先 [[Special:UserLogin|登入]]\n並在 [[Special:Preferences|偏好設定]]\n中設定一個有效的電子郵件地址才可以傳送郵件給其他使用者。",
+       "emailuser": "Email 聯絡此使用者",
+       "emailuser-title-target": "E-mail 聯絡此{{GENDER:$1|使用者}}",
+       "emailuser-title-notarget": "E-mail 聯絡使用者",
        "emailpage": "E-mail 給使用者",
        "emailpagetext": "您可以使用以下表格傳送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件位址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。",
        "defemailsubject": "{{SITENAME}} 使用者 \"$1\" 寄來的電子郵件",
        "usermaildisabled": "使用者電子郵件已停用",
-       "usermaildisabledtext": "您不能傳送信件到這個 Wiki 上的其他使用者",
-       "noemailtitle": "沒有電子郵件位址",
-       "noemailtext": "此使用者尚未指定一個有效的電子郵件址。",
+       "usermaildisabledtext": "您不能傳送電子郵件到本 Wiki 上的其他使用者",
+       "noemailtitle": "無電子郵件地址",
+       "noemailtext": "此使用者尚未指定一個有效的電子郵件址。",
        "nowikiemailtext": "此使用者選擇不接收其他使用者的信件。",
        "emailnotarget": "收件人不存在或無效的使用者名稱。",
-       "emailtarget": "輸入收件人使用者名稱",
+       "emailtarget": "輸入收件人使用者名稱",
        "emailusername": "使用者名稱:",
        "emailusernamesubmit": "送出",
-       "email-legend": "傳送電子郵件另一位 {{SITENAME}} 的使用者",
+       "email-legend": "傳送電子郵件聯絡另一位 {{SITENAME}} 的使用者",
        "emailfrom": "寄件人:",
        "emailto": "收件人:",
        "emailsubject": "主旨:",
        "emailmessage": "訊息:",
-       "emailsend": "å\82³é\80\81",
+       "emailsend": "å¯\84å\87º",
        "emailccme": "傳送一份訊息副本到我的電子郵件信箱。",
        "emailccsubject": "您寄給 $1 的訊息副本:$2",
        "emailsent": "已寄出電子郵件",
        "emailsenttext": "已寄出您的電子郵件訊息。",
-       "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"Email 此使用者\" 功能寄給 $2。",
-       "usermessage-summary": "留給系統訊息。",
+       "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"Email 聯絡此使用者\" 功能寄給 $2。",
+       "usermessage-summary": "留訊息至系統。",
        "usermessage-editor": "系統訊息",
        "watchlist": "監視清單",
        "mywatchlist": "監視清單",
        "deletecomment": "原因:",
        "deleteotherreason": "其它/額外的原因:",
        "deletereasonotherlist": "其它原因",
-       "deletereason-dropdown": "* å¸¸è¦\8bç\9a\84å\88ªé\99¤å\8e\9få\9b \n** æ¿«ç\99¼å»£å\91\8aè¨\8aæ\81¯\n** ç ´å£\9e\n** ä¾µç\8a¯ç\89\88æ¬\8a\n** ä½\9cè\80\85è«\8bæ±\82\n** æ\90\8då£\9eç\9a\84é\87\8dæ\96°å°\8eå\90\91é\80£çµ\90",
+       "deletereason-dropdown": "* å¸¸è¦\8bç\9a\84å\88ªé\99¤å\8e\9få\9b \n** æ¿«ç\99¼å»£å\91\8aè¨\8aæ\81¯\n** ç ´å£\9e\n** ä¾µç\8a¯ç\89\88æ¬\8a\n** ä½\9cè\80\85è¦\81æ±\82\n** æ\90\8då£\9eç\9a\84é\87\8dæ\96°å°\8eå\90\91",
        "delete-edit-reasonlist": "編輯刪除原因",
        "delete-toobig": "此頁面含有大量的編輯歷史,超過 $1 次修訂。\n已限制刪除此類頁面的動作,以避免意外中斷 {{SITENAME}} 的運作。",
        "delete-warning-toobig": "此頁面含有大量的編輯歷史,超過 $1 次修訂。\n刪除該頁面可能會中斷 {{SITENAME}} 的資料庫運作;\n請小心執行此動作。",
        "editcomment": "編輯摘要為:\"''$1''\"。",
        "revertpage": "已還原 [[Special:Contributions/$2|$2]] ([[User talk:$2|對話]]) 的編輯為最後由 [[User:$1|$1]] 所修訂的版本",
        "revertpage-nouser": "已還隱藏使用者的編輯為最後 {{GENDER:$1|[[User:$1|$1]]}} 修訂的版本",
-       "rollback-success": "已還原 $1 做的編輯;\n更變回最後由 $2 修訂的版本。",
+       "rollback-success": "已還原 $1 所做的編輯;\n變更回由 $2 修訂的最後一個版本。",
        "sessionfailure-title": "連線階段失敗",
        "sessionfailure": "您的登入連線階段似乎有問題,\n為了預防連線階段受到劫持攻擊,此動作已經被取消。\n請返回上一頁,重新讀取該頁面再試一次。",
        "protectlogpage": "保護日誌",
        "sp-contributions-toponly": "只顯示最新修訂的編輯",
        "sp-contributions-newonly": "只顯示建立頁面的編輯",
        "sp-contributions-submit": "搜尋",
-       "whatlinkshere": "連頁面",
-       "whatlinkshere-title": "連結 \"$1\" 的頁面",
+       "whatlinkshere": "連結至此的頁面",
+       "whatlinkshere-title": "連結 \"$1\" 的頁面",
        "whatlinkshere-page": "頁面:",
        "linkshere": "以下頁面連結至 <strong>[[:$1]]</strong>:",
        "nolinkshere": "沒有頁面連結至 <strong>[[:$1]]</strong>。",
        "istemplate": "引用",
        "isimage": "檔案連結",
        "whatlinkshere-prev": "前 $1 筆",
-       "whatlinkshere-next": "{{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 檔案連結",
        "ipboptions": "2 小時:2 hours,1 天:1 day,3 天:3 days,1 週:1 week,2 週:2 weeks,1 個月:1 month,3 個月:3 months,6 個月:6 months,1 年:1 year,無限期:infinite",
        "ipbhidename": "在編輯及清單中隱藏使用者名稱",
        "ipbwatchuser": "監視這位使用者的使用者頁面及其對話頁面",
-       "ipb-disableusertalk": "é\81¿å\85\8då\9c¨å°\81é\8e\96此使ç\94¨è\80\85ç\9a\84æ\9c\9fé\96\93編輯自己的對話頁面",
+       "ipb-disableusertalk": "é\98²æ­¢æ­¤ä½¿ç\94¨è\80\85å\9c¨å°\81æ\9c\9fé\96\93編輯ä»\96自己的對話頁面",
        "ipb-change-block": "使用現有設定重新封鎖使用者",
        "ipb-confirm": "確認封鎖",
        "badipaddress": "無效的 IP 位址",
        "ip_range_invalid": "無效的 IP 範圍。",
        "ip_range_toolarge": "不允許封鎖範圍大於 /$1。",
        "proxyblocker": "代理伺服器封鎖器",
-       "proxyblockreason": "å\9b æ\82¨ç\9a\84 IP ä½\8då\9d\80æ\98¯é\96\8bæ\94¾ä»£ç\90\86伺æ\9c\8då\99¨ï¼\8c已被å°\81é\8e\96ã\80\82\nè«\8bè\81¯ç¹«您的網路服務供應商或您所在組織的技術支援,告知他們此嚴重的安全性問題。",
+       "proxyblockreason": "å\9b æ\82¨ç\9a\84 IP ä½\8då\9d\80æ\98¯é\96\8bæ\94¾ä»£ç\90\86伺æ\9c\8då\99¨ï¼\8c已被å°\81é\8e\96ã\80\82\nè«\8bè\81¯çµ¡您的網路服務供應商或您所在組織的技術支援,告知他們此嚴重的安全性問題。",
        "sorbsreason": "您的 IP 位址在 {{SITENAME}} 使用的 DNSBL 列為開放代理伺服器。",
        "sorbs_create_account_reason": "您連線到 {{SITENAME}} 的 IP 位址被 DNSBL 列為開放代理伺服器。\n您不能建立帳號。",
        "xffblockreason": "您的 IP 位址使用 X-Forwarded-For 標頭,您或您使用的代理伺服器已被封鎖。\n封鎖的原因為:$1",
        "export-addnstext": "使用命名空間新增頁面:",
        "export-addns": "新增",
        "export-download": "儲存為檔案",
-       "export-templates": "å\8c\85å\90«æ¨£板",
+       "export-templates": "å\8c\85å\90«æ¨¡板",
        "export-pagelinks": "包含連結的頁面深度:",
        "allmessages": "系統訊息",
        "allmessagesname": "名稱",
        "thumbnail_image-missing": "檔案遺失:$1",
        "thumbnail_image-failure-limit": "最近顯示此縮圖已發生太多次失敗 ($1 次或更多),請稍後再試。",
        "import": "匯入頁面",
-       "importinterwiki": "Transwiki 匯入",
-       "import-interwiki-text": "請選擇一個 Wiki 與頁面標題以進行匯入。\n會同時記錄修訂日期和編輯者的名稱。\n所有的 Transwiki 匯入操作會被記錄在 [[Special:Log/import|匯入日誌]]。",
+       "importinterwiki": "從其他 wiki 匯入",
+       "import-interwiki-text": "請選擇一個 Wiki 與頁面標題以進行匯入。\n會同時記錄修訂日期和編輯者的名稱。\n所有的從跨 Wiki 匯入操作都會被記錄在 [[Special:Log/import|匯入日誌]]。",
        "import-interwiki-sourcewiki": "來源 Wiki:",
        "import-interwiki-sourcepage": "來源頁面:",
        "import-interwiki-history": "複製此頁的所有歷史修訂",
-       "import-interwiki-templates": "å\8c\85å\90«æ\89\80æ\9c\89樣板",
+       "import-interwiki-templates": "å\8c\85å\90«æ\89\80æ\9c\89模板",
        "import-interwiki-submit": "匯入",
        "import-interwiki-namespace": "目標命名空間:",
        "import-interwiki-rootpage": "目標根頁面 (選填):",
        "importcantopen": "無法開啟匯入檔案",
        "importbadinterwiki": "無效的 Interwiki 連結",
        "importsuccess": "已完成匯入!",
-       "importnosources": "未定義任何 Transwiki 匯入來源且已關閉使用歷史記錄上傳功能。",
+       "importnosources": "未定義任何已匯入的 wiki 來源且已關閉使用歷史記錄上傳功能。",
        "importnofile": "未上傳匯入檔案。",
        "importuploaderrorsize": "上傳匯入檔案失敗。\n檔案大小超過允許上傳大小。",
        "importuploaderrorpartial": "上傳匯入檔案失敗。\n僅上傳部份檔案。",
        "import-rootpage-nosubpage": "命名空間 \"$1\" 的根頁面不允許子頁面。",
        "importlogpage": "匯入日誌",
        "importlogpagetext": "管理性匯入其他 Wiki 的頁面及編輯歷史記錄。",
-       "import-logentry-upload": "使用檔案上傳匯入 [[$1]]",
        "import-logentry-upload-detail": "已匯入 $1 筆{{PLURAL:$1|修訂}}",
-       "import-logentry-interwiki": "Transwiki 頁面 $1",
        "import-logentry-interwiki-detail": "已從 $2 匯入 $1 筆{{PLURAL:$1|修訂}}",
        "javascripttest": "JavaScript 測試",
        "javascripttest-pagetext-noframework": "此頁面保留用來作為 JavaScript 測試使用。",
        "javascripttest-pagetext-skins": "選擇執行測試的外觀:",
        "javascripttest-qunit-intro": "請參考 mediawiki.org 的 [$1 測試說明文件]。",
        "tooltip-pt-userpage": "您的使用者頁面",
-       "tooltip-pt-anonuserpage": "您編輯使用的 IP 位址所對應的使用者頁面",
+       "tooltip-pt-anonuserpage": "您正使用以下身份編輯該 IP 位址的使用者頁面 :",
        "tooltip-pt-mytalk": "您的對話頁面",
        "tooltip-pt-anontalk": "有關來自此 IP 位址編輯的討論",
        "tooltip-pt-preferences": "您的偏好設定",
-       "tooltip-pt-watchlist": "您監視變更頁面清單",
+       "tooltip-pt-watchlist": "您正在監視變更的頁面清單",
        "tooltip-pt-mycontris": "您的貢獻清單",
-       "tooltip-pt-login": "å\84\98管é\9d\9eå¿\85è¦\81ï¼\8cä»\8d建議æ\82¨ç\99»å\85¥。",
+       "tooltip-pt-login": "建議æ\82¨å\85\88ç\99»å\85¥ï¼\8cä½\86並é\9d\9eå¿\85è¦\81。",
        "tooltip-pt-logout": "登出",
        "tooltip-pt-createaccount": "我們會鼓勵您建立一個帳號並且登入,即使這不是必要的動作。",
        "tooltip-ca-talk": "有關頁面內容的討論",
        "tooltip-search-go": "若與此名稱相符的頁面存在,前往該頁面",
        "tooltip-search-fulltext": "搜尋使用此文字的頁面",
        "tooltip-p-logo": "前往首頁",
-       "tooltip-n-mainpage": "前往頁",
+       "tooltip-n-mainpage": "前往頁",
        "tooltip-n-mainpage-description": "前往首頁",
        "tooltip-n-portal": "關於本專案、您可以做什麼、哪裡可以找到您需要的事物",
        "tooltip-n-currentevents": "於最新動態中尋找背景資訊",
        "tooltip-feed-rss": "訂閱此頁面的 RSS feed",
        "tooltip-feed-atom": "訂閱此頁面的 Atom feed",
        "tooltip-t-contributions": "此使用者的貢獻清單",
-       "tooltip-t-emailuser": "傳送電子郵件給這個使用者",
+       "tooltip-t-emailuser": "傳送電子郵件聯絡這位使用者",
        "tooltip-t-info": "更多關於此頁面的資訊",
        "tooltip-t-upload": "上傳檔案",
        "tooltip-t-specialpages": "全部特殊頁面的清單",
        "tooltip-ca-nstab-project": "檢視專案頁面",
        "tooltip-ca-nstab-image": "檢視檔案頁面",
        "tooltip-ca-nstab-mediawiki": "檢視系統訊息",
-       "tooltip-ca-nstab-template": "檢è¦\96樣板",
+       "tooltip-ca-nstab-template": "檢è¦\96模板",
        "tooltip-ca-nstab-help": "檢視說明頁面",
        "tooltip-ca-nstab-category": "檢視分類頁面",
        "tooltip-minoredit": "標記為小修訂",
        "tooltip-preview": "請在儲存前預覽您的變更!",
        "tooltip-diff": "顯示您對內容所做的變更",
        "tooltip-compareselectedversions": "檢視此頁兩個已選擇的修訂間的差異",
-       "tooltip-watch": "將此頁加入您的監視清單",
+       "tooltip-watch": "新增此頁面至您的監視清單",
        "tooltip-watchlistedit-normal-submit": "移除標題",
        "tooltip-watchlistedit-raw-submit": "更新監視清單",
        "tooltip-recreate": "無論是否被刪除,重新建立該頁面。",
        "tooltip-upload": "開始上傳",
-       "tooltip-rollback": "é»\9eé\81¸ \"é\82\84å\8e\9f\" é\82\84å\8e\9fè\87³ä¸\8a位貢獻者對此頁面的編輯",
+       "tooltip-rollback": "é»\9eé\81¸ \"é\82\84å\8e\9f\" é\80£çµ\90便å\8f¯é\82\84å\8e\9fè\87³ä¸\8aä¸\80位貢獻者對此頁面的編輯",
        "tooltip-undo": "\"還原\" 可還原此編輯並以預覽模式開啟編輯表單,讓您可在摘要中加入原因。",
        "tooltip-preferences-save": "儲存偏好設定",
        "tooltip-summary": "請輸入簡短摘要",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* 此 CSS 會套用至所有的介面外觀 */",
-       "print.css": "/* 此 CSS 會影響列印版輸出 */",
-       "noscript.css": "/* æ­¤ CSS æ\9c\83å½±é\9f¿æ²\92æ\9c\89å\95\93用 JavaScript 的使用者 */",
+       "print.css": "/* 此處的 CSS 會影響列印輸出 */",
+       "noscript.css": "/* æ­¤ CSS æ\9c\83å½±é\9f¿æ²\92æ\9c\89å\95\9f用 JavaScript 的使用者 */",
        "group-autoconfirmed.css": "/* 此 CSS 會影響自動確認的使用者 */",
        "group-bot.css": "/* 此 CSS 會影響機器人 */",
        "group-sysop.css": "/* 這裡的 CSS 會影響管理員 */",
        "pageinfo-few-watchers": "少於 $1 名監視者",
        "pageinfo-redirects-name": "指向此頁面的重新導向頁面數量",
        "pageinfo-subpages-name": "此頁面的子頁面數",
-       "pageinfo-subpages-value": "$1 ($2 個重新導向頁面; $3 個非重新導向頁面)",
+       "pageinfo-subpages-value": "$1 ($2 個{{PLURAL:$2|重新導向}}; $3 個{{PLURAL:$3|非重新導向}})",
        "pageinfo-firstuser": "頁面建立者",
        "pageinfo-firsttime": "頁面建立日期",
        "pageinfo-lastuser": "最近編輯者",
        "variantname-zh": "不轉換",
        "variantname-gan-hans": "‪中文(简体)",
        "variantname-gan-hant": "‪中文(繁體)",
-       "metadata": "後設資料",
+       "metadata": "詮釋資料",
        "metadata-help": "此檔案包含額外的資訊,可能由數位相機或掃描機所建立的。\n若修改此檔案,部份資訊將無法保留。",
        "metadata-expand": "顯示詳細資料",
        "metadata-collapse": "隱藏詳細資料",
        "exif-countrydest": "顯示國家",
        "exif-countrycodedest": "顯示國家代碼",
        "exif-provinceorstatedest": "顯示省或州",
-       "exif-citydest": "顯示城市",
+       "exif-citydest": "顯示城市",
        "exif-sublocationdest": "顯示城市詳細地點",
        "exif-objectname": "簡稱",
        "exif-specialinstructions": "特別說明",
        "exif-editstatus": "圖片編輯狀態",
        "exif-urgency": "緊急性",
        "exif-fixtureidentifier": "夾具名稱",
-       "exif-locationdest": "位置描述",
+       "exif-locationdest": "描繪地點",
        "exif-locationdestcode": "位置代碼描述",
-       "exif-objectcycle": "åª\92é«\94ç\9a\84時間",
+       "exif-objectcycle": "åª\92é«\94ç\99¼ç\94\9f時間",
        "exif-contact": "聯絡資訊",
        "exif-writer": "作家",
        "exif-languagecode": "語言",
        "exif-intellectualgenre": "項目類型",
        "exif-subjectnewscode": "主題代碼",
        "exif-scenecode": "IPTC 現場代碼",
-       "exif-event": "事件描述",
-       "exif-organisationinimage": "組織描述",
-       "exif-personinimage": "æ\89\80æ\8f\8fè¿°ç\9a\84人",
+       "exif-event": "描繪事件",
+       "exif-organisationinimage": "描繪組織",
+       "exif-personinimage": "æ\8f\8f繪人ç\89©",
        "exif-originalimageheight": "裁切前的高度",
        "exif-originalimagewidth": "裁切前的寬度",
        "exif-compression-1": "未壓縮",
        "exif-sensingmethod-8": "連續彩色線性感測器",
        "exif-filesource-3": "數位相機",
        "exif-scenetype-1": "直接照像圖片",
-       "exif-customrendered-0": "標準處理",
-       "exif-customrendered-1": "自定義處理",
+       "exif-customrendered-0": "一般程序",
+       "exif-customrendered-1": "自訂程序",
        "exif-exposuremode-0": "自動曝光",
        "exif-exposuremode-1": "手動曝光",
-       "exif-exposuremode-2": "自動曝光感知調節",
+       "exif-exposuremode-2": "自動包圍曝光",
        "exif-whitebalance-0": "自動白平衡",
        "exif-whitebalance-1": "手動白平衡",
        "exif-scenecapturetype-0": "標準",
        "exif-gpslongitude-w": "西經",
        "exif-gpsaltitude-above-sealevel": "海拔 $1 {{PLURAL:$1|公尺}}",
        "exif-gpsaltitude-below-sealevel": "海拔負 $1 {{PLURAL:$1|公尺}}",
-       "exif-gpsstatus-a": "測é\87\8fé\81\8eç¨\8b",
-       "exif-gpsstatus-v": "互動測量",
+       "exif-gpsstatus-a": "測é\87\8fé\80²è¡\8c中",
+       "exif-gpsstatus-v": "測量互通性",
        "exif-gpsmeasuremode-2": "二維測量",
        "exif-gpsmeasuremode-3": "三維測量",
        "exif-gpsspeed-k": "每小時公里",
        "exif-ycbcrpositioning-1": "中間",
        "exif-ycbcrpositioning-2": "同時取樣",
        "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-type": "媒體類型",
        "exif-rating-rejected": "已拒絕",
        "exif-isospeedratings-overflow": "大於 65535",
        "exif-iimcategory-ace": "藝術、文化與娛樂",
        "exif-urgency-other": "使用者自訂優先權 ($1)",
        "namespacesall": "全部",
        "monthsall": "全部",
-       "confirmemail": "確認電子郵件址",
-       "confirmemail_noemail": "您尚未於 [[Special:Preferences|偏好設定]] 輸入一個有效的電子郵件位址。",
-       "confirmemail_text": "{{SITENAME}}要求您在使用郵件功能之前驗證您的電子郵件位址。\n點選以下按鈕可向您的電子郵件傳送一封確認郵件。該郵件包含有一行代碼連結;\n請在您的瀏覽器中載入此連結以確認您的電子郵件位址是有效的。",
-       "confirmemail_pending": "確認碼已傳送至您的電子郵件,\n若您才剛建立好您的帳號,可能需要稍後幾分鐘才能收到。\n若沒有收到,請再重新申請一次確認碼。",
-       "confirmemail_send": "電子郵件寄送確認代碼",
-       "confirmemail_sent": "已寄出確認電子郵件。",
-       "confirmemail_oncreate": "確認代碼已傳送至您的電子郵件位址。\n登入動作不需要使用此代碼,但開啟在 Wiki 中任何以電子郵件為基礎的功能會需要先提供此代碼。",
-       "confirmemail_sendfailed": "{{SITENAME}}無法傳送確認郵件,請檢查電子郵件址是否包含非法字元。\n\n郵件傳送員回應: $1",
+       "confirmemail": "確認電子郵件址",
+       "confirmemail_noemail": "您尚未在 [[Special:Preferences|偏好設定]] 中輸入一個有效的電子郵件地址。",
+       "confirmemail_text": "{{SITENAME}} 要求您在使用郵件功能之前驗證您的電子郵件地址。\n點選以下按鈕可向您的電子郵件傳送一封確認郵件。該郵件包含有一行代碼連結;\n請在您的瀏覽器中載入此連結以確認您的電子郵件地址是有效的。",
+       "confirmemail_pending": "確認碼已透過電子郵件傳送給您,\n若您才剛建立好您的帳號,可能需要稍後幾分鐘才能收到。\n若沒有收到,請再重新申請一次確認碼。",
+       "confirmemail_send": "電子郵件確認碼",
+       "confirmemail_sent": "確認郵件已寄出。",
+       "confirmemail_oncreate": "確認碼已傳送至您的電子郵件地址。\n登入動作不需要使用此代碼,但開啟在 Wiki 中任何以電子郵件為基礎的功能會需要先提供此代碼。",
+       "confirmemail_sendfailed": "{{SITENAME}}無法傳送確認郵件,請檢查電子郵件址是否包含非法字元。\n\n郵件傳送員回應: $1",
        "confirmemail_invalid": "無效的確認碼,該代碼可能已經過期。",
-       "confirmemail_needlogin": "請 $1 以確認您的電子郵件址。",
-       "confirmemail_success": "您的電子郵件已經被確認。您現在可以[[Special:UserLogin|登入]]並使用此網站了。",
-       "confirmemail_loggedin": "已確認您的電子郵件址。",
-       "confirmemail_subject": "{{SITENAME}} 電子郵件址確認",
+       "confirmemail_needlogin": "請 $1 以確認您的電子郵件址。",
+       "confirmemail_success": "您的電子郵件已經被確認。您現在可以 [[Special:UserLogin|登入]] 並使用此網站了。",
+       "confirmemail_loggedin": "已確認您的電子郵件址。",
+       "confirmemail_subject": "{{SITENAME}} 電子郵件址確認",
        "confirmemail_body": "不明人士 (可能是您自己,來自 IP 位址 $1) 已在 {{SITENAME}} 註冊了一個帳號 \"$2\" 並使用了此電子郵件位址。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
-       "confirmemail_body_changed": "不明人士 (可能是您自己,來自 IP 位址 $1)  已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件址更改至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
+       "confirmemail_body_changed": "不明人士 (可能是您自己,來自 IP 位址 $1)  已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件址更改至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
        "confirmemail_body_set": "不明人士 (可能是您自己,來自 IP 位址 $1) 已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件位址設定至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
-       "confirmemail_invalidated": "已取消電子郵件址確認",
+       "confirmemail_invalidated": "已取消電子郵件址確認",
        "invalidateemail": "取消電子郵件確認",
        "scarytranscludedisabled": "[Interwiki 轉換代碼不可用]",
-       "scarytranscludefailed": "[樣板 $1 讀取失敗]",
+       "scarytranscludefailed": "[模板 $1 讀取失敗]",
        "scarytranscludefailed-httpstatus": "[樣板 $1 讀取失敗:HTTP $2]",
        "scarytranscludetoolong": "[URL 過長]",
        "deletedwhileediting": "<strong>警告:</strong>此頁在您開始編輯之後已經被刪除﹗",
        "recreate": "重新建立",
        "confirm_purge_button": "確定",
        "confirm-purge-top": "要清除此頁面的快取嗎?",
-       "confirm-purge-bottom": "清理一頁將會清除快取以及強迫顯示最現時之修訂版本。",
+       "confirm-purge-bottom": "清除頁面會清空頁面的快取記錄並強制顯示最近的頁面修訂。",
        "confirm-watch-button": "確定",
        "confirm-watch-top": "新增此頁面至您的監視清單?",
        "confirm-unwatch-button": "確定",
        "watchlistedit-raw-done": "已更新您的監視清單。",
        "watchlistedit-raw-added": "已新增 $1 個標題:",
        "watchlistedit-raw-removed": "已移除 $1 個標題:",
-       "watchlistedit-clear-title": "清空監視清單",
+       "watchlistedit-clear-title": "清空監視清單",
        "watchlistedit-clear-legend": "清空監視清單",
        "watchlistedit-clear-explain": "將會移除您的監視清單中所有的標題",
        "watchlistedit-clear-titles": "標題:",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|對話]])",
        "duplicate-defaultsort": "<strong>警告:</strong>預設的排序鍵 \"$2\" 會覆蓋先前預設的排序鍵 \"$1\"。",
        "duplicate-displaytitle": "<strong>警告:</strong> 顯示標題 \"$2\" 覆蓋之前的顯示標題 \"$1\"。",
-       "invalid-indicator-name": "<strong>錯誤:</strong>頁面狀態指示器的<code>name</code> 屬性不能為空。",
+       "invalid-indicator-name": "<strong>錯誤:</strong>頁面狀態指示的 <code>name</code> 屬性不能為空。",
        "version": "版本",
        "version-extensions": "已安裝的擴充套件",
        "version-skins": "已安裝的外觀",
        "version-hooks": "連結 (Hooks)",
        "version-parser-extensiontags": "解析器擴充標籤",
        "version-parser-function-hooks": "語法函數連結",
-       "version-hook-name": "é\80£çµ\90å\90\8d稱",
+       "version-hook-name": "é\89¤å\90\8d",
        "version-hook-subscribedby": "署名",
        "version-version": "($1)",
        "version-no-ext-name": "[未命名]",
        "version-poweredby-others": "其他",
        "version-poweredby-translators": " translatewiki.net 翻譯人員",
        "version-credits-summary": "我們感謝以下人士為 [[Special:Version|MediaWiki]] 作出的貢獻。",
-       "version-license-info": "MediaWiki 為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但不負任何擔保責任;亦無隱含對適售性或 特定用途的適用性的情形擔保。詳情請參照 GNU 通用公共授權。\n\n您應已隨本程式收到 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 通用公共授權條款的副本];如果沒有,請信件通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 線上閱讀]。",
+       "version-license-info": "MediaWiki 為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但不負任何擔保責任;亦無隱含對適售性或 特定用途的適用性的情形擔保。詳情請參照 GNU 通用公共授權。\n\n您應已隨本程式收到 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 通用公共授權條款的副本];如果沒有,請寄信通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 線上閱讀]。",
        "version-software": "已經安裝的軟體",
        "version-software-product": "產品",
        "version-software-version": "版本",
        "redirect-not-exists": "查無值",
        "fileduplicatesearch": "搜尋重複檔案",
        "fileduplicatesearch-summary": "依據雜湊值 (Hash) 來搜尋重複的檔案。",
-       "fileduplicatesearch-legend": "æ\90\9cå°\8bé\87\8dè¦\86",
+       "fileduplicatesearch-legend": "æ\90\9cå°\8bé\87\8dè¤\87",
        "fileduplicatesearch-filename": "檔案名稱:",
        "fileduplicatesearch-submit": "搜尋",
        "fileduplicatesearch-info": "$1 × $2 像素<br />檔案大小:$3<br />MIME 類型:$4",
        "tags": "有效變更標籤",
        "tag-filter": "[[Special:Tags|標籤]]搜尋:",
        "tag-filter-submit": "搜尋",
-       "tag-list-wrapper": "([[Special:Tags|標籤]]:$2)",
+       "tag-list-wrapper": "([[Special:Tags|$1 個標籤]]:$2)",
        "tags-title": "標籤",
        "tags-intro": "此頁面列出所有可用來標示編輯內容的標籤以及這些標籤所代表的意思。",
        "tags-tag": "標籤名稱",
        "tags-create-submit": "建立",
        "tags-create-no-name": "您必須指定一個標籤名稱。",
        "tags-create-invalid-chars": "標籤名稱不可包含逗號 (<code>,</code>) 或斜線 (<code>/</code>)。",
+       "tags-create-invalid-title-chars": "標籤名稱不能含有無法使用者頁面標題的字元。",
        "tags-create-already-exists": "標籤 \"$1\" 已存在。",
+       "tags-create-warnings-above": "嘗試建立標籤 \"$1\" 時發生下列{{PLURAL:$2|警告}}:",
        "tags-create-warnings-below": "您是否要繼續建立標籤?",
        "tags-delete-title": "刪除標籤",
        "tags-delete-explanation-initial": "您正要從資料庫刪除標籤 \"$1\"。",
+       "tags-delete-explanation-in-use": "標籤會自目前正在使用的{{PLURAL:$2| $2 個修訂或日誌項目| $2 修訂或日誌項目}}中移除。",
+       "tags-delete-explanation-warning": "此動作是 <strong>無法還原的</strong> 且 <strong>無法取消的</strong>,即使是資料庫管理者也無法。 請確認您要刪除的標題。",
+       "tags-delete-explanation-active": "<strong>標籤 \"$1\" 尚在使用,無法刪除。</strong> 要停止標籤使用,請至套用該標籤的頁面,並於該處將標籤停用。",
        "tags-delete-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|警告|警告}}:",
        "tags-activate-title": "啟動標籤",
        "tags-activate-question": "您正要啟動標籤 \"$1\"。",
        "tags-activate-reason": "原因:",
        "compare-title-not-exists": "您所指定的標題不存在。",
        "compare-revision-not-exists": "您所指定的修訂不存在。",
        "dberr-problems": "抱歉!這個網站出現了一些技術上的問題。",
-       "dberr-again": "嘗試等候數分鐘後,然後再試。",
-       "dberr-info": "(無法連接資料庫:$1)",
-       "dberr-info-hidden": "(無法連接資料庫)",
+       "dberr-again": "請稍後數分鐘後再試。",
+       "dberr-info": "(無法存取資料庫:$1)",
+       "dberr-info-hidden": "(無法存取資料庫)",
        "dberr-usegoogle": "您可以嘗試在此期間使用 Google 搜尋。",
        "dberr-outofdate": "注意,它們用來建立索引的內容可能不是最新的。",
        "dberr-cachederror": "這是請求面頁面的快取複本,可能不是最新的。",
        "htmlform-cloner-create": "新增更多",
        "htmlform-cloner-delete": "移除",
        "htmlform-cloner-required": "至少必須填寫一筆資料。",
-       "sqlite-has-fts": "$1 且支援全文搜",
-       "sqlite-no-fts": "$1 且不支援全文搜",
+       "sqlite-has-fts": "$1 且支援全文搜",
+       "sqlite-no-fts": "$1 且不支援全文搜",
        "logentry-delete-delete": "$1 刪除頁面 $3",
        "logentry-delete-restore": "$1 還原頁面 $3",
        "logentry-delete-event": "$1 {{GENDER:$2|已更改}} $3 中 {{PLURAL:$5|1 筆日誌|$5 筆日誌}}的可見性:$4",
        "revdelete-uname-unhid": "取消隱藏使用者名稱",
        "revdelete-restricted": "已套用對管理員的限制",
        "revdelete-unrestricted": "已移除對管理員的限制",
+       "logentry-block-block": "$1 {{GENDER:$2|已封鎖}} {{GENDER:$4|$3}} 期限為 $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|已解除封鎖}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|已變更}} {{GENDER:$4|$3}} 的封鎖設定期限為 $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|已封鎖}} {{GENDER:$4|$3}} 期限為 $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|已變更}} {{GENDER:$4|$3}} 的封鎖設定期限為 $5 $6",
+       "logentry-import-upload": "$1 已由檔案上傳{{GENDER:$2|匯入}} $3",
+       "logentry-import-interwiki": "$1 已由其他 wiki {{GENDER:$2|匯入}} $3",
        "logentry-merge-merge": "$1 將 $3 {{GENDER:$2|合併}}至 $4 (修訂版本至 $5)",
        "logentry-move-move": "$1 {{GENDER:$2|已移動}}頁面 $3 至 $4",
-       "logentry-move-move-noredirect": "$1 已移動頁面 $3 至 $4,不留重新導向頁面",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|已移動}}頁面 $3 至 $4,不留重新導向",
        "logentry-move-move_redir": "$1 已移動頁面 $3 至 $4 並覆蓋原有重新導向",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|已移動}}頁面 $3 覆蓋重新導向頁面至 $4,未留重新導向頁面",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|已標記}}頁面 $3 的修訂 $4 為已巡查",
        "logentry-upload-revert": "$1 {{GENDER:$2|已上傳}} $3",
        "log-name-managetags": "標籤管理日誌",
        "log-description-managetags": "此頁面列出與[[Special:Tags|標籤]]相關的管理工作項目。 在日誌中僅包含由管理員手動所做的操作;被 Wiki 軟體所建立或刪除的標籤項目,不會記錄在此日誌中",
+       "logentry-managetags-create": "$1 {{GENDER:$2|已建立}}標籤 \"$4\"",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|已刪除}}標籤 \"$4\" (已自 $5 個{{PLURAL:$5|修訂或日誌|修訂或日誌}}中移除)",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|已啟用}}標籤 \"$4\" 供使用者與機器人使用",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|已停用}}標籤 \"$4\" 供使用者與機器人使用",
        "rightsnone": "(無)",
        "revdelete-summary": "編輯摘要",
-       "feedback-bugornote": "如果您準備要詳細描述一個技術問題,請至 [$1 回報問題]。\n或您可以使用以下的簡易表單回報問題,您的使用者名稱與評論將被新增到頁面 \"[$3 $2]\"。",
-       "feedback-subject": "主旨:",
-       "feedback-message": "訊息:",
-       "feedback-cancel": "取消",
-       "feedback-submit": "送出意見回饋",
        "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 沒有回應",
+       "feedback-message": "訊息:",
+       "feedback-subject": "主旨:",
+       "feedback-submit": "送出",
+       "feedback-terms": "我了解我的使用者代理資訊包含完整的瀏覽器與作業系統版本資訊,且該資訊將會與意見回饋一同公開共享。",
+       "feedback-termsofuse": "我同意依照使用條款提供意見回饋。",
        "feedback-thanks": "感謝!您的意見回饋已發佈到頁面 \"[$2 $1]\"。",
-       "feedback-close": "完成",
-       "feedback-bugcheck": "很好! 檢查一下您的意見是不是已經被列為 [$1 已知問題]。",
-       "feedback-bugnew": "我已經檢查。 回報新問題",
+       "feedback-thanks-title": "感謝您!",
+       "feedback-useragent": "使用者代理:",
        "searchsuggest-search": "搜尋",
        "searchsuggest-containing": "包含...",
        "api-error-badaccess-groups": "您沒有權限在此 Wiki 上傳檔案。",
        "limitreport-ppgeneratednodes": "預處理器產生節點次數",
        "limitreport-postexpandincludesize": "展開後的引用大小",
        "limitreport-postexpandincludesize-value": "$1/$2 個{{PLURAL:$2|位元組}}",
-       "limitreport-templateargumentsize": "樣板參數大小",
+       "limitreport-templateargumentsize": "模板參數大小",
        "limitreport-templateargumentsize-value": "$1/$2 個{{PLURAL:$2|位元組}}",
        "limitreport-expansiondepth": "最高展開深度",
        "limitreport-expensivefunctioncount": "高消耗解析器函數次數",
        "expandtemplates": "展開模板",
-       "expand_templates_intro": "æ\9c¬ç\89¹æ®\8aé \81é\9d¢æ\9c\83å°\87æ\96\87å­\97中ç\9a\84樣板展開,可以包含支援的解析器語法,如 <code><nowiki>{{</nowiki>#language:…}}</code> 與變數如 <code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,絕大部分在雙括號中的內容都會被展開。",
-       "expand_templates_title": "上下文標題,用於 {{FULLPAGENAME}} 等:",
+       "expand_templates_intro": "æ\9c¬ç\89¹æ®\8aé \81é\9d¢æ\9c\83å°\87æ\96\87å­\97中ç\9a\84模板展開,可以包含支援的解析器語法,如 <code><nowiki>{{</nowiki>#language:…}}</code> 與變數如 <code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,絕大部分在雙括號中的內容都會被展開。",
+       "expand_templates_title": "文章標題,供 {{FULLPAGENAME}} 等使用:",
        "expand_templates_input": "輸入文字:",
        "expand_templates_output": "結果",
        "expand_templates_xml_output": "XML 輸出",
        "json-error-utf8": "格式不正確的 UTF-8 字元,可能被不正確編碼",
        "json-error-recursion": "在資料中有一個或多個的遞迴參照值被編碼",
        "json-error-inf-or-nan": "在資料中有一個或多個的 NAN 或 INF 值被編碼",
-       "json-error-unsupported-type": "下列的資料型態無法被編碼"
+       "json-error-unsupported-type": "下列的資料型態無法被編碼",
+       "headline-anchor-title": "連結至此章節",
+       "special-characters-group-latin": "拉丁文",
+       "special-characters-group-latinextended": "拉丁文擴充",
+       "special-characters-group-ipa": "國際音標",
+       "special-characters-group-symbols": "符號",
+       "special-characters-group-greek": "希臘文",
+       "special-characters-group-cyrillic": "斯拉夫文",
+       "special-characters-group-arabic": "阿拉伯文",
+       "special-characters-group-arabicextended": "阿拉伯文擴充",
+       "special-characters-group-persian": "波斯文",
+       "special-characters-group-hebrew": "希伯來文",
+       "special-characters-group-bangla": "孟加拉文",
+       "special-characters-group-tamil": "坦米爾文",
+       "special-characters-group-telugu": "特拉古文",
+       "special-characters-group-sinhala": "僧伽羅文",
+       "special-characters-group-gujarati": "古吉拉特文",
+       "special-characters-group-devanagari": "梵文",
+       "special-characters-group-thai": "泰文",
+       "special-characters-group-lao": "寮文",
+       "special-characters-group-khmer": "高棉文",
+       "special-characters-title-endash": "短破折號",
+       "special-characters-title-emdash": "長破折號",
+       "special-characters-title-minus": "減號"
 }
index 2247b36..f88650b 100644 (file)
@@ -13,7 +13,6 @@ $rtl = true;
 $namespaceNames = array(
        NS_MEDIA            => 'ܡܝܕܝܐ',
        NS_SPECIAL          => 'ܕܝܠܢܝܐ',
-       NS_MAIN             => '',
        NS_TALK             => 'ܡܡܠܠܐ',
        NS_USER             => 'ܡܦܠܚܢܐ',
        NS_USER_TALK        => 'ܡܡܠܠܐ_ܕܡܦܠܚܢܐ',
index b218e3c..23da7a3 100644 (file)
@@ -10,7 +10,6 @@
 
 $namespaceNames = array(
        NS_SPECIAL          => 'Xüsusi',
-       NS_MAIN             => '',
        NS_TALK             => 'Müzakirə',
        NS_USER             => 'İstifadəçi',
        NS_USER_TALK        => 'İstifadəçi_müzakirəsi',
index 63c88a8..74d3bb9 100644 (file)
@@ -14,7 +14,6 @@ $rtl = true;
 $namespaceNames = array(
        NS_MEDIA            => 'مئدیا',
        NS_SPECIAL          => 'اؤزل',
-       NS_MAIN             => '',
        NS_TALK             => 'دانیشیق',
        NS_USER             => 'ایستیفاده‌چی',
        NS_USER_TALK        => 'ایستیفاده‌چی_دانیشیغی',
index 5c01273..027e55e 100644 (file)
 <?php
-/** Western Balochi
+/** Western Balochi (بلوچی رخشانی)
  *
  * To improve a translation please visit https://translatewiki.net
  *
  * @ingroup Language
  * @file
  *
+ * @author Ibrahim khashrowdi
+ * @author Mjbmr
  */
 
 $fallback = 'fa';
 $rtl = true;
+
+$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    => 'تهر_ئی_گپ',
+);
+
+$specialPageAliases = array(
+       'Activeusers'               => array( 'پئالین_کارمرزوکان' ),
+       'Allmessages'               => array( 'موچین_پیامان' ),
+       'AllMyUploads'              => array( 'نی_موچین_ایرگیج_ئآن', 'نی_موچین_وّرک_ئآن' ),
+       'Allpages'                  => array( 'موچین_تاکدیمان' ),
+       'ApiHelp'                   => array( 'ای_پی_آی_کومک' ),
+       'Ancientpages'              => array( 'کوهنگین_تاکدیمان' ),
+       'Badtitle'                  => array( 'خرابین_ئینوان' ),
+       'Blankpage'                 => array( 'خالین_دیم' ),
+       'Block'                     => array( 'بستین', 'آی_پی_بستین', 'کارمرزوکی_بستین' ),
+       'Booksources'               => array( 'کتاب_ئی_بُن' ),
+       'BrokenRedirects'           => array( 'خرابین_تغیرمسیر' ),
+       'Categories'                => array( 'تهرئان' ),
+       'ChangeEmail'               => array( 'ایمیل_ئی_گردینتین' ),
+       'ChangePassword'            => array( 'چیهرگال_ئی_پاک_کورتین', 'چیهرگال_ئی_ٹگل' ),
+       'ComparePages'              => array( 'تاکدیمانی_موقایسه_کورتین' ),
+       'Confirmemail'              => array( 'ایمیل_ئی_تائید_کورتین' ),
+       'Contributions'             => array( 'شراکت_ئان' ),
+       'CreateAccount'             => array( 'کارمرزوکین_هیساب_ئی_جۆڑ_کورتین' ),
+       'Deadendpages'              => array( 'بن_بست_ئین_تاکدیمان' ),
+       'DeletedContributions'      => array( 'پاک_بوته_ئین_شراکت_ئان' ),
+       'Diff'                      => array( 'پرک' ),
+       'DoubleRedirects'           => array( 'دوئین_تغیرمسیرئان' ),
+       'EditWatchlist'             => array( 'پێ_گیری_ئی_لیستی_دستکاری_کورتین' ),
+       'Emailuser'                 => array( 'په_کارمرزوکا_ایمیل_دیم_داتین' ),
+       'ExpandTemplates'           => array( 'تراشوانی_پراخ_کورتین' ),
+       'Export'                    => array( 'دیمی_ڈنا_بورتین' ),
+       'Fewestrevisions'           => array( 'کمتیرین_نخسه' ),
+       'FileDuplicateSearch'       => array( 'گشتین_په_تکرارین_وّرک_ئا' ),
+       'Filepath'                  => array( 'وّرک_ئی_مسیر' ),
+       'Import'                    => array( 'ورق_ئانی_ریتین' ),
+       'Invalidateemail'           => array( 'ایمیلی_باتل_کورتین' ),
+       'JavaScriptTest'            => array( 'جاوا_سکریپت_ئی_تست' ),
+       'BlockList'                 => array( 'بسته_بوته_ئآنی_لیست', 'آی_پی_نشانی_بستینی_لیست' ),
+       'LinkSearch'                => array( 'گشتین_په_لینکا' ),
+       'Listadmins'                => array( 'مدیرئانی_لیست' ),
+       'Listbots'                  => array( 'روباٹ_ئانی_لیست' ),
+       'Listfiles'                 => array( 'پایل_ئانی_لیست', 'اکس_ئانی_لیست' ),
+       'Listgrouprights'           => array( 'کارمرزوکین_گروپانی_اختیاران' ),
+       'Listredirects'             => array( 'تغیرمسیرئانی_لیست' ),
+       'ListDuplicatedFiles'       => array( 'تکرارین_پایلانی_لیست' ),
+       'Listusers'                 => array( 'کارمرزوکانی_لیست' ),
+       'Lockdb'                    => array( 'مالوماتین_بانکی_قُلپ_کورتین' ),
+       'Log'                       => array( 'سیاهه_ئان' ),
+       'Lonelypages'               => array( 'آتیمین_دیمان' ),
+       'Longpages'                 => array( 'بُرزین_دیمان' ),
+       'MediaStatistics'           => array( 'رسانگ_ئانی_سرجم' ),
+       'MergeHistory'              => array( 'تاریخی_ادغام_کورتین' ),
+       'MIMEsearch'                => array( 'MIME_ئی_گشتین' ),
+       'Mostcategories'            => array( 'بازتیرین_تهر' ),
+       'Mostimages'                => array( 'بازتیرین_اکس' ),
+       'Mostinterwikis'            => array( 'بازتیرین_مانجین_ویکی' ),
+       'Mostlinked'                => array( 'بازتیرین_لینک' ),
+       'Mostlinkedcategories'      => array( 'تهر_گۆ_بازتیرین_لینکا' ),
+       'Mostlinkedtemplates'       => array( 'تراشوان_گۆ_بازتیرین_لینکا' ),
+       'Mostrevisions'             => array( 'بازتیرین_نخسه' ),
+       'Movepage'                  => array( 'دیمی_لڈّّینتین' ),
+       'Mycontributions'           => array( 'نی_شراکت_ئان' ),
+       'MyLanguage'                => array( 'نی_زبان_ئان' ),
+       'Mypage'                    => array( 'نی_ورق' ),
+       'Mytalk'                    => array( 'نی_گپ' ),
+       'Myuploads'                 => array( 'نی_بُرز_بوته_ئین_پایلان' ),
+       'Newimages'                 => array( 'نۆکین_اکس' ),
+       'Newpages'                  => array( 'نۆکین_وَرق_ئان' ),
+       'PagesWithProp'             => array( 'وّرق_ئانی_خاسی_ئت_گۆ' ),
+       'PageLanguage'              => array( 'وّرق_ئی_زبان' ),
+       'PasswordReset'             => array( 'چیهرگالی_نادینتین' ),
+       'PermanentLink'             => array( 'دایمین_لینک' ),
+       'Popularpages'              => array( 'مشهورین_وّرق_ئان' ),
+       'Preferences'               => array( 'تنزیمات' ),
+       'Prefixindex'               => array( 'دیمۆندین_نمایگ' ),
+       'Protectedpages'            => array( 'قُلپ_بوته_ئین_ورق_ئان' ),
+       'Protectedtitles'           => array( 'قُلپ_بوته_ئین_ئینوان_ئان' ),
+       'Randompage'                => array( 'تسادوپین_وّرق' ),
+       'RandomInCategory'          => array( 'تسادوپی_بئ_تهری_تا' ),
+       'Randomredirect'            => array( 'تسادوپین_تغیرمیسر' ),
+       'Recentchanges'             => array( 'آخیرئین_تغیران' ),
+       'Recentchangeslinked'       => array( 'مربوتین_تغیران' ),
+       'Redirect'                  => array( 'تغیرمسیر' ),
+       'ResetTokens'               => array( 'نشانگ_ئانی_پدا_نادینتین' ),
+       'Revisiondelete'            => array( 'نخسه_ئی_پاک_کورتین' ),
+       'RunJobs'                   => array( 'کارێ_کورتین' ),
+       'Search'                    => array( 'گشتین' ),
+       'Shortpages'                => array( 'گۆنڈین_تاکدیمان' ),
+       'Specialpages'              => array( 'خاسین_تاکدیمان' ),
+       'Statistics'                => array( 'سرجم' ),
+       'Tags'                      => array( 'برچسپ_ئان', 'تگ_ئان' ),
+       'TrackingCategories'        => array( 'ودی_کنۆکین_تهرئان' ),
+       'Unblock'                   => array( 'پاچ_کورتین' ),
+       'Uncategorizedcategories'   => array( 'دسته_بندی_نه_بوته_ئین_تهر_ئان' ),
+       'Uncategorizedimages'       => array( 'دسته_بندی_نه_بوته_ئین_اکس_ئان' ),
+       'Uncategorizedpages'        => array( 'دسته_بندی_نه_بوته_ئین_تاکدیمان' ),
+       'Uncategorizedtemplates'    => array( 'دسته_بندی_نه_بوته_ئین_تراشوانان' ),
+       'Undelete'                  => array( 'پاک_بوته_ئین_وّرق_ئی_بجا_آورتین' ),
+       'Unlockdb'                  => array( 'مالوماتین_بانکی_قُلپی_پاچ_کورتین' ),
+       'Unusedcategories'          => array( 'ایستیپاده_نه_بوته_ئین_تهر_ئان' ),
+       'Unusedimages'              => array( 'ایستیپاده_نه_بوته_ئین_اکس_ئان' ),
+       'Unusedtemplates'           => array( 'ایستیپاده_نه_بوه_ئین_تراشوانان' ),
+       'Unwatchedpages'            => array( 'پدگیری_نه_بوته_ئین_وّرق_ئان' ),
+       'Upload'                    => array( 'پایلی_ئی_بُرز_کورتین' ),
+       'UploadStash'               => array( 'بَزین_بُرز_کورتین' ),
+       'Userlogin'                 => array( 'داخل_بوتین_بئ_سایٹ_ئی_تا' ),
+       'Userlogout'                => array( 'دَر_بوتین_شه_سایٹ_ئا' ),
+       'Userrights'                => array( 'کارمرزوک_ئی_اختیار_ئان' ),
+       'Version'                   => array( 'نخسه' ),
+       'Wantedcategories'          => array( 'زَرورتین_تهر_ئان' ),
+       'Wantedfiles'               => array( 'زَرورتین_اکس_ئان' ),
+       'Wantedpages'               => array( 'زَرورتین_وّرق_ئان' ),
+       'Wantedtemplates'           => array( 'زَرورتین_تراشوانان' ),
+       'Watchlist'                 => array( 'پدگیر_ئی_لیست' ),
+       'Whatlinkshere'             => array( 'لینک_په_ای_دیما' ),
+       'Withoutinterwiki'          => array( 'بئ_شه_مانیجین_ویکی_ئا' ),
+);
\ No newline at end of file
index 7ee29c1..67d126a 100644 (file)
@@ -311,3 +311,18 @@ $magicWords = array(
        'url_wiki'                  => array( '0', 'ЧЕХКА', 'ВИКИ', 'WIKI' ),
 );
 
+$datePreferences = array(
+       'default',
+       'ydm',
+       'ISO 8601',
+);
+
+$dateFormats = array(
+       'ydm time' => 'H:i',
+       'ydm date' => 'Y, j F',
+       'ydm both' => 'Y, j F, H:i',
+
+       'ISO 8601 time' => 'xnH:xni:xns',
+       'ISO 8601 date' => 'xnY-xnm-xnd',
+       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
index a7267dd..027161f 100644 (file)
@@ -14,7 +14,6 @@ $fallback8bitEncoding = 'windows-1256';
 $namespaceNames = array(
        NS_MEDIA            => 'میدیا',
        NS_SPECIAL          => 'تایبەت',
-       NS_MAIN             => '',
        NS_TALK             => 'وتووێژ',
        NS_USER             => 'بەکارھێنەر',
        NS_USER_TALK        => 'لێدوانی_بەکارھێنەر',
@@ -60,7 +59,7 @@ $specialPageAliases = array(
        'DoubleRedirects'           => array( 'ڕەوانکەرە_دووپاتکراوەکان' ),
        'Emailuser'                 => array( 'ئیمەیل_بەکارھێنەر' ),
        'Export'                    => array( 'ھەناردن' ),
-       'Fewestrevisions'           => array( 'کەمترین__پێداچوونەوەکان' ),
+       'Fewestrevisions'           => array( 'کەمترین_پێداچوونەوەکان' ),
        'Import'                    => array( 'ھاوردن' ),
        'Listadmins'                => array( 'لیستی_بەڕێوبەران' ),
        'Listbots'                  => array( 'لیستی_بۆتەکان' ),
index e0848d0..c9994e2 100644 (file)
@@ -58,7 +58,7 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Benutzerkonto_anlegen' ),
        'Deadendpages'              => array( 'Sackgassenseiten' ),
        'DeletedContributions'      => array( 'Gelöschte_Beiträge' ),
-       'Diff'                      => array( 'Unterschied' ),
+       'Diff'                      => array( 'Diff', 'Differenz', 'Unterschied' ),
        'DoubleRedirects'           => array( 'Doppelte_Weiterleitungen' ),
        'EditWatchlist'             => array( 'Beobachtungsliste_bearbeiten' ),
        'Emailuser'                 => array( 'E-Mail_senden', 'Mailen', 'E-Mail' ),
index 1f49212..72d645e 100644 (file)
@@ -13,7 +13,6 @@ $rtl = true;
 $namespaceNames = array(
        NS_MEDIA            => 'މީޑިއާ',
        NS_SPECIAL          => 'ޚާއްސަ',
-       NS_MAIN             => '',
        NS_TALK             => 'ޚިޔާލު',
        NS_USER             => 'މެމްބަރު',
        NS_USER_TALK        => 'މެމްބަރުގެ_ވާހަކަ',
index 6c03f1d..dd1cc55 100644 (file)
@@ -14,7 +14,6 @@ $fallback8bitEncoding = 'windows-1256';
 $namespaceNames = array(
        NS_MEDIA            => 'مدیا',
        NS_SPECIAL          => 'ویژه',
-       NS_MAIN             => '',
        NS_TALK             => 'بحث',
        NS_USER             => 'کاربر',
        NS_USER_TALK        => 'بحث_کاربر',
@@ -51,10 +50,10 @@ $specialPageAliases = array(
        'Booksources'               => array( 'منابع_کتاب' ),
        'BrokenRedirects'           => array( 'تغییرمسیرهای_خراب' ),
        'Categories'                => array( 'رده‌ها' ),
-       'ChangeEmail'               => array( 'تغییر_رایانامه' ),
+       'ChangeEmail'               => array( 'تغÛ\8cÛ\8cر_اÛ\8cÙ\85Û\8cÙ\84', 'تغÛ\8cÛ\8cر_راÛ\8cاÙ\86اÙ\85Ù\87' ),
        'ChangePassword'            => array( 'از_نو_کردن_گذرواژه' ),
        'ComparePages'              => array( 'مقایسهٔ_صفحات' ),
-       'Confirmemail'              => array( 'تأیید_رایانامه' ),
+       'Confirmemail'              => array( 'تأÛ\8cÛ\8cد_اÛ\8cÙ\85Û\8cÙ\84', 'تأÛ\8cÛ\8cد_راÛ\8cاÙ\86اÙ\85Ù\87' ),
        'Contributions'             => array( 'مشارکت‌ها' ),
        'CreateAccount'             => array( 'ایجاد_حساب_کاربری' ),
        'Deadendpages'              => array( 'صفحه‌های_بن‌بست' ),
@@ -62,14 +61,14 @@ $specialPageAliases = array(
        'Diff'                      => array( 'تفاوت' ),
        'DoubleRedirects'           => array( 'تغییرمسیرهای_دوتایی' ),
        'EditWatchlist'             => array( 'ویرایش_فهرست_پی‌گیری‌ها' ),
-       'Emailuser'                 => array( 'نامه_به_کاربر' ),
+       'Emailuser'                 => array( 'ایمیل_به_کاربر', 'نامه_به_کاربر' ),
        'ExpandTemplates'           => array( 'گسترش_الگوها' ),
        'Export'                    => array( 'برون‌بری_صفحه' ),
        'Fewestrevisions'           => array( 'کمترین_نسخه' ),
        'FileDuplicateSearch'       => array( 'جستجوی_پروندهٔ_تکراری' ),
        'Filepath'                  => array( 'مسیر_پرونده' ),
        'Import'                    => array( 'درون‌ریزی_صفحه' ),
-       'Invalidateemail'           => array( 'باطل‌کردن_رایانامه' ),
+       'Invalidateemail'           => array( 'باطÙ\84â\80\8cکردÙ\86§Û\8cÙ\85Û\8cÙ\84', 'باطÙ\84â\80\8cکردÙ\86±Ø§Û\8cاÙ\86اÙ\85Ù\87' ),
        'JavaScriptTest'            => array( 'تست_جاوااسکریپت' ),
        'BlockList'                 => array( 'فهرست_بسته‌شده‌ها', 'فهرست_بستن_نشانی_آی‌پی' ),
        'LinkSearch'                => array( 'جستجوی_پیوند' ),
index 1f578a3..3d7fc43 100644 (file)
@@ -16,7 +16,6 @@ $fallback8bitEncoding = 'windows-1255';
 $namespaceNames = array(
        NS_MEDIA            => 'מדיה',
        NS_SPECIAL          => 'מיוחד',
-       NS_MAIN             => '',
        NS_TALK             => 'שיחה',
        NS_USER             => 'משתמש',
        NS_USER_TALK        => 'שיחת_משתמש',
index 4cd2495..bcc8328 100644 (file)
@@ -12,7 +12,6 @@ $fallback = 'ur';
 $rtl = true;
 
 $namespaceNames = array(
-       NS_MAIN             => '',
        NS_MEDIA            => 'میڈیا',
        NS_SPECIAL          => 'خاص',
        NS_TALK             => 'مشقولگی',
index a33efef..8749ccb 100644 (file)
@@ -50,7 +50,6 @@ $fallback8bitEncoding = 'windows-1256';
 $namespaceNames = array(
        NS_MEDIA            => 'تاسپا',
        NS_SPECIAL          => 'ارنايى',
-       NS_MAIN             => '',
        NS_TALK             => 'تالقىلاۋ',
        NS_USER             => 'قاتىسۋشى',
        NS_USER_TALK        => 'قاتىسۋشى_تالقىلاۋى',
index 89f877f..cdea1f4 100644 (file)
@@ -16,7 +16,6 @@ $rtl = true;
 $namespaceNames = array(
        NS_MEDIA            => 'میڈیا',
        NS_SPECIAL          => 'خاص',
-       NS_MAIN             => '',
        NS_TALK             => 'بَحَژ',
        NS_USER             => 'رُکُن',
        NS_USER_TALK        => 'رُکُن_بَحَژ',
index 1a23b3f..12124f2 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** لوری (لوری)
+/** Luri (لوری)
  *
  * To improve a translation please visit https://translatewiki.net
  *
@@ -8,7 +8,141 @@
  *
  * @author Bonevarluri
  * @author Mogoeilor
+ * @author Mjbmr
  */
 
+$fallback = 'fa';
 $rtl = true;
 
+$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    => 'چک_چنه_دسه',
+);
+
+$specialPageAliases = array(
+       'Activeusers'               => array( 'کاریاریا_کنشتکار' ),
+       'Allmessages'               => array( 'همه_پیغومیا' ),
+       'AllMyUploads'              => array( 'همه_سوارکردیا_مه', 'همه_جانیایا_مه' ),
+       'Allpages'                  => array( 'همه_بلگه_یا' ),
+       'ApiHelp'                   => array( 'هومیاری_آ_پی_آی' ),
+       'Ancientpages'              => array( 'بلگه_یا_دماتری' ),
+       'Badtitle'                  => array( 'داسون_گن' ),
+       'Blankpage'                 => array( 'بلگه_حالی' ),
+       'Block'                     => array( 'نهاگری', 'نهاگری_آی_پی', 'نهاگری_کاریار' ),
+       'Booksources'               => array( 'نهاگری_سرچشمه_یا' ),
+       'BrokenRedirects'           => array( 'واگردونیا_بی_سرانجوم' ),
+       'Categories'                => array( 'دسه_یا' ),
+       'ChangeEmail'               => array( 'آلشت_دئن_ایمیل' ),
+       'ChangePassword'            => array( 'آلشت_دئن_رازینه_گواردن' ),
+       'ComparePages'              => array( 'تی_یک_نیائن_بلگه_یا' ),
+       'Confirmemail'              => array( 'پشت_راس_کاری_ایمیل' ),
+       'Contributions'             => array( 'هومیاری_کردنیا' ),
+       'CreateAccount'             => array( 'راس_کردن_حساو' ),
+       'Deadendpages'              => array( 'بلگه_یا_بی_ویرگار' ),
+       'DeletedContributions'      => array( 'هومیاریا_پاکسا_بیه' ),
+       'Diff'                      => array( 'فرخ' ),
+       'DoubleRedirects'           => array( 'واگردونیا_دو_کونه' ),
+       'EditWatchlist'             => array( 'ویرایشت_سیل_برگ' ),
+       'Emailuser'                 => array( 'ایمیل_کاریار', 'ایمیل' ),
+       'ExpandTemplates'           => array( 'گپ_کلونکاری_چوئه_یا' ),
+       'Export'                    => array( 'وه_در_دئن' ),
+       'Fewestrevisions'           => array( 'کمتری_وانئریا' ),
+       'FileDuplicateSearch'       => array( 'پی_جوری_دو_کونه_جانیا' ),
+       'Filepath'                  => array( 'مسیر_جانیا' ),
+       'Import'                    => array( 'وا_مین_اوردن' ),
+       'Invalidateemail'           => array( 'بی_اعتوار_کردن_ایمیل' ),
+       'JavaScriptTest'            => array( 'ازماشت_نیسسه_یا_جاوا' ),
+       'BlockList'                 => array( 'نهاگری_نومگه', 'نومگه_نهاگری', 'نومگه_نهاگری_آی_پی' ),
+       'LinkSearch'                => array( 'پی_جوری_هوم_پیوند' ),
+       'Listadmins'                => array( 'نومگه_سردیوونیاریا' ),
+       'Listbots'                  => array( 'نومگه_بوتیا' ),
+       'Listfiles'                 => array( 'نومگه_جانیایا', 'نومگه_جانیا', 'نومگه_عسگ' ),
+       'Listgrouprights'           => array( 'نومگه_حقوق_گرویی', 'حقوق_کاریاری_گرویی' ),
+       'Listredirects'             => array( 'نومگه_واگردونیا' ),
+       'ListDuplicatedFiles'       => array( 'نومگه_جانیایا_دو_کونه', 'نومگه_دو_کونه_بیین_جانیا' ),
+       'Listusers'                 => array( 'نومگه_کاریاریا', 'نومگه_کاریاری' ),
+       'Lockdb'                    => array( 'قلف_کردن_رسینه_جا' ),
+       'Log'                       => array( 'پهرستنومه', 'پهرستنومه_یا' ),
+       'Lonelypages'               => array( 'بلگه_یا_تکی', 'بلگه_یا_بی_حامین' ),
+       'Longpages'                 => array( 'بلگه_یا_فره_بلنگ' ),
+       'MediaStatistics'           => array( 'آماریا_وارسگر' ),
+       'MergeHistory'              => array( 'سریک_سازی_ویرگار' ),
+       'MIMEsearch'                => array( 'پی_چوری_ام_آی_ام_ای' ),
+       'Mostcategories'            => array( 'بیشتر_دسه_یا' ),
+       'Mostimages'                => array( 'بیشتر_جانیایا_هوم_پیوند_بیه', 'بیشتر_جانیایا', 'بیشتر_عسگیا' ),
+       'Mostinterwikis'            => array( 'بیشتر_مین_ویکی_یا' ),
+       'Mostlinked'                => array( 'بیشتر_بلگه_یا_هوم_پیوند_بیه', 'بیشتر_هوم_پیوند_بیه_یا' ),
+       'Mostlinkedcategories'      => array( 'بیشتر_دسه_یا_هوم_پیوند_بیه', 'بیشتر_دسه_یا_وه_کار_گرته_بیه' ),
+       'Mostlinkedtemplates'       => array( 'بیشتر_بلگه_فره_پر_بیه', 'بیشتر_چوئه_یا_هوم_پیوند_بیه', 'بیشتر_چوئه_یا_وه_کار_گرته_بیه' ),
+       'Mostrevisions'             => array( 'بیشتر_وانئریا' ),
+       'Movepage'                  => array( 'جا_وه_جا_کردن_بلگه' ),
+       'Mycontributions'           => array( 'هومیاریا_مه' ),
+       'MyLanguage'                => array( 'زون_مه' ),
+       'Mypage'                    => array( 'بلگه_مه' ),
+       'Mytalk'                    => array( 'چک_چنه_مه' ),
+       'Myuploads'                 => array( 'سوارکردیا_مه', 'جانیایا_مه' ),
+       'Newimages'                 => array( 'جانیایا_تازه', 'عسگیا_تازه' ),
+       'Newpages'                  => array( 'بلگه_یا_تازه' ),
+       'PagesWithProp'             => array( 'بلگه_یا_حامیندار' ),
+       'PageLanguage'              => array( 'بلگه_زون' ),
+       'PasswordReset'             => array( 'د_نو_زنه_کردن_رازینه_گواردن' ),
+       'PermanentLink'             => array( 'هوم_پیوند_دایمی' ),
+       'Popularpages'              => array( 'صفحه‌های_محبوب' ),
+       'Preferences'               => array( 'میزونکاریا' ),
+       'Prefixindex'               => array( 'پیشون_سیائه' ),
+       'Protectedpages'            => array( 'بلگه_یا_پر_و_پیم_بیه' ),
+       'Protectedtitles'           => array( 'داسونا_پر_و_پیم_بیه' ),
+       'Randompage'                => array( 'شامسکی', 'بلگه_یا_شامسکی' ),
+       'RandomInCategory'          => array( 'دسه_شامسکی' ),
+       'Randomredirect'            => array( 'واگردونی_شامسکی' ),
+       'Recentchanges'             => array( 'آلشتیا_ایسنی' ),
+       'Recentchangeslinked'       => array( 'آلشتیا_هوم_پیوند_بیه_ایسنی', 'آلشتیا_مرتوط' ),
+       'Redirect'                  => array( 'واگردونی' ),
+       'ResetTokens'               => array( 'د_نو_زنه_کردن_شناسیاریا' ),
+       'Revisiondelete'            => array( 'وانئری_پاکسا_کردن' ),
+       'RunJobs'                   => array( 'انجوم_دئن_کاریا' ),
+       'Search'                    => array( 'پی_جوری' ),
+       'Shortpages'                => array( 'بلگه_یا_کوچک' ),
+       'Specialpages'              => array( 'بلگه_یا_ویجه' ),
+       'Statistics'                => array( 'آماریا' ),
+       'Tags'                      => array( 'سردیسیا' ),
+       'TrackingCategories'        => array( 'دماگری_دسه_یا' ),
+       'Unblock'                   => array( 'وا_کردن_قلف' ),
+       'Uncategorizedcategories'   => array( 'دسه_یا_دسه_بنی_نبیه' ),
+       'Uncategorizedimages'       => array( 'جانیا_دسه_بنی_نبیه', 'عسگیا_دسه_بنی_نبیه' ),
+       'Uncategorizedpages'        => array( 'بلگه_یا_دسه_بنی_نبیه' ),
+       'Uncategorizedtemplates'    => array( 'چوئه_یا_دسه_بنی_نبیه' ),
+       'Undelete'                  => array( 'پاکسا_نکردن' ),
+       'Unlockdb'                  => array( 'وا_کردن_قلف_رسینه_جا' ),
+       'Unusedcategories'          => array( 'دسه_یا_وه_کار_گرته_نبیه' ),
+       'Unusedimages'              => array( 'جانیایا_وه_کار_گرته_نبیه', 'عسگیا_وه_کار_گرته_نبیه' ),
+       'Unusedtemplates'           => array( 'چوئه_یا_وه_کار_گرته_نبیه' ),
+       'Unwatchedpages'            => array( 'بلگه_یا_سیل_نکرده' ),
+       'Upload'                    => array( 'سوارکرد' ),
+       'UploadStash'               => array( 'اماییه_جا_سوارکرد' ),
+       'Userlogin'                 => array( 'وامین_اومائن_کاریار', 'وامین_اومائن' ),
+       'Userlogout'                => array( 'وه_در_اومائن_کاریار', 'وه_در_اومائن' ),
+       'Userrights'                => array( 'حقوق_کاریار', 'سردیوونکار_بیین', 'بوت_بیین' ),
+       'Version'                   => array( 'نسفه' ),
+       'Wantedcategories'          => array( 'دسه_یا_حاستنی' ),
+       'Wantedfiles'               => array( 'جانیایا_حاستنی' ),
+       'Wantedpages'               => array( 'بلگه_یا_حاستنی', 'هوم_پیوندیا_د_بین_رئته' ),
+       'Wantedtemplates'           => array( 'چوئه_یا_حاستنی' ),
+       'Watchlist'                 => array( 'سیل_برگ' ),
+       'Whatlinkshere'             => array( 'چه_هوم_پیوندیایی_ها_ایچه' ),
+       'Withoutinterwiki'          => array( 'بی_مین_ویکی' ),
+);
index 9ab687a..074e040 100644 (file)
@@ -68,7 +68,7 @@ $namespaceGenderAliases = array();
 
 $specialPageAliases = array(
        'Blankpage'                 => array( 'Пуста_лаштык' ),
-       'BrokenRedirects'           => array( 'Кӱрылтшӧ__вес_вере_колтымаш-влак' ),
+       'BrokenRedirects'           => array( 'Кӱрылтшӧ_вес_вере_колтымаш-влак' ),
        'Categories'                => array( 'Категорий-влак' ),
        'ComparePages'              => array( 'Лаштык-влакым_тергымаш' ),
        'Emailuser'                 => array( 'Пайдаланышылан_серышым_колташ' ),
index 8a249e1..451e373 100644 (file)
@@ -109,7 +109,7 @@ $specialPageAliases = array(
        'Movepage'                  => array( 'PindahLaman', 'Pindahkan_laman' ),
        'Mycontributions'           => array( 'JariahDenai', 'Jariah_Ambo' ),
        'Mypage'                    => array( 'LamanDenai', 'Laman_Ambo' ),
-       'Mytalk'                    => array( 'RundiangDenai', 'Laman_rundiang__Ambo' ),
+       'Mytalk'                    => array( 'RundiangDenai', 'Laman_rundiang_Ambo' ),
        'Myuploads'                 => array( 'DenaiMuek', 'Nan_Ambo_muek' ),
        'Newimages'                 => array( 'BerkasBaru', 'Berkas_baru' ),
        'Newpages'                  => array( 'LamanBaru', 'Laman_baru' ),
index 16ecac2..6203b24 100644 (file)
@@ -26,7 +26,6 @@ $rtl = true;
 $namespaceNames = array(
        NS_MEDIA            => 'مدیا',
        NS_SPECIAL          => 'شا',
-       NS_MAIN             => '',
        NS_TALK             => 'گپ',
        NS_USER             => 'کارور',
        NS_USER_TALK        => 'کارور_گپ',
index e66cb02..f87d770 100644 (file)
@@ -96,7 +96,6 @@ $bookstoreList = array(
 $namespaceNames = array(
        NS_MEDIA          => 'Media',
        NS_SPECIAL        => 'Spezial',
-       NS_MAIN           => '',
        NS_TALK           => 'Diskuschoon',
        NS_USER           => 'Bruker',
        NS_USER_TALK      => 'Bruker_Diskuschoon',
index 457ca9a..a9dbf3a 100644 (file)
@@ -157,12 +157,12 @@ $specialPageAliases = array(
        'Specialpages'              => array( 'Махсус_битләр' ),
        'Statistics'                => array( 'Статистика' ),
        'Tags'                      => array( 'Теглар' ),
-       'Uncategorizedcategories'   => array( 'Үзләштерелмәгән__бүлекләр' ),
+       'Uncategorizedcategories'   => array( 'Үзләштерелмәгән_бүлекләр' ),
        'Uncategorizedimages'       => array( 'Үзләштерелмәгән_файллар' ),
        'Uncategorizedpages'        => array( 'Үзләштерелмәгән_битләр' ),
-       'Uncategorizedtemplates'    => array( 'Үзләштерелмәгән__үрнәкләр' ),
+       'Uncategorizedtemplates'    => array( 'Үзләштерелмәгән_үрнәкләр' ),
        'Unusedcategories'          => array( 'Кулланылмаган_төркемнәр' ),
-       'Unusedimages'              => array( 'Кулланылмаучы__файллар' ),
+       'Unusedimages'              => array( 'Кулланылмаучы_файллар' ),
        'Upload'                    => array( 'Йөкләү' ),
        'Userlogin'                 => array( 'Кулланучы_исеме' ),
        'Userlogout'                => array( 'Чыгу' ),
index 1394c16..81a6d2f 100644 (file)
@@ -31,7 +31,6 @@ $rtl = true;
 $namespaceNames = array(
        NS_MEDIA            => 'وسیط',
        NS_SPECIAL          => 'خاص',
-       NS_MAIN             => '',
        NS_TALK             => 'تبادلۂ_خیال',
        NS_USER             => 'صارف',
        NS_USER_TALK        => 'تبادلۂ_خیال_صارف',
index f66cd5a..ef2df31 100644 (file)
--- a/load.php
+++ b/load.php
@@ -43,6 +43,7 @@ $configFactory = ConfigFactory::getDefaultInstance();
 $resourceLoader = new ResourceLoader( $configFactory->makeConfig( 'main' ) );
 $resourceLoader->respond( new ResourceLoaderContext( $resourceLoader, $wgRequest ) );
 
+Profiler::instance()->setTemplated( true );
 wfLogProfilingData();
 
 // Shut down the database.
index 0589009..1f70f45 100644 (file)
@@ -65,7 +65,13 @@ ALIASES                = "type{1}=<b> \1 </b>:" \
                          "public=\access public" \
                          "copyright=\note" \
                          "license=\note" \
-                         "codeCoverageIgnore="
+                         "codeCoverageIgnore=" \
+                         "codingStandardsIgnoreStart=" \
+                         "group=" \
+                         "covers=" \
+                         "dataProvider=" \
+                         "expectedException=" \
+                         "expectedExceptionMessage="
 TCL_SUBST              =
 OPTIMIZE_OUTPUT_FOR_C  = NO
 OPTIMIZE_OUTPUT_JAVA   = NO
index af14bb3..a8dbd5f 100644 (file)
@@ -38,6 +38,8 @@ define( 'DO_MAINTENANCE', RUN_MAINTENANCE_IF_MAIN ); // original name, harmless
 
 $maintClass = false;
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * Abstract maintenance class for quickly writing and churning out
  * maintenance scripts with minimal effort. All that _must_ be defined
@@ -612,6 +614,11 @@ abstract class Maintenance {
                        $profiler->setTemplated( true );
                        Profiler::replaceStubInstance( $profiler );
                }
+
+               $trxProfiler = Profiler::instance()->getTransactionProfiler();
+               $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
+               # Catch huge single updates that lead to slave lag
+               $trxProfiler->setExpectation( 'maxAffected', 1000, __METHOD__ );
        }
 
        /**
@@ -696,6 +703,9 @@ abstract class Maintenance {
                                        }
                                        $options[$option] = $param;
                                }
+                       } elseif ( $arg == '-' ) {
+                               # Lonely "-", often used to indicate stdin or stdout.
+                               $args[] = $arg;
                        } elseif ( substr( $arg, 0, 1 ) == '-' ) {
                                # Short options
                                $argLength = strlen( $arg );
diff --git a/maintenance/archives/patch-editsummary-length.sql b/maintenance/archives/patch-editsummary-length.sql
new file mode 100644 (file)
index 0000000..c8ac1ad
--- /dev/null
@@ -0,0 +1,11 @@
+ALTER TABLE /*_*/revision MODIFY rev_comment varbinary(767) NOT NULL;
+ALTER TABLE /*_*/archive MODIFY ar_comment varbinary(767) NOT NULL;
+ALTER TABLE /*_*/image MODIFY img_description varbinary(767) NOT NULL;
+ALTER TABLE /*_*/oldimage MODIFY oi_description varbinary(767) NOT NULL;
+ALTER TABLE /*_*/filearchive MODIFY fa_description varbinary(767);
+ALTER TABLE /*_*/filearchive MODIFY fa_deleted_reason varbinary(767) default '';
+ALTER TABLE /*_*/recentchanges MODIFY rc_comment varbinary(767) NOT NULL default '';
+ALTER TABLE /*_*/logging MODIFY log_comment varbinary(767) NOT NULL default '';
+ALTER TABLE /*_*/ipblocks MODIFY ipb_reason varbinary(767) NOT NULL;
+ALTER TABLE /*_*/protected_titles MODIFY pt_reason varbinary(767);
+
diff --git a/maintenance/archives/patch-user-newtalk-userid-unsigned.sql b/maintenance/archives/patch-user-newtalk-userid-unsigned.sql
new file mode 100644 (file)
index 0000000..a83e03b
--- /dev/null
@@ -0,0 +1 @@
+ALTER TABLE /*_*/user_newtalk MODIFY user_id int unsigned NOT NULL default 0;
index 85ebd51..d83f1fc 100644 (file)
@@ -48,6 +48,8 @@ class TextPassDumper extends BackupDumper {
        protected $maxConsecutiveFailedTextRetrievals = 200;
        protected $failureTimeout = 5; // Seconds to sleep after db failure
 
+       protected $bufferSize = 524288; // In bytes. Maximum size to read from the stub in on go.
+
        protected $php = "php";
        protected $spawn = false;
 
@@ -186,6 +188,10 @@ class TextPassDumper extends BackupDumper {
                $url = $this->processFileOpt( $val, $param );
 
                switch ( $opt ) {
+                       case 'buffersize':
+                               // Lower bound for xml reading buffer size is 4 KB
+                               $this->bufferSize = max( intval( $val ), 4 * 1024 );
+                               break;
                        case 'prefetch':
                                require_once "$IP/maintenance/backupPrefetch.inc";
                                $this->prefetch = new BaseDump( $url );
@@ -368,12 +374,11 @@ class TextPassDumper extends BackupDumper {
                xml_set_character_data_handler( $parser, array( &$this, 'characterData' ) );
 
                $offset = 0; // for context extraction on error reporting
-               $bufferSize = 512 * 1024;
                do {
                        if ( $this->checkIfTimeExceeded() ) {
                                $this->setTimeExceeded();
                        }
-                       $chunk = fread( $input, $bufferSize );
+                       $chunk = fread( $input, $this->bufferSize );
                        if ( !xml_parse( $parser, $chunk, feof( $input ) ) ) {
                                wfDebug( "TextDumpPass::readDump encountered XML parsing error\n" );
 
index bb7499b..1569234 100644 (file)
@@ -46,7 +46,7 @@ class BenchHttpHttps extends Benchmarker {
        }
 
        static function doRequest( $proto ) {
-               Http::get( "$proto://localhost/" );
+               Http::get( "$proto://localhost/", array(), __METHOD__ );
        }
 
        // bench function 1
index 24b63a8..70490e1 100644 (file)
@@ -87,6 +87,7 @@ class UploadStashCleanup extends Maintenance {
                                        $this->output( "Failed removing stashed upload with key: $key ($type)\n" );
                                }
                                if ( $i % 100 == 0 ) {
+                                       wfWaitForSlaves();
                                        $this->output( "$i\n" );
                                }
                        }
index 76bc982..2fb3697 100644 (file)
@@ -10,10 +10,20 @@ class ConvertExtensionToRegistration extends Maintenance {
                'AutoloadClasses' => 'removeAbsolutePath',
                'ExtensionCredits' => 'handleCredits',
                'ResourceModules' => 'handleResourceModules',
+               'ResourceModuleSkinStyles' => 'handleResourceModules',
                'Hooks' => 'handleHooks',
                'ExtensionFunctions' => 'handleExtensionFunctions',
        );
 
+       /**
+        * Things that were formerly globals and should still be converted
+        *
+        * @var array
+        */
+       protected $formerGlobals = array(
+               'TrackingCategories',
+       );
+
        /**
         * Keys that should be put at the top of the generated JSON file (T86608)
         *
@@ -44,7 +54,7 @@ class ConvertExtensionToRegistration extends Maintenance {
                $processor = new ReflectionClass( 'ExtensionProcessor' );
                $settings = $processor->getProperty( 'globalSettings' );
                $settings->setAccessible( true );
-               return $settings->getValue();
+               return $settings->getValue() + $this->formerGlobals;
        }
 
        public function execute() {
index cc2167e..4b9ad9c 100644 (file)
@@ -92,11 +92,13 @@ if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
        }
 }
 
-$maintenance->setConfig( ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
 $maintenance->finalSetup();
 // Some last includes
 require_once "$IP/includes/Setup.php";
 
+// Initialize main config instance
+$maintenance->setConfig( ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
+
 // Do the work
 $maintenance->execute();
 
diff --git a/maintenance/dumpSisterSites.php b/maintenance/dumpSisterSites.php
deleted file mode 100644 (file)
index 784dc7a..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Quickie page name dump script for SisterSites usage.
- * http://www.eekim.com/cgi-bin/wiki.pl?SisterSites
- *
- * Copyright © 2006 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 Maintenance
- */
-
-require_once __DIR__ . '/Maintenance.php';
-
-/**
- * Maintenance script that generates a page name dump for SisterSites usage.
- *
- * @ingroup Maintenance
- */
-class DumpSisterSites extends Maintenance {
-       public function __construct() {
-               parent::__construct();
-               $this->mDescription = "Quickie page name dump script for SisterSites usage";
-       }
-
-       public function execute() {
-               $dbr = wfGetDB( DB_SLAVE );
-               $dbr->bufferResults( false );
-               $result = $dbr->select( 'page',
-                       array( 'page_namespace', 'page_title' ),
-                       array(
-                               'page_namespace' => NS_MAIN,
-                               'page_is_redirect' => 0,
-                       ),
-                       __METHOD__ );
-
-               foreach ( $result as $row ) {
-                       $title = Title::makeTitle( $row->page_namespace, $row->page_title );
-                       $url = $title->getFullURL();
-                       $text = $title->getPrefixedText();
-                       $this->output( "$url $text\n" );
-               }
-       }
-}
-
-$maintClass = "DumpSisterSites";
-require_once RUN_MAINTENANCE_IF_MAIN;
index 7c17607..bde5a07 100644 (file)
@@ -59,6 +59,8 @@ Options:
   --server=h  Force reading from MySQL server h
   --current      Base ETA on number of pages in database instead of all revisions
   --spawn        Spawn a subprocess for loading text records
+  --buffersize=<size> Buffer size in bytes to use for reading the stub.
+              (Default: 512KB, Minimum: 4KB)
   --help      Display this help message
 ENDS
        );
index 3f10a33..e20c477 100644 (file)
@@ -60,11 +60,6 @@ if ( $__useReadline ) {
        readline_read_history( $__historyFile );
 }
 
-$__phpPath = preg_match( '/Zend Engine|HipHop VM/', wfShellExecWithStderr( 'php --version' ) )
-       ? 'php' //standard system path name
-       : ''; // not accessible somehow
-
-$__multiLine = '';
 $__e = null; // PHP exception
 while ( ( $__line = Maintenance::readconsole() ) !== false ) {
        if ( $__e && !preg_match( '/^(exit|die);?$/', $__line ) ) {
@@ -79,18 +74,8 @@ while ( ( $__line = Maintenance::readconsole() ) !== false ) {
                readline_add_history( $__line );
                readline_write_history( $__historyFile );
        }
-       // Try to only run PHP once a valid chunk is formed (deals with newlines)
-       if ( $__phpPath ) {
-               $res = wfShellExecWithStderr(
-                       "echo " . wfEscapeShellArg( "<?php\n{$__multiLine}{$__line}" ) . " | php -l" );
-               if ( strpos( $res, 'No syntax errors' ) !== 0 && substr( $__multiLine, -2 ) !== "\n\n" ) {
-                       $__multiLine .= "$__line\n";
-                       continue;
-               }
-       }
        try {
-               $__val = eval( $__multiLine . $__line . ";" );
-               $__multiLine = '';
+               $__val = eval( $__line . ";" );
        } catch ( Exception $__e ) {
                echo "Caught exception " . get_class( $__e ) .
                        ": {$__e->getMessage()}\n" . $__e->getTraceAsString() . "\n";
diff --git a/maintenance/exportSites.php b/maintenance/exportSites.php
new file mode 100644 (file)
index 0000000..1c71dc0
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+$basePath = getenv( 'MW_INSTALL_PATH' ) !== false ? getenv( 'MW_INSTALL_PATH' ) : __DIR__ . '/..';
+
+require_once $basePath . '/maintenance/Maintenance.php';
+
+/**
+ * Maintenance script for exporting site definitions from XML into the sites table.
+ *
+ * @since 1.25
+ *
+ * @licence GNU GPL v2+
+ * @author Daniel Kinzler
+ */
+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 );
+
+               parent::__construct();
+       }
+
+       /**
+        * Do the actual work. All child classes will need to implement this
+        */
+       public function execute() {
+               $file = $this->getArg( 0 );
+
+               if ( $file === 'php://output' || $file === 'php://stdout' ) {
+                       $this->mQuiet = true;
+               }
+
+               $handle = fopen( $file, 'w' );
+
+               if ( !$handle )  {
+                       $this->error( "Failed to open $file for writing.\n", 1 );
+               }
+
+               $exporter = new SiteExporter( $handle );
+
+               $sites = SiteSQLStore::newInstance()->getSites( 'recache' );
+               $exporter->exportSites( $sites );
+
+               fclose( $handle );
+
+               $this->output( "Exported sites to " . realpath( $file ) . ".\n" );
+       }
+
+}
+
+$maintClass = 'ExportSites';
+require_once( RUN_MAINTENANCE_IF_MAIN );
index d17b06d..5cf4536 100644 (file)
@@ -185,7 +185,7 @@ class FindHooks extends Maintenance {
 
                $retval = array();
                while ( true ) {
-                       $json = Http::get( wfAppendQuery( 'http://www.mediawiki.org/w/api.php', $params ) );
+                       $json = Http::get( wfAppendQuery( 'http://www.mediawiki.org/w/api.php', $params ), array(), __METHOD__ );
                        $data = FormatJson::decode( $json, true );
                        foreach ( $data['query']['categorymembers'] as $page ) {
                                if ( preg_match( '/Manual\:Hooks\/([a-zA-Z0-9- :]+)/', $page['title'], $m ) ) {
index 878593c..40e0915 100644 (file)
@@ -33,37 +33,57 @@ class FixUserRegistration extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Fix the user_registration field";
+               $this->setBatchSize( 1000 );
        }
 
        public function execute() {
-               $dbr = wfGetDB( DB_SLAVE );
                $dbw = wfGetDB( DB_MASTER );
 
-               // Get user IDs which need fixing
-               $res = $dbr->select( 'user', 'user_id', 'user_registration IS NULL', __METHOD__ );
-               foreach ( $res as $row ) {
-                       $id = $row->user_id;
-                       // Get first edit time
-                       $timestamp = $dbr->selectField(
-                               'revision',
-                               'MIN(rev_timestamp)',
-                               array( 'rev_user' => $id ),
-                               __METHOD__
+               $lastId = 0;
+               do {
+                       // Get user IDs which need fixing
+                       $res = $dbw->select(
+                               'user',
+                               'user_id',
+                               array(
+                                       'user_id > ' . $dbw->addQuotes( $lastId ),
+                                       'user_registration IS NULL'
+                               ),
+                               __METHOD__,
+                               array(
+                                       'LIMIT' => $this->mBatchSize,
+                                       'ORDER BY' => 'user_id',
+                               )
                        );
-                       // Update
-                       if ( !empty( $timestamp ) ) {
-                               $dbw->update(
-                                       'user',
-                                       array( 'user_registration' => $timestamp ),
-                                       array( 'user_id' => $id ),
+                       foreach ( $res as $row ) {
+                               $id = $row->user_id;
+                               $lastId = $id;
+                               // Get first edit time
+                               $timestamp = $dbw->selectField(
+                                       'revision',
+                                       'MIN(rev_timestamp)',
+                                       array( 'rev_user' => $id ),
                                        __METHOD__
                                );
-                               $this->output( "$id $timestamp\n" );
-                       } else {
-                               $this->output( "$id NULL\n" );
+                               // Update
+                               if ( $timestamp !== null ) {
+                                       $dbw->update(
+                                               'user',
+                                               array( 'user_registration' => $timestamp ),
+                                               array( 'user_id' => $id ),
+                                               __METHOD__
+                                       );
+                                       $user = User::newFromId( $id );
+                                       $user->invalidateCache();
+                                       $this->output( "Set registration for #$id to $timestamp\n" );
+                               } else {
+                                       $this->output( "Could not find registration for #$id NULL\n" );
+                               }
                        }
-               }
-               $this->output( "\n" );
+                       $this->output( "Waiting for slaves..." );
+                       wfWaitForSlaves();
+                       $this->output( " done.\n" );
+               } while ( $res->numRows() >= $this->mBatchSize );
        }
 }
 
index b803e3d..4b839a0 100644 (file)
@@ -117,7 +117,7 @@ function findAuxFile( $file, $auxExtension, $maxStrip = 1 ) {
 function getFileCommentFromSourceWiki( $wiki_host, $file ) {
        $url = $wiki_host . '/api.php?action=query&format=xml&titles=File:'
                . rawurlencode( $file ) . '&prop=imageinfo&&iiprop=comment';
-       $body = Http::get( $url );
+       $body = Http::get( $url, array(), __METHOD__ );
        if ( preg_match( '#<ii comment="([^"]*)" />#', $body, $matches ) == 0 ) {
                return false;
        }
@@ -128,7 +128,7 @@ function getFileCommentFromSourceWiki( $wiki_host, $file ) {
 function getFileUserFromSourceWiki( $wiki_host, $file ) {
        $url = $wiki_host . '/api.php?action=query&format=xml&titles=File:'
                . rawurlencode( $file ) . '&prop=imageinfo&&iiprop=user';
-       $body = Http::get( $url );
+       $body = Http::get( $url, array(), __METHOD__ );
        if ( preg_match( '#<ii user="([^"]*)" />#', $body, $matches ) == 0 ) {
                return false;
        }
index e67d077..6566a60 100644 (file)
@@ -59,7 +59,7 @@ class ImportSiteScripts extends Maintenance {
                        $url = wfAppendQuery( $baseUrl, array(
                                'action' => 'raw',
                                'title' => "MediaWiki:{$page}" ) );
-                       $text = Http::get( $url );
+                       $text = Http::get( $url, array(), __METHOD__ );
 
                        $wikiPage = WikiPage::factory( $title );
                        $content = ContentHandler::makeContent( $text, $wikiPage->getTitle() );
@@ -81,7 +81,7 @@ class ImportSiteScripts extends Maintenance {
 
                while ( true ) {
                        $url = wfAppendQuery( $baseUrl, $data );
-                       $strResult = Http::get( $url );
+                       $strResult = Http::get( $url, array(), __METHOD__ );
                        $result = FormatJson::decode( $strResult, true );
 
                        $page = null;
diff --git a/maintenance/importSites.php b/maintenance/importSites.php
new file mode 100644 (file)
index 0000000..7abb8d7
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+
+$basePath = getenv( 'MW_INSTALL_PATH' ) !== false ? getenv( 'MW_INSTALL_PATH' ) : __DIR__ . '/..';
+
+require_once $basePath . '/maintenance/Maintenance.php';
+
+/**
+ * Maintenance script for importing site definitions from XML into the sites table.
+ *
+ * @since 1.25
+ *
+ * @license GNU GPL v2+
+ * @author Daniel Kinzler
+ */
+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 );
+
+               parent::__construct();
+       }
+
+
+       /**
+        * Do the import.
+        */
+       public function execute() {
+               $file = $this->getArg( 0 );
+
+               $importer = new SiteImporter( SiteSQLStore::newInstance() );
+               $importer->setExceptionCallback( array( $this, 'reportException' ) );
+
+               $importer->importFromFile( $file );
+
+               $this->output( "Done.\n" );
+       }
+
+       /**
+        * Outputs a message via the output() method.
+        *
+        * @param Exception $ex
+        */
+       public function reportException( Exception $ex ) {
+               $msg = $ex->getMessage();
+               $this->output( "$msg\n" );
+       }
+}
+
+$maintClass = 'ImportSites';
+require_once( RUN_MAINTENANCE_IF_MAIN );
diff --git a/maintenance/jsduck/CustomTags.rb b/maintenance/jsduck/CustomTags.rb
deleted file mode 100644 (file)
index bf0e07f..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-# Custom tags for JSDuck 5.x
-# See also:
-# - https://github.com/senchalabs/jsduck/wiki/Tags
-# - https://github.com/senchalabs/jsduck/wiki/Custom-tags
-# - https://github.com/senchalabs/jsduck/wiki/Custom-tags/7f5c32e568eab9edc8e3365e935bcb836cb11f1d
-require 'jsduck/tag/tag'
-
-class CommonTag < JsDuck::Tag::Tag
-  def initialize
-    @html_position = POS_DOC + 0.1
-    @repeatable = true
-  end
-
-  def parse_doc(scanner, position)
-    if @multiline
-      return { :tagname => @tagname, :doc => :multiline }
-    else
-      text = scanner.match(/.*$/)
-      return { :tagname => @tagname, :doc => text }
-    end
-  end
-
-  def process_doc(context, tags, position)
-    context[@tagname] = tags
-  end
-
-  def format(context, formatter)
-    context[@tagname].each do |tag|
-      tag[:doc] = formatter.format(tag[:doc])
-    end
-  end
-end
-
-class SourceTag < CommonTag
-  def initialize
-    @tagname = :source
-    @pattern = "source"
-    super
-  end
-
-  def to_html(context)
-    context[@tagname].map do |source|
-      <<-EOHTML
-        <h3 class='pa'>Source</h3>
-        #{source[:doc]}
-      EOHTML
-    end.join
-  end
-end
-
-class SeeTag < CommonTag
-  def initialize
-    @tagname = :see
-    @pattern = "see"
-    super
-  end
-
-  def format(context, formatter)
-    position = context[:files][0]
-    context[@tagname].each do |tag|
-      tag[:doc] = '<li>' + render_long_see(tag[:doc], formatter, position) + '</li>'
-    end
-  end
-
-  def to_html(context)
-    <<-EOHTML
-      <h3 class="pa">Related</h3>
-      <ul>
-      #{ context[@tagname].map { |tag| tag[:doc] }.join("\n") }
-      </ul>
-    EOHTML
-  end
-
-  def render_long_see(tag, formatter, position)
-    if tag =~ /\A([^\s]+)( .*)?\Z/m
-      name = $1
-      doc = $2 ? ': ' + $2 : ''
-      return formatter.format("{@link #{name}} #{doc}")
-    else
-      JsDuck::Logger.warn(nil, 'Unexpected @see argument: "'+tag+'"', position)
-      return tag
-    end
-  end
-end
-
-class ContextTag < CommonTag
-  def initialize
-    @tagname = :context
-    @pattern = 'context'
-    super
-  end
-
-  def format(context, formatter)
-    position = context[:files][0]
-    context[@tagname].each do |tag|
-      tag[:doc] = render_long_context(tag[:doc], formatter, position)
-    end
-  end
-
-  def to_html(context)
-    <<-EOHTML
-      <h3 class="pa">Context</h3>
-      #{ context[@tagname].last[:doc] }
-    EOHTML
-  end
-
-  def render_long_context(tag, formatter, position)
-    if tag =~ /\A([^\s]+)/m
-      name = $1
-      return formatter.format("`context` : {@link #{name}}")
-    else
-      JsDuck::Logger.warn(nil, 'Unexpected @context argument: "'+tag+'"', position)
-      return tag
-    end
-  end
-end
index 145905f..eab2b63 100644 (file)
@@ -14,7 +14,8 @@
                                        "mw.html.Cdata",
                                        "mw.html.Raw",
                                        "mw.hook",
-                                       "mw.template"
+                                       "mw.template",
+                                       "mw.errorLogger"
                                ]
                        },
                        {
@@ -22,6 +23,7 @@
                                "classes": [
                                        "mw.Title",
                                        "mw.Uri",
+                                       "mw.messagePoster.*",
                                        "mw.notification",
                                        "mw.Notification_",
                                        "mw.user",
@@ -55,7 +57,8 @@
                        {
                                "name": "Interfaces",
                                "classes": [
-                                       "mw.Feedback"
+                                       "mw.Feedback",
+                                       "mw.Feedback.Dialog"
                                ]
                        },
                        {
diff --git a/maintenance/jsduck/config.json b/maintenance/jsduck/config.json
deleted file mode 100644 (file)
index 3a74804..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-       "--title": "MediaWiki core - Documentation",
-       "--categories": "./categories.json",
-       "--eg-iframe": "./eg-iframe.html",
-       "--tags": "./CustomTags.rb",
-       "--warnings": ["-nodoc(class,public)"],
-       "--builtin-classes": true,
-       "--warnings-exit-nonzero": true,
-       "--external": "HTMLElement,HTMLDocument,Window,File",
-       "--footer": "Documentation for MediaWiki core. Generated on {DATE} by {JSDUCK} {VERSION}.",
-       "--output": "../../docs/js",
-       "--": [
-               "./external.js",
-               "../../resources/src/mediawiki",
-               "../../resources/src/mediawiki.action",
-               "../../resources/src/mediawiki.api",
-               "../../resources/src/mediawiki.language",
-               "../../resources/src/mediawiki.page",
-               "../../resources/src/mediawiki.special",
-               "../../resources/src/mediawiki.toolbar",
-               "../../resources/src/jquery/jquery.accessKeyLabel.js",
-               "../../resources/src/jquery/jquery.arrowSteps.js",
-               "../../resources/src/jquery/jquery.autoEllipsis.js",
-               "../../resources/src/jquery/jquery.badge.js",
-               "../../resources/src/jquery/jquery.byteLength.js",
-               "../../resources/src/jquery/jquery.byteLimit.js",
-               "../../resources/src/jquery/jquery.checkboxShiftClick.js",
-               "../../resources/src/jquery/jquery.client.js",
-               "../../resources/src/jquery/jquery.colorUtil.js",
-               "../../resources/src/jquery/jquery.confirmable.js",
-               "../../resources/src/jquery/jquery.footHovzer.js",
-               "../../resources/src/jquery/jquery.getAttrs.js",
-               "../../resources/src/jquery/jquery.hidpi.js",
-               "../../resources/src/jquery/jquery.localize.js",
-               "../../resources/src/jquery/jquery.makeCollapsible.js",
-               "../../resources/src/jquery/jquery.spinner.js",
-               "../../resources/src/jquery/jquery.tabIndex.js",
-               "../../resources/lib/oojs",
-               "../../resources/lib/oojs-ui"
-       ]
-}
diff --git a/maintenance/jsduck/custom_tags.rb b/maintenance/jsduck/custom_tags.rb
new file mode 100644 (file)
index 0000000..39589a0
--- /dev/null
@@ -0,0 +1,120 @@
+# Custom tags for JSDuck 5.x
+# See also:
+# - https://github.com/senchalabs/jsduck/wiki/Tags
+# - https://github.com/senchalabs/jsduck/wiki/Custom-tags
+# - https://github.com/senchalabs/jsduck/wiki/Custom-tags/7f5c32e568eab9edc8e3365e935bcb836cb11f1d
+require 'jsduck/tag/tag'
+
+class CommonTag < JsDuck::Tag::Tag
+  def initialize
+    @html_position = POS_DOC + 0.1
+    @repeatable = true
+  end
+
+  def parse_doc(scanner, _position)
+    if @multiline
+      return { tagname: @tagname, doc: :multiline }
+    else
+      text = scanner.match(/.*$/)
+      return { tagname: @tagname, doc: text }
+    end
+  end
+
+  def process_doc(context, tags, _position)
+    context[@tagname] = tags
+  end
+
+  def format(context, formatter)
+    context[@tagname].each do |tag|
+      tag[:doc] = formatter.format(tag[:doc])
+    end
+  end
+end
+
+class SourceTag < CommonTag
+  def initialize
+    @tagname = :source
+    @pattern = 'source'
+    super
+  end
+
+  def to_html(context)
+    context[@tagname].map do |source|
+      <<-EOHTML
+        <h3 class='pa'>Source</h3>
+        #{source[:doc]}
+      EOHTML
+    end.join
+  end
+end
+
+class SeeTag < CommonTag
+  def initialize
+    @tagname = :see
+    @pattern = 'see'
+    super
+  end
+
+  def format(context, formatter)
+    position = context[:files][0]
+    context[@tagname].each do |tag|
+      tag[:doc] = '<li>' + render_long_see(tag[:doc], formatter, position) + '</li>'
+    end
+  end
+
+  def to_html(context)
+    <<-EOHTML
+      <h3 class="pa">Related</h3>
+      <ul>
+      #{ context[@tagname].map { |tag| tag[:doc] }.join("\n") }
+      </ul>
+    EOHTML
+  end
+
+  def render_long_see(tag, formatter, position)
+    match = /\A([^\s]+)( .*)?\Z/m.match(tag)
+
+    if match
+      name = match[1]
+      doc = match[2] ? ': ' + match[2] : ''
+      return formatter.format("{@link #{name}} #{doc}")
+    else
+      JsDuck::Logger.warn(nil, 'Unexpected @see argument: "' + tag + '"', position)
+      return tag
+    end
+  end
+end
+
+class ContextTag < CommonTag
+  def initialize
+    @tagname = :context
+    @pattern = 'context'
+    super
+  end
+
+  def format(context, formatter)
+    position = context[:files][0]
+    context[@tagname].each do |tag|
+      tag[:doc] = render_long_context(tag[:doc], formatter, position)
+    end
+  end
+
+  def to_html(context)
+    <<-EOHTML
+      <h3 class="pa">Context</h3>
+      #{ context[@tagname].last[:doc] }
+    EOHTML
+  end
+
+  def render_long_context(tag, formatter, position)
+    match = /\A([^\s]+)/m.match(tag)
+
+    if match
+      name = match[1]
+      return formatter.format("`context` : {@link #{name}}")
+    else
+      JsDuck::Logger.warn(nil, 'Unexpected @context argument: "' + tag + '"', position)
+      return tag
+    end
+  end
+end
index 0792c24..fca839d 100644 (file)
@@ -3,6 +3,36 @@
 <head>
        <meta charset="utf-8">
        <title>MediaWiki Code Example</title>
+       <script>
+               /**
+                * Basic log console for the example iframe in documentation pages.
+                */
+               var log = ( function () {
+                       var pre;
+                       return function () {
+                               var str, i, len, line;
+                               if ( !pre ) {
+                                       pre = document.createElement( 'pre' );
+                                       pre.className = 'mw-jsduck-log';
+                                       ( document.body || document.documentElement ).appendChild( pre );
+                               }
+                               str = [];
+                               for ( i = 0, len = arguments.length; i < len; i++ ) {
+                                       str.push( String( arguments[ i ] ) );
+                               }
+                               line = document.createElement( 'div' );
+                               line.className = 'mw-jsduck-log-line';
+                               line.appendChild(
+                                               document.createTextNode( str.join( ' , ' ) + '\n' )
+                               );
+                               pre.appendChild( line );
+                       };
+               }() );
+
+               window.onerror = function ( error, filePath, linerNr ) {
+                       log( error + '\n' + filePath + ':' + linerNr  );
+               };
+       </script>
        <script src="modules/src/startup.js"></script>
        <script>
                function startUp() {
@@ -11,6 +41,8 @@
        </script>
        <script src="modules/lib/jquery/jquery.js"></script>
        <script src="modules/src/mediawiki/mediawiki.js"></script>
+       <script src="modules/src/mediawiki/mediawiki.errorLogger.js"></script>
+       <script src="modules/src/mediawiki/mediawiki.startUp.js"></script>
        <style>
                .mw-jsduck-log {
                        position: relative;
 </head>
 <body>
 <script>
-       /**
-        * Basic log console for the example iframe in documentation pages.
-        */
-       ( function () {
-               var pre;
-               mw.log = function () {
-                       var str, i, len, line;
-                       if ( !pre ) {
-                               pre = document.createElement( 'pre' );
-                               pre.className = 'mw-jsduck-log';
-                               document.body.appendChild( pre );
-                       }
-                       str = [];
-                       for ( i = 0, len = arguments.length; i < len; i++ ) {
-                               str.push( String( arguments[ i ] ) );
-                       }
-                       line = document.createElement( 'div' );
-                       line.className = 'mw-jsduck-log-line';
-                       line.appendChild(
-                                       document.createTextNode( str.join( ' , ' ) + '\n' )
-                       );
-                       pre.appendChild( line );
-               };
-       }() );
+       if ( window.mw ) {
+               mw.log = log;
+       }
+
+       window.onerror = function ( error, filePath, linerNr ) {
+               log( filePath + ':' + linerNr  );
+       };
 
        /**
         * Method called by jsduck to execute the example code.
@@ -78,7 +93,7 @@
                        eval( code );
                        callback && callback( true );
                } catch ( e ) {
-                       mw.log( 'Uncaught ' + e );
+                       log( 'Uncaught ' + e );
                        callback && callback( false, e );
                        throw e;
                }
index 973cf7b..550f4a3 100644 (file)
@@ -323,7 +323,7 @@ class GenerateCollationData extends Maintenance {
                        $tertiaryCollator->sort( $x );
                        $cp = $x[0];
 
-                       $char = codepointToUtf8( $cp );
+                       $char = UtfNormal\Utils::codepointToUtf8( $cp );
                        $headerChars[] = $char;
                        if ( $primaryCollator->compare( $char, $prevChar ) <= 0 ) {
                                $numOutOfOrder++;
@@ -337,7 +337,7 @@ class GenerateCollationData extends Maintenance {
 
                        if ( $this->debugOutFile ) {
                                fwrite( $this->debugOutFile, sprintf( "%05X %s %s (%s)\n", $cp, $weight, $char,
-                                       implode( ' ', array_map( 'codepointToUtf8', $group ) ) ) );
+                                       implode( ' ', array_map( 'UtfNormal\Utils::codepointToUtf8', $group ) ) ) );
                        }
                }
 
index 29e4d2a..ac50d29 100644 (file)
@@ -117,8 +117,8 @@ class GenerateNormalizerDataAr extends Maintenance {
                                        continue;
                                }
 
-                               $source = hexSequenceToUtf8( $data['Code'] );
-                               $dest = hexSequenceToUtf8( $m[2] );
+                               $source = UtfNormal\Utils::hexSequenceToUtf8( $data['Code'] );
+                               $dest = UtfNormal\Utils::hexSequenceToUtf8( $m[2] );
                                $pairs[$source] = $dest;
                        }
                }
index 8ed3c32..8580187 100644 (file)
@@ -54,8 +54,8 @@ class GenerateNormalizerDataMl extends Maintenance {
 
                $pairs = array();
                foreach ( $hexPairs as $hexSource => $hexDest ) {
-                       $source = hexSequenceToUtf8( $hexSource );
-                       $dest = hexSequenceToUtf8( $hexDest );
+                       $source = UtfNormal\Utils::hexSequenceToUtf8( $hexSource );
+                       $dest = UtfNormal\Utils::hexSequenceToUtf8( $hexDest );
                        $pairs[$source] = $dest;
                }
 
index 0fd3242..3520b87 100644 (file)
@@ -108,12 +108,12 @@ class GenerateUtf8Case extends Maintenance {
                                $data[$name] = $numberedData[$number];
                        }
 
-                       $source = hexSequenceToUtf8( $data['Code'] );
+                       $source = UtfNormal\Utils::hexSequenceToUtf8( $data['Code'] );
                        if ( $data['Simple_Uppercase_Mapping'] ) {
-                               $upper[$source] = hexSequenceToUtf8( $data['Simple_Uppercase_Mapping'] );
+                               $upper[$source] = UtfNormal\Utils::hexSequenceToUtf8( $data['Simple_Uppercase_Mapping'] );
                        }
                        if ( $data['Simple_Lowercase_Mapping'] ) {
-                               $lower[$source] = hexSequenceToUtf8( $data['Simple_Lowercase_Mapping'] );
+                               $lower[$source] = UtfNormal\Utils::hexSequenceToUtf8( $data['Simple_Lowercase_Mapping'] );
                        }
                }
 
index f902e58..71641ef 100755 (executable)
@@ -152,14 +152,12 @@ def applyExcludes( mlist, path ):
     return mlist
 
 def charManualTable( path ):
-    fp = open( path, 'r', encoding = 'U8' )
-    ret = {}
-    for line in fp:
-        elems = line.split( '#' )[0].split( '|' )
-        elems = unichr3( *elems )
-        if len( elems ) > 1:
-            ret[elems[0]] = elems[1:]
-    return ret
+   fp = open( path, 'r', encoding = 'U8' )
+   for line in fp:
+       elems = line.split( '#' )[0].split( '|' )
+       elems = unichr3( *elems )
+       if len( elems ) > 1:
+           yield elems[0], elems[1:]
         
 def toManyRules( src_table ):
     tomany = set()
@@ -299,7 +297,9 @@ def main():
     # Unihan.txt
     ( t2s_1tomany, s2t_1tomany ) = unihanParser( han_dest )
 
+    t2s_1tomany.update( charManualTable( 'symme_supp.manual' ) )
     t2s_1tomany.update( charManualTable( 'trad2simp.manual' ) )
+    s2t_1tomany.update( ( t[0], [f] ) for ( f, t ) in charManualTable( 'symme_supp.manual' ) )
     s2t_1tomany.update( charManualTable( 'simp2trad.manual' ) )
     
     if pyversion[:1] in ['2']:
@@ -369,8 +369,6 @@ def main():
     toCN = dictToSortedList( customRules( 'toCN.manual' ), 1 )
     # sorted list toHK
     toHK = dictToSortedList( customRules( 'toHK.manual' ), 1 )
-    # sorted list toSG
-    toSG = dictToSortedList( customRules( 'toSG.manual' ), 1 )
     # sorted list toTW
     toTW = dictToSortedList( customRules( 'toTW.manual' ), 1 )
     
@@ -395,8 +393,6 @@ $zh2Hant = array(\n'''
         +  PHPArray( toHK ) \
         +  '\n);\n\n$zh2CN = array(\n' \
         +  PHPArray( toCN ) \
-        +  '\n);\n\n$zh2SG = array(\n' \
-        +  PHPArray( toSG ) \
         +  '\n);\n'
     
     if pyversion[:1] in ['2']:
index 7e3f87e..e183e56 100644 (file)
@@ -1,13 +1,12 @@
 The various .manual files contains special mappings not included in the
-unihan database, and phrases not included in the SCIM package. 
+unihan database, and phrases not included in the SCIM package.
 
-- simp2trad.manual: Simplified to Traditional character mapping. Most
-  data adapted from
+- symme_supp.manual: Supplementary character mapping of symmetric conversion
+  (1 to 1) between Simplified and Traditional Chinese.
 
-   冯寿忠,“非对称繁简字”对照表, 《语文建设通讯》1997-9第53期.
-   /http://www.yywzw.com/jt/feng/fengb01.htm
+- simp2trad.manual: Simplified to Traditional asymmetric charactermapping. 
 
-- trad2simp.manual: Traditional to Simplified character mapping.
+- trad2simp.manual: Traditional to Simplified asymmetric character mapping.
 
 - simp2trad_noconvert.manual: Do not convert the chars as inapporiate.
 
@@ -18,16 +17,19 @@ unihan database, and phrases not included in the SCIM package.
 
 - simpphrases.manual: Phrases in Simplified Chinese.
 
-- tradphrases_exclude.manual: Excluding several phrases from 
-  the SCIM phrases as inappoiated.
+- tradphrases_exclude.manual: Excluding several phrases from
+  the SCIM phrasesas inappoiated.
 
 - simpphrases_exclude.manual: Excluding several phrases from
   the SCIM phrases as inapporated.
 
-- toTrad.manual, toSimp.manual: Special phrase mappings that 
+- toTrad.manual, toSimp.manual: Special phrase mappings that
   tradphrases.manual or simphrases.manual cannot be handled.
 
-- toTW.manual, toCN.manual, toSG.manual and toHK.manual: Special phrase
-  mappings. 
+- toTW.manual, toCN.manual and toHK.manual: Special phrase mappings.
+
+* 為方便轉換,以上均含不完整詞組,請勿隨意刪除。
 
 zhengzhu at gmail dot com & shinjiman at gmail dot com
+
+Modified by User:Chiefwei at Chinese Wikipedia in 2015.
\ No newline at end of file
index 1b84f8e..da75c44 100644 (file)
@@ -1,23 +1,10 @@
-U+03CE0㳠|U+06FBE澾|
-U+0447D䑽|U+26A99𦪙|
-U+0497A䥺|U+091FE釾|
-U+0497D䥽|U+093FA鏺|
-U+04983䦃|U+0942F鐯|
-U+04985䦅|U+09425鐥|
-U+04B6A䭪|U+297AF𩞯|
-U+04C9F䲟|U+09BA3鮣|
-U+04CA0䲠|U+09C06鰆|
-U+04CA1䲡|U+09C0C鰌|
-U+04CA2䲢|U+09C27鰧|
-U+04CA3䲣|U+04C77䱷|
-U+04DAE䶮|U+09F91龑|
 U+04E07万|U+0842C萬|U+04E07万|
 U+04E0E与|U+08207與|U+04E0E与|
 U+04E11丑|U+04E11丑|U+0919C醜|
 U+04E2A个|U+0500B個|U+07B87箇|
 U+04E30丰|U+08C50豐|U+04E30丰|
 U+04E3A为|U+070BA為|U+07232爲|
-U+04E48么|U+04E48么|U+09EBD麽|U+05E7A幺|U+09EBC麼|
+U+04E48么|U+09EBC麼|U+04E48么|U+09EBD麽|U+05E7A幺|
 U+04E86了|U+04E86了|U+077AD瞭|
 U+04E8E于|U+065BC於|U+04E8E于|
 U+04E91云|U+096F2雲|U+04E91云|
@@ -31,13 +18,14 @@ U+04F19伙|U+04F19伙|U+05925夥|
 U+04F2A伪|U+0507D偽|U+050DE僞|
 U+04F53体|U+09AD4體|U+04F53体|
 U+04F59余|U+04F59余|U+09918餘|
-U+04F63佣|U+04F63佣|U+050AD傭|
+U+04F63佣|U+050AD傭|U+04F63佣|
 U+0501F借|U+0501F借|U+085C9藉|
 U+0513F儿|U+05152兒|U+0513F儿|
 U+0514B克|U+0514B克|U+0524B剋|
 U+0515A党|U+09EE8黨|U+0515A党|
 U+051AC冬|U+051AC冬|U+09F15鼕|
 U+051B2冲|U+06C96沖|U+0885D衝|
+U+051C4凄|U+06DD2淒|U+060BD悽|
 U+051C6准|U+051C6准|U+06E96準|
 U+051E0几|U+05E7E幾|U+051E0几|
 U+051EB凫|U+09CE7鳧|U+09CEC鳬|
@@ -52,7 +40,6 @@ U+0535C卜|U+0535C卜|U+08514蔔|
 U+05360占|U+05360占|U+04F54佔|
 U+05364卤|U+09E75鹵|U+06EF7滷|
 U+05377卷|U+05377卷|U+06372捲|
-U+0537A卺|U+05DF9巹|
 U+05382厂|U+05EE0廠|U+05382厂|
 U+05386历|U+06B77歷|U+066C6曆|U+053A4厤|
 U+05395厕|U+05EC1廁|U+053A0厠|
@@ -66,11 +53,12 @@ U+05408合|U+05408合|U+095A4閤|
 U+0540A吊|U+0540A吊|U+05F14弔|
 U+0540C同|U+0540C同|U+08855衕|
 U+0540E后|U+05F8C後|U+0540E后|
-U+05411向|U+05411向|U+056AE嚮|U+066CF曏|
+U+05411向|U+05411向|U+056AE嚮|
 U+0542F启|U+0555F啟|U+05553啓|
 U+05446呆|U+05446呆|U+07343獃|
 U+054B8咸|U+054B8咸|U+09E79鹹|
 U+054C4哄|U+054C4哄|U+09B28鬨|
+U+0556E啮|U+09F67齧|U+056D3囓|U+05699嚙|
 U+05582喂|U+05582喂|U+09935餵|
 U+056DE回|U+056DE回|U+08FF4迴|
 U+056E2团|U+05718團|U+07CF0糰|
@@ -78,10 +66,10 @@ U+056F0困|U+056F0困|U+0774F睏|
 U+05742坂|U+05742坂|U+0962A阪|
 U+0574F坏|U+058DE壞|U+0574F坏|
 U+0575B坛|U+058C7壇|U+07F48罈|
-U+057FC埼|U+057FC埼|U+07895碕|
 U+05899墙|U+07246牆|U+058BB墻|
 U+058F3壳|U+06BBC殼|U+06BBB殻|
 U+0590D复|U+05FA9復|U+08907複|
+U+05938夸|U+05938夸|U+08A87誇|
 U+05956奖|U+0734E獎|U+0596C奬|
 U+05978奸|U+05978奸|U+059E6姦|
 U+059AB妫|U+05AAF媯|U+05B00嬀|
@@ -92,12 +80,13 @@ U+05C3D尽|U+076E1盡|U+05118儘|
 U+05CB3岳|U+05CB3岳|U+05DBD嶽|
 U+05E03布|U+05E03布|U+04F48佈|
 U+05E18帘|U+07C3E簾|U+05E18帘|
-U+05E5Eå¹\9e|U+08946è¥\86|
+U+05E2D席|U+05E2D席|U+084C6è\93\86|
 U+05E72干|U+05E72干|U+04E7E乾|U+05E79幹|U+069A6榦|
+U+05E7A幺|U+04E48么|
 U+05E76并|U+04E26並|U+04F75併|
 U+05E78幸|U+05E78幸|U+05016倖|
 U+05E7F广|U+05EE3廣|U+05E7F广|
-U+05E84庄|U+05E84庄|U+0838A莊|
+U+05E84庄|U+0838A莊|U+05E84庄|
 U+05EB5庵|U+05EB5庵|U+083F4菴|
 U+05F25弥|U+05F4C彌|U+07030瀰|
 U+05F53当|U+07576當|U+05679噹|
@@ -126,6 +115,7 @@ U+066F2曲|U+066F2曲|U+09EAF麯|U+09EB4麯|
 U+0672F术|U+08853術|U+0672E朮|
 U+06731朱|U+06731朱|U+07843硃|
 U+06734朴|U+06734朴|U+06A38樸|
+U+06760杠|U+069D3槓|U+06760杠|
 U+0676F杯|U+0676F杯|U+076C3盃|
 U+0677E松|U+0677E松|U+09B06鬆|
 U+0677F板|U+0677F板|U+095C6闆|
@@ -143,15 +133,18 @@ U+06CE8注|U+06CE8注|U+08A3B註|
 U+06D82涂|U+05857塗|U+06D82涂|
 U+06D8C涌|U+06D8C涌|U+06E67湧|
 U+06DC0淀|U+06DC0淀|U+06FB1澱|
+U+06E16渖|U+0700B瀋|
 U+06E38游|U+06E38游|U+0904A遊|
 U+06EAF溯|U+06EAF溯|U+06CDD泝|
 U+06F13漓|U+06F13漓|U+07055灕|
 U+070BC炼|U+07149煉|U+0934A鍊|
+U+07096炖|U+071C9燉|
 U+0753B画|U+0756B畫|U+07575畵|
 U+075C7症|U+075C7症|U+07665癥|
 U+07618瘘|U+0763A瘺|U+0763B瘻|
 U+0786E确|U+078BA確|U+0786E确|
-U+07877硷|U+07906礆|U+09E7C鹼|
+U+07877硷|U+09E7C鹼|U+07906礆|
+U+078B1碱|U+09E7C鹼|
 U+079CB秋|U+079CB秋|U+097A6鞦|
 U+079CD种|U+07A2E種|U+079CD种|
 U+07A57穗|U+07A57穗|U+07E50繐|
@@ -163,35 +156,33 @@ U+07D2F累|U+07D2F累|U+07E8D纍|
 U+07EA4纤|U+07E96纖|U+07E34縴|
 U+07EBF线|U+07DDA線|U+07DAB綫|
 U+07EDD绝|U+07D55絕|U+07D76絶|
-U+07EE3绣|U+07D89綉|U+07E61繡|
+U+07EE3绣|U+07E61繡|U+07D89綉|
 U+07EE6绦|U+07D5B絛|U+07E27縧|
-U+07EF1绱|U+07DD4緔|U+0979D鞝|
-U+07EF7绷|U+07DB3綳|U+07E43繃|
+U+07EF1绱|U+0979D鞝|U+07DD4緔|
+U+07EF7绷|U+07E43繃|U+07DB3綳|
 U+07EFF绿|U+07DA0綠|U+07DD1緑|
+U+07F10缐|U+07DDA線|
 U+07F30缰|U+097C1韁|U+07E6E繮|
 U+07FA1羡|U+07FA8羨|
 U+080DC胜|U+052DD勝|U+080DC胜|
 U+080E1胡|U+080E1胡|U+09B0D鬍|U+0885A衚|
-U+0810F脏|U+081DF臟|U+09AD2髒|
+U+0810F脏|U+09AD2髒|U+081DF臟|
 U+0814A腊|U+081D8臘|U+0814A腊|
 U+081F4致|U+081F4致|U+07DFB緻|
 U+0820D舍|U+0820D舍|U+06368捨|
 U+082B8芸|U+082B8芸|U+08553蕓|
-U+082CE苎|U+082E7苧|
 U+082CF苏|U+08607蘇|U+056CC囌|U+07C64甦|
-U+082E7苧|U+085B4薴|
-U+082F9苹|U+0860B蘋|U+082F9苹|
 U+08303范|U+08303范|U+07BC4範|
-U+0836F药|U+0846F葯|U+085E5藥|
+U+0836F药|U+085E5藥|U+0846F葯|
 U+083B7获|U+07372獲|U+07A6B穫|
-U+083BC莼|U+08493蒓|U+084F4蓴|
+U+083BC莼|U+084F4蓴|U+08493蒓|
 U+08499蒙|U+08499蒙|U+077C7矇|U+06FDB濛|U+061DE懞|
 U+084D1蓑|U+084D1蓑|U+07C11簑|
 U+08511蔑|U+08511蔑|U+0884A衊|
 U+08574蕴|U+0860A蘊|U+085F4藴|
 U+0866B虫|U+087F2蟲|U+0866B虫|
 U+08721蜡|U+0881F蠟|U+08721蜡|
-U+0874E蝎|U+0880D蠍|
+U+0874E蝎|U+0880D蠍|U+0874E蝎|
 U+08868表|U+08868表|U+09336錶|
 U+08BF4说|U+08AAA說|U+08AAC説|
 U+08C23谣|U+08B20謠|U+08B21謡|
@@ -209,22 +200,22 @@ U+09170酰|U+09170酰|U+091AF醯|
 U+09178酸|U+09178酸|U+075E0痠|
 U+091C7采|U+091C7采|U+063A1採|U+057F0埰|
 U+091CC里|U+091CC里|U+088E1裡|U+088CF裏|
-U+093AD鎭|U+093AE鎮|
 U+0949F钟|U+0937E鍾|U+09418鐘|
-U+094A9钩|U+09264鉤|U+0920E鈎|
+U+094A9钩|U+0920E鈎|U+09264鉤|
 U+094B5钵|U+07F3D缽|U+09262鉢|
 U+094F2铲|U+093DF鏟|U+05277剷|
 U+09508锈|U+092B9銹|U+093FD鏽|
 U+09510锐|U+092B3銳|U+092ED鋭|
 U+09528锨|U+06774杴|U+09341鍁|
+U+0954B镋|U+09482钂|U+093B2鎲|
 U+0954C镌|U+0942B鐫|U+093B8鎸|
 U+09562镢|U+09481钁|U+0941D鐝|
 U+09605阅|U+095B1閱|U+095B2閲|
 U+096C7雇|U+096C7雇|U+050F1僱|
 U+096D5雕|U+096D5雕|U+09D70鵰|
+U+095F2闲|U+09592閒|U+09591閑|
 U+09709霉|U+09709霉|U+09EF4黴|
 U+09762面|U+09762面|U+09EB5麵|U+09EAA麪|U+09EAB麫|
-U+097B2鞲|U+097DD韝|
 U+0987B须|U+09808須|U+09B1A鬚|
 U+09893颓|U+09839頹|U+0983D頽|
 U+0989C颜|U+0984F顏|U+09854顔|
@@ -232,141 +223,11 @@ U+09965饥|U+098E2飢|U+09951饑|
 U+09980馀|U+09918餘|
 U+09986馆|U+09928館|U+08218舘|
 U+09A82骂|U+07F75罵|U+099E1駡|
+U+09CC1鳁|U+09C2E鰮|
 U+09C87鲇|U+09BF0鯰|U+09B8E鮎|
 U+09C9E鲞|U+09BD7鯗|U+09B9D鮝|
 U+09CC4鳄|U+09C77鱷|U+09C10鰐|
 U+09E21鸡|U+096DE雞|U+09DC4鷄|
 U+09E5A鹚|U+09DBF鶿|U+09DC0鷀|
-U+09E6E鹮|U+04D09䴉|
-U+09F44齄|U+09F47齇|
-U+20BB6𠮶|U+055F0嗰|
-U+26216𦈖|U+04308䌈|
-U+28C3E𨰾|U+093B7鎷|
-U+28C3F𨰿|U+091F3釳|
-U+28C40𨱀|U+2895B𨥛|
-U+28C41𨱁|U+09220鈠|
-U+28C42𨱂|U+0920B鈋|
-U+28C43𨱃|U+09232鈲|
-U+28C44𨱄|U+0922F鈯|
-U+28C45𨱅|U+09241鉁|
-U+28C47𨱇|U+092B6銶|
-U+28C48𨱈|U+092C9鋉|
-U+28C49𨱉|U+09344鍄|
-U+28C4A𨱊|U+289F1𨧱|
-U+28C4B𨱋|U+09302錂|
-U+28C4C𨱌|U+093C6鏆|
-U+28C4D𨱍|U+093AF鎯|
-U+28C4E𨱎|U+0936E鍮|
-U+28C4F𨱏|U+0939D鎝|
-U+28C50𨱐|U+28AD2𨫒|
-U+28C52𨱒|U+093C9鏉|
-U+28C53𨱓|U+0940E鐎|
-U+28C54𨱔|U+0940F鐏|
-U+28C55𨱕|U+28B82𨮂|
-U+28E02𨸂|U+0958D閍|
-U+28E03𨸃|U+09590閐|
-U+293FC𩏼|U+04A8F䪏|
-U+293FD𩏽|U+293EA𩏪|
-U+293FE𩏾|U+293A2𩎢|
-U+293FF𩏿|U+04A98䪘|
-U+29400𩐀|U+04A97䪗|
-U+29595𩖕|U+294E3𩓣|
-U+29596𩖖|U+09843顃|
-U+29597𩖗|U+04AF4䫴|
-U+29665𩙥|U+098B0颰|
-U+29666𩙦|U+295C0𩗀|
-U+29667𩙧|U+295E1𩗡|
-U+29668𩙨|U+29639𩘹|
-U+29669𩙩|U+29600𩘀|
-U+2966A𩙪|U+098B7颷|
-U+2966B𩙫|U+098BE颾|
-U+2966C𩙬|U+2963A𩘺|
-U+2966D𩙭|U+2961D𩘝|
-U+2966E𩙮|U+04B18䬘|
-U+2966F𩙯|U+04B1D䬝|
-U+29670𩙰|U+29648𩙈|
-U+29805𩠅|U+297D0𩟐|
-U+29806𩠆|U+29726𩜦|
-U+29807𩠇|U+04B40䭀|
-U+29808𩠈|U+04B43䭃|
-U+2980B𩠋|U+29754𩝔|
-U+2980C𩠌|U+09938餸|
-U+299E6𩧦|U+2987A𩡺|
-U+299E8𩧨|U+099CE駎|
-U+299E9𩧩|U+2990A𩤊|
-U+299EA𩧪|U+04BBE䮾|
-U+299EB𩧫|U+099DA駚|
-U+299EC𩧬|U+298A1𩢡|
-U+299ED𩧭|U+04B7F䭿|
-U+299EE𩧮|U+298BE𩢾|
-U+299EF𩧯|U+09A4B驋|
-U+299F0𩧰|U+04B9D䮝|
-U+299F1𩧱|U+29949𩥉|
-U+299F2𩧲|U+099E7駧|
-U+299F3𩧳|U+298B8𩢸|
-U+299F4𩧴|U+099E9駩|
-U+299F5𩧵|U+298B4𩢴|
-U+299F6𩧶|U+298CF𩣏|
-U+299FA𩧺|U+099F6駶|
-U+299FB𩧻|U+298F5𩣵|
-U+299FC𩧼|U+298FA𩣺|
-U+299FF𩧿|U+04BA0䮠|
-U+29A00𩨀|U+09A14騔|
-U+29A01𩨁|U+04B9E䮞|
-U+29A03𩨃|U+09A1D騝|
-U+29A04𩨄|U+09A2A騪|
-U+29A05𩨅|U+29938𩤸|
-U+29A06𩨆|U+29919𩤙|
-U+29A08𩨈|U+09A1F騟|
-U+29A09𩨉|U+29932𩤲|
-U+29A0A𩨊|U+09A1A騚|
-U+29A0B𩨋|U+29944𩥄|
-U+29A0C𩨌|U+29951𩥑|
-U+29A0D𩨍|U+29947𩥇|
-U+29A0F𩨏|U+04BB3䮳|
-U+29A10𩨐|U+299C6𩧆|
-U+29F79𩽹|U+09B65魥|
-U+29F7A𩽺|U+29D69𩵩|
-U+29F7B𩽻|U+29D79𩵹|
-U+29F7C𩽼|U+09BF6鯶|
-U+29F7D𩽽|U+29DB1𩶱|
-U+29F7E𩽾|U+09B9F鮟|
-U+29F7F𩽿|U+29DB0𩶰|
-U+29F80𩾀|U+09B95鮕|
-U+29F81𩾁|U+09BC4鯄|
-U+29F83𩾃|U+09BB8鮸|
-U+29F84𩾄|U+29DF0𩷰|
-U+29F85𩾅|U+29E03𩸃|
-U+29F86𩾆|U+29E26𩸦|
-U+29F87𩾇|U+09BF1鯱|
-U+29F88𩾈|U+04C59䱙|
-U+29F8A𩾊|U+04C6C䱬|
-U+29F8B𩾋|U+04C70䱰|
-U+29F8C𩾌|U+09C47鱇|
-U+29F8C𩾌|U+09C47鱇|
-U+29F8E𩾎|U+29F47𩽇|
-U+2A242𪉂|U+04CB0䲰|
-U+2A243𪉃|U+09CFC鳼|
-U+2A244𪉄|U+29FEA𩿪|
-U+2A245𪉅|U+2A026𪀦|
-U+2A246𪉆|U+09D32鴲|
-U+2A248𪉈|U+09D1C鴜|
-U+2A249𪉉|U+2A048𪁈|
-U+2A24A𪉊|U+09DE8鷨|
-U+2A24B𪉋|U+2A03E𪀾|
-U+2A24C𪉌|U+2A056𪁖|
-U+2A24D𪉍|U+09D5A鵚|
-U+2A24E𪉎|U+2A086𪂆|
-U+2A24F𪉏|U+2A0CF𪃏|
-U+2A250𪉐|U+2A0CD𪃍|
-U+2A251𪉑|U+09DD4鷔|
-U+2A252𪉒|U+2A115𪄕|
-U+2A254𪉔|U+2A106𪄆|
-U+2A255𪉕|U+2A1F3𪇳|
-U+2A388𪎈|U+04D2C䴬|
-U+2A389𪎉|U+09EB2麲|
-U+2A38A𪎊|U+09EA8麨|
-U+2A38B𪎋|U+04D34䴴|
-U+2A38C𪎌|U+09EB3麳|
-U+2A68F𪚏|U+2A600𪘀|
-U+2A690𪚐|U+2A62F𪘯|
+U+09EB9麹|U+09EB4麴|
+U+080C4胄|U+080C4胄|U+05191冑|
\ No newline at end of file
index a46560a..3266168 100644 (file)
 著
 竈
 彞
-=>"余"
-=>"𫗭"
-=>"𪨧"
-=>"𫚭"
-=>"𫔀"
-=>"𫊻"
-=>"𫋌"
-=>"蚃"
-=>"𩾂"
-=>"𫚜"
-=>"𫚢"
-=>"𧉰"
-=>"䙌"
-=>"𫊮"
-=>"𫋇"
-=>"𫉄"
-=>"𫘛"
-=>"𫘜"
-=>"𫘝"
-=>"𫘟"
-=>"𩧨"
-=>"𩧫"
-=>"𫘞"
-=>"𫘠"
-=>"𩧲"
-=>"𩧴"
-=>"𫘡"
-=>"𩧺"
-=>"𫘣"
-=>"𫘤"
-=>"𫘧"
-=>"𫘥"
-=>"𫘦"
-=>"𩨀"
-=>"𩨊"
-=>"𫘩"
-=>"𩨃"
-=>"𫘪"
-=>"𫘪"
-=>"𫘫"
-=>"𫘬"
-=>"𩨈"
-=>"𫘨"
-=>"𩨄"
-=>"𫘭"
-=>"𩧯"
-=>"𫘯"
-=>"𫘰"
-=>"𫘱"
-=>"𫘽"
-=>"𫚉"
-=>"𩽹"
-=>"𫚌"
-=>"𫚍"
-=>"𫚒"
-=>"𫚑"
-=>"𫚖"
-=>"𩽾"
-=>"䲟"
-=>"𫚓"
-=>"𫚗"
-=>"𫚔"
-=>"𫚛"
-=>"𩾃"
-=>"𫚚"
-=>"𩾁"
-=>"𫚙"
-=>"𫚡"
-=>"𫚞"
-=>"𩾇"
-=>"𩽼"
-=>"𫚣"
-=>"䲠"
-=>"䲡"
-=>"𫚊"
-=>"𫚥"
-=>"𫚕"
-=>"𫚤"
-=>"䲢"
-=>"𫚦"
-=>"𫚧"
-=>"𫚋"
-=>"𩾌"
-=>"𫚪"
-=>"𫚫"
-=>"𫚈"
-=>"𫚭"
-=>"𫛛"
-=>"𪉃"
-=>"𫛚"
-=>"𫛜"
-=>"𫛞"
-=>"𫛝"
-=>"𫛤"
-=>"𫛡"
-=>"𫁡"
-=>"𪉈"
-=>"𫛣"
-=>"𫛦"
-=>"𪉆"
-=>"𫛩"
-=>"𫛪"
-=>"𫛥"
-=>"𪉍"
-=>"𫛭"
-=>"𫛨"
-=>"𫛳"
-=>"𫛱"
-=>"𫛲"
-=>"𫛵"
-=>"𫛶"
-=>"𫛸"
-=>"𫛷"
-=>"𫛯"
-=>"𫛫"
-=>"𫛽"
-=>"𫜀"
-=>"𪉑"
-=>"𫜃"
-=>"𫛴"
-=>"𪉊"
-=>"𫜁"
-=>"𫜄"
-=>"𫛢"
-=>"𫛟"
-=>"𪎊"
-=>"𤿲"
-=>"𪎉"
-=>"𪎌"
-=>"𫜑"
-=>"𫜩"
-=>"𫜪"
-=>"𫜭"
-=>"𫜬"
-=>"𫜮"
-=>"𫜰"
+咤
+吒
+疴
+桿
+錶
+蘋
+詑
\ No newline at end of file
index d8602fe..3b14982 100644 (file)
@@ -60,7 +60,7 @@
 乾步
 乾氏
 乾泉
-乾清
+乾清
 乾渥
 乾灵
 乾男
 陈乾生
 陈公乾生
 字乾生
-不着痕迹
-不着边际
-与着
-与著书
-与著作
-与著名
-与著录
-与著称
-与著者
-与著述
-丑着
-丑著书
-丑著作
-丑著名
-丑著录
-丑著称
-丑著者
-丑著述
-临着
-临著书
-临著作
-临著名
-临著录
-临著称
-临著者
-临著述
-丽着
-丽著书
-丽著作
-丽著名
-丽著录
-丽著称
-丽著者
-丽著述
-乐着
-乐著书
-乐著作
-乐著名
-乐著录
-乐著称
-乐著者
-乐著述
-乘着
-乘著书
-乘著作
-乘著名
-乘著录
-乘著称
-乘著者
-乘著述
-争着
-争著书
-争著作
-争著名
-争著录
-争著称
-争著者
-争著述
-亮着
-亮著书
-亮著作
-亮著名
-亮著录
-亮著称
-亮著者
-亮著述
-仗着
-仗著书
-仗著作
-仗著名
-仗著录
-仗著称
-仗著者
-仗著述
-代表着
-代表著书
-代表著作
-代表著名
-代表著录
-代表著称
-代表著者
-代表著述
-伴着
-伴著书
-伴著作
-伴著名
-伴著录
-伴著称
-伴著者
-伴著述
-低着
-低著书
-低著作
-低著名
-低著录
-低著称
-低著者
-低著述
-住着
-住著书
-住著作
-住著名
-住著录
-住著称
-住著者
-住著述
-侧着
-侧著书
-侧著作
-侧著名
-侧著录
-侧著称
-侧著者
-侧著述
-保障着
-保障著书
-保障著作
-保障著名
-保障著录
-保障著称
-保障著者
-保障著述
-信着
-信著书
-信著作
-信著名
-信著录
-信著称
-信著者
-信著述
-候着
-候著书
-候著作
-候著名
-候著录
-候著称
-候著者
-候著述
-借着
-借著书
-借著作
-借著名
-借著录
-借著称
-借著者
-借著述
-做着
-做著书
-做著作
-做著名
-做著录
-做著称
-做著者
-做著述
-偷着
-偷著书
-偷著作
-偷著名
-偷著录
-偷著称
-偷著者
-偷著述
-光着
-光著书
-光著作
-光著名
-光著录
-光著称
-光著者
-光著述
-关着
-关著书
-关著作
-关著名
-关著录
-关著称
-关著者
-关著述
-冀着
-冀著书
-冀著作
-冀著名
-冀著录
-冀著称
-冀著者
-冀著述
-冒着
-冒著书
-冒著作
-冒著名
-冒著录
-冒著称
-冒著者
-冒著述
-写着
-写著书
-写著作
-写著名
-写著录
-写著称
-写著者
-写著述
-凉着
-凉著书
-凉著作
-凉著名
-凉著录
-凉著称
-凉著者
-凉著述
-制着
-制著书
-制著作
-制著名
-制著录
-制著称
-制著者
-制著述
-刻着
-刻著书
-刻著作
-刻著名
-刻著录
-刻著称
-刻著者
-刻著述
-办着
-办著书
-办著作
-办著名
-办著录
-办著称
-办著者
-办著述
-动着
-动著书
-动著作
-动著名
-动著录
-动著称
-动著者
-动著述
-努力着
-努力著书
-努力著作
-努力著名
-努力著录
-努力著称
-努力著者
-努力著述
-努着
-努著书
-努著作
-努著名
-努著录
-努著称
-努著者
-努著述
-印着
-印著书
-印著作
-印著名
-印著录
-印著称
-印著者
-印著述
-压着
-压著书
-压著作
-压著名
-压著录
-压著称
-压著者
-压著述
-去着
-去著书
-去著作
-去著名
-去著录
-去著称
-去著者
-去著述
-受着
-受著书
-受著作
-受著名
-受著录
-受著称
-受著者
-受著述
-变着
-变著书
-变著作
-变著名
-变著录
-变著称
-变著者
-变著述
-叫着
-叫著书
-叫著作
-叫著名
-叫著录
-叫著称
-叫著者
-叫著述
-向着
-向著书
-向著作
-向著名
-向著录
-向著称
-向著者
-向著述
-含着
-含著书
-含著作
-含著名
-含著录
-含著称
-含著者
-含著述
-听得着
-听不着
-听着
-听著书
-听著作
-听著名
-听著录
-听著称
-听著者
-听著述
-吹着
-吹著书
-吹著作
-吹著名
-吹著录
-吹著称
-吹著者
-吹著述
-味着
-味著书
-味著作
-味著名
-味著录
-味著称
-味著者
-味著述
-响着
-响著书
-响著作
-响著名
-响著录
-响著称
-响著者
-响著述
-哭着
-哭著书
-哭著作
-哭著名
-哭著录
-哭著称
-哭著者
-哭著述
-唱着
-唱著书
-唱著作
-唱著名
-唱著录
-唱著称
-唱著者
-唱著述
-喝着
-喝著书
-喝著作
-喝著名
-喝著录
-喝著称
-喝著者
-喝著述
-嚷着
-嚷著书
-嚷著作
-嚷著名
-嚷著录
-嚷著称
-嚷著者
-嚷著述
-因着
-因著书
-因著作
-因著名
-因著录
-因著称
-因著者
-因著述
-困着
-困著书
-困著作
-困著名
-困著录
-困著称
-困著者
-困著述
-围着
-围著书
-围著作
-围著名
-围著录
-围著称
-围著者
-围著述
-在着
-在著书
-在著作
-在著名
-在著录
-在著称
-在著者
-在著述
-坐着
-坐著书
-坐著作
-坐著名
-坐著录
-坐著称
-坐著者
-坐著述
-备着
-备著书
-备著作
-备著名
-备著录
-备著称
-备著者
-备著述
-夹着
-夹著书
-夹著作
-夹著名
-夹著录
-夹著称
-夹著者
-夹著述
-孤着
-孤著书
-孤著作
-孤著名
-孤著录
-孤著称
-孤著者
-孤著述
-学着
-学著书
-学著作
-学著名
-学著录
-学著称
-学著者
-学著述
-守着
-守著书
-守著作
-守著名
-守著录
-守著称
-守著者
-守著述
-定着
-定著书
-定著作
-定著名
-定著录
-定著称
-定著者
-定著述
-对着
-对著书
-对著作
-对著名
-对著录
-对著称
-对著者
-对著述
-寻着
-寻著书
-寻著作
-寻著名
-寻著录
-寻著称
-寻著者
-寻著述
-展着
-展著书
-展著作
-展著名
-展著录
-展著称
-展著者
-展著述
-带着
-带著书
-带著作
-带著名
-带著录
-带著称
-带著者
-带著述
-帮着
-帮著书
-帮著作
-帮著名
-帮著录
-帮著称
-帮著者
-帮著述
-应着
-应著书
-应著作
-应著名
-应著录
-应著称
-应著者
-应著述
-康着
-康著书
-康著作
-康著名
-康著录
-康著称
-康著者
-康著述
-开着
-开著书
-开著作
-开著名
-开著录
-开著称
-开著者
-开著述
-当着
-当著书
-当著作
-当著名
-当著录
-当著称
-当著者
-当著述
-待着
-待著书
-待著作
-待著名
-待著录
-待著称
-待著者
-待著述
-得着
-得著书
-得著作
-得著名
-得著录
-得著称
-得著者
-得著述
-循着
-循著书
-循著作
-循著名
-循著录
-循著称
-循著者
-循著述
-心着
-心著书
-心著作
-心著名
-心著录
-心著称
-心著者
-心著述
-忍着
-忍著书
-忍著作
-忍著名
-忍著录
-忍著称
-忍著者
-忍著述
-志着
-志著书
-志著作
-志著名
-志著录
-志著称
-志著者
-志著述
-忙着
-忙著书
-忙著作
-忙著名
-忙著录
-忙著称
-忙著者
-忙著述
-怀着
-怀著书
-怀著作
-怀著名
-怀著录
-怀著称
-怀著者
-怀著述
-急着
-急著书
-急著作
-急著名
-急著录
-急著称
-急著者
-急著述
-性着
-性著书
-性著作
-性著名
-性著录
-性著称
-性著者
-性著述
-恋着
-恋著书
-恋著作
-恋著名
-恋著录
-恋著称
-恋著者
-恋著述
-悠着
-悠著书
-悠著作
-悠著名
-悠著录
-悠著称
-悠著者
-悠著述
-惯着
-惯著书
-惯著作
-惯著名
-惯著录
-惯著称
-惯著者
-惯著述
-想着
-想著书
-想著作
-想著名
-想著录
-想著称
-想著者
-想著述
-战着
-战著书
-战著作
-战著名
-战著录
-战著称
-战著者
-战著述
-戴着
-戴著书
-戴著作
-戴著名
-戴著录
-戴著称
-戴著者
-戴著述
-扎着
-扎著书
-扎著作
-扎著名
-扎著录
-扎著称
-扎著者
-扎著述
-打着
-打著书
-打著作
-打著名
-打著录
-打著称
-打著者
-打著述
-扛着
-扛著书
-扛著作
-扛著名
-扛著录
-扛著称
-扛著者
-扛著述
-找得着
-找不着
-抓着
-抓著作
-抓著名
-抓著录
-抓著称
-抓著者
-抓著述
-披着
-披著书
-披著作
-披著名
-披著录
-披著称
-披著者
-披著述
-抬着
-抬著作
-抬著名
-抬著录
-抬著称
-抬著者
-抬著述
-抱着
-抱著作
-抱著名
-抱著录
-抱著称
-抱著者
-抱著述
-拉着
-拉著书
-拉著作
-拉著名
-拉著录
-拉著称
-拉著者
-拉著述
-拎着
-拎著作
-拎著名
-拎著录
-拎著称
-拎著者
-拎著述
-拖着
-拖著作
-拖著名
-拖著录
-拖著称
-拖著者
-拖著述
-拼着
-拼著作
-拼著名
-拼著录
-拼著称
-拼著者
-拼著述
-拿着
-拿著作
-拿著名
-拿著录
-拿著称
-拿著者
-拿著述
-持着
-持著作
-持著名
-持著录
-持著称
-持著者
-持著述
-挑着
-挑著作
-挑著名
-挑著录
-挑著称
-挑著者
-挑著述
-挡着
-挡著作
-挡著名
-挡著录
-挡著称
-挡著者
-挡著述
-挣着
-挣著书
-挣著作
-挣著名
-挣著录
-挣著称
-挣著者
-挣著述
-挥着
-挥著作
-挥著名
-挥著录
-挥著称
-挥著者
-挥著述
-挨着
-挨著作
-挨著名
-挨著录
-挨著称
-挨著者
-挨著述
-捆着
-捆著作
-捆著名
-捆著录
-捆著称
-捆著者
-捆著述
-据着
-据著书
-据著作
-据著名
-据著录
-据著称
-据著者
-据著述
-掖着
-掖著作
-掖著名
-掖著录
-掖著称
-掖著者
-掖著述
-接着
-接著作
-接著名
-接著录
-接著称
-接著者
-接著述
-揉着
-揉著书
-揉著作
-揉著名
-揉著录
-揉著称
-揉著者
-揉著述
-提着
-提著作
-提著名
-提著录
-提著称
-提著者
-提著述
-搂着
-搂著作
-搂著名
-搂著录
-搂著称
-搂著者
-搂著述
-摆着
-摆著作
-摆著名
-摆著录
-摆著称
-摆著者
-摆著述
-撼着
-撼著书
-撼著作
-撼著名
-撼著录
-撼著称
-撼著者
-撼著述
-敞着
-敞著作
-敞著名
-敞著录
-敞著称
-敞著者
-敞著述
-数着
-数著作
-数著名
-数著录
-数著称
-数著者
-数著述
-斗着
-斗著书
-斗著作
-斗著名
-斗著录
-斗著称
-斗著者
-斗著述
-斥着
-斥著书
-斥著作
-斥著名
-斥著录
-斥著称
-斥著者
-斥著述
-昂着
-昂著书
-昂著作
-昂著名
-昂著录
-昂著称
-昂著者
-昂著述
-映着
-映著书
-映著作
-映著名
-映著录
-映著称
-映著者
-映著述
-晃着
-晃著作
-晃著名
-晃著录
-晃著称
-晃著者
-晃著述
-暗着
-暗著书
-暗著作
-暗著名
-暗著录
-暗著称
-暗著者
-暗著述
-有着
-有著书
-有著作
-有著名
-有著录
-有著称
-有著者
-有著述
-望着
-望著作
-望著名
-望著录
-望著称
-望著者
-望著述
-朝着
-朝著作
-朝著名
-朝著录
-朝著称
-朝著者
-朝著述
-本着
-本著书
-本著作
-本著名
-本著录
-本著称
-本著者
-本著述
-杀着
-杀著书
-杀著作
-杀著名
-杀著录
-杀著称
-杀著者
-杀著述
-杂着
-杂著书
-杂著作
-杂著名
-杂著录
-杂著称
-杂著者
-杂著述
-来着
-来著书
-来著作
-来著名
-来著录
-来著称
-来著者
-来著述
-枕着
-枕著作
-枕著名
-枕著录
-枕著称
-枕著者
-枕著述
-梦着
-梦著书
-梦著作
-梦著名
-梦著录
-梦著称
-梦著者
-梦著述
-梳着
-梳著作
-梳著名
-梳著录
-梳著称
-梳著者
-梳著述
-求着
-求著书
-求著作
-求著名
-求著录
-求著称
-求著者
-求著述
-沉着
-沉著书
-沉著作
-沉著名
-沉著录
-沉著称
-沉著者
-沉著述
-沿着
-沿著书
-沿著作
-沿著名
-沿著录
-沿著称
-沿著者
-沿著述
-活着
-活著书
-活著作
-活著名
-活著录
-活著称
-活著者
-活著述
-流着
-流著书
-流著作
-流著名
-流著录
-流著称
-流著者
-流著述
-浮着
-浮著书
-浮著作
-浮著名
-浮著录
-浮著称
-浮著者
-浮著述
-润着
-润著书
-润著作
-润著名
-润著录
-润著称
-润著者
-润著述
-涵着
-涵著书
-涵著作
-涵著名
-涵著录
-涵著称
-涵著者
-涵著述
-渴着
-渴著书
-渴著作
-渴著名
-渴著录
-渴著称
-渴著者
-渴著述
-溢着
-溢著书
-溢著作
-溢著名
-溢著录
-溢著称
-溢著者
-溢著述
-演着
-演著书
-演著作
-演著名
-演著录
-演著称
-演著者
-演著述
-漫着
-漫著书
-漫著作
-漫著名
-漫著录
-漫著称
-漫著者
-漫著述
-点着
-点著作
-点著名
-点著录
-点著称
-点著者
-点著述
-烧着
-烧著作
-烧著名
-烧著录
-烧著称
-烧著者
-烧著述
-照着
-照著书
-照著作
-照著名
-照著录
-照著称
-照著者
-照著述
-爱着
-爱著书
-爱著作
-爱著名
-爱著录
-爱著称
-爱著者
-爱著述
-牵着
-牵著书
-牵著作
-牵著名
-牵著录
-牵著称
-牵著者
-牵著述
-犯得着
-犯不着
-独着
-独著书
-独著作
-独著名
-独著录
-独著称
-独著者
-独著述
-猜着
-猜着书
-猜著作
-猜著名
-猜著录
-猜著称
-猜著者
-猜著述
-甜着
-甜著书
-甜著作
-甜著名
-甜著录
-甜著称
-甜著者
-甜著述
-用得着
-用不着
-用着
-用著书
-用著作
-用著名
-用著录
-用著称
-用著者
-用著述
-留着
-留着书
-留著作
-留著名
-留著录
-留著称
-留著者
-留著述
-疑着
-疑著书
-疑著作
-疑著名
-疑著录
-疑著称
-疑著者
-疑著述
-皱着
-皱著书
-皱著作
-皱著名
-皱著录
-皱著称
-皱著者
-皱著述
-盛着
-盛著书
-盛著作
-盛著名
-盛著录
-盛著称
-盛著者
-盛著述
-盯着
-盯着书
-盯著作
-盯著名
-盯著录
-盯著称
-盯著者
-盯著述
-盾着
-盾著书
-盾著作
-盾著名
-盾著录
-盾著称
-盾著者
-盾著述
-看得着
-看不着
-看着
-看着书
-看著作
-看著名
-看著录
-看著称
-看著者
-看著述
-瞧着
-瞧着书
-瞧著作
-瞧著名
-瞧著录
-瞧著称
-瞧著者
-瞧著述
-着业
-着丝
-着么
-着人
-着什么急
-着他
-着令
-着位
-着体
-着你
-着便
-着凉
-着力
-着劲
-着号
-着呢
-着哩
-着地
-着墨
-着声
-着处
-着她
-着妳
-着姓
-着它
-着定
-着实
-着己
-着帐
-着床
-着庸
-着式
-着录
-着心
-着志
-着忙
-着急
-着恼
-着惊
-着想
-着意
-着慌
-着我
-着手
-着抹
-着摸
-着撰
-着数
-着明
-着末
-着极
-着格
-着棋
-着槁
-着气
-着法
-着浅
-着火
-着然
-着甚
-着生
-着疑
-着白
-着相
-着眼
-着着
-着祂
-着积
-着稿
-着笔
-着籍
-着紧
-着緑
-着绊
-着绩
-着绯
-着绿
-着肉
-着脚
-着舰
-着色
-着节
-着花
-着莫
-着落
-着藁
-着衣
-着装
-着要
-着警
-着趣
-着边
-着迷
-着迹
-着重
-着録
-着闻
-着陆
-着雝
-着鞭
-着题
-着魔
-睡得着
-睡不着
-睡着
-睡著书
-睡著作
-睡著名
-睡著录
-睡著称
-睡著者
-睡著述
-瞒着
-瞒著书
-瞒著作
-瞒著名
-瞒著录
-瞒著称
-瞒著者
-瞒著述
-瞪着
-瞪著书
-瞪著作
-瞪著名
-瞪著录
-瞪著称
-瞪著者
-瞪著述
-福着
-福著书
-福著作
-福著名
-福著录
-福著称
-福著者
-福著述
-空着
-空著书
-空著作
-空著名
-空著录
-空著称
-空著者
-空著述
-穿着
-穿著书
-穿著作
-穿著名
-穿著录
-穿著称
-穿著者
-穿著述
-竖着
-竖著书
-竖著作
-竖著名
-竖著录
-竖著称
-竖著者
-竖著述
-站着
-站著书
-站著作
-站著名
-站著录
-站著称
-站著者
-站著述
-笑着
-笑著书
-笑著作
-笑著名
-笑著录
-笑著称
-笑著者
-笑著述
-管着
-管著书
-管著作
-管著名
-管著录
-管著称
-管著者
-管著述
-绑着
-绑著书
-绑著作
-绑著名
-绑著录
-绑著称
-绑著者
-绑著述
-绕着
-绕著书
-绕著作
-绕著名
-绕著录
-绕著称
-绕著者
-绕著述
-缠着
-缠著书
-缠著作
-缠著名
-缠著录
-缠著称
-缠著者
-缠著述
-罩着
-罩著书
-罩著作
-罩著名
-罩著录
-罩著称
-罩著者
-罩著述
-美着
-美著书
-美著作
-美著名
-美著录
-美著称
-美著者
-美著述
-耀着
-耀著书
-耀著作
-耀著名
-耀著录
-耀著称
-耀著者
-耀著述
-考着
-考著书
-考著作
-考著名
-考著录
-考著称
-考著者
-考著述
-背着
-背著书
-背著作
-背著名
-背著录
-背著称
-背著者
-背著述
-胶着
-胶著书
-胶著作
-胶著名
-胶著录
-胶著称
-胶著者
-胶著述
-艺着
-艺著书
-艺著作
-艺著名
-艺著录
-艺著称
-艺著者
-艺著述
-苦着
-苦著书
-苦著作
-苦著名
-苦著录
-苦著称
-苦著者
-苦著述
-获着
-获著书
-获著作
-获著名
-获著录
-获著称
-获著者
-获著述
-落着
-落著书
-落著作
-落著名
-落著录
-落著称
-落著者
-落著述
-蒙着
-蒙著书
-蒙著作
-蒙著名
-蒙著录
-蒙著称
-蒙著者
-蒙著述
-藏着
-藏著书
-藏著作
-藏著名
-藏著录
-藏著称
-藏著者
-藏著述
-蘸着
-蘸著书
-蘸著作
-蘸著名
-蘸著录
-蘸著称
-蘸著者
-蘸著述
-行着
-行著书
-行著作
-行著名
-行著录
-行著称
-行著者
-行著述
-衣着
-衣著书
-衣著作
-衣著名
-衣著录
-衣著称
-衣著者
-衣著述
-装着
-装著书
-装著作
-装著名
-装著录
-装著称
-装著者
-装著述
-裹着
-裹著书
-裹著作
-裹著名
-裹著录
-裹著称
-裹著者
-裹著述
-见着
-见著书
-见著作
-见著名
-见著录
-见著称
-见著者
-见著述
-记着
-记著书
-记著作
-记著名
-记著录
-记著称
-记著者
-记著述
-试着
-试著书
-试著作
-试著名
-试著录
-试著称
-试著者
-试著述
-语着
-语著书
-语著作
-语著名
-语著录
-语著称
-语著者
-语著述
-豫着
-豫著书
-豫著作
-豫著名
-豫著录
-豫著称
-豫著者
-豫著述
-贞着
-贞著书
-贞著作
-贞著名
-贞著录
-贞著称
-贞著者
-贞著述
-走着
-走著书
-走著作
-走著名
-走著录
-走著称
-走著者
-走著述
-赶着
-赶著书
-赶著作
-赶著名
-赶著录
-赶著称
-赶著者
-赶著述
-趴着
-趴著书
-趴著作
-趴著名
-趴著录
-趴著称
-趴著者
-趴著述
-跃着
-跃著书
-跃著作
-跃著名
-跃著录
-跃著称
-跃著者
-跃著述
-跑着
-跑著书
-跑著作
-跑著名
-跑著录
-跑著称
-跑著者
-跑著述
-跟着
-跟著书
-跟著作
-跟著名
-跟著录
-跟著称
-跟著者
-跟著述
-跪着
-跪著书
-跪著作
-跪著名
-跪著录
-跪著称
-跪著者
-跪著述
-跳着
-跳著书
-跳著作
-跳著名
-跳著录
-跳著称
-跳著者
-跳著述
-踏着
-踏著书
-踏著作
-踏著名
-踏著录
-踏著称
-踏著者
-踏著述
-踩着
-踩著书
-踩著作
-踩著名
-踩著录
-踩著称
-踩著者
-踩著述
-身着
-身著书
-身著作
-身著名
-身著录
-身著称
-身著者
-身著述
-躺着
-躺著书
-躺著作
-躺著名
-躺著录
-躺著称
-躺著者
-躺著述
-转着
-转著书
-转著作
-转著名
-转著录
-转著称
-转著者
-转著述
-载着
-载著书
-载著作
-载著名
-载著录
-载著称
-载著者
-载著述
-达着
-达著书
-达著作
-达著名
-达著录
-达著称
-达著者
-达著述
-远着
-远著书
-远著作
-远著名
-远著录
-远著称
-远著者
-远著述
-连着
-连著书
-连著作
-连著名
-连著录
-连著称
-连著者
-连著述
-追着
-追著书
-追著作
-追著名
-追著录
-追著称
-追著者
-追著述
-逆着
-逆著书
-逆著作
-逆著名
-逆著录
-逆著称
-逆著者
-逆著述
-逼着
-逼著书
-逼著作
-逼著名
-逼著录
-逼著称
-逼著者
-逼著述
-遇着
-遇著书
-遇著作
-遇著名
-遇著录
-遇著称
-遇著者
-遇著述
-配着
-配著书
-配著作
-配著名
-配著录
-配著称
-配著者
-配著述
-酿着
-酿著书
-酿著作
-酿著名
-酿著录
-酿著称
-酿著者
-酿著述
-铺着
-铺著书
-铺著作
-铺著名
-铺著录
-铺著称
-铺著者
-铺著述
-闭着
-闭著书
-闭著作
-闭著名
-闭著录
-闭著称
-闭著者
-闭著述
-闲着
-闲著书
-闲著作
-闲著名
-闲著录
-闲著称
-闲著者
-闲著述
-附着
-附著书
-附著作
-附著名
-附著录
-附著称
-附著者
-附著述
-陋着
-陋著书
-陋著作
-陋著名
-陋著录
-陋著称
-陋著者
-陋著述
-陪着
-陪著书
-陪著作
-陪著名
-陪著录
-陪著称
-陪著者
-陪著述
-随着
-随著书
-随著作
-随著名
-随著录
-随著称
-随著者
-随著述
-隔着
-隔著书
-隔著作
-隔著名
-隔著录
-隔著称
-隔著者
-隔著述
-雅着
-雅著书
-雅著作
-雅著名
-雅著录
-雅著称
-雅著者
-雅著述
-顶着
-顶著书
-顶著作
-顶著名
-顶著录
-顶著称
-顶著者
-顶著述
-顺着
-顺著书
-顺著作
-顺著名
-顺著录
-顺著称
-顺著者
-顺著述
-领着
-领著书
-领著作
-领著名
-领著录
-领著称
-领著者
-领著述
-飘着
-飘著书
-飘著作
-飘著名
-飘著录
-飘著称
-飘著者
-飘著述
-驾着
-驾著书
-驾著作
-驾著名
-驾著录
-驾著称
-驾著者
-驾著述
-骂着
-骂著书
-骂著作
-骂著名
-骂著录
-骂著称
-骂著者
-骂著述
-骑着
-骑著书
-骑著作
-骑著名
-骑著录
-骑著称
-骑著者
-骑著述
-骗着
-骗著书
-骗著作
-骗著名
-骗著录
-骗著称
-骗著者
-骗著述
-高着
-高著书
-高著作
-高著名
-高著录
-高著称
-高著者
-高著述
-髭着
-髭著书
-髭著作
-髭著名
-髭著录
-髭著称
-髭著者
-髭著述
-黏着
-黏著书
-黏著作
-黏著名
-黏著录
-黏著称
-黏著者
-黏著述
-新著龙虎门
-护着
-护著书
-护著作
-护著名
-护著录
-护著称
-护著者
-护著述
-保护着
-爱护着
-庇护着
-传着
-传著书
-传著作
-传著名
-传著录
-传著称
-传著者
-传著述
-标志着
-流露着
-靠着
-靠著作
-靠著名
-靠著录
-靠著称
-靠著者
-靠著述
-玩着
-迫着
-吃得着
-吃不着
-吃着
-闻得着
-闻不着
-闻着
-嗅得着
-嗅不着
-嗅着
-警戒着
+乾神
+乾西
+象乾
+陈遇乾
+曾运乾
+王道乾
+孙乾
+乾潭
+乾贵士
 於乎
 於戏
 魏徵
 於菟
 於潜县
 石碁镇
-因著《
-因著〈
 李泽钜
 於祥玉
 於崇文
 幺二三
 幺篇
 幺谦
-麴义
-麴英
-麯崇裕
 阿部正瞭
 醯酱
 醯鸡
 醯醢
 醯壶
 苧烯
-近角聪信
-米泽瑠美
-峯岸南
-僧伽吒
-王道乾
 後姓
+先名后姓
+矇眬
+朱有燉
+缐姓
+缐国安
+仇雠
+雠校
+雠定
+校雠
+雠夷
+雠问
+甚夥
+吴克羣
+宏碁
+石碁
+碁圣
+暗闇
+繙㠾
+惏慄
+惏悷
+目劄
+橡椀
+谢肇淛
+朱淛
+諲譔
+李譔
+扞格
+陈元扞
+祕宜
+李祕
+剋了
+挨剋
+剋架
+皁保
+爨翫
+碁所
+於之莹
+陆徵祥
+瞭台
+文徵明
+博和讬
+楈枒
+米渖
+白渖
+拾渖
+渖液
+醉渖
+墨渖
+如渖
+残渖
+馀渖
+庆馀
+馀庆
+子馀
+郭行馀
+王馀鱼
+馀年无多
\ No newline at end of file
index 3e9d3ec..b4dd3e0 100644 (file)
 樑
 摺叠
 餗
-安甯
\ No newline at end of file
+安甯
+傢俬
+癥瘕
+存摺
+着录
+硷淡
+悽恻
+鲇鱼
+和尚撞一天钟
+余
\ No newline at end of file
diff --git a/maintenance/language/zhtable/symme_supp.manual b/maintenance/language/zhtable/symme_supp.manual
new file mode 100644 (file)
index 0000000..09e1415
--- /dev/null
@@ -0,0 +1,27 @@
+U+03476㑶|U+03439㐹|
+U+042F9䋹|U+0433F䌿|
+U+043B1䎱|U+043AC䎬|
+U+04C98䲘|U+09CE4鳤|
+U+0508C傌|U+03437㐷|
+U+05DA8嶨|U+05CC3峃|
+U+05ECE廎|U+05EBC庼|
+U+069EE槮|U+0692E椮|
+U+06EAE溮|U+06D49浉|
+U+07069灩|U+06EDF滟|
+U+074A1璡|U+0740E琎|
+U+074B5璵|U+07399玙|
+U+074B8璸|U+07478瑸|
+U+075F2痲|U+075F3痳|
+U+0819E膞|U+043DD䏝|
+U+085ED藭|U+044D6䓖|
+U+08600蘀|U+0841A萚|
+U+08AE1諡|U+08C25谥|
+U+09746靆|U+053C7叇|
+U+09749靉|U+053C6叆|
+U+09A44驄|U+29A02𩨂|
+U+09C1B鰛|U+09CC1鳁|
+U+09EB3麳|U+2A38C𪎌|
+U+295E1𩗡|U+29667𩙧|
+U+298F5𩣵|U+299FB𩧻|
+U+29F47𩽇|U+29F8E𩾎|
+U+2A23C𪈼|U+2A253𪉓|
\ No newline at end of file
index 243f61b..a678ac9 100644 (file)
-」    ”
-「    “
-『    ‘
-』    ’
+餘    余
+諮    咨
+鍅    钫
+鉳    锫
+鑀    锿
+錼    镎
+鋂    镅
+鈽    钚
+鎝    锝
+鉲    锎
+矽    硅
+矽肺 矽肺
+矽塵 矽尘
+矽尘 矽尘
+矽鋼 矽钢
+矽钢 矽钢
+侏儸紀      侏罗纪
+甚麽 什么
+甚麼 什么
+胺基酸      氨基酸
+水氣 水汽
+計畫 计划
+天份 天分
+名份 名分
+職份 职分
+份外 分外
+份內 分内
+部份 部分
+知識份子   知识分子
+積極份子   积极分子
+投機份子   投机分子
+一份子      一分子
+水份 水分
+氧份 养分
+糖份 糖分
+鹽份 盐分
+組份 组分
+成份 成分
+本份 本分
+本本份份   本本分分
+恰如其份   恰如其分
+非份 非分
+過份 过分
+份量 分量
+緣份 缘分
+身分 身份
+煞車 刹车
+疊代 迭代
+叱吒 叱咤
+啸吒 啸咤
+姊姊 姐姐
+姊弟 姐弟
+姊夫 姐夫
+大姊 大姐
+御姊 御姐
+表姊 表姐
+堂姊 堂姐
+學姊 学姐
+乾姊 干姐
+澈底 彻底
+逕庭 径庭
+逕到 径到
+逕取 径取
+逕入 径入
+逕行 径行
+逕自 径自
+逕往 径往
+逕寄 径寄
+逕啟 径启
+逕迎 径迎
+徵狀 症状
+報帳 报账
+本帳 本账
+筆帳 笔账
+查帳 查账
+沖帳 冲账
+呆帳 呆账
+倒帳 倒账
+到帳 到账
+對帳 对账
+放帳 放账
+付帳 付账
+公帳 公账
+關帳 关账
+管帳 管账
+還帳 还账
+糊塗帳      糊涂账
+混帳 混账
+記帳 记账
+假帳 假账
+建帳 建账
+交帳 交账
+結帳 结账
+進帳 进账
+經常帳      经常账
+經濟帳      经济账
+舊帳 旧账
+開帳 开账
+賴帳 赖账
+爛帳 烂账
+流水帳      流水账
+買帳 买账
+明白帳      明白账
+簽帳 签账
+欠帳 欠账
+清帳 清账
+認帳 认账
+入帳 入账
+賒帳 赊账
+收帳 收账
+私帳 私账
+死帳 死账
+算帳 算账
+台帳 台账
+銷帳 销账
+要帳 要账
+轉帳 转账
+總帳 总账
+帳本 账本
+帳簿 账簿
+帳冊 账册
+帳單 账单
+帳房 账房
+帳號 账号
+帳戶 账户
+帳款 账款
+帳面 账面
+帳目 账目
+帳上 账上
+帳外 账外
+帳務 账务
+螢光棒      荧光棒
+辭彙 词汇
+著業 着业
+著絲 着丝
+著麼 着么
+著人 着人
+著什麼      着什么
+著他 着他
+著令 着令
+著位 着位
+著體 着体
+著你 着你
+著便 着便
+著涼 着凉
+著力 着力
+著勁 着劲
+著號 着号
+著呢 着呢
+著哩 着哩
+著地 着地
+著墨 着墨
+著聲 着声
+著處 着处
+著她 着她
+著妳 着妳
+著姓 着姓
+著它 着它
+著定 着定
+著實 着实
+著己 着己
+著帳 着帐
+著床 着床
+著庸 着庸
+著式 着式
+著錄 着录
+著心 着心
+著志 着志
+著忙 着忙
+著急 着急
+著惱 着恼
+著驚 着惊
+著想 着想
+著意 着意
+著慌 着慌
+著我 着我
+著手 着手
+著抹 着抹
+著摸 着摸
+著撰 着撰
+著數 着数
+著明 着明
+著末 着末
+著極 着极
+著格 着格
+著棋 着棋
+著槁 着槁
+著氣 着气
+著法 着法
+著淺 着浅
+著火 着火
+著然 着然
+著甚 着甚
+著生 着生
+著疑 着疑
+著白 着白
+著相 着相
+著眼 着眼
+著著 着着
+著祂 着祂
+著積 着积
+著稿 着稿
+著筆 着笔
+著籍 着籍
+著緊 着紧
+著緑 着緑
+著絆 着绊
+著績 着绩
+著緋 着绯
+著綠 着绿
+著肉 着肉
+著腳 着脚
+著艦 着舰
+著色 着色
+著節 着节
+著花 着花
+著莫 着莫
+著落 着落
+著槁 着藁
+著衣 着衣
+著裝 着装
+著要 着要
+著警 着警
+著趣 着趣
+著邊 着边
+著迷 着迷
+著跡 着迹
+著重 着重
+著録 着録
+著聞 着闻
+著陸 着陆
+著雝 着雝
+著鞭 着鞭
+著題 着题
+著魔 着魔
+不著 不着
+不著書      不著书
+不著名      不著名
+不著錄      不著录
+不著稱      不著称
+不著述      不著述
+與著 与着
+與著書      与著书
+與著作      与著作
+與著名      与著名
+與著錄      与著录
+與著稱      与著称
+與著者      与著者
+與著述      与著述
+醜著 丑着
+醜著書      丑著书
+醜著作      丑著作
+醜著名      丑著名
+醜著錄      丑著录
+醜著稱      丑著称
+醜著者      丑著者
+醜著述      丑著述
+臨著 临着
+臨著書      临著书
+臨著作      临著作
+臨著名      临著名
+臨著錄      临著录
+臨著稱      临著称
+臨著者      临著者
+臨著述      临著述
+麗著 丽着
+麗著書      丽著书
+麗著作      丽著作
+麗著名      丽著名
+麗著錄      丽著录
+麗著稱      丽著称
+麗著者      丽著者
+麗著述      丽著述
+樂著 乐着
+樂著書      乐著书
+樂著作      乐著作
+樂著名      乐著名
+樂著錄      乐著录
+樂著稱      乐著称
+樂著者      乐著者
+樂著述      乐著述
+乘著 乘着
+乘著書      乘著书
+乘著作      乘著作
+乘著名      乘著名
+乘著錄      乘著录
+乘著稱      乘著称
+乘著者      乘著者
+乘著述      乘著述
+爭著 争着
+爭著書      争著书
+爭著作      争著作
+爭著名      争著名
+爭著錄      争著录
+爭著稱      争著称
+爭著者      争著者
+爭著述      争著述
+亮著 亮着
+亮著書      亮著书
+亮著作      亮著作
+亮著名      亮著名
+亮著錄      亮著录
+亮著稱      亮著称
+亮著者      亮著者
+亮著述      亮著述
+仗著 仗着
+仗著書      仗著书
+仗著作      仗著作
+仗著名      仗著名
+仗著錄      仗著录
+仗著稱      仗著称
+仗著者      仗著者
+仗著述      仗著述
+代表著      代表着
+代表著書   代表著书
+代表著作   代表著作
+代表著名   代表著名
+代表著錄   代表著录
+代表著稱   代表著称
+代表著者   代表著者
+代表著述   代表著述
+伴著 伴着
+伴著書      伴著书
+伴著作      伴著作
+伴著名      伴著名
+伴著錄      伴著录
+伴著稱      伴著称
+伴著者      伴著者
+伴著述      伴著述
+低著 低着
+低著書      低著书
+低著作      低著作
+低著名      低著名
+低著錄      低著录
+低著稱      低著称
+低著者      低著者
+低著述      低著述
+住著 住着
+住著書      住著书
+住著作      住著作
+住著名      住著名
+住著錄      住著录
+住著稱      住著称
+住著者      住著者
+住著述      住著述
+側著 侧着
+側著書      侧著书
+側著作      侧著作
+側著名      侧著名
+側著錄      侧著录
+側著稱      侧著称
+側著者      侧著者
+側著述      侧著述
+保障著      保障着
+保障著書   保障著书
+保障著作   保障著作
+保障著名   保障著名
+保障著錄   保障著录
+保障著稱   保障著称
+保障著者   保障著者
+保障著述   保障著述
+信著 信着
+信著書      信著书
+信著作      信著作
+信著名      信著名
+信著錄      信著录
+信著稱      信著称
+信著者      信著者
+信著述      信著述
+候著 候着
+候著書      候著书
+候著作      候著作
+候著名      候著名
+候著錄      候著录
+候著稱      候著称
+候著者      候著者
+候著述      候著述
+借著 借着
+借著書      借著书
+借著作      借著作
+借著名      借著名
+借著錄      借著录
+借著稱      借著称
+借著者      借著者
+借著述      借著述
+做著 做着
+做著書      做著书
+做著作      做著作
+做著名      做著名
+做著錄      做著录
+做著稱      做著称
+做著者      做著者
+做著述      做著述
+偷著 偷着
+偷著書      偷著书
+偷著作      偷著作
+偷著名      偷著名
+偷著錄      偷著录
+偷著稱      偷著称
+偷著者      偷著者
+偷著述      偷著述
+光著 光着
+光著書      光著书
+光著作      光著作
+光著名      光著名
+光著錄      光著录
+光著稱      光著称
+光著者      光著者
+光著述      光著述
+關著 关着
+關著書      关著书
+關著作      关著作
+關著名      关著名
+關著錄      关著录
+關著稱      关著称
+關著者      关著者
+關著述      关著述
+冀著 冀着
+冀著書      冀著书
+冀著作      冀著作
+冀著名      冀著名
+冀著錄      冀著录
+冀著稱      冀著称
+冀著者      冀著者
+冀著述      冀著述
+冒著 冒着
+冒著書      冒著书
+冒著作      冒著作
+冒著名      冒著名
+冒著錄      冒著录
+冒著稱      冒著称
+冒著者      冒著者
+冒著述      冒著述
+寫著 写着
+寫著書      写著书
+寫著作      写著作
+寫著名      写著名
+寫著錄      写著录
+寫著稱      写著称
+寫著者      写著者
+寫著述      写著述
+涼著 凉着
+涼著書      凉著书
+涼著作      凉著作
+涼著名      凉著名
+涼著錄      凉著录
+涼著稱      凉著称
+涼著者      凉著者
+涼著述      凉著述
+制著 制着
+制著書      制著书
+制著作      制著作
+制著名      制著名
+制著錄      制著录
+制著稱      制著称
+制著者      制著者
+制著述      制著述
+刻著 刻着
+刻著書      刻著书
+刻著作      刻著作
+刻著名      刻著名
+刻著錄      刻著录
+刻著稱      刻著称
+刻著者      刻著者
+刻著述      刻著述
+辦著 办着
+辦著書      办著书
+辦著作      办著作
+辦著名      办著名
+辦著錄      办著录
+辦著稱      办著称
+辦著者      办著者
+辦著述      办著述
+動著 动着
+動著書      动著书
+動著作      动著作
+動著名      动著名
+動著錄      动著录
+動著稱      动著称
+動著者      动著者
+動著述      动著述
+努力著      努力着
+努力著書   努力著书
+努力著作   努力著作
+努力著名   努力著名
+努力著錄   努力著录
+努力著稱   努力著称
+努力著者   努力著者
+努力著述   努力著述
+努著 努着
+努著書      努著书
+努著作      努著作
+努著名      努著名
+努著錄      努著录
+努著稱      努著称
+努著者      努著者
+努著述      努著述
+印著 印着
+印著書      印著书
+印著作      印著作
+印著名      印著名
+印著錄      印著录
+印著稱      印著称
+印著者      印著者
+印著述      印著述
+壓著 压着
+壓著書      压著书
+壓著作      压著作
+壓著名      压著名
+壓著錄      压著录
+壓著稱      压著称
+壓著者      压著者
+壓著述      压著述
+去著 去着
+去著書      去著书
+去著作      去著作
+去著名      去著名
+去著錄      去著录
+去著稱      去著称
+去著者      去著者
+去著述      去著述
+受著 受着
+受著書      受著书
+受著作      受著作
+受著名      受著名
+受著錄      受著录
+受著稱      受著称
+受著者      受著者
+受著述      受著述
+變著 变着
+變著書      变著书
+變著作      变著作
+變著名      变著名
+變著錄      变著录
+變著稱      变著称
+變著者      变著者
+變著述      变著述
+叫著 叫着
+叫著書      叫著书
+叫著作      叫著作
+叫著名      叫著名
+叫著錄      叫著录
+叫著稱      叫著称
+叫著者      叫著者
+叫著述      叫著述
+向著 向着
+向著書      向著书
+向著作      向著作
+向著名      向著名
+向著錄      向著录
+向著稱      向著称
+向著者      向著者
+向著述      向著述
+含著 含着
+含著書      含著书
+含著作      含著作
+含著名      含著名
+含著錄      含著录
+含著稱      含著称
+含著者      含著者
+含著述      含著述
+聽著 听着
+聽著書      听著书
+聽著作      听著作
+聽著名      听著名
+聽著錄      听著录
+聽著稱      听著称
+聽著者      听著者
+聽著述      听著述
+吹著 吹着
+吹著書      吹著书
+吹著作      吹著作
+吹著名      吹著名
+吹著錄      吹著录
+吹著稱      吹著称
+吹著者      吹著者
+吹著述      吹著述
+味著 味着
+味著書      味著书
+味著作      味著作
+味著名      味著名
+味著錄      味著录
+味著稱      味著称
+味著者      味著者
+味著述      味著述
+響著 响着
+響著書      响著书
+響著作      响著作
+響著名      响著名
+響著錄      响著录
+響著稱      响著称
+響著者      响著者
+響著述      响著述
+哭著 哭着
+哭著書      哭著书
+哭著作      哭著作
+哭著名      哭著名
+哭著錄      哭著录
+哭著稱      哭著称
+哭著者      哭著者
+哭著述      哭著述
+唱著 唱着
+唱著書      唱著书
+唱著作      唱著作
+唱著名      唱著名
+唱著錄      唱著录
+唱著稱      唱著称
+唱著者      唱著者
+唱著述      唱著述
+喝著 喝着
+喝著書      喝著书
+喝著作      喝著作
+喝著名      喝著名
+喝著錄      喝著录
+喝著稱      喝著称
+喝著者      喝著者
+喝著述      喝著述
+嚷著 嚷着
+嚷著書      嚷著书
+嚷著作      嚷著作
+嚷著名      嚷著名
+嚷著錄      嚷著录
+嚷著稱      嚷著称
+嚷著者      嚷著者
+嚷著述      嚷著述
+因著 因着
+因著書      因著书
+因著作      因著作
+因著名      因著名
+因著錄      因著录
+因著录      因著录
+因著稱      因著称
+因著者      因著者
+因著述      因著述
+因著《      因著《
+因著〈      因著〈
+困著 困着
+困著書      困著书
+困著作      困著作
+困著名      困著名
+困著錄      困著录
+困著稱      困著称
+困著者      困著者
+困著述      困著述
+圍著 围着
+圍著書      围著书
+圍著作      围著作
+圍著名      围著名
+圍著錄      围著录
+圍著稱      围著称
+圍著者      围著者
+圍著述      围著述
+在著 在着
+在著書      在著书
+在著作      在著作
+在著名      在著名
+在著錄      在著录
+在著稱      在著称
+在著者      在著者
+在著述      在著述
+坐著 坐着
+坐著書      坐著书
+坐著作      坐著作
+坐著名      坐著名
+坐著錄      坐著录
+坐著稱      坐著称
+坐著者      坐著者
+坐著述      坐著述
+備著 备着
+備著書      备著书
+備著作      备著作
+備著名      备著名
+備著錄      备著录
+備著稱      备著称
+備著者      备著者
+備著述      备著述
+夾著 夹着
+夾著書      夹著书
+夾著作      夹著作
+夾著名      夹著名
+夾著錄      夹著录
+夾著稱      夹著称
+夾著者      夹著者
+夾著述      夹著述
+孤著 孤着
+孤著書      孤著书
+孤著作      孤著作
+孤著名      孤著名
+孤著錄      孤著录
+孤著稱      孤著称
+孤著者      孤著者
+孤著述      孤著述
+學著 学着
+學著書      学著书
+學著作      学著作
+學著名      学著名
+學著錄      学著录
+學著稱      学著称
+學著者      学著者
+學著述      学著述
+守著 守着
+守著書      守著书
+守著作      守著作
+守著名      守著名
+守著錄      守著录
+守著稱      守著称
+守著者      守著者
+守著述      守著述
+定著 定着
+定著書      定著书
+定著作      定著作
+定著名      定著名
+定著錄      定著录
+定著稱      定著称
+定著者      定著者
+定著述      定著述
+對著 对着
+對著書      对著书
+對著作      对著作
+對著名      对著名
+對著錄      对著录
+對著稱      对著称
+對著者      对著者
+對著述      对著述
+尋著 寻着
+尋著書      寻著书
+尋著作      寻著作
+尋著名      寻著名
+尋著錄      寻著录
+尋著稱      寻著称
+尋著者      寻著者
+尋著述      寻著述
+展著 展着
+展著書      展著书
+展著作      展著作
+展著名      展著名
+展著錄      展著录
+展著稱      展著称
+展著者      展著者
+展著述      展著述
+帶著 带着
+帶著書      带著书
+帶著作      带著作
+帶著名      带著名
+帶著錄      带著录
+帶著稱      带著称
+帶著者      带著者
+帶著述      带著述
+幫著 帮着
+幫著書      帮著书
+幫著作      帮著作
+幫著名      帮著名
+幫著錄      帮著录
+幫著稱      帮著称
+幫著者      帮著者
+幫著述      帮著述
+應著 应着
+應著書      应著书
+應著作      应著作
+應著名      应著名
+應著錄      应著录
+應著稱      应著称
+應著者      应著者
+應著述      应著述
+康著 康着
+康著書      康著书
+康著作      康著作
+康著名      康著名
+康著錄      康著录
+康著稱      康著称
+康著者      康著者
+康著述      康著述
+開著 开着
+開著書      开著书
+開著作      开著作
+開著名      开著名
+開著錄      开著录
+開著稱      开著称
+開著者      开著者
+開著述      开著述
+當著 当着
+當著書      当著书
+當著作      当著作
+當著名      当著名
+當著錄      当著录
+當著稱      当著称
+當著者      当著者
+當著述      当著述
+待著 待着
+待著書      待著书
+待著作      待著作
+待著名      待著名
+待著錄      待著录
+待著稱      待著称
+待著者      待著者
+待著述      待著述
+得著 得着
+得著書      得著书
+得著作      得著作
+得著名      得著名
+得著錄      得著录
+得著稱      得著称
+得著者      得著者
+得著述      得著述
+循著 循着
+循著書      循著书
+循著作      循著作
+循著名      循著名
+循著錄      循著录
+循著稱      循著称
+循著者      循著者
+循著述      循著述
+心著 心着
+心著書      心著书
+心著作      心著作
+心著名      心著名
+心著錄      心著录
+心著稱      心著称
+心著者      心著者
+心著述      心著述
+忍著 忍着
+忍著書      忍著书
+忍著作      忍著作
+忍著名      忍著名
+忍著錄      忍著录
+忍著稱      忍著称
+忍著者      忍著者
+忍著述      忍著述
+志著 志着
+志著書      志著书
+志著作      志著作
+志著名      志著名
+志著錄      志著录
+志著稱      志著称
+志著者      志著者
+志著述      志著述
+忙著 忙着
+忙著書      忙著书
+忙著作      忙著作
+忙著名      忙著名
+忙著錄      忙著录
+忙著稱      忙著称
+忙著者      忙著者
+忙著述      忙著述
+懷著 怀着
+懷著書      怀著书
+懷著作      怀著作
+懷著名      怀著名
+懷著錄      怀著录
+懷著稱      怀著称
+懷著者      怀著者
+懷著述      怀著述
+急著 急着
+急著書      急著书
+急著作      急著作
+急著名      急著名
+急著錄      急著录
+急著稱      急著称
+急著者      急著者
+急著述      急著述
+性著 性着
+性著書      性著书
+性著作      性著作
+性著名      性著名
+性著錄      性著录
+性著稱      性著称
+性著者      性著者
+性著述      性著述
+戀著 恋着
+戀著書      恋著书
+戀著作      恋著作
+戀著名      恋著名
+戀著錄      恋著录
+戀著稱      恋著称
+戀著者      恋著者
+戀著述      恋著述
+悠著 悠着
+悠著書      悠著书
+悠著作      悠著作
+悠著名      悠著名
+悠著錄      悠著录
+悠著稱      悠著称
+悠著者      悠著者
+悠著述      悠著述
+慣著 惯着
+慣著書      惯著书
+慣著作      惯著作
+慣著名      惯著名
+慣著錄      惯著录
+慣著稱      惯著称
+慣著者      惯著者
+慣著述      惯著述
+想著 想着
+想著書      想著书
+想著作      想著作
+想著名      想著名
+想著錄      想著录
+想著稱      想著称
+想著者      想著者
+想著述      想著述
+戰著 战着
+戰著書      战著书
+戰著作      战著作
+戰著名      战著名
+戰著錄      战著录
+戰著稱      战著称
+戰著者      战著者
+戰著述      战著述
+戴著 戴着
+戴著書      戴著书
+戴著作      戴著作
+戴著名      戴著名
+戴著錄      戴著录
+戴著稱      戴著称
+戴著者      戴著者
+戴著述      戴著述
+紮著 扎着
+紮著書      扎著书
+紮著作      扎著作
+紮著名      扎著名
+紮著錄      扎著录
+紮著稱      扎著称
+紮著者      扎著者
+紮著述      扎著述
+打著 打着
+打著書      打著书
+打著作      打著作
+打著名      打著名
+打著錄      打著录
+打著稱      打著称
+打著者      打著者
+打著述      打著述
+扛著 扛着
+扛著書      扛著书
+扛著作      扛著作
+扛著名      扛著名
+扛著錄      扛著录
+扛著稱      扛著称
+扛著者      扛著者
+扛著述      扛著述
+抓著 抓着
+抓著作      抓著作
+抓著名      抓著名
+抓著錄      抓著录
+抓著稱      抓著称
+抓著者      抓著者
+抓著述      抓著述
+披著 披着
+披著書      披著书
+披著作      披著作
+披著名      披著名
+披著錄      披著录
+披著稱      披著称
+披著者      披著者
+披著述      披著述
+抬著 抬着
+抬著作      抬著作
+抬著名      抬著名
+抬著錄      抬著录
+抬著稱      抬著称
+抬著者      抬著者
+抬著述      抬著述
+抱著 抱着
+抱著作      抱著作
+抱著名      抱著名
+抱著錄      抱著录
+抱著稱      抱著称
+抱著者      抱著者
+抱著述      抱著述
+拉著 拉着
+拉著書      拉著书
+拉著作      拉著作
+拉著名      拉著名
+拉著錄      拉著录
+拉著稱      拉著称
+拉著者      拉著者
+拉著述      拉著述
+拎著 拎着
+拎著作      拎著作
+拎著名      拎著名
+拎著錄      拎著录
+拎著稱      拎著称
+拎著者      拎著者
+拎著述      拎著述
+拖著 拖着
+拖著作      拖著作
+拖著名      拖著名
+拖著錄      拖著录
+拖著稱      拖著称
+拖著者      拖著者
+拖著述      拖著述
+拼著 拼着
+拼著作      拼著作
+拼著名      拼著名
+拼著錄      拼著录
+拼著稱      拼著称
+拼著者      拼著者
+拼著述      拼著述
+拿著 拿着
+拿著作      拿著作
+拿著名      拿著名
+拿著錄      拿著录
+拿著稱      拿著称
+拿著者      拿著者
+拿著述      拿著述
+持著 持着
+持著作      持著作
+持著名      持著名
+持著錄      持著录
+持著稱      持著称
+持著者      持著者
+持著述      持著述
+挑著 挑着
+挑著作      挑著作
+挑著名      挑著名
+挑著錄      挑著录
+挑著稱      挑著称
+挑著者      挑著者
+挑著述      挑著述
+擋著 挡着
+擋著作      挡著作
+擋著名      挡著名
+擋著錄      挡著录
+擋著稱      挡著称
+擋著者      挡著者
+擋著述      挡著述
+掙著 挣着
+掙著書      挣著书
+掙著作      挣著作
+掙著名      挣著名
+掙著錄      挣著录
+掙著稱      挣著称
+掙著者      挣著者
+掙著述      挣著述
+揮著 挥着
+揮著作      挥著作
+揮著名      挥著名
+揮著錄      挥著录
+揮著稱      挥著称
+揮著者      挥著者
+揮著述      挥著述
+挨著 挨着
+挨著作      挨著作
+挨著名      挨著名
+挨著錄      挨著录
+挨著稱      挨著称
+挨著者      挨著者
+挨著述      挨著述
+捆著 捆着
+捆著作      捆著作
+捆著名      捆著名
+捆著錄      捆著录
+捆著稱      捆著称
+捆著者      捆著者
+捆著述      捆著述
+據著 据着
+據著書      据著书
+據著作      据著作
+據著名      据著名
+據著錄      据著录
+據著稱      据著称
+據著者      据著者
+據著述      据著述
+掖著 掖着
+掖著作      掖著作
+掖著名      掖著名
+掖著錄      掖著录
+掖著稱      掖著称
+掖著者      掖著者
+掖著述      掖著述
+接著 接着
+接著作      接著作
+接著名      接著名
+接著錄      接著录
+接著稱      接著称
+接著者      接著者
+接著述      接著述
+揉著 揉着
+揉著書      揉著书
+揉著作      揉著作
+揉著名      揉著名
+揉著錄      揉著录
+揉著稱      揉著称
+揉著者      揉著者
+揉著述      揉著述
+提著 提着
+提著作      提著作
+提著名      提著名
+提著錄      提著录
+提著稱      提著称
+提著者      提著者
+提著述      提著述
+摟著 搂着
+摟著作      搂著作
+摟著名      搂著名
+摟著錄      搂著录
+摟著稱      搂著称
+摟著者      搂著者
+摟著述      搂著述
+擺著 摆着
+擺著作      摆著作
+擺著名      摆著名
+擺著錄      摆著录
+擺著稱      摆著称
+擺著者      摆著者
+擺著述      摆著述
+撼著 撼着
+撼著書      撼著书
+撼著作      撼著作
+撼著名      撼著名
+撼著錄      撼著录
+撼著稱      撼著称
+撼著者      撼著者
+撼著述      撼著述
+敞著 敞着
+敞著作      敞著作
+敞著名      敞著名
+敞著錄      敞著录
+敞著稱      敞著称
+敞著者      敞著者
+敞著述      敞著述
+數著 数着
+數著作      数著作
+數著名      数著名
+數著錄      数著录
+數著稱      数著称
+數著者      数著者
+數著述      数著述
+鬥著 斗着
+鬥著書      斗著书
+鬥著作      斗著作
+鬥著名      斗著名
+鬥著錄      斗著录
+鬥著稱      斗著称
+鬥著者      斗著者
+鬥著述      斗著述
+斥著 斥着
+斥著書      斥著书
+斥著作      斥著作
+斥著名      斥著名
+斥著錄      斥著录
+斥著稱      斥著称
+斥著者      斥著者
+斥著述      斥著述
+昂著 昂着
+昂著書      昂著书
+昂著作      昂著作
+昂著名      昂著名
+昂著錄      昂著录
+昂著稱      昂著称
+昂著者      昂著者
+昂著述      昂著述
+映著 映着
+映著書      映著书
+映著作      映著作
+映著名      映著名
+映著錄      映著录
+映著稱      映著称
+映著者      映著者
+映著述      映著述
+晃著 晃着
+晃著作      晃著作
+晃著名      晃著名
+晃著錄      晃著录
+晃著稱      晃著称
+晃著者      晃著者
+晃著述      晃著述
+暗著 暗着
+暗著書      暗著书
+暗著作      暗著作
+暗著名      暗著名
+暗著錄      暗著录
+暗著稱      暗著称
+暗著者      暗著者
+暗著述      暗著述
+有著 有着
+有著書      有著书
+有著作      有著作
+有著名      有著名
+有著錄      有著录
+有著稱      有著称
+有著者      有著者
+有著述      有著述
+望著 望着
+望著作      望著作
+望著名      望著名
+望著錄      望著录
+望著稱      望著称
+望著者      望著者
+望著述      望著述
+朝著 朝着
+朝著作      朝著作
+朝著名      朝著名
+朝著錄      朝著录
+朝著稱      朝著称
+朝著者      朝著者
+朝著述      朝著述
+本著 本着
+本著書      本著书
+本著作      本著作
+本著名      本著名
+本著錄      本著录
+本著稱      本著称
+本著者      本著者
+本著述      本著述
+殺著 杀着
+殺著書      杀著书
+殺著作      杀著作
+殺著名      杀著名
+殺著錄      杀著录
+殺著稱      杀著称
+殺著者      杀著者
+殺著述      杀著述
+雜著 杂着
+雜著書      杂著书
+雜著作      杂著作
+雜著名      杂著名
+雜著錄      杂著录
+雜著稱      杂著称
+雜著者      杂著者
+雜著述      杂著述
+來著 来着
+來著書      来著书
+來著作      来著作
+來著名      来著名
+來著錄      来著录
+來著稱      来著称
+來著者      来著者
+來著述      来著述
+枕著 枕着
+枕著作      枕著作
+枕著名      枕著名
+枕著錄      枕著录
+枕著稱      枕著称
+枕著者      枕著者
+枕著述      枕著述
+夢著 梦着
+夢著書      梦著书
+夢著作      梦著作
+夢著名      梦著名
+夢著錄      梦著录
+夢著稱      梦著称
+夢著者      梦著者
+夢著述      梦著述
+梳著 梳着
+梳著作      梳著作
+梳著名      梳著名
+梳著錄      梳著录
+梳著稱      梳著称
+梳著者      梳著者
+梳著述      梳著述
+求著 求着
+求著書      求著书
+求著作      求著作
+求著名      求著名
+求著錄      求著录
+求著稱      求著称
+求著者      求著者
+求著述      求著述
+沉著 沉着
+沉著書      沉著书
+沉著作      沉著作
+沉著名      沉著名
+沉著錄      沉著录
+沉著稱      沉著称
+沉著者      沉著者
+沉著述      沉著述
+沿著 沿着
+沿著書      沿著书
+沿著作      沿著作
+沿著名      沿著名
+沿著錄      沿著录
+沿著稱      沿著称
+沿著者      沿著者
+沿著述      沿著述
+活著 活着
+活著書      活著书
+活著作      活著作
+活著名      活著名
+活著錄      活著录
+活著稱      活著称
+活著者      活著者
+活著述      活著述
+流著 流着
+流著書      流著书
+流著作      流著作
+流著名      流著名
+流著錄      流著录
+流著稱      流著称
+流著者      流著者
+流著述      流著述
+浮著 浮着
+浮著書      浮著书
+浮著作      浮著作
+浮著名      浮著名
+浮著錄      浮著录
+浮著稱      浮著称
+浮著者      浮著者
+浮著述      浮著述
+潤著 润着
+潤著書      润著书
+潤著作      润著作
+潤著名      润著名
+潤著錄      润著录
+潤著稱      润著称
+潤著者      润著者
+潤著述      润著述
+涵著 涵着
+涵著書      涵著书
+涵著作      涵著作
+涵著名      涵著名
+涵著錄      涵著录
+涵著稱      涵著称
+涵著者      涵著者
+涵著述      涵著述
+渴著 渴着
+渴著書      渴著书
+渴著作      渴著作
+渴著名      渴著名
+渴著錄      渴著录
+渴著稱      渴著称
+渴著者      渴著者
+渴著述      渴著述
+溢著 溢着
+溢著書      溢著书
+溢著作      溢著作
+溢著名      溢著名
+溢著錄      溢著录
+溢著稱      溢著称
+溢著者      溢著者
+溢著述      溢著述
+演著 演着
+演著書      演著书
+演著作      演著作
+演著名      演著名
+演著錄      演著录
+演著稱      演著称
+演著者      演著者
+演著述      演著述
+漫著 漫着
+漫著書      漫著书
+漫著作      漫著作
+漫著名      漫著名
+漫著錄      漫著录
+漫著稱      漫著称
+漫著者      漫著者
+漫著述      漫著述
+點著 点着
+點著作      点著作
+點著名      点著名
+點著錄      点著录
+點著稱      点著称
+點著者      点著者
+點著述      点著述
+燒著 烧着
+燒著作      烧著作
+燒著名      烧著名
+燒著錄      烧著录
+燒著稱      烧著称
+燒著者      烧著者
+燒著述      烧著述
+照著 照着
+照著書      照著书
+照著作      照著作
+照著名      照著名
+照著錄      照著录
+照著稱      照著称
+照著者      照著者
+照著述      照著述
+愛著 爱着
+愛著書      爱著书
+愛著作      爱著作
+愛著名      爱著名
+愛著錄      爱著录
+愛著稱      爱著称
+愛著者      爱著者
+愛著述      爱著述
+牽著 牵着
+牽著書      牵著书
+牽著作      牵著作
+牽著名      牵著名
+牽著錄      牵著录
+牽著稱      牵著称
+牽著者      牵著者
+牽著述      牵著述
+獨著 独着
+獨著書      独著书
+獨著作      独著作
+獨著名      独著名
+獨著錄      独著录
+獨著稱      独著称
+獨著者      独著者
+獨著述      独著述
+猜著 猜着
+猜著書      猜着书
+猜著作      猜著作
+猜著名      猜著名
+猜著錄      猜著录
+猜著稱      猜著称
+猜著者      猜著者
+猜著述      猜著述
+甜著 甜着
+甜著書      甜著书
+甜著作      甜著作
+甜著名      甜著名
+甜著錄      甜著录
+甜著稱      甜著称
+甜著者      甜著者
+甜著述      甜著述
+用著 用着
+用著書      用著书
+用著作      用著作
+用著名      用著名
+用著錄      用著录
+用著稱      用著称
+用著者      用著者
+用著述      用著述
+留著 留着
+留著書      留着书
+留著作      留著作
+留著名      留著名
+留著錄      留著录
+留著稱      留著称
+留著者      留著者
+留著述      留著述
+疑著 疑着
+疑著書      疑著书
+疑著作      疑著作
+疑著名      疑著名
+疑著錄      疑著录
+疑著稱      疑著称
+疑著者      疑著者
+疑著述      疑著述
+皺著 皱着
+皺著書      皱著书
+皺著作      皱著作
+皺著名      皱著名
+皺著錄      皱著录
+皺著稱      皱著称
+皺著者      皱著者
+皺著述      皱著述
+盛著 盛着
+盛著書      盛著书
+盛著作      盛著作
+盛著名      盛著名
+盛著錄      盛著录
+盛著稱      盛著称
+盛著者      盛著者
+盛著述      盛著述
+盯著 盯着
+盯著書      盯着书
+盯著作      盯著作
+盯著名      盯著名
+盯著錄      盯著录
+盯著稱      盯著称
+盯著者      盯著者
+盯著述      盯著述
+盾著 盾着
+盾著書      盾著书
+盾著作      盾著作
+盾著名      盾著名
+盾著錄      盾著录
+盾著稱      盾著称
+盾著者      盾著者
+盾著述      盾著述
+看著 看着
+看著書      看着书
+看著作      看著作
+看著名      看著名
+看著錄      看著录
+看著稱      看著称
+看著者      看著者
+看著述      看著述
+瞧著 瞧着
+瞧著書      瞧着书
+瞧著作      瞧著作
+瞧著名      瞧著名
+瞧著錄      瞧著录
+瞧著稱      瞧著称
+瞧著者      瞧著者
+瞧著述      瞧著述
+存著 存着
+存著名      存著名
+劃著 划着
+別著 别着
+刮著 刮着
+掛著 挂着
+吊著 吊着
+回著 回着
+回著名      回著名
+塗著 涂着
+麼著 么着
+擔著 担着
+負著 负着
+板著臉      板着脸
+為著 为着
+為著作      为著作
+為著名      为著名
+為著錄      为著录
+為著稱      为著称
+為著者      为著者
+為著述      为著述
+為著《      为著《
+畫著 画着
+畫著作      画著作
+畫著名      画著名
+畫著稱      画著称
+畫著者      画著者
+發著 发着
+發著作      发著作
+發著名      发著名
+發著稱      发著称
+發著者      发著者
+發著《      发著《
+簽著 签着
+繃著 绷着
+覆著 覆着
+蓋著 蓋着
+說著 说着
+說著作      说著作
+說著稱      说著称
+說著者      说著者
+說著述      说著述
+湊合著      凑合着
+配合著      配合着
+配合著名   配合著名
+關係著      关系着
+鬧著 闹着
+蒙著 蒙着
+悶著 闷着
+占著 占着
+占著名      占著名
+占著作      占著作
+占著者      占著者
+呆著 呆着
+包著 包着
+駛著 驶着
+睡著 睡着
+睡著書      睡著书
+睡著作      睡著作
+睡著名      睡著名
+睡著錄      睡著录
+睡著稱      睡著称
+睡著者      睡著者
+睡著述      睡著述
+瞞著 瞒着
+瞞著書      瞒著书
+瞞著作      瞒著作
+瞞著名      瞒著名
+瞞著錄      瞒著录
+瞞著稱      瞒著称
+瞞著者      瞒著者
+瞞著述      瞒著述
+瞪著 瞪着
+瞪著書      瞪著书
+瞪著作      瞪著作
+瞪著名      瞪著名
+瞪著錄      瞪著录
+瞪著稱      瞪著称
+瞪著者      瞪著者
+瞪著述      瞪著述
+福著 福着
+福著書      福著书
+福著作      福著作
+福著名      福著名
+福著錄      福著录
+福著稱      福著称
+福著者      福著者
+福著述      福著述
+空著 空着
+空著書      空著书
+空著作      空著作
+空著名      空著名
+空著錄      空著录
+空著稱      空著称
+空著者      空著者
+空著述      空著述
+穿著 穿着
+穿著書      穿著书
+穿著作      穿著作
+穿著名      穿著名
+穿著錄      穿著录
+穿著稱      穿著称
+穿著者      穿著者
+穿著述      穿著述
+豎著 竖着
+豎著書      竖著书
+豎著作      竖著作
+豎著名      竖著名
+豎著錄      竖著录
+豎著稱      竖著称
+豎著者      竖著者
+豎著述      竖著述
+站著 站着
+站著書      站著书
+站著作      站著作
+站著名      站著名
+站著錄      站著录
+站著稱      站著称
+站著者      站著者
+站著述      站著述
+笑著 笑着
+笑著書      笑著书
+笑著作      笑著作
+笑著名      笑著名
+笑著錄      笑著录
+笑著稱      笑著称
+笑著者      笑著者
+笑著述      笑著述
+管著 管着
+管著書      管著书
+管著作      管著作
+管著名      管著名
+管著錄      管著录
+管著稱      管著称
+管著者      管著者
+管著述      管著述
+綁著 绑着
+綁著書      绑著书
+綁著作      绑著作
+綁著名      绑著名
+綁著錄      绑著录
+綁著稱      绑著称
+綁著者      绑著者
+綁著述      绑著述
+繞著 绕着
+繞著書      绕著书
+繞著作      绕著作
+繞著名      绕著名
+繞著錄      绕著录
+繞著稱      绕著称
+繞著者      绕著者
+繞著述      绕著述
+纏著 缠着
+纏著書      缠著书
+纏著作      缠著作
+纏著名      缠著名
+纏著錄      缠著录
+纏著稱      缠著称
+纏著者      缠著者
+纏著述      缠著述
+罩著 罩着
+罩著書      罩著书
+罩著作      罩著作
+罩著名      罩著名
+罩著錄      罩著录
+罩著稱      罩著称
+罩著者      罩著者
+罩著述      罩著述
+美著 美着
+美著書      美著书
+美著作      美著作
+美著名      美著名
+美著錄      美著录
+美著稱      美著称
+美著者      美著者
+美著述      美著述
+耀著 耀着
+耀著書      耀著书
+耀著作      耀著作
+耀著名      耀著名
+耀著錄      耀著录
+耀著稱      耀著称
+耀著者      耀著者
+耀著述      耀著述
+考著 考着
+考著書      考著书
+考著作      考著作
+考著名      考著名
+考著錄      考著录
+考著稱      考著称
+考著者      考著者
+考著述      考著述
+背著 背着
+背著書      背著书
+背著作      背著作
+背著名      背著名
+背著錄      背著录
+背著稱      背著称
+背著者      背著者
+背著述      背著述
+膠著 胶着
+膠著書      胶著书
+膠著作      胶著作
+膠著名      胶著名
+膠著錄      胶著录
+膠著稱      胶著称
+膠著者      胶著者
+膠著述      胶著述
+藝著 艺着
+藝著書      艺著书
+藝著作      艺著作
+藝著名      艺著名
+藝著錄      艺著录
+藝著稱      艺著称
+藝著者      艺著者
+藝著述      艺著述
+苦著 苦着
+苦著書      苦著书
+苦著作      苦著作
+苦著名      苦著名
+苦著錄      苦著录
+苦著稱      苦著称
+苦著者      苦著者
+苦著述      苦著述
+獲著 获着
+獲著書      获著书
+獲著作      获著作
+獲著名      获著名
+獲著錄      获著录
+獲著稱      获著称
+獲著者      获著者
+獲著述      获著述
+落著 落着
+落著書      落著书
+落著作      落著作
+落著名      落著名
+落著錄      落著录
+落著稱      落著称
+落著者      落著者
+落著述      落著述
+蒙著書      蒙著书
+蒙著作      蒙著作
+蒙著名      蒙著名
+蒙著錄      蒙著录
+蒙著稱      蒙著称
+蒙著者      蒙著者
+蒙著述      蒙著述
+藏著 藏着
+藏著書      藏著书
+藏著作      藏著作
+藏著名      藏著名
+藏著錄      藏著录
+藏著稱      藏著称
+藏著者      藏著者
+藏著述      藏著述
+蘸著 蘸着
+蘸著書      蘸著书
+蘸著作      蘸著作
+蘸著名      蘸著名
+蘸著錄      蘸著录
+蘸著稱      蘸著称
+蘸著者      蘸著者
+蘸著述      蘸著述
+行著 行着
+行著書      行著书
+行著作      行著作
+行著名      行著名
+行著錄      行著录
+行著稱      行著称
+行著者      行著者
+行著述      行著述
+衣著 衣着
+衣著書      衣著书
+衣著作      衣著作
+衣著名      衣著名
+衣著錄      衣著录
+衣著稱      衣著称
+衣著者      衣著者
+衣著述      衣著述
+裝著 装着
+裝著書      装著书
+裝著作      装著作
+裝著名      装著名
+裝著錄      装著录
+裝著稱      装著称
+裝著者      装著者
+裝著述      装著述
+裹著 裹着
+裹著書      裹著书
+裹著作      裹著作
+裹著名      裹著名
+裹著錄      裹著录
+裹著稱      裹著称
+裹著者      裹著者
+裹著述      裹著述
+見著 见着
+見著書      见著书
+見著作      见著作
+見著名      见著名
+見著錄      见著录
+見著稱      见著称
+見著者      见著者
+見著述      见著述
+記著 记着
+記著書      记著书
+記著作      记著作
+記著名      记著名
+記著錄      记著录
+記著稱      记著称
+記著者      记著者
+記著述      记著述
+試著 试着
+試著書      试著书
+試著作      试著作
+試著名      试著名
+試著錄      试著录
+試著稱      试著称
+試著者      试著者
+試著述      试著述
+語著 语着
+語著書      语著书
+語著作      语著作
+語著名      语著名
+語著錄      语著录
+語著稱      语著称
+語著者      语著者
+語著述      语著述
+豫著 豫着
+豫著書      豫著书
+豫著作      豫著作
+豫著名      豫著名
+豫著錄      豫著录
+豫著稱      豫著称
+豫著者      豫著者
+豫著述      豫著述
+貞著 贞着
+貞著書      贞著书
+貞著作      贞著作
+貞著名      贞著名
+貞著錄      贞著录
+貞著稱      贞著称
+貞著者      贞著者
+貞著述      贞著述
+走著 走着
+走著書      走著书
+走著作      走著作
+走著名      走著名
+走著錄      走著录
+走著稱      走著称
+走著者      走著者
+走著述      走著述
+趕著 赶着
+趕著書      赶著书
+趕著作      赶著作
+趕著名      赶著名
+趕著錄      赶著录
+趕著稱      赶著称
+趕著者      赶著者
+趕著述      赶著述
+趴著 趴着
+趴著書      趴著书
+趴著作      趴著作
+趴著名      趴著名
+趴著錄      趴著录
+趴著稱      趴著称
+趴著者      趴著者
+趴著述      趴著述
+躍著 跃着
+躍著書      跃著书
+躍著作      跃著作
+躍著名      跃著名
+躍著錄      跃著录
+躍著稱      跃著称
+躍著者      跃著者
+躍著述      跃著述
+跑著 跑着
+跑著書      跑著书
+跑著作      跑著作
+跑著名      跑著名
+跑著錄      跑著录
+跑著稱      跑著称
+跑著者      跑著者
+跑著述      跑著述
+跟著 跟着
+跟著書      跟著书
+跟著作      跟著作
+跟著名      跟著名
+跟著錄      跟著录
+跟著稱      跟著称
+跟著者      跟著者
+跟著述      跟著述
+跪著 跪着
+跪著書      跪著书
+跪著作      跪著作
+跪著名      跪著名
+跪著錄      跪著录
+跪著稱      跪著称
+跪著者      跪著者
+跪著述      跪著述
+跳著 跳着
+跳著書      跳著书
+跳著作      跳著作
+跳著名      跳著名
+跳著錄      跳著录
+跳著稱      跳著称
+跳著者      跳著者
+跳著述      跳著述
+踏著 踏着
+踏著書      踏著书
+踏著作      踏著作
+踏著名      踏著名
+踏著錄      踏著录
+踏著稱      踏著称
+踏著者      踏著者
+踏著述      踏著述
+踩著 踩着
+踩著書      踩著书
+踩著作      踩著作
+踩著名      踩著名
+踩著錄      踩著录
+踩著稱      踩著称
+踩著者      踩著者
+踩著述      踩著述
+身著 身着
+身著書      身著书
+身著作      身著作
+身著名      身著名
+身著錄      身著录
+身著稱      身著称
+身著者      身著者
+身著述      身著述
+躺著 躺着
+躺著書      躺著书
+躺著作      躺著作
+躺著名      躺著名
+躺著錄      躺著录
+躺著稱      躺著称
+躺著者      躺著者
+躺著述      躺著述
+轉著 转着
+轉著書      转著书
+轉著作      转著作
+轉著名      转著名
+轉著錄      转著录
+轉著稱      转著称
+轉著者      转著者
+轉著述      转著述
+載著 载着
+載著書      载著书
+載著作      载著作
+載著名      载著名
+載著錄      载著录
+載著稱      载著称
+載著者      载著者
+載著述      载著述
+達著 达着
+達著書      达著书
+達著作      达著作
+達著名      达著名
+達著錄      达著录
+達著稱      达著称
+達著者      达著者
+達著述      达著述
+遠著 远着
+遠著書      远著书
+遠著作      远著作
+遠著名      远著名
+遠著錄      远著录
+遠著稱      远著称
+遠著者      远著者
+遠著述      远著述
+連著 连着
+連著書      连著书
+連著作      连著作
+連著名      连著名
+連著錄      连著录
+連著稱      连著称
+連著者      连著者
+連著述      连著述
+追著 追着
+追著書      追著书
+追著作      追著作
+追著名      追著名
+追著錄      追著录
+追著稱      追著称
+追著者      追著者
+追著述      追著述
+逆著 逆着
+逆著書      逆著书
+逆著作      逆著作
+逆著名      逆著名
+逆著錄      逆著录
+逆著稱      逆著称
+逆著者      逆著者
+逆著述      逆著述
+逼著 逼着
+逼著書      逼著书
+逼著作      逼著作
+逼著名      逼著名
+逼著錄      逼著录
+逼著稱      逼著称
+逼著者      逼著者
+逼著述      逼著述
+遇著 遇着
+遇著書      遇著书
+遇著作      遇著作
+遇著名      遇著名
+遇著錄      遇著录
+遇著稱      遇著称
+遇著者      遇著者
+遇著述      遇著述
+配著 配着
+配著書      配著书
+配著作      配著作
+配著名      配著名
+配著錄      配著录
+配著稱      配著称
+配著者      配著者
+配著述      配著述
+釀著 酿着
+釀著書      酿著书
+釀著作      酿著作
+釀著名      酿著名
+釀著錄      酿著录
+釀著稱      酿著称
+釀著者      酿著者
+釀著述      酿著述
+鋪著 铺着
+鋪著書      铺著书
+鋪著作      铺著作
+鋪著名      铺著名
+鋪著錄      铺著录
+鋪著稱      铺著称
+鋪著者      铺著者
+鋪著述      铺著述
+閉著 闭着
+閉著書      闭著书
+閉著作      闭著作
+閉著名      闭著名
+閉著錄      闭著录
+閉著稱      闭著称
+閉著者      闭著者
+閉著述      闭著述
+閑著 闲着
+閑著書      闲著书
+閑著作      闲著作
+閑著名      闲著名
+閑著錄      闲著录
+閑著稱      闲著称
+閑著者      闲著者
+閑著述      闲著述
+附著 附着
+附著書      附著书
+附著作      附著作
+附著名      附著名
+附著錄      附著录
+附著稱      附著称
+附著者      附著者
+附著述      附著述
+陋著 陋着
+陋著書      陋著书
+陋著作      陋著作
+陋著名      陋著名
+陋著錄      陋著录
+陋著稱      陋著称
+陋著者      陋著者
+陋著述      陋著述
+陪著 陪着
+陪著書      陪著书
+陪著作      陪著作
+陪著名      陪著名
+陪著錄      陪著录
+陪著稱      陪著称
+陪著者      陪著者
+陪著述      陪著述
+隨著 随着
+隨著書      随著书
+隨著作      随著作
+隨著名      随著名
+隨著錄      随著录
+隨著稱      随著称
+隨著者      随著者
+隨著述      随著述
+隔著 隔着
+隔著書      隔著书
+隔著作      隔著作
+隔著名      隔著名
+隔著錄      隔著录
+隔著稱      隔著称
+隔著者      隔著者
+隔著述      隔著述
+雅著 雅着
+雅著書      雅著书
+雅著作      雅著作
+雅著名      雅著名
+雅著錄      雅著录
+雅著稱      雅著称
+雅著者      雅著者
+雅著述      雅著述
+頂著 顶着
+頂著書      顶著书
+頂著作      顶著作
+頂著名      顶著名
+頂著錄      顶著录
+頂著稱      顶著称
+頂著者      顶著者
+頂著述      顶著述
+順著 顺着
+順著書      顺著书
+順著作      顺著作
+順著名      顺著名
+順著錄      顺著录
+順著稱      顺著称
+順著者      顺著者
+順著述      顺著述
+領著 领着
+領著書      领著书
+領著作      领著作
+領著名      领著名
+領著錄      领著录
+領著稱      领著称
+領著者      领著者
+領著述      领著述
+飄著 飘着
+飄著書      飘著书
+飄著作      飘著作
+飄著名      飘著名
+飄著錄      飘著录
+飄著稱      飘著称
+飄著者      飘著者
+飄著述      飘著述
+駕著 驾着
+駕著書      驾著书
+駕著作      驾著作
+駕著名      驾著名
+駕著錄      驾著录
+駕著稱      驾著称
+駕著者      驾著者
+駕著述      驾著述
+罵著 骂着
+罵著書      骂著书
+罵著作      骂著作
+罵著名      骂著名
+罵著錄      骂著录
+罵著稱      骂著称
+罵著者      骂著者
+罵著述      骂著述
+騎著 骑着
+騎著書      骑著书
+騎著作      骑著作
+騎著名      骑著名
+騎著錄      骑著录
+騎著稱      骑著称
+騎著者      骑著者
+騎著述      骑著述
+騙著 骗着
+騙著書      骗著书
+騙著作      骗著作
+騙著名      骗著名
+騙著錄      骗著录
+騙著稱      骗著称
+騙著者      骗著者
+騙著述      骗著述
+高著 高着
+高著書      高著书
+高著作      高著作
+高著名      高著名
+高著錄      高著录
+高著稱      高著称
+高著者      高著者
+高著述      高著述
+髭著 髭着
+髭著書      髭著书
+髭著作      髭著作
+髭著名      髭著名
+髭著錄      髭著录
+髭著稱      髭著称
+髭著者      髭著者
+髭著述      髭著述
+黏著 黏着
+黏著書      黏著书
+黏著作      黏著作
+黏著名      黏著名
+黏著錄      黏著录
+黏著稱      黏著称
+黏著者      黏著者
+黏著述      黏著述
+護著 护着
+護著書      护著书
+護著作      护著作
+護著名      护著名
+護著錄      护著录
+護著稱      护著称
+護著者      护著者
+護著述      护著述
+保護著      保护着
+愛護著      爱护着
+庇護著      庇护着
+傳著 传着
+傳著書      传著书
+傳著作      传著作
+傳著名      传著名
+傳著錄      传著录
+傳著稱      传著称
+傳著者      传著者
+傳著述      传著述
+標誌著      标志着
+流露著      流露着
+靠著 靠着
+靠著作      靠著作
+靠著名      靠著名
+靠著錄      靠著录
+靠著稱      靠著称
+靠著者      靠著者
+靠著述      靠著述
+玩著 玩着
+迫著 迫着
+吃著 吃着
+聞著 闻着
+嗅著 嗅着
+警戒著      警戒着
+過著 过着
+過著作      过著作
+過著名      过著名
+過著錄      过著录
+過著稱      过著称
+過著者      过著者
+過著述      过著述
+下著 下着
+下著作      下著作
+下著名      下著名
+下著錄      下著录
+下著录      下著录
+下著稱      下著称
+下著称      下著称
+下著者      下著者
+下著述      下著述
+下著有      下著有
+放著 放着
+放著作      放著作
+放著名      放著名
+放著稱      放著称
+放著称      放著称
+藉著 借着
+显著 显著
+顯著 显著
+標誌著      标志着
+幹著 干着
+幹著名      幹著名
+幹著稱      幹著称
+穫著 获着
+閒著 闲着
+飃著 飘着
+沈著 沉着
+擡著 抬着
+著甚麽      着什么
+滿著 满着
+滿著名      满著名
+滿著作      满著作
+滿著者      满著者
+衝著 冲着
+沖著 冲着
+沖著《      冲著《
+沖著。      冲著。
+沖著,      冲著,
+繫著 系着
+颳著 刮着
+鬥著 斗着
+象徵著      象征着
+象徵著名   象征著名
+三十六著   三十六着
+走為上著   走为上着
 記憶體      内存
-預設 默认
-串列 串行
-串列加速器        串列加速器
 乙太網      以太网
 點陣圖      位图
-常式 例程
-光碟 光盘
 光碟機      光驱
-全形 全角
-載入 加载
-半形 半角
-變數 变量
 雜訊 噪声
-因數 因子
 功能變數名稱     域名
 音效卡      声卡
 字型大小   字号
 字型檔      字库
 欄位 字段
-字元 字符
-字元济      字元济
-字元濟      字元济
-字元会      字元会
-字元會      字元会
-存檔 存盘
-定址 寻址
-章節附註   尾注
 非同步      异步
 匯流排      总线
-括弧 括号
-介面 接口
+介面 界面
 控制項      控件
-許可權      权限
-碟片 盘片
 矽片 硅片
 矽谷 硅谷
 硬碟 硬盘
 磁碟 磁盘
 磁軌 磁道
 程式控制   程控
-遠程控制   远程控制
-远程控制   远程控制
 運算元      算子
 演算法      算法
 晶片 芯片
 晶元 芯片
 片語 词组
 軟碟機      软驱
-快閃記憶體        快闪存储器
+快閃記憶體        闪存
 滑鼠 鼠标
 滑鼠蛇      滑鼠蛇
 二進位      二进制
 滿八進位   满八进位
 十進位      十进制
 滿十進位   满十进位
-16進位       16进
+16進位       16进
 滿16進位    满16进位
 二進位制   二进位制
 六進位制   六进位制
 16進位制    16进位制
 互動式      交互式
 優先順序   优先级
-感測 传感
 攜帶型      便携式
 資訊理論   信息论
 迴圈 循环
-防寫 写保护
 解析度      分辨率
 伺服器      服务器
-等於 等于
 區域網      局域网
 巨集 宏
-掃瞄器      扫
+掃瞄器      扫
 寬頻 宽带
 資料庫      数据库
-萬曆 万历
-永曆 永历
-辭彙 词汇
 母音 元音
-字母 字母
-頭槌 头球
-進球 入球
-顆進球      粒入球
-射門 打门
-蓋火鍋      火锅盖帽
 印表機      打印机
-打印機      打印机
 位元組      字节
-字節 字节
 列印 打印
-打印 打印
 硬體 硬件
 二極體      二极管
-二極管      二极管
 三極體      三极管
-三極管      三极管
 軟體 软件
-軟件 软件
+軟體動物   软体动物
+軟體家具   软体家具
 網路 网络
-網絡 网络
 人工智慧   人工智能
 太空梭      航天飞机
 穿梭機      航天飞机
 網際網路   互联网
-互聯網      互联网
 機械人      机器人
-機器人      机器人
 行動電話   移动电话
 流動電話   移动电话
-調制解調器        调制解调器
 數據機      调制解调器
-短訊 短信
-簡訊 短信
 烏茲別克   乌兹别克斯坦
 葉門 也门
-伯利茲      伯利兹
 貝里斯      伯利兹
 維德角      佛得角
 克羅埃西亞        克罗地亚
 衣索比亞   埃塞俄比亚
 吉里巴斯   基里巴斯
 塔吉克      塔吉克斯坦
+塔吉克斯坦        塔吉克斯坦
 塞拉利昂   塞拉利昂
 塞普勒斯   塞浦路斯
 塞席爾      塞舌尔
-多米尼克   多米尼加国
 安地卡及巴布達  安提瓜和巴布达
-尼日利亞   尼日利亚
-尼日利亚   尼日利亚
 奈及利亞   尼日利亚
 尼日爾      尼日尔
-尼日尔      尼日尔
 巴貝多      巴巴多斯
 巴布亞紐幾內亞  巴布亚新几内亚
-布基納法索        布基纳法索
 布吉納法索        布基纳法索
 蒲隆地      布隆迪
 帛琉 帕劳
 辛巴威      津巴布韦
 宏都拉斯   洪都拉斯
 千里達托貝哥     特立尼达和托巴哥
-諾魯 瑙鲁
 萬那杜      瓦努阿图
 溫納圖      瓦努阿图
 葛摩 科摩罗
 象牙海岸   科特迪瓦
 突尼西亞   突尼斯
-索馬利亞   索马里
 寮國 老挝
-肯雅 肯尼亚
-肯亞 肯尼亚
 蘇利南      苏里南
 莫三比克   莫桑比克
 賴索托      莱索托
-貝南 贝宁
 尚比亞      赞比亚
 亞塞拜然   阿塞拜疆
 阿拉伯聯合大公國       阿拉伯联合酋长国
 馬爾地夫   马尔代夫
 馬爾他      马耳他
 馬利共和國        马里共和国
-即食麵      方便面
-快速面      方便面
-速食麵      方便面
-泡麵 方便面
 笨豬跳      蹦极跳
 绑紧跳      蹦极跳
-冷盤 凉菜
-冷菜 凉菜
-散钱 零钱
-谐星 笑星
-夜学 夜校
-华乐 民乐
-中樂 民乐
-軍中樂園    军中乐园
-华乐街      华乐街
-屋价 房价
-計程車      出租车
-單車 自行车
-節慶 节日
-芝士 乾酪
 狗隻 犬只
 士多啤梨   草莓
 忌廉 奶油
-桌球 台球
 撞球 台球
-衞生 卫生
-衛生 卫生
 賓士 奔驰
-平治 奔驰
-平治之亂   平治之乱
-平治之乱   平治之乱
 積架 捷豹
-福斯 大众
-福士 大众
-萬事得      马自达
-寶獅 标志
-拿破崙      拿破仑
 布殊 布什
-布希 布什
-布希亞      布希亚
-布希亚      布希亚
 柯林頓      克林顿
-海珊 侯赛因
-梵谷 凡高
-大衛碧咸   大卫·贝克汉姆
-米高奧雲   迈克尔·欧文
-卡佩雅蒂   珍妮弗·卡普里亚蒂
-沙芬 马拉特·萨芬
-舒麥加      迈克尔·舒马赫
+梵谷 梵高
+碧咸 贝克汉姆
+米高·奧雲 迈克尔·欧文
+卡佩雅蒂   卡普里亚蒂
+舒麥加      舒马赫
 希特拉      希特勒
 黛安娜      戴安娜
-榴槤 榴莲
-榴梿 榴莲
-矽    硅
-矽肺 矽肺
-矽塵 矽尘
-矽尘 矽尘
-矽鋼 矽钢
-矽钢 矽钢
-侏儸紀      侏罗纪
-甚麽 什么
-甚麼 什么
+雷諾瓦      雷诺阿
+達文西      达芬奇
+達·文西    达·芬奇
+辛康納利   肖恩·康纳利
+維根斯坦   维特根斯坦
+索忍尼辛   索尔仁尼琴
+索贊尼辛   索尔仁尼琴
+蘇辛尼津   索尔仁尼琴
+皮雅斯·布士南   皮尔斯·布鲁斯南
+甘迺迪      肯尼迪
+梅赫西迪   梅赛德斯
+李奧納多   列奥那多
+普利茲      普利策
+戈巴契夫   戈尔巴乔夫
+德希達      德里达
+席哈克      希拉克
+蘿拉 劳拉
+史達林      斯大林
+史特勞斯   斯特劳斯
+卡斯楚      卡斯特罗
+占士邦      詹姆斯·邦德
+傅利葉      傅里叶
+伊莉莎白   伊丽莎白
+派屈克      帕特里克
+蒲美蓬      普密蓬
+畢卡索      毕加索
+蒲朗克      普朗克
+薛丁格      薛定谔
+克卜勒      开普勒
+都卜勒      多普勒
+邱吉爾      丘吉尔
+狄托 铁托
+查維茲      查韦斯
+班傑明      本杰明
+柯德莉·夏萍      奥黛丽·赫本
+華勒沙      瓦文萨
+華里沙      瓦文萨
+歐巴馬      奥巴马
+北韓 北朝鲜
+寮人民民主共和國       老挝人民民主共和国
+寮語 老挝语
+蘭卡威      浮罗交怡
+雷伊泰灣   莱特湾
+耶加達      雅加达
+伊斯蘭瑪巴德     伊斯兰堡
+喀拉蚩      卡拉奇
+葉里溫      埃里温
+提比里西   第比利斯
+巴斯拉      巴士拉
+杜拜 迪拜
+賽普勒斯   塞浦路斯
+荷姆茲      霍尔木兹
+加薩走廊   加沙地带
+西臺人      赫梯人
+西臺族      赫梯族
+西臺文      赫梯文
+西臺語      赫梯语
+西臺王      赫梯王
+西臺國      赫梯国
+西臺帝      赫梯帝
+坎培拉      堪培拉
+玻里尼西亞        波利尼西亚
+紐幾內亞   新几内亚
+強斯頓環礁        约翰斯顿岛
+帕邁拉環礁        巴尔米拉环礁
+萌島 马恩岛
+伯明罕      伯明翰
+威爾斯      威尔士
+諾曼第      诺曼底
+土魯斯      图卢兹
+坎城 戛纳
+羅亞爾      卢瓦尔
+艾菲爾      埃菲尔
+羅浮宮      卢浮宫
+安哈特      安哈尔特
+布蘭登堡   勃兰登堡
+什勒斯維希        石勒苏益格
+霍爾斯坦   荷尔斯泰因
+前波莫瑞   前波美拉尼亚
+威斯伐倫   威斯特法伦
+德勒斯登   德累斯顿
+杜塞道夫   杜塞尔多夫
+漢諾瓦      汉诺威
+柏林圍牆   柏林墙
+巴塞隆拿   巴塞罗那
+巴塞隆納   巴塞罗那
+西維爾      塞维利亚
+塞維亞      塞维利亚
+華倫西亞   巴伦西亚
+瓦倫西亞   巴伦西亚
+雅爾達      雅尔塔
+車諾比      切尔诺贝利
+馬斯垂克   马斯特里赫特
+波士尼亞   波斯尼亚
+塞拉耶佛   萨拉热窝
+貝爾格勒   贝尔格莱德
+蒙特內哥羅        黑山
+塞爾維亞與蒙特內哥羅 塞尔维亚和黑山
+伊斯坦堡   伊斯坦布尔
+庇里牛斯   比利牛斯
+亞斯文      阿斯旺
+厄立特里亞        厄立特里亚
+厄利垂亚   厄立特里亚
+亞歷山卓   亚历山大
+雅穆索戈   亚穆苏克罗
+畿內亞      几内亚
+索馬利蘭   索马里兰
+吉力馬札羅        乞力马扎罗
+索馬利亞   索马里
+金夏沙      金沙萨
+三蘭港      达累斯萨拉姆
+布隆泉      布隆方丹
+馬拉威      马拉维
+百慕達      百慕大
+三藩市      旧金山
+荷里活      好莱坞
+麻薩諸塞   马萨诸塞
+伊利諾      伊利诺伊
+伊利諾伊   伊利诺伊
+密执安      密歇根
+密西根      密歇根
+紐澤西      新泽西
+蒙特婁      蒙特利尔
+滿地可      蒙特利尔
+千里達及托巴哥  特立尼达和多巴哥
+千里達      特立尼达
+托巴哥      多巴哥
+多明尼加   多米尼加
+頻寬 带宽
+數位相機   数码相机
+單眼相機   单反相机
+單鏡反光機        单反相机
+韌體 固件
+唯讀 只读
+作業系統   操作系统
+外掛程式   插件
+電晶體      晶体管
+顯示卡      显卡
+主機板      主板
+網際網絡   互联网
+原始碼      源代码
+螢幕 屏幕
+螢屏 荧屏
+解像度      分辨率
+IP位址       IP地址
+IP 位址      IP 地址
+程式設計師        程序员
+公尺 米
+公升 升
+英吋 英寸
+英呎 英尺
+高畫質      高清
+飛彈 导弹
+電視影集   电视系列剧
+原子筆      圆珠笔
+智慧卡      智能卡
+鐵達尼號   泰坦尼克号
+轉殖 克隆
+空中巴士   空中客车
+電視劇集   电视剧
+狂牛症      疯牛病
+結他 吉他
+了結他      了结他
+連結他      连结他
+已開發國家        发达国家
+太空飛行員        宇航员
+太空衣      宇航服
+外部連結   外部链接
+網站連結   网站链接
+網頁連結   网页链接
+超連結      超链接
+動畫影集   系列动画片
+全球資訊網        万维网
+伊波拉      埃博拉
+C肝   丙肝
+C型肝炎     丙型肝炎
+B肝   乙肝
+B型肝炎     乙型肝炎
+A肝   甲肝
+A型肝炎     甲型肝炎
+錄影帶      录像带
+音樂錄影帶        音乐录影带
+健力士世界紀錄  吉尼斯世界纪录
+金氏世界紀錄     吉尼斯世界纪录
+祖雲達斯   尤文图斯
+若且唯若   当且仅当
+山葉 雅马哈
+複製人      克隆人
+白朗寧      勃朗宁
+形上學      形而上学
+藍芽 蓝牙
+槍枝 枪支
+掃瞄 扫描
+愛滋 艾滋
+正體中文   繁体中文
+智慧財產權        知识产权
+智財權      知识产权
+哥德式      哥特式
+芮氏0        里氏0
+芮氏1        里氏1
+芮氏2        里氏2
+芮氏3        里氏3
+芮氏4        里氏4
+芮氏5        里氏5
+芮氏6        里氏6
+芮氏7        里氏7
+芮氏8        里氏8
+芮氏9        里氏9
+芮氏規模   里氏震级
+芮氏地震規模     里氏地震规模
+黎克特制   里氏
+機率 概率
+行政總裁   首席执行官
+執行長,   首席执行官,
+執行長、   首席执行官、
+執行長。   首席执行官。
+財務長,   首席财务官,
+財務長、   首席财务官、
+財務長。   首席财务官。
+營運長,   首席运营官,
+營運長、   首席运营官、
+營運長。   首席运营官。
+智慧型      智能
+智慧手機   智能手机
+可攜式      便携式
+電腦程式   计算机程序
+應用程式   应用程序
+雷射 激光
+尖峰時間   高峰时间
+尖峰時段   高峰时段
+咖哩 咖喱
+東協 东盟
+亚细安      东盟
+大英國協   英联邦
+共和联邦   英联邦
+阿布達比   阿布扎比
+蓋曼群島   开曼群岛
+柴契爾      撒切尔       
+戴卓爾      撒切尔
+凱薩琳      凯瑟琳
+嘉芙蓮      凯瑟琳
+孟德爾頌   门德尔松
+孟德爾遜   门德尔松
+蕭士塔高維奇     肖斯塔科维奇
+蕭士達高維契     肖斯塔科维奇
+工具機      机床
+空氣品質   空气质量
+空氣質素   空气质量
+伏地挺身   俯卧撑
+掌上壓      俯卧撑
+數位電視   数字电视
+數碼電視   数字电视
+數位技術   数字技术
+數碼技術   数字技术
+數位訊號   数字信号
+數碼訊號   数字信号
+行動網路   移动网络
+流動網絡   移动网络
+咪高峰      麦克风
+幫浦 泵
+電單車      摩托车
+演化論      进化论
+搜尋引擎   搜索引擎
+福馬林      福尔马林
+海洛英      海洛因
+赫魯雪夫   赫鲁晓夫
+公厘 毫米
+公釐 毫米
+海浬 海里
+森巴舞      桑巴舞
+喬治·歐威爾      乔治·奥威尔
+西元1        公元1
+西元2        公元2
+西元3        公元3
+西元4        公元4
+西元5        公元5
+西元6        公元6
+西元7        公元7
+西元8        公元8
+西元9        公元9
+西元前      公元前
+翁山蘇姬   昂山素季
+昂山素姬   昂山素季
+西洋棋      囯际象棋
+私隱 隐私
\ No newline at end of file
index 1f7fe7d..c31d232 100644 (file)
-”    」
-“    「
-‘    『
-’    』
+裡    裏
 鉤    鈎
-衛    衞
+檯    枱
+臥    卧
+醯    酰
+菸    煙
+汙    污
+溼    濕
+硅    矽
+計畫 計劃
+吧台 吧枱
+坐台 坐枱
+妆台 妝枱
+弹珠台      彈珠枱
+折台 摺枱
+台布 枱布
+台历 枱曆
+台灯 枱燈
+写字台      寫字枱
+工作台      工作枱
+弹子台      彈子枱
+台面上      枱面上
+柜台 櫃枱
+球台 球枱
+赌台 賭枱
+办公台      辦公枱
+餐台 餐枱
 凶殺 兇殺
 凶殘 兇殘
+凶惡 兇惡
 緝凶 緝兇
 買凶 買兇
-印表機      打印機
-字节 位元組
-字節 位元組
-列印 打印
-硬件 硬件
-硬體 硬件
-二極體      二極管
-三極體      三極管
-軟體 軟件
-網路 網絡
-人工智慧   人工智能
-航天飞机   穿梭機
-太空梭      穿梭機
-因特网      互聯網
-網際網路   互聯網
-机器人      機械人
-機器人      機械人
-移动电话   流動電話
-行動電話   流動電話
-數據機      調制解調器
-短信 短訊
-簡訊 短訊
-查德 乍得
-葉門 也門
-貝里斯      伯利茲
-維德角      佛得角
-克羅埃西亞        克羅地亞
-甘比亞      岡比亞
-幾內亞比索        幾內亞比紹
-列支敦斯登        列支敦士登
-賴比瑞亞   利比里亞
-迦納 加納
-加彭 加蓬
-波札那      博茨瓦納
-盧安達      盧旺達
-瓜地馬拉   危地馬拉
-厄瓜多尔   厄瓜多爾
-厄瓜多爾   厄瓜多爾
-厄瓜多      厄瓜多爾
-厄利垂亞   厄立特里亞
-吉布地      吉布堤
-哥斯大黎加        哥斯達黎加
-吐瓦魯      圖瓦盧
-聖露西亞   聖盧西亞
-圣基茨和尼维斯  聖吉斯納域斯
-聖克里斯多福及尼維斯 聖吉斯納域斯
-聖文森及格瑞那丁       聖文森特和格林納丁斯
-聖馬利諾   聖馬力諾
-蓋亞那      圭亞那
-坦尚尼亞   坦桑尼亞
-衣索匹亞   埃塞俄比亞
-衣索比亞   埃塞俄比亞
-吉里巴斯   基里巴斯
-塞普勒斯   塞浦路斯
-塞席爾      塞舌爾
-安地卡及巴布達  安提瓜和巴布達
-尼日利亚   尼日利亞
-尼日利亞   尼日利亞
-奈及利亞   尼日利亞
-尼日尔      尼日爾
-尼日爾      尼日爾
-尼日 尼日爾
-巴貝多      巴巴多斯
-巴布亞紐幾內亞  巴布亞新畿內亞
-布吉納法索        布基納法索
-蒲隆地      布隆迪
-帕劳 帛琉
-義大利      意大利
-索羅門群島        所羅門群島
-文莱 汶萊
-史瓦濟蘭   斯威士蘭
-斯洛維尼亞        斯洛文尼亞
-紐西蘭      新西蘭
-格瑞那達   格林納達
-茅利塔尼亞        毛里塔尼亞
-毛里求斯   毛里裘斯
-模里西斯   毛里裘斯
-沙地阿拉伯        沙特阿拉伯
-沙烏地阿拉伯     沙特阿拉伯
-波士尼亞赫塞哥維納    波斯尼亞黑塞哥維那
-辛巴威      津巴布韋
-宏都拉斯   洪都拉斯
-千里達托貝哥     特立尼達和多巴哥
-諾魯 瑙魯
-萬那杜      瓦努阿圖
-葛摩 科摩羅
-索馬利亞   索馬里
-寮國 老撾
-肯尼亚      肯雅
-肯亞 肯雅
-莫三比克   莫桑比克
-賴索托      萊索托
-貝南 貝寧
-尚比亞      贊比亞
-亞塞拜然   阿塞拜疆
-阿拉伯聯合大公國       阿拉伯聯合酋長國
-馬爾地夫   馬爾代夫
-馬利共和國        馬里共和國
-方便面      即食麵
-快速面      即食麵
-速食麵      即食麵
-泡麵 即食麵
-土豆 馬鈴薯
-土豆网      土豆網
-土豆網      土豆網
-华乐 中樂
-民乐 中樂
-計程車      的士
-出租车      的士
-公車 巴士
-公車上書   公車上書
-自行车      單車
-犬只 狗隻
-台球 桌球
-撞球 桌球
-冰淇淋      雪糕
-賓士 平治
-捷豹 積架
-福斯 福士
-雪铁龙      先進
-雪鐵龍      先進
-沃尓沃      富豪
-马自达      萬事得
-馬自達      萬事得
-寶獅 標致
-布什 布殊
-布希 布殊
-布希亞      布希亞
-布希亚      布希亞
-柯林頓      克林頓
-萨达姆      薩達姆
-海珊 侯賽因
-大卫·贝克汉姆   大衛碧咸
-迈克尔·欧文      米高奧雲
-珍妮弗·卡普里亚蒂     卡佩雅蒂
-马拉特·萨芬      沙芬
-迈克尔·舒马赫   舒麥加
-希特勒      希特拉
-狄安娜      戴安娜
-黛安娜      戴安娜
 颁布 頒佈
 頒布 頒佈
+发布 發佈
+發布 發佈
+秀发布      秀發佈
+并发布      並發佈       
+分布 分佈
+宣布 宣佈
+公布 公佈
+摆布 擺佈
+擺布 擺佈
+遍布 遍佈
+散布 散佈
+密布 密佈
+布于 佈於
+布於 佈於
+布道 佈道
+布置 佈置
+布景 佈景
+布光 佈光
+布局 佈局
+布防 佈防
+布施 佈施
+布满 佈滿
+布滿 佈滿
+布告 佈告
+布阵 佈陣
+布陣 佈陣
+布点 佈點
+布點 佈點
+布警 佈警
+布控 佈控
+布设 佈設
+布設 佈設
+布展 佈展
+布下了      佈下了
+布下的      佈下的
+星罗棋布   星羅棋佈
+星羅棋布   星羅棋佈
+开诚布公   開誠佈公
+開誠布公   開誠佈公
+空投布雷   空投佈雷
+火箭布雷   火箭佈雷
+海湾布雷   海灣佈雷
+海灣布雷   海灣佈雷
+空中布雷   空中佈雷
+海上布雷   海上佈雷
+布雷的      佈雷的
+布雷,      佈雷,
+布雷、      佈雷、
+布雷。      佈雷。
+布雷;      佈雷;
+布雷舰      佈雷艦
+布雷艦      佈雷艦
+布雷艇      佈雷艇
+布雷速度   佈雷速度
+布雷封锁   佈雷封鎖
+布雷封鎖   佈雷封鎖
+准将 準將
+准將 準將
+准尉 準尉
+迭代 疊代
+彩排 綵排
+彩带 綵帶
+彩帶 綵帶
+彩楼 綵樓
+彩樓 綵樓
+彩牌楼      綵牌樓
+彩牌樓      綵牌樓
+彩球 綵球
+彩绸 綵綢
+彩綢 綵綢
+彩线 綵綫
+彩線 綵線
+彩船 綵船
+彩衣 綵衣
+结彩 結綵
+結彩 結綵
+戏彩娱亲   戲綵娛親
+戲彩娛親   戲綵娛親
+剪彩 剪綵
+占上风      佔上風
+占上風      佔上風
+占下 佔下
+占位 佔位
+占住 佔住
+占占 佔佔
+占便宜      佔便宜
+占个 佔個
+占個 佔個
+占先 佔先
+占光 佔光
+占到 佔到
+占取 佔取
+占在 佔在
+占地 佔地
+占好 佔好
+占得 佔得
+占掉 佔掉
+占据 佔據
+占據 佔據
+占有 佔有
+占满 佔滿
+占滿 佔滿
+占为 佔為
+占為 佔為
+占用 佔用
+占毕 佔畢
+占畢 佔畢
+占尽 佔盡
+占盡 佔盡
+占线 佔線
+占線 佔線
+占起 佔起
+占过 佔過
+占過 佔過
+占领 佔領
+占領 佔領
+占头筹      佔頭籌
+占頭籌      佔頭籌
+占高枝      佔高枝
+侵占 侵佔
+先占 先佔
+分占 分佔
+只占 只佔
+强占 強佔
+強占 強佔
+抢占 搶佔
+搶占 搶佔
+攻占 攻佔
+照占 照佔
+约占 約佔
+約占 約佔
+连占 連佔
+連占 連佔
+进占 進佔
+進占 進佔
+还占 還佔
+還占 還佔
+隐占 隱佔
+隱占 隱佔
+霸占 霸佔
+鸠占 鳩佔
+鳩占 鳩佔
+割占 割佔
+非占不可   非佔不可
+占1   佔1
+占2   佔2
+占3   佔3
+占4   佔4
+占5   佔5
+占6   佔6
+占7   佔7
+占8   佔8
+占9   佔9
+占0   佔0
+占零 佔零
+占〇 佔〇
+占一 佔一
+占二 佔二
+占两 佔兩
+占兩 佔兩
+占三 佔三
+占四 佔四
+占五 佔五
+占六 佔六
+占七 佔七
+占八 佔八
+占九 佔九
+占十 佔十
+占百 佔百
+占千 佔千
+占万 佔萬
+占萬 佔萬
+占亿 佔億
+占億 佔億
+占超过      佔超過
+占超過      佔超過
+占不足      佔不足
+占至少      佔至少
+占少 佔少
+占至多      佔至多
+占半 佔半
+占多 佔多
+占大 佔大
+占小 佔小
+占中 佔中
+占东 佔東
+占東 佔東
+占西 佔西
+占南 佔南
+占北 佔北
+占平均      佔平均
+占总 佔總
+占總 佔總
+独占 獨佔
+獨占 獨佔
+所占 所佔
+市占 市佔
+占率 佔率
+占市 佔市
+占世界      佔世界
+占全 佔全
+占国 佔國
+占國 佔國
+占国桥      占國橋
+占國橋      占國橋
+占美 佔美
+占台 佔台
+占臺 佔臺
+占香 佔香
+占澳 佔澳
+占加 佔加
+占新 佔新
+占马 佔馬
+占馬 佔馬
+占印 佔印
+占英 佔英
+占法 佔法
+占德 佔德
+占葡 佔葡
+占俄 佔俄
+占苏 佔蘇
+占蘇 佔蘇
+占缺 佔缺
+占A   佔A
+占B   佔B
+占C   佔C
+占D   佔D
+占E   佔E
+占F   佔F
+占G   佔G
+占H   佔H
+占I   佔I
+占J   佔J
+占K   佔K
+占L   佔L
+占M   佔M
+占N   佔N
+占O   佔O
+占P   佔P
+占Q   佔Q
+占R   佔R
+占S   佔S
+占T   佔T
+占U   佔U
+占V   佔V
+占W   佔W
+占X   佔X
+占Y   佔Y
+占Z   佔Z
+占不占      佔不佔
+不占 不佔
+占了 佔了
+占资 佔資
+占資 佔資
+占人便宜   佔人便宜
+占主要      佔主要
+占所有      佔所有
+占头 佔頭
+占頭 佔頭
+占道 佔道
+占屋 佔屋
+占网 佔網
+占網 佔網
+占床 佔床
+占座 佔座
+占分 佔分
+占个位      佔個位
+占個位      佔個位
+占後 佔後
+占山为      佔山為
+占山為      佔山為
+占比 佔比
+占下風      佔下風
+占下风      佔下風
+少占 少佔
+多占 多佔
+费占 費佔
+費占 費佔
+占查 佔查
+占压 佔壓
+占壓 佔壓
+占优 佔優
+占優 佔優
+占劣 佔劣
+稳占 穩佔
+穩占 穩佔
+占整 佔整
+占局部      佔局部
+日占 日佔
+美占 美佔
+英占 英佔
+德占 德佔
+法占 法佔
+俄占 俄佔
+葡占 葡佔
+西占 西佔
+奥占 奧佔
+奧占 奧佔
+意占 意佔
+義占 意佔
+地占 地佔
+占场 佔場
+占場 佔場
+占耕 佔耕
+狂占 狂佔
+征占 徵佔
+徵占 徵佔
+圈占 圈佔
+已占 已佔
+占囁 佔囁
+占主 佔主
+占次 佔次
+寡占 寡佔
+占去 佔去
+将占 將佔
+將占 將佔
+将占卜      將占卜
+將占卜      將占卜
+要占 要佔
+要占卜      要占卜
+会占 會佔
+會占 會佔
+会占卜      會占卜
+會占卜      會占卜
+占卜 占卜
+梦有五不占        夢有五不占
+夢有五不占        夢有五不占
+占有五不   占有五不
+吞占 吞佔
+一地里      一地裏
+一年里      一年裏
+中文里      中文裏
+事里 事裏
+井里 井裏
+作品里      作品裏
+个里 個裏
+假里 假裏
+傻里傻气   傻裏傻氣
+丛林里      叢林裏
+口里 口裏
+吃里扒外   吃裏扒外
+吃里爬外   吃裏爬外
+呆里呆气   呆裏呆氣
+哪里 哪裏
+嘴里 嘴裏
+圈里 圈裏
+园里 園裏
+土里 土裏
+坑里 坑裏
+城里 城裏
+域里 域裏
+场里 場裏
+壶里 壺裏
+夜里 夜裏
+梦里 夢裏
+天里 天裏
+子里 子裏
+字里行间   字裏行間
+学里 學裏
+宫里 宮裏
+家里 家裏
+宝里宝气   寶裏寶氣
+封面里      封面裏
+专辑里      專輯裏
+就里 就裏
+局里 局裏
+屋里 屋裏
+屯里 屯裏
+巷里 巷裏
+市里 市裏
+年代里      年代裏
+年里 年裏
+店里 店裏
+庙里 廟裏
+往里 往裏
+从里到外   從裏到外
+从里向外   從裏向外
+心里面      心裏面
+心里 心裏
+忙里 忙裏
+怪里怪气   怪裏怪氣
+慌里慌张   慌裏慌張
+怀里 懷裏
+戏里 戲裏
+房里 房裏
+手里 手裏
+手里剑      手裏劍
+族里 族裏
+日里 日裏
+暗地里      暗地裏
+暗沟里      暗溝裏
+暗里 暗裏
+会里 會裏
+村里 村裏
+森林里      森林裏
+棺材里      棺材裏
+树林里      樹林裏
+历史里      歷史裏
+死里求生   死裏求生
+死里逃生   死裏逃生
+壳里 殼裏
+水来汤里去        水來湯裏去
+水里 水裏
+池里 池裏
+沙里淘金   沙裏淘金
+河里 河裏
+洞里 洞裏
+渊里 淵裏
+湖里 湖裏
+漠里 漠裏
+潜意识里   潛意識裏
+潭里 潭裏
+墙里 牆裏
+狱里 獄裏
+班里 班裏
+田里 田裏
+由表及里   由表及裏
+界里 界裏
+白里透红   白裏透紅
+百科里      百科裏
+皮里春秋   皮裏春秋
+皮里阳秋   皮裏陽秋
+盒里 盒裏
+盘里 盤裏
+眼眶里      眼眶裏
+眼睛里      眼睛裏
+眼里 眼裏
+社里 社裏
+私下里      私下裏
+窝里 窩裏
+笑里藏刀   笑裏藏刀
+箱里 箱裏
+节目里      節目裏
+糊里糊涂   糊裏糊塗
+系列里      系列裏
+系里 系裏
+组里 組裏
+网里 網裏
+县里 縣裏
+缝里 縫裏
+肚里 肚裏
+胃里 胃裏
+背地里      背地裏
+胡里胡涂   胡裏胡塗
+腰里 腰裏
+花盆里      花盆裏
+苑里 苑裏
+苦里 苦裏
+草丛里      草叢裏
+庄里 莊裏
+葫芦里卖甚么药  葫蘆裏賣甚麼藥
+蜜里调油   蜜裏調油
+表里 表裏
+表里一致   表裏一致
+表里不一   表裏不一
+表里如一   表裏如一
+表里山河   表裏山河
+袋里 袋裏
+袖里 袖裏
+被里 被裏
+里勾外连   裏勾外連
+里手 裏手
+里海 裏海
+里屋 裏屋
+里层 裏層
+里带 裏帶
+里弦 裏弦
+里应外合   裏應外合
+里脊 裏脊
+里衣 裏衣
+里通外国   裏通外國
+里通外敌   裏通外敵
+里边 裏邊
+里间 裏間
+里面 裏面
+里面包      裏面包
+里头 裏頭
+衬里 襯裏
+角落里      角落裏
+话里有话   話裏有話
+车库里      車庫裏
+车站里      車站裏
+车里 車裏
+车里雅宾斯克     車里雅賓斯克
+这里 這裏
+邋里邋遢   邋裏邋遢
+那里 那裏
+金装玉里   金裝玉裏
+钟在寺里   鐘在寺裏
+门里 門裏
+间里 間裏
+院里 院裏
+阴沟里翻船        陰溝裏翻船
+集里 集裏
+鸡蛋里挑骨头     雞蛋裏挑骨頭
+雪里 雪裏
+雾里 霧裏
+鞋里 鞋裏
+鞭辟入里   鞭辟入裏
+头里 頭裏
+风里 風裏
+馆里 館裏
+点里 點裏
+点里程      點里程
+鼓里 鼓裏
+世纪里      世紀裏
+夜晚里      夜晚裏
+参数里      參數裏
+集数里      集數裏
+人数里      人數裏
+总数里      總數裏
+函数里      函數裏
+地图里      地圖裏
+版图里      版圖裏
+配图里      配圖裏
+路图里      路圖裏
+线图里      線圖裏
+幅图里      幅圖裏
+镜图里      鏡圖裏
+从图里      從圖裏
+的图里      的圖裏
+图里的      圖裏的
+图里,      圖裏,
+深山里      深山裏
+冰山里      冰山裏
+火山里      火山裏
+在山里      在山裏
+的山里      的山裏
+到山里      到山裏
+去山里      去山裏
+从山里      從山裏
+山里的      山裏的
+山里有      山裏有
+棉里 棉裏
+语里 語裏
+方法里      方法裏
+语法里      語法裏
+看法里      看法裏
+宪法里      憲法裏
+用法里      用法裏
+法里,      法裏,
+苑裡 苑裡
+霄裡 霄裡
+岸裡 岸裡
+裡冷 裡冷
 挨著 挨着
 愛著 愛着
 暗著 暗着
 定著 定着
 動著 動着
 鬥著 鬥着
+斗着 鬥着
 獨著 獨着
 對著 對着
 盾著 盾着
 揮著 揮着
 活著 活着
 獲著 獲着
-獲著 獲着
 急著 急着
 記著 記着
 冀著 冀着
 叫著 叫着
 接著 接着
 借著 借着
-借著 借着
 據著 據着
 開著 開着
 看得著      看得着
 潤著 潤着
 燒著 燒着
 身著 身着
-沉著 沉着
 盛著 盛着
 試著 試着
 守著 守着
 在著 在着
 紮著 紮着
 展著 展着
+占着 佔着
+占著 佔着
+占著作      占著作
+占著者      佔著者
+占著名      佔著名
+占著述      占著述
+占著稱      占著稱
+占著錄      占著錄
 站著 站着
 戰著 戰着
 蘸著 蘸着
 爭著 爭着
 掙著 掙着
 制著 制着
-志著 志着
+標志著      標志着
 皺著 皺着
 住著 住着
 抓著 抓着
 寫著 寫着
 遇著 遇着
 殺著 殺着
+驶著 驶着
 著筆 着筆
 著鞭 着鞭
 著法 着法
 著妳 着妳
 著你 着你
 著色 着色
-著什麼急   着什麼急
+著什 着什
 著實 着實
 著手 着手
 著數 着數
 著衣 着衣
 著意 着意
 著重 着重
-著重 着重
 著裝 着裝
 著地 着地
 不著邊際   不着邊際
 獲著稱      獲著稱
 獲著錄      獲著錄
 獲著書      獲著書
-獲著作      獲著作
-獲著者      獲著者
-獲著名      獲著名
-獲著述      獲著述
-獲著稱      獲著稱
-獲著錄      獲著錄
-獲著書      獲著書
 急著作      急著作
 急著者      急著者
 急著名      急著名
 借著稱      借著稱
 借著錄      借著錄
 借著書      借著書
-借著作      借著作
-借著者      借著者
-借著名      借著名
-借著述      借著述
-借著稱      借著稱
-借著錄      借著錄
-借著書      借著書
 據著作      據著作
 據著者      據著者
 據著名      據著名
 身著稱      身著稱
 身著錄      身著錄
 身著書      身著書
-沉著作      沉著作
-沉著者      沉著者
-沉著名      沉著名
-沉著述      沉著述
-沉著稱      沉著稱
-沉著錄      沉著錄
-沉著書      沉著書
 盛著作      盛著作
 盛著者      盛著者
 盛著名      盛著名
 因著稱      因著稱
 因著錄      因著錄
 因著書      因著書
+因著《      因著《
+因著〈      因著〈
 印著作      印著作
 印著者      印著者
 印著名      印著名
 殺著書      殺著書
 標誌著      標誌着
 幹著 幹着
+幹著名      幹著名
+幹著稱      幹著稱
 干着 幹着
 干着急      干着急
 流露著      流露着
 靠著称      靠著稱
 靠著者      靠著者
 靠著述      靠著述
-新著龍虎門        新著龍虎門
 迫著 迫着
-心繫著      心繫着
+繫著 繫着
 藉著 藉着
 吃得著      吃得着
 吃不著      吃不着
 嗅不著      嗅不着
 嗅著 嗅着
 警戒著      警戒着
+過著 過着
+過著作      當著作
+過著者      當著者
+過著名      當著名
+過著述      當著述
+過著稱      當著稱
+過著錄      當著錄
+過著書      當著書
+穫著 穫着
+閒著 閒着
+飃著 飃着
+沈著 沈着
+竪著 竪着
+擡著 擡着
+沖著 沖着
+沖著《      沖著《
+沖著。      沖著。
+沖著,      沖著,
+衝著 衝着
+著甚麽      着甚麽
+存著 存着
+存著名      存著名
+劃著 劃着
+別著 別着
+刮著 刮着
+掛著 掛着
+吊著 吊着
+回著 回着
+回著名      回著名
+塗著 塗着
+麼著 麼着
+擔著 擔着
+負著 負着
+板著臉      板着臉
+為著 為着
+為著作      為著作
+為著名      為著名
+為著錄      為著錄
+為著稱      為著稱
+為著者      為著者
+為著述      為著述
+為著《      為著《
+畫著 畫着
+畫著作      畫著作
+畫著名      畫著名
+畫著稱      畫著稱
+畫著者      畫著者
+發著 發着
+發著作      發著作
+發著名      發著名
+發著稱      發著稱
+發著者      發著者
+發著《      發著《
+簽著 簽着
+繃著 繃着
+覆著 覆着
+蓋著 蓋着
+說著 說着
+說著作      說著作
+說著稱      說著稱
+說著者      說著者
+說著述      說著述
+象徵著      象著着
+象徵著名   象徵著名
+湊合著      湊合着
+配合著      配合着
+配合著名   配合著名
+關係著      關係着
+下著 下着
+下著作      下著作
+下著名      下著名
+下著录      下著錄
+下著錄      下著錄
+下著称      下著稱
+下著稱      下著稱
+下著者      下著者
+下著述      下著述
+下著有      下著有
+放著 放着
+放著作      放著作
+放著名      放著名
+放著稱      放著稱
+放著称      放著稱
+三十六著   三十六着
+走為上著   走為上着
+鬧著 鬧着
+悶著 悶着
+呆著 呆着
+包著 包着
+系着 繫着
+颳著 颳着
 榴莲 榴槤
 榴蓮 榴槤
-发布 發佈
-發布 發佈
-掛鉤 掛鈎
-鉤心鬥角   鈎心鬥角
-咤    咤
 叱吒 叱咤
-叱咤 叱咤
-醯    酰
+嘯吒 嘯咤
 醯醬 醯醬
 醯雞 醯雞
 醯酱 醯醬
 醯醢 醯醢
 醯壶 醯壺
 醯壺 醯壺
-菸    煙
-雪裡紅      雪裏紅
-雪裡蕻      雪裏蕻
-雪里蕻      雪裏蕻
-雪里红      雪裏紅
-森林裡      森林裏
-森林里      森林裏
-日子裡      日子裏
-日子里      日子裏
-故事裡      故事裏
-故事里      故事裏
-領域裡      領域裏
-领域里      領域裏
-時間裡      時間裏
-时间里      時間裏
-深淵裡      深淵裏
-深渊里      深渊裏
-醫院裡      醫院裏
-医院里      医院裏
-春假裡      春假裏
-春假里      春假裏
-暑假裡      暑假裏
-暑假里      暑假裏
-秋假裡      秋假裏
-秋假里      秋假裏
-寒假裡      寒假裏
-寒假里      寒假裏
-春天裡      春天裏
-春天里      春天裏
-夏天裡      夏天裏
-夏天里      夏天裏
-秋天裡      秋天裏
-秋天里      秋天裏
-冬天裡      冬天裏
-冬天里      冬天裏
-春日裡      春日裏
-夏日裡      夏日裏
-秋日裡      秋日裏
-冬日裡      冬日裏
-春日里      春日裏
-夏日里      夏日裏
-秋日里      秋日裏
-冬日里      冬日裏
-嘴裡 嘴裏
-嘴里 嘴裏
-心裡 心裏
-心里 心裏
-皮裡陽秋   皮裏陽秋
-皮里阳秋   皮裏陽秋
-肚裡 肚裏
-肚里 肚裏
-苦裡 苦裏
-苦里 苦裏
-裡勾外連   裏勾外連
-里勾外连   裏勾外連
-裡面 裏面
-里面 裏面
-這裡 這裏
-這里 這裏
-點裡 點裏
-点里 點裏
-中文裡      中文裏
-中文里      中文裏
-山洞里      山洞裏
-山洞裡      山洞裏
-近角聪信   近角聰信
-近角聰信   近角聰信
-世界里      世界裏
-世界裡      世界裏
-眼睛里      眼睛裏
-眼睛裡      眼睛裏
-百科裡      百科裏
-百科里      百科裏
-歷史裡      歷史裏
-历史里      歷史裏
-戲裡 戲裏
-戏里 戲裏
-作品裡      作品裏
-作品里      作品裏
-專輯裡      專輯裏
-专辑里      專輯裏
-年代裡      年代裏
-年代里      年代裏
-棺材裡      棺材裏
-棺材里      棺材裏
-學裡 學裏
-学里 學裏
-獄裡 獄裏
-狱里 獄裏
-館裡 館裏
-馆里 館裏
-系列裡      系列裏
-系列里      系列裏
-村子裡      村子裏
-村子里      村子裏
-分布 分佈
-分布于      分佈於
-分布於      分佈於
 想象 想像
-無線電視   無綫電視
-无线电视   無綫電視
-無線收費   無綫收費
-无线收费   無綫收費
-無線節目   無綫節目
-无线节目   無綫節目
-無線劇集   無綫劇集
-无线剧集   無綫劇集
-東鐵線      東鐵綫
-东铁线      東鐵綫
-觀塘線      觀塘綫
-观塘线      觀塘綫
-荃灣線      荃灣綫
-荃湾线      荃灣綫
-港島線      港島綫
-港岛线      港島綫
-東涌線      東涌綫
-东涌线      東涌綫
-將軍澳線   將軍澳綫
-将军澳线   將軍澳綫
-西鐵線      西鐵綫
-西铁线      西鐵綫
-馬鞍山線   馬鞍山綫
-马鞍山线   馬鞍山綫
-迪士尼線   迪士尼綫
-迪士尼线   迪士尼綫
-沙田至中環線     沙田至中環綫
-沙田至中环线     沙田至中環綫
-沙中線      沙中綫
-沙中线      沙中綫
-北環線      北環綫
-北环线      北環綫
-機場快線   機場快綫
-机场快线   機場快綫
-505線 505綫
-505线 505綫
-507線 507綫
-507线 507綫
-610線 610綫
-610线 610綫
-614線 614綫
-614线 614綫
-614P線        614P綫
-614P线        614P綫
-615線 615綫
-615线 615綫
-615P線        615P綫
-615P线        615P綫
-705線 705綫
-705线 705綫
-706線 706綫
-706线 706綫
-751線 751綫
-751线 751綫
-751P線        751P綫
-751P线        751P綫
-761P線        761P綫
-761P线        761P綫
+係數 系數
+澈底 徹底
+雇员 僱員
+雇用 僱用
+糊口 餬口
+倒楣 倒霉
+径庭 逕庭
+径到 逕到
+径取 逕取
+径入 逕入
+径行 逕行
+径自 逕自
+径往 逕往
+径寄 逕寄
+径启 逕啟
+径迎 逕迎
+印表機      打印機
+字节 位元組
+字節 位元組
+列印 打印
+硬件 硬件
+硬體 硬件
+二極體      二極管
+三極體      三極管
+軟體 軟件
+軟體動物   軟體動物
+軟體家具   軟體家具
+網路 網絡
+人工智慧   人工智能
+航天飞机   穿梭機
+太空梭      穿梭機
+因特网      互聯網
+網際網路   互聯網
+机器人      機械人
+機器人      機械人
+移动电话   流動電話
+行動電話   流動電話
+數據機      調制解調器
+短信 短訊
+簡訊 短訊
+葉門 也門
+貝里斯      伯利茲
+維德角      佛得角
+克羅埃西亞        克羅地亞
+甘比亞      岡比亞
+幾內亞比索        幾內亞比紹
+列支敦斯登        列支敦士登
+賴比瑞亞   利比里亞
+迦納 加納
+加彭 加蓬
+波札那      博茨瓦納
+盧安達      盧旺達
+瓜地馬拉   危地馬拉
+厄瓜多尔   厄瓜多爾
+厄瓜多爾   厄瓜多爾
+厄瓜多      厄瓜多爾
+厄利垂亞   厄立特里亞
+吉布地      吉布堤
+哥斯大黎加        哥斯達黎加
+吐瓦魯      圖瓦盧
+聖露西亞   聖盧西亞
+圣基茨和尼维斯  聖吉斯納域斯
+聖克里斯多福及尼維斯 聖吉斯納域斯
+聖文森及格瑞那丁       聖文森特和格林納丁斯
+聖馬利諾   聖馬力諾
+蓋亞那      圭亞那
+坦尚尼亞   坦桑尼亞
+衣索匹亞   埃塞俄比亞
+衣索比亞   埃塞俄比亞
+吉里巴斯   基里巴斯
+塞普勒斯   塞浦路斯
+塞席爾      塞舌爾
+安地卡及巴布達  安提瓜和巴布達
+巴貝多      巴巴多斯
+巴布亞紐幾內亞  巴布亞新畿內亞
+布吉納法索        布基納法索
+蒲隆地      布隆迪
+帕劳 帛琉
+義大利      意大利
+索羅門群島        所羅門群島
+文莱 汶萊
+史瓦濟蘭   斯威士蘭
+斯洛維尼亞        斯洛文尼亞
+紐西蘭      新西蘭
+格瑞那達   格林納達
+茅利塔尼亞        毛里塔尼亞
+毛里求斯   毛里裘斯
+模里西斯   毛里裘斯
+沙地阿拉伯        沙特阿拉伯
+沙烏地阿拉伯     沙特阿拉伯
+波士尼亞赫塞哥維納    波斯尼亞黑塞哥維那
+辛巴威      津巴布韋
+宏都拉斯   洪都拉斯
+千里達托貝哥     特立尼達和多巴哥
+萬那杜      瓦努阿圖
+葛摩 科摩羅
+寮國 老撾
+肯尼亚      肯雅
+莫三比克   莫桑比克
+賴索托      萊索托
+尚比亞      贊比亞
+亞塞拜然   阿塞拜疆
+阿拉伯聯合大公國       阿拉伯聯合酋長國
+馬爾地夫   馬爾代夫
+馬利共和國        馬里共和國
+台球 桌球
+撞球 桌球
+冰淇淋      雪糕
+賓士 平治
+捷豹 積架
+雪铁龙      先進
+雪鐵龍      先進
+沃尓沃      富豪
+马自达      萬事得
+馬自達      萬事得
+寶獅 標致
+布什 布殊
+柯林頓      克林頓
+萨达姆      薩達姆
+贝克汉姆   碧咸
+贝克漢      碧咸
+迈克尔·欧文      米高·奧雲
+卡普里亚蒂        卡佩雅蒂
+马拉特·萨芬      馬拉特·沙芬
+舒马赫      舒麥加
+希特勒      希特拉
+狄安娜      戴安娜
+黛安娜      戴安娜
+南朝鲜      南韓
+北朝鲜      北韓
+寮語 老撾語
+寮人民民主共和國       老撾人民民主共和國
+莱特湾      雷伊泰灣
+萊特灣      雷伊泰灣
+蘭卡威      浮羅交怡
+吉尔吉斯斯坦     吉爾吉斯
+撒马尔罕   撒馬爾罕
+伊斯蘭瑪巴德     伊斯蘭堡
+喀拉蚩      卡拉奇
+帕塔亚      芭達亞
+葉里溫      埃里溫
+巴士拉      巴斯拉
+賽普勒斯   塞浦路斯
+荷姆茲      霍爾木茲
+加薩走廊   加沙地帶
+西臺語      赫梯語
+西臺王      赫梯王
+西臺族      赫梯族
+西臺文      赫梯文
+西臺帝      赫梯帝
+西臺國      赫梯國
+西臺人      赫梯人
+阿联酋      阿聯酋
+迪拜 杜拜
+格鲁吉亚   格魯吉亞
+提比里西   第比利斯
+諾鲁 瑙魯
+玻里尼西亞        波利尼西亞
+帛琉 帕勞
+堪培拉      坎培拉
+约翰斯顿岛        強斯頓環礁
+巴尔米拉环礁     帕邁拉環礁
+马恩岛      萌島
+伯明罕      伯明翰
+布里斯托尔        布里斯托
+威尔士      威爾斯
+威爾士      威爾斯
+·威尔士    ·威爾士
+·威爾士    ·威爾士
+土魯斯      圖盧茲
+戛纳 康城
+坎城 康城
+羅亞爾      盧瓦爾
+诺曼底      諾曼第
+卢浮宫      羅浮宮
+埃菲尔      艾菲爾
+霍爾斯坦   荷爾斯泰因
+漢諾瓦      漢諾威
+哥廷根      格丁根
+杜塞道夫   杜塞爾多夫
+德勒斯登   德累斯頓
+安哈特      安哈爾特
+威斯伐倫   威斯特法倫
+布蘭登堡   勃蘭登堡
+前波莫瑞   前波美拉尼亞
+什勒斯維希        石勒蘇益格
+不萊梅      不來梅
+柏林墙      柏林圍牆
+巴塞罗那   巴塞隆拿
+巴塞隆納   巴塞隆拿
+塞维利亚   西維爾
+塞維亞      西維爾
+巴伦西亚   華倫西亞
+巴倫西亞   華倫西亞
+瓦倫西亞   華倫西亞
+雅爾達      雅爾塔
+切尔诺贝利        切爾諾貝爾
+蒙特內哥羅        黑山
+馬斯垂克   馬斯特里赫特
+貝爾格勒   貝爾格萊德
+塞拉耶佛   薩拉熱窩
+波士尼亞   波斯尼亞
+塞爾維亞與蒙特內哥羅 塞爾維亞和黑山
+卢塞恩      琉森
+亞斯文      阿斯旺
+奈及利亞   尼日利亞
+雅穆索戈   雅穆蘇克雷
+幾內亞      畿內亞
+几内亚      畿內亞
+衣索匹亞   埃塞俄比亚
+吉力馬札羅        乞力馬札羅
+厄利垂亚   厄立特里亞
+索馬利亞   索馬里
+索馬利里   索馬里
+马里兰      馬利蘭
+馬里蘭      馬利蘭
+好萊塢      荷里活
+好莱坞      荷里活
+舊金山      三藩市
+旧金山      三藩市
+紐澳良      新奧爾良
+密西根      密歇根
+愛荷華      艾奧瓦
+爱荷华      艾奧瓦
+得克萨斯   德克薩斯
+蒙特婁      蒙特利爾
+滿地可      蒙特利爾
+紐賓士域   紐賓士域
+默多克      梅鐸
+梅鐸 梅鐸
+麦克尔      米高
+迈克尔      米高
+錢尼 切尼
+里瓦尔多   李華度
+罗纳德·里根      朗奴·列根
+达芬奇      達文西
+达·芬奇    達·文西
+谢丽·布莱尔      彭雪玲
+葉爾欽      葉利欽
+菲利普親王        菲臘親王
+菲利普亲王        菲臘親王
+華勒沙      華里沙
+艾里爾·夏隆      阿里埃勒·沙龍
+罗纳尔迪尼奥     朗拿甸奴
+罗纳尔多   朗拿度
+索忍尼辛   索贊尼辛
+索尔仁尼琴        索贊尼辛
+瓦文萨      華里沙
+班傑明      本傑明
+狄托 鐵托
+柴契爾      戴卓爾
+撒切尔      戴卓爾
+斯蒂芬·斯皮尔伯格     史提芬·史匹堡
+斯皮尔伯格        史匹堡
+史蒂芬·史匹柏   史提芬·史匹堡
+史匹柏      史匹堡
+戈巴契夫   戈爾巴喬夫
+席哈克      希拉克
+希拉蕊      希拉里
+布莱尔      貝理雅
+尼克松      尼克遜
+奧黛麗·赫本      柯德莉·夏萍
+奧黛莉·朵杜      柯德莉·塔圖
+奥黛丽·赫本      柯德莉·夏萍
+卡斯楚      卡斯特羅
+肖邦 蕭邦
+恺撒 凱撒
+肯尼迪      甘迺迪
+歐巴馬      奧巴馬
+戈登·布朗 白高敦
+狂牛症      瘋牛症
+A肝   甲肝
+A型肝炎     甲型肝炎
+B肝   乙肝
+B型肝炎     乙型肝炎
+C肝   丙肝
+C型肝炎     丙型肝炎
+艾滋 愛滋
+链接 連結
+分辨率      解像度
+解析度      解像度
+智慧卡      智能卡
+晶元 晶片
+芯片 晶片
+晶體管      電晶體
+晶体管      電晶體
+源代码      原始碼
+IP地址       IP位址
+IP 地址      IP 位址
+屏幕 螢幕
+荧屏 螢屏
+版权信息   版權資訊
+蹦床 彈床
+擊劍 劍擊
+击剑 劍擊
+金氏世界紀錄     健力士世界紀錄
+牛轧 鳥結
+牛軋 鳥結
+數位相機   數碼相機
+單眼相機   單鏡反光機
+单反相机   單鏡反光機
+形上學      形而上學
+吉尼斯世界纪录  健力士世界紀錄
+吉他 結他
+古柯鹼      可卡因
+咖哩 咖喱
+泰坦尼克号        鐵達尼號
+自行火炮   自走炮
+冰激凌      雪糕
+奥斯曼      鄂圖曼
+里氏0        黎克特制0
+里氏1        黎克特制1
+里氏2        黎克特制2
+里氏3        黎克特制3
+里氏4        黎克特制4
+里氏5        黎克特制5
+里氏6        黎克特制6
+里氏7        黎克特制7
+里氏8        黎克特制8
+里氏9        黎克特制9
+芮氏0        黎克特制0
+芮氏1        黎克特制1
+芮氏2        黎克特制2
+芮氏3        黎克特制3
+芮氏4        黎克特制4
+芮氏5        黎克特制5
+芮氏6        黎克特制6
+芮氏7        黎克特制7
+芮氏8        黎克特制8
+芮氏9        黎克特制9
+芮氏規模   黎克特制震級
+芮氏地震規模     黎克特制地震震級
+里氏震级   黎克特制震級
+里氏规模   黎克特制震級
+里氏地震规模     黎克特制地震震級
+埃博拉      伊波拉
+哥特式      哥德式
+正體中文   繁體中文
+板球 木球
+籃板球      籃板球
+智慧財產權        知識產權
+智財權      知識產權
+首席执行官        行政總裁
+智慧型      智能
+智慧手機   智能手機
+计算机程序        電腦程式
+电脑程序   電腦程式
+应用程序   應用程式
+尖峰時間   繁忙時間
+尖峰時段   繁忙時段
+東協 東盟
+亚细安      東盟
+大英國協   英聯邦
+共和联邦   英聯邦
+阿布達比   阿布扎比
+蓋曼群島   開曼群島
+宇航员      太空人
+薛丁格      薛定諤
+凯瑟琳      嘉芙蓮
+凱薩琳      嘉芙蓮
+门德尔松   孟德爾遜
+孟德爾頌   孟德爾遜
+肖斯塔科维奇     蕭士達高維契
+蕭士塔高維奇     蕭士達高維契
+工具機      機床
+伊斯坦堡   伊斯坦布爾
+空气质量   空氣質素
+空氣品質   空氣質素
+俯卧撑      掌上壓
+伏地挺身   掌上壓
+数字电视   數碼電視
+數位電視   數碼電視
+数字技术   數碼技術
+數位技術   數碼技術
+数字信号   數碼訊號
+數碼訊號   數碼訊號
+行動網路   流動網絡
+移动网络   流動網絡
+麥克風      咪高峰
+麦克风      咪高峰
+幫浦 泵
+朝鲜战争   韓戰
+万历朝鲜战争     萬曆朝鮮戰爭
+演化論      進化論
+搜索引擎   搜尋引擎
+福馬林      福爾馬林
+海洛因      海洛英
+高畫質      高清
+赫魯雪夫   赫魯曉夫
+公厘 毫米
+公釐 毫米
+桑巴舞      森巴舞
+乔治·奥威尔      喬治·歐威爾
+程序员      程式設計師
+昂山素季   昂山素姬
+翁山蘇姬   昂山素姬
+西洋棋      國際象棋
+隐私 私隱
+隱私 私隱
+硅藻 硅藻
\ No newline at end of file
diff --git a/maintenance/language/zhtable/toSG.manual b/maintenance/language/zhtable/toSG.manual
deleted file mode 100644 (file)
index 2d39aa3..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-」    ”
-「    “
-『    ‘
-』    ’
-方便面      快速面
-速食麵      快速面
-即食麵      快速面
-泡麵 快速面
-蹦极跳      绑紧跳
-笨豬跳      绑紧跳
-凉菜 冷菜
-冷盤 冷菜
-零钱 散钱
-散紙 散钱
-笑星 谐星
-夜校 夜学
-民乐 华乐
-住房 住屋
-房价 屋价
-榴莲 榴梿
-榴蓮 榴梿
\ No newline at end of file
index e22447a..b857e5f 100644 (file)
@@ -1,10 +1,16 @@
+」    ”
+「    “
+『    ‘
+』    ’
+「    “
+」    ”
 乾县 乾县
 萧乾 萧乾
 乾断 乾断
 乾图 乾图
 乾纲 乾纲
 乾红 乾红
-乾清宫      乾清宫
+乾清 乾清
 乾仪 乾仪
 乾兴 乾兴
 乾冈 乾冈
 男性为乾   男性为乾
 男为乾      男为乾
 阳为乾      阳为乾
-男性为乾   男性为乾
 男性爲乾   男性为乾
-男为乾      男为乾
 男爲乾      男为乾
-阳为乾      阳为乾
 陽爲乾      阳为乾
 乾一组      乾一组
 乾一坛      乾一坛
 陈乾生      陈乾生
 陈公乾生   陈公乾生
+李乾顺      李乾顺
+孙乾 孙乾
+陈遇乾      陈遇乾
+曾运乾      曾运乾
+象乾 象乾
+乾贵士      乾贵士
 柳诒徵      柳诒徵
 於夫罗      於夫罗
 於梨华      於梨华
 藉機 借机
 藉此 借此
 藉由 借由
-藉著 借着
-藉着 借着
 沈積 沉积
 沈船 沉船
 沈默 沉默
 沈沒 沉没
+沈澱 沉淀
+沈重 沉重
 彷彿 仿佛
 項鍊 项链
 肘手鍊足   肘手链足
 銀鍊 银链
 鍊錘 链锤
 洗鍊 洗练
-石碁镇      石碁镇
+手鍊 手链
+鍊表 链表
 反覆 反复
 回覆 回复
 答覆 答复
 重覆 重复
 覆核 复核
 覆查 复查
+覆检 复检
 鬱姓 鬱姓
 鬱氏 鬱氏
-侏儸紀      侏罗纪
 夥計 伙计
-吳其濬      吴其濬
-吴其濬      吴其濬
 乾泉水      干泉水
-么半群      幺半群
+么半 幺半
 么元 幺元
 么爹 幺爹
 么叔 幺叔
 么娘 幺娘
 么孃 幺娘
 幺孃 幺娘
+么弟 幺弟
 么妹 幺妹
 么小 幺小
 么姓 幺姓
 么氏 幺氏
 么蛾子      幺蛾子
 幺厮 幺厮
-睪丸 睾丸
-附睪 附睾
-隱睪 隱睾
 麼麼 麽麽
 么麼 幺麽
-么麼小丑   幺麽小丑
 么鳳 幺凤
 么二三      幺二三
 么篇 幺篇
 么謙 幺谦
+六么 六幺
 这么 这么
-麴义 麴义
 乾乾淨淨   干干净净
 乾乾脆脆   干干脆脆
 肉乾乾      肉干干
 醯鸡 醯鸡
 醯壶 醯壶
 苧烯 苧烯
-李乾顺      李乾顺
-幹著 干着
 氾濫 泛滥
-显著 显著
-顯著 显著
-標誌著      标志着
 近角聪信   近角聪信
-修鍊 修炼
 米泽瑠美   米泽瑠美
-太閤 太阁
 候覆 候复
 待覆 待复
 批覆 批复
+矇眬 矇眬
+荠苧 荠苧
+噁心 恶心
+碁圣 碁圣
+慇懃 殷勤
+慇勤 殷勤
+崑崙 昆仑
+崑山 昆山
+崑劇 昆剧
+崑曲 昆曲
+崑腔 昆腔
+崑蘇 昆苏
+崑調 昆调
+諠譁 喧哗
+慫慂 怂恿
+陈元扞      陈元扞
+甦醒 苏醒
+復甦 复苏
+蒐證 搜证
+蒐索 搜索
+蒐藏 搜藏
+蒐羅 搜罗
+蒐購 搜购
+蒐錄 搜录
+蒐集 搜集
+蒐輯 搜辑
+蒐采 搜采
+蒐採 搜采
+偵蒐 侦搜
+情蒐 情搜
+蘋果 苹果
+於之莹      於之莹
+陆徵祥      陆徵祥
+瞭臺 瞭台
+瞭台 瞭台
+慘澹 惨淡
+鍾情 钟情
+鍾愛 钟爱
+鍾意 钟意
+所鍾 所钟
+情鍾 情钟
+獨鍾 独钟
+鍾靈 钟灵
+龍鍾 龙钟
+鍾山 钟山
+一鍾 一钟
+千鍾 千钟
+薰心 熏心
+薰習 熏习
+薰陶 熏陶
+薰沐 熏沐
+薰香 熏香
+餬口 糊口
+跼限 局限
+跼促 局促
+釐清 厘清
+釐訂 厘订
+釐革 厘革
+釐改 厘改
+釐整 厘整
+釐正 厘正
+毫釐 毫厘
+釐毫 厘毫
+剖釐 剖厘
+一釐 一厘
+昇平 升平
+飛昇 飞升
+提昇 提升
+高昇 高升
+初昇 初升
+昇天 升天
+上昇 上升
+昇汞 升汞
+昇華 升华
+昇仙 升仙
+昇降 升降
+竹昇 竹升
+直昇 直升
+高陞 高升
+晉陞 晋升
+歷陞 历升
+官陞 官升
+榮陞 荣升
+又陞 又升
+年陞 年升
+月陞 月升
+陞官 升官
+陞任 升任
+陞為 升为
+陞遷 升迁
+陞用 升用
+陞補 升补
+陞了 升了
+,陞 ,升
+。陞 。升
+爾冬陞      尔冬升
+內聯陞      内联升
+同陞和      同升和
+拿破崙      拿破仑
+酒麴 酒曲
+麴黴 曲霉
+造麴 造曲
+大麴 大曲
+黃麴毒素   黄曲毒素
\ No newline at end of file
index 1a14e99..14f7eae 100644 (file)
-”    」
-“    「
-‘    『
-’    』
 着    著
+佈    布
 鈎    鉤
 钩    鉤
-衞 衛
-元凶 元凶
-元兇 元凶
-凶器 凶器
-兇器 凶器
-凶徒 凶徒
-兇徒 凶徒
-凶手 凶手
-兇手 凶手
-凶案 凶案
-兇案 凶案
-凶残 凶殘
-凶殘 凶殘
-兇殘 凶殘
-凶杀 凶殺
-凶殺 凶殺
-兇殺 凶殺
-疑凶 疑凶
-疑兇 疑凶
-真凶 真凶
-真兇 真凶
-缉凶 緝凶
-緝凶 緝凶
-緝兇 緝凶
-行凶 行凶
-行兇 行凶
-行凶后      行凶後
-行凶後      行凶後
-行兇後      行凶後
-买凶 買凶
-買凶 買凶
-買兇 買凶
-追凶 追凶
-追兇 追凶
-逞凶斗狠   逞凶鬥狠
-逞凶鬥狠   逞凶鬥狠
-逞兇鬥狠   逞凶鬥狠
-复苏 復甦
-復蘇 復甦
+账    帳
+枱    檯
+卧    臥
+睾    睪
+酰    醯
+钫    鍅
+锫    鉳
+镎    錼
+镅    鋂
+锿    鑀
+锝    鎝
+锎    鉲
+钚    鈽
+硅    矽
+煙草 菸草
+煙蒂 菸蒂
+煙斗 菸斗
+煙鬼 菸鬼
+煙灰 菸灰
+煙具 菸具
+煙民 菸民
+煙農 菸農
+煙絲 菸絲
+煙頭 菸頭
+煙葉 菸葉
+煙癮 菸癮
+煙嘴 菸嘴
+煙酒 菸酒
+煙袋 菸袋
+煙品 菸品
+煙鹼 菸鹼
+煙捲 菸捲
+香煙 香菸
+捲煙 捲菸
+旱煙 旱菸
+烤煙 烤菸
+禁煙 禁菸
+戒煙 戒菸
+拒煙 拒菸
+紙煙 紙菸
+抽煙 抽菸
+吸煙 吸菸
+反煙 反菸
+私煙 私菸
+點煙 點菸
+洋煙 洋菸
+二手煙      二手菸
+電子煙      電子菸
+呂宋煙      呂宋菸
+雪茄煙      雪茄菸
+無煙日      無菸日
+無煙環境   無菸環境
+榴莲 榴槤
+榴蓮 榴槤
+霉素 黴素
+想象 想像
+迭代 疊代
+叱咤 叱吒
+嘯咤 嘯吒
+叱咤9        叱咤9
+叱咤M        叱咤M
+叱咤樂壇   叱咤樂壇
+叱咤咤      叱咤咤
+叱咤叱      叱咤叱
+正在叱咤   正在叱咤
+氨基酸      胺基酸
+枪支 槍枝
+球杆 球桿
+推杆 推桿
+挥杆 揮桿
+揮杆 揮桿
+一杆 一桿
+二杆 二桿
+三杆 三桿
+四杆 四桿
+五杆 五桿
+六杆 六桿
+七杆 七桿
+八杆 八桿
+九杆 九桿
+十杆 十桿
+1杆   1桿
+2杆   2桿
+3杆   3桿
+4杆   4桿
+5杆   5桿
+6杆   6桿
+7杆   7桿
+8杆   8桿
+9杆   9桿
+0杆   0桿
+标准杆      標準桿
+標準杆      標準桿
+电杆 電桿
+电线杆      電線桿
+木杆 木桿
+铁杆 鐵桿
+鐵杆 鐵桿
+杆头 桿頭
+杆頭 桿頭
+杆身 桿身
+杆弟 桿弟
+锻炼 鍛鍊
+炼金 鍊金
+熏烤 燻烤
+烟熏 煙燻
+熏肉 燻肉
+熏黑 燻黑
+糊口 餬口
+径庭 逕庭
+径到 逕到
+径取 逕取
+径入 逕入
+径行 逕行
+径自 逕自
+径往 逕往
+径寄 逕寄
+径启 逕啟
+径迎 逕迎
+系着 繫著
+关系着      關係著
+冲着 衝著
+干着 幹著
+干着急      干著急
+斗着 鬥著
+徵狀 症狀
+系数 係數
 缺省 預設
-串行 串列
-串列加速器        串列加速器
 以太网      乙太網
-位图 點陣圖
-例程 常式
-光标 游標
 光盘 光碟
 光驱 光碟機
-全角 全形
-加载 載入
-半角 半形
-变量 變數
-噪声 雜訊
-脱机 離線
 声卡 音效卡
-老字号      老字號
-连字号      連字號
-字号 字型大小
 字库 字型檔
 字段 欄位
-字符 字元
-字符集      字符集
 存盘 存檔
-寻址 定址
-尾注 章節附註
-异步 非同步
-总线 匯流排
-括号 括弧
-接口 介面
+界面 介面
 控件 控制項
-权限 許可權
 盘片 碟片
-硅片 矽片
-硅谷 矽谷
 硬盘 硬碟
 磁盘 磁碟
 磁道 磁軌
-程控 程式控制
-远程控制   遠程控制
-遠程控制   遠程控制
-行程控制   行程控制
-流程控制   流程控制
 端口 埠
 算子 運算元
-算法 演算法
 芯片 晶片
-芯片 晶元
-词组 片語
 译码 解碼
 软驱 軟碟機
 快闪存储器        快閃記憶體
 闪存 快閃記憶體
 鼠标 滑鼠
 进制 進位
-交互式      互動式
-仿真 模擬
-优先级      優先順序
-传感 感測
-便携式      攜帶型
 信息论      資訊理論
 写保护      防寫
 分辨率      解析度
 服务器      伺服器
-等于 等於
 局域网      區域網
-扫瞄仪      掃瞄器
 宽带 寬頻
 数据库      資料庫
-奶酪 乳酪
-手电 手電筒
-手电筒      手電筒
-万历 萬曆
-永历 永曆
-词汇 辭彙
-习用 慣用
-元音 母音
-新纪元      新紀元
-新紀元      新紀元
-宋元 宋元
-头球 頭槌
-入球 進球
-粒入球      顆進球
-打门 射門
-火锅盖帽   蓋火鍋
 打印机      印表機
 打印機      印表機
 字节 位元組
 字節 位元組
 打印 列印
-打印 列印
-硬件 硬體
+攻打印      攻打印
 硬件 硬體
 二极管      二極體
 二極管      二極體
 三極管      三極體
 软件 軟體
 軟件 軟體
-网络 網路
-網絡 網路
 人工智能   人工智慧
 航天飞机   太空梭
-航天大学   航天大學
 穿梭機      太空梭
 因特网      網際網路
 互聯網      網際網路
 调制解调器        數據機
 調制解調器        數據機
 短信 簡訊
-短訊 簡訊
 乌兹别克斯坦     烏茲別克
 乍得 查德
-乍得 查德
 也门 葉門
 也門 葉門
 伯利兹      貝里斯
 几内亚比绍        幾內亞比索
 幾內亞比紹        幾內亞比索
 列支敦士登        列支敦斯登
-列支敦士登        列支敦斯登
 利比里亚   賴比瑞亞
 利比里亞   賴比瑞亞
-加纳 迦納
-加納 迦納
-加蓬 加彭
 加蓬 加彭
 博茨瓦纳   波札那
 博茨瓦納   波札那
 圣马力诺   聖馬利諾
 聖馬力諾   聖馬利諾
 圭亚那      蓋亞那
-圭亞那      蓋亞那
+法属圭亚那        法屬蓋亞那
 坦桑尼亚   坦尚尼亞
 坦桑尼亞   坦尚尼亞
 埃塞俄比亚        衣索比亞
 埃塞俄比亞        衣索比亞
 基里巴斯   吉里巴斯
-基里巴斯   吉里巴斯
 塔吉克斯坦        塔吉克
 塞拉利昂   獅子山
-塞拉利昂   獅子山
-塞浦路斯   塞普勒斯
 塞浦路斯   塞普勒斯
 塞舌尔      塞席爾
 塞舌爾      塞席爾
-多米尼加共和国  多明尼加
-多米尼加共和國  多明尼加
-多明尼加共和國  多明尼加
-多米尼加国        多米尼克
-多明尼加國        多米尼克
 安提瓜和巴布达  安地卡及巴布達
 安提瓜和巴布達  安地卡及巴布達
 尼日利亚   奈及利亞
 布基纳法索        布吉納法索
 布基納法索        布吉納法索
 布隆迪      蒲隆地
-布隆迪      蒲隆地
 帕劳 帛琉
 意大利      義大利
 所罗门群岛        索羅門群島
 津巴布韦   辛巴威
 津巴布韋   辛巴威
 洪都拉斯   宏都拉斯
-洪都拉斯   宏都拉斯
 特立尼达和托巴哥       千里達托貝哥
 特立尼達和多巴哥       千里達托貝哥
 瑙鲁 諾魯
 科摩羅      葛摩
 科特迪瓦   象牙海岸
 突尼斯      突尼西亞
-索马里      索馬利亞
-索馬里      索馬利亞
 老挝 寮國
 老撾 寮國
 肯尼亚      肯亞
-肯雅 肯亞
 苏里南      蘇利南
 莫桑比克   莫三比克
 莱索托      賴索托
 萊索托      賴索托
-贝宁 貝南
-貝寧 貝南
 赞比亚      尚比亞
 贊比亞      尚比亞
 阿塞拜疆   亞塞拜然
 马耳他      馬爾他
 马里共和国        馬利共和國
 馬里共和國        馬利共和國
-方便面      速食麵
-快速面      速食麵
-即食麵      速食麵
-薯仔 土豆
-土豆网      土豆網
-土豆網      土豆網
 蹦极跳      笨豬跳
 绑紧跳      笨豬跳
-冷菜 冷盤
-凉菜 冷盤
 出租车      計程車
 台球 撞球
-桌球 撞球
-卫生 衛生
-衞生 衛生
-平治之亂   平治之亂
-平治之乱   平治之亂
-平治 賓士
-奔驰 賓士
 積架 捷豹
-雪铁龙      雪鐵龍
-萬事得      馬自達
-拿破仑      拿破崙
-拿破侖      拿破崙
 布什 布希
 布殊 布希
 克林顿      柯林頓
 克林頓      柯林頓
 侯赛因      海珊
 侯賽因      海珊
-高 梵谷
+高 梵谷
 狄安娜      黛安娜
 戴安娜      黛安娜
-颁布 頒布
-頒佈 頒布
-彩带 彩帶
-彩排 彩排
-彩楼 彩樓
-彩牌楼      彩牌樓
-彩球 綵球
-彩绸 綵綢
-彩线 綵線
-彩船 綵船
-彩衣 綵衣
-结彩 結綵
-戏彩娱亲   戲綵娛親
-剪彩 剪綵
-榴莲 榴槤
-榴蓮 榴槤
-掛鈎 掛鉤
-挂钩 掛鉤
-鈎心鬥角   鉤心鬥角
-钩心斗角   鉤心鬥角
-酰    醯
-雪裏紅      雪裡紅
-雪裏蕻      雪裡蕻
-森林裏      森林裡
-日子裏      日子裡
-故事裏      故事裡
-領域裏      領域裡
-時間裏      時間裡
-深淵裏      深淵裡
-醫院裏      醫院裡
-春假裏      春假裡
-暑假裏      暑假裡
-秋假裏      秋假裡
-寒假裏      寒假裡
-春天裏      春天裡
-夏天裏      夏天裡
-秋天裏      秋天裡
-冬天裏      冬天裡
-春日裏      春日裡
-夏日裏      夏日裡
-秋日裏      秋日裡
-冬日裏      冬日裡
-百科裏      百科裡
-歷史裏      歷史裡
-戲裏 戲裡
-作品裏      作品裡
-專輯裏      專輯裡
-年代裏      年代裡
-棺材裏      棺材裡
-嘴裏 嘴裡
-心裏 心裡
-皮裏陽秋   皮裡陽秋
-肚裏 肚裡
-苦裏 苦裡
-裏勾外連   裡勾外連
-裏面 裡面
-這裏 這裡
-點裏 點裡
-中文裏      中文裡
-山洞裏      山洞裡
-世界裏      世界裡
-眼睛裏      眼睛裡
-學裏 學裡
-獄裏 獄裡
-館裏 館裡
-系列裏      系列裡
-村子裏      村子裡
-青霉素      青黴素
-想象 想像
-锎    鉲
-信道 信道
-綫    線
+南朝鲜      南韓
+北朝鲜      北韓
+乔戈里峰   K2
+老挝人民民主共和国    寮人民民主共和國
+老撾人民民主共和國    寮人民民主共和國
+老挝语      寮語
+老撾語      寮語
+浮罗交怡   蘭卡威
+浮羅交怡   蘭卡威
+莱特湾      雷伊泰灣
+萊特灣      雷伊泰灣
+耶加達      雅加達
+吉尔吉斯斯坦     吉爾吉斯
+伊斯兰堡   伊斯蘭瑪巴德
+伊斯蘭堡   伊斯蘭瑪巴德
+卡拉奇      喀拉蚩
+帕塔亚      芭達亞
+埃里温      葉里溫
+埃里溫      葉里溫
+第比利斯   提比里西
+巴士拉      巴斯拉
+塞浦路斯   賽普勒斯
+霍尔木兹   荷姆茲
+霍爾木茲   荷姆茲
+加沙地带   加薩走廊
+加沙地帶   加薩走廊
+赫梯 西臺
+阿联酋      阿聯
+阿聯酋      阿聯
+迪拜 杜拜
+堪培拉      坎培拉
+悉尼 雪梨
+波利尼西亚        玻里尼西亞
+波利尼西亞        玻里尼西亞
+新几内亚   紐幾內亞
+约翰斯顿岛        強斯頓環礁
+巴尔米拉环礁     帕邁拉環礁
+马恩岛      曼島
+萌島 曼島
+伯明翰      伯明罕
+布里斯托尔        布里斯托
+威尔士      威爾斯
+威爾士      威爾斯
+·威尔士    ·威爾士
+·威爾士    ·威爾士
+图卢兹      土魯斯
+圖盧茲      土魯斯
+戛纳 坎城
+卢瓦尔      羅亞爾
+盧瓦爾      羅亞爾
+诺曼底      諾曼第
+卢浮宫      羅浮宮
+埃菲尔      艾菲爾
+荷爾斯泰因        霍爾斯坦
+荷尔斯泰因        霍爾斯坦
+石勒蘇益格        什勒斯維希
+石勒苏益格        什勒斯維希
+漢诺威      漢諾瓦
+汉诺威      漢諾瓦
+格丁根      哥廷根
+杜塞爾多夫        杜塞道夫
+杜塞尔多夫        杜塞道夫
+德累斯顿   德勒斯登
+德累斯頓   德勒斯登
+安哈爾特   安哈特
+安哈尔特   安哈特
+威斯特法倫        威斯伐倫
+威斯特法伦        威斯伐倫
+勃蘭登堡   布蘭登堡
+勃兰登堡   布蘭登堡
+前波美拉尼亞     前波莫瑞
+前波美拉尼亚     前波莫瑞
+不来梅      不萊梅
+不來梅      不萊梅
+柏林墙      柏林圍牆
+柏林牆      柏林圍牆
+巴塞罗那   巴塞隆納
+巴塞隆拿   巴塞隆納
+塞维利亚   塞維亞
+西維爾      塞維亞
+巴伦西亚   瓦倫西亞
+華倫西亞   瓦倫西亞
+佛罗伦萨   佛羅倫斯
+雅尔塔      雅爾達
+雅爾塔      雅爾達
+切尔诺贝利        車諾比
+黑山共和國        蒙特內哥羅共和國
+黑山共和国        蒙特內哥羅共和國
+马斯特里赫特     馬斯垂克
+馬斯特里赫特     馬斯垂克
+贝尔格莱德        貝爾格勒
+貝爾格萊德        貝爾格勒
+薩拉熱窩   塞拉耶佛
+萨拉热窝   塞拉耶佛
+波黑 波赫
+波斯尼亞   波士尼亞
+波斯尼亚   波士尼亞
+比利牛斯   庇里牛斯
+塞黑 塞蒙
+塞爾維亞與蒙特內哥羅 塞爾維亞與蒙特內哥羅
+塞爾維亞和黑山  塞爾維亞與蒙特內哥羅
+塞尔维亚和黑山  塞爾維亞與蒙特內哥羅
+伊斯坦布尔        伊斯坦堡
+伊斯坦布爾        伊斯坦堡
+卢塞恩      琉森
+阿斯旺      亞斯文
+雅穆苏克雷        雅穆索戈
+雅穆蘇克雷        雅穆索戈
+畿內亞      幾內亞
+索马里兰   索馬利蘭
+索馬里蘭   索馬利蘭
+乞力马扎罗        吉力馬札羅
+乞力馬札羅        吉力馬札羅
+厄利垂亚   厄利垂亞
+索马里      索馬利亞
+索馬里      索馬利亞
+扎伊尔      薩伊
+扎伊爾      薩伊
+金沙萨      金夏沙
+金沙薩      金夏沙
+达累斯萨拉姆     三蘭港
+马拉维      馬拉威
+留尼汪      留尼旺
+布隆方丹   布隆泉
+厄瓜多      厄瓜多
+百慕大      百慕達
+圣赫勒拿   聖赫倫那
+马萨诸塞   麻薩諸塞
+馬利蘭      馬里蘭
+里士满      里奇蒙
+荷里活      好萊塢
+荷李活道   荷李活道
+维尔京群岛        維京群島
+維爾京群島        維京群島
+纽黑文      紐哈芬
+特拉華      德拉瓦
+特拉华      德拉瓦
+爱德华州   愛達荷州
+新罕布什尔        新罕布夏
+新奥尔良   紐奧良
+新奧爾良   紐奧良
+得克萨斯   德克薩斯
+弗吉尼亚   維吉尼亞
+康涅狄格   康乃狄克
+密歇根      密西根
+宾西法尼亚        賓夕法尼亞
+威士顿康星        威斯康辛
+伊利诺伊州        伊利諾州
+亚拉巴马   阿拉巴馬
+三藩市      舊金山
+艾奧瓦      愛荷華
+得克薩斯   德克薩斯
+蒙特利尔   蒙特婁
+蒙特利爾   蒙特婁
+滿地可      蒙特婁
+麦克尔      麥可
+迈克尔      麥可
+魯賓斯·巴里切羅        魯本·巴瑞切羅
+雷诺阿      雷諾瓦
+阿里埃勒·沙龙   艾里爾·夏隆
+阿里埃勒·沙龍   艾里爾·夏隆
+铁托 狄托
+鐵托 狄托
+邁凱輪      麥拿輪
+迈凯轮      麥拿輪
+达芬奇      達文西
+达·芬奇    達·文西
+赫鲁晓夫   赫魯雪夫
+赫丘勒·波洛      赫丘勒·白羅
+薛定谔      薛丁格
+葉利欽      葉爾欽
+華里沙      華勒沙
+瓦文萨      華勒沙
+艾森豪威尔        艾森豪
+罗纳德·里根      隆納·雷根
+维特根斯坦        維根斯坦
+约翰逊      詹森
+索尔仁尼琴        索忍尼辛
+索贊尼辛   索忍尼辛
+瓦格纳      華格納
+毕加索      畢卡索
+碧咸 贝克漢
+梅尔·吉布森      梅爾·吉勃遜
+查韦斯      查維茲
+本杰明      班傑明
+本傑明      班傑明
+普密蓬      蒲美蓬
+普利策      普利茲
+施罗德      施洛德
+斯蒂芬      史蒂芬
+斯皮尔伯格        史匹柏
+斯特劳斯   史特勞斯
+斯大林      史達林
+斯坦福      史丹福
+撒切尔      柴契爾
+戴卓爾      柴契爾
+摩根士丹利        摩根史坦利
+拉普兰      拉布蘭
+戴克里先   戴克里先
+戈爾巴喬夫        戈巴契夫
+戈尔巴乔夫        戈巴契夫
+愛德文      愛德溫
+德里达      德希達
+帕特里克   派屈克
+希拉里      希拉蕊
+希拉克      席哈克
+尼克松      尼克森
+威廉姆斯   威廉士
+多普勒      都卜勒
+叶利钦      葉爾欽
+卡斯特罗   卡斯楚
+包豪斯      包浩斯
+勃朗宁      白朗寧
+劳拉 蘿拉
+列奥纳多   李奧納多
+克里斯托弗        克里斯多福
+傅里叶      傅立葉
+伊丽莎白   伊莉莎白
+丘吉尔      邱吉爾
+肖邦 蕭邦
+理查德      理察
+肯尼迪      甘迺迪
+奥巴马      歐巴馬
+奧巴馬      歐巴馬
+概率 機率
+疯牛症      狂牛症
+甲肝 A肝
+甲型肝炎   A型肝炎
+乙肝 B肝
+乙型肝炎   B型肝炎
+丙肝 C肝
+丙型肝炎   C型肝炎
+艾滋 愛滋
+链接 連結
+程序员      程式設計師
+源代码      原始碼
+智能卡      智慧卡
+數據庫      資料庫
+操作系统   作業系統
+人机交互   人機互動
+交互设计   互動設計
+互联网络   網際網路
+互联网      網際網路
+万维网      全球資訊網
+编程语言   程式語言
+晶體管      電晶體
+晶体管      電晶體
+IP地址       IP位址
+IP 地址      IP 位址
+解像度      解析度
+屏幕 螢幕
+荧屏 螢屏
+版权信息   版權資訊
+航天器      太空飛行器
+导弹 飛彈
+宇航服      太空衣
+宇航员      太空人
+太空飛行員        太空人
+独联体      獨立國協
+独立国家联合体  獨立國家國協
+东南亚国家联盟  東南亞國協
+发达国家   已開發國家
+哥特式      哥德式
+落車 下車
+上落客      上下客
+集装箱      貨櫃
+雅马哈      山葉
+避孕套      保險套
+素檀 蘇丹
+珍寶客機   巨無霸客機
+泰坦尼克号        鐵達尼號
+樂行童軍   羅浮童軍
+朝鲜战争   韓戰
+万历朝鲜战争     萬曆朝鮮戰爭
+數碼相機   數位相機
+單鏡反光機        單眼相機
+数码相机   數位相機
+单反相机   單眼相機
+形而上學   形上學
+形而上学   形上學
+当且仅当   若且唯若
+圆珠笔      原子筆
+国际象棋   西洋棋
+可卡因      古柯鹼
+公共交通   公共運輸
+吉尼斯世界纪录  金氏世界紀錄
+健力士世界纪录  金氏世界紀錄
+健力士世界紀錄  金氏世界紀錄
+沙律 沙拉
+忌廉 奶油
+味美思      苦艾酒
+奥斯曼      鄂圖曼
+埃博拉      伊波拉
+克隆人      複製人
+荧光 螢光
+里氏0        芮氏0
+里氏1        芮氏1
+里氏2        芮氏2
+里氏3        芮氏3
+里氏4        芮氏4
+里氏5        芮氏5
+里氏6        芮氏6
+里氏7        芮氏7
+里氏8        芮氏8
+里氏9        芮氏9
+里氏震级   芮氏規模
+里氏规模   芮氏規模
+里氏地震规模     芮氏地震規模
+黎克特制   芮氏
+知识产权   智慧財產權
+知識產權   智慧財產權
+知识产权局        知識產權局
+知識產權局        知識產權署
+知识产权署        知識產權署
+知識產權署        知識產權署
+乒乓球      桌球
+乒乓 桌球
+首席执行官        執行長
+首席财务官        財務長
+首席运营官        營運長
+智能手机   智慧型手機
+智能手機   智慧型手機
+智能电话   智慧型電話
+智能電話   智慧型電話
+便携式      可攜式
+计算机程序        電腦程式
+电脑程序   電腦程式
+应用程序   應用程式
+激光 雷射
+高峰时间   尖峰時間
+高峰时段   尖峰時段
+东盟 東協
+亚细安      東協
+英联邦      大英國協
+英聯邦      大英國協
+共和联邦   大英國協
+阿布扎比   阿布達比
+开曼群岛   蓋曼群島
+開曼群島   蓋曼群島
+凯瑟琳      凱薩琳
+嘉芙蓮      凱薩琳
+门德尔松   孟德爾頌
+孟德爾遜   孟德爾頌
+肖斯塔科维奇     蕭士塔高維奇
+蕭士達高維契     蕭士塔高維奇
+希特拉      希特勒
+自由泳      自由式
+机床 工具機
+機床 工具機
+空气质量   空氣品質    
+空氣質素   空氣品質
+俯卧撑      伏地挺身
+掌上壓      伏地挺身
+数字电视   數位電視
+數碼電視   數位電視
+数字技术   數位技術
+數碼技術   數位技術
+数字信号   數位訊號
+數碼訊號   數位訊號
+移动网络   行動網路
+流動網絡   行動網路
+咪高峰      麥克風
+電單車      機車
+搜索引擎   搜尋引擎
+福尔马林   福馬林
+福爾馬林   福馬林
+海洛英      海洛因
+高清电视   高畫質電視
+桑巴舞      森巴舞
+乔治·奥威尔      喬治·歐威爾
+結他 吉他
+了結他      了結他
+連結他      連結他
+昂山素季   翁山蘇姬
+昂山素姬   翁山蘇姬
+囯际象棋   西洋棋
+國際象棋   西洋棋
+私隱 隱私
+硅藻 硅藻
\ No newline at end of file
index b0efd28..7fc60c7 100644 (file)
@@ -1,8 +1,9 @@
+”    」
+“    「
+‘    『
+’    』
+’s   ’s 
 手塚治虫   手塚治虫
-校仇 校讎
-仇校 讎校
-仇夷 讎夷
-仇問 讎問
 無言不仇   無言不讎
 視如寇仇   視如寇讎
 往日無仇   往日無讎
@@ -26,8 +27,6 @@
 丰韻 丰韻
 丰儀 丰儀
 丰標不凡   丰標不凡
-干細胞      幹細胞
-干熱 乾熱
 二里頭      二里頭
 水里鄉      水里鄉
 蒙胧 朦朧
 拜托 拜託
 委托书      委託書
 委托 委託
-挽詞 輓詞
-挽聯 輓聯
-挽詩 輓詩
 於夫罗      於夫羅
 府干預      府干預
 府干擾      府干擾
-分布圖      分布圖
 頁面 頁面
 面條目      面條目
 黃鈺筑      黃鈺筑
-仿佛 彷彿
-凶殘 兇殘
-凶殺 兇殺
-緝凶 緝兇
-行凶後      行兇後
-買凶 買兇
-逞凶鬥狠   逞兇鬥狠
-合著者      合著者
 答复 答覆
 反复 反覆
+候复 候覆
+待复 待覆
+批复 批覆
+复信 覆信
+复核 覆核
+的回复      的回覆
+回复中      回覆中
+回复说      回覆說
+回复你      回覆你
+有回复      有回覆
+回复邮件   回覆郵件
+回复意见   回覆意見
+回复帖子   回覆帖子
+得到回复   得到回覆
+回复:      回覆:
 索馬里      索馬里
 洗练 洗鍊
 朝乾夕惕   朝乾夕惕
 不干預      不干預
 不干擾      不干擾
 不干牠      不干牠
-矽谷 矽谷
 范文瀾      范文瀾
-發表 發表
 機械系      機械系
 頂多 頂多
 馬占山      馬占山
-叱咤樂壇   叱咤樂壇
 闫怀礼      閆懷禮
-变髒 變髒
 薴烯 薴烯
 后豐 后豐
 于謙 于謙
 詩云 詩云
-鄭凱云      鄭凱云
 云為 云為
 古書云      古書云
 古語云      古語云
 經有云      經有云
 語有云      語有云
-显著标志   顯著標志
-占領 佔領
 采納 採納
 風采 風采
 于樂 于樂
 于鳳桐      于鳳桐
 于默奧      于默奧
 于爾岑      于爾岑
-于默奧      于默奧
 于貝爾      于貝爾
 于爾根      于爾根
 于雙戈      于雙戈
 涂澤民      涂澤民
 涂長望      涂長望
 涂敏恆      涂敏恆
-台历 枱曆
 艷后 艷后
 廢后 廢后
 后髮座      后髮座
 蟻后 蟻后
 馬格里布   馬格里布
 佳里鎮      佳里鎮
-埔裡社撫墾局     埔裏社撫墾局
-埔裏社撫墾局     埔裏社撫墾局
 有只採      有只採
-任何表達   任何表達
 會干擾      會干擾
 党項 党項
 余三勝      余三勝
 楊雅筑      楊雅筑
 杰威爾音樂        杰威爾音樂
 尸羅精舍   尸羅精舍
-索馬里      索馬里
 騰格里      騰格里
 村里長      村里長
 進制 進制
 黎吉雲      黎吉雲
 于飛島      于飛島
 鄉愿 鄉愿
+愿樸 愿樸
+謹愿 謹愿
 奇迹 奇蹟
-候复 候覆
-待复 待覆
-批复 批覆
 划槳 划槳
+折子戲      折子戲
+佣錢 佣錢
+佣鈿 佣鈿
+阁府 閤府
+太阁 太閤
+昆仑 崑崙
+昆山 崑山
+昆剧 崑劇
+昆曲 崑曲
+昆腔 崑腔
+昆苏 崑蘇
+昆调 崑調
+昆冈 崑岡
+西昆 西崑
+苏昆 蘇崑
+苏醒 甦醒
+复苏 復甦
+苹果 蘋果
+苹果干      蘋果乾
+后庄 后庄
+龜山庄      龜山庄
+寶山庄      寶山庄
+員山庄      員山庄
+昵称 暱稱
+單于 單于
+鮮于樞      鮮于樞
+鳳凰于飛   鳳凰于飛
+賦范 賦范
+陳士杰      陳士杰
+林杰樑      林杰樑
+茅于軾      茅于軾
+陳有后      陳有后
+天神之后   天神之后
+豔后 豔后
+后綜 后綜
+壽天里      壽天里
+貴子里      貴子里
+東湖里      東湖里
+鹿場里      鹿場里
+水里高級商工     水里高級商工
+水里鳳林   水里鳳林
+水里濁水溪        水里濁水溪
+划不來      划不來
+划來划去   划來划去
+划動 划動
+划得來      划得來
+划著 划著
+划進 划進
+划過 划過
+划龍舟      划龍舟
+只影響      只影響
+么弟 么弟
+六么 六么
+么雞 么雞
+義联 義联
+杠轂 杠轂
+局促 侷促
+開山辟谷   開山辟谷
+戲院里      戲院里
+惨淡 慘澹
+恶心 噁心
+证谏 証諫
+项链 項鍊
+手链 手鍊
+金链 金鍊
+链表 鍊表
+熏心 薰心
+熏习 薰習
+熏陶 薰陶
+熏沐 薰沐
+熏染 薰染
+熏香 薰香
+熏风 薰風
+雨蒙蒙      雨濛濛
+夹衣 袷衣
+夹裙 袷裙
+局蹐 跼蹐
+拳局 拳跼
+踡局 踡跼
+局躅 跼躅
+蹒局 蹣跼
+厘清 釐清
+厘订 釐訂
+厘革 釐革
+厘改 釐改
+厘整 釐整
+厘正 釐正
+毫厘 毫釐
+厘毫 釐毫
+剖厘 剖釐
+一厘一毫   一釐一毫
+升州 昇州
+升平 昇平
+升阳 昇陽
+陈升 陳昇
+南宮适      南宮适
+舊庄 舊庄
+拿破仑      拿破崙
+冗余 冗餘
+课余 課餘
+节余 節餘
+盈余 盈餘
+病余 病餘
+余地 餘地
+余力 餘力
+余子 餘子
+余事 餘事
+扶余 扶餘
+腐余 腐餘
+富余 富餘
+之余 之餘
+余泽 餘澤
+流风余俗   流風餘俗
+流风余韵   流風餘韻
+淋余土      淋餘土
+余一 餘一
+余二 餘二
+余三 餘三
+余四 餘四
+余五 餘五
+余六 餘六
+余七 餘七
+余八 餘八
+余九 餘九
+余十 餘十
+零余 零餘
+〇余 〇餘
+余零 餘零
+余〇 餘〇
+余1   餘1
+余2   餘2
+余3   餘3
+余4   餘4
+余5   餘5
+余6   餘6
+余7   餘7
+余8   餘8
+余9   餘9
+余0   餘0
+余数 餘數
+其余 其餘
+尸居余气   尸居餘氣
+剩余 賸餘
+余孽 餘孽
+残余 殘餘
+业余 業餘
+余割 餘割
+余款 餘款
+余角 餘角
+余切 餘切
+余霞 餘霞
+余下 餘下
+余弦 餘弦
+余震 餘震
+余貾 餘貾
+余额 餘額
+余人 餘人
+余俗 餘俗
+余倍 餘倍
+同余 同餘
+空余 空餘
+余量 餘量
+余年 餘年
+余留 餘留
+余项 餘項
+余式 餘式
+余部 餘部
+编余 編餘
+余墨 餘墨
+唾余 唾餘
+余韵 餘韻
+归余 歸餘
+公余 公餘
+宽余 寬餘
+余粮 餘糧
+余庆 餘慶
+余殃 餘殃
+余烬 餘燼
+劫余 劫餘
+结余 結餘
+烬余 燼餘
+净余 淨餘
+馂余 餕餘
+余晖 餘暉
+余辉 餘輝
+羡余 羨餘
+余悸 餘悸
+心余 心餘
+刑余 刑餘
+绪余 緒餘
+血余 血餘
+朱庆余      朱慶餘
+诸余 諸餘
+余论 餘論
+茶余 茶餘
+厨余 廚餘
+余裕 餘裕
+余气 餘氣
+诗余 詩餘
+词余 詞餘
+余僇 餘僇
+余辜 餘辜
+余责 餘責
+余罪 餘罪
+无余 無餘
+耳余 耳餘
+余烈 餘烈
+余思 餘思
+盐余 鹽餘
+嬴余 嬴餘
+赢余 贏餘
+王余鱼      王餘魚
+纡余 紆餘
+余波 餘波
+余杯 餘杯
+余步 餘步
+余妙 餘妙
+余音 餘音
+余声 餘聲
+余明 餘明
+余风 餘風
+余党 餘黨
+余毒 餘毒
+余桃 餘桃
+余桶 餘桶
+余利 餘利
+余沥 餘瀝
+余膏 餘膏
+余光 餘光
+余杭 餘杭
+余窍 餘竅
+余缺 餘缺
+余暇 餘暇
+余闲 餘閒
+余羡 餘羨
+余响 餘響
+余兴 餘興
+余蓄 餘蓄
+余绪 餘緒
+余珍 餘珍
+余众 餘眾
+余酲 餘酲
+余喘 餘喘
+余食 餘食
+余热 餘熱
+余刃 餘刃
+余闰 餘閏
+余存 餘存
+余业 餘業
+余姚 餘姚
+余荫 餘蔭
+余映 餘映
+余外 餘外
+余威 餘威
+余味 餘味
+余温 餘溫
+余勇 餘勇
+多余 多餘
+剩余 剩餘
+余生 餘生
+余欢 餘歡
+有余 有餘
+一余 一餘
+二余 二餘
+两余 兩餘
+三余 三餘
+四余 四餘
+五余 五餘
+六余 六餘
+七余 七餘
+八余 八餘
+九余 九餘
+十余 十餘
+百余 百餘
+千余 千餘
+万余 萬餘
+亿余 億餘
+兆余 兆餘
+0余   0餘
+1余   1餘
+2余   2餘
+3余   3餘
+4余   4餘
+5余   5餘
+6余   6餘
+7余   7餘
+8余   8餘
+9余   9餘
+于余曲折   于餘曲折
+尸居余气   尸居餘氣
+余光生      余光生
+余光中      余光中
+余思敏      余思敏
+余威德      余威德
+余子明      余子明
+余三胜      余三勝
+咨询 諮詢
+酒曲 酒麴
+曲霉 麴黴
+曲秀才      麴秀才
+曲尘 麴塵
+曲櫱 麴櫱
+黄曲毒素   黃麴毒素
+曲道士      麴道士
+曲钱 麴錢
+曲车 麴車
+鼠曲草      鼠麴草
+大曲酒      大麴酒
+泸州大曲   瀘州大麯 #商標名
+洋河大曲   洋河大麴
+双沟大曲   雙溝大麯 #商標名
\ No newline at end of file
index 747a240..f76a949 100644 (file)
+U+0347A㑺|U+04FCA俊|
+U+034BA㒺|U+07F54罔|
+U+034C2㓂|U+05BC7寇|
+U+03541㕁|U+05374却|
+U+03551㕑|U+053A8厨|
+U+03558㕘|U+053C2参|
+U+03565㕥|U+04EE5以|
+U+0362D㘭|U+05773坳|
+U+0375B㝛|U+05BBF宿|
+U+03760㝠|U+051A5冥|
+U+03800㠀|U+05C9B岛|
+U+0382F㠯|U+04EE5以|
+U+03836㠶|U+05E06帆|
+U+0384C㡌|U+05E3D帽|
+U+03898㢘|U+05EC9廉|
+U+03919㤙|U+06069恩|
+U+03966㥦|U+060EC惬|
+U+0396B㥫|U+060C7惇|
+U+039F1㧱|U+062FF拿|
+U+03A17㨗|U+06377捷|
+U+03A2A㨪|U+06643晃|
+U+03A3F㨿|U+0636E据|
+U+03A57㩗|U+0643A携|
+U+03A66㩦|U+0643A携|
+U+03A9A㪚|U+06563散|
+U+03A9F㪟|U+06566敦|
+U+03B09㬉|U+06696暖|
+U+03B2A㬪|U+053E0叠|
+U+03BED㯭|U+06A79橹|
+U+03C43㱃|U+0996E饮|
+U+03CD2㳒|U+06CD5法|
+U+03D31㴱|U+06DF1深|
+U+03F1D㼝|U+07897碗|
+U+03F5E㽞|U+07559留|
+U+03FDC㿜|U+0762A瘪|
+U+04230䈰|U+07B72筲|
+U+04280䊀|U+07CCA糊|
+U+045EC䗬|U+08702蜂|
+U+0460F䘏|U+06064恤|
+U+04611䘑|U+08109脉|
+U+0461A䘚|U+05352卒|
+U+046D0䛐|U+08BCD词|
+U+046E1䛡|U+08BDD话|
+U+04754䝔|U+0737E獾|
+U+04800䠀|U+08E5A蹚|
+U+04836䠶|U+05C04射|
+U+04965䥥|U+09570镰|
+U+04B03䬃|U+098D2飒|
+U+04B7E䭾|U+09A6E驮|
+U+04C1F䰟|U+09B42魂|
+U+04CD8䳘|U+09E45鹅|
+U+04D8A䶊|U+08844衄|
+U+04E23丣|U+0536F卯|
+U+04E57乗|U+04E58乘|
+U+04E79乹|U+05E72干|
+U+04E81亁|U+05E72干|
 U+04E99亙|U+04E98亘|
-U+04F48佈|U+05E03布|
+U+04E9D亝|U+0658B斋|
+U+04EB1亱|U+0591C夜|
+U+04EB7亷|U+05EC9廉|
+U+04EBE亾|U+04EA1亡|
 U+04F48佈|U+05E03布|
 U+04F54佔|U+05360占|
+U+04FB7侷|U+05C40局|
+U+04FFB俻|U+05907备|
+U+05010倐|U+0500F倏|
 U+05016倖|U+05E78幸|
+U+05023倣|U+04EFF仿|
+U+05038倸|U+0776C睬|
+U+0509A傚|U+06548效|
 U+050A2傢|U+05BB6家|
+U+050CA僊|U+04ED9仙|
+U+050CD働|U+052A8动|
 U+050F1僱|U+096C7雇|
+U+0510C儌|U+04FA5侥|
 U+05138儸|U+03469㑩|U+07F57罗|
 U+05147兇|U+051F6凶|
+U+0514E兎|U+05154兔|
+U+05160兠|U+0515C兜|
+U+05184冄|U+05189冉|
+U+05190冐|U+05192冒|
+U+05191冑|U+080C4胄|
+U+051BA冺|U+06CEF泯|
+U+051E2凢|U+051E1凡|
+U+051F4凴|U+051ED凭|
+U+05226刦|U+052AB劫|
+U+05227刧|U+052AB劫|
+U+0523C刼|U+052AB劫|
+U+05249剉|U+09509锉|
+U+0524F剏|U+0521B创|
+U+05259剙|U+0521B创|
+U+05273剳|U+0672D札|
 U+05277剷|U+094F2铲|
+U+05279剹|U+0622E戮|
+U+05284劄|U+0672D札|
+U+05292劒|U+05251剑|
+U+052B9効|U+06548效|
+U+052C5勅|U+06555敕|
+U+052CC勌|U+05026倦|
+U+052D1勑|U+06555敕|
+U+052E6勦|U+0527F剿|
 U+052F3勳|U+052CB勋|
+U+0531F匟|U+07095炕|
+U+05332匲|U+05941奁|
+U+05333匳|U+05941奁|
+U+05379卹|U+06064恤|
 U+0537D卽|U+05373即|
+U+05380厀|U+0819D膝|
+U+053A0厠|U+05395厕|
 U+053A4厤|U+05386历|
+U+053B0厰|U+05382厂|
+U+0541A吚|U+054BF咿|
+U+0544C呌|U+053EB叫|
+U+0546A呪|U+05492咒|
+U+0548A咊|U+0548C和|
+U+054F6哶|U+054A9咩|
+U+05515唕|U+05523唣|
+U+05518唘|U+0542F启|
+U+05538唸|U+05FF5念|
+U+0554E啎|U+05FE4忤|
+U+05551啑|U+0558B喋|
+U+05553啓|U+0542F启|
+U+05557啗|U+05556啖|
+U+05563啣|U+08854衔|
 U+055AB喫|U+05403吃|
-U+05641噁|U+06076恶|
+U+055C1嗁|U+0557C啼|
+U+05605嘅|U+06168慨|
+U+05611嘑|U+0547C呼|
+U+05620嘠|U+0560E嘎|
+U+05637嘷|U+055E5嗥|
+U+05649噉|U+05556啖|
 U+05690嚐|U+05C1D尝|
 U+056A5嚥|U+054BD咽|
 U+056AE嚮|U+05411向|
 U+056CC囌|U+082CF苏|
+U+056D3囓|U+0556E啮|
+U+056D9囙|U+056E0因|
+U+05705圅|U+051FD函|
+U+0577F坿|U+09644附|
+U+0579C垜|U+0579B垛|
 U+0585A塚|U+051A2冢|
+U+0585F塟|U+0846C葬|
+U+05872塲|U+0573A场|
+U+05896墖|U+05854塔|
 U+058B0墰|U+0575B坛|
+U+058BB墻|U+05899墙|
+U+058CE壎|U+057D9埙|
 U+058DC壜|U+0575B坛|
-U+05925夥|U+04F19伙|
+U+058FB壻|U+05A7F婿|
+U+05918夘|U+0536F卯|
+U+05925夥|U+04F19伙|U+05925夥|
+U+0596C奬|U+05956奖|
+U+059AC妬|U+05992妒|
+U+059B3妳|U+04F60你|
+U+059B7妷|U+04F84侄|
+U+059C9姉|U+059CA姊|
+U+059D9姙|U+0598A妊|
+U+059EA姪|U+04F84侄|
+U+059F8姸|U+0598D妍|
+U+05A63婣|U+059FB姻|
+U+05A6C婬|U+06DEB淫|
+U+05A8D媍|U+05987妇|
+U+05ABF媿|U+06127愧|
+U+05ACB嫋|U+08885袅|
+U+05AF0嫰|U+05AE9嫩|
+U+05AFA嫺|U+05A34娴|
+U+05B00嬀|U+059AB妫|
+U+05B1D嬝|U+08885袅|
+U+05B2D嬭|U+05976奶|
+U+05B3E嬾|U+061D2懒|
+U+05B43孃|U+05A18娘|
+U+05B7C孼|U+05B7D孽|
+U+05B82宂|U+05197冗|
 U+05BC0寀|U+091C7采|
-U+05D11崑|U+06606昆|
-U+05D19崙|U+04ED1仑|
+U+05BC3寃|U+051A4冤|
+U+05BD1寑|U+05BDD寝|
+U+05BF3寳|U+05B9D宝|
+U+05C05尅|U+0514B克|
+U+05C12尒|U+05C14尔|
+U+05C19尙|U+05C1A尚|
+U+05C1F尟|U+09C9C鲜|
+U+05C20尠|U+09C9C鲜|
+U+05C5B屛|U+05C4F屏|
+U+05C6D屭|U+05C43屃|
+U+05C85岅|U+05742坂|
+U+05CDD峝|U+05CD2峒|
 U+05D57嵗|U+05C81岁|
+U+05D83嶃|U+05D2D崭|
 U+05DBD嶽|U+05CB3岳|
 U+05DD6巖|U+05CA9岩|
-U+05DF9巹|U+0537A卺|
+U+05DD7巗|U+05CA9岩|
+U+05DF5巵|U+0536E卮|
+U+05E00帀|U+0531D匝|
+U+05E0B帋|U+07EB8纸|
+U+05E2C帬|U+088D9裙|
+U+05E47幇|U+05E2E帮|
+U+05E51幑|U+05FBD徽|
+U+05E59幙|U+05E55幕|
+U+05E5A幚|U+05E2E帮|
+U+05EBB庻|U+05EB6庶|
+U+05EBD庽|U+05BD3寓|
+U+05ED0廐|U+053A9厩|
+U+05ED5廕|U+0836B荫|
+U+05EF5廵|U+05DE1巡|
+U+05EF9廹|U+08FEB迫|
+U+05EFB廻|U+056DE回|
+U+05EFC廼|U+04E43乃|
 U+05F14弔|U+0540A吊|
 U+05F46彆|U+0522B别|
+U+05F6B彫|U+096D5雕|
+U+05F83徃|U+05F80往|
+U+05FA7徧|U+0904D遍|
+U+06031怱|U+05306匆|
+U+06033怳|U+0604D恍|
+U+06060恠|U+0602A怪|
+U+06061恡|U+0541D吝|
+U+060A4悤|U+05306匆|
+U+060BD悽|U+051C4凄|
+U+060CF惏|U+05A6A婪|
+U+060E5惥|U+0607F恿|
+U+060F7惷|U+08822蠢|
+U+0613D愽|U+0535A博|
+U+06159慙|U+060ED惭|
+U+06164慤|U+060AB悫|
+U+06174慴|U+06151慑|
 U+0617C慼|U+0621A戚|
+U+0617D慽|U+0621A戚|
 U+0617E慾|U+06B32欲|
+U+06187憇|U+061A9憩|
 U+061DE懞|U+08499蒙|
+U+0621E戞|U+0621B戛|
+U+0622F戯|U+0620F戏|
+U+06239戹|U+05384厄|
+U+0625E扞|U+0634D捍|
+U+0629D抝|U+062D7拗|
 U+062DA拚|U+062FC拼|
 U+06331挱|U+06332挲|
-U+06371捱|U+06328挨|
+U+06335挵|U+05F04弄|
+U+06344捄|U+06551救|
 U+06372捲|U+05377卷|
+U+063BD掽|U+078B0碰|
+U+063D1揑|U+0634F捏|
+U+063EB揫|U+063EA揪|
+U+063F7揷|U+063D2插|
+U+063F9揹|U+080CC背|
+U+06406搆|U+06784构|
+U+06407搇|U+063FF揿|
+U+06409搉|U+069B7榷|
+U+06424搤|U+0627C扼|
+U+06425搥|U+06376捶|
+U+06428搨|U+062D3拓|
+U+0642F搯|U+0638F掏|
+U+0643E搾|U+069A8榨|
+U+06443摃|U+0625B扛|
 U+0647A摺|U+06298折|
+U+064A1撡|U+064CD操|
+U+064A6撦|U+0626F扯|
+U+064D5擕|U+0643A携|
+U+064E7擧|U+04E3E举|
+U+06529攩|U+06321挡|
+U+06537攷|U+08003考|
+U+06542敂|U+053E9叩|
+U+0654D敍|U+053D9叙|
+U+0657A敺|U+09A71驱|
 U+065C2旂|U+065D7旗|
 U+065E3旣|U+065E2既|
-U+06607昇|U+05347升|
+U+065E4旤|U+07978祸|
+U+065F9旹|U+065F6时|
+U+065FE旾|U+06625春|
+U+06607昇|U+06607昇|U+05347升|
+U+0662C昬|U+0660F昏|
+U+066B1暱|U+06635昵|
+U+066E1曡|U+053E0叠|
+U+0671E朞|U+0671F期|
+U+06722朢|U+0671B望|
 U+0672E朮|U+0672F术|
+U+06736朶|U+06735朵|
+U+06792枒|U+04E2B桠|
+U+067B1枱|U+053F0台|
+U+067FA柺|U+062D0拐|
+U+067FB査|U+067E5查|
+U+06801栁|U+067F3柳|
+U+0681E栞|U+0520A刊|
+U+06822栢|U+067CF柏|
+U+06830栰|U+07B4F筏|
+U+06852桒|U+06851桑|
+U+0686E桮|U+0676F杯|
+U+0687A桺|U+067F3柳|
 U+068CA棊|U+068CB棋|
+U+06900椀|U+07897碗|
+U+06909椉|U+04E58乘|
+U+06917椗|U+07887碇|
+U+06936椶|U+068D5棕|
+U+06937椷|U+07F04缄|
+U+0693E椾|U+07B3A笺|
+U+06965楥|U+06966楦|
 U+069A6榦|U+05E72干|
 U+069D3槓|U+06760杠|
+U+069D5槕|U+0684C桌|
 U+06A11樑|U+06881梁|
+U+06A5C橜|U+06A5B橛|
+U+06AC8櫈|U+051F3凳|
 U+06B05欅|U+06989榉|
+U+06B1D欝|U+090C1郁|
+U+06B35欵|U+06B3E款|
 U+06B4E歎|U+053F9叹|
+U+06B5B歛|U+0655B敛|
+U+06B74歴|U+05386历|
+U+06B80殀|U+0592D夭|
 U+06BAD殭|U+050F5僵|
+U+06BBB殻|U+058F3壳|
+U+06BE7毧|U+07ED2绒|
+U+06BEC毬|U+07403球|
+U+06C0A氊|U+06BE1毡|
+U+06C37氷|U+051B0冰|
 U+06C59汙|U+06C61污|
+U+06C5A汚|U+06C61污|
+U+06C88瀋|U+06C88沈|U+0700B渖|
 U+06CDD泝|U+06EAF溯|
 U+06D29洩|U+06CC4泄|
+U+06D96涖|U+08385莅|
 U+06DD2淒|U+051C4凄|
+U+06DDB淛|U+06D59浙|
 U+06DE8淨|U+051C0净|
 U+06DE9淩|U+051CC凌|
 U+06E67湧|U+06D8C涌|
+U+06E7B湻|U+06DF3淳|
+U+06E7C湼|U+06D85涅|
+U+06EBC溼|U+06E7F湿|
 U+06ED9滙|U+06C47汇|
+U+06EDB滛|U+06DEB淫|
+U+06EF7滷|U+05364卤|
+U+06F44潄|U+06F31漱|
+U+06F59潙|U+06CA9沩|
+U+06F81澁|U+06DA9涩|
 U+06F90澐|U+06C84沄|
 U+06FBE澾|U+03CE0㳠|
+U+06FC7濇|U+06DA9涩|
 U+06FDB濛|U+06FDB濛|U+08499蒙|
+U+06FF6濶|U+09614阔|
 U+07030瀰|U+05F25弥|
+U+0704B灋|U+06CD5法|
+U+070D6烖|U+0707E灾|
+U+07151煑|U+0716E煮|
+U+07157煗|U+06696暖|
+U+07188熈|U+07199熙|
+U+071C4燄|U+07130焰|
+U+071C9燉|U+07096炖|U+071C9燉|
 U+071EC燬|U+06BC1毁|
+U+071FB燻|U+0718F熏|
+U+07217爗|U+070E8烨|
 U+07232爲|U+04E3A为|
+U+07240牀|U+05E8A床|
+U+0724B牋|U+07B3A笺|
+U+0724E牎|U+07A97窗|
+U+07250牐|U+095F8闸|
+U+07253牓|U+0699C榜|
+U+07255牕|U+07A97窗|
+U+07260牠|U+05B83它|
+U+07274牴|U+062B5抵|
+U+072E5狥|U+05F87徇|
+U+07302猂|U+0608D悍|
+U+07328猨|U+0733F猿|
 U+07343獃|U+05446呆|
+U+07358獘|U+06BD9毙|
+U+07367獧|U+072F7狷|
+U+07385玅|U+05999妙|
+U+07416琖|U+076CF盏|
+U+07431琱|U+096D5雕|
+U+07447瑇|U+073B3玳|
+U+0746F瑯|U+07405琅|
+U+074A2璢|U+07460瑠|
+U+0750E甎|U+07816砖|
 U+07515甕|U+074EE瓮|
-U+07526甦|U+082CF苏|
-U+0752F甯|U+05B81宁|
+U+07516甖|U+07F42罂|
+U+0751E甞|U+05C1D尝|
+U+07523産|U+04EA7产|
+U+07526甦|U+07526甦|U+082CF苏|
+U+0752F甯|U+0752F甯|U+05B81宁|
+U+07542畂|U+04EA9亩|
+U+07546畆|U+04EA9亩|
+U+07567畧|U+07565略|
 U+0756B畫|U+0753B画|U+05212划|
+U+0756E畮|U+04EA9亩|
+U+07571畱|U+07559留|
 U+07575畵|U+0753B画|U+05212划|
+U+0758E疎|U+0758F疏|
+U+07598疘|U+0809B肛|
+U+075BF疿|U+075F1痱|
+U+075D0痐|U+086D4蛔|
 U+075E0痠|U+09178酸|
+U+075FA痺|U+075F9痹|
+U+07609瘉|U+06108愈|
+U+07616瘖|U+05591喑|
+U+0763B瘻|U+07618瘘|
+U+07644癄|U+06194憔|
+U+07645癅|U+07624瘤|
+U+07648癈|U+05E9F废|
 U+07652癒|U+06108愈|
 U+07661癡|U+075F4痴|
+U+07681皁|U+07682皂|
+U+07690皐|U+0768B皋|
+U+0769C皜|U+07693皓|
+U+076B7皷|U+09F13鼓|
 U+076C3盃|U+0676F杯|
+U+076C7盇|U+076CD盍|
+U+076CC盌|U+07897碗|
+U+0770E眎|U+089C6视|
 U+0771E眞|U+0771F真|
+U+07721眡|U+089C6视|
+U+07760睠|U+07737眷|
+U+0776A睪|U+0777E睾|
+U+07787瞇|U+0772F眯|
+U+07796瞖|U+07FF3翳|
 U+077AD瞭|U+04E86了|
-U+077C7矇|U+08499蒙|
+U+077C1矁|U+07785瞅|
+U+077C7矇|U+08499蒙|U+077C7矇|
+U+077D9矙|U+077B0瞰|
+U+07832砲|U+070AE炮|
 U+07843硃|U+06731朱|
-U+07895碕|U+057FC埼|
+U+07881碁|U+068CB棋|
+U+078AA碪|U+07827砧|
+U+078DF磟|U+0788C碌|
+U+07906礆|U+078B1碱|
+U+0792E礮|U+070AE炮|
+U+07955祕|U+079D8秘|
 U+07958祘|U+07B97算|
+U+079CA秊|U+05E74年|
+U+079CC秌|U+079CB秋|
+U+079D6秖|U+053EA只|
+U+07A09稉|U+07CB3粳|
 U+07A1C稜|U+068F1棱|
+U+07A2C稬|U+07CEF糯|
+U+07A2D稭|U+079F8秸|
+U+07A3E稾|U+07A3F稿|
+U+07A64穤|U+07CEF糯|
+U+07A68穨|U+09893颓|
+U+07A7D穽|U+09631阱|
+U+07A93窓|U+07A97窗|
+U+07AB0窰|U+07A91窑|
+U+07ABB窻|U+07A97窗|
+U+07AC8竈|U+07076灶|
+U+07ADA竚|U+04F2B伫|
+U+07ADD竝|U+05E76并|
+U+07AE2竢|U+04FDF俟|
+U+07AEA竪|U+07AD6竖|
+U+07B5E筞|U+07B56策|
+U+07B69筩|U+07B52筒|
+U+07B6F筯|U+07BB8箸| 
 U+07B87箇|U+04E2A个|
+U+07B92箒|U+05E1A帚|
+U+07BA0箠|U+068F0棰|
+U+07BDB篛|U+07BAC箬|
 U+07C11簑|U+084D1蓑|
+U+07C12簒|U+07BE1篡|
+U+07C2E簮|U+07C2A簪|
+U+07C37簷|U+06A90檐|
+U+07C50籐|U+085E4藤|
 U+07C64籤|U+07B7E签|
 U+07C72籲|U+05401吁|
+U+07C83粃|U+079D5秕|
+U+07CA7粧|U+05986妆|
+U+07CC9糉|U+07CBD粽|
 U+07CF0糰|U+056E2团|
+U+07D25紥|U+0624E扎|
 U+07D2E紮|U+0624E扎|
+U+07D43絃|U+05F26弦|
+U+07D4F絏|U+07EC1绁|
+U+07D89綉|U+07EE3绣|
+U+07D91綑|U+06346捆|
 U+07DAB綫|U+07EBF线|
 U+07DB5綵|U+05F69彩|U+0433D䌽|
+U+07DD0緐|U+07E41繁|
+U+07DD1緑|U+07EFF绿|
+U+07DD4緔|U+07EF1绱|
+U+07DDA線|U+07EBF线|U+07F10缐|
+U+07DDC緜|U+07EF5绵|
+U+07DE5緥|U+08913褓|
+U+07DFC緼|U+07F0A缊|
+U+07E27縧|U+07EE6绦|
 U+07E34縴|U+07EA4纤|
 U+07E50繐|U+07A57穗|
+U+07E56繖|U+04F1E伞|
+U+07E59繙|U+07FFB翻|
+U+07E66繦|U+08941襁|
+U+07E6E繮|U+07F30缰|
 U+07E94纔|U+0624D才|
+U+07F47罇|U+06A3D樽|
+U+07F4B罋|U+074EE瓮|
 U+07F4E罎|U+0575B坛|
+U+07F78罸|U+07F5A罚|
+U+07F97羗|U+07F8C羌|
+U+07FA2羢|U+07ED2绒|
+U+07FA3羣|U+07FA4群|
 U+07FA8羨|U+07FA1羡|
+U+07FB6羶|U+081BB膻|
+U+07FC4翄|U+07FC5翅|
+U+07FEB翫|U+073A9玩|
+U+07FF6翶|U+07FF1翱|
+U+08021耡|U+09504锄|
+U+0808E肎|U+080AF肯|
+U+08090肐|U+080F3胳|
+U+080A7肧|U+080DA胚|
+U+080F7胷|U+080F8胸|
+U+08103脃|U+08106脆|
+U+08107脇|U+080C1胁|
+U+08117脗|U+0543B吻|
 U+08123脣|U+05507唇|
+U+08141腁|U+080FC胼|
+U+08193膓|U+080A0肠|
+U+081C8臈|U+0814A腊|
+U+081CB臋|U+081C0臀|
+U+081D5臕|U+08198膘|
+U+081D9臙|U+080ED胭|
+U+081DD臝|U+088F8裸|
 U+081E5臥|U+05367卧|
+U+081EF臯|U+0768B皋|
+U+08216舖|U+094FA铺|
 U+08218舘|U+09986馆|
-U+083F4菴|U+05EB5庵|
+U+08229舩|U+08239船|
+U+08262艢|U+06A2F樯|
+U+08263艣|U+06A79橹|
+U+0826A艪|U+06A79橹|
+U+082B2芲|U+082B1花|
+U+08318茘|U+08354荔|
+U+08373荳|U+08C46豆|
+U+083F8菸|U+070DF烟|
+U+08432萲|U+08431萱|
 U+08457著|U+08457著|U+07740着|
+U+08460葠|U+053C2参|
+U+0846F葯|U+0836F药|
+U+08493蒓|U+083BC莼|
+U+084C6蓆|U+05E2D席|
+U+084E1蓡|U+053C2参|
+U+084F4蓴|U+083BC莼|
+U+08514蔔|U+0535C卜|
+U+08515蔕|U+08482蒂|
 U+08518蔘|U+053C2参|
+U+0855A蕚|U+0843C萼|
+U+0857F蕿|U+08431萱|
 U+08591薑|U+059DC姜|
 U+085C9藉|U+085C9藉|U+0501F借|
+U+085F4藴|U+08574蕴|
+U+085F7藷|U+085AF薯|
+U+085FC藼|U+08431萱|
+U+08610蘐|U+08431萱|
+U+08613蘓|U+082CF苏|
+U+08624蘤|U+082B1花|
+U+08698蚘|U+086D4蛔|
+U+086D5蛕|U+086D4蛔|
+U+0870B蜋|U+08782螂|
+U+08716蜖|U+086D4蛔|
+U+08728蜨|U+08776蝶|
+U+08768蝨|U+08671虱|
+U+0876F蝯|U+0733F猿|
+U+08771蝱|U+0867B虻|
+U+0878E螎|U+0878D融|
+U+087A1螡|U+0868A蚊|
+U+087C1蟁|U+0868A蚊|
+U+087C7蟇|U+087C6蟆|
 U+0880D蠍|U+0874E蝎|
+U+0880F蠏|U+087F9蟹|
+U+08812蠒|U+08327茧|
+U+08814蠔|U+0869D蚝|
+U+0882D蠭|U+08702蜂|
+U+08842衂|U+08844衄|
+U+08846衆|U+04F17众|
+U+08847衇|U+08109脉|
 U+0884A衊|U+08511蔑|
+U+08856衖|U+05F04弄|
+U+0885E衞|U+0536B卫|
+U+0887A衺|U+090AA邪|
+U+0889F袟|U+05E19帙|
+U+088B5袵|U+0887D衽|
+U+088CC裌|U+088B7袷|
 U+088CF裏|U+091CC里|
-U+08946襆|U+05E5E幞|
+U+088E0裠|U+088D9裙|
+U+0892D褭|U+08885袅|
+U+08943襃|U+08912褒|
+U+0894D襍|U+06742杂|
 U+08986覆|U+08986覆|U+0590D复|
+U+08987覇|U+09738霸|
+U+08988覈|U+06838核|
+U+0898A覊|U+07F81羁|
+U+08994覔|U+089C5觅|
+U+089A9覩|U+07779睹|
+U+089D4觔|U+065A4斤|
+U+089DD觝|U+062B5抵|
 U+08A17託|U+06258托|U+08BAC讬|
-U+08AEE諮|U+054A8咨|U+08C18谘|
+U+08A3C証|U+08BC1证|
+U+08A76詶|U+0916C酬|
+U+08A96誖|U+06096悖|
+U+08AAC説|U+08BF4说|
+U+08AEE諮|U+08C18谘|U+054A8咨|
+U+08B0C謌|U+06B4C歌|
+U+08B21謡|U+08C23谣|
+U+08B2D謭|U+08C2B谫|
+U+08B41譁|U+054D7哗|
+U+08B46譆|U+0563B嘻|
+U+08B4C譌|U+08BB9讹|
+U+08B54譔|U+064B0撰|
+U+08B5F譟|U+0566A噪|
 U+08B6D譭|U+06BC1毁|
-U+08B8E讎|U+04EC7仇|
+U+08B81讁|U+08C2A谪|
+U+08B8E讎|U+04EC7仇|U+096E0雠|
+U+08B90讐|U+096E0雠|
 U+08B9A讚|U+08D5E赞|
+U+08C53豓|U+08273艳|
 U+08C54豔|U+08273艳|
+U+08C8D貍|U+072F8狸|
+U+08C9B貛|U+0737E獾|
+U+08CC9賉|U+06064恤|
+U+08CDB賛|U+08D5E赞|
+U+08CEB賫|U+08D4D赍|
+U+08CF7賷|U+08D4D赍|
+U+08D0B贋|U+08D5D赝|
+U+08D11贑|U+08D63赣|
+U+08D1C贜|U+08D43赃|
+U+08D82趂|U+08D81趁|
+U+08DE5跥|U+08DFA跺|
+U+08DF4跴|U+08E29踩|
+U+08E01踁|U+080EB胫|
+U+08E2B踫|U+078B0碰|
+U+08E30踰|U+0903E逾|
+U+08E4F蹏|U+08E44蹄|
+U+08E54蹔|U+06682暂|
+U+08E5F蹟|U+08FF9迹|
+U+08E60蹠|U+08DD6跖|
+U+08E67蹧|U+07CDF糟|
+U+08E75蹵|U+08E74蹴|
+U+08EAD躭|U+0803D耽|
+U+08EB3躳|U+08EAC躬|
+U+08EB6躶|U+088F8裸|
+U+08F19輙|U+08F84辄|
+U+08F2D輭|U+08F6F软|
+U+08F3C輼|U+08F92辒|
+U+08FA0辠|U+07F6A罪|
+U+08FA2辢|U+08FA3辣|
+U+08FA4辤|U+08F9E辞|
+U+08FB3辳|U+0519C农|
 U+08FF4迴|U+056DE回|
+U+08FFB迻|U+079FB移|
+U+09008逈|U+08FE5迥|
+U+09025逥|U+056DE回|
+U+09029逩|U+05954奔|
+U+0902C逬|U+08FF8迸|
 U+09031週|U+05468周|
+U+09049遉|U+04FA6侦|
 U+0904A遊|U+06E38游|
 U+09061遡|U+06EAF溯|
+U+0906F遯|U+09041遁|
+U+09076遶|U+07ED5绕|
+U+09156酖|U+09E29鸩|
+U+09167酧|U+0916C酬|
+U+09183醃|U+0814C腌|
+U+09186醆|U+076CF盏|
+U+09195醕|U+09187醇|
 U+091A3醣|U+07CD6糖|
 U+091AF醯|U+09170酰|
+U+091BB醻|U+0916C酬|
+U+091BC醼|U+05BB4宴|
+U+091E6釦|U+06263扣|
+U+091EC釬|U+0710A焊|
+U+09205鈅|U+094A5钥|
+U+0920E鈎|U+094A9钩|
+U+09246鉆|U+094BB钻|
+U+09262鉢|U+094B5钵|
+U+092B2銲|U+0710A焊|
+U+092ED鋭|U+09510锐|
+U+09332録|U+05F55录|
+U+09341鍁|U+09528锨|
 U+0934A鍊|U+070BC炼|U+094FE链|
+U+0936B鍫|U+09539锹|
+U+09373鍳|U+09274鉴|
+U+0937E鍾|U+0953A锺|U+0949F钟|
 U+0938C鎌|U+09570镰|
+U+09397鎗|U+067AA枪|
+U+0939A鎚|U+09524锤|
 U+093AD鎭|U+093AE镇|
+U+093AD鎭|U+09547镇|
+U+093B8鎸|U+0954C镌|
+U+093BB鎻|U+09501锁|
 U+093DA鏚|U+0621A戚|
+U+0941D鐝|U+09562镢|
 U+09451鑑|U+09274鉴|
-U+0955F镟|U+065CB旋|
+U+0945A鑚|U+094BB钻|
+U+0945B鑛|U+077FF矿|
+U+09464鑤|U+05228刨|
+U+09475鑵|U+07F50罐|
+U+09482钂|U+0954B镋|
 U+09592閒|U+095F2闲|
-U+095A4閤|U+05408合|
+U+09599閙|U+095F9闹|
+U+095A4閤|U+09601阁|U+05408合|
+U+095A7閧|U+054C4哄|
+U+095B2閲|U+09605阅|
+U+095C7闇|U+06697暗|
+U+095DA闚|U+07AA5窥|
 U+095E2闢|U+08F9F辟|
+U+09628阨|U+05384厄|
 U+0962A阪|U+0962A阪|U+05742坂|
-U+0965E陞|U+05347升|
+U+0962C阬|U+05751坑|
+U+09657陗|U+05CED峭|
+U+0965C陜|U+09655陕|
+U+0965E陞|U+0965E陞|U+05347升|
+U+0967B陻|U+05819堙|
+U+0967F陿|U+072ED狭|
+U+09682隂|U+09634阴|
+U+09684隄|U+05824堤|
+U+09696隖|U+0575E坞|
+U+096A3隣|U+090BB邻|
+U+096B7隷|U+096B6隶|
+U+0976D靭|U+097E7韧|
+U+09771靱|U+097E7韧|
+U+0978C鞌|U+0978D鞍|
 U+097A6鞦|U+079CB秋|U+097A7鞧|
+U+097B5鞵|U+0978B鞋|
+U+097BE鞾|U+09774靴|
 U+097C6韆|U+05343千|
-U+097DD韝|U+097B2鞲|
+U+097C8韈|U+0889C袜|
+U+097E4韤|U+0889C袜|
+U+097EE韮|U+097ED韭|
+U+0981F頟|U+0989D额|
+U+0983C頼|U+08D56赖|
+U+0983D頽|U+09893颓|
+U+09847顇|U+060B4悴|
+U+0984B顋|U+0816E腮|
+U+09854顔|U+0989C颜|
 U+09858願|U+0613F愿|
+U+09866顦|U+06194憔|
+U+098C3飃|U+098D8飘|
+U+098DC飜|U+07FFB翻|
+U+098E4飤|U+09972饲|
 U+098F1飱|U+098E7飧|
-U+09918餘|U+04F59余|U+09980馀|
-U+09931餱|U+07CC7糇|
-U+09935餵|U+05582喂|
+U+09901餁|U+0996A饪|
+U+09908餈|U+07CCD糍|
+U+09918餘|U+09980馀|U+04F59余|
+U+09939餹|U+07CD6糖|
+U+0993B餻|U+07CD5糕|
+U+0993D餽|U+09988馈|
+U+0994D饍|U+081B3膳|
+U+09951饑|U+09965饥|
+U+0995D饝|U+0998D馍|
+U+099C8駈|U+09A71驱|
+U+099E1駡|U+09A82骂|
+U+099EE駮|U+09A73驳|
+U+09A10騐|U+09A8C验|
+U+09A23騣|U+09B03鬃|
+U+09A58驘|U+09AA1骡|
+U+09ABD骽|U+0817F腿|
+U+09ABE骾|U+09CA0鲠|
+U+09AC8髈|U+08180膀|
+U+09AE3髣|U+04EFF仿|
+U+09AE5髥|U+09AEF髯|
+U+09AF4髴|U+04F5B佛|
+U+09B00鬀|U+05243剃|
+U+09B09鬉|U+09B03鬃|
+U+09B26鬦|U+06597斗|
 U+09B28鬨|U+054C4哄|
+U+09B2A鬪|U+06597斗|
+U+09B2D鬭|U+06597斗|
+U+09B30鬰|U+090C1郁|
+U+09B8E鮎|U+09C87鲇|
+U+09B9D鮝|U+09C9E鲞|
+U+09BF0鯰|U+09CB6鲶|U+09C87鲇|
+U+09C10鰐|U+09CC4鳄|
+U+09C1B鰛|U+09CC1鳁|
+U+09C2E鰮|U+09CC1鳁|
+U+09CEC鳬|U+051EB凫|
+U+09D08鴈|U+096C1雁|
+U+09D5E鵞|U+09E45鹅|
 U+09D70鵰|U+096D5雕|U+05F6B彫|
+U+09D76鵶|U+09E26鸦|
+U+09DC0鷀|U+09E5A鹚|
+U+09DC4鷄|U+09E21鸡|
+U+09DF0鷰|U+071D5燕|
+U+09DF4鷴|U+09E47鹇|
+U+09E0E鸎|U+083BA莺|
+U+09E7B鹻|U+078B1碱|
 U+09E7C鹼|U+078B1碱|U+07877硷|
 U+09EAA麪|U+09762面|
 U+09EAB麫|U+09762面|
 U+09EAF麯|U+066F2曲|
-U+09EB4麴|U+066F2曲|U+09EB4麴|
+U+09EB4麴|U+09EB9麹|U+066F2曲|
+U+09EB5麵|U+09762面|U+09EBA麺|
 U+09EF4黴|U+09709霉|
+U+09F03鼃|U+086D9蛙|
+U+09F07鼇|U+09CCC鳌|
+U+09F08鼈|U+09CD6鳖|
 U+09F15鼕|U+051AC冬|
-U+09F47齇|U+09F44齄|
 U+09F63齣|U+051FA出|
-U+09F91龑|U+04DAE䶮|
+U+09F67齧|U+0556E啮|
+U+09F69齩|U+054AC咬|
+U+201EE𠇮|U+0547D命|
+U+20302𠌂|U+04F1E伞|
+U+20542𠕂|U+0518D再|
+U+20545𠕅|U+0518D再|
+U+20587𠖇|U+051A5冥|
+U+207B0𠞰|U+0527F剿|
+U+20ABE𠪾|U+05386历|
+U+20D1F𠴟|U+054A9咩|
+U+20EF3𠻳|U+055FD嗽|
+U+21428𡐨|U+091CE野|
+U+21681𡚁|U+05F0A弊|
+U+21A18𡨘|U+051A4冤|
+U+21A25𡨥|U+05BC7寇|
+U+21B36𡬶|U+05BFB寻|
 U+21ED5𡻕|U+05C81岁|
-U+298F5𩣵|U+299FB𩧻|
+U+22B38𢬸|U+062EC括|
+U+22B4F𢭏|U+06363捣|
+U+22BA5𢮥|U+064CD操|
+U+22DEC𢷬|U+06363捣|
+U+2365C𣙜|U+069B7榷|
+U+242EE𤋮|U+07199熙|
+U+24A0F𤨏|U+07410琐|
+U+24C1C𤰜|U+04EA9亩|
+U+24C48𤱈|U+04EA9亩|
+U+24C4A𤱊|U+07559留|
+U+24EA5𤺥|U+07629瘩|
+U+25128𥄨|U+07785瞅|
+U+25997𥦗|U+07A97窗|
+U+25CBB𥲻|U+07E82纂|
+U+260B3𦂳|U+07D27紧|
+U+260C2𦃂|U+07D27紧|
+U+26246𦉆|U+078B4碴|
+U+262B1𦊱|U+06302挂|
+U+26351𦍑|U+07F8C羌|
+U+26548𦕈|U+07707眇|
+U+26A99𦪙|U+0447D䑽|
+U+26D4F𦵏|U+0846C葬|
+U+28F7B𨽻|U+096B6隶|
+U+294D0𩓐|U+08116脖|
+U+295D7𩗗|U+098D3飓|
\ No newline at end of file
index 69b2c83..4d313b4 100644 (file)
 7隻
 8隻
 9隻
-0隻
-1隻
-2隻
-3隻
-4隻
-5隻
-6隻
-7隻
-8隻
-9隻
 0只支援
 1只支援
 2只支援
 至多
 頂多
 多隻
-0多隻
-0多隻
-零多隻
-十多隻
-百多隻
-千多隻
-萬多隻
-億多隻
 這只能
 這只可
 這只在
 這只是
 這只需
+這只須
 這只會
 這只用
+這只比
+這只限
+這只應
+這只不過
+這只包括
 那只能
 那只可
 那只在
 那只是
 那只需
+那只須
 那只會
 那只用
+那只怕
+那只比
+那只限
+那只應
+那只不過
+那只包括
 多只能
 多只可
 多只在
 多只有
 多只是
 多只需
+多只須
 多只會
 多只用
+多只含
+多只比
+多只限
+多只包括
 大只能
 大只可
 大只在
 小只是
 小只需
 小只會
+數隻
+數只能
+數只可
+數只在
+數只有
+數只是
+數只需
+數只須
+數只會
+數只含
+數只比
+數只限
+數只應
+數只包括
+人數只
+參數只
+總數只
 隻身
 形單影隻
 首隻
 7天後
 8天後
 9天後
-0天後
-1天後
-2天後
-3天後
-4天後
-5天後
-6天後
-7天後
-8天後
-9天後
 天後來
 天後天
 天後半
 後印
 萬象
-並存著
 乾絲
-乾著急
 乾魚
 魚乾
 乾梅
 淚乾
 沒幹
 沒乾沒淨
-枝不得大於榦
 杯乾
 打幹
 打乾噦
 乾咽
 乾和
 幹吏
-乾吊著下巴
 乾號
 乾颱
 乾卦
 乾麵
 乾柴
 枯乾
\99\92
\9b¬
 顛乾倒坤
 強幹
-乾著
 乾眼
 幹的停當
+井幹
 乾巴
 偎乾
 眼乾
-偷雞不著
-几絲
-划著
-划著走
-別著
-刮著
-千絲萬縷
-參合
-參考價值
-參與
-參與人員
-參與制
-參與感
-參與者
-參觀團
-參觀團體
-參閱
-吃著不盡
-合著
-吊帶褲
-吊掛著
-吊著
-吊褲
-吊褲帶
-向著
-嚴絲合縫
-回絲
-回著
-塗著
-壟斷價格
-壟斷資產
-壟斷集團
-姜絲
-帶團參加
-干著急
-幾絲
-彆著
-怎麼著
-憑藉著
-憑藉
-接著說
-擔著
-擔負著
-敘說著
-斗轉參橫
-旋繞著
-板著臉
-正當著
-沈著
-沖著
-派團參加
-涂著
-湊合著
-瀰漫著
-為著
-煙斗絲
-率團參加
-畫著
-當著
-發著
-直接參与
-睡著了
-秋褲
-積极參与
-積极參加
-簽著
-系著
-絕對參照
-絲來線去
-絲布
-絲板
-絲瓜布
-絲絨布
-絲線
-絲織廠
-絲蟲
-緊繃著
-繃著
-繃著臉
-繃著臉兒
-繫著
-罵著
 肉絲麵
-背向著
-菌絲體
-著兒
-著書立說
-著色軟體
-著重指出
-著錄
-著錄規則
 薑絲
-藉著
-蘊含著
-蘊涵著
-衝著
-被覆著
-覆著
-覆蓋著
 反覆
-訴說著
-說著
-請參閱
-謝絕參觀
-豎著
 豐濱
 豐濱鄉
 豐度
-象徵著
-這麼著
-那麼著
-配合著
-醞釀著
-錄著
-鍛鍊出
-關係著
 雞絲
 雞絲麵
-面朝著
-面臨著
-颳著
 髮絲
 斷髮
 不斷發
 打斷發
 披頭散髮
 髮禁
-鬥著
-鬧著玩兒
-鯰魚
 世界盃
 其次辟地
 開闢
 一彆頭
 并州
 併兼
-併產
 併骨
 併網
 併線
 併流
 逼併
 併名
-併當
 併火
 併肩子
-併除
 併疊
-忙併
-打併
 簡併
 並發表
 並發現
 數罪併罰
 催併
 狂併潮
-薝蔔
 提摩太後書
-當家纔知柴米價
-剛纔一載
 裏海
-骨頭裡掙出來的錢纔做得肉
-恰纔
-遠縣纔至
-別日南鴻纔北去
-然身死纔數月耳
-纔得兩年
-纔則
-纔此
-你纔子發昏
-纔可容顏十五餘
 不採
 披榛採蘭
 謬採虛聲
 官地為寀
 寮寀
 蔘綏
-個人# “個人參數”不是“個人蔘數”
-人蔘
 蕭蔘
-人參與
-人參選
-人參觀
-人參考
-人參展
-人參加
-人參議
-人參謀
-人參酌
-人參照
-人參政
-人參戰
-人參拜
-人參閱
-人參禪
-人參贊
-人參見
-人參透
-人參看
 東衝西突
 天克地衝
 六衝
 丑表功
 公孫丑
 么麼小丑
-齣電影
-齣電視
-齣動畫
-齣節目
-齣卡通
-齣戲
-齣劇
 平平當當
 滿滿當當
 當當丁丁
 快快當當
 咯噹
 啷噹
-党參
 党進
 党太尉
 党項
 髮屋
 櫛髮工
 鬒髮
+令人髮指
+爆發指數
+開發
+剪其髮
+吐哺捉髮
+吐哺握髮
+含齒戴髮
+大金髮苔
+寸髮千金
+心長髮短
+戴髮含齒
+拔髮
+拔鬚
+揪髮
+揪鬚
+整髮用品
+斷髮文身
+滿頭洋髮
+燙一個髮
+燙一次髮
+燙個髮
+燙完髮
+燙次髮
+理一個髮
+理一次髮
+理個髮
+理完髮
+理次髮
+細如髮
+繫於一髮
+皮膚
+生華髮
+蒼髮
+被髮佯狂
+被髮入山
+被髮左衽
+被髮纓冠
+被髮陽狂
+身體髮膚
+髮光可鑑
+髮已霜白
+髮油
+髮為血之本
+髮網
+髮踊沖冠
+髮際
+黃髮
+齒落髮白
+長髮姑娘
+長髮公主
+長髮妹
+的髮小
+是髮小
+代理發行
+美髮店
+美髮館
+美髮師
+美髮學
+美髮業
+美髮沙龍
+美容美髮
 模范棒棒堂
 模范三軍
 模范七棒
 複流
 反複製
 複對數
-顛覆
-答覆
-覆沒
-覆亡
-覆水難收
-翻雲覆雨
-覆雨翻雲
-覆轍
-覆巢之下無完卵
-覆蓋
-覆命
-天翻地覆
-天覆地載
 撥穀
 扁擬穀盜蟲
 不穀
 言大而夸
 睏覺
 愛睏
+睏了
 纍堆
 纍紲
 纍臣
 澤滲灕而下降
 裏勾外連
 裏手
-水里鄉
 水里溪
-水里濁水溪
 二里頭
 年歷史
 西歷史
 穆罕默德曆
 大明曆
 大曆
-
+
 太初曆
 通曆
 曆本
 懞直
 老懞
 放懞掙
-矇著
 矇聵
 矇瞍
 矇事
 矇頭轉
 矇松雨
 藏矇歌兒
-矇著鍋兒
 朦朧
 濛濛細雨
 濛汜
 小米麵
 壯麵
 吃板刀麵
-吃辣麵
 扯麵
 搋麵
 重羅麵
 湯下麵
 茶麵
 麵糰
+北山索麵
+土索麵
+米麵
+椒麵
+掛麵
+臊子麵
+龍鬚麵
+油潑麵
+辣麵
+肉麵
+燴麵
+雲吞麵
 冷面相
 糞穢衊面
-湟潦生苹
-食野之苹
-苹縈
-青苹
-青蘋果
 僕僕
 有僕
 冉有僕
 僮僕
 金僕姑
 僕婢
+惡僕
+從僕
 樸實
 樸訥
 樸念仁
 上簽字
 上簽收
 上簽寫
+上簽訂
+上簽定
+上簽署
+上簽發
+上簽約
+中簽名
+中簽字
+中簽收
+中簽寫
+中簽訂
+中簽定
+中簽署
+中簽發
+中簽約
 下簽名
 下簽字
 下簽收
 下簽寫
+下簽訂
+下簽定
+下簽署
+下簽發
+下簽約
 犖确
 磽确
 确瘠
 蒼朮
 赤朮
 朮赤
+博爾朮
 髼鬆
 皮鬆
 濛鬆雨
 鬆一口氣
 鬆元音
 鬆喉
+鬆化
 囉囉囌囌
 囉囌
 骨罈
+菜罈
 罈騞
 餵驢
 剪牡丹喂牛
 鬱鬱不樂
 鬱鬱寡歡
 鬱鬱蔥蔥
+鬱鬱蒼蒼
 鬱鬱而終
 愿樸
 愿而恭
 种放
 种師道
 种師中
-後庄
-舊庄
 正官庄
-龜山庄
-寶山庄
 冬山庄
-員山庄
 松山庄
 厂部
-閤府
-佈道
-剪綵
 衝量
 衝車
-書獃子
 相干
 府干預
 府干涉
 一干人
 未乾
 未干涉
+未干預
 抹乾
 餅乾
 拭乾
 乾季
 葡萄乾
 提子乾
-蘿蔔乾
-蘋果乾
 芒果乾
 菠蘿乾
 鳳梨乾
 幹事
 幹什麼
 幹細胞
-悶著頭兒幹
+頭兒幹
 配水幹管
 繐幃飄井幹
 站乾岸兒
 二不稜登
 有稜有角
 威稜
-負債纍纍
-傷痕纍纍
+債纍纍
+果纍纍
+實纍纍
 儒略曆
 伊斯蘭曆
 酒麴
-昇平
 爾冬陞
 澹臺
 拜託
 委託
 輓曲
 敬輓
+輓車
+輓輸
+輓辭
 万俟
 万旗
 鬚鯨
 叶韻
 叶音
 叶恭弘
-叶 恭弘
-叶 恭弘
 於1
 於2
 於3
 於8
 於9
 於0
-於1
-於2
-於3
-於4
-於5
-於6
-於7
-於8
-於9
-於0
 於一
 於二
 於三
 於夫羅
 於梨華
 置於
-佈於
 散於
 播於
 國於
 心於
 集於
 容於
-髒詞
-髒心
 新紮
 紙紮
 紮鐵
 百紮
 千紮
 萬紮
-佔1
-佔2
-佔3
-佔4
-佔5
-佔6
-佔7
-佔8
-佔9
-佔0
-佔1
-佔2
-佔3
-佔4
-佔5
-佔6
-佔7
-佔8
-佔9
-佔0
-佔零
-佔〇
-佔一
-佔二
-佔兩
-佔三
-佔四
-佔五
-佔六
-佔七
-佔八
-佔九
-佔十
-佔百
-佔千
-佔万
-佔億
-佔超過
-佔不足
-佔至少
-佔少
-佔至多
-佔半
-佔多
-佔大
-佔小
-佔中
-佔東
-佔西
-佔南
-佔北
-佔平均
-佔總
-獨佔鰲頭
-所佔
-市佔
-佔率
-市佔率
-佔市場
-佔世界
-佔全
-佔國內
-佔美
-佔台
-佔香
-佔澳
-佔加
-佔新
-佔馬
-佔印
-佔英
-佔法
-佔德
-佔葡
-佔俄
-佔蘇
-佔缺
-佔A
-佔B
-佔C
-佔D
-佔E
-佔F
-佔G
-佔H
-佔I
-佔J
-佔K
-佔L
-佔M
-佔N
-佔O
-佔P
-佔Q
-佔R
-佔S
-佔T
-佔U
-佔V
-佔W
-佔X
-佔Y
-佔Z
-佔a
-佔b
-佔c
-佔d
-佔e
-佔f
-佔g
-佔h
-佔i
-佔j
-佔k
-佔l
-佔m
-佔n
-佔o
-佔p
-佔q
-佔r
-佔s
-佔t
-佔u
-佔v
-佔w
-佔x
-佔y
-佔z
-佔A
-佔B
-佔C
-佔D
-佔E
-佔F
-佔G
-佔H
-佔I
-佔J
-佔K
-佔L
-佔M
-佔N
-佔O
-佔P
-佔Q
-佔R
-佔S
-佔T
-佔U
-佔V
-佔W
-佔X
-佔Y
-佔Z
-佔a
-佔b
-佔c
-佔d
-佔e
-佔f
-佔g
-佔h
-佔i
-佔j
-佔k
-佔l
-佔m
-佔n
-佔o
-佔p
-佔q
-佔r
-佔s
-佔t
-佔u
-佔v
-佔w
-佔x
-佔y
-佔z
-佔不佔
-不佔
-佔了
-佔穩
-佔資源
-佔人便宜
-佔頭
-佔道
-佔屋
-佔網
-佔床
-佔座
-佔分
-佔飯
-佔個位
-佔後
-佔著
-佔山
-馬占山
-佔比
-佔停車
-佔哺乳
-佔下風
-少佔
-多佔
-費佔
-佔查
-佔壓
-佔優
-佔劣
-穩佔
-佔整體
-佔局部
-日佔
-美佔
-英佔
-德佔
-法佔
-俄佔
-葡佔
-西佔
-奧佔
-意佔
-義佔
-地佔
-佔場
-佔耕
-狂佔
-徵佔
-圈佔
-已佔
-佔囁
-佔主
-佔次
-寡佔
-佔去
-將佔
-將占卜
-要佔
-要占卜
-會佔
-會占卜
-占卜
-夢有五不占
-占有五不驗
 誌異
 筑前
 筑後
 鐘表面
 南京鐘
 南京鐘錶
-造鐘錶
 造鐘
-九龍表行
-鐘錶行
 鐘行
-錶行
 小型鐘表面
 小型鐘面
 小型鐘錶
 他鐘
 寺鐘
 座鐘
-盜鐘
 大笨鐘
 大本鐘
-鐘錶歷史
-錶的歷史
-鐘錶的歷史
 點多鐘
 點半鐘
 分多鐘
 操作鐘
 南屏晚鐘
 敲鐘
-瞧著鐘
-瞧著鐘錶
-瞧著錶
 警報鐘
 猶如鐘
 猶如鐘錶
 鐘差
 任何鐘錶
 任何鐘
-任何錶
-任何表示
-任何表達
-任何表演
+手錶
 選手表現
 選手表達
 選手表示
 鐘速
 紅鐘
 各類鐘
-打著鐘
-鐘意
 衛星鐘
 該鐘
 錶轉
 逆鐘
 拂鐘無聲
 鐘不空則啞
-看著鐘錶
-看著鐘
-看著錶
 晚鐘
 潛水鐘錶
 潛水鐘
 潛水錶
 樂器鐘
 鐘左右
-埋頭尋鐘錶
-埋頭尋鐘
-埋頭尋錶
 鐘陳列
 驚鐘
-望著鐘錶
-望著鐘
-望著錶
 鐘錶停
 鐘停
 銫鐘
 華嚴鐘
 懷鐘
 生物鐘
-鐘錶的
-錶的嘀嗒
-的鐘錶
-嘀嗒的錶
 鐘好
 鐘太
 鐘不
 舊錶
 台鐘
 鐘響
-叩鐘
 計時錶
 防水錶
+顯示表格
+顯示表頭
+顯示表面
+顯示表達
+顯示表明
+顯示表現
+顯示表示
+電錶
+水錶
+咪錶
 射鵰
 神鵰
 神雕像
 村落發
 蛇髮女妖
 畢生發展
-對華發動
-中美發表
+對華發
 尸魂界
 樹樑
 屋樑
 柱樑
 下樑
 上梁山
-昇陽
 僥倖
 夏遊
 秋遊
 冬遊
+傲遊 # 浏览器名
+網遊
+桌遊
+遊輪
+遊牧
+遊蕩
+遊刃
 黑奴籲天錄
 林郁方
 讚歌
-編餘
-餘墨
-唾餘
-餘韻
-歸餘
-公餘
-寬餘
-餘糧
-餘慶
-餘殃
-餘燼
-劫餘
-結餘
-燼餘
-淨餘
-餕餘
-餘暉
-餘輝
-羨餘
-餘悸
-心餘
-刑餘
-緒餘
-血餘
-朱慶餘
-諸餘
-餘論
-茶餘
-廚餘
-餘裕
-餘氣
-詩餘
-詞餘
-餘僇
-餘辜
-餘責
-餘罪
-無餘
-耳餘
-餘烈
-餘思
-鹽餘
-嬴餘
-贏餘
-王餘魚
-紆餘
-餘波
-餘杯
-餘步
-餘妙
-餘音
-餘聲
-餘明
-餘風
-餘黨
-餘毒
-餘桃
-餘桶
-餘利
-餘瀝
-餘膏
-餘光
-餘杭
-餘竅
-餘缺
-餘暇
-餘閒
-餘羨
-餘響
-餘興
-餘蓄
-餘緒
-餘珍
-餘眾
-餘酲
-餘喘
-餘食
-餘熱
-餘刃
-餘閏
-餘存
-餘業
-餘姚
-餘蔭
-餘映
-餘外
-餘威
-餘味
-餘溫
-餘勇
-多餘
-剩餘
-餘生
-餘歡
-有餘
-一餘
-二餘
-兩餘
-三餘
-四餘
-五餘
-六餘
-七餘
-八餘
-九餘
-十餘
-百餘
-千餘
-萬餘
-億餘
-兆餘
-0餘
-1餘
-2餘
-3餘
-4餘
-5餘
-6餘
-7餘
-8餘
-9餘
-0餘
-1餘
-2餘
-3餘
-4餘
-5餘
-6餘
-7餘
-8餘
-9餘
-余姓
-余光生
-余光中
-余思敏
-余威德
-余子明
-余三勝
 崑山
 崑曲
 崑腔
 崑劇
 崑蘇
 蘇崑
-分布圖
 一干家中
 星期後
-不准你
-不准我
-不准他
-不准她
-不准它
-不准誰
-不准許
-准不准你
-准不准我
-准不准他
-准不准她
-准不准它
-准不准誰
-准不准許
 依依不捨
 戀戀不捨
 窮追不捨
 緊追不捨
 鍥而不捨
 稜登
-前言不答後語
 繃扒弔拷
 不弔
 不通弔慶
 陪弔
 盆弔
-屁股大弔了心
 撇弔
 憑弔
 門弔兒
 搗鬼弔白
 弔膀子
 弔民
-弔民伐罪
 弔奠
 弔頭
 弔古
-弔古尋幽
 弔詭
-弔詭矜奇
 弔客
 弔拷
-弔拷繃扒
 弔扣
 弔賀迎送
 弔鶴
 弔喉
 弔謊
 弔祭
+弔恤
 弔腳兒事
-弔頸
-弔橋
 弔取
 弔孝
 弔紙
 弔者大悅
-弔場
-弔書
 弔詞
-弔死問孤
-弔死問疾
 弔撒
 弔喪
-弔喪問疾
 弔腰撒跨
 弔唁
 弔宴
 弔慰
 弔文
 弔問
-頭巾弔在水裡
-提心弔膽
 弄鬼弔猴
-管人弔腳兒事
 開弔
 鶴弔
 昊天不弔
 吉凶慶弔
 蟣蝨相弔
 祭弔
-祭弔文
-青蠅弔客
 慶弔
-形影ç\9b¸å¼\94
+影相弔
 哀弔
-一弔
 唁弔
 於水
 安於
 源於
 且於
 長於
-短於
 現於
 較於
 於之
 晚於
 感於
 鬼谷子
+谷子敬
+洪谷子
 于美人
 緊緻
-冗餘
 曰云
 若干
 徵婚
 鬥風
 鬥雪紅
 鬥暴
-鬥é\96\91
+鬥é\96\92
 龍鬥虎傷
 殷師牛鬥
 二虎相鬥
 藏歷史
 頁面
 方面
-表面
 面條目
-課餘
-節餘
-盈餘
-病餘
-餘地
-餘力
-餘子
-餘事
-扶餘國
-腐餘
-富餘
-之餘
-餘澤
-流風餘俗
-流風餘韻
-淋餘土
-餘一
-餘二
-餘三
-餘四
-餘五
-餘六
-餘七
-餘八
-餘九
-餘十
-零餘
-〇餘
-餘零
-餘〇
-餘1
-餘2
-餘3
-餘4
-餘5
-餘6
-餘7
-餘8
-餘9
-餘0
-餘1
-餘2
-餘3
-餘4
-餘5
-餘6
-餘7
-餘8
-餘9
-餘0
-餘數
-其餘
-尸居餘氣
-賸餘
-餘孽
-殘餘
-業餘
-餘割
-餘款
-餘角
-餘切
-餘霞
-餘下
-餘弦
-餘震
-餘貾
-餘額
-禹餘糧
-餘人
-編余
-病余
-餘俗
-餘倍
-同餘
 大讚
 唄讚
 褒讚
 本徵
 船鐘
 黃鈺筑
-齊莊
-鴻案相莊
-項莊
-韋莊
-鍋莊
-鄭莊公
-通莊
-蒙莊
-端莊
-票莊
-矜莊
-楚莊問鼎
-楚莊絕纓
-整莊
-打路莊板
-莊騷
-莊語
-莊舄越吟
-莊房
-莊客
-莊農
-平泉莊
-布莊
 香山庄
-寶莊
-坐莊
-周莊王
-發莊
-卞莊
-包莊
-剔莊貨
-劉克莊
-冷莊子
-石家莊
-卞莊子
-新莊市
 當準
 憑準
 沒準
 三準
 鵝準
 有準
-崑崙
 鎌倉
 請君入甕
 甕安
 癒合
 槓桿
 宣洩
+鑑別
+鑑察
+鑑定
+鑑戒
+鑑諒
+鑑賞
+鑑於
+鑑證
+鑑湖
+鑑識
+鑑藏
+鑑往知來
+品鑑
+評鑑
+可鑑
+為鑑
+之鑑
+鑑古
+明鑑
+寶鑑
+破鑑
+年鑑
 圖鑑
-諮詢
+通鑑
+綱鑑
+鸞鑑
+借鑑
+龜鑑
+衡鑑
+史鑑
+殷鑑
+印鑑
+王鑑
 勳章
 張勳
 趙治勳
 兇槍
 很兇
 兇巴巴
-行兇前
+頂兇
+太兇
+好兇
 凝鍊
 鍊貧
 鍊度
 母醜
 一齣子
 齣兒
-賣獃
-發獃
-大獃
-獃獃
-獃等
-獃頭
-獃腦
-獃根
-獃磕
-獃憨獃
-獃話
-獃氣
-獃想
-獃性
-獃滯
-獃著
-獃痴
 獃串了皮
-獃事
-獃人
-獃子
-好獃
 占便宜的是獃
-阿獃
 丰標
 丰姿
 丰韻
 撲鼕鼕
 普鼕鼕
 鼕鼕鼓
-令人髮指
-爆發指數
-開發
-剪其髮
-吐哺捉髮
-吐哺握髮
-含齒戴髮
-大金髮苔
-寸髮千金
-心長髮短
-戴髮含齒
-拔髮
-拔鬚
-揪髮
-揪鬚
-整髮用品
-斷髮文身
-滿頭洋髮
-燙一個髮
-燙一次髮
-燙個髮
-燙完髮
-燙次髮
-理一個髮
-理一次髮
-理個髮
-理完髮
-理次髮
-細如髮
-繫於一髮
-膚髮
-皮膚
-生華髮
-蒼髮
-被髮佯狂
-被髮入山
-被髮左衽
-被髮纓冠
-被髮陽狂
-身體髮膚
-髒髮
-髮光可鑑
-髮已霜白
-髮油
-髮為血之本
-髮網
-髮踊沖冠
-髮際
-黃髮
-齒落髮白
 剷頭
 剷刈
 口燥唇乾
 對表揚
 對表中
 對表明
-不準確
-並不準確
 一伙頭
 一伙食
 一半只
 萬一只
 上面糊
 不克自制
-不准沒
 不加自制
 不占凶吉
 不占卜
 台子女
 台子孫
 台布景
-台面前
+台州
+台風穩健
+穩健的台風
+台風獎
 合府上
 後面店
 向往常
 好斗篷
 好斗膽
 好斗蓬
-家具體
-家具備
-家具有
 小几
 尸利
 尸祿
 面包涵
 面包管
 面包羅
-面包著
 面包藏
 面包裝
 面包裹
 面包起
-面店
+面店
 面粉碎
 面粉紅
 面食麵
 恕乏价催
 悲筑
 折子戲
-揮杆
 搤肮拊背
 文采郁郁
-木杆
 洪适
-球杆
 腊之以為餌
 腊毒
 蜡月
 宜云
 貴价
 郁郁菲菲
-馬杆
-造麯
-麴生
-麴秀才
-麴塵
-麴櫱
-大麴
-黃麴毒素
-酒醴麴櫱
-麴道士
-麴錢
-麴車
-麴院
-鼠麴草
 不乾不淨
 生發生
 必須
 須根據
 ·范
-、剋制
-,剋制
-。剋制
-!剋制
-?剋制
-;剋制
-:剋制
-不剋制
-也剋制
-了剋制
-他剋制
-們剋制
-剋制不了
-剋制不住
-力剋制
-力求剋制
-可以剋制
-和剋制
-在剋制
-地剋制
-夠剋制
-她剋制
-你剋制
-您剋制
-就剋制
-彼此剋制
-得剋制
-快剋制
-想剋制
-意剋制
-應剋制
-我剋制
-才剋制
-於剋制
-易剋制
-無法剋制
-的剋制
-盡量剋制
-而剋制
-能剋制
-與剋制
-著剋制
-要剋制
-軍隊剋制
-空投佈雷
-火箭佈雷
-海灣佈雷
-空中佈雷
-海上佈雷
-佈雷的
-佈雷,
-佈雷、
-佈雷。
-佈雷;
-佈雷艦
-佈雷艇
-佈雷速度
-佈雷封鎖
+剋剝
+科尼亞克期
+馬斯垂克期
 滿拚自盡
 拚生盡死
 拚卻
 范文藤
 范文虎
 范文照
-發表
 乾重
-若干
 鈎心鬥角
-若干
-乾重
 全面包圍
 全面包裹
 機械系
 心理
 複分解
 鹰鵰
-叱咤903
-叱咤MY903
-叱咤My903
-叱咤樂壇
-叱咤咤
-叱咤叱咤叱咤咤
-叱咤叱叱咤
-正在叱咤
-空餘
-變髒
 天地志狼
 薴烯
-阿斯圖里亞斯
 雙折射
 心繫家
 心繫國
 心繫病
 心繫故
 心繫哪
-心繫中
 心繫英
 心繫美
 心繫日
 心繫夫
 心繫女
 心繫子
-心繫著
+繫鞋帶
+繫船
+繫着
 重回
 挑大樑
 扛大樑
 限制
 控制
 製取
-第四出局
 心臟
 肝臟
 脾臟
 肺臟
 腎臟
-參與
 浮誇
-星巴克
+誇人
+誇姣
+誇容
+誇毗
+誇麗
 于謙
 于寘
 淳于
 電子表格
 雪裡紅
 雪裡蕻
+樹林裡
+叢林裡
 森林裡
-日子裡
-故事裡
-領域裡
-時間裡
-深淵裡
-醫院裡
-春假裡
-暑假裡
-秋假裡
-寒假裡
-春天裡
-夏天裡
-秋天裡
-冬天裡
-春日裡
-夏日裡
-秋日裡
-冬日裡
+水裡
+子裡
+事裡
+域裡
+間裡
+淵裡
+院裡
+假裡
+天裡
+日裡
 嘴裡
 心裡
 皮裡陽秋
 裡面
 這裡
 中文裡
-洞裡
-界裡
+洞裡
+界裡
 眼睛裡
+百科裡
+歷史裡
+戲裡
+作品裡
+專輯裡
+年代裡
+棺材裡
+假里白
+天里村
+上天里
+天里昂
+人生天里
+白子里
+朴子里
+翁子里
+田子里
+部子里
+曹子里
+埔子里
+廍子里
+廓子里
+堡子里
+墨子里
+瑞城里
+金城里
+西湖里
+子里甲
+水里商工
+車里雅賓斯克
+漠裡
+集裡
+節目裡
+場裡
+世紀裡
+亞美尼亞曆
+注釋
+月面
+路面
+修杰楷
+修杰麟
+學裡
+獄裡
+館裡
+箱裡
+系列裡
+點裡
+點里程
+家裡
+忙裡偷閒
+夜晚裡
+參數裡
+集數裡
+人數裡
+總數裡
+代數裡
+函數裡
+素數裡
+質數裡
+自然數裡
+索馬里 # (及以下)避免里海=>裏海的轉換
+西西里
+騰格里
+阿里
+村里長
+峇里海
+里海崖
+里海茨
+里海大學
+孛里海
+布里海
+公里海
+地圖裡
+版圖裡
+配圖裡
+路圖裡
+線圖裡
+幅圖裡
+鏡圖裡
+從圖裡
+的圖裡
+圖裡的
+圖裡,
+深山裡
+冰山裡
+火山裡
+在山裡
+的山裡
+到山裡
+去山裡
+從山裡
+山裡的
+山裡有
+棉裡
+語裡
+方法裡
+語法裡
+看法裡
+憲法裡
+用法裡
+法裡,
 首發
 夸脫
 誰幹的
 字碼表
 電碼表
 科斗
-佔領
 灕水
-點裡
-這只是
 這只不
 這只容
 這只允
 這只採
-這只用
 有只是
 有只不
 有只容
 包括
 特别致
 分别致
-會上簽訂
-會上簽署
-周一 # (及以下)避免“周一齣版”的錯誤
-周二
-周三
-周四
-周五
-周六
 韶山沖
-總裁制
 于丹
 于樂
 于冕
 于風政
 于鳳桐
 于默奧
-于家堡
 于爾岑
-于默奧
 于貝爾
 于爾根
 于雙戈
 涂醒哲
 涂善妮
 涂敏恆
-總裁制
 故云
 強制作用
 鬱南
 西米谷
-一出生
-二出生
-三出生
-四出生
-五出生
-六出生
-七出生
-八出生
-九出生
-十出生
-一出版
-二出版
-三出版
-四出版
-五出版
-六出版
-七出版
-八出版
-九出版
-十出版
-一出刊
-二出刊
-三出刊
-四出刊
-五出刊
-六出刊
-七出刊
-八出刊
-九出刊
-十出刊
-一出逃
-二出逃
-三出逃
-四出逃
-五出逃
-六出逃
-七出逃
-八出逃
-九出逃
-十出逃
-一出口
-二出口
-三出口
-四出口
-五出口
-六出口
-七出口
-八出口
-九出口
-十出口
-一出祁山
-二出祁山
-三出祁山
-四出祁山
-五出祁山
-六出祁山
-七出祁山
-八出祁山
-九出祁山
-十出祁山
 鬱林
 饑荒
 免徵
-亞美尼亞曆
-百科裡
-歷史裡
-戲裡
-作品裡
-專輯裡
-年代裡
-棺材裡
-注釋
-月面
-路面
-修杰楷
-修杰麟
-學裡
-獄裡
-館裡
-箱裡
-系列裡
-村子裡
 艷后
 廢后
 妖后
 后街
 后羿
 后稷
-后座
+仙后座
+六樓后座
 后平路
 后安路
 后土
 伊里布
 劃入
 中庄子
-埔裏社撫墾局
+埔裏社
 懸掛
 僱傭
 四捨六入
 宿舍
+校舍
 會干擾
-代表
 高清愿
 瓷製
 竹製
 絲製
 莜麵
-劃入
 簡筑翎
 楊雅筑
 魔杰座
 杰威爾音樂
 彭于晏
 尸羅精舍
-索馬里 # (及以下)避免里海=>裏海的轉換
-西西里
-騰格里
-阿里
-村里長
 進制
 黃詩杰
-陳冲
 何杰
 劉佳怜
 于小惠
-于品海
 于耘婕
 于洋
 于澄
 于國治
 于楓
 于熙珍
-涂善妮
 邱于庭
 熊杰
 卜云吉
 于飛島
 代表
 水無怜奈
-傲遊 # 浏览器名
-夏于喬
 賭后
-后海灣
-立后綜
+山仔后
 甲后路
 劉芸后
 謝華后
 聖后
 陳有后
 許虬
-網遊
 狄志杰
 伊適杰
 于冠華
-于台煙
 于雲鶴
 于忠肅集
 于友澤
 于和偉
 于來山
-于樂
 于天龍
 于謹
 于榮光
 電波鐘
-余三勝
 掛名
 啟發式
 舞后
 7年
 8年
 9年
-0年
-1年
-2年
-3年
-4年
-5年
-6年
-7年
-8年
-9年
 〇年
 零年
 一年
 7周後
 8周後
 9周後
-0周後
-1周後
-2周後
-3周後
-4周後
-5周後
-6周後
-7周後
-8周後
-9周後
 零周後
 〇周後
 一周後
 于鬯
 于仲文
 于再清
+茅于軾
+張樂于張徐
+鮮于樞
+于寶軒
 于震
 於震前
 於震后
 划行
 划算
 總裁制
+仲裁制
+獨裁制
 恒生
 嚴云農
 手裏劍
-秦莊襄王
 伊東怜
 衛後莊公
-餘量
 並行
 郁郁青青
 協防
-對表格
-對表示
-對表達
-對表演
-對表明
 了然後
 戴表元
-張樂于張徐
 余力為
 葉叶琴
-万俟
 幾個
 澀谷區
-協調
-選手
 併發症
 併發重症
 併發模式
 併發型模式
-金色長髮
-紅色長髮
-一頭長髮
+色長髮
+頭長髮
 的長髮
-黑色長髮
-前天
-昨天
-今天
-明天
 後天
-數學家
-科學家
-物理學家
-化學家
-生物學家
-天文學家
+學家
 游離
-子晳
 紅后假說
 書面
 不只
 高涌泉
-請求
-考試
-測試
-筆試
-口試
-冰冷
 王田里
 后姓
-台州
 田庄英雄
 計劃
 抑制劑
+党姓
+党家
+种丹妮
+當當網
+縴繩
+佣金
+佣錢
+佣鈿
+回佣
+蕓薹
+宋王臺
+臺佟
+臺靜農
+改採
+林鵞峰
+沙羡
+最多只
+大多只
+至多只
+只影響
+測不準
+說不準
+對不準
+量不準
+準不準
+音不準
+預報不準
+時間不準
+不太準
+非常準
+很準
+萬曆
+永曆
+囓蟲
+勳勞
+勳績
+勳爵
+勳業
+授勳
+奇勳
+功勳
+蝎虎
+磨蝎
+鬥劍
+激鬥
+政鬥
+沈海蓉
+方志恒
+古蹟
+瀋撫
+賦范
+騰衝
+沖天
+豐臺
+陽穀
+蒸乾
+太醜
+御製
+合併
+聖人曆
+电影後
+封為后
+皮托管
+白面包青天
+天神之后
+栗栖溪
+羅馬曆
+羅馬歷史
+羅馬歷代
+你誇
+誇你
+誇我
+誇他
+誇她
+誇了
+被誇
+誇辯
+誇大
+誇誕
+誇官
+誇口
+誇誇其談
+誇海口
+誇獎
+誇強說會
+誇下海口
+誇詡
+誇張
+誇示
+誇飾
+誇勝道強
+誇說
+誇才
+誇耀
+矜誇
+誇能
+自誇
+誇稱
+誇讚
+更加注
+繼承制
+布穀鳥
+黎克特制
+筆桿
+袋桿
+槍桿
+秤桿
+兩桿
+桿菌
+桿秤
+桿槍
+四桿鐵筆
+徒杠
+杠梁
+杠轂
+杠人
+石杠
+墨瀋
+米瀋
+拾瀋
+乾物
+姦污
+託兒
+同人誌
+文學誌
+衝着
+確係
+乃係
+開山辟谷
+穀祿
+製衣
+巨製
+不捲
+漫捲
+捲地
+捲葉蛾
+捲尾猴
+捲積雲
+窗簾
+吉徵
+凶徵
+臟腑
+臟胸
+弄髒胸
+腸臟
+養臟
+膵臟
+驚慄
+支配慾
+利慾
+悽美
+滷煮
+滷蝦
+滷鴨
+滷鵝
+滷牛
+滷五花
+滷子
+滷料
+滷豆
+滷了
+滷的
+滷好
+打滷
+滷麵
+烤滷
+錦滷
+汤滷
+浸滷
+石鐘
+石鐘山
+花葯
+聚葯雄蕊
+遺蹟
+開山闢谷
+受僱
+僱請
+僱車
+僱船
+米糰
+謹愿
+瞎矇
+里舖
+喧譁
+譁眾
+譁囂
+譁然
+譁噪
+譁笑
+譁變
+鼓譟
+譟詐
+蕩氣
+木籤
+薝蔔
+斗牛星
+告劄
+點劄
+嚮慕
+儘自
+憑閑
+倚閑
+踰閑
+閑邪
+摺檯
+球檯
+櫃檯
+吧檯
+賭檯
+坐檯
+妝檯
+餐檯
+工作檯
+辦公檯
+檯面上
+上檯面
+牴觸
+牴牾
+角牴
+扼肮
+搤肮
+嫩薑
+酸薑
+薑啤
+鹹濕
+騰湧
+草蓆
+竹蓆
+藤蓆
+涼蓆
+灘蓆
+麻將蓆
+裏水鎮
+被廢後
+蒸製
+體徵
+綜合徵
+价川
+商標准許
+批准確定
+御嶽山
+兩齣
+進兩出
+幾進幾出
+十出生
+十出頭
+十出擊
+十出家
+十出祁山
+0齣
+0出現
+0出線
+第一齣
+第二齣
+第三齣
+第四齣
+第五齣
+第六齣
+第七齣
+第八齣
+第九齣
+第一出現
+第一出線
+第二出線
+第三出局
+第四出局
+第五出局
+這齣
+這出現
+這出乎
+這出人
+這出生
+這出世
+這出身
+這出色
+這出版
+這出道
+本齣戲
+整齣戲
+一齣戲
+三齣戲
+一齣好戲
+一齣電影
+首齣電影
+多齣電影
+整齣電影
+一齣劇
+整齣劇
+一齣悲劇
+一齣喜劇
+捨入
+舍入口
+繫上了
+繫上頭
+繫上紅
+繫上黑
+繫上絲
+繫上繩
+繫上安全
+上繫上
+被繫上
+繫上,
+繫上。
+亂發生
+亂發脾氣
+秀發村
+秀發動
+秀發表
+秀發布
+秀發現
+秀發生
+秀發起
+秀發展
\ No newline at end of file
index e6abb4e..4a3613b 100644 (file)
@@ -27,7 +27,6 @@
 弔架
 弔桶
 弔桿
-弔橋
 弔燈
 弔環
 弔籃
 饑餓
 饑不擇食
 饑荒
-憑藉
-藉故
-藉口
 藉端
-藉詞
 藉酒
 蛋捲
 行李捲
@@ -91,7 +86,6 @@
 獃氣
 獃子
 獃頭獃腦
-儘量
 希腊
 腊肉
 瞭如
 光採
 鍾錶
 複原
-參与
 浮夸
 剋日
 羡
 姦污
 併發
 衚衕
+轉檯
+檯子
+佣人
+佣工
+佣仆
+男佣
+女佣
+傢俱
+傢具
+華冑
+裔冑
+貴冑
+美髮
+癥狀
+癥候
+不準
+囓合
+囓齒類
+編製
+索麵
+專註
+鬥上
+古迹
+划了
+合并
+划出
+划到
+題籤
+克複
+意麵
+明裡
+華髮
+迴流
+採的
+複名
+看錶
+嚮應
+複電
+綵排
+綵帶
+綵樓
+綵牌樓
+綵球
+綵綢
+綵線
+綵船
+綵衣
+結綵
+戲綵娛親
+剪綵
+複檢
+黃曲霉
+佔有慾
+不佔
+佔上風
+佔下
+佔了
+佔位
+佔住
+佔佔
+佔便宜
+佔個
+佔優勢
+佔先
+佔光
+佔到
+佔去
+佔取
+佔在
+佔地
+佔多數
+佔好
+佔得
+佔掉
+佔據
+佔有
+佔滿
+佔為
+佔用
+佔畢
+佔盡
+佔線
+佔起
+佔過
+佔領
+佔頭籌
+佔高枝兒
+侵佔
+先佔
+分佔
+只佔
+強佔
+搶佔
+攻佔
+會佔
+照佔
+約佔
+連佔
+進佔
+還佔
+隱佔
+霸佔
+非佔不可
+鳩佔鵲巢
+占
+佔0
+佔1
+佔2
+佔3
+佔4
+佔5
+佔6
+佔7
+佔8
+佔9
+佔A
+佔B
+佔C
+佔D
+佔E
+佔F
+佔G
+佔H
+佔I
+佔J
+佔K
+佔L
+佔M
+佔N
+佔O
+佔P
+佔Q
+佔R
+佔S
+佔T
+佔U
+佔V
+佔W
+佔X
+佔Y
+佔Z
+佔〇
+佔一
+佔七
+佔三
+佔下風
+佔不佔
+佔不足
+佔世界
+佔中
+佔主
+佔九
+佔二
+佔五
+佔人便宜
+佔俄
+佔個位
+佔億
+佔優
+佔全
+佔兩
+佔八
+佔六
+佔分
+佔加
+佔劣
+佔北
+佔十
+佔千
+佔半
+佔南
+佔印
+佔台
+佔囁
+佔四
+佔國
+佔場
+佔壓
+佔多
+佔大
+佔小
+佔少
+佔局部
+佔屋
+佔山為
+佔市
+佔平均
+佔床
+佔座
+佔後
+佔德
+佔整
+佔新
+佔東
+佔查
+佔次
+佔比
+佔法
+佔澳
+佔率
+佔百
+佔網
+佔總
+佔缺
+佔美
+佔耕
+佔至多
+佔至少
+佔臺
+佔英
+佔萬
+佔葡
+佔蘇
+佔西
+佔資
+佔超過
+佔道
+佔零
+佔頭
+佔香
+佔馬
+俄佔
+圈佔
+地佔
+多佔
+奧佔
+寡佔
+將佔
+少佔
+已佔
+市佔
+徵佔
+德佔
+意佔
+所佔
+日佔
+法佔
+狂佔
+獨佔
+穩佔
+美佔
+義佔
+英佔
+葡佔
+西佔
+要佔
+費佔
+標準桿
+單杠
+杠子
+杠鈴
+經濟杠桿
+高低杠
+陞官
+姦汙
+興緻
+景緻
+別緻
+雅緻
+崑
+表
+錶
+小夥子
+夸父
+夸特
+夸脫
+心臟痲痹
+心臟麻痺
+悽涼
+悽悽
+悽豔
+悽切
+悽楚
+家裏
+利欲熏心
+遊離票
+遊離份子
+閑
+鍊鋼
+事迹
+痕迹
+遺迹
+僱員
+僱用
+霉素
+遊盪
+搖蕩
+激蕩
+動蕩
+跌蕩
+震蕩
+充饑
+儘力
+彈葯
+炸葯
+醫葯
+骯臟
+釐升
+蓆地
+晒
+窗檯
+和尚撞一天鍾
+製為
+裡布
+里布
+圖裡
+山裡
+複發
+照準
+四齣
+五齣
+六齣
+弔兒郎當
+髮小
+髮網
+修鍊
+麵線
+繫上
+清湯掛麵
+牛肉麵
+檯面
+庄
+複信
+複核
+三複
+來複
+匡複
+傾複
+墾複
+往複
+被複
+複仞年如
+複以百萬
+複位
+複合
+複員
+複壯
+複復
+複流
+複畝珍
+起複
+餘
\ No newline at end of file
index 2a6f8a8..43fa460 100644 (file)
@@ -85,12 +85,24 @@ class MergeMessageFileList extends Maintenance {
                                if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) {
                                        continue;
                                }
-                               $extfile = "{$extdir}/{$extname}/{$extname}.php";
-                               if ( file_exists( $extfile ) ) {
-                                       $mmfl['setupFiles'][] = $extfile;
-                               } else {
+                               $possibilities = array(
+                                       "$extdir/$extname/extension.json",
+                                       "$extdir/$extname/skin.json",
+                                       "$extdir/$extname/$extname.php"
+                               );
+                               $found = false;
+                               foreach ( $possibilities as $extfile ) {
+                                       if ( file_exists( $extfile ) ) {
+                                               $mmfl['setupFiles'][] = $extfile;
+                                               $found = true;
+                                               break;
+                                       }
+                               }
+
+                               if ( !$found ) {
                                        $this->hasError = true;
-                                       $this->error( "Extension {$extname} in {$extdir} lacks expected {$extname}.php" );
+                                       $this->error( "Extension {$extname} in {$extdir} lacks expected entry point: " .
+                                               "extension.json, skin.json, or {$extname}.php." );
                                }
                        }
                }
@@ -150,6 +162,7 @@ class MergeMessageFileList extends Maintenance {
 
 require_once RUN_MAINTENANCE_IF_MAIN;
 
+$queue = array();
 foreach ( $mmfl['setupFiles'] as $fileName ) {
        if ( strval( $fileName ) === '' ) {
                continue;
@@ -157,12 +170,26 @@ foreach ( $mmfl['setupFiles'] as $fileName ) {
        if ( empty( $mmfl['quiet'] ) ) {
                fwrite( STDERR, "Loading data from $fileName\n" );
        }
-       // Include the extension to update $wgExtensionMessagesFiles
-       if ( !( include_once $fileName ) ) {
+       // Using extension.json or skin.json
+       if ( substr( $fileName, -strlen( '.json' ) ) === '.json' ) {
+               $queue[$fileName] = 1;
+       } elseif ( !( include_once $fileName ) ) {
+               // Include the extension to update $wgExtensionMessagesFiles
                fwrite( STDERR, "Unable to read $fileName\n" );
                exit( 1 );
        }
 }
+
+if ( $queue ) {
+       $registry = new ExtensionRegistry();
+       $data = $registry->readFromQueue( $queue );
+       foreach ( array( 'wgExtensionMessagesFiles', 'wgMessagesDirs' ) as $var ) {
+               if ( isset( $data['globals'][$var] ) ) {
+                       $GLOBALS[$var] = array_merge( $data['globals'][$var], $GLOBALS[$var] );
+               }
+       }
+}
+
 fwrite( STDERR, "\n" );
 $s =
        "<" . "?php\n" .
index ee0ff01..49eae4a 100644 (file)
@@ -91,6 +91,7 @@ class MWDocGen extends Maintenance {
                $this->template = $IP . '/maintenance/Doxyfile';
                $this->excludes = array(
                        'vendor',
+                       'node_modules',
                        'images',
                        'static',
                );
index 5247637..6b7c77b 100755 (executable)
@@ -1,25 +1,4 @@
 #!/usr/bin/env bash
 set -e
-
-JSDUCK_MWVERSION=master
-if [[ "$1" == "--version" && "$2" != "" ]]
-then
-       JSDUCK_MWVERSION="$2"
-elif [[ "$*" != "" ]]
-then
-       FILENAME=$(basename $0)
-       echo "Usage: $FILENAME [--version <mediawiki version>]"
-       echo
-       exit 1
-fi
-
-MWCORE_DIR=$(cd $(dirname $0)/..; pwd)
-
-jsduck \
---config=$MWCORE_DIR/maintenance/jsduck/config.json \
---footer="Documentation for branch ($JSDUCK_MWVERSION) on {DATE} by {JSDUCK} {VERSION}." \
---processes 0
-
-echo 'JSDuck execution finished.'
-
-ln -s ../../resources $MWCORE_DIR/docs/js/modules
+cd $(dirname $0)/..
+jsduck
diff --git a/maintenance/populateBloomCache.php b/maintenance/populateBloomCache.php
deleted file mode 100644 (file)
index 40ad5fc..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-/**
- * Script to populate a bloom filter with a BloomFilter* class
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Maintenance
- */
-
-require_once __DIR__ . '/Maintenance.php';
-
-/**
- * Script to populate a bloom filter with a BloomFilter* class
- *
- * @ingroup Maintenance
- */
-class PopulateBloomFilter extends Maintenance {
-       public function __construct() {
-               parent::__construct();
-               $this->addOption( 'cache', 'Bloom cache store name', true, true );
-               $this->addOption( 'filter', 'Bloom filter name', true, true );
-               $this->addOption( 'domain', 'Bloom filter domain', true, true );
-               $this->addOption( 'delay', 'Sleep delay between batches (us)', false, true );
-               $this->mDescription = "Populate the specified bloom filter";
-       }
-
-       public function execute() {
-               $type = $this->getOption( 'filter' );
-               $domain = $this->getOption( 'domain' );
-               $bcache = BloomCache::get( $this->getOption( 'cache' ) );
-               $delay = $this->getOption( 'delay', 1e5 );
-
-               if ( !method_exists( "BloomFilter{$type}", 'merge' ) ) {
-                       $this->error( "No \"BloomFilter{$type}::merge\" method found.", 1 );
-               }
-
-               $virtualKey = "$domain:$type";
-               $status = $bcache->getStatus( $virtualKey );
-               if ( $status == false ) {
-                       $this->error( "Could not query virtual bloom filter '$virtualKey'.", 1 );
-               }
-
-               $startTime = microtime( true );
-               $this->output( "Current timestamp is '$startTime'.\n" );
-               $this->output( "Current filter timestamp is '{$status['asOfTime']}'.\n" );
-
-               do {
-                       $status = call_user_func_array(
-                               array( "BloomFilter{$type}", 'merge' ),
-                               array( $bcache, $domain, $virtualKey, $status )
-                       );
-                       if ( $status == false ) {
-                               $this->error( "Could not query virtual bloom filter '$virtualKey'.", 1 );
-                       }
-                       $this->output( "Filter updated to timestamp '{$status['asOfTime']}'.\n" );
-                       usleep( $delay );
-               } while ( $status['asOfTime'] && $status['asOfTime'] < $startTime );
-
-               $this->output( "Done, filter $type of domain $domain reached time '$startTime'.\n" );
-       }
-}
-
-$maintClass = "PopulateBloomFilter";
-require_once RUN_MAINTENANCE_IF_MAIN;
index b04639c..47866dc 100644 (file)
@@ -113,6 +113,7 @@ class RebuildLocalisationCache extends Maintenance {
                $total = count( $codes );
                $chunks = array_chunk( $codes, ceil( count( $codes ) / $threads ) );
                $pids = array();
+               $parentStatus = 0;
                foreach ( $chunks as $codes ) {
                        // Do not fork for only one thread
                        $pid = ( $threads > 1 ) ? pcntl_fork() : -1;
@@ -121,9 +122,8 @@ class RebuildLocalisationCache extends Maintenance {
                                // Child, reseed because there is no bug in PHP:
                                // http://bugs.php.net/bug.php?id=42465
                                mt_srand( getmypid() );
-                               $numRebuilt = $this->doRebuild( $codes, $lc, $force );
-                               // Abuse the exit value for the count of rebuild languages
-                               exit( $numRebuilt );
+                               $this->doRebuild( $codes, $lc, $force );
+                               exit( 0 );
                        } elseif ( $pid === -1 ) {
                                // Fork failed or one thread, do it serialized
                                $numRebuilt += $this->doRebuild( $codes, $lc, $force );
@@ -136,13 +136,20 @@ class RebuildLocalisationCache extends Maintenance {
                foreach ( $pids as $pid ) {
                        $status = 0;
                        pcntl_waitpid( $pid, $status );
-                       // Fetch the count from the return value
-                       $numRebuilt += pcntl_wexitstatus( $status );
+                       if ( pcntl_wexitstatus( $status ) ) {
+                               // Pass a fatal error code through to the caller
+                               $parentStatus = pcntl_wexitstatus( $status );
+                       }
                }
 
-               $this->output( "$numRebuilt languages rebuilt out of $total\n" );
-               if ( $numRebuilt === 0 ) {
-                       $this->output( "Use --force to rebuild the caches which are still fresh.\n" );
+               if ( !$pids ) {
+                       $this->output( "$numRebuilt languages rebuilt out of $total\n" );
+                       if ( $numRebuilt === 0 ) {
+                               $this->output( "Use --force to rebuild the caches which are still fresh.\n" );
+                       }
+               }
+               if ( $parentStatus ) {
+                       exit( $parentStatus );
                }
        }
 
index 862a983..2bc7510 100644 (file)
@@ -23,7 +23,7 @@
 require_once __DIR__ . '/Maintenance.php';
 
 /**
- * Maintenance script to dump the SiteStore as a static json file.
+ * Maintenance script to dump a SiteStore as a static json file.
  *
  * @ingroup Maintenance
  */
@@ -32,17 +32,17 @@ class RebuildSitesCache extends Maintenance {
        public function __construct() {
                parent::__construct();
 
-               $this->mDescription = "Dumps site store as json";
+               $this->mDescription = "Cache sites as json for file-based lookup.";
                $this->addOption( 'file', 'File to output the json to', false, true );
        }
 
        public function execute() {
-               $siteListFileCacheBuilder = new SiteListFileCacheBuilder(
-                       SiteSQLStore::newInstance(),
+               $sitesCacheFileBuilder = new SitesCacheFileBuilder(
+                       new DBSiteStore(),
                        $this->getCacheFile()
                );
 
-               $siteListFileCacheBuilder->build();
+               $sitesCacheFileBuilder->build();
        }
 
        /**
@@ -55,7 +55,7 @@ class RebuildSitesCache extends Maintenance {
                        $jsonFile = $this->getConfig()->get( 'SitesCacheFile' );
 
                        if ( $jsonFile === false ) {
-                               $this->error( 'Error: No sites cache file is set in configuration.', 1 );
+                               $this->error( 'Error: No file set in configuration for SitesCacheFile.', 1 );
                        }
                }
 
index 0c2f722..e1b6ac6 100644 (file)
@@ -36,42 +36,51 @@ class RefreshLinks extends Maintenance {
                $this->addOption( 'new-only', 'Only affect articles with just a single edit' );
                $this->addOption( 'redirects-only', 'Only fix redirects, not all links' );
                $this->addOption( 'old-redirects-only', 'Only fix redirects with no redirect table entry' );
-               $this->addOption( 'm', 'Maximum replication lag', false, true );
                $this->addOption( 'e', 'Last page id to refresh', false, true );
+               $this->addOption( 'dfn-chunk-size', 'Maximum number of existent IDs to check per ' .
+                       'query, default 100000', false, true );
                $this->addArg( 'start', 'Page_id to start from, default 1', false );
                $this->setBatchSize( 100 );
        }
 
        public function execute() {
-               $max = $this->getOption( 'm', 0 );
+               // Note that there is a difference between not specifying the start
+               // and end IDs and using the minimum and maximum values from the page
+               // table. In the latter case, deleteLinksFromNonexistent() will not
+               // delete entries for nonexistent IDs that fall outside the range.
+               $start = (int)$this->getArg( 0 ) ?: null;
+               $end = (int)$this->getOption( 'e' ) ?: null;
+               $dfnChunkSize = (int)$this->getOption( 'dfn-chunk-size', 100000 );
                if ( !$this->hasOption( 'dfn-only' ) ) {
-                       $start = $this->getArg( 0, 1 );
                        $new = $this->getOption( 'new-only', false );
-                       $end = $this->getOption( 'e', 0 );
                        $redir = $this->getOption( 'redirects-only', false );
                        $oldRedir = $this->getOption( 'old-redirects-only', false );
-                       $this->doRefreshLinks( $start, $new, $max, $end, $redir, $oldRedir );
+                       $this->doRefreshLinks( $start, $new, $end, $redir, $oldRedir );
+                       $this->deleteLinksFromNonexistent( null, null, $this->mBatchSize, $dfnChunkSize );
+               } else {
+                       $this->deleteLinksFromNonexistent( $start, $end, $this->mBatchSize, $dfnChunkSize );
                }
-               $this->deleteLinksFromNonexistent( $max, $this->mBatchSize );
        }
 
        /**
         * Do the actual link refreshing.
-        * @param int $start Page_id to start from
+        * @param int|null $start Page_id to start from
         * @param bool $newOnly Only do pages with 1 edit
-        * @param int $maxLag Max DB replication lag
-        * @param int $end Page_id to stop at
+        * @param int|null $end Page_id to stop at
         * @param bool $redirectsOnly Only fix redirects
         * @param bool $oldRedirectsOnly Only fix redirects without redirect entries
         */
-       private function doRefreshLinks( $start, $newOnly = false, $maxLag = false,
-               $end = 0, $redirectsOnly = false, $oldRedirectsOnly = false
+       private function doRefreshLinks( $start, $newOnly = false,
+               $end = null, $redirectsOnly = false, $oldRedirectsOnly = false
        ) {
                global $wgParser, $wgUseTidy;
 
                $reportingInterval = 100;
                $dbr = wfGetDB( DB_SLAVE );
-               $start = intval( $start );
+
+               if ( $start === null ) {
+                       $start = 1;
+               }
 
                // Give extensions a chance to optimize settings
                wfRunHooks( 'MaintenanceRefreshLinksInit', array( $this ) );
@@ -89,15 +98,10 @@ class RefreshLinks extends Maintenance {
 
                        $conds = array(
                                "page_is_redirect=1",
-                               "rd_from IS NULL"
+                               "rd_from IS NULL",
+                               self::intervalCond( $dbr, 'page_id', $start, $end ),
                        );
 
-                       if ( $end == 0 ) {
-                               $conds[] = "page_id >= $start";
-                       } else {
-                               $conds[] = "page_id BETWEEN $start AND $end";
-                       }
-
                        $res = $dbr->select(
                                array( 'page', 'redirect' ),
                                'page_id',
@@ -124,7 +128,8 @@ class RefreshLinks extends Maintenance {
                                array( 'page_id' ),
                                array(
                                        'page_is_new' => 1,
-                                       "page_id >= $start" ),
+                                       self::intervalCond( $dbr, 'page_id', $start, $end ),
+                               ),
                                __METHOD__
                        );
                        $num = $res->numRows();
@@ -253,19 +258,60 @@ class RefreshLinks extends Maintenance {
         * Removes non-existing links from pages from pagelinks, imagelinks,
         * categorylinks, templatelinks, externallinks, interwikilinks, langlinks and redirect tables.
         *
-        * @param int $maxLag
+        * @param int|null $start Page_id to start from
+        * @param int|null $end Page_id to stop at
         * @param int $batchSize The size of deletion batches
+        * @param int $chunkSize Maximum number of existent IDs to check per query
         *
         * @author Merlijn van Deen <valhallasw@arctus.nl>
         */
-       private function deleteLinksFromNonexistent( $maxLag = 0, $batchSize = 100 ) {
+       private function deleteLinksFromNonexistent( $start = null, $end = null, $batchSize = 100,
+               $chunkSize = 100000
+       ) {
                wfWaitForSlaves();
+               $this->output( "Deleting illegal entries from the links tables...\n" );
+               $dbr = wfGetDB( DB_SLAVE );
+               do {
+                       // Find the start of the next chunk. This is based only
+                       // on existent page_ids.
+                       $nextStart = $dbr->selectField(
+                               'page',
+                               'page_id',
+                               self::intervalCond( $dbr, 'page_id', $start, $end ),
+                               __METHOD__,
+                               array( 'ORDER BY' => 'page_id', 'OFFSET' => $chunkSize )
+                       );
 
-               $dbw = wfGetDB( DB_MASTER );
+                       if ( $nextStart !== false ) {
+                               // To find the end of the current chunk, subtract one.
+                               // This will serve to limit the number of rows scanned in
+                               // dfnCheckInterval(), per query, to at most the sum of
+                               // the chunk size and deletion batch size.
+                               $chunkEnd = $nextStart - 1;
+                       } else {
+                               // This is the last chunk. Check all page_ids up to $end.
+                               $chunkEnd = $end;
+                       }
+
+                       $fmtStart = $start !== null ? "[$start" : '(-INF';
+                       $fmtChunkEnd = $chunkEnd !== null ? "$chunkEnd]" : 'INF)';
+                       $this->output( "  Checking interval $fmtStart, $fmtChunkEnd\n" );
+                       $this->dfnCheckInterval( $start, $chunkEnd, $batchSize );
+
+                       $start = $nextStart;
 
-               $lb = wfGetLBFactory()->newMainLB();
-               $dbr = $lb->getConnection( DB_SLAVE );
-               $dbr->bufferResults( false );
+               } while ( $nextStart !== false );
+       }
+
+       /**
+        * @see RefreshLinks::deleteLinksFromNonexistent()
+        * @param int|null $start Page_id to start from
+        * @param int|null $end Page_id to stop at
+        * @param int $batchSize The size of deletion batches
+        */
+       private function dfnCheckInterval( $start = null, $end = null, $batchSize = 100 ) {
+               $dbw = wfGetDB( DB_MASTER );
+               $dbr = wfGetDB( DB_SLAVE );
 
                $linksTables = array( // table name => page_id field
                        'pagelinks' => 'pl_from',
@@ -280,40 +326,58 @@ class RefreshLinks extends Maintenance {
                );
 
                foreach ( $linksTables as $table => $field ) {
-                       $this->output( "Retrieving illegal entries from $table... " );
-
-                       // SELECT DISTINCT( $field ) FROM $table LEFT JOIN page ON $field=page_id WHERE page_id IS NULL;
-                       $results = $dbr->select(
-                               array( $table, 'page' ),
-                               $field,
-                               array( 'page_id' => null ),
-                               __METHOD__,
-                               'DISTINCT',
-                               array( 'page' => array( 'LEFT JOIN', "$field=page_id" ) )
-                       );
-
+                       $this->output( "    $table: 0" );
                        $counter = 0;
-                       $list = array();
-                       $this->output( "0.." );
-                       foreach ( $results as $row ) {
-                               $counter++;
-                               $list[] = $row->$field;
-                               if ( ( $counter % $batchSize ) == 0 ) {
+                       do {
+                               $ids = $dbr->selectFieldValues(
+                                       $table,
+                                       $field,
+                                       array(
+                                               self::intervalCond( $dbr, $field, $start, $end ),
+                                               "$field NOT IN ({$dbr->selectSQLText( 'page', 'page_id' )})",
+                                       ),
+                                       __METHOD__,
+                                       array( 'DISTINCT', 'ORDER BY' => $field, 'LIMIT' => $batchSize )
+                               );
+
+                               $numIds = count( $ids );
+                               if ( $numIds ) {
+                                       $counter += $numIds;
                                        wfWaitForSlaves();
-                                       $dbw->delete( $table, array( $field => $list ), __METHOD__ );
-
-                                       $this->output( $counter . ".." );
-                                       $list = array();
+                                       $dbw->delete( $table, array( $field => $ids ), __METHOD__ );
+                                       $this->output( ", $counter" );
+                                       $start = $ids[$numIds - 1] + 1;
                                }
-                       }
-                       $this->output( $counter );
-                       if ( count( $list ) > 0 ) {
-                               $dbw->delete( $table, array( $field => $list ), __METHOD__ );
-                       }
-                       $this->output( "\n" );
+
+                       } while ( $numIds >= $batchSize && ( $end === null || $start <= $end ) );
+
+                       $this->output( " deleted.\n" );
+
                        wfWaitForSlaves();
                }
-               $lb->closeAll();
+       }
+
+       /**
+        * Build a SQL expression for a closed interval (i.e. BETWEEN).
+        *
+        * By specifying a null $start or $end, it is also possible to create
+        * half-bounded or unbounded intervals using this function.
+        *
+        * @param IDatabase $db Database connection
+        * @param string $var Field name
+        * @param mixed $start First value to include or null
+        * @param mixed $end Last value to include or null
+        */
+       private static function intervalCond( IDatabase $db, $var, $start, $end ) {
+               if ( $start === null && $end === null ) {
+                       return "$var IS NOT NULL";
+               } elseif ( $end === null ) {
+                       return "$var >= {$db->addQuotes( $start )}";
+               } elseif ( $start === null ) {
+                       return "$var <= {$db->addQuotes( $end )}";
+               } else {
+                       return "$var BETWEEN {$db->addQuotes( $start )} AND {$db->addQuotes( $end )}";
+               }
        }
 }
 
index 88d9f87..f6245f2 100755 (executable)
@@ -39,10 +39,13 @@ fi
 # * the Apex theme files,
 # * the minimised distribution files, and
 # * the RTL sheets for non-CSSJanus environments
+# * the raster- and vector-only distribution sheets
 rsync --force --recursive --delete \
        --exclude '*apex*' \
        --exclude 'oojs-ui*.min.*' \
        --exclude 'oojs-ui*.rtl.css' \
+       --exclude 'oojs-ui*.raster.css' \
+       --exclude 'oojs-ui*.vector.css' \
        ./node_modules/oojs-ui/dist/ "$REPO_DIR/$TARGET_DIR" || exit 1
 
 # Clean up temporary area
index 6abfb66..3864e3c 100644 (file)
@@ -23,6 +23,8 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * Maintenance script that runs pending jobs.
  *
@@ -68,7 +70,7 @@ class RunJobs extends Maintenance {
 
                $json = ( $this->getOption( 'result' ) === 'json' );
 
-               $runner = new JobRunner( MWLoggerFactory::getInstance( 'runJobs' ) );
+               $runner = new JobRunner( LoggerFactory::getInstance( 'runJobs' ) );
                if ( !$json ) {
                        $runner->setDebugHandler( array( $this, 'debugInternal' ) );
                }
index a9f7d8b..9e9ad32 100644 (file)
@@ -58,6 +58,9 @@ class ShowJobs extends Maintenance {
                                foreach ( $queue->getAllDelayedJobs() as $job ) {
                                        $this->output( $job->toString() . " status=delayed\n" );
                                }
+                               foreach ( $queue->getAllAbandonedJobs() as $job ) {
+                                       $this->output( $job->toString() . " status=abandoned\n" );
+                               }
                        }
                } elseif ( $this->hasOption( 'group' ) ) {
                        foreach ( $group->getQueueTypes() as $type ) {
index 5c0fd07..e173190 100644 (file)
@@ -59,7 +59,7 @@ class Sqlite {
                        'blob', // NULL type is omitted intentionally
                ) );
 
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                try {
                        foreach ( $files as $file ) {
                                $err = $db->sourceFile( $file );
index edc9e14..7e02a4b 100644 (file)
@@ -81,7 +81,7 @@ class SqliteMaintenance extends Maintenance {
        }
 
        private function vacuum() {
-               $prevSize = filesize( $this->db->mDatabaseFile );
+               $prevSize = filesize( $this->db->getDbFilePath() );
                if ( $prevSize == 0 ) {
                        $this->error( "Can't vacuum an empty database.\n", true );
                }
@@ -89,7 +89,7 @@ class SqliteMaintenance extends Maintenance {
                $this->output( 'VACUUM: ' );
                if ( $this->db->query( 'VACUUM' ) ) {
                        clearstatcache();
-                       $newSize = filesize( $this->db->mDatabaseFile );
+                       $newSize = filesize( $this->db->getDbFilePath() );
                        $this->output( sprintf( "Database size was %d, now %d (%.1f%% reduction).\n",
                                $prevSize, $newSize, ( $prevSize - $newSize ) * 100.0 / $prevSize ) );
                } else {
@@ -115,7 +115,7 @@ class SqliteMaintenance extends Maintenance {
        private function backup( $fileName ) {
                $this->output( "Backing up database:\n   Locking..." );
                $this->db->query( 'BEGIN IMMEDIATE TRANSACTION', __METHOD__ );
-               $ourFile = $this->db->mDatabaseFile;
+               $ourFile = $this->db->getDbFilePath();
                $this->output( "   Copying database file $ourFile to $fileName... " );
                wfSuppressWarnings( false );
                if ( !copy( $ourFile, $fileName ) ) {
diff --git a/maintenance/sqlite/archives/patch-editsummary-length.sql b/maintenance/sqlite/archives/patch-editsummary-length.sql
new file mode 100644 (file)
index 0000000..f86b2ad
--- /dev/null
@@ -0,0 +1,65 @@
+CREATE TABLE /*_*/filearchive_tmp (
+  -- Unique row id
+  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+
+  -- Original base filename; key to image.img_name, page.page_title, etc
+  fa_name varchar(255) binary NOT NULL default '',
+
+  -- Filename of archived file, if an old revision
+  fa_archive_name varchar(255) binary default '',
+
+  -- Which storage bin (directory tree or object store) the file data
+  -- is stored in. Should be 'deleted' for files that have been deleted;
+  -- any other bin is not yet in use.
+  fa_storage_group varbinary(16),
+
+  -- SHA-1 of the file contents plus extension, used as a key for storage.
+  -- eg 8f8a562add37052a1848ff7771a2c515db94baa9.jpg
+  --
+  -- If NULL, the file was missing at deletion time or has been purged
+  -- from the archival storage.
+  fa_storage_key varbinary(64) default '',
+
+  -- Deletion information, if this file is deleted.
+  fa_deleted_user int,
+  fa_deleted_timestamp binary(14) default '',
+  fa_deleted_reason varbinary(767) default '',
+  -- Duped fields from image
+  fa_size int unsigned default 0,
+  fa_width int default 0,
+  fa_height int default 0,
+  fa_metadata mediumblob,
+  fa_bits int default 0,
+  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
+  fa_minor_mime varbinary(100) default "unknown",
+  fa_description varbinary(767),
+  fa_user int unsigned default 0,
+  fa_user_text varchar(255) binary,
+  fa_timestamp binary(14) default '',
+
+  -- Visibility of deleted revisions, bitfield
+  fa_deleted tinyint unsigned NOT NULL default 0,
+
+  -- sha1 hash of file content
+  fa_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+
+
+INSERT INTO /*_*/filearchive_tmp
+       SELECT fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key, fa_deleted_user, fa_deleted_timestamp,
+       fa_deleted_reason, fa_size, fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
+       fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp, fa_deleted, fa_sha1
+               FROM /*_*/filearchive;
+
+DROP TABLE /*_*/filearchive;
+
+ALTER TABLE /*_*/filearchive_tmp RENAME TO /*_*/filearchive;
+
+
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
+CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
+CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
+CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1(10));
+
index eb7eca1..3562df6 100644 (file)
@@ -22,6 +22,8 @@
  * @ingroup Maintenance ExternalStorage
  */
 
+use MediaWiki\Logger\LegacyLogger;
+
 $optionsWithArgs = RecompressTracked::getOptionsWithArgs();
 require __DIR__ . '/../commandLine.inc';
 
@@ -141,7 +143,7 @@ class RecompressTracked {
                        $header .= "({$this->slaveId})";
                }
                $header .= ' ' . wfWikiID();
-               MWLoggerLegacyLogger::emit( sprintf( "%-50s %s\n", $header, $msg ), $file );
+               LegacyLogger::emit( sprintf( "%-50s %s\n", $header, $msg ), $file );
        }
 
        /**
index cc6a169..de36d26 100644 (file)
@@ -182,7 +182,7 @@ CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg
 --
 CREATE TABLE /*_*/user_newtalk (
   -- Key to user.user_id
-  user_id int NOT NULL default 0,
+  user_id int unsigned NOT NULL default 0,
   -- If the user is an anonymous user their IP address is stored here
   -- since the user_id of 0 is ambiguous
   user_ip varbinary(40) NOT NULL default '',
@@ -304,7 +304,7 @@ CREATE TABLE /*_*/revision (
   -- Text comment summarizing the change.
   -- This text is shown in the history and other changes lists,
   -- rendered in a subset of wiki markup by Linker::formatComment()
-  rev_comment tinyblob NOT NULL,
+  rev_comment varbinary(767) NOT NULL,
 
   -- Key to user.user_id of the user who made this edit.
   -- Stores 0 for anonymous edits and for some mass imports.
@@ -411,7 +411,7 @@ CREATE TABLE /*_*/archive (
   ar_text mediumblob NOT NULL,
 
   -- Basic revision stuff...
-  ar_comment tinyblob NOT NULL,
+  ar_comment varbinary(767) NOT NULL,
   ar_user int unsigned NOT NULL default 0,
   ar_user_text varchar(255) binary NOT NULL,
   ar_timestamp binary(14) NOT NULL default '',
@@ -748,7 +748,7 @@ CREATE TABLE /*_*/ipblocks (
   ipb_by_text varchar(255) binary NOT NULL default '',
 
   -- Text comment made by blocker.
-  ipb_reason tinyblob NOT NULL,
+  ipb_reason varbinary(767) NOT NULL,
 
   -- Creation (or refresh) date in standard YMDHMS form.
   -- IP blocks expire automatically.
@@ -846,7 +846,7 @@ CREATE TABLE /*_*/image (
 
   -- Description field as entered by the uploader.
   -- This is displayed in image upload history and logs.
-  img_description tinyblob NOT NULL,
+  img_description varbinary(767) NOT NULL,
 
   -- user_id and user_name of uploader.
   img_user int unsigned NOT NULL default 0,
@@ -888,7 +888,7 @@ CREATE TABLE /*_*/oldimage (
   oi_width int NOT NULL default 0,
   oi_height int NOT NULL default 0,
   oi_bits int NOT NULL default 0,
-  oi_description tinyblob NOT NULL,
+  oi_description varbinary(767) NOT NULL,
   oi_user int unsigned NOT NULL default 0,
   oi_user_text varchar(255) binary NOT NULL,
   oi_timestamp binary(14) NOT NULL default '',
@@ -936,7 +936,7 @@ CREATE TABLE /*_*/filearchive (
   -- Deletion information, if this file is deleted.
   fa_deleted_user int,
   fa_deleted_timestamp binary(14) default '',
-  fa_deleted_reason text,
+  fa_deleted_reason varbinary(767) default '',
 
   -- Duped fields from image
   fa_size int unsigned default 0,
@@ -947,7 +947,7 @@ CREATE TABLE /*_*/filearchive (
   fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
   fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
   fa_minor_mime varbinary(100) default "unknown",
-  fa_description tinyblob,
+  fa_description varbinary(767),
   fa_user int unsigned default 0,
   fa_user_text varchar(255) binary,
   fa_timestamp binary(14) default '',
@@ -1045,7 +1045,7 @@ CREATE TABLE /*_*/recentchanges (
   rc_title varchar(255) binary NOT NULL default '',
 
   -- as in revision...
-  rc_comment varchar(255) binary NOT NULL default '',
+  rc_comment varbinary(767) NOT NULL default '',
   rc_minor tinyint unsigned NOT NULL default 0,
 
   -- Edits by user accounts with the 'bot' rights key are
@@ -1253,7 +1253,7 @@ CREATE TABLE /*_*/logging (
   log_page int unsigned NULL,
 
   -- Freeform text. Interpreted as edit history comments.
-  log_comment varchar(255) NOT NULL default '',
+  log_comment varbinary(767) NOT NULL default '',
 
   -- miscellaneous parameters:
   -- LF separated list (old system) or serialized PHP array (new system)
@@ -1412,7 +1412,7 @@ CREATE TABLE /*_*/protected_titles (
   pt_namespace int NOT NULL,
   pt_title varchar(255) binary NOT NULL,
   pt_user int unsigned NOT NULL,
-  pt_reason tinyblob,
+  pt_reason varbinary(767),
   pt_timestamp binary(14) NOT NULL,
   pt_expiry varbinary(14) NOT NULL default '',
   pt_create_perm varbinary(60) NOT NULL
index 182a2c4..0fd1fd8 100755 (executable)
@@ -151,7 +151,7 @@ class UpdateMediaWiki extends Maintenance {
 
                $this->output( "Going to run database updates for " . wfWikiID() . "\n" );
                if ( $db->getType() === 'sqlite' ) {
-                       $this->output( "Using SQLite file: '{$db->mDatabaseFile}'\n" );
+                       $this->output( "Using SQLite file: '{$db->getDbFilePath()}'\n" );
                }
                $this->output( "Depending on the size of your database this may take a while!\n" );
 
@@ -161,7 +161,7 @@ class UpdateMediaWiki extends Maintenance {
                        wfCountDown( 5 );
                }
 
-               $time1 = new MWTimestamp();
+               $time1 = microtime( true );
 
                $shared = $this->hasOption( 'doshared' );
 
@@ -197,9 +197,10 @@ class UpdateMediaWiki extends Maintenance {
                        $updater->purgeCache();
                }
 
-               $time2 = new MWTimestamp();
-               $timeDiff = $time2->diff( $time1 );
-               $this->output( "\nDone in " . $timeDiff->format( "%i:%S" ) . ".\n" );
+               $time2 = microtime( true );
+
+               $timeDiff = $wgLang->formatTimePeriod( $time2 - $time1 );
+               $this->output( "\nDone in $timeDiff.\n" );
        }
 
        function afterFinalSetup() {
index 5758152..40b3dde 100644 (file)
@@ -38,7 +38,7 @@ Then add the following to the bottom of this file:
 class MyLocalSettingsGenerator extends LocalSettingsGenerator {
        function getText() {
                // Modify an existing setting
-               $this->values['wgResourceLoaderMaxQueryLength'] = 512;
+               $this->values['wgDefaultSkin'] = 'vector';
                // add a new setting
                $ls = parent::getText();
                return $ls . "\n\$wgUseTex = true;\n";
index 4ef12ba..fc2bd3a 100644 (file)
@@ -2,11 +2,15 @@
   "name": "mediawiki",
   "version": "0.0.0",
   "scripts": {
-    "test": "grunt test"
+    "test": "grunt test",
+    "doc": "jsduck",
+    "postdoc": "grunt copy:jsduck"
   },
   "devDependencies": {
     "grunt": "0.4.5",
-    "grunt-banana-checker": "0.2.0",
+    "grunt-cli": "0.1.13",
+    "grunt-banana-checker": "0.2.1",
+    "grunt-contrib-copy": "0.8.0",
     "grunt-contrib-jshint": "0.11.0",
     "grunt-contrib-watch": "0.6.1",
     "grunt-jscs": "1.5.0",
index 233485c..e56d557 100644 (file)
@@ -29,12 +29,19 @@ return array(
        /**
         * Special modules who have their own classes
         */
+       'startup' => array( 'class' => 'ResourceLoaderStartUpModule' ),
 
        // Scripts managed by the local wiki (stored in the MediaWiki namespace)
        'site' => array( 'class' => 'ResourceLoaderSiteModule' ),
-       'noscript' => array( 'class' => 'ResourceLoaderNoscriptModule' ),
-       'startup' => array( 'class' => 'ResourceLoaderStartUpModule' ),
-       'filepage' => array( 'class' => 'ResourceLoaderFilePageModule' ),
+       'noscript' => array(
+               'class' => 'ResourceLoaderWikiModule',
+               'styles' => array( 'MediaWiki:Noscript.css' ),
+               'group' => 'noscript',
+       ),
+       'filepage' => array(
+               'class' => 'ResourceLoaderWikiModule',
+               'styles' => array( 'MediaWiki:Filepage.css' ),
+       ),
        'user.groups' => array( 'class' => 'ResourceLoaderUserGroupsModule' ),
 
        // Scripts managed by the current user (stored in their user space)
@@ -178,7 +185,7 @@ return array(
                'styles' => 'resources/lib/jquery.chosen/chosen.css',
        ),
        'jquery.client' => array(
-               'scripts' => 'resources/src/jquery/jquery.client.js',
+               'scripts' => 'resources/lib/jquery.client/jquery.client.js',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.color' => array(
@@ -765,8 +772,10 @@ return array(
        /* MediaWiki */
 
        'mediawiki' => array(
+               // Keep maintenance/jsduck/eg-iframe.html in sync
                'scripts' => array(
                        'resources/src/mediawiki/mediawiki.js',
+                       'resources/src/mediawiki/mediawiki.errorLogger.js',
                        'resources/src/mediawiki/mediawiki.startUp.js',
                ),
                'debugScripts' => 'resources/src/mediawiki/mediawiki.log.js',
@@ -776,15 +785,20 @@ return array(
        'mediawiki.apihelp' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.apihelp.css',
                'targets' => array( 'desktop' ),
-               'dependencies' => array(
-                       'mediawiki.hlist',
-               ),
+               'dependencies' => 'mediawiki.hlist',
                'position' => 'top',
        ),
        'mediawiki.template' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.template.js',
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.template.mustache' => array(
+               'scripts' => array(
+                       'resources/lib/mustache/mustache.js',
+                       'resources/src/mediawiki/mediawiki.template.mustache.js',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.apipretty' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css',
                'targets' => array( 'desktop', 'mobile' ),
@@ -809,12 +823,16 @@ return array(
                        'mediawiki.Title',
                        'user.tokens',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.api.login' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.login.js',
-               'dependencies' => array(
-                       'mediawiki.api',
-               ),
+               'dependencies' => 'mediawiki.api',
+       ),
+       'mediawiki.api.options' => array(
+               'scripts' => 'resources/src/mediawiki.api/mediawiki.api.options.js',
+               'dependencies' => 'mediawiki.api',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.api.parse' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.parse.js',
@@ -834,6 +852,7 @@ return array(
                'scripts' => array(
                        'resources/src/mediawiki/mediawiki.confirmCloseWindow.js',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.debug' => array(
                'scripts' => array(
@@ -856,47 +875,64 @@ return array(
                'position' => 'bottom',
        ),
        'mediawiki.feedback' => array(
-               'templates' => array(
-                       'dialog.html' => 'resources/src/mediawiki/templates/dialog.html',
-               ),
                'scripts' => 'resources/src/mediawiki/mediawiki.feedback.js',
                'styles' => 'resources/src/mediawiki/mediawiki.feedback.css',
                'dependencies' => array(
-                       'mediawiki.api.edit',
+                       'mediawiki.messagePoster',
                        'mediawiki.Title',
-                       'mediawiki.jqueryMsg',
-                       'jquery.ui.dialog',
+                       'oojs-ui',
                ),
                'messages' => array(
+                       'feedback-adding',
+                       'feedback-back',
+                       'feedback-bugcheck',
+                       'feedback-dialog-intro',
+                       'feedback-external-bug-report-button',
+                       'feedback-bugnew',
                        'feedback-bugornote',
-                       'feedback-subject',
-                       'feedback-message',
                        'feedback-cancel',
-                       'feedback-submit',
-                       'feedback-adding',
+                       'feedback-close',
+                       'feedback-dialog-title',
+                       'feedback-error-title',
                        'feedback-error1',
                        'feedback-error2',
                        'feedback-error3',
+                       'feedback-error4',
+                       'feedback-message',
+                       'feedback-subject',
+                       'feedback-submit',
+                       'feedback-terms',
+                       'feedback-termsofuse',
                        'feedback-thanks',
-                       'feedback-close',
-                       'feedback-bugcheck',
-                       'feedback-bugnew',
+                       'feedback-thanks-title',
+                       'feedback-useragent'
                ),
        ),
-       'mediawiki.hidpi' => array(
-               'scripts' => 'resources/src/mediawiki/mediawiki.hidpi.js',
+
+       'mediawiki.filewarning' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.filewarning.js',
+               'styles' => 'resources/src/mediawiki/mediawiki.filewarning.less',
                'dependencies' => array(
-                       'jquery.hidpi',
+                       'oojs-ui',
                ),
+       ),
+
+       'mediawiki.helplink' => array(
+               'styles' => array(
+                       'resources/src/mediawiki/mediawiki.helplink.less',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'mediawiki.hidpi' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.hidpi.js',
+               'dependencies' => 'jquery.hidpi',
                'skipFunction' => 'resources/src/mediawiki.hidpi-skip.js',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.hlist' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.hlist.css',
                'scripts' => 'resources/src/mediawiki/mediawiki.hlist.js',
-               'dependencies' => array(
-                       'jquery.client',
-               ),
+               'dependencies' => 'jquery.client',
        ),
        'mediawiki.htmlform' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.htmlform.js',
@@ -921,6 +957,27 @@ return array(
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.messagePoster' => array(
+               'scripts' => array(
+                       'resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js',
+                       'resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js',
+               ),
+               'dependencies' => array(
+                       'oojs',
+                       'mediawiki.api',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'mediawiki.messagePoster.wikitext' => array(
+               'scripts' => array(
+                       'resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js',
+               ),
+               'dependencies' => array(
+                       'mediawiki.api.edit',
+                       'mediawiki.messagePoster',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.notification' => array(
                'styles' => array(
                        'resources/src/mediawiki/mediawiki.notification.css',
@@ -928,9 +985,7 @@ return array(
                                => array( 'media' => 'print' ),
                ),
                'scripts' => 'resources/src/mediawiki/mediawiki.notification.js',
-               'dependencies' => array(
-                       'mediawiki.page.startup',
-               ),
+               'dependencies' => 'mediawiki.page.startup',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.notify' => array(
@@ -956,6 +1011,11 @@ return array(
                        'mediawiki.api',
                ),
        ),
+       'mediawiki.sectionAnchor' => array(
+               // Back-compat to hide it on cached pages (T18691; Ie9e334e973; 2015-03-17)
+               'styles' => 'resources/src/mediawiki/mediawiki.sectionAnchor.css',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.Title' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.Title.js',
                'dependencies' => array(
@@ -966,9 +1026,7 @@ return array(
        ),
        'mediawiki.toc' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.toc.js',
-               'dependencies' => array(
-                       'jquery.cookie',
-               ),
+               'dependencies' => 'jquery.cookie',
                'messages' => array( 'showtoc', 'hidetoc' ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -1006,9 +1064,7 @@ return array(
        ),
        'mediawiki.cookie' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.cookie.js',
-               'dependencies' => array(
-                       'jquery.cookie',
-               ),
+               'dependencies' => 'jquery.cookie',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.toolbar' => array(
@@ -1055,10 +1111,19 @@ return array(
                        'mediawiki.jqueryMsg',
                ),
                'messages' => array(
+                       // Keep the uses message keys in sync with EditPage#setHeaders
+                       'creating',
+                       'editconflict',
+                       'editing',
+                       'editingcomment',
+                       'editingsection',
+                       'pagetitle',
                        'otherlanguages',
                        'tooltip-p-lang',
                        'summary-preview',
+                       'subject-preview',
                        'parentheses',
+                       'previewerrortext',
                ),
        ),
        'mediawiki.action.edit.stash' => array(
@@ -1099,6 +1164,10 @@ return array(
                        'metadata-collapse',
                ),
        ),
+       'mediawiki.action.view.categoryPage.styles' => array(
+               'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less',
+               'targets' => array( 'desktop', 'mobile' )
+       ),
        'mediawiki.action.view.postEdit' => array(
                'templates' => array(
                        'postEdit.html' => 'resources/src/mediawiki.action/templates/postEdit.html',
@@ -1117,9 +1186,7 @@ return array(
        ),
        'mediawiki.action.view.redirect' => array(
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.redirect.js',
-               'dependencies' => array(
-                       'jquery.client',
-               ),
+               'dependencies' => 'jquery.client',
                'position' => 'top',
        ),
        'mediawiki.action.view.redirectPage' => array(
@@ -1217,6 +1284,10 @@ return array(
 
        'mediawiki.language.names' => array( 'class' => 'ResourceLoaderLanguageNamesModule' ),
 
+       'mediawiki.language.specialCharacters' => array(
+               'class' => 'ResourceLoaderSpecialCharacterDataModule'
+       ),
+
        /* MediaWiki Libs */
 
        'mediawiki.libs.jpegmeta' => array(
@@ -1244,9 +1315,7 @@ return array(
        ),
        'mediawiki.page.startup' => array(
                'scripts' => 'resources/src/mediawiki.page/mediawiki.page.startup.js',
-               'dependencies' => array(
-                       'mediawiki.util',
-               ),
+               'dependencies' => 'mediawiki.util',
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -1305,16 +1374,12 @@ return array(
        'mediawiki.special.block' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.block.js',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.block.css',
-               'dependencies' => array(
-                       'mediawiki.util',
-               ),
+               'dependencies' => 'mediawiki.util',
        ),
        'mediawiki.special.changeemail' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.changeemail.js',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeemail.css',
-               'dependencies' => array(
-                       'mediawiki.util',
-               ),
+               'dependencies' => 'mediawiki.util',
                'messages' => array(
                        'email-address-validity-valid',
                        'email-address-validity-invalid',
@@ -1360,11 +1425,12 @@ return array(
                ),
                'dependencies' => array(
                        'mediawiki.language',
+                       'mediawiki.confirmCloseWindow',
                ),
        ),
        'mediawiki.special.recentchanges' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.recentchanges.js',
-               'dependencies' => array( 'mediawiki.special' ),
+               'dependencies' => 'mediawiki.special',
                'position' => 'top',
        ),
        'mediawiki.special.search' => array(
@@ -1472,9 +1538,7 @@ return array(
                        'colon-separator',
                        'javascripttest-pagetext-skins',
                ) ),
-               'dependencies' => array(
-                       'mediawiki.Uri',
-               ),
+               'dependencies' => 'mediawiki.Uri',
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -1508,9 +1572,7 @@ return array(
        ),
        'mediawiki.legacy.protect' => array(
                'scripts' => 'resources/src/mediawiki.legacy/protect.js',
-               'dependencies' => array(
-                       'jquery.byteLimit',
-               ),
+               'dependencies' => 'jquery.byteLimit',
                'messages' => array( 'protect-unchain-permissions' )
        ),
        'mediawiki.legacy.shared' => array(
@@ -1526,9 +1588,7 @@ return array(
        ),
        'mediawiki.legacy.wikibits' => array(
                'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
-               'dependencies' => array(
-                       'mediawiki.util',
-               ),
+               'dependencies' => 'mediawiki.util',
                'position' => 'top',
        ),
 
@@ -1667,8 +1727,123 @@ return array(
        'oojs-ui.styles' => array(
                'position' => 'top',
                'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css',
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki.css',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+
+       // FIXME: This is a bit of a mess; T92551 requests fixing
+       'oojs-ui.styles.icons-alerts' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-content' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-editing-advanced' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-editing-core' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-editing-list' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-editing-styling' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-interactions' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css',
                ),
+               'dependencies' => array( 'oojs-ui.styles' ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'oojs-ui.styles.icons-layout' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-location' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-media' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-moderation' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-movement' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-user' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'oojs-ui.styles.icons-wikimedia' => array(
+               'position' => 'top',
+               'skinStyles' => array(
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css',
+               ),
+               'dependencies' => array( 'oojs-ui.styles' ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+
 );
diff --git a/resources/lib/jquery.client/AUTHORS.txt b/resources/lib/jquery.client/AUTHORS.txt
new file mode 100644 (file)
index 0000000..9f186ca
--- /dev/null
@@ -0,0 +1,9 @@
+Trevor Parscal <trevorparscal@gmail.com>
+Timo Tijhof <krinklemail@gmail.com>
+Roan Kattouw <roan.kattouw@gmail.com>
+Derk-Jan Hartman <hartman.wiki@gmail.com>
+Bartosz Dziewoński <matma.rex@gmail.com>
+Rob Moen <rmoen@wikimedia.org>
+Ed Sanders <esanders@wikimedia.org>
+Alex Monk <krenair@gmail.com>
+James D. Forrester <jforrester@wikimedia.org>
diff --git a/resources/lib/jquery.client/LICENSE-MIT.txt b/resources/lib/jquery.client/LICENSE-MIT.txt
new file mode 100644 (file)
index 0000000..f149289
--- /dev/null
@@ -0,0 +1,20 @@
+Copyright 2010-2015 jquery-client maintainers and other contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/resources/lib/jquery.client/README.md b/resources/lib/jquery.client/README.md
new file mode 100644 (file)
index 0000000..02b5dd4
--- /dev/null
@@ -0,0 +1,6 @@
+[![Build Status](https://travis-ci.org/wikimedia/jquery-client.svg?branch=master)](https://travis-ci.org/wikimedia/jquery-client) [![npm](https://img.shields.io/npm/v/jquery-client.svg?style=flat)](https://www.npmjs.com/package/jquery-client)
+
+jQuery Client
+=================
+
+jQuery Client is a jQuery plugin for user-agent detection.
diff --git a/resources/lib/jquery.client/jquery.client.js b/resources/lib/jquery.client/jquery.client.js
new file mode 100644 (file)
index 0000000..1560c7d
--- /dev/null
@@ -0,0 +1,317 @@
+/*!
+ * jQuery Client v1.0.0
+ * https://www.mediawiki.org/wiki/JQuery_Client
+ *
+ * Copyright 2010-2015 jquery-client maintainers and other contributors.
+ * Released under the MIT license
+ * http://jquery-client.mit-license.org
+ */
+
+/**
+ * User-agent detection
+ *
+ * @class jQuery.client
+ * @singleton
+ */
+( function ( $ ) {
+
+       /**
+        * @private
+        * @property {Object} profileCache Keyed by userAgent string,
+        * value is the parsed $.client.profile object for that user agent.
+        */
+       var profileCache = {};
+
+       $.client = {
+
+               /**
+                * Get an object containing information about the client.
+                *
+                * @param {Object} [nav] An object with a 'userAgent' and 'platform' property.
+                *  Defaults to the global `navigator` object.
+                * @return {Object} The resulting client object will be in the following format:
+                *
+                *     {
+                *         'name': 'firefox',
+                *         'layout': 'gecko',
+                *         'layoutVersion': 20101026,
+                *         'platform': 'linux'
+                *         'version': '3.5.1',
+                *         'versionBase': '3',
+                *         'versionNumber': 3.5,
+                *     }
+                */
+               profile: function ( nav ) {
+                       /*jshint boss:true */
+
+                       if ( nav === undefined ) {
+                               nav = window.navigator;
+                       }
+
+                       // Use the cached version if possible
+                       if ( profileCache[ nav.userAgent + '|' + nav.platform ] !== undefined ) {
+                               return profileCache[ nav.userAgent + '|' + nav.platform ];
+                       }
+
+                       var
+                               versionNumber,
+                               key = nav.userAgent + '|' + nav.platform,
+
+                               // Configuration
+
+                               // Name of browsers or layout engines we don't recognize
+                               uk = 'unknown',
+                               // Generic version digit
+                               x = 'x',
+                               // Strings found in user agent strings that need to be conformed
+                               wildUserAgents = ['Opera', 'Navigator', 'Minefield', 'KHTML', 'Chrome', 'PLAYSTATION 3', 'Iceweasel'],
+                               // Translations for conforming user agent strings
+                               userAgentTranslations = [
+                                       // Tons of browsers lie about being something they are not
+                                       [/(Firefox|MSIE|KHTML,?\slike\sGecko|Konqueror)/, ''],
+                                       // Chrome lives in the shadow of Safari still
+                                       ['Chrome Safari', 'Chrome'],
+                                       // KHTML is the layout engine not the browser - LIES!
+                                       ['KHTML', 'Konqueror'],
+                                       // Firefox nightly builds
+                                       ['Minefield', 'Firefox'],
+                                       // This helps keep different versions consistent
+                                       ['Navigator', 'Netscape'],
+                                       // This prevents version extraction issues, otherwise translation would happen later
+                                       ['PLAYSTATION 3', 'PS3']
+                               ],
+                               // Strings which precede a version number in a user agent string - combined and used as
+                               // match 1 in version detection
+                               versionPrefixes = [
+                                       'camino', 'chrome', 'firefox', 'iceweasel', 'netscape', 'netscape6', 'opera', 'version', 'konqueror',
+                                       'lynx', 'msie', 'safari', 'ps3', 'android'
+                               ],
+                               // Used as matches 2, 3 and 4 in version extraction - 3 is used as actual version number
+                               versionSuffix = '(\\/|\\;?\\s|)([a-z0-9\\.\\+]*?)(\\;|dev|rel|\\)|\\s|$)',
+                               // Names of known browsers
+                               names = [
+                                       'camino', 'chrome', 'firefox', 'iceweasel', 'netscape', 'konqueror', 'lynx', 'msie', 'opera',
+                                       'safari', 'ipod', 'iphone', 'blackberry', 'ps3', 'rekonq', 'android'
+                               ],
+                               // Tanslations for conforming browser names
+                               nameTranslations = [],
+                               // Names of known layout engines
+                               layouts = ['gecko', 'konqueror', 'msie', 'trident', 'edge', 'opera', 'webkit'],
+                               // Translations for conforming layout names
+                               layoutTranslations = [ ['konqueror', 'khtml'], ['msie', 'trident'], ['opera', 'presto'] ],
+                               // Names of supported layout engines for version number
+                               layoutVersions = ['applewebkit', 'gecko', 'trident', 'edge'],
+                               // Names of known operating systems
+                               platforms = ['win', 'wow64', 'mac', 'linux', 'sunos', 'solaris', 'iphone'],
+                               // Translations for conforming operating system names
+                               platformTranslations = [ ['sunos', 'solaris'], ['wow64', 'win'] ],
+
+                               /**
+                                * Performs multiple replacements on a string
+                                * @ignore
+                                */
+                               translate = function ( source, translations ) {
+                                       var i;
+                                       for ( i = 0; i < translations.length; i++ ) {
+                                               source = source.replace( translations[i][0], translations[i][1] );
+                                       }
+                                       return source;
+                               },
+
+                               // Pre-processing
+
+                               ua = nav.userAgent,
+                               match,
+                               name = uk,
+                               layout = uk,
+                               layoutversion = uk,
+                               platform = uk,
+                               version = x;
+
+                       if ( match = new RegExp( '(' + wildUserAgents.join( '|' ) + ')' ).exec( ua ) ) {
+                               // Takes a userAgent string and translates given text into something we can more easily work with
+                               ua = translate( ua, userAgentTranslations );
+                       }
+                       // Everything will be in lowercase from now on
+                       ua = ua.toLowerCase();
+
+                       // Extraction
+
+                       if ( match = new RegExp( '(' + names.join( '|' ) + ')' ).exec( ua ) ) {
+                               name = translate( match[1], nameTranslations );
+                       }
+                       if ( match = new RegExp( '(' + layouts.join( '|' ) + ')' ).exec( ua ) ) {
+                               layout = translate( match[1], layoutTranslations );
+                       }
+                       if ( match = new RegExp( '(' + layoutVersions.join( '|' ) + ')\\\/(\\d+)').exec( ua ) ) {
+                               layoutversion = parseInt( match[2], 10 );
+                       }
+                       if ( match = new RegExp( '(' + platforms.join( '|' ) + ')' ).exec( nav.platform.toLowerCase() ) ) {
+                               platform = translate( match[1], platformTranslations );
+                       }
+                       if ( match = new RegExp( '(' + versionPrefixes.join( '|' ) + ')' + versionSuffix ).exec( ua ) ) {
+                               version = match[3];
+                       }
+
+                       // Edge Cases -- did I mention about how user agent string lie?
+
+                       // Decode Safari's crazy 400+ version numbers
+                       if ( name === 'safari' && version > 400 ) {
+                               version = '2.0';
+                       }
+                       // Expose Opera 10's lies about being Opera 9.8
+                       if ( name === 'opera' && version >= 9.8 ) {
+                               match = ua.match( /\bversion\/([0-9\.]*)/ );
+                               if ( match && match[1] ) {
+                                       version = match[1];
+                               } else {
+                                       version = '10';
+                               }
+                       }
+                       // And Opera 15's lies about being Chrome
+                       if ( name === 'chrome' && ( match = ua.match( /\bopr\/([0-9\.]*)/ ) ) ) {
+                               if ( match[1] ) {
+                                       name = 'opera';
+                                       version = match[1];
+                               }
+                       }
+                       // And IE 11's lies about being not being IE
+                       if ( layout === 'trident' && layoutversion >= 7 && ( match = ua.match( /\brv[ :\/]([0-9\.]*)/ ) ) ) {
+                               if ( match[1] ) {
+                                       name = 'msie';
+                                       version = match[1];
+                               }
+                       }
+                       // And IE 12's different lies about not being IE
+                       if ( name === 'chrome' && ( match = ua.match( /\bedge\/([0-9\.]*)/ ) ) ) {
+                               name = 'msie';
+                               version = match[1];
+                               layout = 'edge';
+                               layoutversion = parseInt( match[1], 10 );
+                       }
+                       // And Amazon Silk's lies about being Android on mobile or Safari on desktop
+                       if ( match = ua.match( /\bsilk\/([0-9.\-_]*)/ ) ) {
+                               if ( match[1] ) {
+                                       name = 'silk';
+                                       version = match[1];
+                               }
+                       }
+
+                       versionNumber = parseFloat( version, 10 ) || 0.0;
+
+                       // Caching
+
+                       return profileCache[ key  ] = {
+                               name: name,
+                               layout: layout,
+                               layoutVersion: layoutversion,
+                               platform: platform,
+                               version: version,
+                               versionBase: ( version !== x ? Math.floor( versionNumber ).toString() : x ),
+                               versionNumber: versionNumber
+                       };
+               },
+
+               /**
+                * Checks the current browser against a support map object.
+                *
+                * Version numbers passed as numeric values will be compared like numbers (1.2 > 1.11).
+                * Version numbers passed as string values will be compared using a simple component-wise
+                * algorithm, similar to PHP's version_compare ('1.2' < '1.11').
+                *
+                * A browser map is in the following format:
+                *
+                *     {
+                *         // Multiple rules with configurable operators
+                *         'msie': [['>=', 7], ['!=', 9]],
+                *         // Match no versions
+                *         'iphone': false,
+                *         // Match any version
+                *         'android': null
+                *     }
+                *
+                * It can optionally be split into ltr/rtl sections:
+                *
+                *     {
+                *         'ltr': {
+                *             'android': null,
+                *             'iphone': false
+                *         },
+                *         'rtl': {
+                *             'android': false,
+                *             // rules are not inherited from ltr
+                *             'iphone': false
+                *         }
+                *     }
+                *
+                * @param {Object} map Browser support map
+                * @param {Object} [profile] A client-profile object
+                * @param {boolean} [exactMatchOnly=false] Only return true if the browser is matched, otherwise
+                * returns true if the browser is not found.
+                *
+                * @return {boolean} The current browser is in the support map
+                */
+               test: function ( map, profile, exactMatchOnly ) {
+                       /*jshint evil:true */
+
+                       var conditions, dir, i, op, val, j, pieceVersion, pieceVal, compare;
+                       profile = $.isPlainObject( profile ) ? profile : $.client.profile();
+                       if ( map.ltr && map.rtl ) {
+                               dir = $( 'body' ).is( '.rtl' ) ? 'rtl' : 'ltr';
+                               map = map[dir];
+                       }
+                       // Check over each browser condition to determine if we are running in a compatible client
+                       if ( typeof map !== 'object' || map[profile.name] === undefined ) {
+                               // Not found, return true if exactMatchOnly not set, false otherwise
+                               return !exactMatchOnly;
+                       }
+                       conditions = map[profile.name];
+                       if ( conditions === false ) {
+                               // Match no versions
+                               return false;
+                       }
+                       if ( conditions === null ) {
+                               // Match all versions
+                               return true;
+                       }
+                       for ( i = 0; i < conditions.length; i++ ) {
+                               op = conditions[i][0];
+                               val = conditions[i][1];
+                               if ( typeof val === 'string' ) {
+                                       // Perform a component-wise comparison of versions, similar to PHP's version_compare
+                                       // but simpler. '1.11' is larger than '1.2'.
+                                       pieceVersion = profile.version.toString().split( '.' );
+                                       pieceVal = val.split( '.' );
+                                       // Extend with zeroes to equal length
+                                       while ( pieceVersion.length < pieceVal.length ) {
+                                               pieceVersion.push( '0' );
+                                       }
+                                       while ( pieceVal.length < pieceVersion.length ) {
+                                               pieceVal.push( '0' );
+                                       }
+                                       // Compare components
+                                       compare = 0;
+                                       for ( j = 0; j < pieceVersion.length; j++ ) {
+                                               if ( Number( pieceVersion[j] ) < Number( pieceVal[j] ) ) {
+                                                       compare = -1;
+                                                       break;
+                                               } else if ( Number( pieceVersion[j] ) > Number( pieceVal[j] ) ) {
+                                                       compare = 1;
+                                                       break;
+                                               }
+                                       }
+                                       // compare will be -1, 0 or 1, depending on comparison result
+                                       if ( !( eval( String( compare + op + '0' ) ) ) ) {
+                                               return false;
+                                       }
+                               } else if ( typeof val === 'number' ) {
+                                       if ( !( eval( 'profile.versionNumber' + op + val ) ) ) {
+                                               return false;
+                                       }
+                               }
+                       }
+
+                       return true;
+               }
+       };
+}( jQuery ) );
diff --git a/resources/lib/mustache/mustache.js b/resources/lib/mustache/mustache.js
new file mode 100644 (file)
index 0000000..dbc9823
--- /dev/null
@@ -0,0 +1,578 @@
+/*!
+ * mustache.js - Logic-less {{mustache}} templates with JavaScript
+ * http://github.com/janl/mustache.js
+ */
+
+/*global define: false*/
+
+(function (global, factory) {
+  if (typeof exports === "object" && exports) {
+    factory(exports); // CommonJS
+  } else if (typeof define === "function" && define.amd) {
+    define(['exports'], factory); // AMD
+  } else {
+    factory(global.Mustache = {}); // <script>
+  }
+}(this, function (mustache) {
+
+  var Object_toString = Object.prototype.toString;
+  var isArray = Array.isArray || function (object) {
+    return Object_toString.call(object) === '[object Array]';
+  };
+
+  function isFunction(object) {
+    return typeof object === 'function';
+  }
+
+  function escapeRegExp(string) {
+    return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+  }
+
+  // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577
+  // See https://github.com/janl/mustache.js/issues/189
+  var RegExp_test = RegExp.prototype.test;
+  function testRegExp(re, string) {
+    return RegExp_test.call(re, string);
+  }
+
+  var nonSpaceRe = /\S/;
+  function isWhitespace(string) {
+    return !testRegExp(nonSpaceRe, string);
+  }
+
+  var entityMap = {
+    "&": "&amp;",
+    "<": "&lt;",
+    ">": "&gt;",
+    '"': '&quot;',
+    "'": '&#39;',
+    "/": '&#x2F;'
+  };
+
+  function escapeHtml(string) {
+    return String(string).replace(/[&<>"'\/]/g, function (s) {
+      return entityMap[s];
+    });
+  }
+
+  var whiteRe = /\s*/;
+  var spaceRe = /\s+/;
+  var equalsRe = /\s*=/;
+  var curlyRe = /\s*\}/;
+  var tagRe = /#|\^|\/|>|\{|&|=|!/;
+
+  /**
+   * Breaks up the given `template` string into a tree of tokens. If the `tags`
+   * argument is given here it must be an array with two string values: the
+   * opening and closing tags used in the template (e.g. [ "<%", "%>" ]). Of
+   * course, the default is to use mustaches (i.e. mustache.tags).
+   *
+   * A token is an array with at least 4 elements. The first element is the
+   * mustache symbol that was used inside the tag, e.g. "#" or "&". If the tag
+   * did not contain a symbol (i.e. {{myValue}}) this element is "name". For
+   * all text that appears outside a symbol this element is "text".
+   *
+   * The second element of a token is its "value". For mustache tags this is
+   * whatever else was inside the tag besides the opening symbol. For text tokens
+   * this is the text itself.
+   *
+   * The third and fourth elements of the token are the start and end indices,
+   * respectively, of the token in the original template.
+   *
+   * Tokens that are the root node of a subtree contain two more elements: 1) an
+   * array of tokens in the subtree and 2) the index in the original template at
+   * which the closing tag for that section begins.
+   */
+  function parseTemplate(template, tags) {
+    if (!template)
+      return [];
+
+    var sections = [];     // Stack to hold section tokens
+    var tokens = [];       // Buffer to hold the tokens
+    var spaces = [];       // Indices of whitespace tokens on the current line
+    var hasTag = false;    // Is there a {{tag}} on the current line?
+    var nonSpace = false;  // Is there a non-space char on the current line?
+
+    // Strips all whitespace tokens array for the current line
+    // if there was a {{#tag}} on it and otherwise only space.
+    function stripSpace() {
+      if (hasTag && !nonSpace) {
+        while (spaces.length)
+          delete tokens[spaces.pop()];
+      } else {
+        spaces = [];
+      }
+
+      hasTag = false;
+      nonSpace = false;
+    }
+
+    var openingTagRe, closingTagRe, closingCurlyRe;
+    function compileTags(tags) {
+      if (typeof tags === 'string')
+        tags = tags.split(spaceRe, 2);
+
+      if (!isArray(tags) || tags.length !== 2)
+        throw new Error('Invalid tags: ' + tags);
+
+      openingTagRe = new RegExp(escapeRegExp(tags[0]) + '\\s*');
+      closingTagRe = new RegExp('\\s*' + escapeRegExp(tags[1]));
+      closingCurlyRe = new RegExp('\\s*' + escapeRegExp('}' + tags[1]));
+    }
+
+    compileTags(tags || mustache.tags);
+
+    var scanner = new Scanner(template);
+
+    var start, type, value, chr, token, openSection;
+    while (!scanner.eos()) {
+      start = scanner.pos;
+
+      // Match any text between tags.
+      value = scanner.scanUntil(openingTagRe);
+
+      if (value) {
+        for (var i = 0, valueLength = value.length; i < valueLength; ++i) {
+          chr = value.charAt(i);
+
+          if (isWhitespace(chr)) {
+            spaces.push(tokens.length);
+          } else {
+            nonSpace = true;
+          }
+
+          tokens.push([ 'text', chr, start, start + 1 ]);
+          start += 1;
+
+          // Check for whitespace on the current line.
+          if (chr === '\n')
+            stripSpace();
+        }
+      }
+
+      // Match the opening tag.
+      if (!scanner.scan(openingTagRe))
+        break;
+
+      hasTag = true;
+
+      // Get the tag type.
+      type = scanner.scan(tagRe) || 'name';
+      scanner.scan(whiteRe);
+
+      // Get the tag value.
+      if (type === '=') {
+        value = scanner.scanUntil(equalsRe);
+        scanner.scan(equalsRe);
+        scanner.scanUntil(closingTagRe);
+      } else if (type === '{') {
+        value = scanner.scanUntil(closingCurlyRe);
+        scanner.scan(curlyRe);
+        scanner.scanUntil(closingTagRe);
+        type = '&';
+      } else {
+        value = scanner.scanUntil(closingTagRe);
+      }
+
+      // Match the closing tag.
+      if (!scanner.scan(closingTagRe))
+        throw new Error('Unclosed tag at ' + scanner.pos);
+
+      token = [ type, value, start, scanner.pos ];
+      tokens.push(token);
+
+      if (type === '#' || type === '^') {
+        sections.push(token);
+      } else if (type === '/') {
+        // Check section nesting.
+        openSection = sections.pop();
+
+        if (!openSection)
+          throw new Error('Unopened section "' + value + '" at ' + start);
+
+        if (openSection[1] !== value)
+          throw new Error('Unclosed section "' + openSection[1] + '" at ' + start);
+      } else if (type === 'name' || type === '{' || type === '&') {
+        nonSpace = true;
+      } else if (type === '=') {
+        // Set the tags for the next time around.
+        compileTags(value);
+      }
+    }
+
+    // Make sure there are no open sections when we're done.
+    openSection = sections.pop();
+
+    if (openSection)
+      throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos);
+
+    return nestTokens(squashTokens(tokens));
+  }
+
+  /**
+   * Combines the values of consecutive text tokens in the given `tokens` array
+   * to a single token.
+   */
+  function squashTokens(tokens) {
+    var squashedTokens = [];
+
+    var token, lastToken;
+    for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
+      token = tokens[i];
+
+      if (token) {
+        if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {
+          lastToken[1] += token[1];
+          lastToken[3] = token[3];
+        } else {
+          squashedTokens.push(token);
+          lastToken = token;
+        }
+      }
+    }
+
+    return squashedTokens;
+  }
+
+  /**
+   * Forms the given array of `tokens` into a nested tree structure where
+   * tokens that represent a section have two additional items: 1) an array of
+   * all tokens that appear in that section and 2) the index in the original
+   * template that represents the end of that section.
+   */
+  function nestTokens(tokens) {
+    var nestedTokens = [];
+    var collector = nestedTokens;
+    var sections = [];
+
+    var token, section;
+    for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
+      token = tokens[i];
+
+      switch (token[0]) {
+      case '#':
+      case '^':
+        collector.push(token);
+        sections.push(token);
+        collector = token[4] = [];
+        break;
+      case '/':
+        section = sections.pop();
+        section[5] = token[2];
+        collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;
+        break;
+      default:
+        collector.push(token);
+      }
+    }
+
+    return nestedTokens;
+  }
+
+  /**
+   * A simple string scanner that is used by the template parser to find
+   * tokens in template strings.
+   */
+  function Scanner(string) {
+    this.string = string;
+    this.tail = string;
+    this.pos = 0;
+  }
+
+  /**
+   * Returns `true` if the tail is empty (end of string).
+   */
+  Scanner.prototype.eos = function () {
+    return this.tail === "";
+  };
+
+  /**
+   * Tries to match the given regular expression at the current position.
+   * Returns the matched text if it can match, the empty string otherwise.
+   */
+  Scanner.prototype.scan = function (re) {
+    var match = this.tail.match(re);
+
+    if (!match || match.index !== 0)
+      return '';
+
+    var string = match[0];
+
+    this.tail = this.tail.substring(string.length);
+    this.pos += string.length;
+
+    return string;
+  };
+
+  /**
+   * Skips all text until the given regular expression can be matched. Returns
+   * the skipped string, which is the entire tail if no match can be made.
+   */
+  Scanner.prototype.scanUntil = function (re) {
+    var index = this.tail.search(re), match;
+
+    switch (index) {
+    case -1:
+      match = this.tail;
+      this.tail = "";
+      break;
+    case 0:
+      match = "";
+      break;
+    default:
+      match = this.tail.substring(0, index);
+      this.tail = this.tail.substring(index);
+    }
+
+    this.pos += match.length;
+
+    return match;
+  };
+
+  /**
+   * Represents a rendering context by wrapping a view object and
+   * maintaining a reference to the parent context.
+   */
+  function Context(view, parentContext) {
+    this.view = view == null ? {} : view;
+    this.cache = { '.': this.view };
+    this.parent = parentContext;
+  }
+
+  /**
+   * Creates a new context using the given view with this context
+   * as the parent.
+   */
+  Context.prototype.push = function (view) {
+    return new Context(view, this);
+  };
+
+  /**
+   * Returns the value of the given name in this context, traversing
+   * up the context hierarchy if the value is absent in this context's view.
+   */
+  Context.prototype.lookup = function (name) {
+    var cache = this.cache;
+
+    var value;
+    if (name in cache) {
+      value = cache[name];
+    } else {
+      var context = this, names, index;
+
+      while (context) {
+        if (name.indexOf('.') > 0) {
+          value = context.view;
+          names = name.split('.');
+          index = 0;
+
+          while (value != null && index < names.length)
+            value = value[names[index++]];
+        } else if (typeof context.view == 'object') {
+          value = context.view[name];
+        }
+
+        if (value != null)
+          break;
+
+        context = context.parent;
+      }
+
+      cache[name] = value;
+    }
+
+    if (isFunction(value))
+      value = value.call(this.view);
+
+    return value;
+  };
+
+  /**
+   * A Writer knows how to take a stream of tokens and render them to a
+   * string, given a context. It also maintains a cache of templates to
+   * avoid the need to parse the same template twice.
+   */
+  function Writer() {
+    this.cache = {};
+  }
+
+  /**
+   * Clears all cached templates in this writer.
+   */
+  Writer.prototype.clearCache = function () {
+    this.cache = {};
+  };
+
+  /**
+   * Parses and caches the given `template` and returns the array of tokens
+   * that is generated from the parse.
+   */
+  Writer.prototype.parse = function (template, tags) {
+    var cache = this.cache;
+    var tokens = cache[template];
+
+    if (tokens == null)
+      tokens = cache[template] = parseTemplate(template, tags);
+
+    return tokens;
+  };
+
+  /**
+   * High-level method that is used to render the given `template` with
+   * the given `view`.
+   *
+   * The optional `partials` argument may be an object that contains the
+   * names and templates of partials that are used in the template. It may
+   * also be a function that is used to load partial templates on the fly
+   * that takes a single argument: the name of the partial.
+   */
+  Writer.prototype.render = function (template, view, partials) {
+    var tokens = this.parse(template);
+    var context = (view instanceof Context) ? view : new Context(view);
+    return this.renderTokens(tokens, context, partials, template);
+  };
+
+  /**
+   * Low-level method that renders the given array of `tokens` using
+   * the given `context` and `partials`.
+   *
+   * Note: The `originalTemplate` is only ever used to extract the portion
+   * of the original template that was contained in a higher-order section.
+   * If the template doesn't use higher-order sections, this argument may
+   * be omitted.
+   */
+  Writer.prototype.renderTokens = function (tokens, context, partials, originalTemplate) {
+    var buffer = '';
+
+    // This function is used to render an arbitrary template
+    // in the current context by higher-order sections.
+    var self = this;
+    function subRender(template) {
+      return self.render(template, context, partials);
+    }
+
+    var token, value;
+    for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
+      token = tokens[i];
+
+      switch (token[0]) {
+      case '#':
+        value = context.lookup(token[1]);
+
+        if (!value)
+          continue;
+
+        if (isArray(value)) {
+          for (var j = 0, valueLength = value.length; j < valueLength; ++j) {
+            buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);
+          }
+        } else if (typeof value === 'object' || typeof value === 'string') {
+          buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);
+        } else if (isFunction(value)) {
+          if (typeof originalTemplate !== 'string')
+            throw new Error('Cannot use higher-order sections without the original template');
+
+          // Extract the portion of the original template that the section contains.
+          value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);
+
+          if (value != null)
+            buffer += value;
+        } else {
+          buffer += this.renderTokens(token[4], context, partials, originalTemplate);
+        }
+
+        break;
+      case '^':
+        value = context.lookup(token[1]);
+
+        // Use JavaScript's definition of falsy. Include empty arrays.
+        // See https://github.com/janl/mustache.js/issues/186
+        if (!value || (isArray(value) && value.length === 0))
+          buffer += this.renderTokens(token[4], context, partials, originalTemplate);
+
+        break;
+      case '>':
+        if (!partials)
+          continue;
+
+        value = isFunction(partials) ? partials(token[1]) : partials[token[1]];
+
+        if (value != null)
+          buffer += this.renderTokens(this.parse(value), context, partials, value);
+
+        break;
+      case '&':
+        value = context.lookup(token[1]);
+
+        if (value != null)
+          buffer += value;
+
+        break;
+      case 'name':
+        value = context.lookup(token[1]);
+
+        if (value != null)
+          buffer += mustache.escape(value);
+
+        break;
+      case 'text':
+        buffer += token[1];
+        break;
+      }
+    }
+
+    return buffer;
+  };
+
+  mustache.name = "mustache.js";
+  mustache.version = "0.8.2";
+  mustache.tags = [ "{{", "}}" ];
+
+  // All high-level mustache.* functions use this writer.
+  var defaultWriter = new Writer();
+
+  /**
+   * Clears all cached templates in the default writer.
+   */
+  mustache.clearCache = function () {
+    return defaultWriter.clearCache();
+  };
+
+  /**
+   * Parses and caches the given template in the default writer and returns the
+   * array of tokens it contains. Doing this ahead of time avoids the need to
+   * parse templates on the fly as they are rendered.
+   */
+  mustache.parse = function (template, tags) {
+    return defaultWriter.parse(template, tags);
+  };
+
+  /**
+   * Renders the `template` with the given `view` and `partials` using the
+   * default writer.
+   */
+  mustache.render = function (template, view, partials) {
+    return defaultWriter.render(template, view, partials);
+  };
+
+  // This is here for backwards compatibility with 0.4.x.
+  mustache.to_html = function (template, view, partials, send) {
+    var result = mustache.render(template, view, partials);
+
+    if (isFunction(send)) {
+      send(result);
+    } else {
+      return result;
+    }
+  };
+
+  // Export the escaping function so that the user may override it.
+  // See https://github.com/janl/mustache.js/issues/244
+  mustache.escape = escapeHtml;
+
+  // Export these mainly for testing, but also for advanced usage.
+  mustache.Scanner = Scanner;
+  mustache.Context = Context;
+  mustache.Writer = Writer;
+
+}));
index 5ce3666..6f79e37 100644 (file)
@@ -5,5 +5,15 @@
                ]
        },
        "ooui-outline-control-move-down": "Skuif item af",
-       "ooui-outline-control-move-up": "Skuif item op"
+       "ooui-outline-control-move-up": "Skuif item op",
+       "ooui-outline-control-remove": "Verwyder item",
+       "ooui-toolbar-more": "Meer",
+       "ooui-toolgroup-expand": "Meer",
+       "ooui-toolgroup-collapse": "Minder",
+       "ooui-dialog-message-accept": "Regso",
+       "ooui-dialog-message-reject": "Kanselleer",
+       "ooui-dialog-process-error": "Iets het verkeerd gegaan",
+       "ooui-dialog-process-dismiss": "Sluit",
+       "ooui-dialog-process-retry": "Probeer weer",
+       "ooui-dialog-process-continue": "Gaan voort"
 }
index b0ec803..7cfcfa2 100644 (file)
                        "Reza1615",
                        "Taha",
                        "درفش کاویانی",
-                       "Armin1392"
+                       "Armin1392",
+                       "Alirezaaa"
                ]
        },
        "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-retry": "دوباره امتحان کن",
+       "ooui-dialog-process-continue": "ادامه"
 }
index a76d39e..ce86aaa 100644 (file)
@@ -5,11 +5,20 @@
                        "Devayon",
                        "Rajesh",
                        "Siddhartha Ghai",
-                       "Goelujjwal"
+                       "Goelujjwal",
+                       "Ankita-ks"
                ]
        },
        "ooui-outline-control-move-down": "प्रविष्टि नीचे ले जाएँ",
        "ooui-outline-control-move-up": "प्रविष्टि ऊपर ले जाएँ",
        "ooui-outline-control-remove": "आइटम हटाएँ",
-       "ooui-toolbar-more": "अधिक"
+       "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 2c99bdd..3a4e145 100644 (file)
@@ -7,5 +7,14 @@
        },
        "ooui-outline-control-move-down": "Færa atriði niður",
        "ooui-outline-control-move-up": "Færa atriði upp",
-       "ooui-toolbar-more": "Fleira"
+       "ooui-outline-control-remove": "Fjarlægja atriði",
+       "ooui-toolbar-more": "Fleira",
+       "ooui-toolgroup-expand": "Fleira",
+       "ooui-toolgroup-collapse": "Færra",
+       "ooui-dialog-message-accept": "Í lagi",
+       "ooui-dialog-message-reject": "Hætta við",
+       "ooui-dialog-process-error": "Eitthvað mistókst",
+       "ooui-dialog-process-dismiss": "Loka",
+       "ooui-dialog-process-retry": "Reyna aftur",
+       "ooui-dialog-process-continue": "Halda áfram"
 }
index 9840319..1d7317b 100644 (file)
@@ -7,5 +7,13 @@
        "ooui-outline-control-move-down": "Элементті төмен жылжыту",
        "ooui-outline-control-move-up": "Элементті жоғары жылжыту",
        "ooui-outline-control-remove": "Элементті алып тастау",
-       "ooui-toolbar-more": "толығырақ"
+       "ooui-toolbar-more": "толығырақ",
+       "ooui-toolgroup-expand": "Тағы",
+       "ooui-toolgroup-collapse": "Азырақ",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Қажет емес",
+       "ooui-dialog-process-error": "Бірдеңеден қате кетті",
+       "ooui-dialog-process-dismiss": "Тоқтату",
+       "ooui-dialog-process-retry": "Қайта байқап көріңіз",
+       "ooui-dialog-process-continue": "Жалғастыру"
 }
index 0b89e37..b003e8c 100644 (file)
@@ -2,16 +2,20 @@
        "@metadata": {
                "authors": [
                        "Vikassy",
-                       "Nayvik"
+                       "Nayvik",
+                       "Omshivaprakash"
                ]
        },
-       "ooui-outline-control-move-down": "ವಸ್ತು ಕೆಲ್ಗೆ ಸ್ಥಲಾನ್ಥರಿಸು",
-       "ooui-outline-control-move-up": "ವಸ್ತು ಮೆಲೆ ಸ್ಥಲಾನ್ಥರಿಸು",
-       "ooui-outline-control-remove": "ವಸ್ತು ತೆಗೆ",
-       "ooui-toolbar-more": "ಹೆಚ್ಚು",
+       "ooui-outline-control-move-down": "ವಸ್ತುವನ್ನು ಕೆಳಗೆ ಸರಿಸು",
+       "ooui-outline-control-move-up": "ವಸ್ತುವನ್ನು ಮೇಲೆ ಸರಿಸು",
+       "ooui-outline-control-remove": "ವಸ್ತುವನ್ನು ತೆಗೆ",
+       "ooui-toolbar-more": "ಇನ್ನಷ್ಟು",
+       "ooui-toolgroup-expand": "ಇನ್ನಷ್ಟು",
+       "ooui-toolgroup-collapse": "ಕೆಲವೇ ಕೆಲವು",
        "ooui-dialog-message-accept": "ಸರಿ",
-       "ooui-dialog-message-reject": "ರದ್ದು",
+       "ooui-dialog-message-reject": "ರದ್ದುಮಾಡು",
        "ooui-dialog-process-error": "ಎನೋ ಎಡವಟ್ಟಾಗಿದೆ....",
        "ooui-dialog-process-dismiss": "ತೆಗೆದುಹಾಕು",
-       "ooui-dialog-process-retry": "ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ"
+       "ooui-dialog-process-retry": "ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ",
+       "ooui-dialog-process-continue": "ಮುಂದುವರೆಸು"
 }
index 1bec097..ef92e49 100644 (file)
@@ -7,5 +7,13 @@
        "ooui-outline-control-move-down": "Элементни тюбюне кёчюр",
        "ooui-outline-control-move-up": "Элементни башына кёчюр",
        "ooui-outline-control-remove": "Пунктну кетер",
-       "ooui-toolbar-more": "Энтда"
+       "ooui-toolbar-more": "Энтда",
+       "ooui-toolgroup-expand": "Энтда",
+       "ooui-toolgroup-collapse": "Артха",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Ызына ал",
+       "ooui-dialog-process-error": "Не эсе да табсыз кетди",
+       "ooui-dialog-process-dismiss": "Джаб",
+       "ooui-dialog-process-retry": "Энтда сынаб кёр",
+       "ooui-dialog-process-continue": "Бардыр"
 }
diff --git a/resources/lib/oojs-ui/i18n/ksh.json b/resources/lib/oojs-ui/i18n/ksh.json
new file mode 100644 (file)
index 0000000..c975e82
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Purodha"
+               ]
+       },
+       "ooui-outline-control-move-down": "Öm eine Plaz noh onge schiehbe",
+       "ooui-outline-control-move-up": "Öm eine Plaz noh bovve schiehbe",
+       "ooui-outline-control-remove": "Dä Plaz läddesch maache → fott domet!",
+       "ooui-toolbar-more": "Mih",
+       "ooui-toolgroup-expand": "Mih",
+       "ooui-toolgroup-collapse": "Winnijer",
+       "ooui-dialog-message-accept": "Lohß Jonn!",
+       "ooui-dialog-message-reject": "Ophühre",
+       "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"
+}
index 8b73233..4ca5ab7 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-message-reject": "रद्द गर्ने",
+       "ooui-dialog-process-dismiss": "खारेज गर्ने",
+       "ooui-dialog-process-retry": "पुन प्रयास गर्नुहोस",
+       "ooui-dialog-process-continue": "जारी राख्ने"
 }
index 7af5bc9..8c7a1e7 100644 (file)
@@ -4,7 +4,19 @@
                        "Amikeco",
                        "Babanwalia",
                        "Bouron",
-                       "Nasir8891"
+                       "Nasir8891",
+                       "Satdeep gill"
                ]
-       }
+       },
+       "ooui-outline-control-move-down": "ਨੀਚੇ ਲੈਕੇ ਜਾਓ",
+       "ooui-outline-control-move-up": "ਉੱਤੇ ਲੈਕੇ ਜਾਓ",
+       "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 82f7c6c..7b4d492 100644 (file)
@@ -8,11 +8,20 @@
                        "Rapsar",
                        "Talha Samil Cakir",
                        "TurkishStyles",
-                       "Sayginer"
+                       "Sayginer",
+                       "Meelo"
                ]
        },
        "ooui-outline-control-move-down": "Ögeyi aşağı taşı",
        "ooui-outline-control-move-up": "Ögeyi yukarı taşı",
-       "ooui-toolbar-more": "Daha fazla",
-       "ooui-dialog-process-retry": "Tekrar dene"
+       "ooui-outline-control-remove": "Ögeyi kaldır",
+       "ooui-toolbar-more": "Dahası",
+       "ooui-toolgroup-expand": "Dahası",
+       "ooui-toolgroup-collapse": "Daha az",
+       "ooui-dialog-message-accept": "Tamam",
+       "ooui-dialog-message-reject": "İptal",
+       "ooui-dialog-process-error": "Bir şeyler yanlış gitti",
+       "ooui-dialog-process-dismiss": "Kapat",
+       "ooui-dialog-process-retry": "Tekrar dene",
+       "ooui-dialog-process-continue": "Devam et"
 }
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css
new file mode 100644 (file)
index 0000000..019cfa5
--- /dev/null
@@ -0,0 +1,64 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-bell {
+       background-image: url("themes/mediawiki/images/icons/bell.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bell.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bell.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bell.png");
+}
+.oo-ui-icon-bellOn {
+       background-image: url("themes/mediawiki/images/icons/bellOn-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bellOn-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bellOn-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bellOn-ltr.png");
+}
+.oo-ui-icon-eye {
+       background-image: url("themes/mediawiki/images/icons/eye.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eye.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eye.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/eye.png");
+}
+.oo-ui-icon-eyeClosed {
+       background-image: url("themes/mediawiki/images/icons/eyeClosed.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eyeClosed.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eyeClosed.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/eyeClosed.png");
+}
+.oo-ui-icon-message {
+       background-image: url("themes/mediawiki/images/icons/message-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/message-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/message-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/message-ltr.png");
+}
+.oo-ui-icon-signature {
+       background-image: url("themes/mediawiki/images/icons/signature-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/signature-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/signature-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/signature-ltr.png");
+}
+.oo-ui-icon-speechBubble {
+       background-image: url("themes/mediawiki/images/icons/speechBubble-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubble-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubble-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubble-ltr.png");
+}
+.oo-ui-icon-speechBubbleAdd {
+       background-image: url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.png");
+}
+.oo-ui-icon-speechBubbles {
+       background-image: url("themes/mediawiki/images/icons/speechBubbles-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbles-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbles-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubbles-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css
new file mode 100644 (file)
index 0000000..c6800f5
--- /dev/null
@@ -0,0 +1,76 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-article {
+       background-image: url("themes/mediawiki/images/icons/article-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/article-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/article-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/article-ltr.png");
+}
+.oo-ui-icon-articleCheck {
+       background-image: url("themes/mediawiki/images/icons/articleCheck-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleCheck-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleCheck-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/articleCheck-ltr.png");
+}
+.oo-ui-icon-articleSearch {
+       background-image: url("themes/mediawiki/images/icons/articleSearch-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleSearch-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleSearch-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/articleSearch-ltr.png");
+}
+.oo-ui-icon-book {
+       background-image: url("themes/mediawiki/images/icons/book-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/book-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/book-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/book-ltr.png");
+}
+.oo-ui-icon-citeArticle {
+       background-image: url("themes/mediawiki/images/icons/citeArticle-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/citeArticle-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/citeArticle-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/citeArticle-ltr.png");
+}
+.oo-ui-icon-die {
+       background-image: url("themes/mediawiki/images/icons/die-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/die-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/die-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/die-ltr.png");
+}
+.oo-ui-icon-download {
+       background-image: url("themes/mediawiki/images/icons/download-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/download-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/download-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/download-ltr.png");
+}
+.oo-ui-icon-folderPlaceholder {
+       background-image: url("themes/mediawiki/images/icons/folderPlaceholder-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/folderPlaceholder-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/folderPlaceholder-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/folderPlaceholder-ltr.png");
+}
+.oo-ui-icon-journal {
+       background-image: url("themes/mediawiki/images/icons/journal-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/journal-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/journal-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/journal-ltr.png");
+}
+.oo-ui-icon-newspaper {
+       background-image: url("themes/mediawiki/images/icons/newspaper-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newspaper-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newspaper-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newspaper-ltr.png");
+}
+.oo-ui-icon-upload {
+       background-image: url("themes/mediawiki/images/icons/upload-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upload-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upload-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/upload-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css
new file mode 100644 (file)
index 0000000..fd4c009
--- /dev/null
@@ -0,0 +1,160 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-alignCentre {
+       background-image: url("themes/mediawiki/images/icons/align-center.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-center.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-center.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-center.png");
+}
+.oo-ui-icon-alignLeft {
+       background-image: url("themes/mediawiki/images/icons/align-float-left.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-left.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-left.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-float-left.png");
+}
+.oo-ui-icon-alignRight {
+       background-image: url("themes/mediawiki/images/icons/align-float-right.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-right.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-right.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-float-right.png");
+}
+.oo-ui-icon-insert {
+       background-image: url("themes/mediawiki/images/icons/insert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/insert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/insert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/insert.png");
+}
+.oo-ui-icon-layout {
+       background-image: url("themes/mediawiki/images/icons/layout-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/layout-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/layout-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/layout-ltr.png");
+}
+.oo-ui-icon-newline {
+       background-image: url("themes/mediawiki/images/icons/newline-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newline-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newline-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newline-ltr.png");
+}
+.oo-ui-icon-redirect {
+       background-image: url("themes/mediawiki/images/icons/redirect-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/redirect-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/redirect-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/redirect-ltr.png");
+}
+.oo-ui-icon-noWikiText {
+       background-image: url("themes/mediawiki/images/icons/noWikiText-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/noWikiText-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/noWikiText-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/noWikiText-ltr.png");
+}
+.oo-ui-icon-outline {
+       background-image: url("themes/mediawiki/images/icons/outline-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outline-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outline-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/outline-ltr.png");
+}
+.oo-ui-icon-puzzle {
+       background-image: url("themes/mediawiki/images/icons/puzzle-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/puzzle-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/puzzle-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/puzzle-ltr.png");
+}
+.oo-ui-icon-quotes {
+       background-image: url("themes/mediawiki/images/icons/quotes-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotes-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotes-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/quotes-ltr.png");
+}
+.oo-ui-icon-quotesAdd {
+       background-image: url("themes/mediawiki/images/icons/quotesAdd-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotesAdd-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotesAdd-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/quotesAdd-ltr.png");
+}
+.oo-ui-icon-searchCaseSensitive {
+       background-image: url("themes/mediawiki/images/icons/case-sensitive.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/case-sensitive.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/case-sensitive.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/case-sensitive.png");
+}
+.oo-ui-icon-searchRegularExpression {
+       background-image: url("themes/mediawiki/images/icons/regular-expression.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/regular-expression.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/regular-expression.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/regular-expression.png");
+}
+.oo-ui-icon-specialCharacter {
+       background-image: url("themes/mediawiki/images/icons/specialCharacter.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/specialCharacter.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/specialCharacter.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/specialCharacter.png");
+}
+.oo-ui-icon-table {
+       background-image: url("themes/mediawiki/images/icons/table.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table.png");
+}
+.oo-ui-icon-tableAddColumnAfter {
+       background-image: url("themes/mediawiki/images/icons/table-insert-column-rtl.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-rtl.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-rtl.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-column-rtl.png");
+}
+.oo-ui-icon-tableAddColumnBefore {
+       background-image: url("themes/mediawiki/images/icons/table-insert-column-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-column-ltr.png");
+}
+.oo-ui-icon-tableAddRowAfter {
+       background-image: url("themes/mediawiki/images/icons/table-insert-row-after.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-after.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-after.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-row-after.png");
+}
+.oo-ui-icon-tableAddRowBefore {
+       background-image: url("themes/mediawiki/images/icons/table-insert-row-before.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-before.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-before.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-row-before.png");
+}
+.oo-ui-icon-tableCaption {
+       background-image: url("themes/mediawiki/images/icons/table-caption.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-caption.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-caption.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-caption.png");
+}
+.oo-ui-icon-tableMergeCells {
+       background-image: url("themes/mediawiki/images/icons/table-merge-cells.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-merge-cells.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-merge-cells.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-merge-cells.png");
+}
+.oo-ui-icon-templateAdd {
+       background-image: url("themes/mediawiki/images/icons/templateAdd-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/templateAdd-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/templateAdd-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/templateAdd-ltr.png");
+}
+.oo-ui-icon-translation {
+       background-image: url("themes/mediawiki/images/icons/translation-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/translation-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/translation-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/translation-ltr.png");
+}
+.oo-ui-icon-wikiText {
+       background-image: url("themes/mediawiki/images/icons/wikiText.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikiText.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikiText.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/wikiText.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css
new file mode 100644 (file)
index 0000000..5bb13a8
--- /dev/null
@@ -0,0 +1,46 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-edit {
+       background-image: url("themes/mediawiki/images/icons/edit-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/edit-ltr.png");
+}
+.oo-ui-icon-editLock {
+       background-image: url("themes/mediawiki/images/icons/editLock-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editLock-ltr.png");
+}
+.oo-ui-icon-editUndo {
+       background-image: url("themes/mediawiki/images/icons/editUndo-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editUndo-ltr.png");
+}
+.oo-ui-icon-link {
+       background-image: url("themes/mediawiki/images/icons/link-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/link-ltr.png");
+}
+.oo-ui-icon-linkExternal {
+       background-image: url("themes/mediawiki/images/icons/external-link-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/external-link-ltr.png");
+}
+.oo-ui-icon-linkSecure {
+       background-image: url("themes/mediawiki/images/icons/secure-link.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/secure-link.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css
new file mode 100644 (file)
index 0000000..e9edf16
--- /dev/null
@@ -0,0 +1,34 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-indent {
+       background-image: url("themes/mediawiki/images/icons/indent-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/indent-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/indent-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/indent-ltr.png");
+}
+.oo-ui-icon-listBullet {
+       background-image: url("themes/mediawiki/images/icons/listBullet-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listBullet-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listBullet-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/listBullet-ltr.png");
+}
+.oo-ui-icon-listNumbered {
+       background-image: url("themes/mediawiki/images/icons/listNumbered-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listNumbered-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listNumbered-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/listNumbered-ltr.png");
+}
+.oo-ui-icon-outdent {
+       background-image: url("themes/mediawiki/images/icons/outdent-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outdent-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outdent-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/outdent-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css
new file mode 100644 (file)
index 0000000..562701a
--- /dev/null
@@ -0,0 +1,436 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-bigger {
+       background-image: url("themes/mediawiki/images/icons/bigger-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bigger-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bigger-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bigger-ltr.png");
+}
+.oo-ui-icon-smaller {
+       background-image: url("themes/mediawiki/images/icons/smaller-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/smaller-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/smaller-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/smaller-ltr.png");
+}
+.oo-ui-icon-subscript {
+       background-image: url("themes/mediawiki/images/icons/subscript-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/subscript-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/subscript-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/subscript-ltr.png");
+}
+.oo-ui-icon-superscript {
+       background-image: url("themes/mediawiki/images/icons/superscript-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/superscript-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/superscript-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/superscript-ltr.png");
+}
+.oo-ui-icon-bold {
+       background-image: url("themes/mediawiki/images/icons/bold-a.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-a.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-a.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-a.png");
+}
+.oo-ui-icon-bold:lang(ar) {
+       background-image: url("themes/mediawiki/images/icons/bold-arab-ain.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-ain.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-ain.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-arab-ain.png");
+}
+.oo-ui-icon-bold:lang(be) {
+       background-image: url("themes/mediawiki/images/icons/bold-cyrl-te.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-te.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-te.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-te.png");
+}
+.oo-ui-icon-bold:lang(cs) {
+       background-image: url("themes/mediawiki/images/icons/bold-b.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
+}
+.oo-ui-icon-bold:lang(en) {
+       background-image: url("themes/mediawiki/images/icons/bold-b.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
+}
+.oo-ui-icon-bold:lang(he) {
+       background-image: url("themes/mediawiki/images/icons/bold-b.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
+}
+.oo-ui-icon-bold:lang(ml) {
+       background-image: url("themes/mediawiki/images/icons/bold-b.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
+}
+.oo-ui-icon-bold:lang(pl) {
+       background-image: url("themes/mediawiki/images/icons/bold-b.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
+}
+.oo-ui-icon-bold:lang(da) {
+       background-image: url("themes/mediawiki/images/icons/bold-f.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+.oo-ui-icon-bold:lang(de) {
+       background-image: url("themes/mediawiki/images/icons/bold-f.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+.oo-ui-icon-bold:lang(hu) {
+       background-image: url("themes/mediawiki/images/icons/bold-f.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+.oo-ui-icon-bold:lang(ksh) {
+       background-image: url("themes/mediawiki/images/icons/bold-f.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+.oo-ui-icon-bold:lang(nn) {
+       background-image: url("themes/mediawiki/images/icons/bold-f.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+.oo-ui-icon-bold:lang(no) {
+       background-image: url("themes/mediawiki/images/icons/bold-f.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+.oo-ui-icon-bold:lang(sv) {
+       background-image: url("themes/mediawiki/images/icons/bold-f.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+.oo-ui-icon-bold:lang(es) {
+       background-image: url("themes/mediawiki/images/icons/bold-n.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
+}
+.oo-ui-icon-bold:lang(gl) {
+       background-image: url("themes/mediawiki/images/icons/bold-n.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
+}
+.oo-ui-icon-bold:lang(pt) {
+       background-image: url("themes/mediawiki/images/icons/bold-n.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
+}
+.oo-ui-icon-bold:lang(eu) {
+       background-image: url("themes/mediawiki/images/icons/bold-l.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-l.png");
+}
+.oo-ui-icon-bold:lang(fi) {
+       background-image: url("themes/mediawiki/images/icons/bold-l.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-l.png");
+}
+.oo-ui-icon-bold:lang(fa) {
+       background-image: url("themes/mediawiki/images/icons/bold-arab-dad.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-dad.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-dad.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-arab-dad.png");
+}
+.oo-ui-icon-bold:lang(fr) {
+       background-image: url("themes/mediawiki/images/icons/bold-g.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-g.png");
+}
+.oo-ui-icon-bold:lang(it) {
+       background-image: url("themes/mediawiki/images/icons/bold-g.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-g.png");
+}
+.oo-ui-icon-bold:lang(hy) {
+       background-image: url("themes/mediawiki/images/icons/bold-armn-to.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-armn-to.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-armn-to.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-armn-to.png");
+}
+.oo-ui-icon-bold:lang(ka) {
+       background-image: url("themes/mediawiki/images/icons/bold-geor-man.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-geor-man.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-geor-man.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-geor-man.png");
+}
+.oo-ui-icon-bold:lang(ky) {
+       background-image: url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
+}
+.oo-ui-icon-bold:lang(ru) {
+       background-image: url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
+}
+.oo-ui-icon-bold:lang(nl) {
+       background-image: url("themes/mediawiki/images/icons/bold-v.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-v.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-v.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-v.png");
+}
+.oo-ui-icon-bold:lang(os) {
+       background-image: url("themes/mediawiki/images/icons/bold-cyrl-be.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-be.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-be.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-be.png");
+}
+.oo-ui-icon-italic {
+       background-image: url("themes/mediawiki/images/icons/italic-a.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-a.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-a.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-a.png");
+}
+.oo-ui-icon-italic:lang(ar) {
+       background-image: url("themes/mediawiki/images/icons/italic-arab-meem.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-meem.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-meem.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-arab-meem.png");
+}
+.oo-ui-icon-italic:lang(cs) {
+       background-image: url("themes/mediawiki/images/icons/italic-i.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+.oo-ui-icon-italic:lang(en) {
+       background-image: url("themes/mediawiki/images/icons/italic-i.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+.oo-ui-icon-italic:lang(fr) {
+       background-image: url("themes/mediawiki/images/icons/italic-i.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+.oo-ui-icon-italic:lang(he) {
+       background-image: url("themes/mediawiki/images/icons/italic-i.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+.oo-ui-icon-italic:lang(ml) {
+       background-image: url("themes/mediawiki/images/icons/italic-i.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+.oo-ui-icon-italic:lang(pl) {
+       background-image: url("themes/mediawiki/images/icons/italic-i.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+.oo-ui-icon-italic:lang(pt) {
+       background-image: url("themes/mediawiki/images/icons/italic-i.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+.oo-ui-icon-italic:lang(be) {
+       background-image: url("themes/mediawiki/images/icons/italic-k.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+.oo-ui-icon-italic:lang(da) {
+       background-image: url("themes/mediawiki/images/icons/italic-k.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+.oo-ui-icon-italic:lang(de) {
+       background-image: url("themes/mediawiki/images/icons/italic-k.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+.oo-ui-icon-italic:lang(fi) {
+       background-image: url("themes/mediawiki/images/icons/italic-k.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+.oo-ui-icon-italic:lang(ky) {
+       background-image: url("themes/mediawiki/images/icons/italic-k.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+.oo-ui-icon-italic:lang(nn) {
+       background-image: url("themes/mediawiki/images/icons/italic-k.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+.oo-ui-icon-italic:lang(no) {
+       background-image: url("themes/mediawiki/images/icons/italic-k.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+.oo-ui-icon-italic:lang(os) {
+       background-image: url("themes/mediawiki/images/icons/italic-k.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+.oo-ui-icon-italic:lang(sv) {
+       background-image: url("themes/mediawiki/images/icons/italic-k.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+.oo-ui-icon-italic:lang(ru) {
+       background-image: url("themes/mediawiki/images/icons/italic-k.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+.oo-ui-icon-italic:lang(es) {
+       background-image: url("themes/mediawiki/images/icons/italic-c.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
+}
+.oo-ui-icon-italic:lang(gl) {
+       background-image: url("themes/mediawiki/images/icons/italic-c.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
+}
+.oo-ui-icon-italic:lang(it) {
+       background-image: url("themes/mediawiki/images/icons/italic-c.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
+}
+.oo-ui-icon-italic:lang(nl) {
+       background-image: url("themes/mediawiki/images/icons/italic-c.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
+}
+.oo-ui-icon-italic:lang(eu) {
+       background-image: url("themes/mediawiki/images/icons/italic-e.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-e.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-e.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-e.png");
+}
+.oo-ui-icon-italic:lang(fa) {
+       background-image: url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.png");
+}
+.oo-ui-icon-italic:lang(hu) {
+       background-image: url("themes/mediawiki/images/icons/italic-d.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-d.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-d.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-d.png");
+}
+.oo-ui-icon-italic:lang(hy) {
+       background-image: url("themes/mediawiki/images/icons/italic-armn-sha.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-armn-sha.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-armn-sha.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-armn-sha.png");
+}
+.oo-ui-icon-italic:lang(ksh) {
+       background-image: url("themes/mediawiki/images/icons/italic-s.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-s.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-s.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-s.png");
+}
+.oo-ui-icon-italic:lang(ka) {
+       background-image: url("themes/mediawiki/images/icons/italic-geor-kan.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-geor-kan.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-geor-kan.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-geor-kan.png");
+}
+.oo-ui-icon-strikethrough {
+       background-image: url("themes/mediawiki/images/icons/strikethrough-a.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-a.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-a.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-a.png");
+}
+.oo-ui-icon-strikethrough:lang(en) {
+       background-image: url("themes/mediawiki/images/icons/strikethrough-s.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-s.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-s.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-s.png");
+}
+.oo-ui-icon-strikethrough:lang(fi) {
+       background-image: url("themes/mediawiki/images/icons/strikethrough-y.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-y.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-y.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-y.png");
+}
+.oo-ui-icon-underline {
+       background-image: url("themes/mediawiki/images/icons/underline-a.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-a.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-a.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/underline-a.png");
+}
+.oo-ui-icon-underline:lang(en) {
+       background-image: url("themes/mediawiki/images/icons/underline-u.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-u.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-u.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/underline-u.png");
+}
+.oo-ui-icon-textLanguage {
+       background-image: url("themes/mediawiki/images/icons/language.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/language.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/language.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/language.png");
+}
+.oo-ui-icon-textDirLTR {
+       background-image: url("themes/mediawiki/images/icons/text-dir-lefttoright.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-lefttoright.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-lefttoright.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-dir-lefttoright.png");
+}
+.oo-ui-icon-textDirRTL {
+       background-image: url("themes/mediawiki/images/icons/text-dir-righttoleft.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-righttoleft.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-righttoleft.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-dir-righttoleft.png");
+}
+.oo-ui-icon-textStyle {
+       background-image: url("themes/mediawiki/images/icons/text-style.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-style.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-style.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-style.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css
new file mode 100644 (file)
index 0000000..5efa95a
--- /dev/null
@@ -0,0 +1,112 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-beta {
+       background-image: url("themes/mediawiki/images/icons/beta.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/beta.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/beta.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/beta.png");
+}
+.oo-ui-icon-betaLaunch {
+       background-image: url("themes/mediawiki/images/icons/betaLaunch.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/betaLaunch.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/betaLaunch.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/betaLaunch.png");
+}
+.oo-ui-icon-bookmark {
+       background-image: url("themes/mediawiki/images/icons/bookmark-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bookmark-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bookmark-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bookmark-ltr.png");
+}
+.oo-ui-icon-browser {
+       background-image: url("themes/mediawiki/images/icons/browser-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/browser-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/browser-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/browser-ltr.png");
+}
+.oo-ui-icon-clock {
+       background-image: url("themes/mediawiki/images/icons/clock.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clock.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clock.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/clock.png");
+}
+.oo-ui-icon-closeInput {
+       background-image: url("themes/mediawiki/images/icons/closeInput.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/closeInput.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/closeInput.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/closeInput.png");
+}
+.oo-ui-icon-funnel {
+       background-image: url("themes/mediawiki/images/icons/funnel-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/funnel-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/funnel-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/funnel-ltr.png");
+}
+.oo-ui-icon-heart {
+       background-image: url("themes/mediawiki/images/icons/heart.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/heart.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/heart.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/heart.png");
+}
+.oo-ui-icon-key {
+       background-image: url("themes/mediawiki/images/icons/key-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/key-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/key-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/key-ltr.png");
+}
+.oo-ui-icon-keyboard {
+       background-image: url("themes/mediawiki/images/icons/keyboard-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/keyboard-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/keyboard-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/keyboard-ltr.png");
+}
+.oo-ui-icon-logOut {
+       background-image: url("themes/mediawiki/images/icons/logOut-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logOut-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logOut-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logOut-ltr.png");
+}
+.oo-ui-icon-magnifyingGlass {
+       background-image: url("themes/mediawiki/images/icons/magnifyingGlass-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/magnifyingGlass-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/magnifyingGlass-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/magnifyingGlass-ltr.png");
+}
+.oo-ui-icon-newWindow {
+       background-image: url("themes/mediawiki/images/icons/newWindow-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newWindow-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newWindow-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newWindow-ltr.png");
+}
+.oo-ui-icon-printer {
+       background-image: url("themes/mediawiki/images/icons/printer-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/printer-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/printer-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/printer-ltr.png");
+}
+.oo-ui-icon-ribbonPrize {
+       background-image: url("themes/mediawiki/images/icons/ribbonPrize.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ribbonPrize.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ribbonPrize.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ribbonPrize.png");
+}
+.oo-ui-icon-sun {
+       background-image: url("themes/mediawiki/images/icons/sun-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/sun-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/sun-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/sun-ltr.png");
+}
+.oo-ui-icon-watchlist {
+       background-image: url("themes/mediawiki/images/icons/watchlist-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/watchlist-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/watchlist-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/watchlist-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css
new file mode 100644 (file)
index 0000000..97ff08b
--- /dev/null
@@ -0,0 +1,34 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-stripeFlow {
+       background-image: url("themes/mediawiki/images/icons/stripeFlow-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeFlow-ltr.png");
+}
+.oo-ui-icon-stripeSideMenu {
+       background-image: url("themes/mediawiki/images/icons/stripeSideMenu.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSideMenu.png");
+}
+.oo-ui-icon-stripeSummary {
+       background-image: url("themes/mediawiki/images/icons/stripeSummary-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSummary-ltr.png");
+}
+.oo-ui-icon-stripeToC {
+       background-image: url("themes/mediawiki/images/icons/stripeToC-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeToC-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css
new file mode 100644 (file)
index 0000000..ef4b991
--- /dev/null
@@ -0,0 +1,34 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-map {
+       background-image: url("themes/mediawiki/images/icons/map-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/map-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/map-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/map-ltr.png");
+}
+.oo-ui-icon-mapPin {
+       background-image: url("themes/mediawiki/images/icons/mapPin.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPin.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPin.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/mapPin.png");
+}
+.oo-ui-icon-mapPinAdd {
+       background-image: url("themes/mediawiki/images/icons/mapPinAdd-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPinAdd-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPinAdd-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/mapPinAdd-ltr.png");
+}
+.oo-ui-icon-wikitrail {
+       background-image: url("themes/mediawiki/images/icons/wikitrail-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikitrail-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikitrail-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/wikitrail-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css
new file mode 100644 (file)
index 0000000..2c34631
--- /dev/null
@@ -0,0 +1,46 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-image {
+       background-image: url("themes/mediawiki/images/icons/image-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/image-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/image-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/image-ltr.png");
+}
+.oo-ui-icon-imageAdd {
+       background-image: url("themes/mediawiki/images/icons/imageAdd-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageAdd-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageAdd-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/imageAdd-ltr.png");
+}
+.oo-ui-icon-imageLock {
+       background-image: url("themes/mediawiki/images/icons/imageLock-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageLock-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageLock-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/imageLock-ltr.png");
+}
+.oo-ui-icon-photoGallery {
+       background-image: url("themes/mediawiki/images/icons/photoGallery-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/photoGallery-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/photoGallery-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/photoGallery-ltr.png");
+}
+.oo-ui-icon-play {
+       background-image: url("themes/mediawiki/images/icons/play-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/play-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/play-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/play-ltr.png");
+}
+.oo-ui-icon-stop {
+       background-image: url("themes/mediawiki/images/icons/stop.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stop.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stop.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stop.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css
new file mode 100644 (file)
index 0000000..e80d325
--- /dev/null
@@ -0,0 +1,70 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-block {
+       background-image: url("themes/mediawiki/images/icons/block.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/block.png");
+}
+.oo-ui-icon-blockUndo {
+       background-image: url("themes/mediawiki/images/icons/blockUndo-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/blockUndo-ltr.png");
+}
+.oo-ui-icon-flag {
+       background-image: url("themes/mediawiki/images/icons/flag-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flag-ltr.png");
+}
+.oo-ui-icon-flagUndo {
+       background-image: url("themes/mediawiki/images/icons/flagUndo-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flagUndo-ltr.png");
+}
+.oo-ui-icon-lock {
+       background-image: url("themes/mediawiki/images/icons/lock-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/lock-ltr.png");
+}
+.oo-ui-icon-star {
+       background-image: url("themes/mediawiki/images/icons/star.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/star.png");
+}
+.oo-ui-icon-trash {
+       background-image: url("themes/mediawiki/images/icons/trash.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trash.png");
+}
+.oo-ui-icon-trashUndo {
+       background-image: url("themes/mediawiki/images/icons/trashUndo-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trashUndo-ltr.png");
+}
+.oo-ui-icon-unLock {
+       background-image: url("themes/mediawiki/images/icons/unLock-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unLock-ltr.png");
+}
+.oo-ui-icon-unStar {
+       background-image: url("themes/mediawiki/images/icons/unStar.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unStar.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css
new file mode 100644 (file)
index 0000000..c93ead8
--- /dev/null
@@ -0,0 +1,64 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-arrowNext {
+       background-image: url("themes/mediawiki/images/icons/arrow-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arrow-ltr.png");
+}
+.oo-ui-icon-arrowLast {
+       background-image: url("themes/mediawiki/images/icons/arrow-rtl.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-rtl.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-rtl.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arrow-rtl.png");
+}
+.oo-ui-icon-caretNext {
+       background-image: url("themes/mediawiki/images/icons/caret-rtl.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-rtl.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-rtl.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caret-rtl.png");
+}
+.oo-ui-icon-caretLast {
+       background-image: url("themes/mediawiki/images/icons/caret-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caret-ltr.png");
+}
+.oo-ui-icon-caretDown {
+       background-image: url("themes/mediawiki/images/icons/caretDown.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretDown.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretDown.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caretDown.png");
+}
+.oo-ui-icon-caretUp {
+       background-image: url("themes/mediawiki/images/icons/caretUp.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretUp.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretUp.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caretUp.png");
+}
+.oo-ui-icon-downTriangle {
+       background-image: url("themes/mediawiki/images/icons/downTriangle.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/downTriangle.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/downTriangle.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/downTriangle.png");
+}
+.oo-ui-icon-move {
+       background-image: url("themes/mediawiki/images/icons/move.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move.png");
+}
+.oo-ui-icon-upTriangle {
+       background-image: url("themes/mediawiki/images/icons/upTriangle.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upTriangle.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upTriangle.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/upTriangle.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css
new file mode 100644 (file)
index 0000000..096ae08
--- /dev/null
@@ -0,0 +1,34 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-userActive {
+       background-image: url("themes/mediawiki/images/icons/userActive-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userActive-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userActive-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userActive-ltr.png");
+}
+.oo-ui-icon-userAvatar {
+       background-image: url("themes/mediawiki/images/icons/userAvatar.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userAvatar.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userAvatar.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userAvatar.png");
+}
+.oo-ui-icon-userInactive {
+       background-image: url("themes/mediawiki/images/icons/userInactive-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userInactive-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userInactive-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userInactive-ltr.png");
+}
+.oo-ui-icon-userTalk {
+       background-image: url("themes/mediawiki/images/icons/userTalk-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userTalk-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userTalk-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userTalk-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css
new file mode 100644 (file)
index 0000000..afbb610
--- /dev/null
@@ -0,0 +1,28 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-icon-logoCC {
+       background-image: url("themes/mediawiki/images/icons/logo-cc.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-cc.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-cc.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-cc.png");
+}
+.oo-ui-icon-logoWikimediaCommons {
+       background-image: url("themes/mediawiki/images/icons/logo-wikimediaCommons.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikimediaCommons.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikimediaCommons.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-wikimediaCommons.png");
+}
+.oo-ui-icon-logoWikipedia {
+       background-image: url("themes/mediawiki/images/icons/logo-wikipedia.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikipedia.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikipedia.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-wikipedia.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
new file mode 100644 (file)
index 0000000..afef7bf
--- /dev/null
@@ -0,0 +1,2542 @@
+/*!
+ * OOjs UI v0.9.7
+ * 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-04-03T21:01:34Z
+ */
+.oo-ui-progressBarWidget-slide-frames from {
+       margin-left: -40%;
+}
+.oo-ui-progressBarWidget-slide-frames to {
+       margin-left: 100%;
+}
+@-webkit-keyframes oo-ui-progressBarWidget-slide {
+       from {
+               margin-left: -40%;
+       }
+       to {
+               margin-left: 100%;
+       }
+}
+@-moz-keyframes oo-ui-progressBarWidget-slide {
+       from {
+               margin-left: -40%;
+       }
+       to {
+               margin-left: 100%;
+       }
+}
+@-ms-keyframes oo-ui-progressBarWidget-slide {
+       from {
+               margin-left: -40%;
+       }
+       to {
+               margin-left: 100%;
+       }
+}
+@-o-keyframes oo-ui-progressBarWidget-slide {
+       from {
+               margin-left: -40%;
+       }
+       to {
+               margin-left: 100%;
+       }
+}
+@keyframes oo-ui-progressBarWidget-slide {
+       from {
+               margin-left: -40%;
+       }
+       to {
+               margin-left: 100%;
+       }
+}
+/* @noflip */
+.oo-ui-rtl {
+       direction: rtl;
+}
+/* @noflip */
+.oo-ui-ltr {
+       direction: ltr;
+}
+.oo-ui-element-hidden {
+       display: none !important;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+       cursor: pointer;
+       display: inline-block;
+       vertical-align: middle;
+       font: inherit;
+       white-space: nowrap;
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+          -moz-user-select: none;
+           -ms-user-select: none;
+               user-select: none;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+       display: none;
+}
+.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+       cursor: default;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       display: inline-block;
+       vertical-align: middle;
+       background-position: center center;
+       background-repeat: no-repeat;
+}
+.oo-ui-buttonElement-frameless {
+       display: inline-block;
+       position: relative;
+}
+.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+       display: inline-block;
+       vertical-align: top;
+       text-align: center;
+}
+.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       cursor: default;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+       font-weight: bold;
+}
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       margin-left: 0;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+       width: 0.9375em;
+       height: 0.9375em;
+       margin: 0.46875em;
+}
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+       margin-left: 0.46875em;
+}
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       width: 1.875em;
+       height: 1.875em;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
+       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.2);
+       outline: none;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator {
+       margin-right: 0;
+}
+.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       margin-left: 0.25em;
+       margin-right: 0.25em;
+}
+.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 > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #444444;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+       color: #347bff;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #777777;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #2962cc;
+       box-shadow: none;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+       color: #00af89;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #777777;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #008c6d;
+       box-shadow: none;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+       color: #d11d13;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #777777;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       color: #a7170f;
+       box-shadow: none;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+       color: #cccccc;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+       margin: 0.1em 0;
+       padding: 0.2em 0.8em;
+       border-radius: 2px;
+       -webkit-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+          -moz-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+           -ms-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+            -o-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+               transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
+       outline: none;
+}
+.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+       line-height: 1.875em;
+}
+.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       margin-left: -0.5em;
+       margin-right: -0.5em;
+}
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+       margin-right: 0.3em;
+}
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+       /* -0.5 - 0.475 */
+       margin-left: -0.005em;
+       margin-right: -0.005em;
+}
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+       margin-left: 0.46875em;
+       margin-right: -0.275em;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+       color: #ffffff;
+       background: #dddddd;
+       border: 1px solid #dddddd;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
+       color: #555555;
+       background-color: #ffffff;
+       border: 1px solid #cdcdcd;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover {
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
+       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       background-color: #d0d0d0;
+       border-color: #d0d0d0;
+       box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+       background-color: #999999;
+       color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
+       color: #347bff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
+       box-shadow: inset 0 -0.2em 0 0 #2962cc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
+       border-bottom-color: #2962cc;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
+       box-shadow: inset 0 0 0 1px #2962cc;
+       border-color: #2962cc;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       color: #2962cc;
+       border-color: #d0d0d0;
+       box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+       background-color: #999999;
+       color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
+       color: #00af89;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
+       box-shadow: inset 0 -0.2em 0 0 #008c6d, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
+       border-bottom-color: #008c6d;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
+       box-shadow: inset 0 0 0 1px #008c6d;
+       border-color: #008c6d;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       color: #008c6d;
+       border-color: #d0d0d0;
+       box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+       background-color: #999999;
+       color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
+       color: #d11d13;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
+       box-shadow: inset 0 -0.2em 0 0 #a7170f, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
+       border-bottom-color: #a7170f;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
+       box-shadow: inset 0 0 0 1px #a7170f;
+       border-color: #a7170f;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       color: #a7170f;
+       border-color: #d0d0d0;
+       box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+       background-color: #999999;
+       color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
+       color: #ffffff;
+       background-color: #347bff;
+       border-color: #347bff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
+       box-shadow: inset 0 -0.2em 0 0 #2962cc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
+       border-bottom-color: #2962cc;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
+       box-shadow: inset 0 0 0 1px #2962cc;
+       border-color: #2962cc;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       color: #ffffff;
+       background-color: #2962cc;
+       border-color: #2962cc;
+       box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+       background-color: #999999;
+       color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
+       color: #ffffff;
+       background-color: #00af89;
+       border-color: #00af89;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
+       box-shadow: inset 0 -0.2em 0 0 #008c6d, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
+       border-bottom-color: #008c6d;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
+       box-shadow: inset 0 0 0 1px #008c6d;
+       border-color: #008c6d;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       color: #ffffff;
+       background-color: #008c6d;
+       border-color: #008c6d;
+       box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+       background-color: #999999;
+       color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
+       color: #ffffff;
+       background-color: #d11d13;
+       border-color: #d11d13;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
+       box-shadow: inset 0 -0.2em 0 0 #a7170f, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
+       border-bottom-color: #a7170f;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
+       box-shadow: inset 0 0 0 1px #a7170f;
+       border-color: #a7170f;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+       color: #ffffff;
+       background-color: #a7170f;
+       border-color: #a7170f;
+       box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+       background-color: #999999;
+       color: #ffffff;
+}
+.oo-ui-clippableElement-clippable {
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-draggableElement {
+       cursor: -webkit-grab -moz-grab, url(images/grab.cur), move;
+       /*
+        * HACK: In order to style horizontally, we must override
+        * OO.ui.OptionWidget's display rule that is currently set
+        * to be 'block'
+        */
+}
+.oo-ui-draggableElement-dragging {
+       cursor: -webkit-grabbing -moz-grabbing, url(images/grabbing.cur), move;
+       background: rgba(0, 0, 0, 0.2);
+       opacity: 0.4;
+}
+.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement.oo-ui-optionWidget {
+       display: inline-block;
+}
+.oo-ui-draggableGroupElement-placeholder {
+       position: absolute;
+       display: block;
+       background: rgba(0, 0, 0, 0.4);
+}
+.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-iconElement.oo-ui-iconElement-icon {
+       background-size: contain;
+       background-position: center center;
+}
+.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
+.oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
+       background-size: contain;
+       background-position: center center;
+}
+.oo-ui-lookupElement > .oo-ui-menuSelectWidget {
+       z-index: 1;
+       width: 100%;
+}
+.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
+       overflow-y: hidden;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
+       width: 100%;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-scrollable {
+       overflow-y: auto;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-padded {
+       padding: 2em;
+}
+.oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget {
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       bottom: 3em;
+       overflow-y: auto;
+}
+.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
+       position: absolute;
+       bottom: 0;
+       left: 0;
+       right: 0;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
+       padding: 1.5em;
+}
+.oo-ui-bookletLayout-outlinePanel {
+       border-right: 1px solid #dddddd;
+}
+.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
+       box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
+}
+.oo-ui-fieldLayout {
+       display: block;
+       margin-bottom: 1em;
+}
+.oo-ui-fieldLayout:before,
+.oo-ui-fieldLayout:after {
+       content: " ";
+       display: table;
+}
+.oo-ui-fieldLayout:after {
+       clear: both;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+       display: block;
+       float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+       text-align: right;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body {
+       display: table;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+       display: table-cell;
+       vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-top > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+       display: inline-block;
+}
+.oo-ui-fieldLayout > .oo-ui-fieldLayout-help {
+       float: right;
+}
+.oo-ui-fieldLayout > .oo-ui-fieldLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       z-index: 1;
+}
+.oo-ui-fieldLayout > .oo-ui-fieldLayout-help .oo-ui-fieldLayout-help-content {
+       padding: 0.5em 0.75em;
+       line-height: 1.5em;
+}
+.oo-ui-fieldLayout:last-child {
+       margin-bottom: 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+       padding-top: 0.5em;
+       margin-right: 5%;
+       width: 35%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+       width: 60%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+       padding: 0.5em;
+       padding-left: 1em;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+       padding: 0.5em 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+       padding: 0.5em 0;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget {
+       margin-right: 0;
+       margin-top: 0.25em;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-fieldLayout-disabled .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;
+       vertical-align: middle;
+}
+.oo-ui-actionFieldLayout-input {
+       padding-right: 1em;
+}
+.oo-ui-actionFieldLayout-button {
+       width: 1%;
+       white-space: nowrap;
+}
+.oo-ui-fieldsetLayout {
+       position: relative;
+       margin: 0;
+       padding: 0;
+       border: none;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
+       display: block;
+       position: absolute;
+       background-position: center center;
+       background-repeat: no-repeat;
+}
+.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
+       display: inline-block;
+}
+.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help {
+       float: right;
+}
+.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+       z-index: 1;
+}
+.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help .oo-ui-fieldsetLayout-help-content {
+       padding: 0.5em 0.75em;
+       line-height: 1.5em;
+}
+.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout,
+.oo-ui-fieldsetLayout + .oo-ui-formLayout {
+       margin-top: 2em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
+       font-size: 1.1em;
+       margin-bottom: 0.5em;
+       padding: 0.25em 0;
+       font-weight: bold;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
+       padding-left: 2em;
+       line-height: 1.8em;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
+       left: 0;
+       top: 0.25em;
+       width: 1.875em;
+       height: 1.875em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget {
+       margin-right: 0;
+}
+.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-formLayout + .oo-ui-fieldsetLayout,
+.oo-ui-formLayout + .oo-ui-formLayout {
+       margin-top: 2em;
+}
+.oo-ui-menuLayout {
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       bottom: 0;
+}
+.oo-ui-menuLayout-menu,
+.oo-ui-menuLayout-content {
+       position: absolute;
+       -webkit-transition: all ease-in-out 200ms;
+          -moz-transition: all ease-in-out 200ms;
+           -ms-transition: all ease-in-out 200ms;
+            -o-transition: all ease-in-out 200ms;
+               transition: all ease-in-out 200ms;
+}
+.oo-ui-menuLayout-content {
+       top: 0;
+       left: 0;
+       right: 0;
+       bottom: 0;
+}
+.oo-ui-menuLayout-top .oo-ui-menuLayout-menu {
+       left: 0;
+       top: 0;
+       right: 0;
+}
+.oo-ui-menuLayout-top .oo-ui-menuLayout-content {
+       right: 0 !important;
+       bottom: 0 !important;
+       left: 0 !important;
+}
+.oo-ui-menuLayout-after .oo-ui-menuLayout-menu {
+       top: 0;
+       right: 0;
+       bottom: 0;
+}
+.oo-ui-menuLayout-after .oo-ui-menuLayout-content {
+       bottom: 0 !important;
+       left: 0 !important;
+       top: 0 !important;
+}
+.oo-ui-menuLayout-bottom .oo-ui-menuLayout-menu {
+       right: 0;
+       bottom: 0;
+       left: 0;
+}
+.oo-ui-menuLayout-bottom .oo-ui-menuLayout-content {
+       left: 0 !important;
+       top: 0 !important;
+       right: 0 !important;
+}
+.oo-ui-menuLayout-before .oo-ui-menuLayout-menu {
+       bottom: 0;
+       left: 0;
+       top: 0;
+}
+.oo-ui-menuLayout-before .oo-ui-menuLayout-content {
+       top: 0 !important;
+       right: 0 !important;
+       bottom: 0 !important;
+}
+.oo-ui-panelLayout {
+       position: relative;
+}
+.oo-ui-panelLayout-scrollable {
+       overflow-y: auto;
+}
+.oo-ui-panelLayout-expanded {
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       bottom: 0;
+}
+.oo-ui-panelLayout-padded {
+       padding: 1.25em;
+}
+.oo-ui-panelLayout-framed {
+       border: 1px solid #aaaaaa;
+       border-radius: 0.2em;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
+       display: block;
+       position: relative;
+}
+.oo-ui-popupTool .oo-ui-popupWidget-popup,
+.oo-ui-popupTool .oo-ui-popupWidget-anchor {
+       z-index: 4;
+}
+.oo-ui-popupTool .oo-ui-popupWidget {
+       /* @noflip */
+       margin-left: 1.25em;
+       font-size: 0.8em;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup {
+       margin: 0;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle {
+       height: 1.5em;
+       padding: 0.25em;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+       height: 1.5em;
+       width: 1.5em;
+       opacity: 0.8;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       line-height: 2.1em;
+}
+.oo-ui-toolGroup {
+       display: inline-block;
+       vertical-align: middle;
+       margin: 0.3em;
+}
+.oo-ui-toolGroup-empty {
+       display: none;
+}
+.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+       background-position: center center;
+       background-repeat: no-repeat;
+}
+.oo-ui-toolbar-narrow .oo-ui-toolGroup + .oo-ui-toolGroup {
+       margin-left: 0;
+}
+.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
+       color: #000000;
+}
+.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-accel {
+       color: #888888;
+}
+.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
+.oo-ui-barToolGroup > .oo-ui-labelElement-label {
+       display: none;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool {
+       display: inline-block;
+       position: relative;
+       vertical-align: top;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
+       display: block;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
+       display: block;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-accel,
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-title {
+       display: none;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link {
+       cursor: default;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link > .oo-ui-tool-title,
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link > .oo-ui-tool-accel {
+       display: none;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
+       cursor: pointer;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
+       height: 1.5em;
+       padding: 0.25em;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
+       height: 1.5em;
+       width: 1.5em;
+       opacity: 0.8;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled {
+       background-color: #eeeeee;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 0.2;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 0.8;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover > .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 1;
+}
+.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 0.2;
+}
+.oo-ui-popupToolGroup {
+       position: relative;
+       height: 2em;
+       min-width: 2em;
+}
+.oo-ui-popupToolGroup-handle {
+       display: block;
+       cursor: pointer;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+       position: absolute;
+       background-position: center center;
+       background-repeat: no-repeat;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
+       cursor: default;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+       display: none;
+       position: absolute;
+       z-index: 4;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
+       background-repeat: no-repeat;
+       background-position: center center;
+}
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
+       display: block;
+}
+.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
+       left: 0;
+}
+.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
+       right: 0;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link {
+       display: table;
+       width: 100%;
+       vertical-align: middle;
+       white-space: nowrap;
+       text-decoration: none;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+       display: table-cell;
+       vertical-align: middle;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel {
+       text-align: right;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel:not(:empty) {
+       padding-left: 3em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup {
+       min-width: 1.5em;
+}
+.oo-ui-popupToolGroup.oo-ui-iconElement {
+       min-width: 2.5em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-iconElement {
+       min-width: 2em;
+}
+.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
+       min-width: 3.5em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
+       min-width: 3em;
+}
+.oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       line-height: 2.6em;
+       font-size: 0.8em;
+       margin: 0 1em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin: 0 0.5em;
+}
+.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-left: 3em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-left: 2.5em;
+}
+.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-right: 2.25em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-right: 1.75em;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
+       width: 0.75em;
+       height: 0.75em;
+       margin: 0.625em;
+       top: 0;
+       right: 0;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
+       right: -0.25em;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+       width: 1.5em;
+       height: 1.5em;
+       margin: 0.25em;
+       top: 0;
+       left: 0.25em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+       left: 0;
+}
+.oo-ui-popupToolGroup-header {
+       line-height: 2.6em;
+       font-size: 0.8em;
+       margin: 0 0.6em;
+       font-weight: bold;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+       top: 2em;
+       background-color: white;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link {
+       padding: 0.25em 0 0.25em 0.25em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+       height: 1.5em;
+       width: 1.5em;
+       min-width: 1.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+       padding-left: 0.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+       line-height: 2em;
+       font-size: 0.8em;
+}
+.oo-ui-listToolGroup .oo-ui-tool {
+       display: block;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+       cursor: pointer;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+       cursor: default;
+}
+.oo-ui-listToolGroup .oo-ui-tool {
+       padding: 0 0.75em 0 0.25em;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+       background-color: #eeeeee;
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled,
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
+       background-color: #d0d0d0;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
+       color: #cccccc;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-accel {
+       color: #dddddd;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 0.2;
+}
+.oo-ui-listToolGroup.oo-ui-widget-disabled {
+       color: #cccccc;
+}
+.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
+.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
+       opacity: 0.2;
+}
+.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
+       padding: 0.25em 0 0.25em 0;
+       border: 1px solid #aaaaaa;
+       border-radius: 0.2em;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
+}
+.oo-ui-menuToolGroup {
+       border: 1px solid #cccccc;
+       border-radius: 0.1em;
+}
+.oo-ui-menuToolGroup .oo-ui-tool {
+       display: block;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+       cursor: pointer;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+       cursor: default;
+}
+.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
+       min-width: 8em;
+}
+.oo-ui-toolbar-narrow .oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
+       min-width: 6.5em;
+}
+.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
+       margin-left: -1px;
+       padding: 0.25em 0 0.25em 0;
+       border: 1px solid #aaaaaa;
+       border-radius: 0.2em;
+       border-top-left-radius: 0;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
+}
+.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
+       border-color: #aaaaaa;
+}
+.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
+       border-color: #aaaaaa;
+}
+.oo-ui-menuToolGroup .oo-ui-tool {
+       padding: 0 1em 0 0.25em;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+       background-image: none;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
+       background-image: url("themes/mediawiki/images/icons/check.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png");
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+       background-color: #eeeeee;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
+       color: #cccccc;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 0.2;
+}
+.oo-ui-menuToolGroup.oo-ui-widget-disabled {
+       color: #cccccc;
+       border-color: #cccccc;
+}
+.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
+.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
+       opacity: 0.2;
+}
+.oo-ui-toolbar {
+       clear: both;
+}
+.oo-ui-toolbar-bar {
+       line-height: 1em;
+}
+.oo-ui-toolbar-actions {
+       float: right;
+}
+.oo-ui-toolbar-tools {
+       display: inline;
+       white-space: nowrap;
+}
+.oo-ui-toolbar-narrow .oo-ui-toolbar-tools {
+       white-space: normal;
+}
+.oo-ui-toolbar-tools .oo-ui-tool {
+       white-space: normal;
+}
+.oo-ui-toolbar-tools,
+.oo-ui-toolbar-actions,
+.oo-ui-toolbar-shadow {
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+          -moz-user-select: none;
+           -ms-user-select: none;
+               user-select: none;
+}
+.oo-ui-toolbar-actions .oo-ui-popupWidget {
+       -webkit-touch-callout: default;
+       -webkit-user-select: all;
+          -moz-user-select: all;
+           -ms-user-select: all;
+               user-select: all;
+}
+.oo-ui-toolbar-shadow {
+       background-position: left top;
+       background-repeat: repeat-x;
+       position: absolute;
+       width: 100%;
+       pointer-events: none;
+}
+.oo-ui-toolbar-bar {
+       border-bottom: 2px solid rgba(0, 0, 0, 0.15);
+       background: #ffffff;
+}
+.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
+       border: none;
+       background: none;
+}
+.oo-ui-toolbar-shadow {
+       display: none;
+}
+.oo-ui-selectWidget {
+       border-radius: 2px;
+}
+.oo-ui-selectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+       border-radius: 0;
+       margin-left: -1px;
+}
+.oo-ui-selectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
+       border-bottom-left-radius: 2px;
+       border-top-left-radius: 2px;
+       margin-left: 0;
+}
+.oo-ui-selectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 2px;
+       border-top-right-radius: 2px;
+}
+.oo-ui-optionWidget {
+       position: relative;
+       display: block;
+       cursor: pointer;
+       padding: 0.25em 0.5em;
+       border: none;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+       cursor: default;
+}
+.oo-ui-optionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+       display: block;
+       white-space: nowrap;
+       text-overflow: ellipsis;
+       overflow: hidden;
+}
+.oo-ui-optionWidget-highlighted {
+       background-color: #eeeeee;
+}
+.oo-ui-optionWidget .oo-ui-labelElement-label {
+       line-height: 1.5em;
+}
+.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected,
+.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed,
+.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted,
+.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
+       background-color: #d0d0d0;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+       color: #cccccc;
+}
+.oo-ui-decoratedOptionWidget {
+       padding: 0.5em 2em 0.5em 3em;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
+       position: absolute;
+       background-repeat: no-repeat;
+       background-position: center center;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       top: 0;
+       height: 100%;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       width: 1.875em;
+       left: 0.5em;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       width: 0.9375em;
+       right: 0.5em;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
+.oo-ui-buttonSelectWidget {
+       display: inline-block;
+       white-space: nowrap;
+       border-radius: 2px;
+       margin-right: 0.5em;
+}
+.oo-ui-buttonSelectWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+       border-radius: 0;
+       margin-left: -1px;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
+       border-bottom-left-radius: 2px;
+       border-top-left-radius: 2px;
+       margin-left: 0;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 2px;
+       border-top-right-radius: 2px;
+}
+.oo-ui-buttonOptionWidget {
+       display: inline-block;
+       padding: 0;
+       background-color: transparent;
+}
+.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+       position: relative;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       position: static;
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+       height: 1.875em;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       margin-top: 0;
+}
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
+       background-color: transparent;
+}
+.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+       opacity: 1;
+}
+.oo-ui-radioOptionWidget {
+       cursor: default;
+       padding: 0.25em 0;
+       background-color: transparent;
+}
+.oo-ui-radioOptionWidget .oo-ui-radioInputWidget,
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-radioOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-radioOptionWidget.oo-ui-optionWidget-pressed,
+.oo-ui-radioOptionWidget.oo-ui-optionWidget-highlighted {
+       background-color: transparent;
+}
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+       padding: 0.25em;
+       padding-left: 1em;
+}
+.oo-ui-radioOptionWidget .oo-ui-radioInputWidget {
+       margin-right: 0;
+}
+.oo-ui-labelWidget {
+       display: inline-block;
+}
+.oo-ui-iconWidget {
+       display: inline-block;
+       vertical-align: middle;
+       background-position: center center;
+       background-repeat: no-repeat;
+       line-height: 2.5em;
+       height: 1.875em;
+       width: 1.875em;
+}
+.oo-ui-iconWidget.oo-ui-widget-disabled {
+       opacity: 0.2;
+}
+.oo-ui-indicatorWidget {
+       display: inline-block;
+       vertical-align: middle;
+       background-position: center center;
+       background-repeat: no-repeat;
+       line-height: 2.5em;
+       height: 0.9375em;
+       width: 0.9375em;
+       margin: 0.46875em;
+}
+.oo-ui-indicatorWidget.oo-ui-widget-disabled {
+       opacity: 0.2;
+}
+.oo-ui-buttonWidget {
+       display: inline-block;
+       vertical-align: middle;
+       margin-right: 0.5em;
+}
+.oo-ui-buttonWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-buttonGroupWidget {
+       display: inline-block;
+       white-space: nowrap;
+       border-radius: 2px;
+       margin-right: 0.5em;
+}
+.oo-ui-buttonGroupWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonWidget {
+       margin-right: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+       border-radius: 0;
+       margin-left: -1px;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
+       border-bottom-left-radius: 2px;
+       border-top-left-radius: 2px;
+       margin-left: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
+       border-bottom-right-radius: 2px;
+       border-top-right-radius: 2px;
+}
+.oo-ui-toggleSwitchWidget {
+       position: relative;
+       display: inline-block;
+       vertical-align: middle;
+       overflow: hidden;
+       cursor: pointer;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+       -webkit-transform: translateZ(0px);
+          -moz-transform: translateZ(0px);
+           -ms-transform: translateZ(0px);
+            -o-transform: translateZ(0px);
+               transform: translateZ(0px);
+       height: 2em;
+       width: 4em;
+       border-radius: 1em;
+       border: 1px #dddddd solid;
+       margin-right: 0.5em;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
+       cursor: default;
+}
+.oo-ui-toggleSwitchWidget-grip {
+       position: absolute;
+       display: block;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+       position: absolute;
+       top: 0;
+       bottom: 0;
+       right: 0;
+       left: 0;
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+          -moz-user-select: none;
+           -ms-user-select: none;
+               user-select: none;
+}
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+       display: none;
+}
+.oo-ui-toggleSwitchWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-toggleSwitchWidget-grip {
+       top: 0.25em;
+       left: 0.25em;
+       width: 1.5em;
+       height: 1.5em;
+       margin-top: -1px;
+       border-radius: 1em;
+       border: 1px #dddddd solid;
+       background-color: #f7f7f7;
+       -webkit-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+          -moz-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+           -ms-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+            -o-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+               transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+}
+.oo-ui-toggleSwitchWidget-glow {
+       border-radius: 1em;
+       background-color: #f7f7f7;
+       -webkit-transition: background-color 0.1s ease-in-out;
+          -moz-transition: background-color 0.1s ease-in-out;
+           -ms-transition: background-color 0.1s ease-in-out;
+            -o-transition: background-color 0.1s ease-in-out;
+               transition: background-color 0.1s ease-in-out;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
+       left: 2.25em;
+       margin-left: -2px;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+       display: block;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
+       left: 0.25em;
+       margin-left: 0;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled {
+       border: 1px #cccccc solid;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover {
+       border-color: #aaaaaa;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled .oo-ui-toggleSwitchWidget-grip {
+       background-color: #ffffff;
+       border-color: #aaaaaa;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
+       background-color: #d0d0d0;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+       background-color: #ffffff;
+}
+.oo-ui-progressBarWidget {
+       max-width: 50em;
+       border: 1px solid #cccccc;
+       border-radius: 0.1em;
+       overflow: hidden;
+}
+.oo-ui-progressBarWidget-bar {
+       height: 1em;
+       background: #dddddd;
+       -webkit-transition: width 200ms, margin-left 200ms;
+          -moz-transition: width 200ms, margin-left 200ms;
+           -ms-transition: width 200ms, margin-left 200ms;
+            -o-transition: width 200ms, margin-left 200ms;
+               transition: width 200ms, margin-left 200ms;
+}
+.oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar {
+       -webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+          -moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+           -ms-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+            -o-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+               animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+       width: 40%;
+       margin-left: -10%;
+       border-left-width: 1px;
+}
+.oo-ui-progressBarWidget.oo-ui-widget-disabled {
+       opacity: 0.6;
+}
+.oo-ui-actionWidget.oo-ui-pendingElement-pending {
+       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
+.oo-ui-popupWidget {
+       position: absolute;
+       /* @noflip */
+       left: 0;
+}
+.oo-ui-popupWidget-popup {
+       position: relative;
+       overflow: hidden;
+       z-index: 1;
+}
+.oo-ui-popupWidget-anchor {
+       display: none;
+       z-index: 1;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
+       display: block;
+       position: absolute;
+       top: 0;
+       /* @noflip */
+       left: 0;
+       background-repeat: no-repeat;
+}
+.oo-ui-popupWidget-head {
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+          -moz-user-select: none;
+           -ms-user-select: none;
+               user-select: none;
+}
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+       float: right;
+}
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+       float: left;
+       cursor: default;
+}
+.oo-ui-popupWidget-body {
+       clear: both;
+       overflow: hidden;
+}
+.oo-ui-popupWidget-popup {
+       border: 1px solid #aaaaaa;
+       border-radius: 0.2em;
+       background-color: #ffffff;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
+       margin-top: 9px;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before,
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
+       content: "";
+       position: absolute;
+       width: 0;
+       height: 0;
+       border-style: solid;
+       border-color: transparent;
+       border-top: 0;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before {
+       bottom: -10px;
+       left: -9px;
+       border-bottom-color: #888888;
+       border-width: 10px;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
+       bottom: -10px;
+       left: -8px;
+       border-bottom-color: #ffffff;
+       border-width: 9px;
+}
+.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
+       -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+          -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+           -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+            -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+               transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+}
+.oo-ui-popupWidget-head {
+       height: 2.5em;
+}
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+       margin: 0.25em;
+}
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+       margin: 0.75em 1em;
+}
+.oo-ui-popupWidget-body-padded {
+       padding: 0 1em;
+}
+.oo-ui-popupButtonWidget {
+       position: relative;
+}
+.oo-ui-popupButtonWidget .oo-ui-popupWidget {
+       position: absolute;
+       cursor: auto;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget {
+       /* @noflip */
+       left: 1em;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
+       /* @noflip */
+       left: 1.75em;
+}
+.oo-ui-inputWidget {
+       margin-right: 0.5em;
+}
+.oo-ui-inputWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-buttonInputWidget {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-checkboxInputWidget {
+       position: relative;
+       line-height: 1.6em;
+       white-space: nowrap;
+}
+.oo-ui-checkboxInputWidget * {
+       font: inherit;
+       vertical-align: middle;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] {
+       opacity: 0;
+       z-index: 1;
+       position: relative;
+       margin: 0;
+       width: 1.6em;
+       height: 1.6em;
+       max-width: none;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] + span {
+       cursor: pointer;
+       -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+          -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+           -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+            -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+               transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+       position: absolute;
+       left: 0;
+       border-radius: 2px;
+       width: 1.6em;
+       height: 1.6em;
+       background-color: white;
+       border: 1px solid #777777;
+       background-image: url("themes/mediawiki/images/icons/check-constructive.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive.png");
+       background-repeat: no-repeat;
+       background-position: center center;
+       background-origin: border-box;
+       background-size: 0 0;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span {
+       background-size: 100% 100%;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span {
+       background-color: #dddddd;
+       border-color: #dddddd;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span {
+       border-width: 2px;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus:hover + span,
+.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span {
+       border-bottom-width: 3px;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span {
+       cursor: default;
+       background-color: #eeeeee;
+       border-color: #eeeeee;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled:checked + span {
+       background-image: url("themes/mediawiki/images/icons/check-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-invert.png");
+}
+.oo-ui-dropdownInputWidget {
+       position: relative;
+       vertical-align: middle;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+       width: 100%;
+       max-width: 50em;
+}
+.oo-ui-dropdownInputWidget select {
+       display: inline-block;
+       width: 100%;
+       resize: none;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-dropdownInputWidget select {
+       height: 2.5em;
+       padding: 0.5em;
+       font-size: inherit;
+       font-family: inherit;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+       border: 1px solid #cccccc;
+}
+.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover,
+.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus {
+       border-color: #aaaaaa;
+       outline: none;
+}
+.oo-ui-dropdownInputWidget.oo-ui-widget-disabled select {
+       color: #cccccc;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
+}
+.oo-ui-radioInputWidget {
+       position: relative;
+       line-height: 1.6em;
+       white-space: nowrap;
+}
+.oo-ui-radioInputWidget * {
+       font: inherit;
+       vertical-align: middle;
+}
+.oo-ui-radioInputWidget input[type="radio"] {
+       opacity: 0;
+       z-index: 1;
+       position: relative;
+       margin: 0;
+       width: 1.6em;
+       height: 1.6em;
+       max-width: none;
+}
+.oo-ui-radioInputWidget input[type="radio"] + span {
+       cursor: pointer;
+       -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+          -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+           -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+            -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+               transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+       position: absolute;
+       left: 0;
+       border-radius: 100%;
+       width: 1.6em;
+       height: 1.6em;
+       background: white;
+       border: 1px solid #777777;
+       background-image: url("themes/mediawiki/images/icons/circle-constructive.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive.png");
+       background-repeat: no-repeat;
+       background-position: center center;
+       background-origin: border-box;
+       background-size: 0 0;
+}
+.oo-ui-radioInputWidget input[type="radio"]:checked + span {
+       background-size: 100% 100%;
+}
+.oo-ui-radioInputWidget input[type="radio"]:active + span {
+       background-color: #dddddd;
+       border-color: #dddddd;
+}
+.oo-ui-radioInputWidget input[type="radio"]:focus + span {
+       border-width: 2px;
+}
+.oo-ui-radioInputWidget input[type="radio"]:focus:hover + span,
+.oo-ui-radioInputWidget input[type="radio"]:hover + span {
+       border-bottom-width: 3px;
+}
+.oo-ui-radioInputWidget input[type="radio"]:disabled + span {
+       cursor: default;
+       background-color: #eeeeee;
+       border-color: #eeeeee;
+}
+.oo-ui-radioInputWidget input[type="radio"]:disabled:checked + span {
+       background-image: url("themes/mediawiki/images/icons/circle-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
+       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-textInputWidget {
+       position: relative;
+       vertical-align: middle;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+       width: 100%;
+       max-width: 50em;
+}
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+       display: inline-block;
+       width: 100%;
+       resize: none;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
+.oo-ui-textInputWidget > .oo-ui-labelElement-label {
+       display: none;
+}
+.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
+       display: block;
+       position: absolute;
+       top: 0;
+       height: 100%;
+       background-repeat: no-repeat;
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+          -moz-user-select: none;
+           -ms-user-select: none;
+               user-select: none;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
+       cursor: pointer;
+}
+.oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
+       display: block;
+}
+.oo-ui-textInputWidget > .oo-ui-iconElement-icon {
+       left: 0;
+}
+.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
+       right: 0;
+}
+.oo-ui-textInputWidget > .oo-ui-labelElement-label {
+       position: absolute;
+       top: 0;
+}
+.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label {
+       right: 0;
+}
+.oo-ui-textInputWidget-labelPosition-before > .oo-ui-labelElement-label {
+       left: 0;
+}
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+       padding: 0.5em;
+       margin: 0;
+       font-size: inherit;
+       font-family: inherit;
+       background-color: #ffffff;
+       color: black;
+       border: solid 1px #cccccc;
+       box-shadow: inset 0 0 0 0 #347bff;
+       border-radius: 0.1em;
+       -webkit-transition: box-shadow 0.1s;
+          -moz-transition: box-shadow 0.1s;
+           -ms-transition: box-shadow 0.1s;
+            -o-transition: box-shadow 0.1s;
+               transition: box-shadow 0.1s;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-textInputWidget-decorated input,
+.oo-ui-textInputWidget-decorated textarea {
+       padding-left: 2em;
+}
+.oo-ui-textInputWidget-icon {
+       width: 2em;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
+       -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+          -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+           -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+            -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+               transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
+       outline: none;
+       border-color: #347bff;
+       box-shadow: inset 0 0 0 0.1em #347bff;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
+       color: #777777;
+       text-shadow: 0 1px 1px #ffffff;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly]:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly]:focus {
+       border-color: #cccccc;
+       box-shadow: inset 0 0 0 0.1em #cccccc;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled input,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
+       color: #dddddd;
+       text-shadow: 0 1px 1px #ffffff;
+}
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
+       background-color: transparent;
+       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
+.oo-ui-textInputWidget.oo-ui-iconElement input,
+.oo-ui-textInputWidget.oo-ui-iconElement textarea {
+       padding-left: 2.75em;
+}
+.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       left: 0.4em;
+       width: 1.875em;
+       margin-left: 0.1em;
+       height: 100%;
+       background-position: right center;
+}
+.oo-ui-textInputWidget.oo-ui-indicatorElement input,
+.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
+       padding-right: 1.875em;
+}
+.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       width: 0.9375em;
+       margin: 0 0.775em;
+       height: 100%;
+}
+.oo-ui-textInputWidget > .oo-ui-labelElement-label {
+       padding: 0.4em;
+       line-height: 1.5em;
+       color: #888888;
+}
+.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
+       margin-right: 2em;
+}
+.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
+       margin-left: 2.5em;
+}
+.oo-ui-menuSelectWidget {
+       position: absolute;
+       background: #ffffff;
+       margin-top: -1px;
+       border: 1px solid #aaaaaa;
+       border-radius: 0 0 0.2em 0.2em;
+       padding-bottom: 0.25em;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-menuSelectWidget input {
+       position: absolute;
+       width: 0;
+       height: 0;
+       overflow: hidden;
+       opacity: 0;
+}
+.oo-ui-menuOptionWidget {
+       position: relative;
+       padding: 0.5em 1em;
+}
+.oo-ui-menuOptionWidget .oo-ui-iconElement-icon {
+       display: none;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
+       background-color: transparent;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+       display: block;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
+       background-color: #999999;
+       color: #ffffff;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+       display: none;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted {
+       background-color: #eeeeee;
+       color: black;
+}
+.oo-ui-menuSectionOptionWidget {
+       cursor: default;
+       padding: 0.33em 0.75em;
+       color: #888888;
+}
+.oo-ui-dropdownWidget {
+       display: inline-block;
+       position: relative;
+       margin: 0.25em 0;
+       width: 100%;
+       max-width: 50em;
+       margin-right: 0.5em;
+}
+.oo-ui-dropdownWidget-handle {
+       width: 100%;
+       display: inline-block;
+       cursor: pointer;
+       -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-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+       position: absolute;
+       background-position: center center;
+       background-repeat: no-repeat;
+}
+.oo-ui-dropdownWidget > .oo-ui-menuSelectWidget {
+       z-index: 1;
+       width: 100%;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
+       cursor: default;
+}
+.oo-ui-dropdownWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-dropdownWidget-handle {
+       height: 2.5em;
+       border: 1px solid #cccccc;
+       border-radius: 0.1em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
+       right: 0;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+       left: 0.25em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+       line-height: 2.5em;
+       margin: 0 1em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
+       top: 0;
+       width: 0.9375em;
+       height: 0.9375em;
+       margin: 0.775em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+       top: 0;
+       width: 1.875em;
+       height: 1.875em;
+       margin: 0.3em;
+}
+.oo-ui-dropdownWidget:hover .oo-ui-dropdownWidget-handle {
+       border-color: #aaaaaa;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
+.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+       margin-left: 3em;
+}
+.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+       margin-right: 2em;
+}
+.oo-ui-dropdownWidget .oo-ui-selectWidget {
+       border-top-color: #ffffff;
+}
+.oo-ui-outlineOptionWidget {
+       position: relative;
+       cursor: pointer;
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+          -moz-user-select: none;
+           -ms-user-select: none;
+               user-select: none;
+       font-size: 1.1em;
+       padding: 0.75em;
+}
+.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
+       padding-right: 1.5em;
+}
+.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       opacity: 0.5;
+}
+.oo-ui-outlineOptionWidget-level-0 {
+       padding-left: 3.5em;
+}
+.oo-ui-outlineOptionWidget-level-0 .oo-ui-iconElement-icon {
+       left: 1em;
+}
+.oo-ui-outlineOptionWidget-level-1 {
+       padding-left: 5em;
+}
+.oo-ui-outlineOptionWidget-level-1 .oo-ui-iconElement-icon {
+       left: 2.5em;
+}
+.oo-ui-outlineOptionWidget-level-2 {
+       padding-left: 6.5em;
+}
+.oo-ui-outlineOptionWidget-level-2 .oo-ui-iconElement-icon {
+       left: 4em;
+}
+.oo-ui-selectWidget-depressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected {
+       background-color: #d0d0d0;
+       text-shadow: 0 1px 1px #ffffff;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important {
+       font-weight: bold;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-placeholder {
+       font-style: italic;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
+       opacity: 0.5;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
+       color: #777777;
+}
+.oo-ui-outlineControlsWidget {
+       height: 3em;
+       background-color: #ffffff;
+}
+.oo-ui-outlineControlsWidget-items,
+.oo-ui-outlineControlsWidget-movers {
+       float: left;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
+       float: left;
+       background-position: right center;
+       background-repeat: no-repeat;
+}
+.oo-ui-outlineControlsWidget-items {
+       float: left;
+}
+.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
+       float: left;
+}
+.oo-ui-outlineControlsWidget-movers {
+       float: right;
+}
+.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
+       float: right;
+}
+.oo-ui-outlineControlsWidget-items,
+.oo-ui-outlineControlsWidget-movers {
+       height: 2em;
+       margin: 0.5em 0.5em 0.5em 0;
+       padding: 0;
+}
+.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
+       width: 1.5em;
+       height: 2em;
+       margin: 0.5em 0 0.5em 0.5em;
+       opacity: 0.2;
+}
+.oo-ui-comboBoxWidget {
+       display: inline-block;
+       position: relative;
+       width: 100%;
+       max-width: 50em;
+       margin-right: 0.5em;
+}
+.oo-ui-comboBoxWidget > .oo-ui-menuSelectWidget {
+       z-index: 1;
+       width: 100%;
+}
+.oo-ui-comboBoxWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-comboBoxWidget .oo-ui-textInputWidget input,
+.oo-ui-comboBoxWidget .oo-ui-textInputWidget textarea {
+       height: 2.35em;
+}
+.oo-ui-searchWidget-query {
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget {
+       width: 100%;
+}
+.oo-ui-searchWidget-results {
+       position: absolute;
+       bottom: 0;
+       left: 0;
+       right: 0;
+       overflow-x: hidden;
+       overflow-y: auto;
+}
+.oo-ui-searchWidget-query {
+       height: 4em;
+       padding: 0 1em;
+       border-bottom: 1px solid #cccccc;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget {
+       margin: 0.75em 0;
+}
+.oo-ui-searchWidget-results {
+       top: 4em;
+       padding: 1em;
+       line-height: 0;
+}
+.oo-ui-window {
+       background: transparent;
+       font-size: 0.8em;
+}
+.oo-ui-window-frame {
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-window-content:focus {
+       outline: none;
+}
+.oo-ui-window-head,
+.oo-ui-window-foot {
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+          -moz-user-select: none;
+           -ms-user-select: none;
+               user-select: none;
+}
+.oo-ui-window-body {
+       margin: 0;
+       padding: 0;
+       background: none;
+}
+.oo-ui-window-overlay {
+       position: absolute;
+       top: 0;
+       /* @noflip */
+       left: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-head,
+.oo-ui-dialog-content > .oo-ui-window-body,
+.oo-ui-dialog-content > .oo-ui-window-foot {
+       position: absolute;
+       left: 0;
+       right: 0;
+       overflow: hidden;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-dialog-content > .oo-ui-window-head {
+       z-index: 1;
+       top: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-body {
+       z-index: 2;
+       top: 0;
+       bottom: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-foot {
+       z-index: 1;
+       bottom: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-body {
+       outline: 1px solid #aaaaaa;
+}
+.oo-ui-messageDialog-actions-horizontal {
+       display: table;
+       table-layout: fixed;
+       width: 100%;
+}
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
+       display: table-cell;
+       width: 1%;
+}
+.oo-ui-messageDialog-actions-vertical {
+       display: block;
+}
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
+       display: block;
+       overflow: hidden;
+       text-overflow: ellipsis;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget {
+       position: relative;
+       text-align: center;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
+       display: block;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
+       position: relative;
+       top: auto;
+       bottom: auto;
+       display: inline;
+       white-space: nowrap;
+}
+.oo-ui-messageDialog-title,
+.oo-ui-messageDialog-message {
+       display: block;
+       text-align: center;
+       padding-top: 0.5em;
+}
+.oo-ui-messageDialog-title {
+       font-size: 1.5em;
+       line-height: 1em;
+       color: #000000;
+}
+.oo-ui-messageDialog-message {
+       font-size: 0.9em;
+       line-height: 1.25em;
+       color: #666666;
+}
+.oo-ui-messageDialog-message-verbose {
+       font-size: 1.1em;
+       line-height: 1.5em;
+       text-align: left;
+}
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
+       border-right: 1px solid #e5e5e5;
+}
+.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;
+}
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
+       border-bottom-width: 0;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget {
+       height: 3.4em;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+       text-align: center;
+       line-height: 3.4em;
+       padding: 0 2em;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
+       background-color: rgba(0, 0, 0, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
+       background-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover {
+       background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active {
+       background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label {
+       font-weight: bold;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
+       background-color: rgba(118, 171, 54, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
+       background-color: rgba(118, 171, 54, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
+       background-color: rgba(212, 83, 83, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
+       background-color: rgba(212, 83, 83, 0.1);
+}
+.oo-ui-processDialog-location {
+       overflow: hidden;
+       text-overflow: ellipsis;
+       white-space: nowrap;
+}
+.oo-ui-processDialog-title {
+       display: inline;
+       padding: 0;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
+       white-space: nowrap;
+}
+.oo-ui-processDialog-actions-safe,
+.oo-ui-processDialog-actions-primary {
+       position: absolute;
+       top: 0;
+       bottom: 0;
+}
+.oo-ui-processDialog-actions-safe {
+       left: 0;
+}
+.oo-ui-processDialog-actions-primary {
+       right: 0;
+}
+.oo-ui-processDialog-errors {
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       bottom: 0;
+       z-index: 2;
+       overflow-x: hidden;
+       overflow-y: auto;
+}
+.oo-ui-processDialog-content .oo-ui-window-head {
+       height: 3.4em;
+}
+.oo-ui-processDialog-content .oo-ui-window-head.oo-ui-pendingElement-pending {
+       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
+.oo-ui-processDialog-content .oo-ui-window-body {
+       top: 3.4em;
+       outline: 1px solid rgba(0, 0, 0, 0.2);
+}
+.oo-ui-processDialog-navigation {
+       position: relative;
+       height: 3.4em;
+       padding: 0 1em;
+}
+.oo-ui-processDialog-location {
+       padding: 0.75em 0;
+       height: 1.875em;
+       cursor: default;
+       text-align: center;
+}
+.oo-ui-processDialog-title {
+       font-weight: bold;
+       line-height: 1.875em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
+       min-width: 1.875em;
+       min-height: 1.875em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
+       line-height: 1.875em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       margin-top: -0.125em;
+}
+.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;
+}
+.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;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
+       background-color: rgba(0, 0, 0, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
+.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-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active {
+       background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label {
+       font-weight: bold;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
+       background-color: rgba(118, 171, 54, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
+       background-color: rgba(118, 171, 54, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
+       background-color: rgba(212, 83, 83, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
+       background-color: rgba(212, 83, 83, 0.1);
+}
+.oo-ui-processDialog > .oo-ui-window-frame {
+       min-height: 5em;
+}
+.oo-ui-processDialog-errors {
+       background-color: rgba(255, 255, 255, 0.9);
+       padding: 3em 3em 1.5em 3em;
+       text-align: center;
+}
+.oo-ui-processDialog-errors .oo-ui-buttonWidget {
+       margin: 2em 1em 2em 1em;
+}
+.oo-ui-processDialog-errors-title {
+       font-size: 1.5em;
+       color: #000000;
+       margin-bottom: 2em;
+}
+.oo-ui-processDialog-error {
+       text-align: left;
+       margin: 1em;
+       padding: 1em;
+       border: 1px solid #ff9e9e;
+       background-color: #fff7f7;
+       border-radius: 0.25em;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog {
+       position: fixed;
+       width: 0;
+       height: 0;
+       overflow: hidden;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-active {
+       width: auto;
+       height: auto;
+       top: 0;
+       right: 0;
+       bottom: 0;
+       left: 0;
+       padding: 1em;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
+       position: absolute;
+       right: 0;
+       left: 0;
+       margin: auto;
+       overflow: hidden;
+       max-width: 100%;
+       max-height: 100%;
+}
+.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
+       width: 100%;
+       height: 100%;
+       top: 0;
+       bottom: 0;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog {
+       background-color: rgba(255, 255, 255, 0.5);
+       opacity: 0;
+       -webkit-transition: opacity 250ms ease-in-out;
+          -moz-transition: opacity 250ms ease-in-out;
+           -ms-transition: opacity 250ms ease-in-out;
+            -o-transition: opacity 250ms ease-in-out;
+               transition: opacity 250ms ease-in-out;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
+       top: 1em;
+       bottom: 1em;
+       background-color: #ffffff;
+       opacity: 0;
+       -webkit-transform: scale(0.5);
+          -moz-transform: scale(0.5);
+           -ms-transform: scale(0.5);
+            -o-transform: scale(0.5);
+               transform: scale(0.5);
+       -webkit-transition: all 250ms ease-in-out;
+          -moz-transition: all 250ms ease-in-out;
+           -ms-transition: all 250ms ease-in-out;
+            -o-transition: all 250ms ease-in-out;
+               transition: all 250ms ease-in-out;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
+       /* Fade window overlay */
+       opacity: 1;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
+       /* Fade frame */
+       opacity: 1;
+       -webkit-transform: scale(1);
+          -moz-transform: scale(1);
+           -ms-transform: scale(1);
+            -o-transform: scale(1);
+               transform: scale(1);
+}
+.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
+       border: 1px solid #aaaaaa;
+       border-radius: 0.2em;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
+}
index cf051b4..cfca47b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.7.0
+ * OOjs UI v0.9.7
  * 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-02-12T00:04:52Z
+ * Date: 2015-04-03T21:01:34Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
        display: inline-block;
        vertical-align: middle;
        font: inherit;
+       white-space: nowrap;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
           -moz-user-select: none;
            -ms-user-select: none;
                user-select: none;
 }
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       display: none;
-}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
 .oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
        display: none;
 }
 .oo-ui-buttonElement > .oo-ui-buttonElement-button {
        font-weight: bold;
 }
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
        margin-left: 0;
 }
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       margin-right: -0.75em;
-       margin-left: -0.75em;
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+       width: 0.9375em;
+       height: 0.9375em;
+       margin: 0.46875em;
 }
-.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
 .oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       margin-left: 0;
+       margin-left: 0.46875em;
 }
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
 .oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       width: 1.9em;
-       height: 1.9em;
+       width: 1.875em;
+       height: 1.875em;
 }
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       opacity: 0.2;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover,
 .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
+       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.2);
        outline: none;
 }
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator {
+       margin-right: 0;
+}
 .oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        margin-left: 0.25em;
+       margin-right: 0.25em;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #757575;
+       color: #555555;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        color: #444444;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #598ad1;
+       color: #347bff;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        color: #777777;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #015ccc;
+       color: #2962cc;
        box-shadow: none;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #00c697;
+       color: #00af89;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        color: #777777;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #e81915;
+       color: #d11d13;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        color: #777777;
 .oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
        color: #cccccc;
 }
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
        margin: 0.1em 0;
        padding: 0.2em 0.8em;
 }
 .oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       line-height: 1.9em;
+       line-height: 1.875em;
 }
 .oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
        margin-left: -0.5em;
        margin-right: -0.5em;
 }
 .oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       margin-left: -0.5em;
        margin-right: 0.3em;
 }
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+       /* -0.5 - 0.475 */
+       margin-left: -0.005em;
+       margin-right: -0.005em;
+}
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+       margin-left: 0.46875em;
+       margin-right: -0.275em;
+}
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
        color: #ffffff;
        background: #dddddd;
        border: 1px solid #dddddd;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
-       color: #757575;
+       color: #555555;
        background-color: #ffffff;
-       border: solid 1px #cdcdcd;
+       border: 1px solid #cdcdcd;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover {
        box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
-       border-color: #aaaaaa;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
        box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
        color: #ffffff;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
-       color: #0274ff;
+       color: #347bff;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #015ccc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #015ccc;
+       box-shadow: inset 0 -0.2em 0 0 #2962cc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
+       border-bottom-color: #2962cc;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #015ccc;
-       border-color: #015ccc;
+       box-shadow: inset 0 0 0 1px #2962cc;
+       border-color: #2962cc;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #015ccc;
+       color: #2962cc;
        border-color: #d0d0d0;
        box-shadow: none;
 }
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
        color: #ffffff;
-       background-color: #0274ff;
-       border-color: #0274ff;
+       background-color: #347bff;
+       border-color: #347bff;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #015ccc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #015ccc;
+       box-shadow: inset 0 -0.2em 0 0 #2962cc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
+       border-bottom-color: #2962cc;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #015ccc;
-       border-color: #015ccc;
+       box-shadow: inset 0 0 0 1px #2962cc;
+       border-color: #2962cc;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        color: #ffffff;
-       background-color: #015ccc;
-       border-color: #015ccc;
+       background-color: #2962cc;
+       border-color: #2962cc;
        box-shadow: none;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
        display: block;
        background: rgba(0, 0, 0, 0.4);
 }
+.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-iconElement.oo-ui-iconElement-icon {
+       background-size: contain;
+       background-position: center center;
+}
+.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
+.oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
+       background-size: contain;
+       background-position: center center;
+}
 .oo-ui-lookupElement > .oo-ui-menuSelectWidget {
        z-index: 1;
        width: 100%;
        padding: 1.5em;
 }
 .oo-ui-bookletLayout-outlinePanel {
-       border-right: solid 1px #dddddd;
+       border-right: 1px solid #dddddd;
 }
 .oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
        box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
 }
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
        padding: 0.5em;
+       padding-left: 1em;
 }
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
        padding: 0.5em 0;
        padding: 0.5em 0.75em;
        line-height: 1.5em;
 }
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
+.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout,
+.oo-ui-fieldsetLayout + .oo-ui-formLayout {
        margin-top: 2em;
 }
 .oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
        font-weight: bold;
 }
 .oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
-       padding-left: 1.75em;
-       line-height: 1.33em;
+       padding-left: 2em;
+       line-height: 1.8em;
 }
 .oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
        left: 0;
        top: 0.25em;
-       width: 1.5em;
-       height: 1.5em;
+       width: 1.875em;
+       height: 1.875em;
 }
 .oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget {
        margin-right: 0;
 .oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-gridLayout {
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 0;
+.oo-ui-formLayout + .oo-ui-fieldsetLayout,
+.oo-ui-formLayout + .oo-ui-formLayout {
+       margin-top: 2em;
 }
 .oo-ui-menuLayout {
        position: absolute;
        top: 0;
        right: 0;
 }
-.oo-ui-menuLayout-after .oo-ui-menuLayout-menu {
-       top: 0;
-       right: 0;
-       bottom: 0;
-}
-.oo-ui-menuLayout-bottom .oo-ui-menuLayout-menu {
-       right: 0;
-       bottom: 0;
-       left: 0;
-}
-.oo-ui-menuLayout-before .oo-ui-menuLayout-menu {
-       bottom: 0;
-       left: 0;
-       top: 0;
-}
 .oo-ui-menuLayout-top .oo-ui-menuLayout-content {
        right: 0 !important;
        bottom: 0 !important;
        left: 0 !important;
 }
+.oo-ui-menuLayout-after .oo-ui-menuLayout-menu {
+       top: 0;
+       right: 0;
+       bottom: 0;
+}
 .oo-ui-menuLayout-after .oo-ui-menuLayout-content {
        bottom: 0 !important;
        left: 0 !important;
        top: 0 !important;
 }
+.oo-ui-menuLayout-bottom .oo-ui-menuLayout-menu {
+       right: 0;
+       bottom: 0;
+       left: 0;
+}
 .oo-ui-menuLayout-bottom .oo-ui-menuLayout-content {
        left: 0 !important;
        top: 0 !important;
        right: 0 !important;
 }
+.oo-ui-menuLayout-before .oo-ui-menuLayout-menu {
+       bottom: 0;
+       left: 0;
+       top: 0;
+}
 .oo-ui-menuLayout-before .oo-ui-menuLayout-content {
        top: 0 !important;
        right: 0 !important;
 .oo-ui-panelLayout-padded {
        padding: 1.25em;
 }
+.oo-ui-panelLayout-framed {
+       border: 1px solid #aaaaaa;
+       border-radius: 0.2em;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
+}
 .oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
        display: block;
        position: relative;
        margin-left: 1.25em;
        font-size: 0.8em;
 }
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup {
+       margin: 0;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle {
+       height: 1.5em;
+       padding: 0.25em;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+       height: 1.5em;
+       width: 1.5em;
+       opacity: 0.8;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       line-height: 2.1em;
+}
 .oo-ui-toolGroup {
        display: inline-block;
        vertical-align: middle;
        background-position: center center;
        background-repeat: no-repeat;
 }
+.oo-ui-toolbar-narrow .oo-ui-toolGroup + .oo-ui-toolGroup {
+       margin-left: 0;
+}
 .oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
        color: #000000;
 }
 .oo-ui-barToolGroup > .oo-ui-labelElement-label {
        display: none;
 }
-.oo-ui-barToolGroup .oo-ui-tool {
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool {
        display: inline-block;
        position: relative;
        vertical-align: top;
 }
-.oo-ui-barToolGroup .oo-ui-tool-link {
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
        display: block;
 }
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
        display: block;
 }
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-accel,
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-title {
        display: none;
 }
-.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link {
        cursor: default;
 }
-.oo-ui-barToolGroup .oo-ui-tool-title,
-.oo-ui-barToolGroup .oo-ui-tool-accel {
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link > .oo-ui-tool-title,
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link > .oo-ui-tool-accel {
        display: none;
 }
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
        cursor: pointer;
 }
-.oo-ui-barToolGroup .oo-ui-tool-link {
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
        height: 1.5em;
        padding: 0.25em;
 }
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
        height: 1.5em;
        width: 1.5em;
        opacity: 0.8;
 }
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled {
        background-color: #eeeeee;
 }
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
        opacity: 0.2;
 }
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
        opacity: 0.8;
 }
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover > .oo-ui-tool-link .oo-ui-iconElement-icon {
        opacity: 1;
 }
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
        opacity: 0.2;
 }
 .oo-ui-popupToolGroup {
        position: relative;
        height: 2em;
-       min-width: 2.5em;
+       min-width: 2em;
 }
 .oo-ui-popupToolGroup-handle {
        display: block;
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel:not(:empty) {
        padding-left: 3em;
 }
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup {
+       min-width: 1.5em;
+}
+.oo-ui-popupToolGroup.oo-ui-iconElement {
+       min-width: 2.5em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-iconElement {
+       min-width: 2em;
+}
 .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
        min-width: 3.5em;
 }
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
+       min-width: 3em;
+}
 .oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
        line-height: 2.6em;
        font-size: 0.8em;
        margin: 0 1em;
 }
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin: 0 0.5em;
+}
 .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
        margin-left: 3em;
 }
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-left: 2.5em;
+}
 .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
        margin-right: 2.25em;
 }
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       top: 0;
-       width: 2em;
-       height: 2em;
-       opacity: 0.8;
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+       margin-right: 1.75em;
 }
 .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
+       width: 0.75em;
+       height: 0.75em;
+       margin: 0.625em;
+       top: 0;
        right: 0;
 }
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
+       right: -0.25em;
+}
 .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+       width: 1.5em;
+       height: 1.5em;
+       margin: 0.25em;
+       top: 0;
        left: 0.25em;
 }
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+       left: 0;
+}
 .oo-ui-popupToolGroup-header {
        line-height: 2.6em;
        font-size: 0.8em;
        top: 2em;
        background-color: white;
 }
+.oo-ui-popupToolGroup .oo-ui-tool-link {
+       padding: 0.25em 0 0.25em 0.25em;
+}
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       height: 2em;
-       width: 2em;
-       min-width: 2em;
+       height: 1.5em;
+       width: 1.5em;
+       min-width: 1.5em;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       padding-left: 0.25em;
+       padding-left: 0.5em;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
        cursor: default;
 }
 .oo-ui-listToolGroup .oo-ui-tool {
-       padding: 0 0.5em 0 0.25em;
+       padding: 0 0.75em 0 0.25em;
 }
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
        background-color: #eeeeee;
        box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
 }
 .oo-ui-menuToolGroup {
-       border: solid 1px #cccccc;
+       border: 1px solid #cccccc;
        border-radius: 0.1em;
 }
 .oo-ui-menuToolGroup .oo-ui-tool {
 .oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
        min-width: 8em;
 }
+.oo-ui-toolbar-narrow .oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
+       min-width: 6.5em;
+}
 .oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
        margin-left: -1px;
        padding: 0.25em 0 0.25em 0;
        border-color: #aaaaaa;
 }
 .oo-ui-menuToolGroup .oo-ui-tool {
-       padding: 0 0.75em 0 0.25em;
+       padding: 0 1em 0 0.25em;
 }
 .oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
        background-image: none;
 }
 .oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check.png);
+       background-image: url("themes/mediawiki/images/icons/check.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png");
 }
 .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
        background-color: #eeeeee;
 }
 .oo-ui-toolbar-tools {
        display: inline;
+       white-space: nowrap;
+}
+.oo-ui-toolbar-narrow .oo-ui-toolbar-tools {
+       white-space: normal;
+}
+.oo-ui-toolbar-tools .oo-ui-tool {
+       white-space: normal;
 }
 .oo-ui-toolbar-tools,
 .oo-ui-toolbar-actions,
        pointer-events: none;
 }
 .oo-ui-toolbar-bar {
-       border-bottom: solid 4px rgba(0, 0, 0, 0.15);
+       border-bottom: 2px solid rgba(0, 0, 0, 0.15);
        background: #ffffff;
 }
 .oo-ui-toolbar-bar .oo-ui-toolbar-bar {
        background-repeat: no-repeat;
        background-position: center center;
 }
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-       top: 50%;
-       width: 2em;
-       height: 2em;
-       margin-top: -1em;
+.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       top: 0;
+       height: 100%;
 }
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
+.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+       width: 1.875em;
        left: 0.5em;
 }
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
+.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       width: 0.9375em;
        right: 0.5em;
 }
+.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
 .oo-ui-buttonSelectWidget {
        display: inline-block;
        white-space: nowrap;
        vertical-align: middle;
 }
 .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       height: 1.9em;
+       height: 1.875em;
 }
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       height: 1.9em;
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
        margin-top: 0;
 }
 .oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
 .oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
        background-color: transparent;
 }
+.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+       opacity: 1;
+}
 .oo-ui-radioOptionWidget {
        cursor: default;
        padding: 0.25em 0;
 .oo-ui-radioOptionWidget.oo-ui-optionWidget-highlighted {
        background-color: transparent;
 }
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+       padding: 0.25em;
+       padding-left: 1em;
+}
+.oo-ui-radioOptionWidget .oo-ui-radioInputWidget {
+       margin-right: 0;
+}
 .oo-ui-labelWidget {
        display: inline-block;
 }
        background-position: center center;
        background-repeat: no-repeat;
        line-height: 2.5em;
-       height: 1.9em;
-       width: 1.9em;
+       height: 1.875em;
+       width: 1.875em;
 }
 .oo-ui-iconWidget.oo-ui-widget-disabled {
        opacity: 0.2;
        background-position: center center;
        background-repeat: no-repeat;
        line-height: 2.5em;
-       height: 1.9em;
-       width: 1.9em;
+       height: 0.9375em;
+       width: 0.9375em;
+       margin: 0.46875em;
 }
 .oo-ui-indicatorWidget.oo-ui-widget-disabled {
        opacity: 0.2;
 }
 .oo-ui-progressBarWidget {
        max-width: 50em;
-       border: solid 1px #cccccc;
+       border: 1px solid #cccccc;
        border-radius: 0.1em;
        overflow: hidden;
 }
        overflow: hidden;
 }
 .oo-ui-popupWidget-popup {
-       border: solid 1px #aaaaaa;
+       border: 1px solid #aaaaaa;
        border-radius: 0.2em;
        background-color: #ffffff;
        box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
        cursor: auto;
 }
 .oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget {
+       /* @noflip */
        left: 1em;
 }
 .oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
+       /* @noflip */
        left: 1.75em;
 }
 .oo-ui-inputWidget {
 .oo-ui-inputWidget:last-child {
        margin-right: 0;
 }
+.oo-ui-buttonInputWidget {
+       display: inline-block;
+       vertical-align: middle;
+}
 .oo-ui-checkboxInputWidget {
        position: relative;
        line-height: 1.6em;
 }
 .oo-ui-checkboxInputWidget input[type="checkbox"] {
        opacity: 0;
-       position: relative;
        z-index: 1;
+       position: relative;
        margin: 0;
        width: 1.6em;
        height: 1.6em;
 }
 .oo-ui-checkboxInputWidget input[type="checkbox"] + span {
        cursor: pointer;
-       margin: 0 0.2em;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"] + span::before {
        -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
           -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
            -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
             -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
                transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-       content: "";
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
        height: 1.6em;
        background-color: white;
        border: 1px solid #777777;
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check-constructive.png);
+       background-image: url("themes/mediawiki/images/icons/check-constructive.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive.png");
        background-repeat: no-repeat;
        background-position: center center;
        background-origin: border-box;
        background-size: 0 0;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span::before {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span {
        background-size: 100% 100%;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span::before {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span {
        background-color: #dddddd;
        border-color: #dddddd;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span::before {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span {
        border-width: 2px;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:focus:hover + span::before,
-.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span::before {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus:hover + span,
+.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span {
        border-bottom-width: 3px;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span::before {
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span {
        cursor: default;
        background-color: #eeeeee;
        border-color: #eeeeee;
 }
-.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled:checked + span::before {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check-invert.png);
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled:checked + span {
+       background-image: url("themes/mediawiki/images/icons/check-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-invert.png");
 }
 .oo-ui-dropdownInputWidget {
        position: relative;
 .oo-ui-dropdownInputWidget select {
        height: 2.5em;
        padding: 0.5em;
-       font-size: 1em;
-       font-family: sans-serif;
+       font-size: inherit;
+       font-family: inherit;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
-       border: solid 1px #cccccc;
+       border: 1px solid #cccccc;
 }
 .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover,
 .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus {
 }
 .oo-ui-radioInputWidget input[type="radio"] {
        opacity: 0;
-       position: relative;
        z-index: 1;
+       position: relative;
        margin: 0;
        width: 1.6em;
        height: 1.6em;
 }
 .oo-ui-radioInputWidget input[type="radio"] + span {
        cursor: pointer;
-       margin: 0 0.2em;
-}
-.oo-ui-radioInputWidget input[type="radio"] + span::before {
        -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
           -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
            -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
             -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
                transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-       content: "";
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
        height: 1.6em;
        background: white;
        border: 1px solid #777777;
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/circle-constructive.png);
+       background-image: url("themes/mediawiki/images/icons/circle-constructive.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive.png");
        background-repeat: no-repeat;
        background-position: center center;
        background-origin: border-box;
        background-size: 0 0;
 }
-.oo-ui-radioInputWidget input[type="radio"]:checked + span::before {
+.oo-ui-radioInputWidget input[type="radio"]:checked + span {
        background-size: 100% 100%;
 }
-.oo-ui-radioInputWidget input[type="radio"]:active + span::before {
+.oo-ui-radioInputWidget input[type="radio"]:active + span {
        background-color: #dddddd;
        border-color: #dddddd;
 }
-.oo-ui-radioInputWidget input[type="radio"]:focus + span::before {
+.oo-ui-radioInputWidget input[type="radio"]:focus + span {
        border-width: 2px;
 }
-.oo-ui-radioInputWidget input[type="radio"]:focus:hover + span::before,
-.oo-ui-radioInputWidget input[type="radio"]:hover + span::before {
+.oo-ui-radioInputWidget input[type="radio"]:focus:hover + span,
+.oo-ui-radioInputWidget input[type="radio"]:hover + span {
        border-bottom-width: 3px;
 }
-.oo-ui-radioInputWidget input[type="radio"]:disabled + span::before {
+.oo-ui-radioInputWidget input[type="radio"]:disabled + span {
        cursor: default;
        background-color: #eeeeee;
        border-color: #eeeeee;
 }
-.oo-ui-radioInputWidget input[type="radio"]:disabled:checked + span::before {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/circle-invert.png);
+.oo-ui-radioInputWidget input[type="radio"]:disabled:checked + span {
+       background-image: url("themes/mediawiki/images/icons/circle-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
+       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-textInputWidget {
        position: relative;
                box-sizing: border-box;
 }
 .oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
+.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
+.oo-ui-textInputWidget > .oo-ui-labelElement-label {
+       display: none;
+}
+.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
+       display: block;
        position: absolute;
        top: 0;
        height: 100%;
        background-repeat: no-repeat;
-       cursor: pointer;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
           -moz-user-select: none;
            -ms-user-select: none;
                user-select: none;
 }
+.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
+       cursor: pointer;
+}
+.oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
+       display: block;
+}
 .oo-ui-textInputWidget > .oo-ui-iconElement-icon {
        left: 0;
 }
 }
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
-       padding: 0.5em 0.5em 0.5em 0.9em;
+       padding: 0.5em;
        margin: 0;
-       font-size: 1em;
-       font-family: sans-serif;
+       font-size: inherit;
+       font-family: inherit;
        background-color: #ffffff;
        color: black;
        border: solid 1px #cccccc;
-       box-shadow: inset 0 0 0 0 #0274ff;
+       box-shadow: inset 0 0 0 0 #347bff;
        border-radius: 0.1em;
        -webkit-transition: box-shadow 0.1s;
           -moz-transition: box-shadow 0.1s;
 .oo-ui-textInputWidget-icon {
        width: 2em;
 }
+.oo-ui-textInputWidget.oo-ui-widget-enabled input,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
+       -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+          -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+           -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+            -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+               transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+}
 .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
        outline: none;
-       border-color: #aaaaaa;
-       box-shadow: inset 0.4em 0 0 0 #0274ff;
+       border-color: #347bff;
+       box-shadow: inset 0 0 0 0.1em #347bff;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly]:focus,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly]:focus {
-       box-shadow: inset 0.4em 0 0 0 #cccccc;
+       border-color: #cccccc;
+       box-shadow: inset 0 0 0 0.1em #cccccc;
 }
 .oo-ui-textInputWidget.oo-ui-widget-disabled input,
 .oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
+       color: #dddddd;
+       text-shadow: 0 1px 1px #ffffff;
+}
 .oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
 .oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
        background-color: transparent;
 }
 .oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
        left: 0.4em;
-       width: 2em;
+       width: 1.875em;
+       margin-left: 0.1em;
        height: 100%;
        background-position: right center;
 }
 .oo-ui-textInputWidget.oo-ui-indicatorElement input,
 .oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
-       padding-right: 1.9em;
+       padding-right: 1.875em;
 }
 .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       width: 1.6em;
+       width: 0.9375em;
+       margin: 0 0.775em;
        height: 100%;
-       background-position: left center;
 }
 .oo-ui-textInputWidget > .oo-ui-labelElement-label {
        padding: 0.4em;
        color: #888888;
 }
 .oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
-       padding-right: 2.4em;
+       margin-right: 2em;
 }
 .oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
-       padding-left: 2.9em;
+       margin-left: 2.5em;
 }
 .oo-ui-menuSelectWidget {
        position: absolute;
        background: #ffffff;
        margin-top: -1px;
-       border: solid 1px #aaaaaa;
+       border: 1px solid #aaaaaa;
        border-radius: 0 0 0.2em 0.2em;
        padding-bottom: 0.25em;
        box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
 }
 .oo-ui-dropdownWidget-handle {
        height: 2.5em;
-       border: solid 1px #cccccc;
+       border: 1px solid #cccccc;
        border-radius: 0.1em;
 }
 .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
        line-height: 2.5em;
        margin: 0 1em;
 }
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
+       top: 0;
+       width: 0.9375em;
+       height: 0.9375em;
+       margin: 0.775em;
+}
 .oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        top: 0;
-       width: 2.5em;
-       height: 2.5em;
+       width: 1.875em;
+       height: 1.875em;
+       margin: 0.3em;
 }
 .oo-ui-dropdownWidget:hover .oo-ui-dropdownWidget-handle {
        border-color: #aaaaaa;
 .oo-ui-comboBoxWidget .oo-ui-textInputWidget textarea {
        height: 2.35em;
 }
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget.oo-ui-indicatorElement {
-       padding-right: 1.9em;
-}
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       width: 1.9em;
-       background-position: center center;
-       border: solid 1px #cccccc;
-       border-left: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
 .oo-ui-searchWidget-query {
        position: absolute;
        top: 0;
 .oo-ui-searchWidget-query {
        height: 4em;
        padding: 0 1em;
-       border-bottom: solid 1px #cccccc;
+       border-bottom: 1px solid #cccccc;
 }
 .oo-ui-searchWidget-query .oo-ui-textInputWidget {
        margin: 0.75em 0;
        line-height: 0;
 }
 .oo-ui-window {
-       line-height: 1em;
+       background: transparent;
+       font-size: 0.8em;
 }
 .oo-ui-window-frame {
        -webkit-box-sizing: border-box;
        padding: 0;
        background: none;
 }
-.oo-ui-window-overlay,
-.oo-ui-window-inner-overlay {
+.oo-ui-window-overlay {
        position: absolute;
        top: 0;
        /* @noflip */
        left: 0;
 }
-.oo-ui-window,
-.oo-ui-window-isolated {
-       background: transparent;
-       font-family: sans-serif;
-       font-size: 0.8em;
-}
 .oo-ui-dialog-content > .oo-ui-window-head,
 .oo-ui-dialog-content > .oo-ui-window-body,
 .oo-ui-dialog-content > .oo-ui-window-foot {
        z-index: 1;
        bottom: 0;
 }
-.oo-ui-dialog-content > .oo-ui-window-inner-overlay {
-       z-index: 3;
-}
 .oo-ui-dialog-content > .oo-ui-window-body {
        outline: 1px solid #aaaaaa;
 }
        text-align: left;
 }
 .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
-       border-right: solid 1px #e5e5e5;
+       border-right: 1px solid #e5e5e5;
 }
 .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
        border-right-width: 0;
 }
 .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
-       border-bottom: solid 1px #e5e5e5;
+       border-bottom: 1px solid #e5e5e5;
 }
 .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
        border-bottom-width: 0;
        right: 0;
 }
 .oo-ui-processDialog-errors {
-       display: none;
        position: absolute;
        top: 0;
        left: 0;
 }
 .oo-ui-processDialog-location {
        padding: 0.75em 0;
-       height: 1.9em;
+       height: 1.875em;
        cursor: default;
        text-align: center;
 }
 .oo-ui-processDialog-title {
        font-weight: bold;
-       line-height: 1.9em;
+       line-height: 1.875em;
 }
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
-       min-width: 1.9em;
-       min-height: 1.9em;
+       min-width: 1.875em;
+       min-height: 1.875em;
 }
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
-       line-height: 1.9em;
+       line-height: 1.875em;
 }
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
        text-align: left;
        margin: 1em;
        padding: 1em;
-       border: solid 1px #ff9e9e;
+       border: 1px solid #ff9e9e;
        background-color: #fff7f7;
        border-radius: 0.25em;
 }
                transform: scale(1);
 }
 .oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
-       border: solid 1px #aaaaaa;
+       border: 1px solid #aaaaaa;
        border-radius: 0.2em;
        box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
 }
 
 .oo-ui-icon-add {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/add.png);
+       background-image: url("themes/mediawiki/images/icons/add.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add.png");
 }
 .oo-ui-image-constructive .oo-ui-icon-add,
 .oo-ui-image-constructive.oo-ui-icon-add {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/add-constructive.png);
+       background-image: url("themes/mediawiki/images/icons/add-constructive.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-constructive.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-constructive.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add-constructive.png");
 }
 .oo-ui-image-invert .oo-ui-icon-add,
 .oo-ui-image-invert.oo-ui-icon-add {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/add-invert.png);
+       background-image: url("themes/mediawiki/images/icons/add-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add-invert.png");
 }
 .oo-ui-icon-advanced {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/advanced.png);
+       background-image: url("themes/mediawiki/images/icons/advanced.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/advanced.png");
 }
 .oo-ui-image-invert .oo-ui-icon-advanced,
 .oo-ui-image-invert.oo-ui-icon-advanced {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/advanced-invert.png);
+       background-image: url("themes/mediawiki/images/icons/advanced-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/advanced-invert.png");
 }
 .oo-ui-icon-alert {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/alert.png);
+       background-image: url("themes/mediawiki/images/icons/alert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert.png");
+}
+.oo-ui-image-warning .oo-ui-icon-alert,
+.oo-ui-image-warning.oo-ui-icon-alert {
+       background-image: url("themes/mediawiki/images/icons/alert-warning.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-warning.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-warning.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert-warning.png");
 }
 .oo-ui-image-invert .oo-ui-icon-alert,
 .oo-ui-image-invert.oo-ui-icon-alert {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/alert-invert.png);
+       background-image: url("themes/mediawiki/images/icons/alert-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert-invert.png");
 }
 .oo-ui-icon-check {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check.png);
+       background-image: url("themes/mediawiki/images/icons/check.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png");
 }
 .oo-ui-image-constructive .oo-ui-icon-check,
 .oo-ui-image-constructive.oo-ui-icon-check {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check-constructive.png);
+       background-image: url("themes/mediawiki/images/icons/check-constructive.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive.png");
+}
+.oo-ui-image-progressive .oo-ui-icon-check,
+.oo-ui-image-progressive.oo-ui-icon-check {
+       background-image: url("themes/mediawiki/images/icons/check-progressive.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-progressive.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-progressive.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-progressive.png");
 }
 .oo-ui-image-invert .oo-ui-icon-check,
 .oo-ui-image-invert.oo-ui-icon-check {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check-invert.png);
+       background-image: url("themes/mediawiki/images/icons/check-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-invert.png");
+}
+.oo-ui-icon-circle {
+       background-image: url("themes/mediawiki/images/icons/circle.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle.png");
+}
+.oo-ui-image-constructive .oo-ui-icon-circle,
+.oo-ui-image-constructive.oo-ui-icon-circle {
+       background-image: url("themes/mediawiki/images/icons/circle-constructive.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive.png");
+}
+.oo-ui-image-invert .oo-ui-icon-circle,
+.oo-ui-image-invert.oo-ui-icon-circle {
+       background-image: url("themes/mediawiki/images/icons/circle-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
+       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-icon-clear {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/clear.png);
+       background-image: url("themes/mediawiki/images/icons/clear.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/clear.png");
 }
 .oo-ui-image-invert .oo-ui-icon-clear,
 .oo-ui-image-invert.oo-ui-icon-clear {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/clear-invert.png);
+       background-image: url("themes/mediawiki/images/icons/clear-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/clear-invert.png");
 }
 .oo-ui-icon-close {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/close.png);
+       background-image: url("themes/mediawiki/images/icons/close-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/close-ltr.png");
 }
 .oo-ui-image-invert .oo-ui-icon-close,
 .oo-ui-image-invert.oo-ui-icon-close {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/close-invert.png);
+       background-image: url("themes/mediawiki/images/icons/close-ltr-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/close-ltr-invert.png");
 }
 .oo-ui-icon-code {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/code.png);
+       background-image: url("themes/mediawiki/images/icons/code.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/code.png");
 }
 .oo-ui-image-invert .oo-ui-icon-code,
 .oo-ui-image-invert.oo-ui-icon-code {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/code-invert.png);
+       background-image: url("themes/mediawiki/images/icons/code-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/code-invert.png");
 }
 .oo-ui-icon-collapse {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/collapse.png);
+       background-image: url("themes/mediawiki/images/icons/collapse.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/collapse.png");
 }
 .oo-ui-image-invert .oo-ui-icon-collapse,
 .oo-ui-image-invert.oo-ui-icon-collapse {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/collapse-invert.png);
+       background-image: url("themes/mediawiki/images/icons/collapse-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/collapse-invert.png");
 }
 .oo-ui-icon-comment {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/comment.png);
+       background-image: url("themes/mediawiki/images/icons/comment.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/comment.png");
 }
 .oo-ui-image-invert .oo-ui-icon-comment,
 .oo-ui-image-invert.oo-ui-icon-comment {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/comment-invert.png);
+       background-image: url("themes/mediawiki/images/icons/comment-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/comment-invert.png");
+}
+.oo-ui-icon-ellipsis {
+       background-image: url("themes/mediawiki/images/icons/ellipsis.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ellipsis.png");
+}
+.oo-ui-image-invert .oo-ui-icon-ellipsis,
+.oo-ui-image-invert.oo-ui-icon-ellipsis {
+       background-image: url("themes/mediawiki/images/icons/ellipsis-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ellipsis-invert.png");
 }
 .oo-ui-icon-expand {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/expand.png);
+       background-image: url("themes/mediawiki/images/icons/expand.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/expand.png");
 }
 .oo-ui-image-invert .oo-ui-icon-expand,
 .oo-ui-image-invert.oo-ui-icon-expand {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/expand-invert.png);
+       background-image: url("themes/mediawiki/images/icons/expand-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/expand-invert.png");
 }
 .oo-ui-icon-help {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/help.png);
+       background-image: url("themes/mediawiki/images/icons/help-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png");
 }
 .oo-ui-image-invert .oo-ui-icon-help,
 .oo-ui-image-invert.oo-ui-icon-help {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/help-invert.png);
+       background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png");
 }
 .oo-ui-icon-info {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/info.png);
+       background-image: url("themes/mediawiki/images/icons/info.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/info.png");
 }
 .oo-ui-image-invert .oo-ui-icon-info,
 .oo-ui-image-invert.oo-ui-icon-info {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/info-invert.png);
-}
-.oo-ui-icon-link {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/link.png);
-}
-.oo-ui-image-invert .oo-ui-icon-link,
-.oo-ui-image-invert.oo-ui-icon-link {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/link-invert.png);
-}
-.oo-ui-icon-lock {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/lock.png);
-}
-.oo-ui-image-invert .oo-ui-icon-lock,
-.oo-ui-image-invert.oo-ui-icon-lock {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/lock-invert.png);
+       background-image: url("themes/mediawiki/images/icons/info-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/info-invert.png");
 }
 .oo-ui-icon-menu {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/menu.png);
+       background-image: url("themes/mediawiki/images/icons/menu.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/menu.png");
 }
 .oo-ui-image-invert .oo-ui-icon-menu,
 .oo-ui-image-invert.oo-ui-icon-menu {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/menu-invert.png);
+       background-image: url("themes/mediawiki/images/icons/menu-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/menu-invert.png");
 }
 .oo-ui-icon-next {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/move-ltr.png);
+       background-image: url("themes/mediawiki/images/icons/move-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-ltr.png");
 }
 .oo-ui-image-invert .oo-ui-icon-next,
 .oo-ui-image-invert.oo-ui-icon-next {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/move-ltr-invert.png);
+       background-image: url("themes/mediawiki/images/icons/move-ltr-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-ltr-invert.png");
 }
 .oo-ui-icon-picture {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/picture.png);
+       background-image: url("themes/mediawiki/images/icons/picture.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/picture.png");
 }
 .oo-ui-image-invert .oo-ui-icon-picture,
 .oo-ui-image-invert.oo-ui-icon-picture {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/picture-invert.png);
+       background-image: url("themes/mediawiki/images/icons/picture-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/picture-invert.png");
 }
 .oo-ui-icon-previous {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/move-rtl.png);
+       background-image: url("themes/mediawiki/images/icons/move-rtl.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-rtl.png");
 }
 .oo-ui-image-invert .oo-ui-icon-previous,
 .oo-ui-image-invert.oo-ui-icon-previous {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/move-rtl-invert.png);
-}
-.oo-ui-icon-circle {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/circle.png);
-}
-.oo-ui-image-constructive .oo-ui-icon-circle,
-.oo-ui-image-constructive.oo-ui-icon-circle {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/circle-constructive.png);
-}
-.oo-ui-image-invert .oo-ui-icon-circle,
-.oo-ui-image-invert.oo-ui-icon-circle {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/circle-invert.png);
+       background-image: url("themes/mediawiki/images/icons/move-rtl-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-rtl-invert.png");
 }
 .oo-ui-icon-redo {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-ltr.png);
+       background-image: url("themes/mediawiki/images/icons/arched-arrow-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-ltr.png");
 }
 .oo-ui-image-invert .oo-ui-icon-redo,
 .oo-ui-image-invert.oo-ui-icon-redo {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-ltr-invert.png);
+       background-image: url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.png");
 }
 .oo-ui-icon-remove {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/remove.png);
+       background-image: url("themes/mediawiki/images/icons/remove.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove.png");
 }
 .oo-ui-image-destructive .oo-ui-icon-remove,
 .oo-ui-image-destructive.oo-ui-icon-remove {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/remove-destructive.png);
+       background-image: url("themes/mediawiki/images/icons/remove-destructive.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-destructive.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-destructive.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove-destructive.png");
 }
 .oo-ui-image-invert .oo-ui-icon-remove,
 .oo-ui-image-invert.oo-ui-icon-remove {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/remove-invert.png);
+       background-image: url("themes/mediawiki/images/icons/remove-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove-invert.png");
 }
 .oo-ui-icon-search {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/search.png);
+       background-image: url("themes/mediawiki/images/icons/search.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/search.png");
 }
 .oo-ui-image-invert .oo-ui-icon-search,
 .oo-ui-image-invert.oo-ui-icon-search {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/search-invert.png);
+       background-image: url("themes/mediawiki/images/icons/search-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/search-invert.png");
 }
 .oo-ui-icon-settings {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/settings.png);
+       background-image: url("themes/mediawiki/images/icons/settings.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/settings.png");
 }
 .oo-ui-image-invert .oo-ui-icon-settings,
 .oo-ui-image-invert.oo-ui-icon-settings {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/settings-invert.png);
+       background-image: url("themes/mediawiki/images/icons/settings-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/settings-invert.png");
 }
 .oo-ui-icon-tag {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/tag.png);
+       background-image: url("themes/mediawiki/images/icons/tag.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag.png");
 }
 .oo-ui-image-invert .oo-ui-icon-tag,
 .oo-ui-image-invert.oo-ui-icon-tag {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/tag-invert.png);
+       background-image: url("themes/mediawiki/images/icons/tag-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-invert.png");
 }
 .oo-ui-icon-undo {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-rtl.png);
+       background-image: url("themes/mediawiki/images/icons/arched-arrow-rtl.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-rtl.png");
 }
 .oo-ui-image-invert .oo-ui-icon-undo,
 .oo-ui-image-invert.oo-ui-icon-undo {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-rtl-invert.png);
+       background-image: url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.png");
 }
 .oo-ui-icon-window {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/window.png);
+       background-image: url("themes/mediawiki/images/icons/window.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/window.png");
 }
 .oo-ui-image-invert .oo-ui-icon-window,
 .oo-ui-image-invert.oo-ui-icon-window {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/window-invert.png);
+       background-image: url("themes/mediawiki/images/icons/window-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/window-invert.png");
 }
+
 .oo-ui-indicator-alert {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/alert.png);
+       background-image: url("themes/mediawiki/images/indicators/alert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/alert.png");
 }
 .oo-ui-image-invert .oo-ui-indicator-alert,
 .oo-ui-image-invert.oo-ui-indicator-alert {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/alert-invert.png);
+       background-image: url("themes/mediawiki/images/indicators/alert-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/alert-invert.png");
 }
 .oo-ui-indicator-up {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-up.png);
+       background-image: url("themes/mediawiki/images/indicators/arrow-up.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-up.png");
 }
 .oo-ui-image-invert .oo-ui-indicator-up,
 .oo-ui-image-invert.oo-ui-indicator-up {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-up-invert.png);
+       background-image: url("themes/mediawiki/images/indicators/arrow-up-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-up-invert.png");
 }
 .oo-ui-indicator-down {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-down.png);
+       background-image: url("themes/mediawiki/images/indicators/arrow-down.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-down.png");
 }
 .oo-ui-image-invert .oo-ui-indicator-down,
 .oo-ui-image-invert.oo-ui-indicator-down {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-down-invert.png);
+       background-image: url("themes/mediawiki/images/indicators/arrow-down-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-down-invert.png");
 }
 .oo-ui-indicator-next {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-ltr.png);
+       background-image: url("themes/mediawiki/images/indicators/arrow-ltr.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-ltr.png");
 }
 .oo-ui-image-invert .oo-ui-indicator-next,
 .oo-ui-image-invert.oo-ui-indicator-next {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-ltr-invert.png);
+       background-image: url("themes/mediawiki/images/indicators/arrow-ltr-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-ltr-invert.png");
 }
 .oo-ui-indicator-previous {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-rtl.png);
+       background-image: url("themes/mediawiki/images/indicators/arrow-rtl.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-rtl.png");
 }
 .oo-ui-image-invert .oo-ui-indicator-previous,
 .oo-ui-image-invert.oo-ui-indicator-previous {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-rtl-invert.png);
+       background-image: url("themes/mediawiki/images/indicators/arrow-rtl-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-rtl-invert.png");
 }
 .oo-ui-indicator-required {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/required.png);
+       background-image: url("themes/mediawiki/images/indicators/required.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/required.png");
 }
 .oo-ui-image-invert .oo-ui-indicator-required,
 .oo-ui-image-invert.oo-ui-indicator-required {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/required-invert.png);
+       background-image: url("themes/mediawiki/images/indicators/required-invert.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required-invert.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required-invert.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/required-invert.png");
 }
+
 .oo-ui-texture-pending {
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+       background-image: url("themes/mediawiki/images/textures/pending.gif");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/pending.gif");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/pending.gif");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/textures/pending.gif");
 }
 .oo-ui-texture-transparency {
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/transparency.png);
+       background-image: url("themes/mediawiki/images/textures/transparency.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/transparency.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/transparency.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/textures/transparency.png");
 }
index 42e3053..688262a 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.7.0
+ * OOjs UI v0.9.7
  * 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-02-12T00:04:43Z
+ * Date: 2015-04-03T21:01:28Z
  */
 /**
  * @class
@@ -32,21 +32,25 @@ OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) {
        // Parent method
        var variant,
                variants = {
+                       warning: false,
                        invert: false,
                        progressive: false,
                        constructive: false,
                        destructive: false
                },
                // Parent method
-               classes = OO.ui.MediaWikiTheme.super.prototype.getElementClasses.call( this, element );
+               classes = OO.ui.MediaWikiTheme.super.prototype.getElementClasses.call( this, element ),
+               isFramed;
 
-       if ( element.supports( [ 'isFramed', 'isDisabled', 'hasFlag' ] ) ) {
-               if ( !element.isDisabled() && element.isFramed() && element.hasFlag( 'primary' ) ) {
+       if ( element.supports( [ 'hasFlag' ] ) ) {
+               isFramed = element.supports( [ 'isFramed' ] ) && element.isFramed();
+               if ( isFramed && ( element.isDisabled() || element.hasFlag( 'primary' ) ) ) {
                        variants.invert = true;
                } else {
                        variants.progressive = element.hasFlag( 'progressive' );
                        variants.constructive = element.hasFlag( 'constructive' );
                        variants.destructive = element.hasFlag( 'destructive' );
+                       variants.warning = element.hasFlag( 'warning' );
                }
        }
 
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css b/resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css
deleted file mode 100644 (file)
index 0d16099..0000000
+++ /dev/null
@@ -1,2665 +0,0 @@
-/*!
- * OOjs UI v0.7.0
- * 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-02-12T00:04:52Z
- */
-.oo-ui-progressBarWidget-slide-frames from {
-       margin-left: -40%;
-}
-.oo-ui-progressBarWidget-slide-frames to {
-       margin-left: 100%;
-}
-@-webkit-keyframes oo-ui-progressBarWidget-slide {
-       from {
-               margin-left: -40%;
-       }
-       to {
-               margin-left: 100%;
-       }
-}
-@-moz-keyframes oo-ui-progressBarWidget-slide {
-       from {
-               margin-left: -40%;
-       }
-       to {
-               margin-left: 100%;
-       }
-}
-@-ms-keyframes oo-ui-progressBarWidget-slide {
-       from {
-               margin-left: -40%;
-       }
-       to {
-               margin-left: 100%;
-       }
-}
-@-o-keyframes oo-ui-progressBarWidget-slide {
-       from {
-               margin-left: -40%;
-       }
-       to {
-               margin-left: 100%;
-       }
-}
-@keyframes oo-ui-progressBarWidget-slide {
-       from {
-               margin-left: -40%;
-       }
-       to {
-               margin-left: 100%;
-       }
-}
-/* @noflip */
-.oo-ui-rtl {
-       direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
-       direction: ltr;
-}
-.oo-ui-element-hidden {
-       display: none !important;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
-       cursor: pointer;
-       display: inline-block;
-       vertical-align: middle;
-       font: inherit;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-       cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       display: inline-block;
-       vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
-       display: inline-block;
-       position: relative;
-}
-.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-       display: inline-block;
-       vertical-align: top;
-       text-align: center;
-}
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
-       font-weight: bold;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       margin-left: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       margin-right: -0.75em;
-       margin-left: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       margin-left: 0;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       width: 1.9em;
-       height: 1.9em;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       opacity: 0.2;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
-       outline: none;
-}
-.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       margin-left: 0.25em;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #757575;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #444444;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #598ad1;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #015ccc;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #00c697;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #008c6d;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #e81915;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #a7170f;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-       color: #cccccc;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-       margin: 0.1em 0;
-       padding: 0.2em 0.8em;
-       border-radius: 2px;
-       -webkit-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-          -moz-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-           -ms-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-            -o-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-               transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
-       outline: none;
-}
-.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       line-height: 1.9em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       margin-left: -0.5em;
-       margin-right: -0.5em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       margin-left: -0.5em;
-       margin-right: 0.3em;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background: #dddddd;
-       border: 1px solid #dddddd;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
-       color: #757575;
-       background-color: #ffffff;
-       border: solid 1px #cdcdcd;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
-       border-color: #aaaaaa;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       background-color: #d0d0d0;
-       border-color: #d0d0d0;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
-       color: #0274ff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #015ccc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #015ccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #015ccc;
-       border-color: #015ccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #015ccc;
-       border-color: #d0d0d0;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
-       color: #00af89;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #008c6d, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #008c6d;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #008c6d;
-       border-color: #008c6d;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #008c6d;
-       border-color: #d0d0d0;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
-       color: #d11d13;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #a7170f, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #a7170f;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #a7170f;
-       border-color: #a7170f;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #a7170f;
-       border-color: #d0d0d0;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background-color: #0274ff;
-       border-color: #0274ff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #015ccc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #015ccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #015ccc;
-       border-color: #015ccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background-color: #015ccc;
-       border-color: #015ccc;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background-color: #00af89;
-       border-color: #00af89;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #008c6d, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #008c6d;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #008c6d;
-       border-color: #008c6d;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background-color: #008c6d;
-       border-color: #008c6d;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background-color: #d11d13;
-       border-color: #d11d13;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #a7170f, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #a7170f;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #a7170f;
-       border-color: #a7170f;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background-color: #a7170f;
-       border-color: #a7170f;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-clippableElement-clippable {
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-draggableElement {
-       cursor: -webkit-grab -moz-grab, url(images/grab.cur), move;
-       /*
-        * HACK: In order to style horizontally, we must override
-        * OO.ui.OptionWidget's display rule that is currently set
-        * to be 'block'
-        */
-}
-.oo-ui-draggableElement-dragging {
-       cursor: -webkit-grabbing -moz-grabbing, url(images/grabbing.cur), move;
-       background: rgba(0, 0, 0, 0.2);
-       opacity: 0.4;
-}
-.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement.oo-ui-optionWidget {
-       display: inline-block;
-}
-.oo-ui-draggableGroupElement-placeholder {
-       position: absolute;
-       display: block;
-       background: rgba(0, 0, 0, 0.4);
-}
-.oo-ui-lookupElement > .oo-ui-menuSelectWidget {
-       z-index: 1;
-       width: 100%;
-}
-.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
-       overflow-y: hidden;
-}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
-       width: 100%;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-scrollable {
-       overflow-y: auto;
-}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-padded {
-       padding: 2em;
-}
-.oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget {
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 3em;
-       overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
-       position: absolute;
-       bottom: 0;
-       left: 0;
-       right: 0;
-}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
-       padding: 1.5em;
-}
-.oo-ui-bookletLayout-outlinePanel {
-       border-right: solid 1px #dddddd;
-}
-.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
-       box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-fieldLayout {
-       display: block;
-       margin-bottom: 1em;
-}
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
-       content: " ";
-       display: table;
-}
-.oo-ui-fieldLayout:after {
-       clear: both;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
-       display: block;
-       float: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
-       text-align: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body {
-       display: table;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
-       display: table-cell;
-       vertical-align: middle;
-}
-.oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-top > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
-       display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-fieldLayout-help {
-       float: right;
-}
-.oo-ui-fieldLayout > .oo-ui-fieldLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-       z-index: 1;
-}
-.oo-ui-fieldLayout > .oo-ui-fieldLayout-help .oo-ui-fieldLayout-help-content {
-       padding: 0.5em 0.75em;
-       line-height: 1.5em;
-}
-.oo-ui-fieldLayout:last-child {
-       margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
-       padding-top: 0.5em;
-       margin-right: 5%;
-       width: 35%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
-       width: 60%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
-       padding: 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
-       padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
-       padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget {
-       margin-right: 0;
-       margin-top: 0.25em;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-fieldLayout-disabled .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;
-       vertical-align: middle;
-}
-.oo-ui-actionFieldLayout-input {
-       padding-right: 1em;
-}
-.oo-ui-actionFieldLayout-button {
-       width: 1%;
-       white-space: nowrap;
-}
-.oo-ui-fieldsetLayout {
-       position: relative;
-       margin: 0;
-       padding: 0;
-       border: none;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-       display: block;
-       position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
-       display: inline-block;
-}
-.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help {
-       float: right;
-}
-.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-       z-index: 1;
-}
-.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help .oo-ui-fieldsetLayout-help-content {
-       padding: 0.5em 0.75em;
-       line-height: 1.5em;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-       margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
-       font-size: 1.1em;
-       margin-bottom: 0.5em;
-       padding: 0.25em 0;
-       font-weight: bold;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
-       padding-left: 1.75em;
-       line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-       left: 0;
-       top: 0.25em;
-       width: 1.5em;
-       height: 1.5em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget {
-       margin-right: 0;
-}
-.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-gridLayout {
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 0;
-}
-.oo-ui-menuLayout {
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 0;
-}
-.oo-ui-menuLayout-menu,
-.oo-ui-menuLayout-content {
-       position: absolute;
-       -webkit-transition: all ease-in-out 200ms;
-          -moz-transition: all ease-in-out 200ms;
-           -ms-transition: all ease-in-out 200ms;
-            -o-transition: all ease-in-out 200ms;
-               transition: all ease-in-out 200ms;
-}
-.oo-ui-menuLayout-content {
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 0;
-}
-.oo-ui-menuLayout-top .oo-ui-menuLayout-menu {
-       left: 0;
-       top: 0;
-       right: 0;
-}
-.oo-ui-menuLayout-after .oo-ui-menuLayout-menu {
-       top: 0;
-       right: 0;
-       bottom: 0;
-}
-.oo-ui-menuLayout-bottom .oo-ui-menuLayout-menu {
-       right: 0;
-       bottom: 0;
-       left: 0;
-}
-.oo-ui-menuLayout-before .oo-ui-menuLayout-menu {
-       bottom: 0;
-       left: 0;
-       top: 0;
-}
-.oo-ui-menuLayout-top .oo-ui-menuLayout-content {
-       right: 0 !important;
-       bottom: 0 !important;
-       left: 0 !important;
-}
-.oo-ui-menuLayout-after .oo-ui-menuLayout-content {
-       bottom: 0 !important;
-       left: 0 !important;
-       top: 0 !important;
-}
-.oo-ui-menuLayout-bottom .oo-ui-menuLayout-content {
-       left: 0 !important;
-       top: 0 !important;
-       right: 0 !important;
-}
-.oo-ui-menuLayout-before .oo-ui-menuLayout-content {
-       top: 0 !important;
-       right: 0 !important;
-       bottom: 0 !important;
-}
-.oo-ui-panelLayout {
-       position: relative;
-}
-.oo-ui-panelLayout-scrollable {
-       overflow-y: auto;
-}
-.oo-ui-panelLayout-expanded {
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 0;
-}
-.oo-ui-panelLayout-padded {
-       padding: 1.25em;
-}
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
-       display: block;
-       position: relative;
-}
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
-       z-index: 4;
-}
-.oo-ui-popupTool .oo-ui-popupWidget {
-       /* @noflip */
-       margin-left: 1.25em;
-       font-size: 0.8em;
-}
-.oo-ui-toolGroup {
-       display: inline-block;
-       vertical-align: middle;
-       margin: 0.3em;
-}
-.oo-ui-toolGroup-empty {
-       display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
-       color: #000000;
-}
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-accel {
-       color: #888888;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-label {
-       display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool {
-       display: inline-block;
-       position: relative;
-       vertical-align: top;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link {
-       display: block;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       display: block;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
-       cursor: default;
-}
-.oo-ui-barToolGroup .oo-ui-tool-title,
-.oo-ui-barToolGroup .oo-ui-tool-accel {
-       display: none;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
-       cursor: pointer;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link {
-       height: 1.5em;
-       padding: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       height: 1.5em;
-       width: 1.5em;
-       opacity: 0.8;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
-       background-color: #eeeeee;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 0.8;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 1;
-}
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-popupToolGroup {
-       position: relative;
-       height: 2em;
-       min-width: 2.5em;
-}
-.oo-ui-popupToolGroup-handle {
-       display: block;
-       cursor: pointer;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
-       cursor: default;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-       display: none;
-       position: absolute;
-       z-index: 4;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
-       background-repeat: no-repeat;
-       background-position: center center;
-}
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
-       display: block;
-}
-.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
-       left: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
-       right: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link {
-       display: table;
-       width: 100%;
-       vertical-align: middle;
-       white-space: nowrap;
-       text-decoration: none;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon,
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       display: table-cell;
-       vertical-align: middle;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel {
-       text-align: right;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel:not(:empty) {
-       padding-left: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
-       min-width: 3.5em;
-}
-.oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       line-height: 2.6em;
-       font-size: 0.8em;
-       margin: 0 1em;
-}
-.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin-left: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin-right: 2.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       top: 0;
-       width: 2em;
-       height: 2em;
-       opacity: 0.8;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-       right: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       left: 0.25em;
-}
-.oo-ui-popupToolGroup-header {
-       line-height: 2.6em;
-       font-size: 0.8em;
-       margin: 0 0.6em;
-       font-weight: bold;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-       top: 2em;
-       background-color: white;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       height: 2em;
-       width: 2em;
-       min-width: 2em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       padding-left: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       line-height: 2em;
-       font-size: 0.8em;
-}
-.oo-ui-listToolGroup .oo-ui-tool {
-       display: block;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
-       cursor: pointer;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
-       cursor: default;
-}
-.oo-ui-listToolGroup .oo-ui-tool {
-       padding: 0 0.5em 0 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
-       background-color: #eeeeee;
-}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled,
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
-       background-color: #d0d0d0;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
-       color: #cccccc;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-accel {
-       color: #dddddd;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled {
-       color: #cccccc;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
-       padding: 0.25em 0 0.25em 0;
-       border: 1px solid #aaaaaa;
-       border-radius: 0.2em;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-}
-.oo-ui-menuToolGroup {
-       border: solid 1px #cccccc;
-       border-radius: 0.1em;
-}
-.oo-ui-menuToolGroup .oo-ui-tool {
-       display: block;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
-       cursor: pointer;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
-       cursor: default;
-}
-.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
-       min-width: 8em;
-}
-.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
-       margin-left: -1px;
-       padding: 0.25em 0 0.25em 0;
-       border: 1px solid #aaaaaa;
-       border-radius: 0.2em;
-       border-top-left-radius: 0;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-}
-.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
-       border-color: #aaaaaa;
-}
-.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
-       border-color: #aaaaaa;
-}
-.oo-ui-menuToolGroup .oo-ui-tool {
-       padding: 0 0.75em 0 0.25em;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check.svg);
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
-       background-color: #eeeeee;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
-       color: #cccccc;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled {
-       color: #cccccc;
-       border-color: #cccccc;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-toolbar {
-       clear: both;
-}
-.oo-ui-toolbar-bar {
-       line-height: 1em;
-}
-.oo-ui-toolbar-actions {
-       float: right;
-}
-.oo-ui-toolbar-tools {
-       display: inline;
-}
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
-       -webkit-touch-callout: default;
-       -webkit-user-select: all;
-          -moz-user-select: all;
-           -ms-user-select: all;
-               user-select: all;
-}
-.oo-ui-toolbar-shadow {
-       background-position: left top;
-       background-repeat: repeat-x;
-       position: absolute;
-       width: 100%;
-       pointer-events: none;
-}
-.oo-ui-toolbar-bar {
-       border-bottom: solid 4px rgba(0, 0, 0, 0.15);
-       background: #ffffff;
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-       border: none;
-       background: none;
-}
-.oo-ui-toolbar-shadow {
-       display: none;
-}
-.oo-ui-selectWidget {
-       border-radius: 2px;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       border-radius: 0;
-       margin-left: -1px;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
-       border-bottom-left-radius: 2px;
-       border-top-left-radius: 2px;
-       margin-left: 0;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
-       border-bottom-right-radius: 2px;
-       border-top-right-radius: 2px;
-}
-.oo-ui-optionWidget {
-       position: relative;
-       display: block;
-       cursor: pointer;
-       padding: 0.25em 0.5em;
-       border: none;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-       cursor: default;
-}
-.oo-ui-optionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
-       display: block;
-       white-space: nowrap;
-       text-overflow: ellipsis;
-       overflow: hidden;
-}
-.oo-ui-optionWidget-highlighted {
-       background-color: #eeeeee;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-       line-height: 1.5em;
-}
-.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected,
-.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed,
-.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted,
-.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
-       background-color: #d0d0d0;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-       color: #cccccc;
-}
-.oo-ui-decoratedOptionWidget {
-       padding: 0.5em 2em 0.5em 3em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-       position: absolute;
-       background-repeat: no-repeat;
-       background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-       top: 50%;
-       width: 2em;
-       height: 2em;
-       margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
-       left: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-       right: 0.5em;
-}
-.oo-ui-buttonSelectWidget {
-       display: inline-block;
-       white-space: nowrap;
-       border-radius: 2px;
-       margin-right: 0.5em;
-}
-.oo-ui-buttonSelectWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       border-radius: 0;
-       margin-left: -1px;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
-       border-bottom-left-radius: 2px;
-       border-top-left-radius: 2px;
-       margin-left: 0;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
-       border-bottom-right-radius: 2px;
-       border-top-right-radius: 2px;
-}
-.oo-ui-buttonOptionWidget {
-       display: inline-block;
-       padding: 0;
-       background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       position: static;
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       height: 1.9em;
-       margin-top: 0;
-}
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
-       background-color: transparent;
-}
-.oo-ui-radioOptionWidget {
-       cursor: default;
-       padding: 0.25em 0;
-       background-color: transparent;
-}
-.oo-ui-radioOptionWidget .oo-ui-radioInputWidget,
-.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-radioOptionWidget.oo-ui-optionWidget-selected,
-.oo-ui-radioOptionWidget.oo-ui-optionWidget-pressed,
-.oo-ui-radioOptionWidget.oo-ui-optionWidget-highlighted {
-       background-color: transparent;
-}
-.oo-ui-labelWidget {
-       display: inline-block;
-}
-.oo-ui-iconWidget {
-       display: inline-block;
-       vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
-       line-height: 2.5em;
-       height: 1.9em;
-       width: 1.9em;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-       opacity: 0.2;
-}
-.oo-ui-indicatorWidget {
-       display: inline-block;
-       vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
-       line-height: 2.5em;
-       height: 1.9em;
-       width: 1.9em;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-       opacity: 0.2;
-}
-.oo-ui-buttonWidget {
-       display: inline-block;
-       vertical-align: middle;
-       margin-right: 0.5em;
-}
-.oo-ui-buttonWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-buttonGroupWidget {
-       display: inline-block;
-       white-space: nowrap;
-       border-radius: 2px;
-       margin-right: 0.5em;
-}
-.oo-ui-buttonGroupWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonWidget {
-       margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-       border-radius: 0;
-       margin-left: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
-       border-bottom-left-radius: 2px;
-       border-top-left-radius: 2px;
-       margin-left: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
-       border-bottom-right-radius: 2px;
-       border-top-right-radius: 2px;
-}
-.oo-ui-toggleSwitchWidget {
-       position: relative;
-       display: inline-block;
-       vertical-align: middle;
-       overflow: hidden;
-       cursor: pointer;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       -webkit-transform: translateZ(0px);
-          -moz-transform: translateZ(0px);
-           -ms-transform: translateZ(0px);
-            -o-transform: translateZ(0px);
-               transform: translateZ(0px);
-       height: 2em;
-       width: 4em;
-       border-radius: 1em;
-       border: 1px #dddddd solid;
-       margin-right: 0.5em;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
-       cursor: default;
-}
-.oo-ui-toggleSwitchWidget-grip {
-       position: absolute;
-       display: block;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
-       position: absolute;
-       top: 0;
-       bottom: 0;
-       right: 0;
-       left: 0;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-       display: none;
-}
-.oo-ui-toggleSwitchWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-toggleSwitchWidget-grip {
-       top: 0.25em;
-       left: 0.25em;
-       width: 1.5em;
-       height: 1.5em;
-       margin-top: -1px;
-       border-radius: 1em;
-       border: 1px #dddddd solid;
-       background-color: #f7f7f7;
-       -webkit-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-          -moz-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-           -ms-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-            -o-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-               transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-}
-.oo-ui-toggleSwitchWidget-glow {
-       border-radius: 1em;
-       background-color: #f7f7f7;
-       -webkit-transition: background-color 0.1s ease-in-out;
-          -moz-transition: background-color 0.1s ease-in-out;
-           -ms-transition: background-color 0.1s ease-in-out;
-            -o-transition: background-color 0.1s ease-in-out;
-               transition: background-color 0.1s ease-in-out;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
-       left: 2.25em;
-       margin-left: -2px;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-       display: block;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-       left: 0.25em;
-       margin-left: 0;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled {
-       border: 1px #cccccc solid;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover {
-       border-color: #aaaaaa;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled .oo-ui-toggleSwitchWidget-grip {
-       background-color: #ffffff;
-       border-color: #aaaaaa;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
-       background-color: #d0d0d0;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-       background-color: #ffffff;
-}
-.oo-ui-progressBarWidget {
-       max-width: 50em;
-       border: solid 1px #cccccc;
-       border-radius: 0.1em;
-       overflow: hidden;
-}
-.oo-ui-progressBarWidget-bar {
-       height: 1em;
-       background: #dddddd;
-       -webkit-transition: width 200ms, margin-left 200ms;
-          -moz-transition: width 200ms, margin-left 200ms;
-           -ms-transition: width 200ms, margin-left 200ms;
-            -o-transition: width 200ms, margin-left 200ms;
-               transition: width 200ms, margin-left 200ms;
-}
-.oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar {
-       -webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-          -moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-           -ms-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-            -o-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-               animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-       width: 40%;
-       margin-left: -10%;
-       border-left-width: 1px;
-}
-.oo-ui-progressBarWidget.oo-ui-widget-disabled {
-       opacity: 0.6;
-}
-.oo-ui-actionWidget.oo-ui-pendingElement-pending {
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
-.oo-ui-popupWidget {
-       position: absolute;
-       /* @noflip */
-       left: 0;
-}
-.oo-ui-popupWidget-popup {
-       position: relative;
-       overflow: hidden;
-       z-index: 1;
-}
-.oo-ui-popupWidget-anchor {
-       display: none;
-       z-index: 1;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
-       display: block;
-       position: absolute;
-       top: 0;
-       /* @noflip */
-       left: 0;
-       background-repeat: no-repeat;
-}
-.oo-ui-popupWidget-head {
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
-       float: right;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-       float: left;
-       cursor: default;
-}
-.oo-ui-popupWidget-body {
-       clear: both;
-       overflow: hidden;
-}
-.oo-ui-popupWidget-popup {
-       border: solid 1px #aaaaaa;
-       border-radius: 0.2em;
-       background-color: #ffffff;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
-       margin-top: 9px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before,
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
-       content: "";
-       position: absolute;
-       width: 0;
-       height: 0;
-       border-style: solid;
-       border-color: transparent;
-       border-top: 0;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before {
-       bottom: -10px;
-       left: -9px;
-       border-bottom-color: #888888;
-       border-width: 10px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
-       bottom: -10px;
-       left: -8px;
-       border-bottom-color: #ffffff;
-       border-width: 9px;
-}
-.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
-       -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-          -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-           -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-            -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-               transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-}
-.oo-ui-popupWidget-head {
-       height: 2.5em;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
-       margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-       margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body-padded {
-       padding: 0 1em;
-}
-.oo-ui-popupButtonWidget {
-       position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
-       position: absolute;
-       cursor: auto;
-}
-.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget {
-       left: 1em;
-}
-.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
-       left: 1.75em;
-}
-.oo-ui-inputWidget {
-       margin-right: 0.5em;
-}
-.oo-ui-inputWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-checkboxInputWidget {
-       position: relative;
-       line-height: 1.6em;
-       white-space: nowrap;
-}
-.oo-ui-checkboxInputWidget * {
-       font: inherit;
-       vertical-align: middle;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"] {
-       opacity: 0;
-       position: relative;
-       z-index: 1;
-       margin: 0;
-       width: 1.6em;
-       height: 1.6em;
-       max-width: none;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"] + span {
-       cursor: pointer;
-       margin: 0 0.2em;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"] + span::before {
-       -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-          -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-           -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-            -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-               transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-       content: "";
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       position: absolute;
-       left: 0;
-       border-radius: 2px;
-       width: 1.6em;
-       height: 1.6em;
-       background-color: white;
-       border: 1px solid #777777;
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check-constructive.svg);
-       background-repeat: no-repeat;
-       background-position: center center;
-       background-origin: border-box;
-       background-size: 0 0;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span::before {
-       background-size: 100% 100%;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span::before {
-       background-color: #dddddd;
-       border-color: #dddddd;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span::before {
-       border-width: 2px;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:focus:hover + span::before,
-.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span::before {
-       border-bottom-width: 3px;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span::before {
-       cursor: default;
-       background-color: #eeeeee;
-       border-color: #eeeeee;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled:checked + span::before {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check-invert.svg);
-}
-.oo-ui-dropdownInputWidget {
-       position: relative;
-       vertical-align: middle;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       width: 100%;
-       max-width: 50em;
-}
-.oo-ui-dropdownInputWidget select {
-       display: inline-block;
-       width: 100%;
-       resize: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-dropdownInputWidget select {
-       height: 2.5em;
-       padding: 0.5em;
-       font-size: 1em;
-       font-family: sans-serif;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       border: solid 1px #cccccc;
-}
-.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover,
-.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus {
-       border-color: #aaaaaa;
-       outline: none;
-}
-.oo-ui-dropdownInputWidget.oo-ui-widget-disabled select {
-       color: #cccccc;
-       border-color: #dddddd;
-       background-color: #f3f3f3;
-}
-.oo-ui-radioInputWidget {
-       position: relative;
-       line-height: 1.6em;
-       white-space: nowrap;
-}
-.oo-ui-radioInputWidget * {
-       font: inherit;
-       vertical-align: middle;
-}
-.oo-ui-radioInputWidget input[type="radio"] {
-       opacity: 0;
-       position: relative;
-       z-index: 1;
-       margin: 0;
-       width: 1.6em;
-       height: 1.6em;
-       max-width: none;
-}
-.oo-ui-radioInputWidget input[type="radio"] + span {
-       cursor: pointer;
-       margin: 0 0.2em;
-}
-.oo-ui-radioInputWidget input[type="radio"] + span::before {
-       -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-          -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-           -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-            -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-               transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-       content: "";
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       position: absolute;
-       left: 0;
-       border-radius: 100%;
-       width: 1.6em;
-       height: 1.6em;
-       background: white;
-       border: 1px solid #777777;
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/circle-constructive.svg);
-       background-repeat: no-repeat;
-       background-position: center center;
-       background-origin: border-box;
-       background-size: 0 0;
-}
-.oo-ui-radioInputWidget input[type="radio"]:checked + span::before {
-       background-size: 100% 100%;
-}
-.oo-ui-radioInputWidget input[type="radio"]:active + span::before {
-       background-color: #dddddd;
-       border-color: #dddddd;
-}
-.oo-ui-radioInputWidget input[type="radio"]:focus + span::before {
-       border-width: 2px;
-}
-.oo-ui-radioInputWidget input[type="radio"]:focus:hover + span::before,
-.oo-ui-radioInputWidget input[type="radio"]:hover + span::before {
-       border-bottom-width: 3px;
-}
-.oo-ui-radioInputWidget input[type="radio"]:disabled + span::before {
-       cursor: default;
-       background-color: #eeeeee;
-       border-color: #eeeeee;
-}
-.oo-ui-radioInputWidget input[type="radio"]:disabled:checked + span::before {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/circle-invert.svg);
-}
-.oo-ui-textInputWidget {
-       position: relative;
-       vertical-align: middle;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       width: 100%;
-       max-width: 50em;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-       display: inline-block;
-       width: 100%;
-       resize: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
-       position: absolute;
-       top: 0;
-       height: 100%;
-       background-repeat: no-repeat;
-       cursor: pointer;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon {
-       left: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
-       right: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-labelElement-label {
-       position: absolute;
-       top: 0;
-}
-.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label {
-       right: 0;
-}
-.oo-ui-textInputWidget-labelPosition-before > .oo-ui-labelElement-label {
-       left: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-       padding: 0.5em 0.5em 0.5em 0.9em;
-       margin: 0;
-       font-size: 1em;
-       font-family: sans-serif;
-       background-color: #ffffff;
-       color: black;
-       border: solid 1px #cccccc;
-       box-shadow: inset 0 0 0 0 #0274ff;
-       border-radius: 0.1em;
-       -webkit-transition: box-shadow 0.1s;
-          -moz-transition: box-shadow 0.1s;
-           -ms-transition: box-shadow 0.1s;
-            -o-transition: box-shadow 0.1s;
-               transition: box-shadow 0.1s;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-textInputWidget-decorated input,
-.oo-ui-textInputWidget-decorated textarea {
-       padding-left: 2em;
-}
-.oo-ui-textInputWidget-icon {
-       width: 2em;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
-       outline: none;
-       border-color: #aaaaaa;
-       box-shadow: inset 0.4em 0 0 0 #0274ff;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
-       color: #777777;
-       text-shadow: 0 1px 1px #ffffff;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly]:focus,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly]:focus {
-       box-shadow: inset 0.4em 0 0 0 #cccccc;
-}
-.oo-ui-textInputWidget.oo-ui-widget-disabled input,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
-       color: #cccccc;
-       text-shadow: 0 1px 1px #ffffff;
-       border-color: #dddddd;
-       background-color: #f3f3f3;
-}
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
-       background-color: transparent;
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
-.oo-ui-textInputWidget.oo-ui-iconElement input,
-.oo-ui-textInputWidget.oo-ui-iconElement textarea {
-       padding-left: 2.75em;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-       left: 0.4em;
-       width: 2em;
-       height: 100%;
-       background-position: right center;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement input,
-.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
-       padding-right: 1.9em;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       width: 1.6em;
-       height: 100%;
-       background-position: left center;
-}
-.oo-ui-textInputWidget > .oo-ui-labelElement-label {
-       padding: 0.4em;
-       line-height: 1.5em;
-       color: #888888;
-}
-.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
-       padding-right: 2.4em;
-}
-.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
-       padding-left: 2.9em;
-}
-.oo-ui-menuSelectWidget {
-       position: absolute;
-       background: #ffffff;
-       margin-top: -1px;
-       border: solid 1px #aaaaaa;
-       border-radius: 0 0 0.2em 0.2em;
-       padding-bottom: 0.25em;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-menuSelectWidget input {
-       position: absolute;
-       width: 0;
-       height: 0;
-       overflow: hidden;
-       opacity: 0;
-}
-.oo-ui-menuOptionWidget {
-       position: relative;
-       padding: 0.5em 1em;
-}
-.oo-ui-menuOptionWidget .oo-ui-iconElement-icon {
-       display: none;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
-       background-color: transparent;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
-       display: block;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
-       display: none;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted {
-       background-color: #eeeeee;
-       color: black;
-}
-.oo-ui-menuSectionOptionWidget {
-       cursor: default;
-       padding: 0.33em 0.75em;
-       color: #888888;
-}
-.oo-ui-dropdownWidget {
-       display: inline-block;
-       position: relative;
-       margin: 0.25em 0;
-       width: 100%;
-       max-width: 50em;
-       margin-right: 0.5em;
-}
-.oo-ui-dropdownWidget-handle {
-       width: 100%;
-       display: inline-block;
-       cursor: pointer;
-       -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-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
-       position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-dropdownWidget > .oo-ui-menuSelectWidget {
-       z-index: 1;
-       width: 100%;
-}
-.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
-       cursor: default;
-}
-.oo-ui-dropdownWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-dropdownWidget-handle {
-       height: 2.5em;
-       border: solid 1px #cccccc;
-       border-radius: 0.1em;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
-       right: 0;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
-       left: 0.25em;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
-       line-height: 2.5em;
-       margin: 0 1em;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
-       top: 0;
-       width: 2.5em;
-       height: 2.5em;
-}
-.oo-ui-dropdownWidget:hover .oo-ui-dropdownWidget-handle {
-       border-color: #aaaaaa;
-}
-.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
-       color: #cccccc;
-       text-shadow: 0 1px 1px #ffffff;
-       border-color: #dddddd;
-       background-color: #f3f3f3;
-}
-.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
-       opacity: 0.2;
-}
-.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
-       margin-left: 3em;
-}
-.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
-       margin-right: 2em;
-}
-.oo-ui-dropdownWidget .oo-ui-selectWidget {
-       border-top-color: #ffffff;
-}
-.oo-ui-outlineOptionWidget {
-       position: relative;
-       cursor: pointer;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-       font-size: 1.1em;
-       padding: 0.75em;
-}
-.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
-       padding-right: 1.5em;
-}
-.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       opacity: 0.5;
-}
-.oo-ui-outlineOptionWidget-level-0 {
-       padding-left: 3.5em;
-}
-.oo-ui-outlineOptionWidget-level-0 .oo-ui-iconElement-icon {
-       left: 1em;
-}
-.oo-ui-outlineOptionWidget-level-1 {
-       padding-left: 5em;
-}
-.oo-ui-outlineOptionWidget-level-1 .oo-ui-iconElement-icon {
-       left: 2.5em;
-}
-.oo-ui-outlineOptionWidget-level-2 {
-       padding-left: 6.5em;
-}
-.oo-ui-outlineOptionWidget-level-2 .oo-ui-iconElement-icon {
-       left: 4em;
-}
-.oo-ui-selectWidget-depressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected {
-       background-color: #d0d0d0;
-       text-shadow: 0 1px 1px #ffffff;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important {
-       font-weight: bold;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-placeholder {
-       font-style: italic;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
-       opacity: 0.5;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
-       color: #777777;
-}
-.oo-ui-outlineControlsWidget {
-       height: 3em;
-       background-color: #ffffff;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-       float: left;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-       float: left;
-       background-position: right center;
-       background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
-       float: left;
-}
-.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
-       float: left;
-}
-.oo-ui-outlineControlsWidget-movers {
-       float: right;
-}
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
-       float: right;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-       height: 2em;
-       margin: 0.5em 0.5em 0.5em 0;
-       padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-       width: 1.5em;
-       height: 2em;
-       margin: 0.5em 0 0.5em 0.5em;
-       opacity: 0.2;
-}
-.oo-ui-comboBoxWidget {
-       display: inline-block;
-       position: relative;
-       width: 100%;
-       max-width: 50em;
-       margin-right: 0.5em;
-}
-.oo-ui-comboBoxWidget > .oo-ui-menuSelectWidget {
-       z-index: 1;
-       width: 100%;
-}
-.oo-ui-comboBoxWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget input,
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget textarea {
-       height: 2.35em;
-}
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget.oo-ui-indicatorElement {
-       padding-right: 1.9em;
-}
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       width: 1.9em;
-       background-position: center center;
-       border: solid 1px #cccccc;
-       border-left: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-searchWidget-query {
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-       width: 100%;
-}
-.oo-ui-searchWidget-results {
-       position: absolute;
-       bottom: 0;
-       left: 0;
-       right: 0;
-       overflow-x: hidden;
-       overflow-y: auto;
-}
-.oo-ui-searchWidget-query {
-       height: 4em;
-       padding: 0 1em;
-       border-bottom: solid 1px #cccccc;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-       margin: 0.75em 0;
-}
-.oo-ui-searchWidget-results {
-       top: 4em;
-       padding: 1em;
-       line-height: 0;
-}
-.oo-ui-window {
-       line-height: 1em;
-}
-.oo-ui-window-frame {
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-window-content:focus {
-       outline: none;
-}
-.oo-ui-window-head,
-.oo-ui-window-foot {
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-window-body {
-       margin: 0;
-       padding: 0;
-       background: none;
-}
-.oo-ui-window-overlay,
-.oo-ui-window-inner-overlay {
-       position: absolute;
-       top: 0;
-       /* @noflip */
-       left: 0;
-}
-.oo-ui-window,
-.oo-ui-window-isolated {
-       background: transparent;
-       font-family: sans-serif;
-       font-size: 0.8em;
-}
-.oo-ui-dialog-content > .oo-ui-window-head,
-.oo-ui-dialog-content > .oo-ui-window-body,
-.oo-ui-dialog-content > .oo-ui-window-foot {
-       position: absolute;
-       left: 0;
-       right: 0;
-       overflow: hidden;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-dialog-content > .oo-ui-window-head {
-       z-index: 1;
-       top: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-body {
-       z-index: 2;
-       top: 0;
-       bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-foot {
-       z-index: 1;
-       bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-inner-overlay {
-       z-index: 3;
-}
-.oo-ui-dialog-content > .oo-ui-window-body {
-       outline: 1px solid #aaaaaa;
-}
-.oo-ui-messageDialog-actions-horizontal {
-       display: table;
-       table-layout: fixed;
-       width: 100%;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
-       display: table-cell;
-       width: 1%;
-}
-.oo-ui-messageDialog-actions-vertical {
-       display: block;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
-       display: block;
-       overflow: hidden;
-       text-overflow: ellipsis;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget {
-       position: relative;
-       text-align: center;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
-       display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
-       position: relative;
-       top: auto;
-       bottom: auto;
-       display: inline;
-       white-space: nowrap;
-}
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
-       display: block;
-       text-align: center;
-       padding-top: 0.5em;
-}
-.oo-ui-messageDialog-title {
-       font-size: 1.5em;
-       line-height: 1em;
-       color: #000000;
-}
-.oo-ui-messageDialog-message {
-       font-size: 0.9em;
-       line-height: 1.25em;
-       color: #666666;
-}
-.oo-ui-messageDialog-message-verbose {
-       font-size: 1.1em;
-       line-height: 1.5em;
-       text-align: left;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
-       border-right: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
-       border-right-width: 0;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
-       border-bottom: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
-       border-bottom-width: 0;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget {
-       height: 3.4em;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
-       text-align: center;
-       line-height: 3.4em;
-       padding: 0 2em;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
-       background-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
-       background-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover {
-       background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active {
-       background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label {
-       font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-       background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-       background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-       background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-       background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
-       overflow: hidden;
-       text-overflow: ellipsis;
-       white-space: nowrap;
-}
-.oo-ui-processDialog-title {
-       display: inline;
-       padding: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
-       white-space: nowrap;
-}
-.oo-ui-processDialog-actions-safe,
-.oo-ui-processDialog-actions-primary {
-       position: absolute;
-       top: 0;
-       bottom: 0;
-}
-.oo-ui-processDialog-actions-safe {
-       left: 0;
-}
-.oo-ui-processDialog-actions-primary {
-       right: 0;
-}
-.oo-ui-processDialog-errors {
-       display: none;
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 0;
-       z-index: 2;
-       overflow-x: hidden;
-       overflow-y: auto;
-}
-.oo-ui-processDialog-content .oo-ui-window-head {
-       height: 3.4em;
-}
-.oo-ui-processDialog-content .oo-ui-window-head.oo-ui-pendingElement-pending {
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
-.oo-ui-processDialog-content .oo-ui-window-body {
-       top: 3.4em;
-       outline: 1px solid rgba(0, 0, 0, 0.2);
-}
-.oo-ui-processDialog-navigation {
-       position: relative;
-       height: 3.4em;
-       padding: 0 1em;
-}
-.oo-ui-processDialog-location {
-       padding: 0.75em 0;
-       height: 1.9em;
-       cursor: default;
-       text-align: center;
-}
-.oo-ui-processDialog-title {
-       font-weight: bold;
-       line-height: 1.9em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
-       min-width: 1.9em;
-       min-height: 1.9em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
-       line-height: 1.9em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-       margin-top: -0.125em;
-}
-.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;
-}
-.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;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
-       background-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
-.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-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active {
-       background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label {
-       font-weight: bold;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-       background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-       background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-       background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-       background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog > .oo-ui-window-frame {
-       min-height: 5em;
-}
-.oo-ui-processDialog-errors {
-       background-color: rgba(255, 255, 255, 0.9);
-       padding: 3em 3em 1.5em 3em;
-       text-align: center;
-}
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
-       margin: 2em 1em 2em 1em;
-}
-.oo-ui-processDialog-errors-title {
-       font-size: 1.5em;
-       color: #000000;
-       margin-bottom: 2em;
-}
-.oo-ui-processDialog-error {
-       text-align: left;
-       margin: 1em;
-       padding: 1em;
-       border: solid 1px #ff9e9e;
-       background-color: #fff7f7;
-       border-radius: 0.25em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
-       position: fixed;
-       width: 0;
-       height: 0;
-       overflow: hidden;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-active {
-       width: auto;
-       height: auto;
-       top: 0;
-       right: 0;
-       bottom: 0;
-       left: 0;
-       padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
-       position: absolute;
-       right: 0;
-       left: 0;
-       margin: auto;
-       overflow: hidden;
-       max-width: 100%;
-       max-height: 100%;
-}
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
-       width: 100%;
-       height: 100%;
-       top: 0;
-       bottom: 0;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
-       background-color: rgba(255, 255, 255, 0.5);
-       opacity: 0;
-       -webkit-transition: opacity 250ms ease-in-out;
-          -moz-transition: opacity 250ms ease-in-out;
-           -ms-transition: opacity 250ms ease-in-out;
-            -o-transition: opacity 250ms ease-in-out;
-               transition: opacity 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
-       top: 1em;
-       bottom: 1em;
-       background-color: #ffffff;
-       opacity: 0;
-       -webkit-transform: scale(0.5);
-          -moz-transform: scale(0.5);
-           -ms-transform: scale(0.5);
-            -o-transform: scale(0.5);
-               transform: scale(0.5);
-       -webkit-transition: all 250ms ease-in-out;
-          -moz-transition: all 250ms ease-in-out;
-           -ms-transition: all 250ms ease-in-out;
-            -o-transition: all 250ms ease-in-out;
-               transition: all 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
-       /* Fade window overlay */
-       opacity: 1;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
-       /* Fade frame */
-       opacity: 1;
-       -webkit-transform: scale(1);
-          -moz-transform: scale(1);
-           -ms-transform: scale(1);
-            -o-transform: scale(1);
-               transform: scale(1);
-}
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
-       border: solid 1px #aaaaaa;
-       border-radius: 0.2em;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-icon-add {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/add.svg);
-}
-.oo-ui-image-constructive .oo-ui-icon-add,
-.oo-ui-image-constructive.oo-ui-icon-add {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/add-constructive.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-add,
-.oo-ui-image-invert.oo-ui-icon-add {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/add-invert.svg);
-}
-.oo-ui-icon-advanced {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/advanced.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-advanced,
-.oo-ui-image-invert.oo-ui-icon-advanced {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/advanced-invert.svg);
-}
-.oo-ui-icon-alert {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/alert.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-alert,
-.oo-ui-image-invert.oo-ui-icon-alert {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/alert-invert.svg);
-}
-.oo-ui-icon-check {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check.svg);
-}
-.oo-ui-image-constructive .oo-ui-icon-check,
-.oo-ui-image-constructive.oo-ui-icon-check {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check-constructive.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-check,
-.oo-ui-image-invert.oo-ui-icon-check {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/check-invert.svg);
-}
-.oo-ui-icon-clear {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/clear.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-clear,
-.oo-ui-image-invert.oo-ui-icon-clear {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/clear-invert.svg);
-}
-.oo-ui-icon-close {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/close.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-close,
-.oo-ui-image-invert.oo-ui-icon-close {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/close-invert.svg);
-}
-.oo-ui-icon-code {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/code.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-code,
-.oo-ui-image-invert.oo-ui-icon-code {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/code-invert.svg);
-}
-.oo-ui-icon-collapse {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/collapse.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-collapse,
-.oo-ui-image-invert.oo-ui-icon-collapse {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/collapse-invert.svg);
-}
-.oo-ui-icon-comment {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/comment.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-comment,
-.oo-ui-image-invert.oo-ui-icon-comment {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/comment-invert.svg);
-}
-.oo-ui-icon-expand {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/expand.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-expand,
-.oo-ui-image-invert.oo-ui-icon-expand {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/expand-invert.svg);
-}
-.oo-ui-icon-help {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/help.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-help,
-.oo-ui-image-invert.oo-ui-icon-help {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/help-invert.svg);
-}
-.oo-ui-icon-info {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/info.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-info,
-.oo-ui-image-invert.oo-ui-icon-info {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/info-invert.svg);
-}
-.oo-ui-icon-link {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/link.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-link,
-.oo-ui-image-invert.oo-ui-icon-link {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/link-invert.svg);
-}
-.oo-ui-icon-lock {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/lock.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-lock,
-.oo-ui-image-invert.oo-ui-icon-lock {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/lock-invert.svg);
-}
-.oo-ui-icon-menu {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/menu.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-menu,
-.oo-ui-image-invert.oo-ui-icon-menu {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/menu-invert.svg);
-}
-.oo-ui-icon-next {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/move-ltr.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-next,
-.oo-ui-image-invert.oo-ui-icon-next {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/move-ltr-invert.svg);
-}
-.oo-ui-icon-picture {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/picture.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-picture,
-.oo-ui-image-invert.oo-ui-icon-picture {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/picture-invert.svg);
-}
-.oo-ui-icon-previous {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/move-rtl.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-previous,
-.oo-ui-image-invert.oo-ui-icon-previous {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/move-rtl-invert.svg);
-}
-.oo-ui-icon-circle {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/circle.svg);
-}
-.oo-ui-image-constructive .oo-ui-icon-circle,
-.oo-ui-image-constructive.oo-ui-icon-circle {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/circle-constructive.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-circle,
-.oo-ui-image-invert.oo-ui-icon-circle {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/circle-invert.svg);
-}
-.oo-ui-icon-redo {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-ltr.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-redo,
-.oo-ui-image-invert.oo-ui-icon-redo {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg);
-}
-.oo-ui-icon-remove {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/remove.svg);
-}
-.oo-ui-image-destructive .oo-ui-icon-remove,
-.oo-ui-image-destructive.oo-ui-icon-remove {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/remove-destructive.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-remove,
-.oo-ui-image-invert.oo-ui-icon-remove {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/remove-invert.svg);
-}
-.oo-ui-icon-search {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/search.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-search,
-.oo-ui-image-invert.oo-ui-icon-search {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/search-invert.svg);
-}
-.oo-ui-icon-settings {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/settings.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-settings,
-.oo-ui-image-invert.oo-ui-icon-settings {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/settings-invert.svg);
-}
-.oo-ui-icon-tag {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/tag.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-tag,
-.oo-ui-image-invert.oo-ui-icon-tag {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/tag-invert.svg);
-}
-.oo-ui-icon-undo {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-rtl.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-undo,
-.oo-ui-image-invert.oo-ui-icon-undo {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg);
-}
-.oo-ui-icon-window {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/window.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-window,
-.oo-ui-image-invert.oo-ui-icon-window {
-       background-image: /* @embed */ url(themes/mediawiki/images/icons/window-invert.svg);
-}
-.oo-ui-indicator-alert {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/alert.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-alert,
-.oo-ui-image-invert.oo-ui-indicator-alert {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/alert-invert.svg);
-}
-.oo-ui-indicator-up {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-up.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-up,
-.oo-ui-image-invert.oo-ui-indicator-up {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-up-invert.svg);
-}
-.oo-ui-indicator-down {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-down.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-down,
-.oo-ui-image-invert.oo-ui-indicator-down {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-down-invert.svg);
-}
-.oo-ui-indicator-next {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-ltr.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-next,
-.oo-ui-image-invert.oo-ui-indicator-next {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-ltr-invert.svg);
-}
-.oo-ui-indicator-previous {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-rtl.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-previous,
-.oo-ui-image-invert.oo-ui-indicator-previous {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-rtl-invert.svg);
-}
-.oo-ui-indicator-required {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/required.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-required,
-.oo-ui-image-invert.oo-ui-indicator-required {
-       background-image: /* @embed */ url(themes/mediawiki/images/indicators/required-invert.svg);
-}
-.oo-ui-texture-pending {
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
-.oo-ui-texture-transparency {
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/transparency.svg);
-}
index f85202e..ccedf60 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.7.0
+ * OOjs UI v0.9.7
  * 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-02-12T00:04:43Z
+ * Date: 2015-04-03T21:01:28Z
  */
 ( function ( OO ) {
 
@@ -117,6 +117,21 @@ OO.ui.contains = function ( containers, contained, matchContainers ) {
        return false;
 };
 
+/**
+ * Reconstitute a JavaScript object corresponding to a widget created by
+ * the PHP implementation.
+ *
+ * This is an alias for `OO.ui.Element.static.infuse()`.
+ *
+ * @param {string|HTMLElement|jQuery} idOrNode
+ *   A DOM id (if a string) or node for the widget to infuse.
+ * @return {OO.ui.Element}
+ *   The `OO.ui.Element` corresponding to this (infusable) document node.
+ */
+OO.ui.infuse = function ( idOrNode ) {
+       return OO.ui.Element.static.infuse( idOrNode );
+};
+
 ( function () {
        /**
         * Message store for the default implementation of OO.ui.msg
@@ -305,7 +320,76 @@ OO.ui.PendingElement.prototype.popPending = function () {
 };
 
 /**
- * List of actions.
+ * ActionSets manage the behavior of the {@link OO.ui.ActionWidget action widgets} that comprise them.
+ * Actions can be made available for specific contexts (modes) and circumstances
+ * (abilities). Action sets are primarily used with {@link OO.ui.Dialog Dialogs}.
+ *
+ * ActionSets contain two types of actions:
+ *
+ * - Special: Special actions are the first visible actions with special flags, such as 'safe' and 'primary', the default special flags. Additional special flags can be configured in subclasses with the static #specialFlags property.
+ * - Other: Other actions include all non-special visible actions.
+ *
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
+ *
+ *     @example
+ *     // Example: An action set used in a process dialog
+ *     function MyProcessDialog( config ) {
+ *         MyProcessDialog.super.call( this, config );
+ *     }
+ *     OO.inheritClass( MyProcessDialog, OO.ui.ProcessDialog );
+ *     MyProcessDialog.static.title = 'An action set in a process dialog';
+ *     // An action set that uses modes ('edit' and 'help' mode, in this example).
+ *     MyProcessDialog.static.actions = [
+ *         { action: 'continue', modes: 'edit', label: 'Continue', flags: [ 'primary', 'constructive' ] },
+ *         { action: 'help', modes: 'edit', label: 'Help' },
+ *         { modes: 'edit', label: 'Cancel', flags: 'safe' },
+ *         { action: 'back', modes: 'help', label: 'Back', flags: 'safe' }
+ *     ];
+ *
+ *     MyProcessDialog.prototype.initialize = function () {
+ *         MyProcessDialog.super.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 } );
+ *         this.panel2.$element.append( '<p>This is help mode. Only the \'back\' action widget is configured to be visible here. Click \'back\' to return to \'edit\' mode.</p>' );
+ *         this.stackLayout = new OO.ui.StackLayout( {
+ *             items: [ this.panel1, this.panel2 ]
+ *         } );
+ *         this.$body.append( this.stackLayout.$element );
+ *     };
+ *     MyProcessDialog.prototype.getSetupProcess = function ( data ) {
+ *         return MyProcessDialog.super.prototype.getSetupProcess.call( this, data )
+ *             .next( function () {
+ *                 this.actions.setMode( 'edit' );
+ *             }, this );
+ *     };
+ *     MyProcessDialog.prototype.getActionProcess = function ( action ) {
+ *         if ( action === 'help' ) {
+ *             this.actions.setMode( 'help' );
+ *             this.stackLayout.setItem( this.panel2 );
+ *         } else if ( action === 'back' ) {
+ *             this.actions.setMode( 'edit' );
+ *             this.stackLayout.setItem( this.panel1 );
+ *         } else if ( action === 'continue' ) {
+ *             var dialog = this;
+ *             return new OO.ui.Process( function () {
+ *                 dialog.close();
+ *             } );
+ *         }
+ *         return MyProcessDialog.super.prototype.getActionProcess.call( this, action );
+ *     };
+ *     MyProcessDialog.prototype.getBodyHeight = function () {
+ *         return this.panel1.$element.outerHeight( true );
+ *     };
+ *     var windowManager = new OO.ui.WindowManager();
+ *     $( 'body' ).append( windowManager.$element );
+ *     var dialog = new MyProcessDialog( {
+ *         size: 'medium'
+ *     } );
+ *     windowManager.addWindows( [ dialog ] );
+ *     windowManager.openWindow( dialog );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Action_sets
  *
  * @abstract
  * @class
@@ -343,7 +427,11 @@ OO.mixinClass( OO.ui.ActionSet, OO.EventEmitter );
 /* Static Properties */
 
 /**
- * Symbolic name of dialog.
+ * Symbolic name of the flags used to identify special actions. Special actions are displayed in the
+ *  header of a {@link OO.ui.ProcessDialog process dialog}.
+ *  See the [OOjs UI documentation on MediaWiki][2] for more information and examples.
+ *
+ *  [2]:https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs
  *
  * @abstract
  * @static
@@ -356,26 +444,43 @@ OO.ui.ActionSet.static.specialFlags = [ 'safe', 'primary' ];
 
 /**
  * @event click
+ *
+ * A 'click' event is emitted when an action is clicked.
+ *
  * @param {OO.ui.ActionWidget} action Action that was clicked
  */
 
 /**
  * @event resize
+ *
+ * A 'resize' event is emitted when an action widget is resized.
+ *
  * @param {OO.ui.ActionWidget} action Action that was resized
  */
 
 /**
  * @event add
+ *
+ * An 'add' event is emitted when actions are {@link #method-add added} to the action set.
+ *
  * @param {OO.ui.ActionWidget[]} added Actions added
  */
 
 /**
  * @event remove
+ *
+ * A 'remove' event is emitted when actions are {@link #method-remove removed}
+ *  or {@link #clear cleared}.
+ *
  * @param {OO.ui.ActionWidget[]} added Actions removed
  */
 
 /**
  * @event change
+ *
+ * A 'change' event is emitted when actions are {@link #method-add added}, {@link #clear cleared},
+ * or {@link #method-remove removed} from the action set or when the {@link #setMode mode} is changed.
+ *
  */
 
 /* Methods */
@@ -383,6 +488,7 @@ OO.ui.ActionSet.static.specialFlags = [ 'safe', 'primary' ];
 /**
  * Handle action change events.
  *
+ * @private
  * @fires change
  */
 OO.ui.ActionSet.prototype.onActionChange = function () {
@@ -395,7 +501,7 @@ OO.ui.ActionSet.prototype.onActionChange = function () {
 };
 
 /**
- * Check if a action is one of the special actions.
+ * Check if an action is one of the special actions.
  *
  * @param {OO.ui.ActionWidget} action Action to check
  * @return {boolean} Action is special
@@ -413,15 +519,16 @@ OO.ui.ActionSet.prototype.isSpecial = function ( action ) {
 };
 
 /**
- * Get actions.
+ * Get action widgets based on the specified filter: ‘actions’, ‘flags’, ‘modes’, ‘visible’,
+ *  or ‘disabled’.
  *
  * @param {Object} [filters] Filters to use, omit to get all actions
- * @param {string|string[]} [filters.actions] Actions that actions must have
- * @param {string|string[]} [filters.flags] Flags that actions must have
- * @param {string|string[]} [filters.modes] Modes that actions must have
- * @param {boolean} [filters.visible] Actions must be visible
- * @param {boolean} [filters.disabled] Actions must be disabled
- * @return {OO.ui.ActionWidget[]} Actions matching all criteria
+ * @param {string|string[]} [filters.actions] Actions that action widgets must have
+ * @param {string|string[]} [filters.flags] Flags that action widgets must have (e.g., 'safe')
+ * @param {string|string[]} [filters.modes] Modes that action widgets must have
+ * @param {boolean} [filters.visible] Action widgets must be visible
+ * @param {boolean} [filters.disabled] Action widgets must be disabled
+ * @return {OO.ui.ActionWidget[]} Action widgets matching all criteria
  */
 OO.ui.ActionSet.prototype.get = function ( filters ) {
        var i, len, list, category, actions, index, match, matches;
@@ -473,12 +580,12 @@ OO.ui.ActionSet.prototype.get = function ( filters ) {
 };
 
 /**
- * Get special actions.
+ * Get 'special' actions.
  *
- * Special actions are the first visible actions with special flags, such as 'safe' and 'primary'.
- * Special flags can be configured by changing #static-specialFlags in a subclass.
+ * Special actions are the first visible action widgets with special flags, such as 'safe' and 'primary'.
+ * Special flags can be configured in subclasses by changing the static #specialFlags property.
  *
- * @return {OO.ui.ActionWidget|null} Safe action
+ * @return {OO.ui.ActionWidget[]|null} 'Special' action widgets.
  */
 OO.ui.ActionSet.prototype.getSpecial = function () {
        this.organize();
@@ -486,11 +593,11 @@ OO.ui.ActionSet.prototype.getSpecial = function () {
 };
 
 /**
- * Get other actions.
+ * Get 'other' actions.
  *
- * Other actions include all non-special visible actions.
+ * Other actions include all non-special visible action widgets.
  *
- * @return {OO.ui.ActionWidget[]} Other actions
+ * @return {OO.ui.ActionWidget[]} 'Other' action widgets
  */
 OO.ui.ActionSet.prototype.getOthers = function () {
        this.organize();
@@ -498,12 +605,11 @@ OO.ui.ActionSet.prototype.getOthers = function () {
 };
 
 /**
- * Toggle actions based on their modes.
- *
- * Unlike calling toggle on actions with matching flags, this will enforce mutually exclusive
- * visibility; matching actions will be shown, non-matching actions will be hidden.
+ * Set the mode  (e.g., ‘edit’ or ‘view’). Only {@link OO.ui.ActionWidget#modes actions} configured
+ * to be available in the specified mode will be made visible. All other actions will be hidden.
  *
- * @param {string} mode Mode actions must have
+ * @param {string} mode The mode. Only actions configured to be available in the specified
+ *  mode will be made visible.
  * @chainable
  * @fires toggle
  * @fires change
@@ -525,12 +631,14 @@ OO.ui.ActionSet.prototype.setMode = function ( mode ) {
 };
 
 /**
- * Change which actions are able to be performed.
+ * Set the abilities of the specified actions.
  *
- * Actions with matching actions will be disabled/enabled. Other actions will not be changed.
+ * Action widgets that are configured with the specified actions will be enabled
+ * or disabled based on the boolean values specified in the `actions`
+ * parameter.
  *
- * @param {Object.<string,boolean>} actions List of abilities, keyed by action name, values
- *   indicate actions are able to be performed
+ * @param {Object.<string,boolean>} actions A list keyed by action name with boolean
+ *  values that indicate whether or not the action should be enabled.
  * @chainable
  */
 OO.ui.ActionSet.prototype.setAbilities = function ( actions ) {
@@ -551,9 +659,9 @@ OO.ui.ActionSet.prototype.setAbilities = function ( actions ) {
  * Executes a function once per action.
  *
  * When making changes to multiple actions, use this method instead of iterating over the actions
- * manually to defer emitting a change event until after all actions have been changed.
+ * manually to defer emitting a #change event until after all actions have been changed.
  *
- * @param {Object|null} actions Filters to use for which actions to iterate over; see #get
+ * @param {Object|null} actions Filters to use to determine which actions to iterate over; see #get
  * @param {Function} callback Callback to run for each action; callback is invoked with three
  *   arguments: the action, the action's index, the list of actions being iterated over
  * @chainable
@@ -571,9 +679,9 @@ OO.ui.ActionSet.prototype.forEach = function ( filter, callback ) {
 };
 
 /**
- * Add actions.
+ * Add action widgets to the action set.
  *
- * @param {OO.ui.ActionWidget[]} actions Actions to add
+ * @param {OO.ui.ActionWidget[]} actions Action widgets to add
  * @chainable
  * @fires add
  * @fires change
@@ -600,9 +708,11 @@ OO.ui.ActionSet.prototype.add = function ( actions ) {
 };
 
 /**
- * Remove actions.
+ * Remove action widgets from the set.
  *
- * @param {OO.ui.ActionWidget[]} actions Actions to remove
+ * To remove all actions, you may wish to use the #clear method instead.
+ *
+ * @param {OO.ui.ActionWidget[]} actions Action widgets to remove
  * @chainable
  * @fires remove
  * @fires change
@@ -628,7 +738,9 @@ OO.ui.ActionSet.prototype.remove = function ( actions ) {
 };
 
 /**
- * Remove all actions.
+ * Remove all action widets from the set.
+ *
+ * To remove only specified actions, use the {@link #method-remove remove} method instead.
  *
  * @chainable
  * @fires remove
@@ -713,18 +825,27 @@ OO.ui.ActionSet.prototype.organize = function () {
 };
 
 /**
- * DOM element abstraction.
+ * Each Element represents a rendering in the DOM—a button or an icon, for example, or anything
+ * that is visible to a user. Unlike {@link OO.ui.Widget widgets}, plain elements usually do not have events
+ * connected to them and can't be interacted with.
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string[]} [classes] CSS class names to add
- * @cfg {string} [id] HTML id attribute
+ * @cfg {string[]} [classes] The names of the CSS classes to apply to the element. CSS styles are added
+ *  to the top level (e.g., the outermost div) of the element. See the [OOjs UI documentation on MediaWiki][2]
+ *  for an example.
+ *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#cssExample
+ * @cfg {string} [id] The HTML id attribute used in the rendered tag.
  * @cfg {string} [text] Text to insert
- * @cfg {jQuery} [$content] Content elements to append (after text)
- * @cfg {Mixed} [data] Element data
+ * @cfg {Array} [content] An array of content elements to append (after #text).
+ *  Strings will be html-escaped; use an OO.ui.HtmlSnippet to append raw HTML.
+ *  Instances of OO.ui.Element will have their $element appended.
+ * @cfg {jQuery} [$content] Content elements to append (after #text)
+ * @cfg {Mixed} [data] Custom data of any type or combination of types (e.g., string, number, array, object).
+ *  Data can also be specified with the #setData method.
  */
 OO.ui.Element = function OoUiElement( config ) {
        // Configuration initialization
@@ -732,14 +853,16 @@ OO.ui.Element = function OoUiElement( config ) {
 
        // Properties
        this.$ = $;
+       this.visible = true;
        this.data = config.data;
-       this.$element = $( document.createElement( this.getTagName() ) );
+       this.$element = config.$element ||
+               $( document.createElement( this.getTagName() ) );
        this.elementGroup = null;
        this.debouncedUpdateThemeClassesHandler = this.debouncedUpdateThemeClasses.bind( this );
        this.updateThemeClassesPending = false;
 
        // Initialization
-       if ( $.isArray( config.classes ) ) {
+       if ( Array.isArray( config.classes ) ) {
                this.$element.addClass( config.classes.join( ' ' ) );
        }
        if ( config.id ) {
@@ -748,7 +871,25 @@ OO.ui.Element = function OoUiElement( config ) {
        if ( config.text ) {
                this.$element.text( config.text );
        }
+       if ( config.content ) {
+               // The `content` property treats plain strings as text; use an
+               // HtmlSnippet to append HTML content.  `OO.ui.Element`s get their
+               // appropriate $element appended.
+               this.$element.append( config.content.map( function ( v ) {
+                       if ( typeof v === 'string' ) {
+                               // Escape string so it is properly represented in HTML.
+                               return document.createTextNode( v );
+                       } else if ( v instanceof OO.ui.HtmlSnippet ) {
+                               // Bypass escaping.
+                               return v.toString();
+                       } else if ( v instanceof OO.ui.Element ) {
+                               return v.$element;
+                       }
+                       return v;
+               } ) );
+       }
        if ( config.$content ) {
+               // The `$content` property treats plain strings as HTML.
                this.$element.append( config.$content );
        }
 };
@@ -760,9 +901,9 @@ OO.initClass( OO.ui.Element );
 /* Static Properties */
 
 /**
- * HTML tag name.
+ * The name of the HTML tag used by the element.
  *
- * This may be ignored if #getTagName is overridden.
+ * The static value may be ignored if the #getTagName method is overridden.
  *
  * @static
  * @inheritable
@@ -772,6 +913,103 @@ OO.ui.Element.static.tagName = 'div';
 
 /* Static Methods */
 
+/**
+ * Reconstitute a JavaScript object corresponding to a widget created
+ * by the PHP implementation.
+ *
+ * @param {string|HTMLElement|jQuery} idOrNode
+ *   A DOM id (if a string) or node for the widget to infuse.
+ * @return {OO.ui.Element}
+ *   The `OO.ui.Element` corresponding to this (infusable) document node.
+ *   For `Tag` objects emitted on the HTML side (used occasionally for content)
+ *   the value returned is a newly-created Element wrapping around the existing
+ *   DOM node.
+ */
+OO.ui.Element.static.infuse = function ( idOrNode ) {
+       var obj = OO.ui.Element.static.unsafeInfuse( idOrNode, true );
+       // Verify that the type matches up.
+       // FIXME: uncomment after T89721 is fixed (see T90929)
+       /*
+       if ( !( obj instanceof this['class'] ) ) {
+               throw new Error( 'Infusion type mismatch!' );
+       }
+       */
+       return obj;
+};
+
+/**
+ * Implementation helper for `infuse`; skips the type check and has an
+ * extra property so that only the top-level invocation touches the DOM.
+ * @private
+ * @param {string|HTMLElement|jQuery} idOrNode
+ * @param {boolean} top True only for top-level invocation.
+ * @return {OO.ui.Element}
+ */
+OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) {
+       // look for a cached result of a previous infusion.
+       var id, $elem, data, cls, obj;
+       if ( typeof idOrNode === 'string' ) {
+               id = idOrNode;
+               $elem = $( document.getElementById( id ) );
+       } else {
+               $elem = $( idOrNode );
+               id = $elem.attr( 'id' );
+       }
+       data = $elem.data( 'ooui-infused' );
+       if ( data ) {
+               // cached!
+               if ( data === true ) {
+                       throw new Error( 'Circular dependency! ' + id );
+               }
+               return data;
+       }
+       if ( !$elem.length ) {
+               throw new Error( 'Widget not found: ' + id );
+       }
+       data = $elem.attr( 'data-ooui' );
+       if ( !data ) {
+               throw new Error( 'No infusion data found: ' + id );
+       }
+       try {
+               data = $.parseJSON( data );
+       } catch ( _ ) {
+               data = null;
+       }
+       if ( !( data && data._ ) ) {
+               throw new Error( 'No valid infusion data found: ' + id );
+       }
+       if ( data._ === 'Tag' ) {
+               // Special case: this is a raw Tag; wrap existing node, don't rebuild.
+               return new OO.ui.Element( { $element: $elem } );
+       }
+       cls = OO.ui[data._];
+       if ( !cls ) {
+               throw new Error( 'Unknown widget type: ' + id );
+       }
+       $elem.data( 'ooui-infused', true ); // prevent loops
+       data.id = id; // implicit
+       data = OO.copy( data, null, function deserialize( value ) {
+               if ( OO.isPlainObject( value ) ) {
+                       if ( value.tag ) {
+                               return OO.ui.Element.static.unsafeInfuse( value.tag, false );
+                       }
+                       if ( value.html ) {
+                               return new OO.ui.HtmlSnippet( value.html );
+                       }
+               }
+       } );
+       // jscs:disable requireCapitalizedConstructors
+       obj = new cls( data ); // rebuild widget
+       // now replace old DOM with this new DOM.
+       if ( top ) {
+               $elem.replaceWith( obj.$element );
+       }
+       obj.$element.data( 'ooui-infused', obj );
+       // set the 'data-ooui' attribute so we can identify infused widgets
+       obj.$element.attr( 'data-ooui', '' );
+       return obj;
+};
+
 /**
  * Get a jQuery function within a specific document.
  *
@@ -1171,6 +1409,34 @@ OO.ui.Element.static.reconsiderScrollbars = function ( el ) {
 
 /* Methods */
 
+/**
+ * Toggle visibility of an element.
+ *
+ * @param {boolean} [show] Make element visible, omit to toggle visibility
+ * @fires visible
+ * @chainable
+ */
+OO.ui.Element.prototype.toggle = function ( show ) {
+       show = show === undefined ? !this.visible : !!show;
+
+       if ( show !== this.isVisible() ) {
+               this.visible = show;
+               this.$element.toggleClass( 'oo-ui-element-hidden', !this.visible );
+               this.emit( 'toggle', show );
+       }
+
+       return this;
+};
+
+/**
+ * Check if element is visible.
+ *
+ * @return {boolean} element is visible
+ */
+OO.ui.Element.prototype.isVisible = function () {
+       return this.visible;
+};
+
 /**
  * Get element data.
  *
@@ -1201,7 +1467,7 @@ OO.ui.Element.prototype.supports = function ( methods ) {
        var i, len,
                support = 0;
 
-       methods = $.isArray( methods ) ? methods : [ methods ];
+       methods = Array.isArray( methods ) ? methods : [ methods ];
        for ( i = 0, len = methods.length; i < len; i++ ) {
                if ( $.isFunction( this[ methods[ i ] ] ) ) {
                        support++;
@@ -1308,7 +1574,11 @@ OO.ui.Element.prototype.scrollElementIntoView = function ( config ) {
 };
 
 /**
- * Container for elements.
+ * Layouts are containers for elements and are used to arrange other widgets of arbitrary type in a way
+ * that is centrally controlled and can be updated dynamically. Layouts can be, and usually are, combined.
+ * See {@link OO.ui.FieldsetLayout FieldsetLayout}, {@link OO.ui.FieldLayout FieldLayout}, {@link OO.ui.FormLayout FormLayout},
+ * {@link OO.ui.PanelLayout PanelLayout}, {@link OO.ui.StackLayout StackLayout}, {@link OO.ui.PageLayout PageLayout},
+ * and {@link OO.ui.BookletLayout BookletLayout} for more information and examples.
  *
  * @abstract
  * @class
@@ -1338,7 +1608,9 @@ OO.inheritClass( OO.ui.Layout, OO.ui.Element );
 OO.mixinClass( OO.ui.Layout, OO.EventEmitter );
 
 /**
- * User interface control.
+ * Widgets are compositions of one or more OOjs UI elements that users can both view
+ * and interact with. All widgets can be configured and modified via a standard API,
+ * and their state can change dynamically according to a model.
  *
  * @abstract
  * @class
@@ -1347,7 +1619,8 @@ OO.mixinClass( OO.ui.Layout, OO.EventEmitter );
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {boolean} [disabled=false] Disable
+ * @cfg {boolean} [disabled=false] Disable the widget. Disabled widgets cannot be used and their
+ *  appearance reflects this state.
  */
 OO.ui.Widget = function OoUiWidget( config ) {
        // Initialize config
@@ -1360,7 +1633,6 @@ OO.ui.Widget = function OoUiWidget( config ) {
        OO.EventEmitter.call( this );
 
        // Properties
-       this.visible = true;
        this.disabled = null;
        this.wasDisabled = null;
 
@@ -1378,11 +1650,17 @@ OO.mixinClass( OO.ui.Widget, OO.EventEmitter );
 
 /**
  * @event disable
+ *
+ * A 'disable' event is emitted when a widget is disabled.
+ *
  * @param {boolean} disabled Widget is disabled
  */
 
 /**
  * @event toggle
+ *
+ * A 'toggle' event is emitted when the visibility of the widget changes.
+ *
  * @param {boolean} visible Widget is visible
  */
 
@@ -1391,25 +1669,16 @@ OO.mixinClass( OO.ui.Widget, OO.EventEmitter );
 /**
  * Check if the widget is disabled.
  *
- * @return {boolean} Button is disabled
+ * @return {boolean} Widget is disabled
  */
 OO.ui.Widget.prototype.isDisabled = function () {
        return this.disabled;
 };
 
 /**
- * Check if widget is visible.
- *
- * @return {boolean} Widget is visible
- */
-OO.ui.Widget.prototype.isVisible = function () {
-       return this.visible;
-};
-
-/**
- * Set the disabled state of the widget.
+ * Set the 'disabled' state of the widget.
  *
- * This should probably change the widgets' appearance and prevent it from being used.
+ * When a widget is disabled, it cannot be used and its appearance is updated to reflect this state.
  *
  * @param {boolean} disabled Disable widget
  * @chainable
@@ -1431,25 +1700,6 @@ OO.ui.Widget.prototype.setDisabled = function ( disabled ) {
        return this;
 };
 
-/**
- * Toggle visibility of widget.
- *
- * @param {boolean} [show] Make widget visible, omit to toggle visibility
- * @fires visible
- * @chainable
- */
-OO.ui.Widget.prototype.toggle = function ( show ) {
-       show = show === undefined ? !this.visible : !!show;
-
-       if ( show !== this.isVisible() ) {
-               this.visible = show;
-               this.$element.toggleClass( 'oo-ui-element-hidden', !this.visible );
-               this.emit( 'toggle', show );
-       }
-
-       return this;
-};
-
 /**
  * Update the disabled state, in case of changes in parent widget.
  *
@@ -1461,44 +1711,49 @@ OO.ui.Widget.prototype.updateDisabled = function () {
 };
 
 /**
- * Encapsulation of an user interface.
- *
- * Use together with OO.ui.WindowManager.
+ * A window is a container for elements that are in a child frame. They are used with
+ * a window manager (OO.ui.WindowManager), which is used to open and close the window and control
+ * its presentation. The size of a window is specified using a symbolic name (e.g., ‘small’, ‘medium’,
+ * ‘large’), which is interpreted by the window manager. If the requested size is not recognized,
+ * the window manager will choose a sensible fallback.
  *
- * @abstract
- * @class
- * @extends OO.ui.Element
- * @mixins OO.EventEmitter
+ * The lifecycle of a window has three primary stages (opening, opened, and closing) in which
+ * different processes are executed:
  *
- * When a window is opened, the setup and ready processes are executed. Similarly, the hold and
- * teardown processes are executed when the window is closed.
+ * **opening**: The opening stage begins when the window manager's {@link OO.ui.WindowManager#openWindow
+ * openWindow} or the window's {@link #open open} methods are used, and the window manager begins to open
+ * the window.
  *
- * - {@link OO.ui.WindowManager#openWindow} or {@link #open} methods are used to start opening
- * - Window manager begins opening window
  * - {@link #getSetupProcess} method is called and its result executed
  * - {@link #getReadyProcess} method is called and its result executed
- * - Window is now open
  *
- * - {@link OO.ui.WindowManager#closeWindow} or {@link #close} methods are used to start closing
- * - Window manager begins closing window
+ * **opened**: The window is now open
+ *
+ * **closing**: The closing stage begins when the window manager's
+ * {@link OO.ui.WindowManager#closeWindow closeWindow}
+ * or the window's {@link #close} methods are used, and the window manager begins to close the window.
+ *
  * - {@link #getHoldProcess} method is called and its result executed
- * - {@link #getTeardownProcess} method is called and its result executed
- * - Window is now closed
+ * - {@link #getTeardownProcess} method is called and its result executed. The window is now closed
+ *
+ * Each of the window's processes (setup, ready, hold, and teardown) can be extended in subclasses
+ * by overriding the window's #getSetupProcess, #getReadyProcess, #getHoldProcess and #getTeardownProcess
+ * methods. Note that each {@link OO.ui.Process process} is executed in series, so asynchronous
+ * processing can complete. Always assume window processes are executed asynchronously.
+ *
+ * For more information, please see the [OOjs UI documentation on MediaWiki] [1].
  *
- * Each process (setup, ready, hold and teardown) can be extended in subclasses by overriding
- * {@link #getSetupProcess}, {@link #getReadyProcess}, {@link #getHoldProcess} and
- * {@link #getTeardownProcess} respectively. Each process is executed in series, so asynchronous
- * processing can complete. Always assume window processes are executed asynchronously. See
- * OO.ui.Process for more details about how to work with processes. Some events, as well as the
- * #open and #close methods, provide promises which are resolved when the window enters a new state.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows
  *
- * Sizing of windows is specified using symbolic names which are interpreted by the window manager.
- * If the requested size is not recognized, the window manager will choose a sensible fallback.
+ * @abstract
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string} [size] Symbolic name of dialog size, `small`, `medium`, `large`, `larger` or
- *  `full`; omit to use #static-size
+ * @cfg {string} [size] Symbolic name of the dialog size: `small`, `medium`, `large`, `larger` or
+ *  `full`.  If omitted, the value of the {@link #static-size static size} property will be used.
  */
 OO.ui.Window = function OoUiWindow( config ) {
        // Configuration initialization
@@ -1545,9 +1800,9 @@ OO.mixinClass( OO.ui.Window, OO.EventEmitter );
 /* Static Properties */
 
 /**
- * Symbolic name of size.
+ * Symbolic name of the window size: `small`, `medium`, `large`, `larger` or `full`.
  *
- * Size is used if no size is configured during construction.
+ * The static size is used if no #size is configured during construction.
  *
  * @static
  * @inheritable
@@ -1560,6 +1815,7 @@ OO.ui.Window.static.size = 'medium';
 /**
  * Handle mouse down events.
  *
+ * @private
  * @param {jQuery.Event} e Mouse down event
  */
 OO.ui.Window.prototype.onMouseDown = function ( e ) {
@@ -1570,7 +1826,7 @@ OO.ui.Window.prototype.onMouseDown = function ( e ) {
 };
 
 /**
- * Check if window has been initialized.
+ * Check if the window has been initialized.
  *
  * Initialization occurs when a window is added to a manager.
  *
@@ -1581,7 +1837,7 @@ OO.ui.Window.prototype.isInitialized = function () {
 };
 
 /**
- * Check if window is visible.
+ * Check if the window is visible.
  *
  * @return {boolean} Window is visible
  */
@@ -1590,9 +1846,10 @@ OO.ui.Window.prototype.isVisible = function () {
 };
 
 /**
- * Check if window is opening.
+ * Check if the window is opening.
  *
- * This is a wrapper around OO.ui.WindowManager#isOpening.
+ * This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isOpening isOpening}
+ * method.
  *
  * @return {boolean} Window is opening
  */
@@ -1601,9 +1858,9 @@ OO.ui.Window.prototype.isOpening = function () {
 };
 
 /**
- * Check if window is closing.
+ * Check if the window is closing.
  *
- * This is a wrapper around OO.ui.WindowManager#isClosing.
+ * This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isClosing isClosing} method.
  *
  * @return {boolean} Window is closing
  */
@@ -1612,9 +1869,9 @@ OO.ui.Window.prototype.isClosing = function () {
 };
 
 /**
- * Check if window is opened.
+ * Check if the window is opened.
  *
- * This is a wrapper around OO.ui.WindowManager#isOpened.
+ * This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isOpened isOpened} method.
  *
  * @return {boolean} Window is opened
  */
@@ -1625,6 +1882,9 @@ OO.ui.Window.prototype.isOpened = function () {
 /**
  * Get the window manager.
  *
+ * All windows must be attached to a window manager, which is used to open
+ * and close the window and control its presentation.
+ *
  * @return {OO.ui.WindowManager} Manager of window
  */
 OO.ui.Window.prototype.getManager = function () {
@@ -1632,9 +1892,9 @@ OO.ui.Window.prototype.getManager = function () {
 };
 
 /**
- * Get the window size.
+ * Get the symbolic name of the window size (e.g., `small` or `medium`).
  *
- * @return {string} Symbolic size name, e.g. `small`, `medium`, `large`, `larger`, `full`
+ * @return {string} Symbolic name of the size: `small`, `medium`, `large`, `larger`, `full`
  */
 OO.ui.Window.prototype.getSize = function () {
        return this.size;
@@ -1664,9 +1924,16 @@ OO.ui.Window.prototype.withoutSizeTransitions = function ( callback ) {
 };
 
 /**
- * Get the height of the dialog contents.
+ * Get the height of the full window contents (i.e., the window head, body and foot together).
+ *
+ * What consistitutes the head, body, and foot varies depending on the window type.
+ * A {@link OO.ui.MessageDialog message dialog} displays a title and message in its body,
+ * and any actions in the foot. A {@link OO.ui.ProcessDialog process dialog} displays a title
+ * and special actions in the head, and dialog content in the body.
  *
- * @return {number} Content height
+ * To get just the height of the dialog body, use the #getBodyHeight method.
+ *
+ * @return {number} The height of the window contents (the dialog head, body and foot) in pixels
  */
 OO.ui.Window.prototype.getContentHeight = function () {
        var bodyHeight,
@@ -1696,34 +1963,42 @@ OO.ui.Window.prototype.getContentHeight = function () {
 };
 
 /**
- * Get the height of the dialog contents.
+ * Get the height of the window body.
+ *
+ * To get the height of the full window contents (the window body, head, and foot together),
+ * use #getContentHeight.
  *
- * When this function is called, the dialog will temporarily have been resized
+ * When this function is called, the window will temporarily have been resized
  * to height=1px, so .scrollHeight measurements can be taken accurately.
  *
- * @return {number} Height of content
+ * @return {number} Height of the window body in pixels
  */
 OO.ui.Window.prototype.getBodyHeight = function () {
        return this.$body[ 0 ].scrollHeight;
 };
 
 /**
- * Get the directionality of the frame
+ * Get the directionality of the frame (right-to-left or left-to-right).
  *
- * @return {string} Directionality, 'ltr' or 'rtl'
+ * @return {string} Directionality: `'ltr'` or `'rtl'`
  */
 OO.ui.Window.prototype.getDir = function () {
        return this.dir;
 };
 
 /**
- * Get a process for setting up a window for use.
+ * Get the 'setup' process.
  *
- * Each time the window is opened this process will set it up for use in a particular context, based
- * on the `data` argument.
+ * The setup process is used to set up a window for use in a particular context,
+ * based on the `data` argument. This method is called during the opening phase of the window’s
+ * lifecycle.
  *
- * When you override this method, you can add additional setup steps to the process the parent
- * method provides using the 'first' and 'next' methods.
+ * Override this method to add additional steps to the ‘setup’ process the parent method provides
+ * using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} methods
+ * of OO.ui.Process.
+ *
+ * To add window content that persists between openings, you may wish to use the #initialize method
+ * instead.
  *
  * @abstract
  * @param {Object} [data] Window opening data
@@ -1734,30 +2009,34 @@ OO.ui.Window.prototype.getSetupProcess = function () {
 };
 
 /**
- * Get a process for readying a window for use.
+ * Get the ‘ready’ process.
  *
- * Each time the window is open and setup, this process will ready it up for use in a particular
- * context, based on the `data` argument.
+ * The ready process is used to ready a window for use in a particular
+ * context, based on the `data` argument. This method is called during the opening phase of
+ * the window’s lifecycle, after the window has been {@link #getSetupProcess setup}.
  *
- * When you override this method, you can add additional setup steps to the process the parent
- * method provides using the 'first' and 'next' methods.
+ * Override this method to add additional steps to the ‘ready’ process the parent method
+ * provides using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next}
+ * methods of OO.ui.Process.
  *
  * @abstract
  * @param {Object} [data] Window opening data
- * @return {OO.ui.Process} Setup process
+ * @return {OO.ui.Process} Ready process
  */
 OO.ui.Window.prototype.getReadyProcess = function () {
        return new OO.ui.Process();
 };
 
 /**
- * Get a process for holding a window from use.
+ * Get the 'hold' process.
  *
- * Each time the window is closed, this process will hold it from use in a particular context, based
- * on the `data` argument.
+ * The hold proccess is used to keep a window from being used in a particular context,
+ * based on the `data` argument. This method is called during the closing phase of the window’s
+ * lifecycle.
  *
- * When you override this method, you can add additional setup steps to the process the parent
- * method provides using the 'first' and 'next' methods.
+ * Override this method to add additional steps to the 'hold' process the parent method provides
+ * using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} methods
+ * of OO.ui.Process.
  *
  * @abstract
  * @param {Object} [data] Window closing data
@@ -1768,13 +2047,15 @@ OO.ui.Window.prototype.getHoldProcess = function () {
 };
 
 /**
- * Get a process for tearing down a window after use.
+ * Get the ‘teardown’ process.
  *
- * Each time the window is closed this process will tear it down and do something with the user's
- * interactions within the window, based on the `data` argument.
+ * The teardown process is used to teardown a window after use. During teardown,
+ * user interactions within the window are conveyed and the window is closed, based on the `data`
+ * argument. This method is called during the closing phase of the window’s lifecycle.
  *
- * When you override this method, you can add additional teardown steps to the process the parent
- * method provides using the 'first' and 'next' methods.
+ * Override this method to add additional steps to the ‘teardown’ process the parent method provides
+ * using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} methods
+ * of OO.ui.Process.
  *
  * @abstract
  * @param {Object} [data] Window closing data
@@ -1784,32 +2065,13 @@ OO.ui.Window.prototype.getTeardownProcess = function () {
        return new OO.ui.Process();
 };
 
-/**
- * Toggle visibility of window.
- *
- * @param {boolean} [show] Make window visible, omit to toggle visibility
- * @fires toggle
- * @chainable
- */
-OO.ui.Window.prototype.toggle = function ( show ) {
-       show = show === undefined ? !this.visible : !!show;
-
-       if ( show !== this.isVisible() ) {
-               this.visible = show;
-               this.$element.toggleClass( 'oo-ui-element-hidden', !this.visible );
-               this.emit( 'toggle', show );
-       }
-
-       return this;
-};
-
 /**
  * Set the window manager.
  *
  * This will cause the window to initialize. Calling it more than once will cause an error.
  *
  * @param {OO.ui.WindowManager} manager Manager for this window
- * @throws {Error} If called more than once
+ * @throws {Error} An error is thrown if the method is called more than once
  * @chainable
  */
 OO.ui.Window.prototype.setManager = function ( manager ) {
@@ -1824,9 +2086,10 @@ OO.ui.Window.prototype.setManager = function ( manager ) {
 };
 
 /**
- * Set the window size.
+ * Set the window size by symbolic name (e.g., 'small' or 'medium')
  *
- * @param {string} size Symbolic size name, e.g. 'small', 'medium', 'large', 'full'
+ * @param {string} size Symbolic name of size: `small`, `medium`, `large`, `larger` or
+ *  `full`
  * @chainable
  */
 OO.ui.Window.prototype.setSize = function ( size ) {
@@ -1838,7 +2101,7 @@ OO.ui.Window.prototype.setSize = function ( size ) {
 /**
  * Update the window size.
  *
- * @throws {Error} If not attached to a manager
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
  * @chainable
  */
 OO.ui.Window.prototype.updateSize = function () {
@@ -1852,9 +2115,10 @@ OO.ui.Window.prototype.updateSize = function () {
 };
 
 /**
- * Set window dimensions.
+ * Set window dimensions. This method is called by the {@link OO.ui.WindowManager window manager}
+ * when the window is opening. In general, setDimensions should not be called directly.
  *
- * Properties are applied to the frame container.
+ * To set the size of the window, use the #setSize method.
  *
  * @param {Object} dim CSS dimension properties
  * @param {string|number} [dim.width] Width
@@ -1897,11 +2161,12 @@ OO.ui.Window.prototype.setDimensions = function ( dim ) {
 /**
  * Initialize window contents.
  *
- * The first time the window is opened, #initialize is called so that changes to the window that
- * will persist between openings can be made. See #getSetupProcess for a way to make changes each
- * time the window opens.
+ * Before the window is opened for the first time, #initialize is called so that content that
+ * persists between openings can be added to the window.
  *
- * @throws {Error} If not attached to a manager
+ * To set up a window with new content each time the window opens, use #getSetupProcess.
+ *
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
  * @chainable
  */
 OO.ui.Window.prototype.initialize = function () {
@@ -1913,7 +2178,6 @@ OO.ui.Window.prototype.initialize = function () {
        this.$head = $( '<div>' );
        this.$body = $( '<div>' );
        this.$foot = $( '<div>' );
-       this.$innerOverlay = $( '<div>' );
        this.dir = OO.ui.Element.static.getDir( this.$content ) || 'ltr';
        this.$document = $( this.getElementDocument() );
 
@@ -1924,22 +2188,24 @@ OO.ui.Window.prototype.initialize = function () {
        this.$head.addClass( 'oo-ui-window-head' );
        this.$body.addClass( 'oo-ui-window-body' );
        this.$foot.addClass( 'oo-ui-window-foot' );
-       this.$innerOverlay.addClass( 'oo-ui-window-inner-overlay' );
-       this.$content.append( this.$head, this.$body, this.$foot, this.$innerOverlay );
+       this.$content.append( this.$head, this.$body, this.$foot );
 
        return this;
 };
 
 /**
- * Open window.
+ * Open the window.
+ *
+ * This method is a wrapper around a call to the window manager’s {@link OO.ui.WindowManager#openWindow openWindow}
+ * method, which returns a promise resolved when the window is done opening.
  *
- * This is a wrapper around calling {@link OO.ui.WindowManager#openWindow} on the window manager.
- * To do something each time the window opens, use #getSetupProcess or #getReadyProcess.
+ * To customize the window each time it opens, use #getSetupProcess or #getReadyProcess.
  *
  * @param {Object} [data] Window opening data
- * @return {jQuery.Promise} Promise resolved when window is opened; when the promise is resolved the
- *   first argument will be a promise which will be resolved when the window begins closing
- * @throws {Error} If not attached to a manager
+ * @return {jQuery.Promise} Promise resolved with a value when the window is opened, or rejected
+ *  if the window fails to open. When the promise is resolved successfully, the first argument of the
+ *  value is a new promise, which is resolved when the window begins closing.
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
  */
 OO.ui.Window.prototype.open = function ( data ) {
        if ( !this.manager ) {
@@ -1950,14 +2216,19 @@ OO.ui.Window.prototype.open = function ( data ) {
 };
 
 /**
- * Close window.
+ * Close the window.
  *
- * This is a wrapper around calling OO.ui.WindowManager#closeWindow on the window manager.
- * To do something each time the window closes, use #getHoldProcess or #getTeardownProcess.
+ * This method is a wrapper around a call to the window
+ * manager’s {@link OO.ui.WindowManager#closeWindow closeWindow} method,
+ * which returns a closing promise resolved when the window is done closing.
+ *
+ * The window's #getHoldProcess and #getTeardownProcess methods are called during the closing
+ * phase of the window’s lifecycle and can be used to specify closing behavior each time
+ * the window closes.
  *
  * @param {Object} [data] Window closing data
  * @return {jQuery.Promise} Promise resolved when window is closed
- * @throws {Error} If not attached to a manager
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
  */
 OO.ui.Window.prototype.close = function ( data ) {
        if ( !this.manager ) {
@@ -2069,25 +2340,38 @@ OO.ui.Window.prototype.teardown = function ( data ) {
 };
 
 /**
- * Base class for all dialogs.
- *
- * Logic:
- * - Manage the window (open and close, etc.).
- * - Store the internal name and display title.
- * - A stack to track one or more pending actions.
- * - Manage a set of actions that can be performed.
- * - Configure and create action widgets.
- *
- * User interface:
- * - Close the dialog with Escape key.
- * - Visually lock the dialog while an action is in
- *   progress (aka "pending").
- *
- * Subclass responsibilities:
- * - Display the title somewhere.
- * - Add content to the dialog.
- * - Provide a UI to close the dialog.
- * - Display the action widgets somewhere.
+ * The Dialog class serves as the base class for the other types of dialogs.
+ * Unless extended to include controls, the rendered dialog box is a simple window
+ * that users can close by hitting the ‘Esc’ key. Dialog windows are used with OO.ui.WindowManager,
+ * which opens, closes, and controls the presentation of the window. See the
+ * [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ *     @example
+ *     // A simple dialog window.
+ *     function MyDialog( config ) {
+ *         MyDialog.super.call( this, config );
+ *     }
+ *     OO.inheritClass( MyDialog, OO.ui.Dialog );
+ *     MyDialog.prototype.initialize = function () {
+ *         MyDialog.super.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 );
+ *     };
+ *     MyDialog.prototype.getBodyHeight = function () {
+ *         return this.content.$element.outerHeight( true );
+ *     };
+ *     var myDialog = new MyDialog( {
+ *         size: 'medium'
+ *     } );
+ *     // Create and append a window manager, which opens and closes the window.
+ *     var windowManager = new OO.ui.WindowManager();
+ *     $( 'body' ).append( windowManager.$element );
+ *     windowManager.addWindows( [ myDialog ] );
+ *     // Open the window!
+ *     windowManager.openWindow( myDialog );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Dialogs
  *
  * @abstract
  * @class
@@ -2133,6 +2417,11 @@ OO.mixinClass( OO.ui.Dialog, OO.ui.PendingElement );
 /**
  * Symbolic name of dialog.
  *
+ * The dialog class must have a symbolic name in order to be registered with OO.Factory.
+ * Please see the [OOjs UI documentation on MediaWiki] [3] for more information.
+ *
+ * [3]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
+ *
  * @abstract
  * @static
  * @inheritable
@@ -2141,26 +2430,35 @@ OO.mixinClass( OO.ui.Dialog, OO.ui.PendingElement );
 OO.ui.Dialog.static.name = '';
 
 /**
- * Dialog title.
+ * The dialog title.
+ *
+ * The title can be specified as a plaintext string, a {@link OO.ui.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.
  *
  * @abstract
  * @static
  * @inheritable
- * @property {jQuery|string|Function} Label nodes, text or a function that returns nodes or text
+ * @property {jQuery|string|Function}
  */
 OO.ui.Dialog.static.title = '';
 
 /**
- * List of OO.ui.ActionWidget configuration options.
+ * An array of configured {@link OO.ui.ActionWidget action widgets}.
+ *
+ * Actions can also be specified with data passed to the constructor (see #getSetupProcess). In this case, the static
+ * value will be overriden.
+ *
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Action_sets
  *
  * @static
- * inheritable
+ * @inheritable
  * @property {Object[]}
  */
 OO.ui.Dialog.static.actions = [];
 
 /**
- * Close dialog when the escape key is pressed.
+ * Close the dialog when the 'Esc' key is pressed.
  *
  * @static
  * @abstract
@@ -2174,6 +2472,7 @@ OO.ui.Dialog.static.escapable = true;
 /**
  * Handle frame document key down events.
  *
+ * @private
  * @param {jQuery.Event} e Key down event
  */
 OO.ui.Dialog.prototype.onDocumentKeyDown = function ( e ) {
@@ -2187,6 +2486,7 @@ OO.ui.Dialog.prototype.onDocumentKeyDown = function ( e ) {
 /**
  * Handle action resized events.
  *
+ * @private
  * @param {OO.ui.ActionWidget} action Action that was resized
  */
 OO.ui.Dialog.prototype.onActionResize = function () {
@@ -2196,17 +2496,19 @@ OO.ui.Dialog.prototype.onActionResize = function () {
 /**
  * Handle action click events.
  *
+ * @private
  * @param {OO.ui.ActionWidget} action Action that was clicked
  */
 OO.ui.Dialog.prototype.onActionClick = function ( action ) {
        if ( !this.isPending() ) {
-               this.currentAction = action;
                this.executeAction( action.getAction() );
        }
 };
 
 /**
  * Handle actions change event.
+ *
+ * @private
  */
 OO.ui.Dialog.prototype.onActionsChange = function () {
        this.detachActions();
@@ -2216,7 +2518,7 @@ OO.ui.Dialog.prototype.onActionsChange = function () {
 };
 
 /**
- * Get set of actions.
+ * Get the set of actions used by the dialog.
  *
  * @return {OO.ui.ActionSet}
  */
@@ -2227,8 +2529,9 @@ OO.ui.Dialog.prototype.getActions = function () {
 /**
  * Get a process for taking action.
  *
- * When you override this method, you can add additional accept steps to the process the parent
- * method provides using the 'first' and 'next' methods.
+ * When you override this method, you can create a new OO.ui.Process and return it, or add additional
+ * accept steps to the process the parent method provides using the {@link OO.ui.Process#first 'first'}
+ * and {@link OO.ui.Process#next 'next'} methods of OO.ui.Process.
  *
  * @abstract
  * @param {string} [action] Symbolic name of action
@@ -2249,9 +2552,10 @@ OO.ui.Dialog.prototype.getActionProcess = function ( action ) {
  * @inheritdoc
  *
  * @param {Object} [data] Dialog opening data
- * @param {jQuery|string|Function|null} [data.title] Dialog title, omit to use #static-title
- * @param {Object[]} [data.actions] List of OO.ui.ActionWidget configuration options for each
- *   action item, omit to use #static-actions
+ * @param {jQuery|string|Function|null} [data.title] Dialog title, omit to use
+ *  the {@link #static-title static title}
+ * @param {Object[]} [data.actions] List of configuration options for each
+ *   {@link OO.ui.ActionWidget action widget}, omit to use {@link #static-actions static actions}.
  */
 OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
        data = data || {};
@@ -2259,20 +2563,13 @@ OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
        // Parent method
        return OO.ui.Dialog.super.prototype.getSetupProcess.call( this, data )
                .next( function () {
-                       var i, len,
-                               items = [],
-                               config = this.constructor.static,
+                       var config = this.constructor.static,
                                actions = data.actions !== undefined ? data.actions : config.actions;
 
                        this.title.setLabel(
                                data.title !== undefined ? data.title : this.constructor.static.title
                        );
-                       for ( i = 0, len = actions.length; i < len; i++ ) {
-                               items.push(
-                                       new OO.ui.ActionWidget( actions[ i ] )
-                               );
-                       }
-                       this.actions.add( items );
+                       this.actions.add( this.getActionWidgets( actions ) );
 
                        if ( this.constructor.static.escapable ) {
                                this.$document.on( 'keydown', this.onDocumentKeyDownHandler );
@@ -2311,8 +2608,26 @@ OO.ui.Dialog.prototype.initialize = function () {
        this.setPendingElement( this.$head );
 };
 
+/**
+ * Get action widgets from a list of configs
+ *
+ * @param {Object[]} actions Action widget configs
+ * @return {OO.ui.ActionWidget[]} Action widgets
+ */
+OO.ui.Dialog.prototype.getActionWidgets = function ( actions ) {
+       var i, len, widgets = [];
+       for ( i = 0, len = actions.length; i < len; i++ ) {
+               widgets.push(
+                       new OO.ui.ActionWidget( actions[ i ] )
+               );
+       }
+       return widgets;
+};
+
 /**
  * Attach action actions.
+ *
+ * @protected
  */
 OO.ui.Dialog.prototype.attachActions = function () {
        // Remember the list of potentially attached actions
@@ -2322,6 +2637,7 @@ OO.ui.Dialog.prototype.attachActions = function () {
 /**
  * Detach action actions.
  *
+ * @protected
  * @chainable
  */
 OO.ui.Dialog.prototype.detachActions = function () {
@@ -2342,51 +2658,65 @@ OO.ui.Dialog.prototype.detachActions = function () {
  */
 OO.ui.Dialog.prototype.executeAction = function ( action ) {
        this.pushPending();
+       this.currentAction = action;
        return this.getActionProcess( action ).execute()
                .always( this.popPending.bind( this ) );
 };
 
 /**
- * Collection of windows.
+ * Window managers are used to open and close {@link OO.ui.Window windows} and control their presentation.
+ * Managed windows are mutually exclusive. If a new window is opened while a current window is opening
+ * or is opened, the current window will be closed and any ongoing {@link OO.ui.Process process} will be cancelled. Windows
+ * themselves are persistent and—rather than being torn down when closed—can be repopulated with the
+ * pertinent data and reused.
+ *
+ * Over the lifecycle of a window, the window manager makes available three promises: `opening`,
+ * `opened`, and `closing`, which represent the primary stages of the cycle:
+ *
+ * **Opening**: the opening stage begins when the window manager’s #openWindow or a window’s
+ * {@link OO.ui.Window#open open} method is used, and the window manager begins to open the window.
+ *
+ * - an `opening` event is emitted with an `opening` promise
+ * - the #getSetupDelay method is called and the returned value is used to time a pause in execution before
+ *   the window’s {@link OO.ui.Window#getSetupProcess getSetupProcess} method is called on the
+ *   window and its result executed
+ * - a `setup` progress notification is emitted from the `opening` promise
+ * - the #getReadyDelay method is called the returned value is used to time a pause in execution before
+ *   the window’s {@link OO.ui.Window#getReadyProcess getReadyProcess} method is called on the
+ *   window and its result executed
+ * - a `ready` progress notification is emitted from the `opening` promise
+ * - the `opening` promise is resolved with an `opened` promise
+ *
+ * **Opened**: the window is now open.
+ *
+ * **Closing**: the closing stage begins when the window manager's #closeWindow or the
+ * window's {@link OO.ui.Window#close close} methods is used, and the window manager begins
+ * to close the window.
+ *
+ * - the `opened` promise is resolved with `closing` promise and a `closing` event is emitted
+ * - the #getHoldDelay method is called and the returned value is used to time a pause in execution before
+ *   the window's {@link OO.ui.Window#getHoldProcess getHoldProces} method is called on the
+ *   window and its result executed
+ * - a `hold` progress notification is emitted from the `closing` promise
+ * - the #getTeardownDelay() method is called and the returned value is used to time a pause in execution before
+ *   the window's {@link OO.ui.Window#getTeardownProcess getTeardownProcess} method is called on the
+ *   window and its result executed
+ * - a `teardown` progress notification is emitted from the `closing` promise
+ * - the `closing` promise is resolved. The window is now closed
+ *
+ * See the [OOjs UI documentation on MediaWiki][1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
  *
  * @class
  * @extends OO.ui.Element
  * @mixins OO.EventEmitter
  *
- * Managed windows are mutually exclusive. If a window is opened while there is a current window
- * already opening or opened, the current window will be closed without data. Empty closing data
- * should always result in the window being closed without causing constructive or destructive
- * action.
- *
- * As a window is opened and closed, it passes through several stages and the manager emits several
- * corresponding events.
- *
- * - {@link #openWindow} or {@link OO.ui.Window#open} methods are used to start opening
- * - {@link #event-opening} is emitted with `opening` promise
- * - {@link #getSetupDelay} is called the returned value is used to time a pause in execution
- * - {@link OO.ui.Window#getSetupProcess} method is called on the window and its result executed
- * - `setup` progress notification is emitted from opening promise
- * - {@link #getReadyDelay} is called the returned value is used to time a pause in execution
- * - {@link OO.ui.Window#getReadyProcess} method is called on the window and its result executed
- * - `ready` progress notification is emitted from opening promise
- * - `opening` promise is resolved with `opened` promise
- * - Window is now open
- *
- * - {@link #closeWindow} or {@link OO.ui.Window#close} methods are used to start closing
- * - `opened` promise is resolved with `closing` promise
- * - {@link #event-closing} is emitted with `closing` promise
- * - {@link #getHoldDelay} is called the returned value is used to time a pause in execution
- * - {@link OO.ui.Window#getHoldProcess} method is called on the window and its result executed
- * - `hold` progress notification is emitted from opening promise
- * - {@link #getTeardownDelay} is called the returned value is used to time a pause in execution
- * - {@link OO.ui.Window#getTeardownProcess} method is called on the window and its result executed
- * - `teardown` progress notification is emitted from opening promise
- * - Closing promise is resolved
- * - Window is now closed
- *
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {OO.Factory} [factory] Window factory to use for automatic instantiation
+ *  Note that window classes that are instantiated with a factory must have
+ *  a {@link OO.ui.Dialog#static-name static name} property that specifies a symbolic name.
  * @cfg {boolean} [modal=true] Prevent interaction outside the dialog
  */
 OO.ui.WindowManager = function OoUiWindowManager( config ) {
@@ -2409,6 +2739,7 @@ OO.ui.WindowManager = function OoUiWindowManager( config ) {
        this.preparingToOpen = null;
        this.preparingToClose = null;
        this.currentWindow = null;
+       this.globalEvents = false;
        this.$ariaHidden = null;
        this.onWindowResizeTimeout = null;
        this.onWindowResizeHandler = this.onWindowResize.bind( this );
@@ -2428,34 +2759,30 @@ OO.mixinClass( OO.ui.WindowManager, OO.EventEmitter );
 /* Events */
 
 /**
- * Window is opening.
- *
- * Fired when the window begins to be opened.
+ * An 'opening' event is emitted when the window begins to be opened.
  *
  * @event opening
  * @param {OO.ui.Window} win Window that's being opened
- * @param {jQuery.Promise} opening Promise resolved when window is opened; when the promise is
- *   resolved the first argument will be a promise which will be resolved when the window begins
- *   closing, the second argument will be the opening data; progress notifications will be fired on
- *   the promise for `setup` and `ready` when those processes are completed respectively.
+ * @param {jQuery.Promise} opening An `opening` promise resolved with a value when the window is opened successfully.
+ *  When the `opening` promise is resolved, the first argument of the value is an 'opened' promise, the second argument
+ *  is the opening data. The `opening` promise emits `setup` and `ready` notifications when those processes are complete.
  * @param {Object} data Window opening data
  */
 
 /**
- * Window is closing.
- *
- * Fired when the window begins to be closed.
+ * A 'closing' event is emitted when the window begins to be closed.
  *
  * @event closing
  * @param {OO.ui.Window} win Window that's being closed
- * @param {jQuery.Promise} opening Promise resolved when window is closed; when the promise
- *   is resolved the first argument will be a the closing data; progress notifications will be fired
- *   on the promise for `hold` and `teardown` when those processes are completed respectively.
+ * @param {jQuery.Promise} closing A `closing` promise is resolved with a value when the window
+ *  is closed successfully. The promise emits `hold` and `teardown` notifications when those
+ *  processes are complete. When the `closing` promise is resolved, the first argument of its value
+ *  is the closing data.
  * @param {Object} data Window closing data
  */
 
 /**
- * Window was resized.
+ * A 'resize' event is emitted when a window is resized.
  *
  * @event resize
  * @param {OO.ui.Window} win Window that was resized
@@ -2464,7 +2791,7 @@ OO.mixinClass( OO.ui.WindowManager, OO.EventEmitter );
 /* Static Properties */
 
 /**
- * Map of symbolic size names and CSS properties.
+ * Map of the symbolic name of each window size and its CSS properties.
  *
  * @static
  * @inheritable
@@ -2491,9 +2818,9 @@ OO.ui.WindowManager.static.sizes = {
 };
 
 /**
- * Symbolic name of default size.
+ * Symbolic name of the default window size.
  *
- * Default size is used if the window's requested size is not recognized.
+ * The default size is used if the window's requested size is not recognized.
  *
  * @static
  * @inheritable
@@ -2506,6 +2833,7 @@ OO.ui.WindowManager.static.defaultSize = 'medium';
 /**
  * Handle window resize events.
  *
+ * @private
  * @param {jQuery.Event} e Window resize event
  */
 OO.ui.WindowManager.prototype.onWindowResize = function () {
@@ -2516,6 +2844,7 @@ OO.ui.WindowManager.prototype.onWindowResize = function () {
 /**
  * Handle window resize events.
  *
+ * @private
  * @param {jQuery.Event} e Window resize event
  */
 OO.ui.WindowManager.prototype.afterWindowResize = function () {
@@ -2570,7 +2899,7 @@ OO.ui.WindowManager.prototype.hasWindow = function ( win ) {
 };
 
 /**
- * Get the number of milliseconds to wait between beginning opening and executing setup process.
+ * Get the number of milliseconds to wait after opening begins before executing the ‘setup’ process.
  *
  * @param {OO.ui.Window} win Window being opened
  * @param {Object} [data] Window opening data
@@ -2581,7 +2910,7 @@ OO.ui.WindowManager.prototype.getSetupDelay = function () {
 };
 
 /**
- * Get the number of milliseconds to wait between finishing setup and executing ready process.
+ * Get the number of milliseconds to wait after setup has finished before executing the ‘ready’ process.
  *
  * @param {OO.ui.Window} win Window being opened
  * @param {Object} [data] Window opening data
@@ -2592,7 +2921,7 @@ OO.ui.WindowManager.prototype.getReadyDelay = function () {
 };
 
 /**
- * Get the number of milliseconds to wait between beginning closing and executing hold process.
+ * Get the number of milliseconds to wait after closing has begun before executing the 'hold' process.
  *
  * @param {OO.ui.Window} win Window being closed
  * @param {Object} [data] Window closing data
@@ -2603,7 +2932,8 @@ OO.ui.WindowManager.prototype.getHoldDelay = function () {
 };
 
 /**
- * Get the number of milliseconds to wait between finishing hold and executing teardown process.
+ * Get the number of milliseconds to wait after the ‘hold’ process has finished before
+ * executing the ‘teardown’ process.
  *
  * @param {OO.ui.Window} win Window being closed
  * @param {Object} [data] Window closing data
@@ -2614,14 +2944,17 @@ OO.ui.WindowManager.prototype.getTeardownDelay = function () {
 };
 
 /**
- * Get managed window by symbolic name.
+ * Get a window by its symbolic name.
  *
- * If window is not yet instantiated, it will be instantiated and added automatically.
+ * If the window is not yet instantiated and its symbolic name is recognized by a factory, it will be
+ * instantiated and added to the window manager automatically. Please see the [OOjs UI documentation on MediaWiki][3]
+ * for more information about using factories.
+ * [3]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
  *
- * @param {string} name Symbolic window name
+ * @param {string} name Symbolic name of the window
  * @return {jQuery.Promise} Promise resolved with matching window, or rejected with an OO.ui.Error
- * @throws {Error} If the symbolic name is unrecognized by the factory
- * @throws {Error} If the symbolic name unrecognized as a managed window
+ * @throws {Error} An error is thrown if the symbolic name is not recognized by the factory.
+ * @throws {Error} An error is thrown if the named window is not recognized as a managed window.
  */
 OO.ui.WindowManager.prototype.getWindow = function ( name ) {
        var deferred = $.Deferred(),
@@ -2634,7 +2967,7 @@ OO.ui.WindowManager.prototype.getWindow = function ( name ) {
                                        'Cannot auto-instantiate window: symbolic name is unrecognized by the factory'
                                ) );
                        } else {
-                               win = this.factory.create( name, this );
+                               win = this.factory.create( name );
                                this.addWindows( [ win ] );
                                deferred.resolve( win );
                        }
@@ -2664,8 +2997,8 @@ OO.ui.WindowManager.prototype.getCurrentWindow = function () {
  *
  * @param {OO.ui.Window|string} win Window object or symbolic name of window to open
  * @param {Object} [data] Window opening data
- * @return {jQuery.Promise} Promise resolved when window is done opening; see {@link #event-opening}
- *   for more details about the `opening` promise
+ * @return {jQuery.Promise} An `opening` promise resolved when the window is done opening.
+ *  See {@link #event-opening 'opening' event}  for more information about `opening` promises.
  * @fires opening
  */
 OO.ui.WindowManager.prototype.openWindow = function ( win, data ) {
@@ -2729,9 +3062,9 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data ) {
  *
  * @param {OO.ui.Window|string} win Window object or symbolic name of window to close
  * @param {Object} [data] Window closing data
- * @return {jQuery.Promise} Promise resolved when window is done closing; see {@link #event-closing}
- *   for more details about the `closing` promise
- * @throws {Error} If no window by that name is being managed
+ * @return {jQuery.Promise} A `closing` promise resolved when the window is done closing.
+ *  See {@link #event-closing 'closing' event} for more information about closing promises.
+ * @throws {Error} An error is thrown if the window is not managed by the window manager.
  * @fires closing
  */
 OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
@@ -2797,16 +3130,21 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
 };
 
 /**
- * Add windows.
+ * Add windows to the window manager.
  *
- * @param {Object.<string,OO.ui.Window>|OO.ui.Window[]} windows Windows to add
- * @throws {Error} If one of the windows being added without an explicit symbolic name does not have
- *   a statically configured symbolic name
+ * Windows can be added by reference, symbolic name, or explicitly defined symbolic names.
+ * See the [OOjs ui documentation on MediaWiki] [2] for examples.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
+ *
+ * @param {Object.<string,OO.ui.Window>|OO.ui.Window[]} windows An array of window objects specified
+ *  by reference, symbolic name, or explicitly defined symbolic names.
+ * @throws {Error} An error is thrown if a window is added by symbolic name, but has neither an
+ *  explicit nor a statically configured symbolic name.
  */
 OO.ui.WindowManager.prototype.addWindows = function ( windows ) {
        var i, len, win, name, list;
 
-       if ( $.isArray( windows ) ) {
+       if ( Array.isArray( windows ) ) {
                // Convert to map of windows by looking up symbolic names from static configuration
                list = {};
                for ( i = 0, len = windows.length; i < len; i++ ) {
@@ -2816,7 +3154,7 @@ OO.ui.WindowManager.prototype.addWindows = function ( windows ) {
                        }
                        list[ name ] = windows[ i ];
                }
-       } else if ( $.isPlainObject( windows ) ) {
+       } else if ( OO.isPlainObject( windows ) ) {
                list = windows;
        }
 
@@ -2830,13 +3168,15 @@ OO.ui.WindowManager.prototype.addWindows = function ( windows ) {
 };
 
 /**
- * Remove windows.
+ * Remove the specified windows from the windows manager.
  *
- * Windows will be closed before they are removed.
+ * Windows will be closed before they are removed. If you wish to remove all windows, you may wish to use
+ * the #clearWindows method instead. If you no longer need the window manager and want to ensure that it no
+ * longer listens to events, use the #destroy method.
  *
  * @param {string[]} names Symbolic names of windows to remove
  * @return {jQuery.Promise} Promise resolved when window is closed and removed
- * @throws {Error} If windows being removed are not being managed
+ * @throws {Error} An error is thrown if the named windows are not managed by the window manager.
  */
 OO.ui.WindowManager.prototype.removeWindows = function ( names ) {
        var i, len, win, name, cleanupWindow,
@@ -2861,9 +3201,11 @@ OO.ui.WindowManager.prototype.removeWindows = function ( names ) {
 };
 
 /**
- * Remove all windows.
+ * Remove all windows from the window manager.
  *
- * Windows will be closed before they are removed.
+ * Windows will be closed before they are removed. Note that the window manager, though not in use, will still
+ * listen to events. If the window manager will not be used again, you may wish to use the #destroy method instead.
+ * To remove just a subset of windows, use the #removeWindows method.
  *
  * @return {jQuery.Promise} Promise resolved when all windows are closed and removed
  */
@@ -2872,7 +3214,7 @@ OO.ui.WindowManager.prototype.clearWindows = function () {
 };
 
 /**
- * Set dialog size.
+ * Set dialog size. In general, this method should not be called directly.
  *
  * Fullscreen mode will be used if the dialog is too wide to fit in the screen.
  *
@@ -2907,19 +3249,34 @@ OO.ui.WindowManager.prototype.updateWindowSize = function ( win ) {
 /**
  * Bind or unbind global events for scrolling.
  *
+ * @private
  * @param {boolean} [on] Bind global events
  * @chainable
  */
 OO.ui.WindowManager.prototype.toggleGlobalEvents = function ( on ) {
        on = on === undefined ? !!this.globalEvents : !!on;
 
+       var scrollWidth, bodyMargin,
+               $body = $( this.getElementDocument().body ),
+               // We could have multiple window managers open so only modify
+               // the body css at the bottom of the stack
+               stackDepth = $body.data( 'windowManagerGlobalEvents' ) || 0 ;
+
        if ( on ) {
                if ( !this.globalEvents ) {
                        $( this.getElementWindow() ).on( {
                                // Start listening for top-level window dimension changes
                                'orientationchange resize': this.onWindowResizeHandler
                        } );
-                       $( this.getElementDocument().body ).css( 'overflow', 'hidden' );
+                       if ( stackDepth === 0 ) {
+                               scrollWidth = window.innerWidth - document.documentElement.clientWidth;
+                               bodyMargin = parseFloat( $body.css( 'margin-right' ) ) || 0;
+                               $body.css( {
+                                       overflow: 'hidden',
+                                       'margin-right': bodyMargin + scrollWidth
+                               } );
+                       }
+                       stackDepth++;
                        this.globalEvents = true;
                }
        } else if ( this.globalEvents ) {
@@ -2927,9 +3284,16 @@ OO.ui.WindowManager.prototype.toggleGlobalEvents = function ( on ) {
                        // Stop listening for top-level window dimension changes
                        'orientationchange resize': this.onWindowResizeHandler
                } );
-               $( this.getElementDocument().body ).css( 'overflow', '' );
+               stackDepth--;
+               if ( stackDepth === 0 ) {
+                       $body.css( {
+                               overflow: '',
+                               'margin-right': ''
+                       } );
+               }
                this.globalEvents = false;
        }
+       $body.data( 'windowManagerGlobalEvents', stackDepth );
 
        return this;
 };
@@ -2937,6 +3301,7 @@ OO.ui.WindowManager.prototype.toggleGlobalEvents = function ( on ) {
 /**
  * Toggle screen reader visibility of content other than the window manager.
  *
+ * @private
  * @param {boolean} [isolate] Make only the window manager visible to screen readers
  * @chainable
  */
@@ -2961,7 +3326,11 @@ OO.ui.WindowManager.prototype.toggleAriaIsolation = function ( isolate ) {
 };
 
 /**
- * Destroy window manager.
+ * Destroy the window manager.
+ *
+ * Destroying the window manager ensures that it will no longer listen to events. If you would like to
+ * continue using the window manager, but wish to remove all windows from it, use the #clearWindows method
+ * instead.
  */
 OO.ui.WindowManager.prototype.destroy = function () {
        this.toggleGlobalEvents( false );
@@ -2979,7 +3348,13 @@ OO.ui.WindowManager.prototype.destroy = function () {
  * @cfg {boolean} [recoverable=true] Error is recoverable
  * @cfg {boolean} [warning=false] Whether this error is a warning or not.
  */
-OO.ui.Error = function OoUiElement( message, config ) {
+OO.ui.Error = function OoUiError( message, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( message ) && config === undefined ) {
+               config = message;
+               message = config.message;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -3034,19 +3409,57 @@ OO.ui.Error.prototype.getMessageText = function () {
 };
 
 /**
- * A list of functions, called in sequence.
+ * Wraps an HTML snippet for use with configuration values which default
+ * to strings.  This bypasses the default html-escaping done to string
+ * values.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {string} [content] HTML content
+ */
+OO.ui.HtmlSnippet = function OoUiHtmlSnippet( content ) {
+       // Properties
+       this.content = content;
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.HtmlSnippet );
+
+/* Methods */
+
+/**
+ * Render into HTML.
+ *
+ * @return {string} Unchanged HTML snippet.
+ */
+OO.ui.HtmlSnippet.prototype.toString = function () {
+       return this.content;
+};
+
+/**
+ * A Process is a list of steps that are called in sequence. The step can be a number, a jQuery promise,
+ * or a function:
  *
- * If a function added to a process returns boolean false the process will stop; if it returns an
- * object with a `promise` method the process will use the promise to either continue to the next
- * step when the promise is resolved or stop when the promise is rejected.
+ * - **number**: the process will wait for the specified number of milliseconds before proceeding.
+ * - **promise**: the process will continue to the next step when the promise is successfully resolved
+ *  or stop if the promise is rejected.
+ * - **function**: the process will execute the function. The process will stop if the function returns
+ *  either a boolean `false` or a promise that is rejected; if the function returns a number, the process
+ *  will wait for that number of milliseconds before proceeding.
+ *
+ * If the process fails, an {@link OO.ui.Error error} is generated. Depending on how the error is
+ * configured, users can dismiss the error and try the process again, or not. If a process is stopped,
+ * its remaining steps will not be performed.
  *
  * @class
  *
  * @constructor
- * @param {number|jQuery.Promise|Function} step Time to wait, promise to wait for or function to
- *   call, see #createStep for more information
- * @param {Object} [context=null] Context to call the step function in, ignored if step is a number
- *   or a promise
+ * @param {number|jQuery.Promise|Function} step Number of miliseconds to wait before proceeding, promise
+ *  that must be resolved before proceeding, or a function to execute. See #createStep for more information. see #createStep for more information
+ * @param {Object} [context=null] Execution context of the function. The context is ignored if the step is
+ *  a number or promise.
  * @return {Object} Step object, with `callback` and `context` properties
  */
 OO.ui.Process = function ( step, context ) {
@@ -3068,9 +3481,9 @@ OO.initClass( OO.ui.Process );
 /**
  * Start the process.
  *
- * @return {jQuery.Promise} Promise that is resolved when all steps have completed or rejected when
- *   any of the steps return boolean false or a promise which gets rejected; upon stopping the
- *   process, the remaining steps will not be taken
+ * @return {jQuery.Promise} Promise that is resolved when all steps have successfully completed.
+ *  If any of the steps return a promise that is rejected or a boolean false, this promise is rejected
+ *  and any remaining steps are not performed.
  */
 OO.ui.Process.prototype.execute = function () {
        var i, len, promise;
@@ -3105,7 +3518,7 @@ OO.ui.Process.prototype.execute = function () {
                                // Use rejected promise for error
                                return $.Deferred().reject( [ result ] ).promise();
                        }
-                       if ( $.isArray( result ) && result.length && result[ 0 ] instanceof OO.ui.Error ) {
+                       if ( Array.isArray( result ) && result.length && result[ 0 ] instanceof OO.ui.Error ) {
                                // Use rejected promise for list of errors
                                return $.Deferred().reject( result ).promise();
                        }
@@ -3138,16 +3551,16 @@ OO.ui.Process.prototype.execute = function () {
  * @private
  * @param {number|jQuery.Promise|Function} step
  *
- * - Number of milliseconds to wait; or
- * - Promise to wait to be resolved; or
+ * - Number of milliseconds to wait before proceeding
+ * - Promise that must be resolved before proceeding
  * - Function to execute
- *   - If it returns boolean false the process will stop
- *   - If it returns an object with a `promise` method the process will use the promise to either
- *     continue to the next step when the promise is resolved or stop when the promise is rejected
- *   - If it returns a number, the process will wait for that number of milliseconds before
- *     proceeding
- * @param {Object} [context=null] Context to call the step function in, ignored if step is a number
- *   or a promise
+ *   - If the function returns a boolean false the process will stop
+ *   - If the function returns a promise, the process will continue to the next
+ *     step when the promise is resolved or stop if the promise is rejected
+ *   - If the function returns a number, the process will wait for that number of
+ *     milliseconds before proceeding
+ * @param {Object} [context=null] Execution context of the function. The context is
+ *  ignored if the step is a number or promise.
  * @return {Object} Step object, with `callback` and `context` properties
  */
 OO.ui.Process.prototype.createStep = function ( step, context ) {
@@ -3275,7 +3688,7 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
                                }
                        }
                }
-       } else if ( $.isArray( collection ) ) {
+       } else if ( Array.isArray( collection ) ) {
                for ( i = 0, len = collection.length; i < len; i++ ) {
                        item = collection[ i ];
                        // Allow plain strings as shorthand for named tools
@@ -3402,20 +3815,46 @@ OO.ui.Theme.prototype.updateElementClasses = function ( element ) {
 };
 
 /**
- * Element supporting "sequential focus navigation" using the 'tabindex' attribute.
+ * The TabIndexedElement class is an attribute mixin used to add additional functionality to an
+ * element created by another class. The mixin provides a ‘tabIndex’ property, which specifies the
+ * order in which users will navigate through the focusable elements via the "tab" key.
+ *
+ *     @example
+ *     // TabIndexedElement is mixed into the ButtonWidget class
+ *     // to provide a tabIndex property.
+ *     var button1 = new OO.ui.ButtonWidget( {
+ *         label: 'fourth',
+ *         tabIndex: 4
+ *     } );
+ *     var button2 = new OO.ui.ButtonWidget( {
+ *         label: 'second',
+ *         tabIndex: 2
+ *     } );
+ *     var button3 = new OO.ui.ButtonWidget( {
+ *         label: 'third',
+ *         tabIndex: 3
+ *     } );
+ *     var button4 = new OO.ui.ButtonWidget( {
+ *         label: 'first',
+ *         tabIndex: 1
+ *     } );
+ *     $( 'body' ).append( button1.$element, button2.$element, button3.$element, button4.$element );
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$tabIndexed] tabIndexed node, assigned to #$tabIndexed, omit to use #$element
- * @cfg {number|Function} [tabIndex=0] Tab index value. Use 0 to use default ordering, use -1 to
- *  prevent tab focusing. (default: 0)
+ * @cfg {jQuery} [$tabIndexed] The element that should use the tabindex functionality. By default,
+ *  the functionality is applied to the element created by the class ($element). If a different element is specified, the tabindex
+ *  functionality will be applied to it instead.
+ * @cfg {number|null} [tabIndex=0] Number that specifies the element’s position in the tab-navigation
+ *  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 ) {
        // Configuration initialization
-       config = config || {};
+       config = $.extend( { tabIndex: 0 }, config );
 
        // Properties
        this.$tabIndexed = null;
@@ -3425,7 +3864,7 @@ OO.ui.TabIndexedElement = function OoUiTabIndexedElement( config ) {
        this.connect( this, { disable: 'onDisable' } );
 
        // Initialization
-       this.setTabIndex( config.tabIndex || 0 );
+       this.setTabIndex( config.tabIndex );
        this.setTabIndexedElement( config.$tabIndexed || this.$element );
 };
 
@@ -3436,94 +3875,98 @@ OO.initClass( OO.ui.TabIndexedElement );
 /* Methods */
 
 /**
- * Set the element with 'tabindex' attribute.
+ * Set the element that should use the tabindex functionality.
  *
- * If an element is already set, it will be cleaned up before setting up the new element.
+ * This method is used to retarget a tabindex mixin so that its functionality applies
+ * to the specified element. If an element is currently using the functionality, the mixin’s
+ * effect on that element is removed before the new element is set up.
  *
- * @param {jQuery} $tabIndexed Element to set tab index on
+ * @param {jQuery} $tabIndexed Element that should use the tabindex functionality
+ * @chainable
  */
 OO.ui.TabIndexedElement.prototype.setTabIndexedElement = function ( $tabIndexed ) {
-       if ( this.$tabIndexed ) {
-               this.$tabIndexed.removeAttr( 'tabindex aria-disabled' );
-       }
-
+       var tabIndex = this.tabIndex;
+       // Remove attributes from old $tabIndexed
+       this.setTabIndex( null );
+       // Force update of new $tabIndexed
        this.$tabIndexed = $tabIndexed;
-       if ( this.tabIndex !== null ) {
-               this.$tabIndexed.attr( {
-                       // Do not index over disabled elements
-                       tabindex: this.isDisabled() ? -1 : this.tabIndex,
-                       // ChromeVox and NVDA do not seem to inherit this from parent elements
-                       'aria-disabled': this.isDisabled().toString()
-               } );
-       }
+       this.tabIndex = tabIndex;
+       return this.updateTabIndex();
 };
 
 /**
- * Set tab index value.
+ * Set the value of the tabindex.
  *
- * @param {number|null} tabIndex Tab index value or null for no tabIndex
+ * @param {number|null} tabIndex Tabindex value, or `null` for no tabindex
  * @chainable
  */
 OO.ui.TabIndexedElement.prototype.setTabIndex = function ( tabIndex ) {
        tabIndex = typeof tabIndex === 'number' ? tabIndex : null;
 
        if ( this.tabIndex !== tabIndex ) {
-               if ( this.$tabIndexed ) {
-                       if ( tabIndex !== null ) {
-                               this.$tabIndexed.attr( {
-                                       // Do not index over disabled elements
-                                       tabindex: this.isDisabled() ? -1 : tabIndex,
-                                       // ChromeVox and NVDA do not seem to inherit this from parent elements
-                                       'aria-disabled': this.isDisabled().toString()
-                               } );
-                       } else {
-                               this.$tabIndexed.removeAttr( 'tabindex aria-disabled' );
-                       }
-               }
                this.tabIndex = tabIndex;
+               this.updateTabIndex();
        }
 
        return this;
 };
 
 /**
- * Handle disable events.
+ * Update the `tabindex` attribute, in case of changes to tab index or
+ * disabled state.
  *
- * @param {boolean} disabled Element is disabled
+ * @private
+ * @chainable
  */
-OO.ui.TabIndexedElement.prototype.onDisable = function ( disabled ) {
-       if ( this.$tabIndexed && this.tabIndex !== null ) {
-               this.$tabIndexed.attr( {
+OO.ui.TabIndexedElement.prototype.updateTabIndex = function () {
+       if ( this.$tabIndexed ) {
+               if ( this.tabIndex !== null ) {
                        // Do not index over disabled elements
-                       tabindex: disabled ? -1 : this.tabIndex,
-                       // ChromeVox and NVDA do not seem to inherit this from parent elements
-                       'aria-disabled': disabled.toString()
-               } );
+                       this.$tabIndexed.attr( {
+                               tabindex: this.isDisabled() ? -1 : this.tabIndex,
+                               // ChromeVox and NVDA do not seem to inherit this from parent elements
+                               'aria-disabled': this.isDisabled().toString()
+                       } );
+               } else {
+                       this.$tabIndexed.removeAttr( 'tabindex aria-disabled' );
+               }
        }
+       return this;
+};
+
+/**
+ * Handle disable events.
+ *
+ * @private
+ * @param {boolean} disabled Element is disabled
+ */
+OO.ui.TabIndexedElement.prototype.onDisable = function () {
+       this.updateTabIndex();
 };
 
 /**
- * Get tab index value.
+ * Get the value of the tabindex.
  *
- * @return {number} Tab index value
+ * @return {number|null} Tabindex value
  */
 OO.ui.TabIndexedElement.prototype.getTabIndex = function () {
        return this.tabIndex;
 };
 
 /**
- * Element with a button.
- *
- * Buttons are used for controls which can be clicked. They can be configured to use tab indexing
- * and access keys for accessibility purposes.
+ * ButtonElement is often mixed into other classes to generate a button, which is a clickable
+ * interface element that can be configured with access keys for accessibility.
+ * See the [OOjs UI documentation on MediaWiki] [1] for examples.
  *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Buttons
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$button] Button node, assigned to #$button, omit to use a generated `<a>`
- * @cfg {boolean} [framed=true] Render button with a frame
+ * @cfg {jQuery} [$button] The button element created by the class.
+ *  If this configuration is omitted, the button element will use a generated `<a>`.
+ * @cfg {boolean} [framed=true] Render the button with a frame
  * @cfg {string} [accessKey] Button's access key
  */
 OO.ui.ButtonElement = function OoUiButtonElement( config ) {
@@ -3531,7 +3974,7 @@ OO.ui.ButtonElement = function OoUiButtonElement( config ) {
        config = config || {};
 
        // Properties
-       this.$button = config.$button || $( '<a>' );
+       this.$button = null;
        this.framed = null;
        this.accessKey = null;
        this.active = false;
@@ -3546,7 +3989,7 @@ OO.ui.ButtonElement = function OoUiButtonElement( config ) {
        this.$element.addClass( 'oo-ui-buttonElement' );
        this.toggleFramed( config.framed === undefined || config.framed );
        this.setAccessKey( config.accessKey );
-       this.setButtonElement( this.$button );
+       this.setButtonElement( config.$button || $( '<a>' ) );
 };
 
 /* Setup */
@@ -3558,6 +4001,11 @@ 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}
+ * use a value of `false` so that dragging behavior is possible and mousedown events can be handled by a
+ * parent widget.
+ *
  * @static
  * @inheritable
  * @property {boolean}
@@ -3567,6 +4015,8 @@ OO.ui.ButtonElement.static.cancelButtonMouseDownEvents = true;
 /* Events */
 
 /**
+ * A 'click' event is emitted when the button element is clicked.
+ *
  * @event click
  */
 
@@ -3575,7 +4025,9 @@ OO.ui.ButtonElement.static.cancelButtonMouseDownEvents = true;
 /**
  * Set the button element.
  *
- * If an element is already set, it will be cleaned up before setting up the new element.
+ * This method is used to retarget a button mixin so that its functionality applies to
+ * the specified button element instead of the one created by the class. If a button element
+ * is already set, the method will remove the mixin’s effect on that element.
  *
  * @param {jQuery} $button Element to use as button
  */
@@ -3606,6 +4058,7 @@ OO.ui.ButtonElement.prototype.setButtonElement = function ( $button ) {
 /**
  * Handles mouse down events.
  *
+ * @protected
  * @param {jQuery.Event} e Mouse down event
  */
 OO.ui.ButtonElement.prototype.onMouseDown = function ( e ) {
@@ -3625,6 +4078,7 @@ OO.ui.ButtonElement.prototype.onMouseDown = function ( e ) {
 /**
  * Handles mouse up events.
  *
+ * @protected
  * @param {jQuery.Event} e Mouse up event
  */
 OO.ui.ButtonElement.prototype.onMouseUp = function ( e ) {
@@ -3639,6 +4093,7 @@ OO.ui.ButtonElement.prototype.onMouseUp = function ( e ) {
 /**
  * Handles mouse click events.
  *
+ * @protected
  * @param {jQuery.Event} e Mouse click event
  * @fires click
  */
@@ -3652,6 +4107,7 @@ OO.ui.ButtonElement.prototype.onClick = function ( e ) {
 /**
  * Handles key down events.
  *
+ * @protected
  * @param {jQuery.Event} e Key down event
  */
 OO.ui.ButtonElement.prototype.onKeyDown = function ( e ) {
@@ -3667,6 +4123,7 @@ OO.ui.ButtonElement.prototype.onKeyDown = function ( e ) {
 /**
  * Handles key up events.
  *
+ * @protected
  * @param {jQuery.Event} e Key up event
  */
 OO.ui.ButtonElement.prototype.onKeyUp = function ( e ) {
@@ -3681,14 +4138,15 @@ OO.ui.ButtonElement.prototype.onKeyUp = function ( e ) {
 /**
  * Handles key press events.
  *
+ * @protected
  * @param {jQuery.Event} e Key press event
  * @fires click
  */
 OO.ui.ButtonElement.prototype.onKeyPress = function ( e ) {
        if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
                this.emit( 'click' );
+               return false;
        }
-       return false;
 };
 
 /**
@@ -3701,7 +4159,7 @@ OO.ui.ButtonElement.prototype.isFramed = function () {
 };
 
 /**
- * Toggle frame.
+ * Render the button with or without a frame. Omit the `framed` parameter to toggle the button frame on and off.
  *
  * @param {boolean} [framed] Make button framed, omit to toggle
  * @chainable
@@ -3720,7 +4178,7 @@ OO.ui.ButtonElement.prototype.toggleFramed = function ( framed ) {
 };
 
 /**
- * Set access key.
+ * Set the button's access key.
  *
  * @param {string} accessKey Button's access key, use empty string to remove
  * @chainable
@@ -3743,7 +4201,11 @@ OO.ui.ButtonElement.prototype.setAccessKey = function ( accessKey ) {
 };
 
 /**
- * Set active state.
+ * Set the button to its 'active' state.
+ *
+ * The active state occurs when a {@link OO.ui.ButtonOptionWidget ButtonOptionWidget} or
+ * a {@link OO.ui.ToggleButtonWidget ToggleButtonWidget} is pressed. This method does nothing
+ * for other button types.
  *
  * @param {boolean} [value] Make button active
  * @chainable
@@ -3754,14 +4216,20 @@ OO.ui.ButtonElement.prototype.setActive = function ( value ) {
 };
 
 /**
- * Element containing a sequence of child elements.
+ * Any OOjs UI widget that contains other widgets (such as {@link OO.ui.ButtonWidget buttons} or
+ * {@link OO.ui.OptionWidget options}) mixes in GroupElement. Adding, removing, and clearing
+ * items from the group is done through the interface the class provides.
+ * For more information, please see the [OOjs UI documentation on MediaWiki] [1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Groups
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$group] Container node, assigned to #$group, omit to use a generated `<div>`
+ * @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 ) {
        // Configuration initialization
@@ -3795,7 +4263,7 @@ OO.ui.GroupElement.prototype.setGroupElement = function ( $group ) {
 };
 
 /**
- * Check if there are no items.
+ * Check if a group contains no items.
  *
  * @return {boolean} Group is empty
  */
@@ -3804,9 +4272,13 @@ OO.ui.GroupElement.prototype.isEmpty = function () {
 };
 
 /**
- * Get items.
+ * Get all items in the group.
  *
- * @return {OO.ui.Element[]} Items
+ * The method returns an array of item references (e.g., [button1, button2, button3]) and is useful
+ * when synchronizing groups of items, or whenever the references are required (e.g., when removing items
+ * from a group).
+ *
+ * @return {OO.ui.Element[]} An array of items.
  */
 OO.ui.GroupElement.prototype.getItems = function () {
        return this.items.slice( 0 );
@@ -3815,7 +4287,8 @@ OO.ui.GroupElement.prototype.getItems = function () {
 /**
  * Get an item by its data.
  *
- * Data is compared by a hash of its value. Only the first item with matching data will be returned.
+ * Only the first item with matching data will be returned. To return all matching items,
+ * use the #getItemsFromData method.
  *
  * @param {Object} data Item data to search for
  * @return {OO.ui.Element|null} Item with equivalent data, `null` if none exists
@@ -3837,7 +4310,7 @@ OO.ui.GroupElement.prototype.getItemFromData = function ( data ) {
 /**
  * Get items by their data.
  *
- * Data is compared by a hash of its value. All items with matching data will be returned.
+ * All items with matching data will be returned. To return only the first match, use the #getItemFromData method instead.
  *
  * @param {Object} data Item data to search for
  * @return {OO.ui.Element[]} Items with equivalent data
@@ -3858,15 +4331,18 @@ OO.ui.GroupElement.prototype.getItemsFromData = function ( data ) {
 };
 
 /**
- * Add an aggregate item event.
+ * Aggregate the events emitted by the group.
  *
- * Aggregated events are listened to on each item and then emitted by the group under a new name,
- * and with an additional leading parameter containing the item that emitted the original event.
- * Other arguments that were emitted from the original event are passed through.
+ * When events are aggregated, the group will listen to all contained items for the event,
+ * and then emit the event under a new name. The new event will contain an additional leading
+ * parameter containing the item that emitted the original event. Other arguments emitted from
+ * the original event are passed through.
  *
- * @param {Object.<string,string|null>} events Aggregate events emitted by group, keyed by item
- *   event, use null value to remove aggregation
- * @throws {Error} If aggregation already exists
+ * @param {Object.<string,string|null>} events An object keyed by the name of the event that should be
+ *  aggregated  (e.g., ‘click’) and the value of the new name to use (e.g., ‘groupClick’).
+ *  A `null` value will remove aggregated events.
+
+ * @throws {Error} An error is thrown if aggregation already exists.
  */
 OO.ui.GroupElement.prototype.aggregate = function ( events ) {
        var i, len, item, add, remove, itemEvent, groupEvent;
@@ -3911,12 +4387,13 @@ OO.ui.GroupElement.prototype.aggregate = function ( events ) {
 };
 
 /**
- * Add items.
+ * Add items to the group.
  *
- * Adding an existing item will move it.
+ * Items will be added to the end of the group array unless the optional `index` parameter specifies
+ * a different insertion point. Adding an existing item will move it to the end of the array or the point specified by the `index`.
  *
- * @param {OO.ui.Element[]} items Items
- * @param {number} [index] Index to insert items at
+ * @param {OO.ui.Element[]} items An array of items to add to the group
+ * @param {number} [index] Index of the insertion point
  * @chainable
  */
 OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
@@ -3962,11 +4439,12 @@ OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
 };
 
 /**
- * Remove items.
+ * Remove the specified items from a group.
  *
- * Items will be detached, not removed, so they can be used later.
+ * Removed items are detached (not removed) from the DOM so that they may be reused.
+ * To remove all items from a group, you may wish to use the #clearItems method instead.
  *
- * @param {OO.ui.Element[]} items Items to remove
+ * @param {OO.ui.Element[]} items An array of items to remove
  * @chainable
  */
 OO.ui.GroupElement.prototype.removeItems = function ( items ) {
@@ -3997,9 +4475,10 @@ OO.ui.GroupElement.prototype.removeItems = function ( items ) {
 };
 
 /**
- * Clear all items.
+ * Clear all items from the group.
  *
- * Items will be detached, not removed, so they can be used later.
+ * Cleared items are detached from the DOM, not removed, so that they may be reused.
+ * To remove only a subset of items from a group, use the #removeItems method.
  *
  * @chainable
  */
@@ -4028,8 +4507,10 @@ OO.ui.GroupElement.prototype.clearItems = function () {
 };
 
 /**
- * A mixin for an element that can be dragged and dropped.
- * Use in conjunction with DragGroupWidget
+ * 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
+ * the draggable elements.
  *
  * @abstract
  * @class
@@ -4058,15 +4539,21 @@ OO.initClass( OO.ui.DraggableElement );
 
 /**
  * @event dragstart
- * @param {OO.ui.DraggableElement} item Dragging item
+ *
+ * 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.
  */
 
 /**
  * @event dragend
+ * A dragend event is emitted when the user drags an item and releases the mouse,
+ * thus terminating the drag operation.
  */
 
 /**
  * @event drop
+ * A drop event is emitted when the user drags an item and then releases the mouse button
+ * over a valid target.
  */
 
 /* Static Properties */
@@ -4080,6 +4567,8 @@ OO.ui.DraggableElement.static.cancelButtonMouseDownEvents = false;
 
 /**
  * Respond to dragstart event.
+ *
+ * @private
  * @param {jQuery.Event} event jQuery event
  * @fires dragstart
  */
@@ -4105,7 +4594,9 @@ OO.ui.DraggableElement.prototype.onDragStart = function ( e ) {
 
 /**
  * Respond to dragend event.
- * @fires dragend
+ *
+ * @private
+ * @fires dragend
  */
 OO.ui.DraggableElement.prototype.onDragEnd = function () {
        this.$element.removeClass( 'oo-ui-draggableElement-dragging' );
@@ -4114,6 +4605,8 @@ OO.ui.DraggableElement.prototype.onDragEnd = function () {
 
 /**
  * Handle drop event.
+ *
+ * @private
  * @param {jQuery.Event} event jQuery event
  * @fires drop
  */
@@ -4125,6 +4618,8 @@ OO.ui.DraggableElement.prototype.onDrop = function ( e ) {
 /**
  * In order for drag/drop to work, the dragover event must
  * return false and stop propogation.
+ *
+ * @private
  */
 OO.ui.DraggableElement.prototype.onDragOver = function ( e ) {
        e.preventDefault();
@@ -4133,6 +4628,8 @@ OO.ui.DraggableElement.prototype.onDragOver = function ( e ) {
 /**
  * Set item index.
  * Store it in the DOM so we can access from the widget drag event
+ *
+ * @private
  * @param {number} Item index
  */
 OO.ui.DraggableElement.prototype.setIndex = function ( index ) {
@@ -4144,6 +4641,8 @@ OO.ui.DraggableElement.prototype.setIndex = function ( index ) {
 
 /**
  * Get item index
+ *
+ * @private
  * @return {number} Item index
  */
 OO.ui.DraggableElement.prototype.getIndex = function () {
@@ -4151,16 +4650,20 @@ OO.ui.DraggableElement.prototype.getIndex = function () {
 };
 
 /**
- * Element containing a sequence of child elements that can be dragged
- * and dropped.
+ * 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.
  *
  * @abstract
  * @class
+ * @mixins OO.ui.GroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$group] Container node, assigned to #$group, omit to use a generated `<div>`
- * @cfg {string} [orientation] Item orientation, 'horizontal' or 'vertical'. Defaults to 'vertical'
+ * @cfg {string} [orientation] Item orientation: 'horizontal' or 'vertical'. The orientation
+ *  should match the layout of the items. Items displayed in a single row
+ *  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 ) {
        // Configuration initialization
@@ -4193,7 +4696,7 @@ OO.ui.DraggableGroupElement = function OoUiDraggableGroupElement( config ) {
        } );
 
        // Initialize
-       if ( $.isArray( config.items ) ) {
+       if ( Array.isArray( config.items ) ) {
                this.addItems( config.items );
        }
        this.$placeholder = $( '<div>' )
@@ -4211,6 +4714,8 @@ OO.mixinClass( OO.ui.DraggableGroupElement, OO.ui.GroupElement );
 /* Events */
 
 /**
+ * A 'reorder' event is emitted when the order of items in the group changes.
+ *
  * @event reorder
  * @param {OO.ui.DraggableElement} item Reordered item
  * @param {number} [newIndex] New index for the item
@@ -4220,6 +4725,8 @@ OO.mixinClass( OO.ui.DraggableGroupElement, OO.ui.GroupElement );
 
 /**
  * Respond to item drag start event
+ *
+ * @private
  * @param {OO.ui.DraggableElement} item Dragged item
  */
 OO.ui.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {
@@ -4248,6 +4755,8 @@ OO.ui.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {
 
 /**
  * Respond to item drag end event
+ *
+ * @private
  */
 OO.ui.DraggableGroupElement.prototype.onItemDragEnd = function () {
        this.unsetDragItem();
@@ -4256,6 +4765,8 @@ 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
  * @fires reorder
  */
@@ -4280,6 +4791,8 @@ OO.ui.DraggableGroupElement.prototype.onItemDrop = function ( item ) {
 
 /**
  * Handle dragleave event.
+ *
+ * @private
  */
 OO.ui.DraggableGroupElement.prototype.onDragLeave = function () {
        // This means the item was dragged outside the widget
@@ -4290,6 +4803,8 @@ OO.ui.DraggableGroupElement.prototype.onDragLeave = function () {
 
 /**
  * Respond to dragover event
+ *
+ * @private
  * @param {jQuery.Event} event Event details
  */
 OO.ui.DraggableGroupElement.prototype.onDragOver = function ( e ) {
@@ -4361,6 +4876,7 @@ OO.ui.DraggableGroupElement.prototype.onDragOver = function ( e ) {
 
 /**
  * Set a dragged item
+ *
  * @param {OO.ui.DraggableElement} item Dragged item
  */
 OO.ui.DraggableGroupElement.prototype.setDragItem = function ( item ) {
@@ -4378,15 +4894,17 @@ OO.ui.DraggableGroupElement.prototype.unsetDragItem = function () {
 };
 
 /**
- * Get the current dragged item
- * @return {OO.ui.DraggableElement|null} item Dragged item or null if no item is dragged
+ * 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
  */
 OO.ui.DraggableGroupElement.prototype.getDragItem = function () {
        return this.dragItem;
 };
 
 /**
- * Check if there's an item being dragged.
+ * Check if an item in the group is currently being dragged.
+ *
  * @return {Boolean} Item is being dragged
  */
 OO.ui.DraggableGroupElement.prototype.isDragging = function () {
@@ -4394,23 +4912,42 @@ OO.ui.DraggableGroupElement.prototype.isDragging = function () {
 };
 
 /**
- * Element containing an icon.
+ * IconElement is often mixed into other classes to generate an icon.
+ * Icons are graphics, about the size of normal text. They are used to aid the user
+ * in locating a control or to convey information in a space-efficient way. See the
+ * [OOjs UI documentation on MediaWiki] [1] for a list of icons
+ * included in the library.
  *
- * Icons are graphics, about the size of normal text. They can be used to aid the user in locating
- * a control or convey information in a more space efficient way. Icons should rarely be used
- * without labels; such as in a toolbar where space is at a premium or within a context where the
- * meaning is very clear to the user.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$icon] Icon node, assigned to #$icon, omit to use a generated `<span>`
- * @cfg {Object|string} [icon=''] Symbolic icon name, or map of icon names keyed by language ID;
- *  use the 'default' key to specify the icon to be used when there is no icon in the user's
- *  language
- * @cfg {string} [iconTitle] Icon title text or a function that returns text
+ * @cfg {jQuery} [$icon] The icon element created by the class. If this configuration is omitted,
+ *  the icon element will use a generated `<span>`. To use a different HTML tag, or to specify that
+ *  the icon element be set to an existing icon instead of the one generated by this class, set a
+ *  value using a jQuery selection. For example:
+ *
+ *      // Use a <div> tag instead of a <span>
+ *     $icon: $("<div>")
+ *     // Use an existing icon element instead of the one generated by the class
+ *     $icon: this.$element
+ *     // Use an icon element from a child widget
+ *     $icon: this.childwidget.$element
+ * @cfg {Object|string} [icon=''] The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of
+ *  symbolic names.  A map is used for i18n purposes and contains a `default` icon
+ *  name and additional names keyed by language code. The `default` name is used when no icon is keyed
+ *  by the user's language.
+ *
+ *  Example of an i18n map:
+ *
+ *     { default: 'bold-a', en: 'bold-b', de: 'bold-f' }
+ *  See the [OOjs UI documentation on MediaWiki] [2] for a list of icons included in the library.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
+ * @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 ) {
        // Configuration initialization
@@ -4434,40 +4971,41 @@ OO.initClass( OO.ui.IconElement );
 /* Static Properties */
 
 /**
- * Icon.
+ * The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of symbolic names. A map is used
+ * for i18n purposes and contains a `default` icon name and additional names keyed by
+ * language code. The `default` name is used when no icon is keyed by the user's language.
  *
- * Value should be the unique portion of an icon CSS class name, such as 'up' for 'oo-ui-icon-up'.
+ * Example of an i18n map:
  *
- * For i18n purposes, this property can be an object containing a `default` icon name property and
- * additional icon names keyed by language code.
- *
- * Example of i18n icon definition:
  *     { default: 'bold-a', en: 'bold-b', de: 'bold-f' }
  *
+ * Note: the static property will be overridden if the #icon configuration is used.
+ *
  * @static
  * @inheritable
- * @property {Object|string} Symbolic icon name, or map of icon names keyed by language ID;
- *  use the 'default' key to specify the icon to be used when there is no icon in the user's
- *  language
+ * @property {Object|string}
  */
 OO.ui.IconElement.static.icon = null;
 
 /**
- * Icon title.
+ * The icon title, displayed when users move the mouse over the icon. The value can be text, a
+ * function that returns title text, or `null` for no title.
+ *
+ * The static property will be overridden if the #iconTitle configuration is used.
  *
  * @static
  * @inheritable
- * @property {string|Function|null} Icon title text, a function that returns text or null for no
- *  icon title
+ * @property {string|Function|null}
  */
 OO.ui.IconElement.static.iconTitle = null;
 
 /* Methods */
 
 /**
- * Set the icon element.
- *
- * If an element is already set, it will be cleaned up before setting up the new element.
+ * Set the icon element. This method is used to retarget an icon mixin so that its functionality
+ * applies to the specified icon element instead of the one created by the class. If an icon
+ * element is already set, the mixin’s effect on that element is removed. Generated CSS classes
+ * and mixin methods will no longer affect the element.
  *
  * @param {jQuery} $icon Element to use as icon
  */
@@ -4487,11 +5025,12 @@ OO.ui.IconElement.prototype.setIconElement = function ( $icon ) {
 };
 
 /**
- * Set icon name.
+ * Set icon by symbolic name (e.g., ‘remove’ or ‘menu’). Use `null` to remove an icon.
+ * The icon parameter can also be set to a map of icon names. See the #icon config setting
+ * for an example.
  *
- * @param {Object|string|null} icon Symbolic icon name, or map of icon names keyed by language ID;
- *  use the 'default' key to specify the icon to be used when there is no icon in the user's
- *  language, use null to remove icon
+ * @param {Object|string|null} icon A symbolic icon name, a {@link #icon map of icon names} keyed
+ *  by language code, or `null` to remove the icon.
  * @chainable
  */
 OO.ui.IconElement.prototype.setIcon = function ( icon ) {
@@ -4517,10 +5056,10 @@ OO.ui.IconElement.prototype.setIcon = function ( icon ) {
 };
 
 /**
- * Set icon title.
+ * Set the icon title. Use `null` to remove the title.
  *
- * @param {string|Function|null} icon Icon title text, a function that returns text or null
- *  for no icon title
+ * @param {string|Function|null} iconTitle A text string used as the icon title,
+ *  a function that returns title text, or `null` for no title.
  * @chainable
  */
 OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
@@ -4543,7 +5082,7 @@ OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
 };
 
 /**
- * Get icon name.
+ * Get the symbolic name of the icon.
  *
  * @return {string} Icon name
  */
@@ -4552,7 +5091,7 @@ OO.ui.IconElement.prototype.getIcon = function () {
 };
 
 /**
- * Get icon title.
+ * Get the icon title. The title text is displayed when a user moves the mouse over the icon.
  *
  * @return {string} Icon title text
  */
@@ -4561,22 +5100,33 @@ OO.ui.IconElement.prototype.getIconTitle = function () {
 };
 
 /**
- * Element containing an indicator.
+ * IndicatorElement is often mixed into other classes to generate an indicator.
+ * Indicators are small graphics that are generally used in two ways:
+ *
+ * - To draw attention to the status of an item. For example, an indicator might be
+ *   used to show that an item in a list has errors that need to be resolved.
+ * - To clarify the function of a control that acts in an exceptional way (a button
+ *   that opens a menu instead of performing an action directly, for example).
  *
- * Indicators are graphics, smaller than normal text. They can be used to describe unique status or
- * behavior. Indicators should only be used in exceptional cases; such as a button that opens a menu
- * instead of performing an action directly, or an item in a list which has errors that need to be
- * resolved.
+ * For a list of indicators included in the library, please see the
+ * [OOjs UI documentation on MediaWiki] [1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$indicator] Indicator node, assigned to #$indicator, omit to use a generated
- *   `<span>`
- * @cfg {string} [indicator] Symbolic indicator name
- * @cfg {string} [indicatorTitle] Indicator title text or a function that returns text
+ * @cfg {jQuery} [$indicator] The indicator element created by the class. If this
+ *  configuration is omitted, the indicator element will use a generated `<span>`.
+ * @cfg {string} [indicator] Symbolic name of the indicator (e.g., ‘alert’ or  ‘down’).
+ *  See the [OOjs UI documentation on MediaWiki][2] for a list of indicators included
+ *  in the library.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators
+ * @cfg {string|Function} [indicatorTitle] A text string used as the indicator title,
+ *  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 ) {
        // Configuration initialization
@@ -4600,21 +5150,22 @@ OO.initClass( OO.ui.IndicatorElement );
 /* Static Properties */
 
 /**
- * indicator.
+ * Symbolic name of the indicator (e.g., ‘alert’ or  ‘down’).
+ * The static property will be overridden if the #indicator configuration is used.
  *
  * @static
  * @inheritable
- * @property {string|null} Symbolic indicator name
+ * @property {string|null}
  */
 OO.ui.IndicatorElement.static.indicator = null;
 
 /**
- * Indicator title.
+ * A text string used as the indicator title, a function that returns title text, or `null`
+ * for no title. The static property will be overridden if the #indicatorTitle configuration is used.
  *
  * @static
  * @inheritable
- * @property {string|Function|null} Indicator title text, a function that returns text or null for no
- *  indicator title
+ * @property {string|Function|null}
  */
 OO.ui.IndicatorElement.static.indicatorTitle = null;
 
@@ -4643,9 +5194,9 @@ OO.ui.IndicatorElement.prototype.setIndicatorElement = function ( $indicator ) {
 };
 
 /**
- * Set indicator name.
+ * Set the indicator by its symbolic name: ‘alert’, ‘down’, ‘next’, ‘previous’, ‘required’, ‘up’. Use `null` to remove the indicator.
  *
- * @param {string|null} indicator Symbolic name of indicator to use or null for no indicator
+ * @param {string|null} indicator Symbolic name of indicator, or `null` for no indicator
  * @chainable
  */
 OO.ui.IndicatorElement.prototype.setIndicator = function ( indicator ) {
@@ -4670,10 +5221,12 @@ OO.ui.IndicatorElement.prototype.setIndicator = function ( indicator ) {
 };
 
 /**
- * Set indicator title.
+ * Set the indicator title.
+ *
+ * The title is displayed when a user moves the mouse over the indicator.
  *
- * @param {string|Function|null} indicator Indicator title text, a function that returns text or
- *   null for no indicator title
+ * @param {string|Function|null} indicator Indicator title text, a function that returns text, or
+ *   `null` for no indicator title
  * @chainable
  */
 OO.ui.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {
@@ -4696,7 +5249,7 @@ OO.ui.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle )
 };
 
 /**
- * Get indicator name.
+ * Get the symbolic name of the indicator (e.g., ‘alert’ or  ‘down’).
  *
  * @return {string} Symbolic name of indicator
  */
@@ -4705,7 +5258,9 @@ OO.ui.IndicatorElement.prototype.getIndicator = function () {
 };
 
 /**
- * Get indicator title.
+ * Get the indicator title.
+ *
+ * The title is displayed when a user moves the mouse over the indicator.
  *
  * @return {string} Indicator title text
  */
@@ -4714,16 +5269,25 @@ OO.ui.IndicatorElement.prototype.getIndicatorTitle = function () {
 };
 
 /**
- * Element containing a label.
+ * LabelElement is often mixed into other classes to generate a label, which
+ * helps identify the function of an interface element.
+ * See the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$label] Label node, assigned to #$label, omit to use a generated `<span>`
- * @cfg {jQuery|string|Function} [label] Label nodes, text or a function that returns nodes or text
- * @cfg {boolean} [autoFitLabel=true] Whether to fit the label or not.
+ * @cfg {jQuery} [$label] The label element created by the class. If this
+ *  configuration is omitted, the label element will use a generated `<span>`.
+ * @cfg {jQuery|string|Function} [label] The label text. The label can be specified as a plaintext string,
+ *  a jQuery selection of elements, or a function that will produce a string in the future. See the
+ *  [OOjs UI documentation on MediaWiki] [2] for examples.
+ *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels
+ * @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 ) {
        // Configuration initialization
@@ -4753,12 +5317,13 @@ OO.initClass( OO.ui.LabelElement );
 /* Static Properties */
 
 /**
- * Label.
+ * The label text. The label can be specified as a plaintext string, a function that will
+ * produce a string in the future, or `null` for no label. The static value will
+ * be overridden if a label is specified with the #label config option.
  *
  * @static
  * @inheritable
- * @property {string|Function|null} Label text; a function that returns nodes or text; or null for
- *  no label
+ * @property {string|Function|null}
  */
 OO.ui.LabelElement.static.label = null;
 
@@ -4786,13 +5351,13 @@ OO.ui.LabelElement.prototype.setLabelElement = function ( $label ) {
  * An empty string will result in the label being hidden. A string containing only whitespace will
  * be converted to a single `&nbsp;`.
  *
- * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ * @param {jQuery|string|OO.ui.HtmlSnippet|Function|null} label Label nodes; text; a function that returns nodes or
  *  text; or null for no label
  * @chainable
  */
 OO.ui.LabelElement.prototype.setLabel = function ( label ) {
        label = typeof label === 'function' ? OO.ui.resolveMsg( label ) : label;
-       label = ( typeof label === 'string' && label.length ) || label instanceof jQuery ? label : null;
+       label = ( ( typeof label === 'string' && label.length ) || label instanceof jQuery || label instanceof OO.ui.HtmlSnippet ) ? label : null;
 
        this.$element.toggleClass( 'oo-ui-labelElement', !!label );
 
@@ -4847,6 +5412,8 @@ OO.ui.LabelElement.prototype.setLabelContent = function ( label ) {
                } else {
                        this.$label.text( label );
                }
+       } else if ( label instanceof OO.ui.HtmlSnippet ) {
+               this.$label.html( label.toString() );
        } else if ( label instanceof jQuery ) {
                this.$label.empty().append( label );
        } else {
@@ -4855,19 +5422,28 @@ OO.ui.LabelElement.prototype.setLabelContent = function ( label ) {
 };
 
 /**
- * Mixin that adds a menu showing suggested values for a OO.ui.TextInputWidget.
+ * LookupElement is a mixin that creates a {@link OO.ui.TextInputMenuSelectWidget menu} of suggested values for
+ * a {@link OO.ui.TextInputWidget text input widget}. Suggested values are based on the characters the user types
+ * into the text input field and, in general, the menu is only displayed when the user types. If a suggested value is chosen
+ * from the lookup menu, that value becomes the value of the input field.
+ *
+ * Note that a new menu of suggested items is displayed when a value is chosen from the lookup menu. If this is
+ * not the desired behavior, disable lookup menus with the #setLookupsDisabled method, then set the value, then
+ * re-enable lookups.
  *
- * Subclasses that set the value of #lookupInput from #onLookupMenuItemChoose should
- * be aware that this will cause new suggestions to be looked up for the new value. If this is
- * not desired, disable lookups with #setLookupsDisabled, then set the value, then re-enable lookups.
+ * See the [OOjs UI demos][1] for an example.
+ *
+ * [1]: https://tools.wmflabs.org/oojs-ui/oojs-ui/demos/index.html#widgets-apex-vector-ltr
  *
  * @class
  * @abstract
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$overlay] Overlay for dropdown; defaults to relative positioning
- * @cfg {jQuery} [$container=this.$element] Element to render menu under
+ * @cfg {jQuery} [$overlay] Overlay for the lookup menu; defaults to relative positioning
+ * @cfg {jQuery} [$container=this.$element] The container element. The lookup menu is rendered beneath the specified element.
+ * @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 ) {
        // Configuration initialization
@@ -4876,8 +5452,13 @@ OO.ui.LookupElement = function OoUiLookupElement( config ) {
        // Properties
        this.$overlay = config.$overlay || this.$element;
        this.lookupMenu = new OO.ui.TextInputMenuSelectWidget( this, {
+               widget: this,
+               input: this,
                $container: config.$container
        } );
+
+       this.allowSuggestionsWhenEmpty = config.allowSuggestionsWhenEmpty || false;
+
        this.lookupCache = {};
        this.lookupQuery = null;
        this.lookupRequest = null;
@@ -4907,6 +5488,7 @@ OO.ui.LookupElement = function OoUiLookupElement( config ) {
 /**
  * Handle input focus event.
  *
+ * @protected
  * @param {jQuery.Event} e Input focus event
  */
 OO.ui.LookupElement.prototype.onLookupInputFocus = function () {
@@ -4917,6 +5499,7 @@ OO.ui.LookupElement.prototype.onLookupInputFocus = function () {
 /**
  * Handle input blur event.
  *
+ * @protected
  * @param {jQuery.Event} e Input blur event
  */
 OO.ui.LookupElement.prototype.onLookupInputBlur = function () {
@@ -4927,6 +5510,7 @@ OO.ui.LookupElement.prototype.onLookupInputBlur = function () {
 /**
  * Handle input mouse down event.
  *
+ * @protected
  * @param {jQuery.Event} e Input mouse down event
  */
 OO.ui.LookupElement.prototype.onLookupInputMouseDown = function () {
@@ -4942,6 +5526,7 @@ OO.ui.LookupElement.prototype.onLookupInputMouseDown = function () {
 /**
  * Handle input change event.
  *
+ * @protected
  * @param {string} value New input value
  */
 OO.ui.LookupElement.prototype.onLookupInputChange = function () {
@@ -4953,6 +5538,7 @@ OO.ui.LookupElement.prototype.onLookupInputChange = function () {
 /**
  * Handle the lookup menu being shown/hidden.
  *
+ * @protected
  * @param {boolean} visible Whether the lookup menu is now visible.
  */
 OO.ui.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {
@@ -4968,17 +5554,17 @@ OO.ui.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {
 /**
  * Handle menu item 'choose' event, updating the text input value to the value of the clicked item.
  *
- * @param {OO.ui.MenuOptionWidget|null} item Selected item
+ * @protected
+ * @param {OO.ui.MenuOptionWidget} item Selected item
  */
 OO.ui.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {
-       if ( item ) {
-               this.setValue( item.getData() );
-       }
+       this.setValue( item.getData() );
 };
 
 /**
  * Get lookup menu.
  *
+ * @private
  * @return {OO.ui.TextInputMenuSelectWidget}
  */
 OO.ui.LookupElement.prototype.getLookupMenu = function () {
@@ -4999,6 +5585,7 @@ OO.ui.LookupElement.prototype.setLookupsDisabled = function ( disabled ) {
 /**
  * Open the menu. If there are no entries in the menu, this does nothing.
  *
+ * @private
  * @chainable
  */
 OO.ui.LookupElement.prototype.openLookupMenu = function () {
@@ -5011,6 +5598,7 @@ OO.ui.LookupElement.prototype.openLookupMenu = function () {
 /**
  * Close the menu, empty it, and abort any pending request.
  *
+ * @private
  * @chainable
  */
 OO.ui.LookupElement.prototype.closeLookupMenu = function () {
@@ -5026,6 +5614,7 @@ OO.ui.LookupElement.prototype.closeLookupMenu = function () {
  *
  * If lookups have been disabled with #setLookupsDisabled, this function does nothing.
  *
+ * @private
  * @chainable
  */
 OO.ui.LookupElement.prototype.populateLookupMenu = function () {
@@ -5036,8 +5625,8 @@ OO.ui.LookupElement.prototype.populateLookupMenu = function () {
                return;
        }
 
-       // If the input is empty, clear the menu
-       if ( value === '' ) {
+       // If the input is empty, clear the menu, unless suggestions when empty are allowed.
+       if ( !this.allowSuggestionsWhenEmpty && value === '' ) {
                this.closeLookupMenu();
        // Skip population if there is already a request pending for the current value
        } else if ( value !== this.lookupQuery ) {
@@ -5064,6 +5653,7 @@ OO.ui.LookupElement.prototype.populateLookupMenu = function () {
 /**
  * Select and highlight the first selectable item in the menu.
  *
+ * @private
  * @chainable
  */
 OO.ui.LookupElement.prototype.initializeLookupMenuSelection = function () {
@@ -5076,6 +5666,7 @@ OO.ui.LookupElement.prototype.initializeLookupMenuSelection = function () {
 /**
  * Get lookup menu items for the current query.
  *
+ * @private
  * @return {jQuery.Promise} Promise object which will be passed menu items as the first argument of
  *   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.
@@ -5103,13 +5694,13 @@ OO.ui.LookupElement.prototype.getLookupMenuItems = function () {
                                // for that request.
                                widget.popPending();
                        } )
-                       .done( function ( data ) {
+                       .done( function ( response ) {
                                // If this is an old request (and aborting it somehow caused it to still succeed),
                                // ignore its success completely
                                if ( ourRequest === widget.lookupRequest ) {
                                        widget.lookupQuery = null;
                                        widget.lookupRequest = null;
-                                       widget.lookupCache[ value ] = widget.getLookupCacheDataFromResponse( data );
+                                       widget.lookupCache[ value ] = widget.getLookupCacheDataFromResponse( response );
                                        deferred.resolve( widget.getLookupMenuOptionsFromData( widget.lookupCache[ value ] ) );
                                }
                        } )
@@ -5128,6 +5719,8 @@ OO.ui.LookupElement.prototype.getLookupMenuItems = function () {
 
 /**
  * Abort the currently pending lookup request, if any.
+ *
+ * @private
  */
 OO.ui.LookupElement.prototype.abortLookupRequest = function () {
        var oldRequest = this.lookupRequest;
@@ -5143,6 +5736,7 @@ OO.ui.LookupElement.prototype.abortLookupRequest = function () {
 /**
  * Get a new request object of the current lookup query value.
  *
+ * @protected
  * @abstract
  * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method
  */
@@ -5157,8 +5751,9 @@ OO.ui.LookupElement.prototype.getLookupRequest = function () {
  * The return value of this function will be cached, and any further queries for the given value
  * will use the cache rather than doing API requests.
  *
+ * @protected
  * @abstract
- * @param {Mixed} data Response from server
+ * @param {Mixed} response Response from server
  * @return {Mixed} Cached result data
  */
 OO.ui.LookupElement.prototype.getLookupCacheDataFromResponse = function () {
@@ -5170,6 +5765,7 @@ OO.ui.LookupElement.prototype.getLookupCacheDataFromResponse = function () {
  * Get a list of menu option widgets from the (possibly cached) data returned by
  * #getLookupCacheDataFromResponse.
  *
+ * @protected
  * @abstract
  * @param {Mixed} data Cached result data, usually an array
  * @return {OO.ui.MenuOptionWidget[]} Menu items
@@ -5180,7 +5776,10 @@ OO.ui.LookupElement.prototype.getLookupMenuOptionsFromData = function () {
 };
 
 /**
- * Element containing an OO.ui.PopupWidget object.
+ * PopupElement is mixed into other classes to generate a {@link OO.ui.PopupWidget popup widget}.
+ * A popup is a container for content. It is overlaid and positioned absolutely. By default, each
+ * popup has an anchor, which is an arrow-like protrusion that points toward the popup’s origin.
+ * See {@link OO.ui.PopupWidget PopupWidget} for an example.
  *
  * @abstract
  * @class
@@ -5214,19 +5813,52 @@ OO.ui.PopupElement.prototype.getPopup = function () {
 };
 
 /**
- * Element with named flags that can be added, removed, listed and checked.
+ * The FlaggedElement class is an attribute mixin, meaning that it is used to add
+ * additional functionality to an element created by another class. The class provides
+ * a ‘flags’ property assigned the name (or an array of names) of styling flags,
+ * which are used to customize the look and feel of a widget to better describe its
+ * importance and functionality.
+ *
+ * The library currently contains the following styling flags for general use:
+ *
+ * - **progressive**:  Progressive styling is applied to convey that the widget will move the user forward in a process.
+ * - **destructive**: Destructive styling is applied to convey that the widget will remove something.
+ * - **constructive**: Constructive styling is applied to convey that the widget will create something.
  *
- * A flag, when set, adds a CSS class on the `$element` by combining `oo-ui-flaggedElement-` with
- * the flag name. Flags are primarily useful for styling.
+ * The flags affect the appearance of the buttons:
+ *
+ *     @example
+ *     // FlaggedElement is mixed into ButtonWidget to provide styling flags
+ *     var button1 = new OO.ui.ButtonWidget( {
+ *         label: 'Constructive',
+ *         flags: 'constructive'
+ *     } );
+ *     var button2 = new OO.ui.ButtonWidget( {
+ *         label: 'Destructive',
+ *         flags: 'destructive'
+ *     } );
+ *     var button3 = new OO.ui.ButtonWidget( {
+ *         label: 'Progressive',
+ *         flags: 'progressive'
+ *     } );
+ *     $( 'body' ).append( button1.$element, button2.$element, button3.$element );
+ *
+ * {@link OO.ui.ActionWidget ActionWidgets}, which are a special kind of button that execute an action, use these flags: **primary** and **safe**.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string|string[]} [flags] Flags describing importance and functionality, e.g. 'primary',
- *   'safe', 'progressive', 'destructive' or 'constructive'
- * @cfg {jQuery} [$flagged] Flagged node, assigned to #$flagged, omit to use #$element
+ * @cfg {string|string[]} [flags] The name or names of the flags (e.g., 'constructive' or 'primary') to apply.
+ *  Please see the [OOjs UI documentation on MediaWiki] [2] for more information about available flags.
+ *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged
+ * @cfg {jQuery} [$flagged] The flagged element. By default,
+ *  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 ) {
        // Configuration initialization
@@ -5245,8 +5877,12 @@ OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
 
 /**
  * @event flag
- * @param {Object.<string,boolean>} changes Object keyed by flag name containing boolean
- *   added/removed properties
+ * A flag event is emitted when the #clearFlags or #setFlags methods are used. The `changes`
+ * parameter contains the name of each modified flag and indicates whether it was
+ * added or removed.
+ *
+ * @param {Object.<string,boolean>} changes Object keyed by flag name. A Boolean `true` indicates
+ * that the flag was added, `false` that the flag was removed.
  */
 
 /* Methods */
@@ -5254,9 +5890,10 @@ OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
 /**
  * Set the flagged element.
  *
- * If an element is already set, it will be cleaned up before setting up the new element.
+ * This method is used to retarget a flagged mixin so that its functionality applies to the specified element.
+ * If an element is already set, the method will remove the mixin’s effect on that element.
  *
- * @param {jQuery} $flagged Element to add flags to
+ * @param {jQuery} $flagged Element that should be flagged
  */
 OO.ui.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {
        var classNames = Object.keys( this.flags ).map( function ( flag ) {
@@ -5271,10 +5908,10 @@ OO.ui.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {
 };
 
 /**
- * Check if a flag is set.
+ * Check if the specified flag is set.
  *
  * @param {string} flag Name of flag
- * @return {boolean} Has flag
+ * @return {boolean} The flag is set
  */
 OO.ui.FlaggedElement.prototype.hasFlag = function ( flag ) {
        return flag in this.flags;
@@ -5321,8 +5958,9 @@ OO.ui.FlaggedElement.prototype.clearFlags = function () {
 /**
  * Add one or more flags.
  *
- * @param {string|string[]|Object.<string, boolean>} flags One or more flags to add, or an object
- *  keyed by flag name containing boolean set/remove instructions.
+ * @param {string|string[]|Object.<string, boolean>} flags A flag name, an array of flag names,
+ *  or an object keyed by flag name with a boolean value that indicates whether the flag should
+ *  be added (`true`) or removed (`false`).
  * @chainable
  * @fires flag
  */
@@ -5340,7 +5978,7 @@ OO.ui.FlaggedElement.prototype.setFlags = function ( flags ) {
                        this.flags[ flags ] = true;
                        add.push( className );
                }
-       } else if ( $.isArray( flags ) ) {
+       } else if ( Array.isArray( flags ) ) {
                for ( i = 0, len = flags.length; i < len; i++ ) {
                        flag = flags[ i ];
                        className = classPrefix + flag;
@@ -5385,19 +6023,29 @@ OO.ui.FlaggedElement.prototype.setFlags = function ( flags ) {
 };
 
 /**
- * Element with a title.
+ * TitledElement is mixed into other classes to provide a `title` attribute.
+ * Titles are rendered by the browser and are made visible when the user moves
+ * the mouse over the element. Titles are not visible on touch devices.
  *
- * Titles are rendered by the browser and are made visible when hovering the element. Titles are
- * not visible on touch devices.
+ *     @example
+ *     // TitledElement provides a 'title' attribute to the
+ *     // ButtonWidget class
+ *     var button = new OO.ui.ButtonWidget( {
+ *         label: 'Button with Title',
+ *         title: 'I am a button'
+ *     } );
+ *     $( 'body' ).append( button.$element );
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$titled] Titled node, assigned to #$titled, omit to use #$element
- * @cfg {string|Function} [title] Title text or a function that returns text. If not provided, the
- *    static property 'title' is used.
+ * @cfg {jQuery} [$titled] The element to which the `title` attribute is applied.
+ *  If this config is omitted, the title functionality is applied to $element, the
+ *  element created by the class.
+ * @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 ) {
        // Configuration initialization
@@ -5419,11 +6067,12 @@ OO.initClass( OO.ui.TitledElement );
 /* Static Properties */
 
 /**
- * Title.
+ * The title text, a function that returns text, or `null` for no title. The value of the static property
+ * is overridden if the #title config option is used.
  *
  * @static
  * @inheritable
- * @property {string|Function} Title text or a function that returns text
+ * @property {string|Function|null}
  */
 OO.ui.TitledElement.static.title = null;
 
@@ -5432,9 +6081,10 @@ OO.ui.TitledElement.static.title = null;
 /**
  * Set the titled element.
  *
- * If an element is already set, it will be cleaned up before setting up the new element.
+ * This method is used to retarget a titledElement mixin so that its functionality applies to the specified element.
+ * If an element is already set, the mixin’s effect on that element is removed before the new element is set up.
  *
- * @param {jQuery} $titled Element to set title on
+ * @param {jQuery} $titled Element that should use the 'titled' functionality
  */
 OO.ui.TitledElement.prototype.setTitledElement = function ( $titled ) {
        if ( this.$titled ) {
@@ -5450,7 +6100,7 @@ OO.ui.TitledElement.prototype.setTitledElement = function ( $titled ) {
 /**
  * Set title.
  *
- * @param {string|Function|null} title Title text, a function that returns text or null for no title
+ * @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 ) {
@@ -5700,6 +6350,12 @@ OO.ui.ClippableElement.prototype.clip = function () {
  * @cfg {string|Function} [title] Title text or a function that returns text
  */
 OO.ui.Tool = function OoUiTool( toolGroup, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolGroup ) && config === undefined ) {
+               config = toolGroup;
+               toolGroup = config.toolGroup;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -5962,6 +6618,13 @@ OO.ui.Tool.prototype.destroy = function () {
  * @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
+       if ( OO.isPlainObject( toolFactory ) && config === undefined ) {
+               config = toolFactory;
+               toolFactory = config.toolFactory;
+               toolGroupFactory = config.toolGroupFactory;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -5980,11 +6643,12 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
        this.$bar = $( '<div>' );
        this.$actions = $( '<div>' );
        this.initialized = false;
+       this.onWindowResizeHandler = this.onWindowResize.bind( this );
 
        // Events
        this.$element
                .add( this.$bar ).add( this.$group ).add( this.$actions )
-               .on( 'mousedown touchstart', this.onPointerDown.bind( this ) );
+               .on( 'mousedown', this.onPointerDown.bind( this ) );
 
        // Initialization
        this.$group.addClass( 'oo-ui-toolbar-tools' );
@@ -6039,12 +6703,28 @@ OO.ui.Toolbar.prototype.onPointerDown = function ( e ) {
        }
 };
 
+/**
+ * Handle window resize event.
+ *
+ * @private
+ * @param {jQuery.Event} e Window resize event
+ */
+OO.ui.Toolbar.prototype.onWindowResize = function () {
+       this.$element.toggleClass(
+               'oo-ui-toolbar-narrow',
+               this.$bar.width() <= this.narrowThreshold
+       );
+};
+
 /**
  * Sets up handles and preloads required information for the toolbar to work.
  * This must be called after it is attached to a visible document and before doing anything else.
  */
 OO.ui.Toolbar.prototype.initialize = function () {
        this.initialized = true;
+       this.narrowThreshold = this.$group.width() + this.$actions.width();
+       $( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
+       this.onWindowResize();
 };
 
 /**
@@ -6111,6 +6791,7 @@ OO.ui.Toolbar.prototype.reset = function () {
  * Call this whenever you are done using a toolbar.
  */
 OO.ui.Toolbar.prototype.destroy = function () {
+       $( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );
        this.reset();
        this.$element.remove();
 };
@@ -6178,6 +6859,12 @@ OO.ui.Toolbar.prototype.getToolAccelerator = function () {
  * @cfg {Array|string} [demote=[]] List of tools to demote to the end
  */
 OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+               config = toolbar;
+               toolbar = config.toolbar;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -6200,8 +6887,8 @@ OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
 
        // Events
        this.$element.on( {
-               'mousedown touchstart': this.onPointerDown.bind( this ),
-               'mouseup touchend': this.onPointerUp.bind( this ),
+               mousedown: this.onPointerDown.bind( this ),
+               mouseup: this.onPointerUp.bind( this ),
                mouseover: this.onMouseOver.bind( this ),
                mouseout: this.onMouseOut.bind( this )
        } );
@@ -6291,8 +6978,7 @@ OO.ui.ToolGroup.prototype.updateDisabled = function () {
  * @param {jQuery.Event} e Mouse down event
  */
 OO.ui.ToolGroup.prototype.onPointerDown = function ( e ) {
-       // e.which is 0 for touch events, 1 for left mouse button
-       if ( !this.isDisabled() && e.which <= 1 ) {
+       if ( !this.isDisabled() && e.which === 1 ) {
                this.pressed = this.getTargetTool( e );
                if ( this.pressed ) {
                        this.pressed.setActive( true );
@@ -6324,8 +7010,7 @@ OO.ui.ToolGroup.prototype.onCapturedMouseUp = function ( e ) {
 OO.ui.ToolGroup.prototype.onPointerUp = function ( e ) {
        var tool = this.getTargetTool( e );
 
-       // e.which is 0 for touch events, 1 for left mouse button
-       if ( !this.isDisabled() && e.which <= 1 && this.pressed && this.pressed === tool ) {
+       if ( !this.isDisabled() && e.which === 1 && this.pressed && this.pressed === tool ) {
                this.pressed.onSelect();
        }
 
@@ -6425,6 +7110,9 @@ OO.ui.ToolGroup.prototype.populate = function () {
                        // Tool is available or is already in this group
                        ( this.toolbar.isToolAvailable( name ) || this.tools[ name ] )
                ) {
+                       // Hack to prevent infinite recursion via ToolGroupTool. We need to reserve the tool before
+                       // creating it, but we can't call reserveTool() yet because we haven't created the tool.
+                       this.toolbar.tools[ name ] = true;
                        tool = this.tools[ name ];
                        if ( !tool ) {
                                // Auto-initialize tools on first use
@@ -6477,11 +7165,39 @@ OO.ui.ToolGroup.prototype.destroy = function () {
 };
 
 /**
- * Dialog for showing a message.
+ * MessageDialogs display a confirmation or alert message. By default, the rendered dialog box
+ * consists of a header that contains the dialog title, a body with the message, and a footer that
+ * contains any {@link OO.ui.ActionWidget action widgets}. The MessageDialog class is the only type
+ * of {@link OO.ui.Dialog dialog} that is usually instantiated directly.
  *
- * User interface:
- * - Registers two actions by default (safe and primary).
- * - Renders action widgets in the footer.
+ * There are two basic types of message dialogs, confirmation and alert:
+ *
+ * - **confirmation**: the dialog title describes what a progressive action will do and the message provides
+ *  more details about the consequences.
+ * - **alert**: the dialog title describes which event occurred and the message provides more information
+ *  about why the event occurred.
+ *
+ * The MessageDialog class specifies two actions: ‘accept’, the primary
+ * action (e.g., ‘ok’) and ‘reject,’ the safe action (e.g., ‘cancel’). Both will close the window,
+ * passing along the selected action.
+ *
+ * For more information and examples, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ *     @example
+ *     // Example: Creating and opening a message dialog window.
+ *     var messageDialog = new OO.ui.MessageDialog();
+ *
+ *     // Create and append a window manager.
+ *     var windowManager = new OO.ui.WindowManager();
+ *     $( 'body' ).append( windowManager.$element );
+ *     windowManager.addWindows( [ messageDialog ] );
+ *     // Open the window.
+ *     windowManager.openWindow( messageDialog, {
+ *         title: 'Basic message dialog',
+ *         message: 'This is the message'
+ *     } );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Message_Dialogs
  *
  * @class
  * @extends OO.ui.Dialog
@@ -6515,21 +7231,23 @@ OO.ui.MessageDialog.static.verbose = false;
 /**
  * Dialog title.
  *
- * A confirmation dialog's title should describe what the progressive action will do. An alert
- * dialog's title should describe what event occurred.
+ * The title of a confirmation dialog describes what a progressive action will do. The
+ * title of an alert dialog describes which event occurred.
  *
  * @static
- * inheritable
+ * @inheritable
  * @property {jQuery|string|Function|null}
  */
 OO.ui.MessageDialog.static.title = null;
 
 /**
- * A confirmation dialog's message should describe the consequences of the progressive action. An
- * alert dialog's message should describe why the event occurred.
+ * The message displayed in the dialog body.
+ *
+ * A confirmation message describes the consequences of a progressive action. An alert
+ * message describes why an event occurred.
  *
  * @static
- * inheritable
+ * @inheritable
  * @property {jQuery|string|Function|null}
  */
 OO.ui.MessageDialog.static.message = null;
@@ -6565,6 +7283,8 @@ OO.ui.MessageDialog.prototype.onActionResize = function ( action ) {
 
 /**
  * Handle window resized events.
+ *
+ * @private
  */
 OO.ui.MessageDialog.prototype.onResize = function () {
        var dialog = this;
@@ -6578,6 +7298,8 @@ OO.ui.MessageDialog.prototype.onResize = function () {
 /**
  * Toggle action layout between vertical and horizontal.
  *
+ *
+ * @private
  * @param {boolean} [value] Layout actions vertically, omit to toggle
  * @chainable
  */
@@ -6741,6 +7463,8 @@ OO.ui.MessageDialog.prototype.attachActions = function () {
  * Fit action actions into columns or rows.
  *
  * Columns will be used if all labels can fit without overflow, otherwise rows will be used.
+ *
+ * @private
  */
 OO.ui.MessageDialog.prototype.fitActions = function () {
        var i, len, action,
@@ -6767,23 +7491,57 @@ OO.ui.MessageDialog.prototype.fitActions = function () {
 };
 
 /**
- * Navigation dialog window.
- *
- * Logic:
- * - Show and hide errors.
- * - Retry an action.
- *
- * User interface:
- * - Renders header with dialog title and one action widget on either side
- *   (a 'safe' button on the left, and a 'primary' button on the right, both of
- *   which close the dialog).
- * - Displays any action widgets in the footer (none by default).
- * - Ability to dismiss errors.
- *
- * Subclass responsibilities:
- * - Register a 'safe' action.
- * - Register a 'primary' action.
- * - Add content to the dialog.
+ * ProcessDialog windows encapsulate a {@link OO.ui.Process process} and all of the code necessary
+ * to complete it. If the process terminates with an error, a customizable {@link OO.ui.Error error
+ * interface} alerts users to the trouble, permitting the user to dismiss the error and try again when
+ * relevant. The ProcessDialog class is always extended and customized with the actions and content
+ * required for each process.
+ *
+ * The process dialog box consists of a header that visually represents the ‘working’ state of long
+ * processes with an animation. The header contains the dialog title as well as
+ * two {@link OO.ui.ActionWidget action widgets}:  a ‘safe’ action on the left (e.g., ‘Cancel’) and
+ * a ‘primary’ action on the right (e.g., ‘Done’).
+ *
+ * Like other windows, the process dialog is managed by a {@link OO.ui.WindowManager window manager}.
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information and examples.
+ *
+ *     @example
+ *     // Example: Creating and opening a process dialog window.
+ *     function MyProcessDialog( config ) {
+ *         MyProcessDialog.super.call( this, config );
+ *     }
+ *     OO.inheritClass( MyProcessDialog, OO.ui.ProcessDialog );
+ *
+ *     MyProcessDialog.static.title = 'Process dialog';
+ *     MyProcessDialog.static.actions = [
+ *         { action: 'save', label: 'Done', flags: 'primary' },
+ *         { label: 'Cancel', flags: 'safe' }
+ *     ];
+ *
+ *     MyProcessDialog.prototype.initialize = function () {
+ *         MyProcessDialog.super.prototype.initialize.apply( this, arguments );
+ *         this.content = new OO.ui.PanelLayout( { $: this.$, 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 );
+ *     };
+ *     MyProcessDialog.prototype.getActionProcess = function ( action ) {
+ *         var dialog = this;
+ *         if ( action ) {
+ *             return new OO.ui.Process( function () {
+ *                 dialog.close( { action: action } );
+ *             } );
+ *         }
+ *         return MyProcessDialog.super.prototype.getActionProcess.call( this, action );
+ *     };
+ *
+ *     var windowManager = new OO.ui.WindowManager();
+ *     $( 'body' ).append( windowManager.$element );
+ *
+ *     var dialog = new MyProcessDialog();
+ *     windowManager.addWindows( [ dialog ] );
+ *     windowManager.openWindow( dialog );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs
  *
  * @abstract
  * @class
@@ -6810,6 +7568,8 @@ OO.inheritClass( OO.ui.ProcessDialog, OO.ui.Dialog );
  * Handle dismiss button click events.
  *
  * Hides errors.
+ *
+ * @private
  */
 OO.ui.ProcessDialog.prototype.onDismissErrorButtonClick = function () {
        this.hideErrors();
@@ -6819,10 +7579,12 @@ OO.ui.ProcessDialog.prototype.onDismissErrorButtonClick = function () {
  * Handle retry button click events.
  *
  * Hides errors and then tries again.
+ *
+ * @private
  */
 OO.ui.ProcessDialog.prototype.onRetryButtonClick = function () {
        this.hideErrors();
-       this.executeAction( this.currentAction.getAction() );
+       this.executeAction( this.currentAction );
 };
 
 /**
@@ -6871,7 +7633,7 @@ OO.ui.ProcessDialog.prototype.initialize = function () {
                .addClass( 'oo-ui-processDialog-errors-title' )
                .text( OO.ui.msg( 'ooui-dialog-process-error' ) );
        this.$errors
-               .addClass( 'oo-ui-processDialog-errors' )
+               .addClass( 'oo-ui-processDialog-errors oo-ui-element-hidden' )
                .append( this.$errorsTitle, this.dismissButton.$element, this.retryButton.$element );
        this.$content
                .addClass( 'oo-ui-processDialog-content' )
@@ -6883,6 +7645,19 @@ OO.ui.ProcessDialog.prototype.initialize = function () {
        this.$foot.append( this.$otherActions );
 };
 
+/**
+ * @inheritdoc
+ */
+OO.ui.ProcessDialog.prototype.getActionWidgets = function ( actions ) {
+       var i, len, widgets = [];
+       for ( i = 0, len = actions.length; i < len; i++ ) {
+               widgets.push(
+                       new OO.ui.ActionWidget( $.extend( { framed: true }, actions[ i ] ) )
+               );
+       }
+       return widgets;
+};
+
 /**
  * @inheritdoc
  */
@@ -6896,18 +7671,13 @@ OO.ui.ProcessDialog.prototype.attachActions = function () {
        others = this.actions.getOthers();
        if ( special.primary ) {
                this.$primaryActions.append( special.primary.$element );
-               special.primary.toggleFramed( true );
        }
-       if ( others.length ) {
-               for ( i = 0, len = others.length; i < len; i++ ) {
-                       other = others[ i ];
-                       this.$otherActions.append( other.$element );
-                       other.toggleFramed( true );
-               }
+       for ( i = 0, len = others.length; i < len; i++ ) {
+               other = others[ i ];
+               this.$otherActions.append( other.$element );
        }
        if ( special.safe ) {
                this.$safeActions.append( special.safe.$element );
-               special.safe.toggleFramed( true );
        }
 
        this.fitLabel();
@@ -6918,13 +7688,17 @@ OO.ui.ProcessDialog.prototype.attachActions = function () {
  * @inheritdoc
  */
 OO.ui.ProcessDialog.prototype.executeAction = function ( action ) {
-       OO.ui.ProcessDialog.super.prototype.executeAction.call( this, action )
-               .fail( this.showErrors.bind( this ) );
+       var process = this;
+       return OO.ui.ProcessDialog.super.prototype.executeAction.call( this, action )
+               .fail( function ( errors ) {
+                       process.showErrors( errors || [] );
+               } );
 };
 
 /**
  * Fit label between actions.
  *
+ * @private
  * @chainable
  */
 OO.ui.ProcessDialog.prototype.fitLabel = function () {
@@ -6940,14 +7714,20 @@ OO.ui.ProcessDialog.prototype.fitLabel = function () {
 /**
  * Handle errors that occurred during accept or reject processes.
  *
- * @param {OO.ui.Error[]} errors Errors to be handled
+ * @private
+ * @param {OO.ui.Error[]|OO.ui.Error} errors Errors to be handled
  */
 OO.ui.ProcessDialog.prototype.showErrors = function ( errors ) {
-       var i, len, $item,
+       var i, len, $item, actions,
                items = [],
+               abilities = {},
                recoverable = true,
                warning = false;
 
+       if ( errors instanceof OO.ui.Error ) {
+               errors = [ errors ];
+       }
+
        for ( i = 0, len = errors.length; i < len; i++ ) {
                if ( !errors[ i ].isRecoverable() ) {
                        recoverable = false;
@@ -6962,9 +7742,15 @@ OO.ui.ProcessDialog.prototype.showErrors = function ( errors ) {
        }
        this.$errorItems = $( items );
        if ( recoverable ) {
-               this.retryButton.clearFlags().setFlags( this.currentAction.getFlags() );
+               abilities[this.currentAction] = true;
+               // Copy the flags from the first matching action
+               actions = this.actions.get( { actions: this.currentAction } );
+               if ( actions.length ) {
+                       this.retryButton.clearFlags().setFlags( actions[0].getFlags() );
+               }
        } else {
-               this.currentAction.setDisabled( true );
+               abilities[this.currentAction] = false;
+               this.actions.setAbilities( abilities );
        }
        if ( warning ) {
                this.retryButton.setLabel( OO.ui.msg( 'ooui-dialog-process-continue' ) );
@@ -6973,31 +7759,54 @@ OO.ui.ProcessDialog.prototype.showErrors = function ( errors ) {
        }
        this.retryButton.toggle( recoverable );
        this.$errorsTitle.after( this.$errorItems );
-       this.$errors.removeClass( 'oo-ui-widget-hidden' ).scrollTop( 0 );
+       this.$errors.removeClass( 'oo-ui-element-hidden' ).scrollTop( 0 );
 };
 
 /**
  * Hide errors.
+ *
+ * @private
  */
 OO.ui.ProcessDialog.prototype.hideErrors = function () {
-       this.$errors.addClass( 'oo-ui-widget-hidden' );
-       this.$errorItems.remove();
-       this.$errorItems = null;
+       this.$errors.addClass( 'oo-ui-element-hidden' );
+       if ( this.$errorItems ) {
+               this.$errorItems.remove();
+               this.$errorItems = null;
+       }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ProcessDialog.prototype.getTeardownProcess = function ( data ) {
+       // Parent method
+       return OO.ui.ProcessDialog.super.prototype.getTeardownProcess.call( this, data )
+               .first( function () {
+                       // Make sure to hide errors
+                       this.hideErrors();
+               }, this );
 };
 
 /**
- * Layout made of a field and optional label.
+ * FieldLayouts are used with OO.ui.FieldsetLayout. Each FieldLayout requires a field-widget,
+ * which is a widget that is specified by reference before any optional configuration settings.
+ *
+ * Field layouts can be configured with help text and/or labels. Labels are aligned in one of four ways:
  *
- * Available label alignment modes include:
- *  - left: Label is before the field and aligned away from it, best for when the user will be
- *    scanning for a specific label in a form with many fields
- *  - right: Label is before the field and aligned toward it, best for forms the user is very
- *    familiar with and will tab through field checking quickly to verify which field they are in
- *  - top: Label is before the field and above it, best for when the user will need to fill out all
- *    fields from top to bottom in a form with few fields
- *  - inline: Label is after the field and aligned toward it, best for small boolean fields like
- *    checkboxes or radio buttons
+ * - **left**: The label is placed before the field-widget and aligned with the left margin.
+ *   A left-alignment is used for forms with many fields.
+ * - **right**: The label is placed before the field-widget and aligned to the right margin.
+ *   A right-alignment is used for long but familiar forms which users tab through,
+ *   verifying the current field with a quick glance at the label.
+ * - **top**: The label is placed above the field-widget. A top-alignment is used for brief forms
+ *   that users fill out from top to bottom.
+ * - **inline**: The label is placed after the field-widget and aligned to the left.
+ *   An inline-alignment is best used with checkboxes or radio buttons.
  *
+ * Help text is accessed via a help icon that appears in the upper right corner of the rendered field layout.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for examples and more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets
  * @class
  * @extends OO.ui.Layout
  * @mixins OO.ui.LabelElement
@@ -7005,18 +7814,22 @@ OO.ui.ProcessDialog.prototype.hideErrors = function () {
  * @constructor
  * @param {OO.ui.Widget} fieldWidget Field widget
  * @param {Object} [config] Configuration options
- * @cfg {string} [align='left'] Alignment mode, either 'left', 'right', 'top' or 'inline'
- * @cfg {string} [help] Explanatory text shown as a '?' icon.
+ * @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.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
+               config = fieldWidget;
+               fieldWidget = config.fieldWidget;
+       }
+
        var hasInputWidget = fieldWidget instanceof OO.ui.InputWidget;
 
        // Configuration initialization
        config = $.extend( { align: 'left' }, config );
 
-       // Properties (must be set before parent constructor, which calls #getTagName)
-       this.fieldWidget = fieldWidget;
-
        // Parent constructor
        OO.ui.FieldLayout.super.call( this, config );
 
@@ -7024,6 +7837,7 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
        OO.ui.LabelElement.call( this, config );
 
        // Properties
+       this.fieldWidget = fieldWidget;
        this.$field = $( '<div>' );
        this.$body = $( '<' + ( hasInputWidget ? 'label' : 'div' ) + '>' );
        this.align = null;
@@ -7073,6 +7887,7 @@ OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabelElement );
 /**
  * Handle field disable events.
  *
+ * @private
  * @param {boolean} value Field is disabled
  */
 OO.ui.FieldLayout.prototype.onFieldDisable = function ( value ) {
@@ -7082,6 +7897,7 @@ OO.ui.FieldLayout.prototype.onFieldDisable = function ( value ) {
 /**
  * Handle label mouse click events.
  *
+ * @private
  * @param {jQuery.Event} e Mouse click event
  */
 OO.ui.FieldLayout.prototype.onLabelClick = function () {
@@ -7090,7 +7906,7 @@ OO.ui.FieldLayout.prototype.onLabelClick = function () {
 };
 
 /**
- * Get the field.
+ * Get the widget contained by the field.
  *
  * @return {OO.ui.Widget} Field widget
  */
@@ -7133,7 +7949,43 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
 };
 
 /**
- * Layout made of a field, a button, and an optional label.
+ * ActionFieldLayouts are used with OO.ui.FieldsetLayout. The layout consists of a field-widget, a button,
+ * and an optional label and/or help text. The field-widget (e.g., a {@link OO.ui.TextInputWidget TextInputWidget}),
+ * is required and is specified before any optional configuration settings.
+ *
+ * Labels can be aligned in one of four ways:
+ *
+ * - **left**: The label is placed before the field-widget and aligned with the left margin.
+ *   A left-alignment is used for forms with many fields.
+ * - **right**: The label is placed before the field-widget and aligned to the right margin.
+ *   A right-alignment is used for long but familiar forms which users tab through,
+ *   verifying the current field with a quick glance at the label.
+ * - **top**: The label is placed above the field-widget. A top-alignment is used for brief forms
+ *   that users fill out from top to bottom.
+ * - **inline**: The label is placed after the field-widget and aligned to the left.
+ *   An inline-alignment is best used with checkboxes or radio buttons.
+ *
+ * Help text is accessed via a help icon that appears in the upper right corner of the rendered field layout when help
+ * text is specified.
+ *
+ *     @example
+ *     // Example of an ActionFieldLayout
+ *     var actionFieldLayout = new OO.ui.ActionFieldLayout(
+ *         new OO.ui.TextInputWidget( {
+ *             placeholder: 'Field widget'
+ *         } ),
+ *         new OO.ui.ButtonWidget( {
+ *             label: 'Button'
+ *         } ),
+ *         {
+ *             label: 'An ActionFieldLayout. This label is aligned top',
+ *             align: 'top',
+ *             help: 'This is help text'
+ *         }
+ *     );
+ *
+ *     $( 'body' ).append( actionFieldLayout.$element );
+ *
  *
  * @class
  * @extends OO.ui.FieldLayout
@@ -7142,32 +7994,33 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
  * @param {OO.ui.Widget} fieldWidget Field widget
  * @param {OO.ui.ButtonWidget} buttonWidget Button widget
  * @param {Object} [config] Configuration options
- * @cfg {string} [align='left'] Alignment mode, either 'left', 'right', 'top' or 'inline'
- * @cfg {string} [help] Explanatory text shown as a '?' icon.
+ * @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
+       if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
+               config = fieldWidget;
+               fieldWidget = config.fieldWidget;
+               buttonWidget = config.buttonWidget;
+       }
+
        // Configuration initialization
        config = $.extend( { align: 'left' }, config );
 
-       // Properties (must be set before parent constructor, which calls #getTagName)
-       this.fieldWidget = fieldWidget;
-       this.buttonWidget = buttonWidget;
-
        // Parent constructor
        OO.ui.ActionFieldLayout.super.call( this, fieldWidget, config );
 
-       // Mixin constructors
-       OO.ui.LabelElement.call( this, config );
-
        // Properties
+       this.fieldWidget = fieldWidget;
+       this.buttonWidget = buttonWidget;
        this.$button = $( '<div>' )
                .addClass( 'oo-ui-actionFieldLayout-button' )
                .append( this.buttonWidget.$element );
-
        this.$input = $( '<div>' )
                .addClass( 'oo-ui-actionFieldLayout-input' )
                .append( this.fieldWidget.$element );
-
        this.$field
                .addClass( 'oo-ui-actionFieldLayout' )
                .append( this.$input, this.$button );
@@ -7178,9 +8031,36 @@ OO.ui.ActionFieldLayout = function OoUiActionFieldLayout( fieldWidget, buttonWid
 OO.inheritClass( OO.ui.ActionFieldLayout, OO.ui.FieldLayout );
 
 /**
- * Layout made of a fieldset and optional legend.
+ * FieldsetLayouts are composed of one or more {@link OO.ui.FieldLayout FieldLayouts},
+ * which each contain an individual widget and, optionally, a label. Each Fieldset can be
+ * configured with a label as well. For more information and examples,
+ * please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ *     @example
+ *     // Example of a fieldset layout
+ *     var input1 = new OO.ui.TextInputWidget( {
+ *         placeholder: 'A text input field'
+ *     } );
+ *
+ *     var input2 = new OO.ui.TextInputWidget( {
+ *         placeholder: 'A text input field'
+ *     } );
  *
- * Just add OO.ui.FieldLayout items.
+ *     var fieldset = new OO.ui.FieldsetLayout( {
+ *         label: 'Example of a fieldset layout'
+ *     } );
+ *
+ *     fieldset.addItems( [
+ *         new OO.ui.FieldLayout( input1, {
+ *             label: 'Field One'
+ *         } ),
+ *         new OO.ui.FieldLayout( input2, {
+ *             label: 'Field Two'
+ *         } )
+ *     ] );
+ *     $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets
  *
  * @class
  * @extends OO.ui.Layout
@@ -7190,7 +8070,7 @@ OO.inheritClass( OO.ui.ActionFieldLayout, OO.ui.FieldLayout );
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {OO.ui.FieldLayout[]} [items] Items to add
+ * @cfg {OO.ui.FieldLayout[]} [items] An array of fields to add to the fieldset. See OO.ui.FieldLayout for more information about fields.
  */
 OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
        // Configuration initialization
@@ -7225,7 +8105,7 @@ OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
        this.$element
                .addClass( 'oo-ui-fieldsetLayout' )
                .prepend( this.$help, this.$icon, this.$label, this.$group );
-       if ( $.isArray( config.items ) ) {
+       if ( Array.isArray( config.items ) ) {
                this.addItems( config.items );
        }
 };
@@ -7238,16 +8118,54 @@ OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabelElement );
 OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
 
 /**
- * Layout with an HTML form.
+ * FormLayouts are used to wrap {@link OO.ui.FieldsetLayout FieldsetLayouts} when you intend to use browser-based
+ * form submission for the fields instead of handling them in JavaScript. Form layouts can be configured with an
+ * HTML form action, an encoding type, and a method using the #action, #enctype, and #method configs, respectively.
+ *
+ *     @example
+ *     // Example of a form layout that wraps a fieldset layout
+ *     var input1 = new OO.ui.TextInputWidget( {
+ *         placeholder: 'Username'
+ *     } );
+ *     var input2 = new OO.ui.TextInputWidget( {
+ *         placeholder: 'Password',
+ *         type: 'password'
+ *     } );
+ *     var submit = new OO.ui.ButtonInputWidget( {
+ *         label: 'Submit'
+ *     } );
+ *
+ *     var fieldset = new OO.ui.FieldsetLayout( {
+ *         label: 'A form layout'
+ *     } );
+ *     fieldset.addItems( [
+ *         new OO.ui.FieldLayout( input1, {
+ *             label: 'Username',
+ *             align: 'top'
+ *         } ),
+ *         new OO.ui.FieldLayout( input2, {
+ *             label: 'Password',
+ *             align: 'top'
+ *         } ),
+ *         new OO.ui.FieldLayout( submit )
+ *     ] );
+ *     var form = new OO.ui.FormLayout( {
+ *         items: [ fieldset ],
+ *         action: '/api/formhandler',
+ *         method: 'get'
+ *     } )
+ *     $( 'body' ).append( form.$element );
  *
  * @class
  * @extends OO.ui.Layout
+ * @mixins OO.ui.GroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {string} [method] HTML form `method` attribute
  * @cfg {string} [action] HTML form `action` attribute
  * @cfg {string} [enctype] HTML form `enctype` attribute
+ * @cfg {OO.ui.FieldsetLayout[]} [items] Fieldset layouts to add to the form layout.
  */
 OO.ui.FormLayout = function OoUiFormLayout( config ) {
        // Configuration initialization
@@ -7256,6 +8174,9 @@ OO.ui.FormLayout = function OoUiFormLayout( config ) {
        // Parent constructor
        OO.ui.FormLayout.super.call( this, config );
 
+       // Mixin constructors
+       OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+
        // Events
        this.$element.on( 'submit', this.onFormSubmit.bind( this ) );
 
@@ -7267,15 +8188,21 @@ OO.ui.FormLayout = function OoUiFormLayout( config ) {
                        action: config.action,
                        enctype: config.enctype
                } );
+       if ( Array.isArray( config.items ) ) {
+               this.addItems( config.items );
+       }
 };
 
 /* Setup */
 
 OO.inheritClass( OO.ui.FormLayout, OO.ui.Layout );
+OO.mixinClass( OO.ui.FormLayout, OO.ui.GroupElement );
 
 /* Events */
 
 /**
+ * A 'submit' event is emitted when the form is submitted.
+ *
  * @event submit
  */
 
@@ -7288,6 +8215,7 @@ OO.ui.FormLayout.static.tagName = 'form';
 /**
  * Handle form submit events.
  *
+ * @private
  * @param {jQuery.Event} e Submit event
  * @fires submit
  */
@@ -7296,164 +8224,6 @@ OO.ui.FormLayout.prototype.onFormSubmit = function () {
        return false;
 };
 
-/**
- * Layout made of proportionally sized columns and rows.
- *
- * @class
- * @extends OO.ui.Layout
- * @deprecated Use OO.ui.MenuLayout or plain CSS instead.
- *
- * @constructor
- * @param {OO.ui.PanelLayout[]} panels Panels in the grid
- * @param {Object} [config] Configuration options
- * @cfg {number[]} [widths] Widths of columns as ratios
- * @cfg {number[]} [heights] Heights of rows as ratios
- */
-OO.ui.GridLayout = function OoUiGridLayout( panels, config ) {
-       var i, len, widths;
-
-       // Configuration initialization
-       config = config || {};
-
-       // Parent constructor
-       OO.ui.GridLayout.super.call( this, config );
-
-       // Properties
-       this.panels = [];
-       this.widths = [];
-       this.heights = [];
-
-       // Initialization
-       this.$element.addClass( 'oo-ui-gridLayout' );
-       for ( i = 0, len = panels.length; i < len; i++ ) {
-               this.panels.push( panels[ i ] );
-               this.$element.append( panels[ i ].$element );
-       }
-       if ( config.widths || config.heights ) {
-               this.layout( config.widths || [ 1 ], config.heights || [ 1 ] );
-       } else {
-               // Arrange in columns by default
-               widths = this.panels.map( function () { return 1; } );
-               this.layout( widths, [ 1 ] );
-       }
-};
-
-/* Setup */
-
-OO.inheritClass( OO.ui.GridLayout, OO.ui.Layout );
-
-/* Events */
-
-/**
- * @event layout
- */
-
-/**
- * @event update
- */
-
-/* Methods */
-
-/**
- * Set grid dimensions.
- *
- * @param {number[]} widths Widths of columns as ratios
- * @param {number[]} heights Heights of rows as ratios
- * @fires layout
- * @throws {Error} If grid is not large enough to fit all panels
- */
-OO.ui.GridLayout.prototype.layout = function ( widths, heights ) {
-       var x, y,
-               xd = 0,
-               yd = 0,
-               cols = widths.length,
-               rows = heights.length;
-
-       // Verify grid is big enough to fit panels
-       if ( cols * rows < this.panels.length ) {
-               throw new Error( 'Grid is not large enough to fit ' + this.panels.length + 'panels' );
-       }
-
-       // Sum up denominators
-       for ( x = 0; x < cols; x++ ) {
-               xd += widths[ x ];
-       }
-       for ( y = 0; y < rows; y++ ) {
-               yd += heights[ y ];
-       }
-       // Store factors
-       this.widths = [];
-       this.heights = [];
-       for ( x = 0; x < cols; x++ ) {
-               this.widths[ x ] = widths[ x ] / xd;
-       }
-       for ( y = 0; y < rows; y++ ) {
-               this.heights[ y ] = heights[ y ] / yd;
-       }
-       // Synchronize view
-       this.update();
-       this.emit( 'layout' );
-};
-
-/**
- * Update panel positions and sizes.
- *
- * @fires update
- */
-OO.ui.GridLayout.prototype.update = function () {
-       var x, y, panel, width, height, dimensions,
-               i = 0,
-               top = 0,
-               left = 0,
-               cols = this.widths.length,
-               rows = this.heights.length;
-
-       for ( y = 0; y < rows; y++ ) {
-               height = this.heights[ y ];
-               for ( x = 0; x < cols; x++ ) {
-                       width = this.widths[ x ];
-                       panel = this.panels[ i ];
-                       dimensions = {
-                               width: ( width * 100 ) + '%',
-                               height: ( height * 100 ) + '%',
-                               top: ( top * 100 ) + '%'
-                       };
-                       // If RTL, reverse:
-                       if ( OO.ui.Element.static.getDir( document ) === 'rtl' ) {
-                               dimensions.right = ( left * 100 ) + '%';
-                       } else {
-                               dimensions.left = ( left * 100 ) + '%';
-                       }
-                       // HACK: Work around IE bug by setting visibility: hidden; if width or height is zero
-                       if ( width === 0 || height === 0 ) {
-                               dimensions.visibility = 'hidden';
-                       } else {
-                               dimensions.visibility = '';
-                       }
-                       panel.$element.css( dimensions );
-                       i++;
-                       left += width;
-               }
-               top += height;
-               left = 0;
-       }
-
-       this.emit( 'update' );
-};
-
-/**
- * Get a panel at a given position.
- *
- * The x and y position is affected by the current grid layout.
- *
- * @param {number} x Horizontal position
- * @param {number} y Vertical position
- * @return {OO.ui.PanelLayout} The panel at the given position
- */
-OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
-       return this.panels[ ( x * this.widths.length ) + y ];
-};
-
 /**
  * Layout with a content and menu area.
  *
@@ -7467,8 +8237,7 @@ OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
  * @param {Object} [config] Configuration options
  * @cfg {number|string} [menuSize='18em'] Size of menu in pixels or any CSS unit
  * @cfg {boolean} [showMenu=true] Show menu
- * @cfg {string} [position='before'] Position of menu, either `top`, `after`, `bottom` or `before`
- * @cfg {boolean} [collapse] Collapse the menu out of view
+ * @cfg {string} [menuPosition='before'] Position of menu: `top`, `after`, `bottom` or `before`
  */
 OO.ui.MenuLayout = function OoUiMenuLayout( config ) {
        var positions = this.constructor.static.menuPositions;
@@ -7650,7 +8419,44 @@ OO.ui.MenuLayout.prototype.getMenuPosition = function () {
 };
 
 /**
- * Layout containing a series of pages.
+ * BookletLayouts contain {@link OO.ui.PageLayout page layouts} as well as
+ * an {@link OO.ui.OutlineSelectWidget outline} that allows users to easily navigate
+ * through the pages and select which one to display. By default, only one page is
+ * displayed at a time and the outline is hidden. When a user navigates to a new page,
+ * the booklet layout automatically focuses on the first focusable element, unless the
+ * default setting is changed. Optionally, booklets can be configured to show
+ * {@link OO.ui.OutlineControlsWidget controls} for adding, moving, and removing items.
+ *
+ *     @example
+ *     // Example of a BookletLayout that contains two PageLayouts.
+ *
+ *     function PageOneLayout( name, config ) {
+ *         PageOneLayout.super.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 );
+ *     PageOneLayout.prototype.setupOutlineItem = function () {
+ *         this.outlineItem.setLabel( 'Page One' );
+ *     };
+ *
+ *     function PageTwoLayout( name, config ) {
+ *         PageTwoLayout.super.call( this, name, config );
+ *         this.$element.append( '<p>Second page</p>' );
+ *     }
+ *     OO.inheritClass( PageTwoLayout, OO.ui.PageLayout );
+ *     PageTwoLayout.prototype.setupOutlineItem = function () {
+ *         this.outlineItem.setLabel( 'Page Two' );
+ *     };
+ *
+ *     var page1 = new PageOneLayout( 'one' ),
+ *         page2 = new PageTwoLayout( 'two' );
+ *
+ *     var booklet = new OO.ui.BookletLayout( {
+ *         outlined: true
+ *     } );
+ *
+ *     booklet.addPages ( [ page1, page2 ] );
+ *     $( 'body' ).append( booklet.$element );
  *
  * @class
  * @extends OO.ui.MenuLayout
@@ -7658,8 +8464,8 @@ OO.ui.MenuLayout.prototype.getMenuPosition = function () {
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {boolean} [continuous=false] Show all pages, one after another
- * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when changing to a page
- * @cfg {boolean} [outlined=false] Show an outline
+ * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new page is displayed.
+ * @cfg {boolean} [outlined=false] Show the outline. The outline is used to navigate through the pages of the booklet.
  * @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages
  */
 OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
@@ -7725,17 +8531,23 @@ OO.inheritClass( OO.ui.BookletLayout, OO.ui.MenuLayout );
 /* Events */
 
 /**
+ * A 'set' event is emitted when a page is {@link #setPage set} to be displayed by the booklet layout.
  * @event set
  * @param {OO.ui.PageLayout} page Current page
  */
 
 /**
+ * An 'add' event is emitted when pages are {@link #addPages added} to the booklet layout.
+ *
  * @event add
  * @param {OO.ui.PageLayout[]} page Added pages
  * @param {number} index Index pages were added at
  */
 
 /**
+ * A 'remove' event is emitted when pages are {@link #clearPages cleared} or
+ * {@link #removePages removed} from the booklet.
+ *
  * @event remove
  * @param {OO.ui.PageLayout[]} pages Removed pages
  */
@@ -7745,6 +8557,7 @@ OO.inheritClass( OO.ui.BookletLayout, OO.ui.MenuLayout );
 /**
  * Handle stack layout focus.
  *
+ * @private
  * @param {jQuery.Event} e Focusin event
  */
 OO.ui.BookletLayout.prototype.onStackLayoutFocus = function ( e ) {
@@ -7764,6 +8577,7 @@ OO.ui.BookletLayout.prototype.onStackLayoutFocus = function ( e ) {
 /**
  * Handle stack layout set events.
  *
+ * @private
  * @param {OO.ui.PanelLayout|null} page The page panel that is now the current panel
  */
 OO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {
@@ -7804,6 +8618,7 @@ OO.ui.BookletLayout.prototype.focus = function () {
 /**
  * Handle outline widget select events.
  *
+ * @private
  * @param {OO.ui.OptionWidget|null} item Selected item
  */
 OO.ui.BookletLayout.prototype.onOutlineSelectWidgetSelect = function ( item ) {
@@ -7815,7 +8630,7 @@ OO.ui.BookletLayout.prototype.onOutlineSelectWidgetSelect = function ( item ) {
 /**
  * Check if booklet has an outline.
  *
- * @return {boolean}
+ * @return {boolean} Booklet has an outline
  */
 OO.ui.BookletLayout.prototype.isOutlined = function () {
        return this.outlined;
@@ -7824,7 +8639,7 @@ OO.ui.BookletLayout.prototype.isOutlined = function () {
 /**
  * Check if booklet has editing controls.
  *
- * @return {boolean}
+ * @return {boolean} Booklet is editable
  */
 OO.ui.BookletLayout.prototype.isEditable = function () {
        return this.editable;
@@ -7833,7 +8648,7 @@ OO.ui.BookletLayout.prototype.isEditable = function () {
 /**
  * Check if booklet has a visible outline.
  *
- * @return {boolean}
+ * @return {boolean} Outline is visible
  */
 OO.ui.BookletLayout.prototype.isOutlineVisible = function () {
        return this.outlined && this.outlineVisible;
@@ -7856,10 +8671,10 @@ OO.ui.BookletLayout.prototype.toggleOutline = function ( show ) {
 };
 
 /**
- * Get the outline widget.
+ * Get the page closest to the specified page.
  *
- * @param {OO.ui.PageLayout} page Page to be selected
- * @return {OO.ui.PageLayout|null} Closest page to another
+ * @param {OO.ui.PageLayout} page Page to use as a reference point
+ * @return {OO.ui.PageLayout|null} Page closest to the specified page
  */
 OO.ui.BookletLayout.prototype.getClosestPage = function ( page ) {
        var next, prev, level,
@@ -7892,14 +8707,18 @@ OO.ui.BookletLayout.prototype.getClosestPage = function ( page ) {
 /**
  * Get the outline widget.
  *
- * @return {OO.ui.OutlineSelectWidget|null} Outline widget, or null if booklet has no outline
+ * If the booklet is not outlined, the method will return `null`.
+ *
+ * @return {OO.ui.OutlineSelectWidget|null} Outline widget, or null if the booklet is not outlined
  */
 OO.ui.BookletLayout.prototype.getOutline = function () {
        return this.outlineSelectWidget;
 };
 
 /**
- * Get the outline controls widget. If the outline is not editable, null is returned.
+ * Get the outline controls widget.
+ *
+ * If the outline is not editable, the method will return `null`.
  *
  * @return {OO.ui.OutlineControlsWidget|null} The outline controls widget.
  */
@@ -7908,7 +8727,7 @@ OO.ui.BookletLayout.prototype.getOutlineControls = function () {
 };
 
 /**
- * Get a page by name.
+ * Get a page by its symbolic name.
  *
  * @param {string} name Symbolic name of page
  * @return {OO.ui.PageLayout|undefined} Page, if found
@@ -7918,7 +8737,7 @@ OO.ui.BookletLayout.prototype.getPage = function ( name ) {
 };
 
 /**
- * Get the current page
+ * Get the current page.
  *
  * @return {OO.ui.PageLayout|undefined} Current page, if found
  */
@@ -7928,22 +8747,22 @@ OO.ui.BookletLayout.prototype.getCurrentPage = function () {
 };
 
 /**
- * Get the current page name.
+ * Get the symbolic name of the current page.
  *
- * @return {string|null} Current page name
+ * @return {string|null} Symbolic name of the current page
  */
 OO.ui.BookletLayout.prototype.getCurrentPageName = function () {
        return this.currentPageName;
 };
 
 /**
- * Add a page to the layout.
+ * Add pages to the booklet layout
  *
  * When pages are added with the same names as existing pages, the existing pages will be
  * automatically removed before the new pages are added.
  *
  * @param {OO.ui.PageLayout[]} pages Pages to add
- * @param {number} index Index to insert pages after
+ * @param {number} index Index of the insertion point
  * @fires add
  * @chainable
  */
@@ -7994,8 +8813,11 @@ OO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {
 };
 
 /**
- * Remove a page from the layout.
+ * Remove the specified pages from the booklet layout.
+ *
+ * To remove all pages from the booklet, you may wish to use the #clearPages method instead.
  *
+ * @param {OO.ui.PageLayout[]} pages An array of pages to remove
  * @fires remove
  * @chainable
  */
@@ -8023,7 +8845,9 @@ OO.ui.BookletLayout.prototype.removePages = function ( pages ) {
 };
 
 /**
- * Clear all pages from the layout.
+ * Clear all pages from the booklet layout.
+ *
+ * To remove only a subset of pages from the booklet, use the #removePages method.
  *
  * @fires remove
  * @chainable
@@ -8048,7 +8872,7 @@ OO.ui.BookletLayout.prototype.clearPages = function () {
 };
 
 /**
- * Set the current page by name.
+ * Set the current page by symbolic name.
  *
  * @fires set
  * @param {string} name Symbolic name of page
@@ -8100,7 +8924,18 @@ OO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {
 };
 
 /**
- * Layout that expands to cover the entire area of its parent, with optional scrolling and padding.
+ * PanelLayouts expand to cover the entire area of their parent. They can be configured with scrolling, padding,
+ * and a frame, and are often used together with {@link OO.ui.StackLayout StackLayouts}.
+ *
+ *     @example
+ *     // Example of a panel layout
+ *     var panel = new OO.ui.PanelLayout( {
+ *         expanded: false,
+ *         framed: true,
+ *         padded: true,
+ *         $content: $( '<p>A panel layout with padding and a frame.</p>' )
+ *     } );
+ *     $( 'body' ).append( panel.$element );
  *
  * @class
  * @extends OO.ui.Layout
@@ -8108,15 +8943,17 @@ OO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {boolean} [scrollable=false] Allow vertical scrolling
- * @cfg {boolean} [padded=false] Pad the content from the edges
- * @cfg {boolean} [expanded=true] Expand size to fill the entire parent element
+ * @cfg {boolean} [padded=false] Add padding between the content and the edges of the panel.
+ * @cfg {boolean} [expanded=true] Expand the panel to fill the entire parent element.
+ * @cfg {boolean} [framed=false] Render the panel with a frame to visually separate it from outside content.
  */
 OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
        // Configuration initialization
        config = $.extend( {
                scrollable: false,
                padded: false,
-               expanded: true
+               expanded: true,
+               framed: false
        }, config );
 
        // Parent constructor
@@ -8133,6 +8970,9 @@ OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
        if ( config.expanded ) {
                this.$element.addClass( 'oo-ui-panelLayout-expanded' );
        }
+       if ( config.framed ) {
+               this.$element.addClass( 'oo-ui-panelLayout-framed' );
+       }
 };
 
 /* Setup */
@@ -8140,7 +8980,13 @@ OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
 OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
 
 /**
- * Page within an booklet layout.
+ * PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that users can select and display
+ * from the booklet's optional {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated directly,
+ * rather extended to include the required content and functionality.
+ *
+ * Each page must have a unique symbolic name, which is passed to the constructor. In addition, the page's outline
+ * item is customized (with a label, outline level, etc.) using the #setupOutlineItem method. See
+ * {@link OO.ui.BookletLayout BookletLayout} for an example.
  *
  * @class
  * @extends OO.ui.PanelLayout
@@ -8150,6 +8996,12 @@ OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
  * @param {Object} [config] Configuration options
  */
 OO.ui.PageLayout = function OoUiPageLayout( name, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( name ) && config === undefined ) {
+               config = name;
+               name = config.name;
+       }
+
        // Configuration initialization
        config = $.extend( { scrollable: true }, config );
 
@@ -8172,6 +9024,9 @@ OO.inheritClass( OO.ui.PageLayout, OO.ui.PanelLayout );
 /* Events */
 
 /**
+ * An 'active' event is emitted when the page becomes active. Pages become active when they are
+ * shown in a booklet layout that is configured to display only one page at a time.
+ *
  * @event active
  * @param {boolean} active Page is active
  */
@@ -8179,7 +9034,7 @@ OO.inheritClass( OO.ui.PageLayout, OO.ui.PanelLayout );
 /* Methods */
 
 /**
- * Get page name.
+ * Get the symbolic name of the page.
  *
  * @return {string} Symbolic name of page
  */
@@ -8190,6 +9045,9 @@ OO.ui.PageLayout.prototype.getName = function () {
 /**
  * Check if page is active.
  *
+ * Pages become active when they are shown in a {@link OO.ui.BookletLayout booklet layout} that is configured to display
+ * only one page at a time. Additional CSS is applied to the page's outline item to reflect the active state.
+ *
  * @return {boolean} Page is active
  */
 OO.ui.PageLayout.prototype.isActive = function () {
@@ -8199,21 +9057,23 @@ OO.ui.PageLayout.prototype.isActive = function () {
 /**
  * Get outline item.
  *
- * @return {OO.ui.OutlineOptionWidget|null} Outline item widget
+ * The outline item allows users to access the page from the booklet's outline
+ * navigation. The outline item itself can be customized (with a label, level, etc.) using the #setupOutlineItem method.
+ *
+ * @return {OO.ui.OutlineOptionWidget|null} Outline option widget
  */
 OO.ui.PageLayout.prototype.getOutlineItem = function () {
        return this.outlineItem;
 };
 
 /**
- * Set outline item.
+ * Set or unset the outline item.
  *
- * @localdoc Subclasses should override #setupOutlineItem instead of this method to adjust the
- *   outline item as desired; this method is called for setting (with an object) and unsetting
- *   (with null) and overriding methods would have to check the value of `outlineItem` to avoid
- *   operating on null instead of an OO.ui.OutlineOptionWidget object.
+ * Specify an {@link OO.ui.OutlineOptionWidget outline option} to set it,
+ * or `null` to clear the outline item. To customize the outline item itself (e.g., to set a label or outline
+ * level), use #setupOutlineItem instead of this method.
  *
- * @param {OO.ui.OutlineOptionWidget|null} outlineItem Outline item widget, null to clear
+ * @param {OO.ui.OutlineOptionWidget|null} outlineItem Outline option widget, null to clear
  * @chainable
  */
 OO.ui.PageLayout.prototype.setOutlineItem = function ( outlineItem ) {
@@ -8225,11 +9085,13 @@ OO.ui.PageLayout.prototype.setOutlineItem = function ( outlineItem ) {
 };
 
 /**
- * Setup outline item.
+ * Set up the outline item.
  *
- * @localdoc Subclasses should override this method to adjust the outline item as desired.
+ * Use this method to customize the outline item (e.g., to add a label or outline level). To set or unset
+ * the outline item itself (with an {@link OO.ui.OutlineOptionWidget outline option} or `null`), use
+ * the #setOutlineItem method instead.
  *
- * @param {OO.ui.OutlineOptionWidget} outlineItem Outline item widget to setup
+ * @param {OO.ui.OutlineOptionWidget} outlineItem Outline option widget to set up
  * @chainable
  */
 OO.ui.PageLayout.prototype.setupOutlineItem = function () {
@@ -8237,9 +9099,13 @@ OO.ui.PageLayout.prototype.setupOutlineItem = function () {
 };
 
 /**
- * Set page active state.
+ * Set the page to its 'active' state.
+ *
+ * Pages become active when they are shown in a booklet layout that is configured to display only one page at a time. Additional
+ * CSS is applied to the outline item to reflect the page's active state. Outside of the booklet
+ * context, setting the active state on a page does nothing.
  *
- * @param {boolean} Page is active
+ * @param {boolean} value Page is active
  * @fires active
  */
 OO.ui.PageLayout.prototype.setActive = function ( active ) {
@@ -8253,7 +9119,28 @@ OO.ui.PageLayout.prototype.setActive = function ( active ) {
 };
 
 /**
- * Layout containing a series of mutually exclusive pages.
+ * StackLayouts contain a series of {@link OO.ui.PanelLayout panel layouts}. By default, only one panel is displayed
+ * at a time, though the stack layout can also be configured to show all contained panels, one after another,
+ * by setting the #continuous option to 'true'.
+ *
+ *     @example
+ *     // A stack layout with two panels, configured to be displayed continously
+ *     var myStack = new OO.ui.StackLayout( {
+ *         items: [
+ *             new OO.ui.PanelLayout( {
+ *                 $content: $( '<p>Panel One</p>' ),
+ *                 padded: true,
+ *                 framed: true
+ *             } ),
+ *             new OO.ui.PanelLayout( {
+ *                 $content: $( '<p>Panel Two</p>' ),
+ *                 padded: true,
+ *                 framed: true
+ *             } )
+ *         ],
+ *         continuous: true
+ *     } );
+ *     $( 'body' ).append( myStack.$element );
  *
  * @class
  * @extends OO.ui.PanelLayout
@@ -8261,8 +9148,8 @@ OO.ui.PageLayout.prototype.setActive = function ( active ) {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {boolean} [continuous=false] Show all pages, one after another
- * @cfg {OO.ui.Layout[]} [items] Layouts to add
+ * @cfg {boolean} [continuous=false] Show all panels, one after another. By default, only one panel is displayed at a time.
+ * @cfg {OO.ui.Layout[]} [items] Panel layouts to add to the stack layout.
  */
 OO.ui.StackLayout = function OoUiStackLayout( config ) {
        // Configuration initialization
@@ -8283,7 +9170,7 @@ OO.ui.StackLayout = function OoUiStackLayout( config ) {
        if ( this.continuous ) {
                this.$element.addClass( 'oo-ui-stackLayout-continuous' );
        }
-       if ( $.isArray( config.items ) ) {
+       if ( Array.isArray( config.items ) ) {
                this.addItems( config.items );
        }
 };
@@ -8296,14 +9183,17 @@ OO.mixinClass( OO.ui.StackLayout, OO.ui.GroupElement );
 /* Events */
 
 /**
+ * A 'set' event is emitted when panels are {@link #addItems added}, {@link #removeItems removed},
+ * {@link #clearItems cleared} or {@link #setItem displayed}.
+ *
  * @event set
- * @param {OO.ui.Layout|null} item Current item or null if there is no longer a layout shown
+ * @param {OO.ui.Layout|null} item Current panel or `null` if no panel is shown
  */
 
 /* Methods */
 
 /**
- * Get the current item.
+ * Get the current panel.
  *
  * @return {OO.ui.Layout|null}
  */
@@ -8329,12 +9219,14 @@ OO.ui.StackLayout.prototype.unsetCurrentItem = function () {
 };
 
 /**
- * Add items.
+ * Add panel layouts to the stack layout.
  *
- * Adding an existing item (by value) will move it.
+ * Panels will be added to the end of the stack layout array unless the optional index parameter specifies a different
+ * insertion point. Adding a panel that is already in the stack will move it to the end of the array or the point specified
+ * by the index.
  *
- * @param {OO.ui.Layout[]} items Items to add
- * @param {number} [index] Index to insert items after
+ * @param {OO.ui.Layout[]} items Panels to add
+ * @param {number} [index] Index of the insertion point
  * @chainable
  */
 OO.ui.StackLayout.prototype.addItems = function ( items, index ) {
@@ -8352,11 +9244,12 @@ OO.ui.StackLayout.prototype.addItems = function ( items, index ) {
 };
 
 /**
- * Remove items.
+ * Remove the specified panels from the stack layout.
  *
- * Items will be detached, not removed, so they can be used later.
+ * Removed panels are detached from the DOM, not removed, so that they may be reused. To remove all panels,
+ * you may wish to use the #clearItems method instead.
  *
- * @param {OO.ui.Layout[]} items Items to remove
+ * @param {OO.ui.Layout[]} items Panels to remove
  * @chainable
  * @fires set
  */
@@ -8376,9 +9269,10 @@ OO.ui.StackLayout.prototype.removeItems = function ( items ) {
 };
 
 /**
- * Clear all items.
+ * Clear all panels from the stack layout.
  *
- * Items will be detached, not removed, so they can be used later.
+ * Cleared panels are detached from the DOM, not removed, so that they may be reused. To remove only
+ * a subset of panels, use the #removeItems method.
  *
  * @chainable
  * @fires set
@@ -8391,14 +9285,11 @@ OO.ui.StackLayout.prototype.clearItems = function () {
 };
 
 /**
- * Show item.
- *
- * Any currently shown item will be hidden.
+ * Show the specified panel.
  *
- * FIXME: If the passed item to show has not been added in the items list, then
- * this method drops it and unsets the current item.
+ * If another panel is currently displayed, it will be hidden.
  *
- * @param {OO.ui.Layout} item Item to show
+ * @param {OO.ui.Layout} item Panel to show
  * @chainable
  * @fires set
  */
@@ -8423,6 +9314,7 @@ OO.ui.StackLayout.prototype.setItem = function ( item ) {
  * Ensure all items are hidden except for the selected one.
  * This method does nothing when the stack is continuous.
  *
+ * @private
  * @param {OO.ui.Layout[]} items Item list iterate over
  * @param {OO.ui.Layout} [selectedItem] Selected item to show
  */
@@ -8452,6 +9344,12 @@ OO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem )
  * @param {Object} [config] Configuration options
  */
 OO.ui.BarToolGroup = function OoUiBarToolGroup( toolbar, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+               config = toolbar;
+               toolbar = config.toolbar;
+       }
+
        // Parent constructor
        OO.ui.BarToolGroup.super.call( this, toolbar, config );
 
@@ -8489,6 +9387,12 @@ OO.ui.BarToolGroup.static.name = 'bar';
  * @cfg {string} [header] Text to display at the top of the pop-up
  */
 OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+               config = toolbar;
+               toolbar = config.toolbar;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -8510,8 +9414,8 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
 
        // Events
        this.$handle.on( {
-               'mousedown touchstart': this.onHandlePointerDown.bind( this ),
-               'mouseup touchend': this.onHandlePointerUp.bind( this )
+               mousedown: this.onHandlePointerDown.bind( this ),
+               mouseup: this.onHandlePointerUp.bind( this )
        } );
 
        // Initialization
@@ -8576,10 +9480,8 @@ OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {
  * @inheritdoc
  */
 OO.ui.PopupToolGroup.prototype.onPointerUp = function ( e ) {
-       // e.which is 0 for touch events, 1 for left mouse button
        // Only close toolgroup when a tool was actually selected
-       // FIXME: this duplicates logic from the parent class
-       if ( !this.isDisabled() && e.which <= 1 && this.pressed && this.pressed === this.getTargetTool( e ) ) {
+       if ( !this.isDisabled() && e.which === 1 && this.pressed && this.pressed === this.getTargetTool( e ) ) {
                this.setActive( false );
        }
        return OO.ui.PopupToolGroup.super.prototype.onPointerUp.call( this, e );
@@ -8600,8 +9502,7 @@ OO.ui.PopupToolGroup.prototype.onHandlePointerUp = function () {
  * @param {jQuery.Event} e Mouse down event
  */
 OO.ui.PopupToolGroup.prototype.onHandlePointerDown = function ( e ) {
-       // e.which is 0 for touch events, 1 for left mouse button
-       if ( !this.isDisabled() && e.which <= 1 ) {
+       if ( !this.isDisabled() && e.which === 1 ) {
                this.setActive( !this.active );
        }
        return false;
@@ -8660,6 +9561,12 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
  * @cfg {boolean} [expanded=false] Whether the collapsible tools are expanded by default
  */
 OO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+               config = toolbar;
+               toolbar = config.toolbar;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -8779,6 +9686,12 @@ OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {
  * @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;
+               toolbar = config.toolbar;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -8832,12 +9745,18 @@ OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
  * @mixins OO.ui.PopupElement
  *
  * @constructor
- * @param {OO.ui.Toolbar} toolbar
+ * @param {OO.ui.ToolGroup} toolGroup
  * @param {Object} [config] Configuration options
  */
-OO.ui.PopupTool = function OoUiPopupTool( toolbar, config ) {
+OO.ui.PopupTool = function OoUiPopupTool( toolGroup, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolGroup ) && config === undefined ) {
+               config = toolGroup;
+               toolGroup = config.toolGroup;
+       }
+
        // Parent constructor
-       OO.ui.PopupTool.super.call( this, toolbar, config );
+       OO.ui.PopupTool.super.call( this, toolGroup, config );
 
        // Mixin constructors
        OO.ui.PopupElement.call( this, config );
@@ -8877,11 +9796,96 @@ OO.ui.PopupTool.prototype.onUpdateState = function () {
        this.setActive( false );
 };
 
+/**
+ * Tool that has a tool group inside. This is a bad workaround for the lack of proper hierarchical
+ * menus in toolbars (T74159).
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Tool
+ *
+ * @constructor
+ * @param {OO.ui.ToolGroup} toolGroup
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.ToolGroupTool = function OoUiToolGroupTool( toolGroup, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( toolGroup ) && config === undefined ) {
+               config = toolGroup;
+               toolGroup = config.toolGroup;
+       }
+
+       // Parent constructor
+       OO.ui.ToolGroupTool.super.call( this, toolGroup, config );
+
+       // Properties
+       this.innerToolGroup = this.createGroup( this.constructor.static.groupConfig );
+
+       // Initialization
+       this.$link.remove();
+       this.$element
+               .addClass( 'oo-ui-toolGroupTool' )
+               .append( this.innerToolGroup.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ToolGroupTool, OO.ui.Tool );
+
+/* Static Properties */
+
+/**
+ * Tool group configuration. See OO.ui.Toolbar#setup for the accepted values.
+ *
+ * @property {Object.<string,Array>}
+ */
+OO.ui.ToolGroupTool.static.groupConfig = {};
+
+/* Methods */
+
+/**
+ * Handle the tool being selected.
+ *
+ * @inheritdoc
+ */
+OO.ui.ToolGroupTool.prototype.onSelect = function () {
+       this.innerToolGroup.setActive( !this.innerToolGroup.active );
+       return false;
+};
+
+/**
+ * Handle the toolbar state being updated.
+ *
+ * @inheritdoc
+ */
+OO.ui.ToolGroupTool.prototype.onUpdateState = function () {
+       this.setActive( false );
+};
+
+/**
+ * Build a OO.ui.ToolGroup from the configuration.
+ *
+ * @param {Object.<string,Array>} group Tool group configuration. See OO.ui.Toolbar#setup for the
+ *   accepted values.
+ * @return {OO.ui.ListToolGroup}
+ */
+OO.ui.ToolGroupTool.prototype.createGroup = function ( group ) {
+       if ( group.include === '*' ) {
+               // Apply defaults to catch-all groups
+               if ( group.label === undefined ) {
+                       group.label = OO.ui.msg( 'ooui-toolbar-more' );
+               }
+       }
+
+       return this.toolbar.getToolGroupFactory().create( 'list', this.toolbar, group );
+};
+
 /**
  * Mixin for OO.ui.Widget subclasses to provide OO.ui.GroupElement.
  *
  * Use together with OO.ui.ItemWidget to make disabled state inheritable.
  *
+ * @private
  * @abstract
  * @class
  * @extends OO.ui.GroupElement
@@ -8933,6 +9937,7 @@ OO.ui.GroupWidget.prototype.setDisabled = function ( disabled ) {
  *
  * Use together with OO.ui.GroupWidget to make disabled state inheritable.
  *
+ * @private
  * @abstract
  * @class
  *
@@ -8974,321 +9979,9 @@ OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
 };
 
 /**
- * Mixin that adds a menu showing suggested values for a text input.
- *
- * Subclasses must handle `select` and `choose` events on #lookupMenu to make use of selections.
- *
- * Subclasses that set the value of #lookupInput from their `choose` or `select` handler should
- * be aware that this will cause new suggestions to be looked up for the new value. If this is
- * not desired, disable lookups with #setLookupsDisabled, then set the value, then re-enable lookups.
- *
- * @class
- * @abstract
- * @deprecated Use OO.ui.LookupElement instead.
- *
- * @constructor
- * @param {OO.ui.TextInputWidget} input Input widget
- * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$overlay] Overlay for dropdown; defaults to relative positioning
- * @cfg {jQuery} [$container=input.$element] Element to render menu under
- */
-OO.ui.LookupInputWidget = function OoUiLookupInputWidget( input, config ) {
-       // Configuration initialization
-       config = config || {};
-
-       // Properties
-       this.lookupInput = input;
-       this.$overlay = config.$overlay || this.$element;
-       this.lookupMenu = new OO.ui.TextInputMenuSelectWidget( this, {
-               input: this.lookupInput,
-               $container: config.$container
-       } );
-       this.lookupCache = {};
-       this.lookupQuery = null;
-       this.lookupRequest = null;
-       this.lookupsDisabled = false;
-       this.lookupInputFocused = false;
-
-       // Events
-       this.lookupInput.$input.on( {
-               focus: this.onLookupInputFocus.bind( this ),
-               blur: this.onLookupInputBlur.bind( this ),
-               mousedown: this.onLookupInputMouseDown.bind( this )
-       } );
-       this.lookupInput.connect( this, { change: 'onLookupInputChange' } );
-       this.lookupMenu.connect( this, { toggle: 'onLookupMenuToggle' } );
-
-       // Initialization
-       this.$element.addClass( 'oo-ui-lookupWidget' );
-       this.lookupMenu.$element.addClass( 'oo-ui-lookupWidget-menu' );
-       this.$overlay.append( this.lookupMenu.$element );
-};
-
-/* Methods */
-
-/**
- * Handle input focus event.
- *
- * @param {jQuery.Event} e Input focus event
- */
-OO.ui.LookupInputWidget.prototype.onLookupInputFocus = function () {
-       this.lookupInputFocused = true;
-       this.populateLookupMenu();
-};
-
-/**
- * Handle input blur event.
- *
- * @param {jQuery.Event} e Input blur event
- */
-OO.ui.LookupInputWidget.prototype.onLookupInputBlur = function () {
-       this.closeLookupMenu();
-       this.lookupInputFocused = false;
-};
-
-/**
- * Handle input mouse down event.
- *
- * @param {jQuery.Event} e Input mouse down event
- */
-OO.ui.LookupInputWidget.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
-       // clicking into the input is handled by the focus handler.
-       if ( this.lookupInputFocused && !this.lookupMenu.isVisible() ) {
-               this.populateLookupMenu();
-       }
-};
-
-/**
- * Handle input change event.
- *
- * @param {string} value New input value
- */
-OO.ui.LookupInputWidget.prototype.onLookupInputChange = function () {
-       if ( this.lookupInputFocused ) {
-               this.populateLookupMenu();
-       }
-};
-
-/**
- * Handle the lookup menu being shown/hidden.
- * @param {boolean} visible Whether the lookup menu is now visible.
- */
-OO.ui.LookupInputWidget.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
-               // MenuSelectWidget will close itself when the user presses Esc.
-               this.abortLookupRequest();
-               this.lookupMenu.clearItems();
-       }
-};
-
-/**
- * Get lookup menu.
- *
- * @return {OO.ui.TextInputMenuSelectWidget}
- */
-OO.ui.LookupInputWidget.prototype.getLookupMenu = function () {
-       return this.lookupMenu;
-};
-
-/**
- * Disable or re-enable lookups.
- *
- * When lookups are disabled, calls to #populateLookupMenu will be ignored.
- *
- * @param {boolean} disabled Disable lookups
- */
-OO.ui.LookupInputWidget.prototype.setLookupsDisabled = function ( disabled ) {
-       this.lookupsDisabled = !!disabled;
-};
-
-/**
- * Open the menu. If there are no entries in the menu, this does nothing.
- *
- * @chainable
- */
-OO.ui.LookupInputWidget.prototype.openLookupMenu = function () {
-       if ( !this.lookupMenu.isEmpty() ) {
-               this.lookupMenu.toggle( true );
-       }
-       return this;
-};
-
-/**
- * Close the menu, empty it, and abort any pending request.
- *
- * @chainable
- */
-OO.ui.LookupInputWidget.prototype.closeLookupMenu = function () {
-       this.lookupMenu.toggle( false );
-       this.abortLookupRequest();
-       this.lookupMenu.clearItems();
-       return this;
-};
-
-/**
- * Request menu items based on the input's current value, and when they arrive,
- * populate the menu with these items and show the menu.
- *
- * If lookups have been disabled with #setLookupsDisabled, this function does nothing.
- *
- * @chainable
- */
-OO.ui.LookupInputWidget.prototype.populateLookupMenu = function () {
-       var widget = this,
-               value = this.lookupInput.getValue();
-
-       if ( this.lookupsDisabled ) {
-               return;
-       }
-
-       // If the input is empty, clear the menu
-       if ( value === '' ) {
-               this.closeLookupMenu();
-       // Skip population if there is already a request pending for the current value
-       } else if ( value !== this.lookupQuery ) {
-               this.getLookupMenuItems()
-                       .done( function ( items ) {
-                               widget.lookupMenu.clearItems();
-                               if ( items.length ) {
-                                       widget.lookupMenu
-                                               .addItems( items )
-                                               .toggle( true );
-                                       widget.initializeLookupMenuSelection();
-                               } else {
-                                       widget.lookupMenu.toggle( false );
-                               }
-                       } )
-                       .fail( function () {
-                               widget.lookupMenu.clearItems();
-                       } );
-       }
-
-       return this;
-};
-
-/**
- * Select and highlight the first selectable item in the menu.
- *
- * @chainable
- */
-OO.ui.LookupInputWidget.prototype.initializeLookupMenuSelection = function () {
-       if ( !this.lookupMenu.getSelectedItem() ) {
-               this.lookupMenu.selectItem( this.lookupMenu.getFirstSelectableItem() );
-       }
-       this.lookupMenu.highlightItem( this.lookupMenu.getSelectedItem() );
-};
-
-/**
- * Get lookup menu items for the current query.
- *
- * @return {jQuery.Promise} Promise object which will be passed menu items as the first argument
- * of 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.LookupInputWidget.prototype.getLookupMenuItems = function () {
-       var widget = this,
-               value = this.lookupInput.getValue(),
-               deferred = $.Deferred(),
-               ourRequest;
-
-       this.abortLookupRequest();
-       if ( Object.prototype.hasOwnProperty.call( this.lookupCache, value ) ) {
-               deferred.resolve( this.getLookupMenuItemsFromData( this.lookupCache[ value ] ) );
-       } else {
-               this.lookupInput.pushPending();
-               this.lookupQuery = value;
-               ourRequest = this.lookupRequest = this.getLookupRequest();
-               ourRequest
-                       .always( function () {
-                               // We need to pop pending even if this is an old request, otherwise
-                               // the widget will remain pending forever.
-                               // TODO: this assumes that an aborted request will fail or succeed soon after
-                               // being aborted, or at least eventually. It would be nice if we could popPending()
-                               // at abort time, but only if we knew that we hadn't already called popPending()
-                               // for that request.
-                               widget.lookupInput.popPending();
-                       } )
-                       .done( function ( data ) {
-                               // If this is an old request (and aborting it somehow caused it to still succeed),
-                               // ignore its success completely
-                               if ( ourRequest === widget.lookupRequest ) {
-                                       widget.lookupQuery = null;
-                                       widget.lookupRequest = null;
-                                       widget.lookupCache[ value ] = widget.getLookupCacheItemFromData( data );
-                                       deferred.resolve( widget.getLookupMenuItemsFromData( widget.lookupCache[ value ] ) );
-                               }
-                       } )
-                       .fail( function () {
-                               // If this is an old request (or a request failing because it's being aborted),
-                               // ignore its failure completely
-                               if ( ourRequest === widget.lookupRequest ) {
-                                       widget.lookupQuery = null;
-                                       widget.lookupRequest = null;
-                                       deferred.reject();
-                               }
-                       } );
-       }
-       return deferred.promise();
-};
-
-/**
- * Abort the currently pending lookup request, if any.
- */
-OO.ui.LookupInputWidget.prototype.abortLookupRequest = function () {
-       var oldRequest = this.lookupRequest;
-       if ( oldRequest ) {
-               // First unset this.lookupRequest to the fail handler will notice
-               // that the request is no longer current
-               this.lookupRequest = null;
-               this.lookupQuery = null;
-               oldRequest.abort();
-       }
-};
-
-/**
- * Get a new request object of the current lookup query value.
- *
- * @abstract
- * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method
- */
-OO.ui.LookupInputWidget.prototype.getLookupRequest = function () {
-       // Stub, implemented in subclass
-       return null;
-};
-
-/**
- * Get a list of menu item widgets from the data stored by the lookup request's done handler.
- *
- * @abstract
- * @param {Mixed} data Cached result data, usually an array
- * @return {OO.ui.MenuOptionWidget[]} Menu items
- */
-OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
-       // Stub, implemented in subclass
-       return [];
-};
-
-/**
- * Get lookup cache item from server response data.
- *
- * @abstract
- * @param {Mixed} data Response from server
- * @return {Mixed} Cached result data
- */
-OO.ui.LookupInputWidget.prototype.getLookupCacheItemFromData = function () {
-       // Stub, implemented in subclass
-       return [];
-};
-
-/**
- * Set of controls for an OO.ui.OutlineSelectWidget.
- *
+ * 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 BookletLayouts}.####
  *
  * @class
  * @extends OO.ui.Widget
@@ -9298,8 +9991,17 @@ OO.ui.LookupInputWidget.prototype.getLookupCacheItemFromData = function () {
  * @constructor
  * @param {OO.ui.OutlineSelectWidget} outline Outline to control
  * @param {Object} [config] Configuration options
+ * @cfg {Object} [abilities] List of abilties
+ * @cfg {boolean} [abilities.move=true] Allow moving movable items
+ * @cfg {boolean} [abilities.remove=true] Allow removing removable items
  */
 OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( outline ) && config === undefined ) {
+               config = outline;
+               outline = config.outline;
+       }
+
        // Configuration initialization
        config = $.extend( { icon: 'add' }, config );
 
@@ -9328,6 +10030,7 @@ OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, confi
                icon: 'remove',
                title: OO.ui.msg( 'ooui-outline-control-remove' )
        } );
+       this.abilities = { move: true, remove: true };
 
        // Events
        outline.connect( this, {
@@ -9346,6 +10049,7 @@ OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, confi
                .addClass( 'oo-ui-outlineControlsWidget-movers' )
                .append( this.removeButton.$element, this.upButton.$element, this.downButton.$element );
        this.$element.append( this.$icon, this.$group, this.$movers );
+       this.setAbilities( config.abilities || {} );
 };
 
 /* Setup */
@@ -9368,14 +10072,35 @@ OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.IconElement );
 /* Methods */
 
 /**
+ * Set abilities.
+ *
+ * @param {Object} abilities List of abilties
+ * @param {boolean} [abilities.move] Allow moving movable items
+ * @param {boolean} [abilities.remove] Allow removing removable items
+ */
+OO.ui.OutlineControlsWidget.prototype.setAbilities = function ( abilities ) {
+       var ability;
+
+       for ( ability in this.abilities ) {
+               if ( abilities[ability] !== undefined ) {
+                       this.abilities[ability] = !!abilities[ability];
+               }
+       }
+
+       this.onOutlineChange();
+};
+
+/**
+ *
+ * @private
  * Handle outline change events.
  */
 OO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {
        var i, len, firstMovable, lastMovable,
                items = this.outline.getItems(),
                selectedItem = this.outline.getSelectedItem(),
-               movable = selectedItem && selectedItem.isMovable(),
-               removable = selectedItem && selectedItem.isRemovable();
+               movable = this.abilities.move && selectedItem && selectedItem.isMovable(),
+               removable = this.abilities.remove && selectedItem && selectedItem.isRemovable();
 
        if ( movable ) {
                i = -1;
@@ -9400,14 +10125,16 @@ OO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {
 };
 
 /**
- * Mixin for widgets with a boolean on/off state.
+ * ToggleWidget is mixed into other classes to create widgets with an on/off state.
+ * Please see OO.ui.ToggleButtonWidget and OO.ui.ToggleSwitchWidget for examples.
  *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {boolean} [value=false] Initial value
+ * @cfg {boolean} [value=false] The toggle’s initial on/off state.
+ *  By default, the toggle is in the 'off' state.
  */
 OO.ui.ToggleWidget = function OoUiToggleWidget( config ) {
        // Configuration initialization
@@ -9425,24 +10152,27 @@ OO.ui.ToggleWidget = function OoUiToggleWidget( config ) {
 
 /**
  * @event change
- * @param {boolean} value Changed value
+ *
+ * A change event is emitted when the on/off state of the toggle changes.
+ *
+ * @param {boolean} value Value representing the new state of the toggle
  */
 
 /* Methods */
 
 /**
- * Get the value of the toggle.
+ * Get the value representing the toggle’s state.
  *
- * @return {boolean}
+ * @return {boolean} The on/off state of the toggle
  */
 OO.ui.ToggleWidget.prototype.getValue = function () {
        return this.value;
 };
 
 /**
- * Set the value of the toggle.
+ * Set the state of the toggle: `true` for 'on', `false' for 'off'.
  *
- * @param {boolean} value New value
+ * @param {boolean} value The state of the toggle
  * @fires change
  * @chainable
  */
@@ -9459,9 +10189,28 @@ OO.ui.ToggleWidget.prototype.setValue = function ( value ) {
 };
 
 /**
- * Group widget for multiple related buttons.
- *
- * Use together with OO.ui.ButtonWidget.
+ * A ButtonGroupWidget groups related buttons and is used together with OO.ui.ButtonWidget and
+ * its subclasses. Each button in a group is addressed by a unique reference. Buttons can be added,
+ * removed, and cleared from the group.
+ *
+ *     @example
+ *     // Example: A ButtonGroupWidget with two buttons
+ *     var button1 = new OO.ui.PopupButtonWidget( {
+ *         label: 'Select a category',
+ *         icon: 'menu',
+ *         popup: {
+ *             $content: $( '<p>List of categories...</p>' ),
+ *             padded: true,
+ *             align: 'left'
+ *         }
+ *     } );
+ *     var button2 = new OO.ui.ButtonWidget( {
+ *         label: 'Add item'
+ *     });
+ *     var buttonGroup = new OO.ui.ButtonGroupWidget( {
+ *         items: [button1, button2]
+ *     } );
+ *     $( 'body' ).append( buttonGroup.$element );
  *
  * @class
  * @extends OO.ui.Widget
@@ -9483,7 +10232,7 @@ OO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {
 
        // Initialization
        this.$element.addClass( 'oo-ui-buttonGroupWidget' );
-       if ( $.isArray( config.items ) ) {
+       if ( Array.isArray( config.items ) ) {
                this.addItems( config.items );
        }
 };
@@ -9496,9 +10245,20 @@ OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
 /**
  * ButtonWidget is a generic widget for buttons. A wide variety of looks,
  * feels, and functionality can be customized via the class’s configuration options
- * and methods. Please see the OOjs UI documentation on MediaWiki for more information
+ * and methods. Please see the [OOjs UI documentation on MediaWiki] [1] for more information
  * and examples.
  *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches
+ *
+ *     @example
+ *     // A button widget
+ *     var button = new OO.ui.ButtonWidget( {
+ *         label: 'Button with Icon',
+ *         icon: 'remove',
+ *         iconTitle: 'Remove'
+ *     } );
+ *     $( 'body' ).append( button.$element );
+ *
  * NOTE: HTML form buttons should use the OO.ui.ButtonInputWidget class.
  *
  * @class
@@ -9513,13 +10273,14 @@ OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string} [href] Hyperlink to visit when clicked
- * @cfg {string} [target] Target to open hyperlink in
- * @cfg {boolean} [nofollow] Search engine traversal hint (default: true)
+ * @cfg {string} [href] Hyperlink to visit when the button is clicked.
+ * @cfg {string} [target] The frame or window in which to open the hyperlink.
+ * @cfg {boolean} [noFollow] Search engine traversal hint (default: true)
  */
 OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
        // Configuration initialization
-       config = config || {};
+       // FIXME: The `nofollow` alias is deprecated and will be removed (T89767)
+       config = $.extend( { noFollow: config && config.nofollow }, config );
 
        // Parent constructor
        OO.ui.ButtonWidget.super.call( this, config );
@@ -9536,7 +10297,7 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
        // Properties
        this.href = null;
        this.target = null;
-       this.nofollow = false;
+       this.noFollow = false;
        this.isHyperlink = false;
 
        // Initialization
@@ -9546,7 +10307,7 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
                .append( this.$button );
        this.setHref( config.href );
        this.setTarget( config.target );
-       this.setNoFollow( config.nofollow );
+       this.setNoFollow( config.noFollow );
 };
 
 /* Setup */
@@ -9632,7 +10393,7 @@ OO.ui.ButtonWidget.prototype.getTarget = function () {
  * @return {boolean} Whether search engines should avoid traversing this hyperlink
  */
 OO.ui.ButtonWidget.prototype.getNoFollow = function () {
-       return this.nofollow;
+       return this.noFollow;
 };
 
 /**
@@ -9680,14 +10441,14 @@ OO.ui.ButtonWidget.prototype.setTarget = function ( target ) {
 /**
  * Set search engine traversal hint.
  *
- * @param {boolean} nofollow True if search engines should avoid traversing this hyperlink
+ * @param {boolean} noFollow True if search engines should avoid traversing this hyperlink
  */
-OO.ui.ButtonWidget.prototype.setNoFollow = function ( nofollow ) {
-       nofollow = typeof nofollow === 'boolean' ? nofollow : true;
+OO.ui.ButtonWidget.prototype.setNoFollow = function ( noFollow ) {
+       noFollow = typeof noFollow === 'boolean' ? noFollow : true;
 
-       if ( nofollow !== this.nofollow ) {
-               this.nofollow = nofollow;
-               if ( nofollow ) {
+       if ( noFollow !== this.noFollow ) {
+               this.noFollow = noFollow;
+               if ( noFollow ) {
                        this.$button.attr( 'rel', 'nofollow' );
                } else {
                        this.$button.removeAttr( 'rel' );
@@ -9698,7 +10459,15 @@ OO.ui.ButtonWidget.prototype.setNoFollow = function ( nofollow ) {
 };
 
 /**
- * Button widget that executes an action and is managed by an OO.ui.ActionSet.
+ * An ActionWidget is a {@link OO.ui.ButtonWidget button widget} that executes an action.
+ * Action widgets are used with OO.ui.ActionSet, which manages the behavior and availability
+ * of the actions.
+ *
+ * Both actions and action sets are primarily used with {@link OO.ui.Dialog Dialogs}.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information
+ * and examples.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Action_sets
  *
  * @class
  * @extends OO.ui.ButtonWidget
@@ -9706,9 +10475,11 @@ OO.ui.ButtonWidget.prototype.setNoFollow = function ( nofollow ) {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string} [action] Symbolic action name
- * @cfg {string[]} [modes] Symbolic mode names
- * @cfg {boolean} [framed=false] Render button with a frame
+ * @cfg {string} [action] Symbolic name of the action (e.g., ‘continue’ or ‘cancel’).
+ * @cfg {string[]} [modes] Symbolic names of the modes (e.g., ‘edit’ or ‘read’) in which the action
+ *  should be made available. See the action set's {@link OO.ui.ActionSet#setMode setMode} method
+ *  for more information about setting modes.
+ * @cfg {boolean} [framed=false] Render the action button with a frame
  */
 OO.ui.ActionWidget = function OoUiActionWidget( config ) {
        // Configuration initialization
@@ -9738,23 +10509,25 @@ OO.mixinClass( OO.ui.ActionWidget, OO.ui.PendingElement );
 /* Events */
 
 /**
+ * A resize event is emitted when the size of the widget changes.
+ *
  * @event resize
  */
 
 /* Methods */
 
 /**
- * Check if action is available in a certain mode.
+ * Check if the action is configured to be available in the specified `mode`.
  *
  * @param {string} mode Name of mode
- * @return {boolean} Has mode
+ * @return {boolean} The action is configured with the mode
  */
 OO.ui.ActionWidget.prototype.hasMode = function ( mode ) {
        return this.modes.indexOf( mode ) !== -1;
 };
 
 /**
- * Get symbolic action name.
+ * Get the symbolic name of the action (e.g., ‘continue’ or ‘cancel’).
  *
  * @return {string}
  */
@@ -9763,9 +10536,13 @@ OO.ui.ActionWidget.prototype.getAction = function () {
 };
 
 /**
- * Get symbolic action name.
+ * Get the symbolic name of the mode or modes for which the action is configured to be available.
  *
- * @return {string}
+ * The current mode is set with the action set's {@link OO.ui.ActionSet#setMode setMode} method.
+ * Only actions that are configured to be avaiable in the current mode will be visible. All other actions
+ * are hidden.
+ *
+ * @return {string[]}
  */
 OO.ui.ActionWidget.prototype.getModes = function () {
        return this.modes.slice();
@@ -9774,6 +10551,7 @@ OO.ui.ActionWidget.prototype.getModes = function () {
 /**
  * Emit a resize event if the size has changed.
  *
+ * @private
  * @chainable
  */
 OO.ui.ActionWidget.prototype.propagateResize = function () {
@@ -9838,7 +10616,7 @@ OO.ui.ActionWidget.prototype.clearFlags = function () {
 };
 
 /**
- * Toggle visibility of button.
+ * Toggle the visibility of the action button.
  *
  * @param {boolean} [show] Show button, omit to toggle visibility
  * @chainable
@@ -9852,7 +10630,22 @@ OO.ui.ActionWidget.prototype.toggle = function () {
 };
 
 /**
- * Button that shows and hides a popup.
+ * PopupButtonWidgets toggle the visibility of a contained {@link OO.ui.PopupWidget PopupWidget},
+ * which is used to display additional information or options.
+ *
+ *     @example
+ *     // Example of a popup button.
+ *     var popupButton = new OO.ui.PopupButtonWidget( {
+ *         label: 'Popup button with options',
+ *         icon: 'menu',
+ *         popup: {
+ *             $content: $( '<p>Additional options here.</p>' ),
+ *             padded: true,
+ *             align: 'left'
+ *         }
+ *     } );
+ *     // Append the button to the DOM.
+ *     $( 'body' ).append( popupButton.$element );
  *
  * @class
  * @extends OO.ui.ButtonWidget
@@ -9887,13 +10680,34 @@ OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.PopupElement );
 
 /**
  * Handle the button action being triggered.
+ *
+ * @private
  */
 OO.ui.PopupButtonWidget.prototype.onAction = function () {
        this.popup.toggle();
 };
 
 /**
- * Button that toggles on and off.
+ * 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
+ * the [OOjs UI documentation][1] on MediaWiki for more information.
+ *
+ *     @example
+ *     // Toggle buttons in the 'off' and 'on' state.
+ *     var toggleButton1 = new OO.ui.ToggleButtonWidget( {
+ *         label: 'Toggle Button off'
+ *     } );
+ *     var toggleButton2 = new OO.ui.ToggleButtonWidget( {
+ *         label: 'Toggle Button on',
+ *         value: true
+ *     } );
+ *     // Append the buttons to the DOM.
+ *     $( 'body' ).append( toggleButton1.$element, toggleButton2.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Toggle_buttons
  *
  * @class
  * @extends OO.ui.ButtonWidget
@@ -9901,7 +10715,8 @@ OO.ui.PopupButtonWidget.prototype.onAction = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {boolean} [value=false] Initial value
+ * @cfg {boolean} [value=false] The toggle button’s initial on/off
+ *  state. By default, the button is in the 'off' state.
  */
 OO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {
        // Configuration initialization
@@ -9928,6 +10743,8 @@ OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );
 /* Methods */
 
 /**
+ *
+ * @private
  * Handle the button action being triggered.
  */
 OO.ui.ToggleButtonWidget.prototype.onAction = function () {
@@ -9951,12 +10768,37 @@ OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {
 };
 
 /**
- * Dropdown menu of options.
+ * DropdownWidgets are not menus themselves, rather they contain a menu of options created with
+ * OO.ui.MenuOptionWidget. The DropdownWidget takes care of opening and displaying the menu so that
+ * users can interact with it.
  *
- * Dropdown menus provide a control for accessing a menu and compose a menu within the widget, which
- * can be accessed using the #getMenu method.
+ *     @example
+ *     // Example: A DropdownWidget with a menu that contains three options
+ *     var dropDown = new OO.ui.DropdownWidget( {
+ *         label: 'Dropdown menu: Select a menu option',
+ *         menu: {
+ *             items: [
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'a',
+ *                     label: 'First'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'b',
+ *                     label: 'Second'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'c',
+ *                     label: 'Third'
+ *                 } )
+ *             ]
+ *         }
+ *     } );
  *
- * Use with OO.ui.MenuOptionWidget.
+ *     $( 'body' ).append( dropDown.$element );
+ *
+ * For more information, please see the [OOjs UI documentation on MediaWiki] [1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
  *
  * @class
  * @extends OO.ui.Widget
@@ -10029,6 +10871,7 @@ OO.ui.DropdownWidget.prototype.getMenu = function () {
 /**
  * Handles menu select events.
  *
+ * @private
  * @param {OO.ui.MenuOptionWidget} item Selected menu item
  */
 OO.ui.DropdownWidget.prototype.onMenuSelect = function ( item ) {
@@ -10051,15 +10894,12 @@ OO.ui.DropdownWidget.prototype.onMenuSelect = function ( item ) {
 /**
  * Handle mouse click events.
  *
+ * @private
  * @param {jQuery.Event} e Mouse click event
  */
 OO.ui.DropdownWidget.prototype.onClick = function ( e ) {
        if ( !this.isDisabled() && e.which === 1 ) {
-               if ( this.menu.isVisible() ) {
-                       this.menu.toggle( false );
-               } else {
-                       this.menu.toggle( true );
-               }
+               this.menu.toggle();
        }
        return false;
 };
@@ -10067,28 +10907,40 @@ OO.ui.DropdownWidget.prototype.onClick = function ( e ) {
 /**
  * Handle key press events.
  *
+ * @private
  * @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.menu.isVisible() ) {
-                       this.menu.toggle( false );
-               } else {
-                       this.menu.toggle( true );
-               }
+               this.menu.toggle();
+               return false;
        }
-       return false;
 };
 
 /**
- * Icon widget.
+ * 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.
+ *
+ *     @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 );
  *
- * See OO.ui.IconElement for more information.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
  *
  * @class
  * @extends OO.ui.Widget
  * @mixins OO.ui.IconElement
  * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.FlaggedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -10103,6 +10955,7 @@ OO.ui.IconWidget = function OoUiIconWidget( 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' );
@@ -10113,15 +10966,31 @@ OO.ui.IconWidget = function OoUiIconWidget( config ) {
 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 );
 
 /* Static Properties */
 
 OO.ui.IconWidget.static.tagName = 'span';
 
 /**
- * Indicator widget.
+ * 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'
+ *     } );
  *
- * See OO.ui.IndicatorElement for more information.
+ *     // 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
@@ -10157,7 +11026,12 @@ OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
 OO.ui.IndicatorWidget.static.tagName = 'span';
 
 /**
- * Base class for input widgets.
+ * 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
@@ -10167,9 +11041,10 @@ OO.ui.IndicatorWidget.static.tagName = 'span';
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string} [name=''] HTML input name
- * @cfg {string} [value=''] Input value
- * @cfg {Function} [inputFilter] Filter function to apply to the input. Takes a string argument and returns a string.
+ * @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
@@ -10208,6 +11083,9 @@ OO.mixinClass( OO.ui.InputWidget, OO.ui.TabIndexedElement );
 
 /**
  * @event change
+ *
+ * A change event is emitted when the value of the input changes.
+ *
  * @param {string} value
  */
 
@@ -10230,6 +11108,7 @@ OO.ui.InputWidget.prototype.getInputElement = function () {
 /**
  * Handle potentially value-changing events.
  *
+ * @private
  * @param {jQuery.Event} e Key down, mouse up, cut, paste, change, input, or select event
  */
 OO.ui.InputWidget.prototype.onEdit = function () {
@@ -10258,9 +11137,10 @@ OO.ui.InputWidget.prototype.getValue = function () {
 };
 
 /**
- * Sets the direction of the current input, either RTL or LTR
+ * Set the direction of the input, either RTL (right-to-left) or LTR (left-to-right).
  *
  * @param {boolean} isRTL
+ * Direction is right-to-left
  */
 OO.ui.InputWidget.prototype.setRTL = function ( isRTL ) {
        this.$input.prop( 'dir', isRTL ? 'rtl' : 'ltr' );
@@ -10307,13 +11187,16 @@ OO.ui.InputWidget.prototype.cleanUpValue = function ( value ) {
 };
 
 /**
- * Simulate the behavior of clicking on a label bound to this input.
+ * Simulate the behavior of clicking on a label bound to this input. This method is only called by
+ * {@link OO.ui.LabelWidget LabelWidget} and {@link OO.ui.FieldLayout FieldLayout}. It should not be
+ * called directly.
  */
 OO.ui.InputWidget.prototype.simulateLabelClick = function () {
        if ( !this.isDisabled() ) {
-               if ( this.$input.is( ':checkbox,:radio' ) ) {
+               if ( this.$input.is( ':checkbox, :radio' ) ) {
                        this.$input.click();
-               } else if ( this.$input.is( ':input' ) ) {
+               }
+               if ( this.$input.is( ':input' ) ) {
                        this.$input[ 0 ].focus();
                }
        }
@@ -10351,7 +11234,22 @@ OO.ui.InputWidget.prototype.blur = function () {
 };
 
 /**
- * A button that is an input widget. Intended to be used within a OO.ui.FormLayout.
+ * ButtonInputWidget is used to submit HTML forms and is intended to be used within
+ * a OO.ui.FormLayout. If you do not need the button to work with HTML forms, you probably
+ * want to use OO.ui.ButtonWidget instead. Button input widgets can be rendered as either an
+ * HTML `<button/>` (the default) or an HTML `<input/>` tags. See the
+ * [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ *     @example
+ *     // A ButtonInputWidget rendered as an HTML button, the default.
+ *     var button = new OO.ui.ButtonInputWidget( {
+ *         label: 'Input button',
+ *         icon: 'check',
+ *         value: 'check'
+ *     } );
+ *     $( 'body' ).append( button.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs#Button_inputs
  *
  * @class
  * @extends OO.ui.InputWidget
@@ -10364,11 +11262,11 @@ OO.ui.InputWidget.prototype.blur = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string} [type='button'] HTML tag `type` attribute, may be 'button', 'submit' or 'reset'
- * @cfg {boolean} [useInputTag=false] Whether to use `<input/>` rather than `<button/>`. Only useful
- *  if you need IE 6 support in a form with multiple buttons. If you use this option, icons and
- *  indicators will not be displayed, it won't be possible to have a non-plaintext label, and it
- *  won't be possible to set a value (which will internally become identical to the label).
+ * @cfg {string} [type='button'] The value of the HTML `'type'` attribute: 'button', 'submit' or 'reset'.
+ * @cfg {boolean} [useInputTag=false] Use an `<input/>` tag instead of a `<button/>` tag, the default.
+ *  Widgets configured to be an `<input/>` do not support {@link #icon icons} and {@link #indicator indicators},
+ *  non-plaintext {@link #label labels}, or {@link #value values}. In general, useInputTag should only
+ *  be set to `true` when there’s need to support IE6 in a form with multiple buttons.
  */
 OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
        // Configuration initialization
@@ -10419,10 +11317,10 @@ OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
 /**
  * Set label value.
  *
- * Overridden to support setting the 'value' of `<input/>` elements.
+ * If #useInputTag is `true`, the label is set as the `value` of the `<input/>` tag.
  *
- * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
- *  text; or null for no label
+ * @param {jQuery|string|Function|null} label Label nodes, text, a function that returns nodes or
+ *  text, or `null` for no label
  * @chainable
  */
 OO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {
@@ -10447,7 +11345,8 @@ OO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {
 /**
  * Set the value of the input.
  *
- * Overridden to disable for `<input/>` elements, which have value identical to the label.
+ * This method is disabled for button inputs configured as {@link #useInputTag <input/> tags}, as
+ * they do not support {@link #value values}.
  *
  * @param {string} value New value
  * @chainable
@@ -10460,14 +11359,43 @@ OO.ui.ButtonInputWidget.prototype.setValue = function ( value ) {
 };
 
 /**
- * Checkbox input widget.
+ * CheckboxInputWidgets, like HTML checkboxes, can be selected and/or configured with a value.
+ *  Note that these {@link OO.ui.InputWidget input widgets} are best laid out
+ * in {@link OO.ui.FieldLayout field layouts} that use the {@link OO.ui.FieldLayout#align inline}
+ * alignment. For more information, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ *     @example
+ *     // An example of selected, unselected, and disabled checkbox inputs
+ *     var checkbox1=new OO.ui.CheckboxInputWidget( {
+ *          value: 'a',
+ *          selected: true
+ *     } );
+ *     var checkbox2=new OO.ui.CheckboxInputWidget( {
+ *         value: 'b'
+ *     } );
+ *     var checkbox3=new OO.ui.CheckboxInputWidget( {
+ *         value:'c',
+ *         disabled: true
+ *     } );
+ *     // Create a fieldset layout with fields for each checkbox.
+ *     var fieldset = new OO.ui.FieldsetLayout( {
+ *         label: 'Checkboxes'
+ *     } );
+ *     fieldset.addItems( [
+ *         new OO.ui.FieldLayout( checkbox1, { label: 'Selected checkbox', align: 'inline' } ),
+ *         new OO.ui.FieldLayout( checkbox2, { label: 'Unselected checkbox', align: 'inline' } ),
+ *         new OO.ui.FieldLayout( checkbox3, { label: 'Disabled checkbox', align: 'inline' } ),
+ *     ] );
+ *     $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
  *
  * @class
  * @extends OO.ui.InputWidget
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {boolean} [selected=false] Whether the checkbox is initially selected
+ * @cfg {boolean} [selected=false] Select the checkbox initially. By default, the checkbox is not selected.
  */
 OO.ui.CheckboxInputWidget = function OoUiCheckboxInputWidget( config ) {
        // Configuration initialization
@@ -10511,7 +11439,7 @@ OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
 /**
  * Set selection state of this checkbox.
  *
- * @param {boolean} state Whether the checkbox is selected
+ * @param {boolean} state `true` for selected
  * @chainable
  */
 OO.ui.CheckboxInputWidget.prototype.setSelected = function ( state ) {
@@ -10540,8 +11468,24 @@ OO.ui.CheckboxInputWidget.prototype.isSelected = function () {
 };
 
 /**
- * A OO.ui.DropdownWidget synchronized with a `<input type=hidden>` for form submission. Intended to
- * be used within a OO.ui.FormLayout.
+ * DropdownInputWidget is a {@link OO.ui.DropdownWidget DropdownWidget} intended to be used
+ * within a {@link OO.ui.FormLayout form}. 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.
+ *
+ *     @example
+ *     // Example: A DropdownInputWidget with three options
+ *     var dropDown = new OO.ui.DropdownInputWidget( {
+ *         label: 'Dropdown menu: Select a menu option',
+ *         options: [
+ *             { data: 'a', label: 'First' } ,
+ *             { data: 'b', label: 'Second'} ,
+ *             { data: 'c', label: 'Third' }
+ *         ]
+ *     } );
+ *     $( 'body' ).append( dropDown.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
  *
  * @class
  * @extends OO.ui.InputWidget
@@ -10587,6 +11531,7 @@ OO.ui.DropdownInputWidget.prototype.getInputElement = function () {
 /**
  * Handles menu select events.
  *
+ * @private
  * @param {OO.ui.MenuOptionWidget} item Selected menu item
  */
 OO.ui.DropdownInputWidget.prototype.onMenuSelect = function ( item ) {
@@ -10664,17 +11609,43 @@ OO.ui.DropdownInputWidget.prototype.blur = function () {
 };
 
 /**
- * Radio input widget.
- *
- * Radio buttons only make sense as a set, and you probably want to use the OO.ui.RadioSelectWidget
- * class instead of using this class directly.
+ * RadioInputWidget creates a single radio button. Because radio buttons are usually used as a set,
+ * in most cases you will want to use a {@link OO.ui.RadioSelectWidget radio select}
+ * with {@link OO.ui.RadioOptionWidget radio options} instead of this class. For more information,
+ * please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ *     @example
+ *     // An example of selected, unselected, and disabled radio inputs
+ *     var radio1 = new OO.ui.RadioInputWidget( {
+ *         value: 'a',
+ *         selected: true
+ *     } );
+ *     var radio2 = new OO.ui.RadioInputWidget( {
+ *         value: 'b'
+ *     } );
+ *     var radio3 = new OO.ui.RadioInputWidget( {
+ *         value: 'c',
+ *         disabled: true
+ *     } );
+ *     // Create a fieldset layout with fields for each radio button.
+ *     var fieldset = new OO.ui.FieldsetLayout( {
+ *         label: 'Radio inputs'
+ *     } );
+ *     fieldset.addItems( [
+ *         new OO.ui.FieldLayout( radio1, { label: 'Selected', align: 'inline' } ),
+ *         new OO.ui.FieldLayout( radio2, { label: 'Unselected', align: 'inline' } ),
+ *         new OO.ui.FieldLayout( radio3, { label: 'Disabled', align: 'inline' } ),
+ *     ] );
+ *     $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
  *
  * @class
  * @extends OO.ui.InputWidget
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {boolean} [selected=false] Whether the radio button is initially selected
+ * @cfg {boolean} [selected=false] Select the radio button initially. By default, the radio button is not selected.
  */
 OO.ui.RadioInputWidget = function OoUiRadioInputWidget( config ) {
        // Configuration initialization
@@ -10712,7 +11683,7 @@ OO.ui.RadioInputWidget.prototype.onEdit = function () {
 /**
  * Set selection state of this radio button.
  *
- * @param {boolean} state Whether the button is selected
+ * @param {boolean} state `true` for selected
  * @chainable
  */
 OO.ui.RadioInputWidget.prototype.setSelected = function ( state ) {
@@ -10731,29 +11702,47 @@ OO.ui.RadioInputWidget.prototype.isSelected = function () {
 };
 
 /**
- * Input widget with a text field.
+ * 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
+ * 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.
+ *
+ *     @example
+ *     // Example of a text input widget
+ *     var textInput = new OO.ui.TextInputWidget( {
+ *         value: 'Text input'
+ *     } )
+ *     $( 'body' ).append( textInput.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
  *
  * @class
  * @extends OO.ui.InputWidget
  * @mixins OO.ui.IconElement
  * @mixins OO.ui.IndicatorElement
  * @mixins OO.ui.PendingElement
+ * @mixins OO.ui.LabelElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string} [type='text'] HTML tag `type` attribute
+ * @cfg {string} [type='text'] The value of the HTML `type` attribute
  * @cfg {string} [placeholder] Placeholder text
- * @cfg {boolean} [autofocus=false] Ask the browser to focus this widget, using the 'autofocus' HTML
- *  attribute
- * @cfg {boolean} [readOnly=false] Prevent changes
- * @cfg {number} [maxLength] Maximum allowed number of characters to input
+ * @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 {boolean} [autosize=false] Automatically resize to fit content
- * @cfg {boolean} [maxRows=10] Maximum number of rows to make visible when autosizing
- * @cfg {string} [labelPosition='after'] Label position, 'before' or 'after'
+ * @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 {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 {RegExp|string} [validate] Regular expression to validate against (or symbolic name referencing
- *  one, see #static-validationPatterns)
+ * @cfg {RegExp|string} [validate] Validation pattern, either a regular expression or the
+ *  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).
  */
 OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        // Configuration initialization
@@ -10789,14 +11778,16 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        }
 
        this.setValidation( config.validate );
-       this.setPosition( config.labelPosition );
+       this.setLabelPosition( config.labelPosition );
 
        // Events
        this.$input.on( {
                keypress: this.onKeyPress.bind( this ),
                blur: this.setValidityFlag.bind( this )
        } );
-       this.$element.on( 'DOMNodeInsertedIntoDocument', this.onElementAttach.bind( this ) );
+       this.$input.one( {
+               focus: this.onElementAttach.bind( this )
+       } );
        this.$icon.on( 'mousedown', this.onIconMouseDown.bind( this ) );
        this.$indicator.on( 'mousedown', this.onIndicatorMouseDown.bind( this ) );
        this.on( 'labelChange', this.updatePosition.bind( this ) );
@@ -10804,12 +11795,12 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        // Initialization
        this.$element
                .addClass( 'oo-ui-textInputWidget' )
-               .append( this.$icon, this.$indicator, this.$label );
+               .append( this.$icon, this.$indicator );
        this.setReadOnly( !!config.readOnly );
        if ( config.placeholder ) {
                this.$input.attr( 'placeholder', config.placeholder );
        }
-       if ( config.maxLength ) {
+       if ( config.maxLength !== undefined ) {
                this.$input.attr( 'maxlength', config.maxLength );
        }
        if ( config.autofocus ) {
@@ -10818,6 +11809,9 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        if ( config.required ) {
                this.$input.attr( 'required', 'true' );
        }
+       if ( this.label || config.autosize ) {
+               this.installParentChangeDetector();
+       }
 };
 
 /* Setup */
@@ -10838,37 +11832,25 @@ OO.ui.TextInputWidget.static.validationPatterns = {
 /* Events */
 
 /**
- * User presses enter inside the text box.
+ * An `enter` event is emitted when the user presses 'enter' inside the text box.
  *
- * Not called if input is multiline.
+ * Not emitted if the input is multiline.
  *
  * @event enter
  */
 
-/**
- * User clicks the icon.
- *
- * @event icon
- */
-
-/**
- * User clicks the indicator.
- *
- * @event indicator
- */
-
 /* Methods */
 
 /**
  * Handle icon mouse down events.
  *
+ * @private
  * @param {jQuery.Event} e Mouse down event
  * @fires icon
  */
 OO.ui.TextInputWidget.prototype.onIconMouseDown = function ( e ) {
        if ( e.which === 1 ) {
                this.$input[ 0 ].focus();
-               this.emit( 'icon' );
                return false;
        }
 };
@@ -10876,13 +11858,13 @@ OO.ui.TextInputWidget.prototype.onIconMouseDown = function ( e ) {
 /**
  * Handle indicator mouse down events.
  *
+ * @private
  * @param {jQuery.Event} e Mouse down event
  * @fires indicator
  */
 OO.ui.TextInputWidget.prototype.onIndicatorMouseDown = function ( e ) {
        if ( e.which === 1 ) {
                this.$input[ 0 ].focus();
-               this.emit( 'indicator' );
                return false;
        }
 };
@@ -10890,6 +11872,7 @@ OO.ui.TextInputWidget.prototype.onIndicatorMouseDown = function ( e ) {
 /**
  * Handle key press events.
  *
+ * @private
  * @param {jQuery.Event} e Key press event
  * @fires enter If enter key is pressed and input is not multiline
  */
@@ -10902,6 +11885,7 @@ OO.ui.TextInputWidget.prototype.onKeyPress = function ( e ) {
 /**
  * Handle element attach events.
  *
+ * @private
  * @param {jQuery.Event} e Element attach event
  */
 OO.ui.TextInputWidget.prototype.onElementAttach = function () {
@@ -10934,7 +11918,7 @@ OO.ui.TextInputWidget.prototype.setValue = function ( value ) {
 };
 
 /**
- * Check if the widget is read-only.
+ * Check if the input is {@link #readOnly read-only}.
  *
  * @return {boolean}
  */
@@ -10943,9 +11927,7 @@ OO.ui.TextInputWidget.prototype.isReadOnly = function () {
 };
 
 /**
- * Set the read-only state of the widget.
- *
- * This should probably change the widget's appearance and prevent it from being used.
+ * Set the {@link #readOnly read-only} state of the input.
  *
  * @param {boolean} state Make input read-only
  * @chainable
@@ -10956,10 +11938,79 @@ OO.ui.TextInputWidget.prototype.setReadOnly = function ( state ) {
        return this;
 };
 
+/**
+ * Support function for making #onElementAttach work across browsers.
+ *
+ * This whole function could be replaced with one line of code using the DOMNodeInsertedIntoDocument
+ * event, but it's not supported by Firefox and allegedly deprecated, so we only use it as fallback.
+ *
+ * Due to MutationObserver performance woes, #onElementAttach is only somewhat reliably called the
+ * first time that the element gets attached to the documented.
+ */
+OO.ui.TextInputWidget.prototype.installParentChangeDetector = function () {
+       var mutationObserver, onRemove, topmostNode, fakeParentNode,
+               MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
+               widget = this;
+
+       if ( MutationObserver ) {
+               // The new way. If only it wasn't so ugly.
+
+               if ( this.$element.closest( 'html' ).length ) {
+                       // Widget is attached already, do nothing. This breaks the functionality of this function when
+                       // the widget is detached and reattached. Alas, doing this correctly with MutationObserver
+                       // would require observation of the whole document, which would hurt performance of other,
+                       // more important code.
+                       return;
+               }
+
+               // Find topmost node in the tree
+               topmostNode = this.$element[0];
+               while ( topmostNode.parentNode ) {
+                       topmostNode = topmostNode.parentNode;
+               }
+
+               // We have no way to detect the $element being attached somewhere without observing the entire
+               // DOM with subtree modifications, which would hurt performance. So we cheat: we hook to the
+               // parent node of $element, and instead detect when $element is removed from it (and thus
+               // probably attached somewhere else). If there is no parent, we create a "fake" one. If it
+               // doesn't get attached, we end up back here and create the parent.
+
+               mutationObserver = new MutationObserver( function ( mutations ) {
+                       var i, j, removedNodes;
+                       for ( i = 0; i < mutations.length; i++ ) {
+                               removedNodes = mutations[ i ].removedNodes;
+                               for ( j = 0; j < removedNodes.length; j++ ) {
+                                       if ( removedNodes[ j ] === topmostNode ) {
+                                               setTimeout( onRemove, 0 );
+                                               return;
+                                       }
+                               }
+                       }
+               } );
+
+               onRemove = function () {
+                       // If the node was attached somewhere else, report it
+                       if ( widget.$element.closest( 'html' ).length ) {
+                               widget.onElementAttach();
+                       }
+                       mutationObserver.disconnect();
+                       widget.installParentChangeDetector();
+               };
+
+               // Create a fake parent and observe it
+               fakeParentNode = $( '<div>' ).append( this.$element )[0];
+               mutationObserver.observe( fakeParentNode, { childList: true } );
+       } else {
+               // Using the DOMNodeInsertedIntoDocument event is much nicer and less magical, and works for
+               // detachment and reattachment, but it's not supported by Firefox and allegedly deprecated.
+               this.$element.on( 'DOMNodeInsertedIntoDocument', this.onElementAttach.bind( this ) );
+       }
+};
+
 /**
  * Automatically adjust the size of the text input.
  *
- * This only affects multi-line inputs that are auto-sized.
+ * This only affects #multiline inputs that are {@link #autosize autosized}.
  *
  * @chainable
  */
@@ -11018,7 +12069,7 @@ OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
 };
 
 /**
- * Check if input supports multiple lines.
+ * Check if the input supports multiple lines.
  *
  * @return {boolean}
  */
@@ -11027,7 +12078,7 @@ OO.ui.TextInputWidget.prototype.isMultiline = function () {
 };
 
 /**
- * Check if input automatically adjusts its size.
+ * Check if the input automatically adjusts its size.
  *
  * @return {boolean}
  */
@@ -11036,7 +12087,7 @@ OO.ui.TextInputWidget.prototype.isAutosizing = function () {
 };
 
 /**
- * Select the contents of the input.
+ * Select the entire text of the input.
  *
  * @chainable
  */
@@ -11046,9 +12097,14 @@ OO.ui.TextInputWidget.prototype.select = function () {
 };
 
 /**
- * Sets the validation pattern to use.
- * @param {RegExp|string|null} validate Regular expression (or symbolic name referencing
- *  one, see #static-validationPatterns)
+ * Set the validation pattern.
+ *
+ * The validation pattern is either a regular expression or the 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).
+ *
+ * @param {RegExp|string|null} validate Regular expression or the symbolic name of a
+ *  pattern (either ‘integer’ or ‘non-empty’) defined by the class.
  */
 OO.ui.TextInputWidget.prototype.setValidation = function ( validate ) {
        if ( validate instanceof RegExp ) {
@@ -11069,38 +12125,52 @@ OO.ui.TextInputWidget.prototype.setValidityFlag = function () {
 };
 
 /**
- * Returns whether or not the current value is considered valid, according to the
- * supplied validation pattern.
+ * Check if a value is valid.
+ *
+ * This method returns a promise that resolves with a boolean `true` if the current value is
+ * considered valid according to the supplied {@link #validate validation pattern}.
  *
- * @return {jQuery.Deferred}
+ * @return {jQuery.Deferred} A promise that resolves to a boolean `true` if the value is valid.
  */
 OO.ui.TextInputWidget.prototype.isValid = function () {
        return $.Deferred().resolve( !!this.getValue().match( this.validate ) ).promise();
 };
 
 /**
- * Set the position of the inline label.
+ * Set the position of the inline label relative to that of the value: `‘before’` or `‘after’`.
  *
  * @param {string} labelPosition Label position, 'before' or 'after'
  * @chainable
  */
-OO.ui.TextInputWidget.prototype.setPosition = function ( labelPosition ) {
+OO.ui.TextInputWidget.prototype.setLabelPosition = function ( labelPosition ) {
        this.labelPosition = labelPosition;
        this.updatePosition();
        return this;
 };
 
+/**
+ * Deprecated alias of #setLabelPosition
+ *
+ * @deprecated Use setLabelPosition instead.
+ */
+OO.ui.TextInputWidget.prototype.setPosition =
+       OO.ui.TextInputWidget.prototype.setLabelPosition;
+
 /**
  * Update the position of the inline label.
  *
+ * This method is called by #setLabelPosition, and can also be called on its own if
+ * something causes the label to be mispositioned.
+ *
+ *
  * @chainable
  */
 OO.ui.TextInputWidget.prototype.updatePosition = function () {
        var after = this.labelPosition === 'after';
 
        this.$element
-               .toggleClass( 'oo-ui-textInputWidget-labelPosition-after', this.label && after )
-               .toggleClass( 'oo-ui-textInputWidget-labelPosition-before', this.label && !after );
+               .toggleClass( 'oo-ui-textInputWidget-labelPosition-after', !!this.label && after )
+               .toggleClass( 'oo-ui-textInputWidget-labelPosition-before', !!this.label && !after );
 
        if ( this.label ) {
                this.positionLabel();
@@ -11112,6 +12182,7 @@ OO.ui.TextInputWidget.prototype.updatePosition = function () {
 /**
  * Position the label by setting the correct padding on the input.
  *
+ * @private
  * @chainable
  */
 OO.ui.TextInputWidget.prototype.positionLabel = function () {
@@ -11123,7 +12194,10 @@ OO.ui.TextInputWidget.prototype.positionLabel = function () {
                        'padding-left': ''
                } );
 
-       if ( !this.$label.text() ) {
+       if ( this.label ) {
+               this.$element.append( this.$label );
+       } else {
+               this.$label.detach();
                return;
        }
 
@@ -11131,13 +12205,56 @@ OO.ui.TextInputWidget.prototype.positionLabel = function () {
                rtl = this.$element.css( 'direction' ) === 'rtl',
                property = after === rtl ? 'padding-left' : 'padding-right';
 
-       this.$input.css( property, this.$label.outerWidth() );
+       this.$input.css( property, this.$label.outerWidth( true ) );
 
        return this;
 };
 
 /**
- * Text input with a menu of optional values.
+ * ComboBoxWidgets combine a {@link OO.ui.TextInputWidget text input} (where a value
+ * can be entered manually) and a {@link OO.ui.MenuSelectWidget menu of options} (from which
+ * a value can be chosen instead). Users can choose options from the combo box in one of two ways:
+ *
+ * - by typing a value in the text input field. If the value exactly matches the value of a menu
+ *   option, that option will appear to be selected.
+ * - by choosing a value from the menu. The value of the chosen option will then appear in the text
+ *   input field.
+ *
+ * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ *     @example
+ *     // Example: A ComboBoxWidget.
+ *     var comboBox = new OO.ui.ComboBoxWidget( {
+ *         label: 'ComboBoxWidget',
+ *         input: { value: 'Option One' },
+ *         menu: {
+ *             items: [
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'Option 1',
+ *                     label: 'Option One'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'Option 2',
+ *                     label: 'Option Two'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'Option 3',
+ *                     label: 'Option Three'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'Option 4',
+ *                     label: 'Option Four'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'Option 5',
+ *                     label: 'Option Five'
+ *                 } )
+ *             ]
+ *         }
+ *     } );
+ *     $( 'body' ).append( comboBox.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
  *
  * @class
  * @extends OO.ui.Widget
@@ -11145,9 +12262,11 @@ OO.ui.TextInputWidget.prototype.positionLabel = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {Object} [menu] Configuration options to pass to menu widget
- * @cfg {Object} [input] Configuration options to pass to input widget
- * @cfg {jQuery} [$overlay] Overlay layer; defaults to relative positioning
+ * @cfg {Object} [menu] Configuration options to pass to the {@link OO.ui.MenuSelectWidget menu select widget}.
+ * @cfg {Object} [input] Configuration options to pass to the {@link OO.ui.TextInputWidget text input widget}.
+ * @cfg {jQuery} [$overlay] Render the menu into a separate layer. This configuration is useful in cases where
+ *  the expanded menu is larger than its containing `<div>`. The specified overlay layer is usually on top of the
+ *  containing `<div>` and has a larger area. By default, the menu uses relative positioning.
  */
 OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
        // Configuration initialization
@@ -11172,6 +12291,10 @@ OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
                },
                config.input
        ) );
+       this.input.$input.eq( 0 ).attr( {
+               role: 'combobox',
+               'aria-autocomplete': 'list'
+       } );
        this.menu = new OO.ui.TextInputMenuSelectWidget( this.input, $.extend(
                {
                        widget: this,
@@ -11220,12 +12343,16 @@ OO.ui.ComboBoxWidget.prototype.getMenu = function () {
 /**
  * Handle input change events.
  *
+ * @private
  * @param {string} value New value
  */
 OO.ui.ComboBoxWidget.prototype.onInputChange = function ( value ) {
        var match = this.menu.getItemFromData( value );
 
        this.menu.selectItem( match );
+       if ( this.menu.getHighlightedItem() ) {
+               this.menu.highlightItem( match );
+       }
 
        if ( !this.isDisabled() ) {
                this.menu.toggle( true );
@@ -11235,6 +12362,8 @@ OO.ui.ComboBoxWidget.prototype.onInputChange = function ( value ) {
 /**
  * Handle mouse click events.
  *
+ *
+ * @private
  * @param {jQuery.Event} e Mouse click event
  */
 OO.ui.ComboBoxWidget.prototype.onClick = function ( e ) {
@@ -11248,18 +12377,22 @@ OO.ui.ComboBoxWidget.prototype.onClick = function ( e ) {
 /**
  * Handle key press events.
  *
+ *
+ * @private
  * @param {jQuery.Event} e Key press event
  */
 OO.ui.ComboBoxWidget.prototype.onKeyPress = function ( e ) {
        if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
                this.menu.toggle();
                this.input.$input[ 0 ].focus();
+               return false;
        }
-       return false;
 };
 
 /**
  * Handle input enter events.
+ *
+ * @private
  */
 OO.ui.ComboBoxWidget.prototype.onInputEnter = function () {
        if ( !this.isDisabled() ) {
@@ -11270,20 +12403,24 @@ OO.ui.ComboBoxWidget.prototype.onInputEnter = function () {
 /**
  * Handle menu choose events.
  *
+ * @private
  * @param {OO.ui.OptionWidget} item Chosen item
  */
 OO.ui.ComboBoxWidget.prototype.onMenuChoose = function ( item ) {
-       if ( item ) {
-               this.input.setValue( item.getData() );
-       }
+       this.input.setValue( item.getData() );
 };
 
 /**
  * Handle menu item change events.
+ *
+ * @private
  */
 OO.ui.ComboBoxWidget.prototype.onMenuItemsChange = function () {
        var match = this.menu.getItemFromData( this.input.getValue() );
        this.menu.selectItem( match );
+       if ( this.menu.getHighlightedItem() ) {
+               this.menu.highlightItem( match );
+       }
        this.$element.toggleClass( 'oo-ui-comboBoxWidget-empty', this.menu.isEmpty() );
 };
 
@@ -11305,7 +12442,34 @@ OO.ui.ComboBoxWidget.prototype.setDisabled = function ( disabled ) {
 };
 
 /**
- * Label widget.
+ * LabelWidgets help identify the function of interface elements. Each LabelWidget can
+ * be configured with a `label` option that is set to a string, a label node, or a function:
+ *
+ * - String: a plaintext string
+ * - jQuery selection: a jQuery selection, used for anything other than a plaintext label, e.g., a
+ *   label that includes a link or special styling, such as a gray color or additional graphical elements.
+ * - Function: a function that will produce a string in the future. Functions are used
+ *   in cases where the value of the label is not currently defined.
+ *
+ * In addition, the LabelWidget can be associated with an {@link OO.ui.InputWidget input widget}, which
+ * will come into focus when the label is clicked.
+ *
+ *     @example
+ *     // Examples of LabelWidgets
+ *     var label1 = new OO.ui.LabelWidget( {
+ *         label: 'plaintext label'
+ *     } );
+ *     var label2 = new OO.ui.LabelWidget( {
+ *         label: $( '<a href="default.html">jQuery label</a>' )
+ *     } );
+ *     // Create a fieldset layout with fields for each example
+ *     var fieldset = new OO.ui.FieldsetLayout();
+ *     fieldset.addItems( [
+ *         new OO.ui.FieldLayout( label1 ),
+ *         new OO.ui.FieldLayout( label2 )
+ *     ] );
+ *     $( 'body' ).append( fieldset.$element );
+ *
  *
  * @class
  * @extends OO.ui.Widget
@@ -11313,7 +12477,8 @@ OO.ui.ComboBoxWidget.prototype.setDisabled = function ( disabled ) {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {OO.ui.InputWidget} [input] Input widget this label is for
+ * @cfg {OO.ui.InputWidget} [input] {@link OO.ui.InputWidget Input widget} that uses the label.
+ *  Clicking the label will focus the specified input field.
  */
 OO.ui.LabelWidget = function OoUiLabelWidget( config ) {
        // Configuration initialization
@@ -11353,6 +12518,7 @@ OO.ui.LabelWidget.static.tagName = 'span';
 /**
  * Handles label mouse click events.
  *
+ * @private
  * @param {jQuery.Event} e Mouse click event
  */
 OO.ui.LabelWidget.prototype.onClick = function () {
@@ -11361,7 +12527,12 @@ OO.ui.LabelWidget.prototype.onClick = function () {
 };
 
 /**
- * Generic option widget for use with OO.ui.SelectWidget.
+ * OptionWidgets are special elements that can be selected and configured with data. The
+ * data is often unique for each option, but it does not have to be. OptionWidgets are used
+ * with OO.ui.SelectWidget to create a selection of mutually exclusive options. For more information
+ * and examples, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
  *
  * @class
  * @extends OO.ui.Widget
@@ -11416,7 +12587,7 @@ OO.ui.OptionWidget.static.scrollIntoViewOnSelect = false;
 /* Methods */
 
 /**
- * Check if option can be selected.
+ * Check if the option can be selected.
  *
  * @return {boolean} Item is selectable
  */
@@ -11425,7 +12596,9 @@ OO.ui.OptionWidget.prototype.isSelectable = function () {
 };
 
 /**
- * Check if option can be highlighted.
+ * Check if the option can be highlighted. A highlight indicates that the option
+ * may be selected when a user presses enter or clicks. Disabled items cannot
+ * be highlighted.
  *
  * @return {boolean} Item is highlightable
  */
@@ -11434,7 +12607,8 @@ OO.ui.OptionWidget.prototype.isHighlightable = function () {
 };
 
 /**
- * Check if option can be pressed.
+ * Check if the option can be pressed. The pressed state occurs when a user mouses
+ * down on an item, but has not yet let go of the mouse.
  *
  * @return {boolean} Item is pressable
  */
@@ -11443,7 +12617,7 @@ OO.ui.OptionWidget.prototype.isPressable = function () {
 };
 
 /**
- * Check if option is selected.
+ * Check if the option is selected.
  *
  * @return {boolean} Item is selected
  */
@@ -11452,7 +12626,8 @@ OO.ui.OptionWidget.prototype.isSelected = function () {
 };
 
 /**
- * Check if option is highlighted.
+ * Check if the option is highlighted. A highlight indicates that the
+ * item may be selected when a user presses enter or clicks.
  *
  * @return {boolean} Item is highlighted
  */
@@ -11461,7 +12636,9 @@ OO.ui.OptionWidget.prototype.isHighlighted = function () {
 };
 
 /**
- * Check if option is pressed.
+ * Check if the option is pressed. The pressed state occurs when a user mouses
+ * down on an item, but has not yet let go of the mouse. The item may appear
+ * selected, but it will not be selected until the user releases the mouse.
  *
  * @return {boolean} Item is pressed
  */
@@ -11470,7 +12647,9 @@ OO.ui.OptionWidget.prototype.isPressed = function () {
 };
 
 /**
- * Set selected state.
+ * Set the option’s selected state. In general, all modifications to the selection
+ * should be handled by the SelectWidget’s {@link OO.ui.SelectWidget#selectItem selectItem( [item] )}
+ * method instead of this method.
  *
  * @param {boolean} [state=false] Select option
  * @chainable
@@ -11490,7 +12669,10 @@ OO.ui.OptionWidget.prototype.setSelected = function ( state ) {
 };
 
 /**
- * Set highlighted state.
+ * Set the option’s highlighted state. In general, all programmatic
+ * modifications to the highlight should be handled by the
+ * SelectWidget’s {@link OO.ui.SelectWidget#highlightItem highlightItem( [item] )}
+ * method instead of this method.
  *
  * @param {boolean} [state=false] Highlight option
  * @chainable
@@ -11505,7 +12687,10 @@ OO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {
 };
 
 /**
- * Set pressed state.
+ * Set the option’s pressed state. In general, all
+ * programmatic modifications to the pressed state should be handled by the
+ * SelectWidget’s {@link OO.ui.SelectWidget#pressItem pressItem( [item] )}
+ * method instead of this method.
  *
  * @param {boolean} [state=false] Press option
  * @chainable
@@ -11520,9 +12705,31 @@ OO.ui.OptionWidget.prototype.setPressed = function ( state ) {
 };
 
 /**
- * Option widget with an option icon and indicator.
- *
- * Use together with OO.ui.SelectWidget.
+ * 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}.
+ * 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].
+ *
+ *     @example
+ *     // Decorated options in a select widget
+ *     var select = new OO.ui.SelectWidget( {
+ *         items: [
+ *             new OO.ui.DecoratedOptionWidget( {
+ *                 data: 'a',
+ *                 label: 'Option with icon',
+ *                 icon: 'help'
+ *             } ),
+ *             new OO.ui.DecoratedOptionWidget( {
+ *                 data: 'b',
+ *                 label: 'Option with indicator',
+ *                 indicator: 'next'
+ *             } )
+ *         ]
+ *     } );
+ *     $( 'body' ).append( select.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
  *
  * @class
  * @extends OO.ui.OptionWidget
@@ -11554,9 +12761,12 @@ OO.mixinClass( OO.ui.OptionWidget, OO.ui.IconElement );
 OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatorElement );
 
 /**
- * Option widget that looks like a button.
+ * ButtonOptionWidget is a special type of {@link OO.ui.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.
  *
- * Use together with OO.ui.ButtonSelectWidget.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_options
  *
  * @class
  * @extends OO.ui.DecoratedOptionWidget
@@ -11567,6 +12777,9 @@ OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatorElement );
  * @param {Object} [config] Configuration options
  */
 OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {
+       // Configuration initialization
+       config = $.extend( { tabIndex: -1 }, config );
+
        // Parent constructor
        OO.ui.ButtonOptionWidget.super.call( this, config );
 
@@ -11591,6 +12804,8 @@ OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.TabIndexedElement );
 // Allow button mouse down events to pass through so they can be handled by the parent select widget
 OO.ui.ButtonOptionWidget.static.cancelButtonMouseDownEvents = false;
 
+OO.ui.ButtonOptionWidget.static.highlightable = false;
+
 /* Methods */
 
 /**
@@ -11607,9 +12822,11 @@ OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
 };
 
 /**
- * Option widget that looks like a radio button.
+ * RadioOptionWidget is an option widget that looks like a radio button.
+ * The class is used with OO.ui.RadioSelectWidget to create a selection of radio options.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.
  *
- * Use together with OO.ui.RadioSelectWidget.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_option
  *
  * @class
  * @extends OO.ui.OptionWidget
@@ -11618,12 +12835,15 @@ OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
  * @param {Object} [config] Configuration options
  */
 OO.ui.RadioOptionWidget = function OoUiRadioOptionWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties (must be done before parent constructor which calls #setDisabled)
+       this.radio = new OO.ui.RadioInputWidget( { value: config.data, tabIndex: -1 } );
+
        // Parent constructor
        OO.ui.RadioOptionWidget.super.call( this, config );
 
-       // Properties
-       this.radio = new OO.ui.RadioInputWidget( { value: config.data } );
-
        // Initialization
        this.$element
                .addClass( 'oo-ui-radioOptionWidget' )
@@ -11658,7 +12878,22 @@ OO.ui.RadioOptionWidget.prototype.setSelected = function ( state ) {
 };
 
 /**
- * Item of an OO.ui.MenuSelectWidget.
+ * @inheritdoc
+ */
+OO.ui.RadioOptionWidget.prototype.setDisabled = function ( disabled ) {
+       OO.ui.RadioOptionWidget.super.prototype.setDisabled.call( this, disabled );
+
+       this.radio.setDisabled( this.isDisabled() );
+
+       return this;
+};
+
+/**
+ * MenuOptionWidget is an option widget that looks like a menu item. The class is used with
+ * OO.ui.MenuSelectWidget to create a menu of mutually exclusive options. Please see
+ * the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
  *
  * @class
  * @extends OO.ui.DecoratedOptionWidget
@@ -11688,7 +12923,36 @@ OO.inheritClass( OO.ui.MenuOptionWidget, OO.ui.DecoratedOptionWidget );
 OO.ui.MenuOptionWidget.static.scrollIntoViewOnSelect = true;
 
 /**
- * Section to group one or more items in a OO.ui.MenuSelectWidget.
+ * MenuSectionOptionWidgets are used inside {@link OO.ui.MenuSelectWidget menu select widgets} to group one or more related
+ * {@link OO.ui.MenuOptionWidget menu options}. MenuSectionOptionWidgets cannot be highlighted or selected.
+ *
+ *     @example
+ *     var myDropdown = new OO.ui.DropdownWidget( {
+ *         menu: {
+ *             items: [
+ *                 new OO.ui.MenuSectionOptionWidget( {
+ *                     label: 'Dogs'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'corgi',
+ *                     label: 'Welsh Corgi'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'poodle',
+ *                     label: 'Standard Poodle'
+ *                 } ),
+ *                 new OO.ui.MenuSectionOptionWidget( {
+ *                     label: 'Cats'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'lion',
+ *                     label: 'Lion'
+ *                 } )
+ *             ]
+ *         }
+ *     } );
+ *     $( 'body' ).append( myDropdown.$element );
+ *
  *
  * @class
  * @extends OO.ui.DecoratedOptionWidget
@@ -11715,7 +12979,11 @@ OO.ui.MenuSectionOptionWidget.static.selectable = false;
 OO.ui.MenuSectionOptionWidget.static.highlightable = false;
 
 /**
- * Items for an OO.ui.OutlineSelectWidget.
+ * OutlineOptionWidget is an item in an {@link OO.ui.OutlineSelectWidget OutlineSelectWidget}.
+ *
+ * Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}, which contain
+ * {@link OO.ui.PageLayout page layouts}. See {@link OO.ui.BookletLayout BookletLayout}
+ * for an example.
  *
  * @class
  * @extends OO.ui.DecoratedOptionWidget
@@ -11723,7 +12991,7 @@ OO.ui.MenuSectionOptionWidget.static.highlightable = false;
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {number} [level] Indentation level
- * @cfg {boolean} [movable] Allow modification from outline controls
+ * @cfg {boolean} [movable] Allow modification from {@link OO.ui.OutlineControlsWidget outline controls}.
  */
 OO.ui.OutlineOptionWidget = function OoUiOutlineOptionWidget( config ) {
        // Configuration initialization
@@ -11761,7 +13029,7 @@ OO.ui.OutlineOptionWidget.static.levels = 3;
 /**
  * Check if item is movable.
  *
- * Movability is used by outline controls.
+ * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
  *
  * @return {boolean} Item is movable
  */
@@ -11772,7 +13040,7 @@ OO.ui.OutlineOptionWidget.prototype.isMovable = function () {
 /**
  * Check if item is removable.
  *
- * Removability is used by outline controls.
+ * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
  *
  * @return {boolean} Item is removable
  */
@@ -11792,7 +13060,7 @@ OO.ui.OutlineOptionWidget.prototype.getLevel = function () {
 /**
  * Set movability.
  *
- * Movability is used by outline controls.
+ * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
  *
  * @param {boolean} movable Item is movable
  * @chainable
@@ -11806,7 +13074,7 @@ OO.ui.OutlineOptionWidget.prototype.setMovable = function ( movable ) {
 /**
  * Set removability.
  *
- * Removability is used by outline controls.
+ * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
  *
  * @param {boolean} movable Item is removable
  * @chainable
@@ -11842,7 +13110,23 @@ OO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {
 };
 
 /**
- * Container for content that is overlaid and positioned absolutely.
+ * PopupWidget is a container for content. The popup is overlaid and positioned absolutely.
+ * By default, each popup has an anchor that points toward its origin.
+ * Please see the [OOjs UI documentation on Mediawiki] [1] for more information and examples.
+ *
+ *     @example
+ *     // A popup widget.
+ *     var popup = new OO.ui.PopupWidget( {
+ *         $content: $( '<p>Hi there!</p>' ),
+ *         padded: true,
+ *         width: 300
+ *     } );
+ *
+ *     $( 'body' ).append( popup.$element );
+ *     // To display the popup, toggle the visibility to 'true'.
+ *     popup.toggle( true );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups
  *
  * @class
  * @extends OO.ui.Widget
@@ -11851,16 +13135,24 @@ OO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {number} [width=320] Width of popup in pixels
- * @cfg {number} [height] Height of popup, omit to use automatic height
+ * @cfg {number} [height] Height of popup in pixels. Omit to use the automatic height.
  * @cfg {boolean} [anchor=true] Show anchor pointing to origin of popup
- * @cfg {string} [align='center'] Alignment of popup to origin
- * @cfg {jQuery} [$container] Container to prevent popup from rendering outside of
- * @cfg {number} [containerPadding=10] How much padding to keep between popup and container
+ * @cfg {string} [align='center'] Alignment of the popup: `center`, `left`, or `right`.
+ *  If the popup is right-aligned, the right edge of the popup is aligned to the anchor.
+ *  For left-aligned popups, the left edge is aligned to the anchor.
+ * @cfg {jQuery} [$container] Constrain the popup to the boundaries of the specified container.
+ *  See the [OOjs UI docs on MediaWiki][3] for an example.
+ *  [3]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#containerExample
+ * @cfg {number} [containerPadding=10] Padding between the popup and its container, specified as a number of pixels.
  * @cfg {jQuery} [$content] Content to append to the popup's body
- * @cfg {boolean} [autoClose=false] Popup auto-closes when it loses focus
- * @cfg {jQuery} [$autoCloseIgnore] Elements to not auto close when clicked
- * @cfg {boolean} [head] Show label and close button at the top
- * @cfg {boolean} [padded] Add padding to the body
+ * @cfg {boolean} [autoClose=false] Automatically close the popup when it loses focus.
+ * @cfg {jQuery} [$autoCloseIgnore] Elements that will not close the popup when clicked.
+ *  This config option is only relevant if #autoClose is set to `true`. See the [OOjs UI docs on MediaWiki][2]
+ *  for an example.
+ *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#autocloseExample
+ * @cfg {boolean} [head] Show a popup header that contains a #label (if specified) and close
+ *  button.
+ * @cfg {boolean} [padded] Add padding to the popup's body
  */
 OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        // Configuration initialization
@@ -11892,6 +13184,7 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        this.align = config.align || 'center';
        this.closeButton = new OO.ui.ButtonWidget( { framed: false, icon: 'close' } );
        this.onMouseDownHandler = this.onMouseDown.bind( this );
+       this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
 
        // Events
        this.closeButton.connect( this, { click: 'onCloseButtonClick' } );
@@ -11938,7 +13231,8 @@ OO.mixinClass( OO.ui.PopupWidget, OO.ui.ClippableElement );
 /**
  * Handles mouse down events.
  *
- * @param {jQuery.Event} e Mouse down event
+ * @private
+ * @param {MouseEvent} e Mouse down event
  */
 OO.ui.PopupWidget.prototype.onMouseDown = function ( e ) {
        if (
@@ -11952,6 +13246,8 @@ OO.ui.PopupWidget.prototype.onMouseDown = function ( e ) {
 
 /**
  * Bind mouse down listener.
+ *
+ * @private
  */
 OO.ui.PopupWidget.prototype.bindMouseDownListener = function () {
        // Capture clicks outside popup
@@ -11960,6 +13256,8 @@ OO.ui.PopupWidget.prototype.bindMouseDownListener = function () {
 
 /**
  * Handles close button click events.
+ *
+ * @private
  */
 OO.ui.PopupWidget.prototype.onCloseButtonClick = function () {
        if ( this.isVisible() ) {
@@ -11969,13 +13267,50 @@ OO.ui.PopupWidget.prototype.onCloseButtonClick = function () {
 
 /**
  * Unbind mouse down listener.
+ *
+ * @private
  */
 OO.ui.PopupWidget.prototype.unbindMouseDownListener = function () {
        this.getElementWindow().removeEventListener( 'mousedown', this.onMouseDownHandler, true );
 };
 
 /**
- * Set whether to show a anchor.
+ * Handles key down events.
+ *
+ * @private
+ * @param {KeyboardEvent} e Key down event
+ */
+OO.ui.PopupWidget.prototype.onDocumentKeyDown = function ( e ) {
+       if (
+               e.which === OO.ui.Keys.ESCAPE &&
+               this.isVisible()
+       ) {
+               this.toggle( false );
+               e.preventDefault();
+               e.stopPropagation();
+       }
+};
+
+/**
+ * Bind key down listener.
+ *
+ * @private
+ */
+OO.ui.PopupWidget.prototype.bindKeyDownListener = function () {
+       this.getElementWindow().addEventListener( 'keydown', this.onDocumentKeyDownHandler, true );
+};
+
+/**
+ * Unbind key down listener.
+ *
+ * @private
+ */
+OO.ui.PopupWidget.prototype.unbindKeyDownListener = function () {
+       this.getElementWindow().removeEventListener( 'keydown', this.onDocumentKeyDownHandler, true );
+};
+
+/**
+ * Show, hide, or toggle the visibility of the anchor.
  *
  * @param {boolean} [show] Show anchor, omit to toggle
  */
@@ -11993,9 +13328,9 @@ OO.ui.PopupWidget.prototype.toggleAnchor = function ( show ) {
 };
 
 /**
- * Check if showing a anchor.
+ * Check if the anchor is visible.
  *
- * @return {boolean} anchor is visible
+ * @return {boolean} Anchor is visible
  */
 OO.ui.PopupWidget.prototype.hasAnchor = function () {
        return this.anchor;
@@ -12016,6 +13351,7 @@ OO.ui.PopupWidget.prototype.toggle = function ( show ) {
                if ( show ) {
                        if ( this.autoClose ) {
                                this.bindMouseDownListener();
+                               this.bindKeyDownListener();
                        }
                        this.updateDimensions();
                        this.toggleClipping( true );
@@ -12023,6 +13359,7 @@ OO.ui.PopupWidget.prototype.toggle = function ( show ) {
                        this.toggleClipping( false );
                        if ( this.autoClose ) {
                                this.unbindMouseDownListener();
+                               this.unbindKeyDownListener();
                        }
                }
        }
@@ -12035,8 +13372,8 @@ OO.ui.PopupWidget.prototype.toggle = function ( show ) {
  *
  * Changing the size may also change the popup's position depending on the alignment.
  *
- * @param {number} width Width
- * @param {number} height Height
+ * @param {number} width Width in pixels
+ * @param {number} height Height in pixels
  * @param {boolean} [transition=false] Use a smooth transition
  * @chainable
  */
@@ -12131,14 +13468,40 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
 };
 
 /**
- * Progress bar widget.
+ * Progress bars visually display the status of an operation, such as a download,
+ * and can be either determinate or indeterminate:
+ *
+ * - **determinate** process bars show the percent of an operation that is complete.
+ *
+ * - **indeterminate** process bars use a visual display of motion to indicate that an operation
+ *   is taking place. Because the extent of an indeterminate operation is unknown, the bar does
+ *   not use percentages.
+ *
+ * The value of the `progress` configuration determines whether the bar is determinate or indeterminate.
+ *
+ *     @example
+ *     // Examples of determinate and indeterminate progress bars.
+ *     var progressBar1 = new OO.ui.ProgressBarWidget( {
+ *         progress: 33
+ *     } );
+ *     var progressBar2 = new OO.ui.ProgressBarWidget();
+ *
+ *     // Create a FieldsetLayout to layout progress bars
+ *     var fieldset = new OO.ui.FieldsetLayout;
+ *     fieldset.addItems( [
+ *        new OO.ui.FieldLayout( progressBar1, {label: 'Determinate', align: 'top'}),
+ *        new OO.ui.FieldLayout( progressBar2, {label: 'Indeterminate', align: 'top'})
+ *     ] );
+ *     $( 'body' ).append( fieldset.$element );
  *
  * @class
  * @extends OO.ui.Widget
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {number|boolean} [progress=false] Initial progress percent or false for indeterminate
+ * @cfg {number|boolean} [progress=false] The type of progress bar (determinate or indeterminate).
+ *  To create a determinate progress bar, specify a number that reflects the initial percent complete.
+ *  By default, the progress bar is indeterminate.
  */
 OO.ui.ProgressBarWidget = function OoUiProgressBarWidget( config ) {
        // Configuration initialization
@@ -12175,18 +13538,18 @@ OO.ui.ProgressBarWidget.static.tagName = 'div';
 /* Methods */
 
 /**
- * Get progress percent
+ * Get the percent of the progress that has been completed. Indeterminate progresses will return `false`.
  *
- * @return {number} Progress percent
+ * @return {number|boolean} Progress percent
  */
 OO.ui.ProgressBarWidget.prototype.getProgress = function () {
        return this.progress;
 };
 
 /**
- * Set progress percent
+ * Set the percent of the process completed or `false` for an indeterminate process.
  *
- * @param {number|boolean} progress Progress percent or false for indeterminate
+ * @param {number|boolean} progress Progress percent or `false` for indeterminate
  */
 OO.ui.ProgressBarWidget.prototype.setProgress = function ( progress ) {
        this.progress = progress;
@@ -12202,10 +13565,16 @@ OO.ui.ProgressBarWidget.prototype.setProgress = function ( progress ) {
 };
 
 /**
- * Search widget.
+ * 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.
+ * 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.
  *
- * Search widgets combine a query input, placed above, and a results selection widget, placed below.
- * Results are cleared and populated each time the query is changed.
+ * Each time the query is changed, the search result menu is cleared and repopulated. Please see
+ * the [OOjs UI demos][1] for an example.
+ *
+ * [1]: https://tools.wmflabs.org/oojs-ui/oojs-ui/demos/#dialogs-mediawiki-vector-ltr
  *
  * @class
  * @extends OO.ui.Widget
@@ -12262,12 +13631,22 @@ OO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );
 /* Events */
 
 /**
+ * A 'highlight' event is emitted when an item is highlighted. The highlight indicates which
+ * item will be selected. When a user mouses over a menu item, it is highlighted. If a search
+ * string is typed into the query field instead, the first menu item that matches the query
+ * will be highlighted.
+
  * @event highlight
+ * @deprecated Connect straight to getResults() events instead
  * @param {Object|null} item Item data or null if no item is highlighted
  */
 
 /**
+ * A 'select' event is emitted when an item is selected. A menu item is selected when it is clicked,
+ * or when a user types a search query, a menu result is highlighted, and the user presses enter.
+ *
  * @event select
+ * @deprecated Connect straight to getResults() events instead
  * @param {Object|null} item Item data or null if no item is selected
  */
 
@@ -12276,6 +13655,7 @@ OO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );
 /**
  * Handle query key down events.
  *
+ * @private
  * @param {jQuery.Event} e Key down event
  */
 OO.ui.SearchWidget.prototype.onQueryKeydown = function ( e ) {
@@ -12298,6 +13678,7 @@ OO.ui.SearchWidget.prototype.onQueryKeydown = function ( e ) {
  *
  * Clears existing results. Subclasses should repopulate items according to new query.
  *
+ * @private
  * @param {string} value New value
  */
 OO.ui.SearchWidget.prototype.onQueryChange = function () {
@@ -12310,6 +13691,7 @@ OO.ui.SearchWidget.prototype.onQueryChange = function () {
  *
  * Selects highlighted item.
  *
+ * @private
  * @param {string} value New value
  */
 OO.ui.SearchWidget.prototype.onQueryEnter = function () {
@@ -12320,6 +13702,8 @@ OO.ui.SearchWidget.prototype.onQueryEnter = function () {
 /**
  * Handle select widget highlight events.
  *
+ * @private
+ * @deprecated Connect straight to getResults() events instead
  * @param {OO.ui.OptionWidget} item Highlighted item
  * @fires highlight
  */
@@ -12330,6 +13714,8 @@ OO.ui.SearchWidget.prototype.onResultsHighlight = function ( item ) {
 /**
  * Handle select widget select events.
  *
+ * @private
+ * @deprecated Connect straight to getResults() events instead
  * @param {OO.ui.OptionWidget} item Selected item
  * @fires select
  */
@@ -12347,21 +13733,44 @@ OO.ui.SearchWidget.prototype.getQuery = function () {
 };
 
 /**
- * Get the results list.
+ * Get the search results menu.
  *
- * @return {OO.ui.SelectWidget} Select list
+ * @return {OO.ui.SelectWidget} Menu of search results
  */
 OO.ui.SearchWidget.prototype.getResults = function () {
        return this.results;
 };
 
 /**
- * Generic selection of options.
- *
- * Items can contain any rendering. Any widget that provides options, from which the user must
- * choose one, should be built on this class.
- *
- * Use together with OO.ui.OptionWidget.
+ * A SelectWidget is of a generic selection of options. The OOjs UI library contains several types of
+ * select widgets, including {@link OO.ui.ButtonSelectWidget button selects},
+ * {@link OO.ui.RadioSelectWidget radio selects}, and {@link OO.ui.MenuSelectWidget
+ * menu selects}.
+ *
+ * This class should be used together with OO.ui.OptionWidget or OO.ui.DecoratedOptionWidget. For more
+ * information, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ *     @example
+ *     // Example of a select widget with three options
+ *     var select = new OO.ui.SelectWidget( {
+ *         items: [
+ *             new OO.ui.OptionWidget( {
+ *                 data: 'a',
+ *                 label: 'Option One',
+ *             } ),
+ *             new OO.ui.OptionWidget( {
+ *                 data: 'b',
+ *                 label: 'Option Two',
+ *             } ),
+ *             new OO.ui.OptionWidget( {
+ *                 data: 'c',
+ *                 label: 'Option Three',
+ *             } )
+ *         ]
+ *     } );
+ *     $( 'body' ).append( select.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
  *
  * @class
  * @extends OO.ui.Widget
@@ -12369,7 +13778,10 @@ OO.ui.SearchWidget.prototype.getResults = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {OO.ui.OptionWidget[]} [items] Options to add
+ * @cfg {OO.ui.OptionWidget[]} [items] An array of options to add to the select.
+ *  Options are created with {@link OO.ui.OptionWidget OptionWidget} classes. See
+ *  the [OOjs UI documentation on MediaWiki] [2] for examples.
+ *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
  */
 OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
        // Configuration initialization
@@ -12386,6 +13798,7 @@ OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
        this.selecting = null;
        this.onMouseUpHandler = this.onMouseUp.bind( this );
        this.onMouseMoveHandler = this.onMouseMove.bind( this );
+       this.onKeyDownHandler = this.onKeyDown.bind( this );
 
        // Events
        this.$element.on( {
@@ -12398,7 +13811,7 @@ OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
        this.$element
                .addClass( 'oo-ui-selectWidget oo-ui-selectWidget-depressed' )
                .attr( 'role', 'listbox' );
-       if ( $.isArray( config.items ) ) {
+       if ( Array.isArray( config.items ) ) {
                this.addItems( config.items );
        }
 };
@@ -12415,32 +13828,50 @@ OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupWidget );
 
 /**
  * @event highlight
+ *
+ * A `highlight` event is emitted when the highlight is changed with the #highlightItem method.
+ *
  * @param {OO.ui.OptionWidget|null} item Highlighted item
  */
 
 /**
  * @event press
+ *
+ * A `press` event is emitted when the #pressItem method is used to programmatically modify the
+ * pressed state of an option.
+ *
  * @param {OO.ui.OptionWidget|null} item Pressed item
  */
 
 /**
  * @event select
+ *
+ * A `select` event is emitted when the selection is modified programmatically with the #selectItem method.
+ *
  * @param {OO.ui.OptionWidget|null} item Selected item
  */
 
 /**
  * @event choose
- * @param {OO.ui.OptionWidget|null} item Chosen item
+ * A `choose` event is emitted when an item is chosen with the #chooseItem method.
+ * @param {OO.ui.OptionWidget} item Chosen item
  */
 
 /**
  * @event add
+ *
+ * An `add` event is emitted when options are added to the select with the #addItems method.
+ *
  * @param {OO.ui.OptionWidget[]} items Added items
- * @param {number} index Index items were added at
+ * @param {number} index Index of insertion point
  */
 
 /**
  * @event remove
+ *
+ * A `remove` event is emitted when options are removed from the select with the #clearItems
+ * or #removeItems methods.
+ *
  * @param {OO.ui.OptionWidget[]} items Removed items
  */
 
@@ -12560,6 +13991,82 @@ OO.ui.SelectWidget.prototype.onMouseLeave = function () {
        return false;
 };
 
+/**
+ * Handle key down events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.SelectWidget.prototype.onKeyDown = function ( e ) {
+       var nextItem,
+               handled = false,
+               currentItem = this.getHighlightedItem() || this.getSelectedItem();
+
+       if ( !this.isDisabled() && this.isVisible() ) {
+               switch ( e.keyCode ) {
+                       case OO.ui.Keys.ENTER:
+                               if ( currentItem && currentItem.constructor.static.highlightable ) {
+                                       // Was only highlighted, now let's select it. No-op if already selected.
+                                       this.chooseItem( currentItem );
+                                       handled = true;
+                               }
+                               break;
+                       case OO.ui.Keys.UP:
+                       case OO.ui.Keys.LEFT:
+                               nextItem = this.getRelativeSelectableItem( currentItem, -1 );
+                               handled = true;
+                               break;
+                       case OO.ui.Keys.DOWN:
+                       case OO.ui.Keys.RIGHT:
+                               nextItem = this.getRelativeSelectableItem( currentItem, 1 );
+                               handled = true;
+                               break;
+                       case OO.ui.Keys.ESCAPE:
+                       case OO.ui.Keys.TAB:
+                               if ( currentItem && currentItem.constructor.static.highlightable ) {
+                                       currentItem.setHighlighted( false );
+                               }
+                               this.unbindKeyDownListener();
+                               // Don't prevent tabbing away / defocusing
+                               handled = false;
+                               break;
+               }
+
+               if ( nextItem ) {
+                       if ( nextItem.constructor.static.highlightable ) {
+                               this.highlightItem( nextItem );
+                       } else {
+                               this.chooseItem( nextItem );
+                       }
+                       nextItem.scrollElementIntoView();
+               }
+
+               if ( handled ) {
+                       // Can't just return false, because e is not always a jQuery event
+                       e.preventDefault();
+                       e.stopPropagation();
+               }
+       }
+};
+
+/**
+ * Bind key down listener.
+ *
+ * @protected
+ */
+OO.ui.SelectWidget.prototype.bindKeyDownListener = function () {
+       this.getElementWindow().addEventListener( 'keydown', this.onKeyDownHandler, true );
+};
+
+/**
+ * Unbind key down listener.
+ *
+ * @protected
+ */
+OO.ui.SelectWidget.prototype.unbindKeyDownListener = function () {
+       this.getElementWindow().removeEventListener( 'keydown', this.onKeyDownHandler, true );
+};
+
 /**
  * Get the closest item to a jQuery.Event.
  *
@@ -12610,6 +14117,10 @@ OO.ui.SelectWidget.prototype.getHighlightedItem = function () {
 /**
  * Toggle pressed state.
  *
+ * Press is a state that occurs when a user mouses down on an item, but
+ * has not yet let go of the mouse. The item may appear selected, but it will not be selected
+ * until the user releases the mouse.
+ *
  * @param {boolean} pressed An option is being pressed
  */
 OO.ui.SelectWidget.prototype.togglePressed = function ( pressed ) {
@@ -12625,11 +14136,10 @@ OO.ui.SelectWidget.prototype.togglePressed = function ( pressed ) {
 };
 
 /**
- * Highlight an item.
+ * Highlight an option. If the `item` param is omitted, no options will be highlighted
+ * and any existing highlight will be removed. The highlight is mutually exclusive.
  *
- * Highlighting is mutually exclusive.
- *
- * @param {OO.ui.OptionWidget} [item] Item to highlight, omit to deselect all
+ * @param {OO.ui.OptionWidget} [item] Item to highlight, omit for no highlight
  * @fires highlight
  * @chainable
  */
@@ -12652,7 +14162,8 @@ OO.ui.SelectWidget.prototype.highlightItem = function ( item ) {
 };
 
 /**
- * Select an item.
+ * Programmatically select an option by its reference. If the `item` parameter is omitted,
+ * all options will be deselected.
  *
  * @param {OO.ui.OptionWidget} [item] Item to select, omit to deselect all
  * @fires select
@@ -12679,6 +14190,10 @@ OO.ui.SelectWidget.prototype.selectItem = function ( item ) {
 /**
  * Press an item.
  *
+ * Press is a state that occurs when a user mouses down on an item, but has not
+ * yet let go of the mouse. The item may appear selected, but it will not be selected until the user
+ * releases the mouse.
+ *
  * @param {OO.ui.OptionWidget} [item] Item to press, omit to depress all
  * @fires press
  * @chainable
@@ -12704,8 +14219,12 @@ OO.ui.SelectWidget.prototype.pressItem = function ( item ) {
 /**
  * Choose an item.
  *
- * Identical to #selectItem, but may vary in subclasses that want to take additional action when
- * an item is selected using the keyboard or mouse.
+ * Note that ‘choose’ should never be modified programmatically. A user can choose
+ * an option with the keyboard or mouse and it becomes selected. To select an item programmatically,
+ * use the #selectItem method.
+ *
+ * This method is identical to #selectItem, but may vary in subclasses that take additional action
+ * when users choose an item with the keyboard or mouse.
  *
  * @param {OO.ui.OptionWidget} item Item to choose
  * @fires choose
@@ -12719,11 +14238,14 @@ OO.ui.SelectWidget.prototype.chooseItem = function ( item ) {
 };
 
 /**
- * Get an item relative to another one.
+ * Get an option by its position relative to the specified item (or to the start of the option array,
+ * if item is `null`). The direction in which to search through the option array is specified with a
+ * number: -1 for reverse (the default) or 1 for forward. The method will return an option, or
+ * `null` if there are no options in the array.
  *
- * @param {OO.ui.OptionWidget|null} item Item to start at, null to get relative to list start
- * @param {number} direction Direction to move in, -1 to move backward, 1 to move forward
- * @return {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the menu
+ * @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
+ * @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 ) {
        var currentIndex, nextIndex, i,
@@ -12750,7 +14272,8 @@ OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direct
 };
 
 /**
- * Get the next selectable item.
+ * Get the next selectable item or `null` if there are no selectable items.
+ * Disabled options and menu-section markers and breaks are not selectable.
  *
  * @return {OO.ui.OptionWidget|null} Item, `null` if there aren't any selectable items
  */
@@ -12768,7 +14291,8 @@ OO.ui.SelectWidget.prototype.getFirstSelectableItem = function () {
 };
 
 /**
- * Add items.
+ * Add an array of options to the select. Optionally, an index number can be used to
+ * specify an insertion point.
  *
  * @param {OO.ui.OptionWidget[]} items Items to add
  * @param {number} [index] Index to insert items after
@@ -12786,9 +14310,9 @@ OO.ui.SelectWidget.prototype.addItems = function ( items, index ) {
 };
 
 /**
- * Remove items.
- *
- * Items will be detached, not removed, so they can be used later.
+ * Remove the specified array of options from the select. Options will be detached
+ * from the DOM, not removed, so they can be reused later. To remove all options from
+ * the select, you may wish to use the #clearItems method instead.
  *
  * @param {OO.ui.OptionWidget[]} items Items to remove
  * @fires remove
@@ -12814,9 +14338,9 @@ OO.ui.SelectWidget.prototype.removeItems = function ( items ) {
 };
 
 /**
- * Clear all items.
- *
- * Items will be detached, not removed, so they can be used later.
+ * Clear all options from the select. Options will be detached from the DOM, not removed,
+ * so that they can be reused later. To remove a subset of options from the select, use
+ * the #removeItems method.
  *
  * @fires remove
  * @chainable
@@ -12836,12 +14360,42 @@ OO.ui.SelectWidget.prototype.clearItems = function () {
 };
 
 /**
- * Select widget containing button options.
+ * ButtonSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains
+ * button options and is used together with
+ * OO.ui.ButtonOptionWidget. The ButtonSelectWidget provides an interface for
+ * highlighting, choosing, and selecting mutually exclusive options. Please see
+ * the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ *     @example
+ *     // Example: A ButtonSelectWidget that contains three ButtonOptionWidgets
+ *     var option1 = new OO.ui.ButtonOptionWidget( {
+ *         data: 1,
+ *         label: 'Option 1',
+ *         title: 'Button option 1'
+ *     } );
  *
- * Use together with OO.ui.ButtonOptionWidget.
+ *     var option2 = new OO.ui.ButtonOptionWidget( {
+ *         data: 2,
+ *         label: 'Option 2',
+ *         title: 'Button option 2'
+ *     } );
+ *
+ *     var option3 = new OO.ui.ButtonOptionWidget( {
+ *         data: 3,
+ *         label: 'Option 3',
+ *         title: 'Button option 3'
+ *     } );
+ *
+ *     var buttonSelect=new OO.ui.ButtonSelectWidget( {
+ *         items: [ option1, option2, option3 ]
+ *     } );
+ *     $( 'body' ).append( buttonSelect.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
  *
  * @class
  * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -12850,6 +14404,15 @@ OO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {
        // Parent constructor
        OO.ui.ButtonSelectWidget.super.call( this, config );
 
+       // Mixin constructors
+       OO.ui.TabIndexedElement.call( this, config );
+
+       // Events
+       this.$element.on( {
+               focus: this.bindKeyDownListener.bind( this ),
+               blur: this.unbindKeyDownListener.bind( this )
+       } );
+
        // Initialization
        this.$element.addClass( 'oo-ui-buttonSelectWidget' );
 };
@@ -12857,14 +14420,41 @@ OO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.TabIndexedElement );
 
 /**
- * Select widget containing radio button options.
+ * RadioSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains radio
+ * options and is used together with OO.ui.RadioOptionWidget. The RadioSelectWidget provides
+ * an interface for adding, removing and selecting options.
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
+ *
+ *     @example
+ *     // A RadioSelectWidget with RadioOptions.
+ *     var option1 = new OO.ui.RadioOptionWidget( {
+ *         data: 'a',
+ *         label: 'Selected radio option'
+ *     } );
+ *
+ *     var option2 = new OO.ui.RadioOptionWidget( {
+ *         data: 'b',
+ *         label: 'Unselected radio option'
+ *     } );
+ *
+ *     var radioSelect=new OO.ui.RadioSelectWidget( {
+ *         items: [ option1, option2 ]
+ *      } );
+ *
+ *     // Select 'option 1' using the RadioSelectWidget's selectItem() method.
+ *     radioSelect.selectItem( option1 );
+ *
+ *     $( 'body' ).append( radioSelect.$element );
  *
- * Use together with OO.ui.RadioOptionWidget.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
+
  *
  * @class
  * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -12873,6 +14463,15 @@ OO.ui.RadioSelectWidget = function OoUiRadioSelectWidget( config ) {
        // Parent constructor
        OO.ui.RadioSelectWidget.super.call( this, config );
 
+       // Mixin constructors
+       OO.ui.TabIndexedElement.call( this, config );
+
+       // Events
+       this.$element.on( {
+               focus: this.bindKeyDownListener.bind( this ),
+               blur: this.unbindKeyDownListener.bind( this )
+       } );
+
        // Initialization
        this.$element.addClass( 'oo-ui-radioSelectWidget' );
 };
@@ -12880,14 +14479,28 @@ OO.ui.RadioSelectWidget = function OoUiRadioSelectWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.RadioSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.RadioSelectWidget, OO.ui.TabIndexedElement );
 
 /**
- * Overlaid menu of options.
+ * 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.
+ * MenuSelectWidgets themselves are not instantiated directly, rather subclassed
+ * and customized to be opened, closed, and displayed as needed.
+ *
+ * By default, menus are clipped to the visible viewport and are not visible when a user presses the
+ * mouse outside the menu.
  *
- * Menus are clipped to the visible viewport. They do not provide a control for opening or closing
- * the menu.
+ * Menus also have support for keyboard interaction:
  *
- * Use together with OO.ui.MenuOptionWidget.
+ * - Enter/Return key: choose and select a menu option
+ * - Up-arrow key: highlight the previous menu option
+ * - Down-arrow key: highlight the next menu option
+ * - Esc key: hide the menu
+ *
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
  *
  * @class
  * @extends OO.ui.SelectWidget
@@ -12895,9 +14508,12 @@ OO.inheritClass( OO.ui.RadioSelectWidget, OO.ui.SelectWidget );
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {OO.ui.InputWidget} [input] Input to bind keyboard handlers to
- * @cfg {OO.ui.Widget} [widget] Widget to bind mouse handlers to
- * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu
+ * @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.
+ * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu.
  */
 OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
        // Configuration initialization
@@ -12914,7 +14530,6 @@ OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
        this.autoHide = config.autoHide === undefined || !!config.autoHide;
        this.$input = config.input ? config.input.$input : null;
        this.$widget = config.widget ? config.widget.$element : null;
-       this.onKeyDownHandler = this.onKeyDown.bind( this );
        this.onDocumentMouseDownHandler = this.onDocumentMouseDown.bind( this );
 
        // Initialization
@@ -12939,6 +14554,7 @@ OO.mixinClass( OO.ui.MenuSelectWidget, OO.ui.ClippableElement );
 /**
  * Handles document mouse down events.
  *
+ * @protected
  * @param {jQuery.Event} e Key down event
  */
 OO.ui.MenuSelectWidget.prototype.onDocumentMouseDown = function ( e ) {
@@ -12951,84 +14567,68 @@ OO.ui.MenuSelectWidget.prototype.onDocumentMouseDown = function ( e ) {
 };
 
 /**
- * Handles key down events.
- *
- * @param {jQuery.Event} e Key down event
+ * @inheritdoc
  */
 OO.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
-       var nextItem,
-               handled = false,
-               highlightItem = this.getHighlightedItem();
+       var currentItem = this.getHighlightedItem() || this.getSelectedItem();
 
        if ( !this.isDisabled() && this.isVisible() ) {
-               if ( !highlightItem ) {
-                       highlightItem = this.getSelectedItem();
-               }
                switch ( e.keyCode ) {
-                       case OO.ui.Keys.ENTER:
-                               this.chooseItem( highlightItem );
-                               handled = true;
-                               break;
-                       case OO.ui.Keys.UP:
-                               nextItem = this.getRelativeSelectableItem( highlightItem, -1 );
-                               handled = true;
-                               break;
-                       case OO.ui.Keys.DOWN:
-                               nextItem = this.getRelativeSelectableItem( highlightItem, 1 );
-                               handled = true;
+                       case OO.ui.Keys.LEFT:
+                       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 );
+                               }
                                break;
                        case OO.ui.Keys.ESCAPE:
                        case OO.ui.Keys.TAB:
-                               if ( highlightItem ) {
-                                       highlightItem.setHighlighted( false );
+                               if ( currentItem ) {
+                                       currentItem.setHighlighted( false );
                                }
                                this.toggle( false );
-                               // Don't prevent tabbing away
-                               handled = ( e.keyCode === OO.ui.Keys.ESCAPE );
+                               // Don't prevent tabbing away, prevent defocusing
+                               if ( e.keyCode === OO.ui.Keys.ESCAPE ) {
+                                       e.preventDefault();
+                                       e.stopPropagation();
+                               }
                                break;
-               }
-
-               if ( nextItem ) {
-                       this.highlightItem( nextItem );
-                       nextItem.scrollElementIntoView();
-               }
-
-               if ( handled ) {
-                       e.preventDefault();
-                       e.stopPropagation();
-                       return false;
+                       default:
+                               OO.ui.MenuSelectWidget.super.prototype.onKeyDown.call( this, e );
+                               return;
                }
        }
 };
 
 /**
- * Bind key down listener.
+ * @inheritdoc
  */
 OO.ui.MenuSelectWidget.prototype.bindKeyDownListener = function () {
        if ( this.$input ) {
                this.$input.on( 'keydown', this.onKeyDownHandler );
        } else {
-               // Capture menu navigation keys
-               this.getElementWindow().addEventListener( 'keydown', this.onKeyDownHandler, true );
+               OO.ui.MenuSelectWidget.super.prototype.bindKeyDownListener.call( this );
        }
 };
 
 /**
- * Unbind key down listener.
+ * @inheritdoc
  */
 OO.ui.MenuSelectWidget.prototype.unbindKeyDownListener = function () {
        if ( this.$input ) {
                this.$input.off( 'keydown', this.onKeyDownHandler );
        } else {
-               this.getElementWindow().removeEventListener( 'keydown', this.onKeyDownHandler, true );
+               OO.ui.MenuSelectWidget.super.prototype.unbindKeyDownListener.call( this );
        }
 };
 
 /**
  * Choose an item.
  *
- * This will close the menu, unlike #selectItem which only changes selection.
+ * When a user chooses an item, the menu is closed.
  *
+ * Note that ‘choose’ should never be modified programmatically. A user can choose an option with the keyboard
+ * or mouse and it becomes selected. To select an item programmatically, use the #selectItem method.
  * @param {OO.ui.OptionWidget} item Item to choose
  * @chainable
  */
@@ -13137,20 +14737,26 @@ OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
 };
 
 /**
- * Menu for a text input widget.
- *
- * This menu is specially designed to be positioned beneath a text input widget. The menu's position
- * is automatically calculated and maintained when the menu is toggled or the window is resized.
+ * TextInputMenuSelectWidget is a menu that is specially designed to be positioned beneath
+ * a {@link OO.ui.TextInputWidget text input} field. The menu's position is automatically
+ * calculated and maintained when the menu is toggled or the window is resized.
+ * See OO.ui.ComboBoxWidget for an example of a widget that uses this class.
  *
  * @class
  * @extends OO.ui.MenuSelectWidget
  *
  * @constructor
- * @param {OO.ui.TextInputWidget} input Text input widget to provide menu for
+ * @param {OO.ui.TextInputWidget} inputWidget Text input widget to provide menu for
  * @param {Object} [config] Configuration options
  * @cfg {jQuery} [$container=input.$element] Element to render menu under
  */
-OO.ui.TextInputMenuSelectWidget = function OoUiTextInputMenuSelectWidget( input, config ) {
+OO.ui.TextInputMenuSelectWidget = function OoUiTextInputMenuSelectWidget( inputWidget, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( inputWidget ) && config === undefined ) {
+               config = inputWidget;
+               inputWidget = config.inputWidget;
+       }
+
        // Configuration initialization
        config = config || {};
 
@@ -13158,8 +14764,8 @@ OO.ui.TextInputMenuSelectWidget = function OoUiTextInputMenuSelectWidget( input,
        OO.ui.TextInputMenuSelectWidget.super.call( this, config );
 
        // Properties
-       this.input = input;
-       this.$container = config.$container || this.input.$element;
+       this.inputWidget = inputWidget;
+       this.$container = config.$container || this.inputWidget.$element;
        this.onWindowResizeHandler = this.onWindowResize.bind( this );
 
        // Initialization
@@ -13175,6 +14781,7 @@ OO.inheritClass( OO.ui.TextInputMenuSelectWidget, OO.ui.MenuSelectWidget );
 /**
  * Handle window resize event.
  *
+ * @private
  * @param {jQuery.Event} e Window resize event
  */
 OO.ui.TextInputMenuSelectWidget.prototype.onWindowResize = function () {
@@ -13214,6 +14821,7 @@ OO.ui.TextInputMenuSelectWidget.prototype.toggle = function ( visible ) {
 /**
  * Position the menu.
  *
+ * @private
  * @chainable
  */
 OO.ui.TextInputMenuSelectWidget.prototype.position = function () {
@@ -13233,23 +14841,31 @@ OO.ui.TextInputMenuSelectWidget.prototype.position = function () {
 };
 
 /**
- * Structured list of items.
+ * 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.
  *
- * Use with OO.ui.OutlineOptionWidget.
+ * ####Currently, this class is only used by {@link OO.ui.BookletLayout BookletLayouts}.####
  *
  * @class
  * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  */
 OO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {
-       // Configuration initialization
-       config = config || {};
-
        // Parent constructor
        OO.ui.OutlineSelectWidget.super.call( this, config );
 
+       // Mixin constructors
+       OO.ui.TabIndexedElement.call( this, config );
+
+       // Events
+       this.$element.on( {
+               focus: this.bindKeyDownListener.bind( this ),
+               blur: this.unbindKeyDownListener.bind( this )
+       } );
+
        // Initialization
        this.$element.addClass( 'oo-ui-outlineSelectWidget' );
 };
@@ -13257,9 +14873,29 @@ OO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.OutlineSelectWidget, OO.ui.SelectWidget );
-
-/**
- * Switch that slides on and off.
+OO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.TabIndexedElement );
+
+/**
+ * ToggleSwitches are switches that slide on and off. Their state is represented by a Boolean
+ * value (`true` for ‘on’, and `false` otherwise, the default). The ‘off’ state is represented
+ * visually by a slider in the leftmost position.
+ *
+ *     @example
+ *     // Toggle switches in the 'off' and 'on' position.
+ *     var toggleSwitch1 = new OO.ui.ToggleSwitchWidget();
+ *     var toggleSwitch2 = new OO.ui.ToggleSwitchWidget( {
+ *         value: true
+ *     } );
+ *
+ *     // Create a FieldsetLayout to layout and label switches
+ *     var fieldset = new OO.ui.FieldsetLayout( {
+ *        label: 'Toggle switches'
+ *     } );
+ *     fieldset.addItems( [
+ *         new OO.ui.FieldLayout( toggleSwitch1, { label: 'Off', align: 'top' } ),
+ *         new OO.ui.FieldLayout( toggleSwitch2, { label: 'On', align: 'top' } )
+ *     ] );
+ *     $( 'body' ).append( fieldset.$element );
  *
  * @class
  * @extends OO.ui.Widget
@@ -13268,7 +14904,8 @@ OO.inheritClass( OO.ui.OutlineSelectWidget, OO.ui.SelectWidget );
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {boolean} [value=false] Initial value
+ * @cfg {boolean} [value=false] The toggle switch’s initial on/off state.
+ *  By default, the toggle switch is in the 'off' position.
  */
 OO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {
        // Parent constructor
@@ -13311,6 +14948,7 @@ OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.TabIndexedElement );
 /**
  * Handle mouse click events.
  *
+ * @private
  * @param {jQuery.Event} e Mouse click event
  */
 OO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {
@@ -13323,13 +14961,14 @@ OO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {
 /**
  * Handle key press events.
  *
+ * @private
  * @param {jQuery.Event} e Key press event
  */
 OO.ui.ToggleSwitchWidget.prototype.onKeyPress = function ( e ) {
        if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
                this.setValue( !this.value );
+               return false;
        }
-       return false;
 };
 
 }( OO ) );
index 53d6441..c65a5c1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png differ
index cfbb6d8..0d37afa 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"><style>* { fill: #00C697 }</style>
+<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"/>
     </g>
index e074515..733c3f9 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 c3e43d1..fe3dc5b 100644 (file)
@@ -1,6 +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>
-    <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"/>
-    </g>
+    <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"/>
 </svg>
index 514ff1d..7dab898 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 201b4d7..b4629bf 100644 (file)
@@ -1,6 +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">
-    <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"/>
-    </g>
+    <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"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png
new file mode 100644 (file)
index 0000000..fcf98c5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.svg
new file mode 100644 (file)
index 0000000..6928cab
--- /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: #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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.png
new file mode 100644 (file)
index 0000000..92d231e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.svg
new file mode 100644 (file)
index 0000000..887c2f6
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.png
new file mode 100644 (file)
index 0000000..2880478
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.svg
new file mode 100644 (file)
index 0000000..ce9761e
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.png
new file mode 100644 (file)
index 0000000..e9c2f0e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.svg
new file mode 100644 (file)
index 0000000..557692a
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.png
new file mode 100644 (file)
index 0000000..8bef0a5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.svg
new file mode 100644 (file)
index 0000000..b07621e
--- /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">
+    <g id="g4">
+        <path d="M16 12h-10c-1.7 0-3 1.3-3 3h13v3l5-4.5-5-4.5v3z" id="path6"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.png
new file mode 100644 (file)
index 0000000..26e3e69
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.svg
new file mode 100644 (file)
index 0000000..a018928
--- /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">
+    <g>
+        <path d="M8 12h10c1.7 0 3 1.3 3 3h-13v3l-5-4.5 5-4.5v3z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.png
new file mode 100644 (file)
index 0000000..99dd638
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.svg
new file mode 100644 (file)
index 0000000..b719946
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.png
new file mode 100644 (file)
index 0000000..e5e47aa
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.svg
new file mode 100644 (file)
index 0000000..f14dfbd
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.png
new file mode 100644 (file)
index 0000000..a7c76b8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.svg
new file mode 100644 (file)
index 0000000..7711971
--- /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">
+    <g>
+        <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.png
new file mode 100644 (file)
index 0000000..314b8eb
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.svg
new file mode 100644 (file)
index 0000000..771b3ff
--- /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">
+    <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 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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.png
new file mode 100644 (file)
index 0000000..93f8624
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.svg
new file mode 100644 (file)
index 0000000..e54c0c4
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.png
new file mode 100644 (file)
index 0000000..7cf4ac8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.svg
new file mode 100644 (file)
index 0000000..31134f1
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.png
new file mode 100644 (file)
index 0000000..948443f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.svg
new file mode 100644 (file)
index 0000000..df08800
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png
new file mode 100644 (file)
index 0000000..4450e69
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.svg
new file mode 100644 (file)
index 0000000..f419e79
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png
new file mode 100644 (file)
index 0000000..b236b99
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.svg
new file mode 100644 (file)
index 0000000..e4c3a3f
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.png
new file mode 100644 (file)
index 0000000..ef3e20a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.svg
new file mode 100644 (file)
index 0000000..51a5c78
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.png
new file mode 100644 (file)
index 0000000..f1e48ac
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.svg
new file mode 100644 (file)
index 0000000..a693b59
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.png
new file mode 100644 (file)
index 0000000..b1c13a2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.svg
new file mode 100644 (file)
index 0000000..94ec670
--- /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">
+  <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>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.png
new file mode 100644 (file)
index 0000000..052ae37
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.svg
new file mode 100644 (file)
index 0000000..b2a6c13
--- /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">
+  <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>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.png
new file mode 100644 (file)
index 0000000..181dace
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.svg
new file mode 100644 (file)
index 0000000..0ddd1d4
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.png
new file mode 100644 (file)
index 0000000..76e0db4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.svg
new file mode 100644 (file)
index 0000000..3d9cfd7
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.png
new file mode 100644 (file)
index 0000000..e31809e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.svg
new file mode 100644 (file)
index 0000000..8f80759
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.png
new file mode 100644 (file)
index 0000000..86611e3
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.svg
new file mode 100644 (file)
index 0000000..4b82877
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png
new file mode 100644 (file)
index 0000000..871da47
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.svg
new file mode 100644 (file)
index 0000000..f96cebc
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png
new file mode 100644 (file)
index 0000000..ad6f342
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.svg
new file mode 100644 (file)
index 0000000..f04c6aa
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png
new file mode 100644 (file)
index 0000000..c4af66e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.svg
new file mode 100644 (file)
index 0000000..4dbec6d
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.png
new file mode 100644 (file)
index 0000000..b1c6955
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.svg
new file mode 100644 (file)
index 0000000..4f64820
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png
new file mode 100644 (file)
index 0000000..dc31051
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.svg
new file mode 100644 (file)
index 0000000..279466d
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.png
new file mode 100644 (file)
index 0000000..6058d8f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.svg
new file mode 100644 (file)
index 0000000..fdeeb6c
--- /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">
+    <g id="bold-cyrl-te">
+        <path id="te" d="M11 18v-10h-4v-2h11v2h-4v10"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png
new file mode 100644 (file)
index 0000000..3084fef
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.svg
new file mode 100644 (file)
index 0000000..5996c81
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.png
new file mode 100644 (file)
index 0000000..e650eb6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.svg
new file mode 100644 (file)
index 0000000..357d2e5
--- /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">
+    <g id="bold-f">
+        <path id="f" d="M16 8v-2h-8v12h3v-5h4v-2h-4v-3z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png
new file mode 100644 (file)
index 0000000..e30e1fe
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.svg
new file mode 100644 (file)
index 0000000..e032542
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png
new file mode 100644 (file)
index 0000000..814eff8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.svg
new file mode 100644 (file)
index 0000000..b211bf7
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.png
new file mode 100644 (file)
index 0000000..ff021ce
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.svg
new file mode 100644 (file)
index 0000000..1679793
--- /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">
+    <g id="bold-l">
+        <path id="l" d="M8 18v-12h3v10h5v2"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.png
new file mode 100644 (file)
index 0000000..7ae9321
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.svg
new file mode 100644 (file)
index 0000000..73ad019
--- /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">
+    <g id="bold-n">
+        <path id="n" d="M7 18v-12h3l4 8v-8h3v12h-3l-4-8v8h-3"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.png
new file mode 100644 (file)
index 0000000..39c2be0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.svg
new file mode 100644 (file)
index 0000000..146943a
--- /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">
+    <g id="bold-v">
+        <path id="v" d="M10.5 18l-4.5-12h3l3 8 3-8h3l-4.5 12"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.png
new file mode 100644 (file)
index 0000000..636d3bd
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.svg
new file mode 100644 (file)
index 0000000..7a058ed
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.png
new file mode 100644 (file)
index 0000000..87f9189
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.svg
new file mode 100644 (file)
index 0000000..6ae47ec
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.png
new file mode 100644 (file)
index 0000000..371dfc6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.svg
new file mode 100644 (file)
index 0000000..d803d6b
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.png
new file mode 100644 (file)
index 0000000..4a50c17
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.svg
new file mode 100644 (file)
index 0000000..744d0f4
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.png
new file mode 100644 (file)
index 0000000..80f1a47
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.svg
new file mode 100644 (file)
index 0000000..7bd0425
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.png
new file mode 100644 (file)
index 0000000..ea215df
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.svg
new file mode 100644 (file)
index 0000000..84b18da
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M21 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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png
new file mode 100644 (file)
index 0000000..a42aaa5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.svg
new file mode 100644 (file)
index 0000000..f31ec09
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.png
new file mode 100644 (file)
index 0000000..9064f61
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.svg
new file mode 100644 (file)
index 0000000..02b4e38
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.png
new file mode 100644 (file)
index 0000000..bc453ea
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.svg
new file mode 100644 (file)
index 0000000..a04ca57
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png
new file mode 100644 (file)
index 0000000..5591095
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.svg
new file mode 100644 (file)
index 0000000..d0e0c28
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png
new file mode 100644 (file)
index 0000000..e30bf2d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg
new file mode 100644 (file)
index 0000000..824790c
--- /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">
+    <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" />
+    </g>
+</svg>
index 0a6d487..875fa68 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png differ
index 90923d5..e55233f 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24"><style>* { fill: #00C697 }</style>
+<?xml version="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="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="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
     </g>
 </svg>
index 1ff6790..83ba2b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png differ
index 3e42ba8..77d90dc 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24"><style>* { fill: #FFFFFF }</style>
+<?xml version="1.0" 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="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="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.png
new file mode 100644 (file)
index 0000000..343d52f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.svg
new file mode 100644 (file)
index 0000000..cd9e501
--- /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: #347BFF }</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 9a2c9db..1ea326d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png differ
index 8d4a1f8..cf7858b 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="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="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
     </g>
 </svg>
index e10c539..0e0d9c2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png differ
index 88e014b..085e667 100644 (file)
@@ -1 +1,2 @@
-<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00C697 }</style><circle cx="12" cy="12" r="6"></circle></svg>
+<?xml version="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>
index 03c308d..f5285c7 100644 (file)
@@ -1 +1,2 @@
-<?xml version="1.0" 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>
+<?xml version="1.0" 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>
index a600581..436259e 100644 (file)
@@ -1 +1,2 @@
-<?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>
+<?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>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.png
new file mode 100644 (file)
index 0000000..ae1621c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.svg
new file mode 100644 (file)
index 0000000..28ba0cb
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.png
new file mode 100644 (file)
index 0000000..4acaa0f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.svg
new file mode 100644 (file)
index 0000000..7625307
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.png
new file mode 100644 (file)
index 0000000..e62c52c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.svg
new file mode 100644 (file)
index 0000000..1cf7267
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png
deleted file mode 100644 (file)
index 7b76ffe..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.svg
deleted file mode 100644 (file)
index 0305027..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <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"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png
new file mode 100644 (file)
index 0000000..6d8abc3
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg
new file mode 100644 (file)
index 0000000..ec44c92
--- /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.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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png
new file mode 100644 (file)
index 0000000..ea65697
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg
new file mode 100644 (file)
index 0000000..4f0f64e
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png
new file mode 100644 (file)
index 0000000..004a518
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg
new file mode 100644 (file)
index 0000000..b5ae392
--- /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.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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png
new file mode 100644 (file)
index 0000000..1cb898d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg
new file mode 100644 (file)
index 0000000..d9829d0
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png
deleted file mode 100644 (file)
index 4eedfbc..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.svg
deleted file mode 100644 (file)
index 1345e86..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <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"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png
new file mode 100644 (file)
index 0000000..b18e2e6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.svg
new file mode 100644 (file)
index 0000000..5d29e3c
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.png
new file mode 100644 (file)
index 0000000..07abcbe
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.svg
new file mode 100644 (file)
index 0000000..eb4c360
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.png
new file mode 100644 (file)
index 0000000..54c0af7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.svg
new file mode 100644 (file)
index 0000000..e929fdb
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.png
new file mode 100644 (file)
index 0000000..9408199
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.svg
new file mode 100644 (file)
index 0000000..7bc1c22
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M12 18l8-10h-16z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.png
new file mode 100644 (file)
index 0000000..b63ca2d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.svg
new file mode 100644 (file)
index 0000000..d0d5bb5
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.png
new file mode 100644 (file)
index 0000000..457ef94
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.svg
new file mode 100644 (file)
index 0000000..9abb2ae
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.png
new file mode 100644 (file)
index 0000000..afaddc5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.svg
new file mode 100644 (file)
index 0000000..3972e07
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png
new file mode 100644 (file)
index 0000000..4750795
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.svg
new file mode 100644 (file)
index 0000000..978b2fd
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.png
new file mode 100644 (file)
index 0000000..966bfcb
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.svg
new file mode 100644 (file)
index 0000000..7e37682
--- /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">
+    <g id="Layer_2">
+        <g id="g184">
+            <path d="M21 4v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-1.5 0h-3v-1s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zm-6.5 5.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9v-1.8l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.png
new file mode 100644 (file)
index 0000000..961abe6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.svg
new file mode 100644 (file)
index 0000000..0b4751d
--- /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">
+    <g id="Layer_2">
+        <g id="g184">
+            <path d="M4 4v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm1.5 0h3v-1s0-1.5-1.5-1.5c-1.48.06-1.5 1.5-1.5 1.5zm6.5 5.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9v-1.8l9 9 1 5-5-1-8-8h3z" id="path186"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png
new file mode 100644 (file)
index 0000000..fe8631e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.svg
new file mode 100644 (file)
index 0000000..f346874
--- /dev/null
@@ -0,0 +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="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"/>
+        </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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png
new file mode 100644 (file)
index 0000000..ca5596e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.svg
new file mode 100644 (file)
index 0000000..5b59d45
--- /dev/null
@@ -0,0 +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="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"/>
+        </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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.png
new file mode 100644 (file)
index 0000000..1c876e3
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.svg
new file mode 100644 (file)
index 0000000..510cf3d
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" 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="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+        </g>
+        <g>
+            <path d="M14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+        </g>
+        <g>
+            <path d="M20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.png
new file mode 100644 (file)
index 0000000..1e4050c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.svg
new file mode 100644 (file)
index 0000000..dd36a30
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g>
+        <g>
+            <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+        </g>
+        <g>
+            <path d="M14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+        </g>
+        <g>
+            <path d="M20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png
new file mode 100644 (file)
index 0000000..10927e1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.svg
new file mode 100644 (file)
index 0000000..827bc1b
--- /dev/null
@@ -0,0 +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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png
new file mode 100644 (file)
index 0000000..7a3454e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.svg
new file mode 100644 (file)
index 0000000..c375ca0
--- /dev/null
@@ -0,0 +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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png
new file mode 100644 (file)
index 0000000..26accd8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.svg
new file mode 100644 (file)
index 0000000..fa3bc3c
--- /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">
+    <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"/>
+        <circle cx="12" cy="14" r="2" id="circle8"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png
new file mode 100644 (file)
index 0000000..301bf8c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.svg
new file mode 100644 (file)
index 0000000..fa1167d
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.png
new file mode 100644 (file)
index 0000000..63ceaaf
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.svg
new file mode 100644 (file)
index 0000000..6e81d2b
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.png
new file mode 100644 (file)
index 0000000..80835c0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.svg
new file mode 100644 (file)
index 0000000..4b743aa
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png
new file mode 100644 (file)
index 0000000..fff89fe
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.svg
new file mode 100644 (file)
index 0000000..49cdb7a
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"/>
+        </g>
+        <g id="Layer_2">
+            <g id="g230">
+                <path id="path232" d="M17.997 1.989l.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"/>
+            </g>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.png
new file mode 100644 (file)
index 0000000..89674cc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.svg
new file mode 100644 (file)
index 0000000..e470de4
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"/>
+        </g>
+        <g id="Layer_2">
+            <g id="g230">
+                <path id="path232" d="M7.003 1.989l-.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"/>
+            </g>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.png
new file mode 100644 (file)
index 0000000..163465e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg
new file mode 100644 (file)
index 0000000..63e0b1a
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M2 5v15h20v-15h-20zm15 11h-9c-.6 0-1-.4-1-1v-6h3l2 1h5v6z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.png
new file mode 100644 (file)
index 0000000..4856f62
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg
new file mode 100644 (file)
index 0000000..25bec74
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M22 5v15h-20v-15h20zm-15 11h9c.6 0 1-.4 1-1v-6h-3l-2 1h-5v6z" id="path246"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.png
new file mode 100644 (file)
index 0000000..df174d6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.svg
new file mode 100644 (file)
index 0000000..191584e
--- /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">
+    <g>
+        <path d="M11 13l-6-7h15l-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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.png
new file mode 100644 (file)
index 0000000..1204eb1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.svg
new file mode 100644 (file)
index 0000000..45f2f64
--- /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">
+    <g id="g256">
+        <path d="M14 13l6-7h-15l6 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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.png
new file mode 100644 (file)
index 0000000..0bd2124
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.svg
new file mode 100644 (file)
index 0000000..6433201
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.png
deleted file mode 100644 (file)
index 185c1a2..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.svg
deleted file mode 100644 (file)
index 3670661..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <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"/>
-        <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="bottom" d="M11 16h2v2h-2z"/>
-        </g>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png
new file mode 100644 (file)
index 0000000..185c1a2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.svg
new file mode 100644 (file)
index 0000000..3670661
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" 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"/>
+        <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="bottom" d="M11 16h2v2h-2z"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png
new file mode 100644 (file)
index 0000000..b80df00
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.svg
new file mode 100644 (file)
index 0000000..bb2545c
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="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"/>
+        <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="bottom" d="M11 16h2v2h-2z"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png
new file mode 100644 (file)
index 0000000..dfb9c03
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.svg
new file mode 100644 (file)
index 0000000..203f8f9
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" 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"/>
+        <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="bottom" d="M13 16h-2v2h2z"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png
new file mode 100644 (file)
index 0000000..62f3d21
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.svg
new file mode 100644 (file)
index 0000000..99c7f84
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="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"/>
+        <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="bottom" d="M13 16h-2v2h2z"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help.png
deleted file mode 100644 (file)
index b80df00..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help.svg
deleted file mode 100644 (file)
index bb2545c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <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"/>
-        <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="bottom" d="M11 16h2v2h-2z"/>
-        </g>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png
new file mode 100644 (file)
index 0000000..58bf564
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg
new file mode 100644 (file)
index 0000000..bebe0a9
--- /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">
+    <g>
+        <path d="M20 18l-4-4-2 2-4-4-2 1-4 5h16zm2-13v15h-20v-15h20z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png
new file mode 100644 (file)
index 0000000..73ee31a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.svg
new file mode 100644 (file)
index 0000000..88e0e3c
--- /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">
+    <g id="g278">
+        <path d="M4 18l4-4 2 2 4-4 2 1 4 5h-16zm-2-13v15h20v-15h-20z" id="path280"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png
new file mode 100644 (file)
index 0000000..7ed8b7e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.svg
new file mode 100644 (file)
index 0000000..300e4b1
--- /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">
+    <path d="M17 12v-4h-4v-3h-13v15h20v-8h-3zm-15 6l4-5 2-1 4 4 2-2 4 4h-16z"/>
+    <g>
+        <path d="M24 5h-4v-4h-2v4h-4v2h4v4h2v-4h4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png
new file mode 100644 (file)
index 0000000..74b6ef3
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.svg
new file mode 100644 (file)
index 0000000..70e3248
--- /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">
+    <path d="M7 12v-4h4v-3h13v15h-20v-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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png
new file mode 100644 (file)
index 0000000..c636a8d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.svg
new file mode 100644 (file)
index 0000000..8cec9f5
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.png
new file mode 100644 (file)
index 0000000..59439aa
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg
new file mode 100644 (file)
index 0000000..6bb78f7
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M4.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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.png
new file mode 100644 (file)
index 0000000..daf4257
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.svg
new file mode 100644 (file)
index 0000000..ada3395
--- /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">
+    <g>
+        <path d="M10 8h9v2h-9v-2zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8h-18v-2h18v2zm0 14h-18v-2h18v2zm-18-12v8l5-4-5-4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.png
new file mode 100644 (file)
index 0000000..6ebe883
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.svg
new file mode 100644 (file)
index 0000000..9afedbb
--- /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">
+    <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"/>
+    </g>
+</svg>
index be4d2c7..04cd889 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"><style>* { fill: #FFFFFF }</style>
+<?xml version="1.0" 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"/>
     </g>
index 9c0d1cb..4bdefd4 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="info">
         <path id="circled-i" d="M11.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"/>
     </g>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.png
new file mode 100644 (file)
index 0000000..97927a8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.svg
new file mode 100644 (file)
index 0000000..0833f84
--- /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">
+    <g id="insert">
+        <path d="M13 5h-2v6h-6v2h6v6h2v-6h6v-2h-6z" id="plus"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.png
new file mode 100644 (file)
index 0000000..a81e803
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.svg
new file mode 100644 (file)
index 0000000..a0e66bf
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png
new file mode 100644 (file)
index 0000000..7cf774f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg
new file mode 100644 (file)
index 0000000..d4bff1b
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png
new file mode 100644 (file)
index 0000000..e8f2b62
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.svg
new file mode 100644 (file)
index 0000000..bfbc9bf
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png
new file mode 100644 (file)
index 0000000..4d4178a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.svg
new file mode 100644 (file)
index 0000000..63de0f6
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png
new file mode 100644 (file)
index 0000000..fc6133c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.svg
new file mode 100644 (file)
index 0000000..b468dea
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png
new file mode 100644 (file)
index 0000000..1711ef9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.svg
new file mode 100644 (file)
index 0000000..92a834d
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png
new file mode 100644 (file)
index 0000000..f5b44d9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.svg
new file mode 100644 (file)
index 0000000..66a5ef5
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png
new file mode 100644 (file)
index 0000000..e728cd7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.svg
new file mode 100644 (file)
index 0000000..3398904
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png
new file mode 100644 (file)
index 0000000..3c6b3c1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.svg
new file mode 100644 (file)
index 0000000..93bec5a
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.png
new file mode 100644 (file)
index 0000000..4f87e9a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.svg
new file mode 100644 (file)
index 0000000..d483154
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png
new file mode 100644 (file)
index 0000000..4fc10c5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.svg
new file mode 100644 (file)
index 0000000..4f6364c
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png
new file mode 100644 (file)
index 0000000..b08c1d4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.svg
new file mode 100644 (file)
index 0000000..c7e1603
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M16 9v-1h-6v1h6zm-2 2v-1h-4v1h4zm-8-6h1v16h-1v-16zm2 0h10v13c0 1.7-1.3 3-3 3h-7v-16z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png
new file mode 100644 (file)
index 0000000..31dbb88
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg
new file mode 100644 (file)
index 0000000..2d16be3
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M8 9v-1h6v1h-6zm2 2v-1h4v1h-4zm8-6h-1v16h1v-16zm-2 0h-10v13c0 1.7 1.3 3 3 3h7v-16z" id="path326"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.png
new file mode 100644 (file)
index 0000000..ba9ce73
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.svg
new file mode 100644 (file)
index 0000000..8dfb89a
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.png
new file mode 100644 (file)
index 0000000..65ed300
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.svg
new file mode 100644 (file)
index 0000000..0639287
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.png
new file mode 100644 (file)
index 0000000..7af2472
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.svg
new file mode 100644 (file)
index 0000000..ea5055c
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.png
new file mode 100644 (file)
index 0000000..b6e9b6e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.svg
new file mode 100644 (file)
index 0000000..b35d108
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png
new file mode 100644 (file)
index 0000000..c864384
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.svg
new file mode 100644 (file)
index 0000000..081e49a
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.png
new file mode 100644 (file)
index 0000000..dac7b2c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.svg
new file mode 100644 (file)
index 0000000..47e71b3
--- /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">
+    <g id="layout-ltr">
+        <path id="text" d="M5 19v-14h6v8h8v6h-14z"/>
+        <path id="float" d="M13 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.png
new file mode 100644 (file)
index 0000000..470b785
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.svg
new file mode 100644 (file)
index 0000000..fe9ee61
--- /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">
+    <g id="layout-rtl">
+        <path id="text" d="M5 19v-6h8v-8h6v14h-14z"/>
+        <path id="float" d="M5 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.png
deleted file mode 100644 (file)
index d920459..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.svg
deleted file mode 100644 (file)
index 01ce113..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <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"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png
new file mode 100644 (file)
index 0000000..3b60a11
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.svg
new file mode 100644 (file)
index 0000000..1b332ce
--- /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">
+    <g>
+        <path d="M15.8 3.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/link-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.png
new file mode 100644 (file)
index 0000000..024c2db
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.svg
new file mode 100644 (file)
index 0000000..d4c2fd6
--- /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">
+    <g id="g358">
+        <path d="M9.025 3.6c2.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.6l2.6 2.6c.4.4 1.2.7 1.8.7 1.4 0 2.1-.9 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-.9-.9-1.5-2-1.5-3.3.2-2.2 2.2-4.1 4.4-4.1zm4.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.6l-2.6-2.6c-.4-.4-1.2-.7-1.8-.7-1.4 0-2.1 1-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.6c1.7 1.7 1.7 4.4 0 6-1.6 1.6-4.4 1.7-5.9 0l-1.9-1.9c.3.1.6.1.9.1.5 0 .9 0 1.3-.2z" id="path360"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link.png
deleted file mode 100644 (file)
index 2a087a4..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link.svg
deleted file mode 100644 (file)
index dbae341..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <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"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.png
new file mode 100644 (file)
index 0000000..c73e1a1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.svg
new file mode 100644 (file)
index 0000000..09a4ff5
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M21 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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.png
new file mode 100644 (file)
index 0000000..e586f02
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.svg
new file mode 100644 (file)
index 0000000..67b9dfe
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.png
new file mode 100644 (file)
index 0000000..ab6dfe0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.svg
new file mode 100644 (file)
index 0000000..87e8854
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M21 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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.png
new file mode 100644 (file)
index 0000000..b433b2c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.svg
new file mode 100644 (file)
index 0000000..831a5fb
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-invert.png
deleted file mode 100644 (file)
index d8d5eac..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-invert.svg
deleted file mode 100644 (file)
index 016c2ed..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?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"><style>* { fill: #FFFFFF }</style>
-    <g id="lock">
-        <path d="M14 9.06c0-1.562-.656-2.342-2-2.342-1.344 0-1.992.775-2 2.33V10h4zm3-.036V10h2v10H7c-.46 0-1.168-.156-1.497-.485-.33-.327-.503-.727-.503-1.195V10h2v-.964c0-.914.19-1.75.574-2.517.383-.767.92-1.407 1.606-1.852C9.867 4.223 11.14 4 12 4c1.243 0 2.852.473 3.71 1.44.86.97 1.29 2.186 1.29 3.584z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.png
new file mode 100644 (file)
index 0000000..06a6afb
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.svg
new file mode 100644 (file)
index 0000000..5945492
--- /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">
+    <g id="g390">
+        <path d="M15 8s0-3-2.5-3-2.5 3-2.5 3v1h5zm2 0v1h2v10h-10c-1.7 0-3-1.3-3-3v-7h2v-1s0-5 4.5-5 4.5 5 4.5 5z" id="path392"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.png
new file mode 100644 (file)
index 0000000..15dd61e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.svg
new file mode 100644 (file)
index 0000000..0591f66
--- /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">
+    <g id="g390">
+        <path d="M10 8s0-3 2.5-3 2.5 3 2.5 3v1h-5zm-2 0v1h-2v10h10c1.7 0 3-1.3 3-3v-7h-2v-1s0-5-4.5-5-4.5 5-4.5 5z" id="path392"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock.png
deleted file mode 100644 (file)
index 59787d2..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock.svg
deleted file mode 100644 (file)
index 86fd1e3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?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="M14 9.06c0-1.562-.656-2.342-2-2.342-1.344 0-1.992.775-2 2.33V10h4zm3-.036V10h2v10H7c-.46 0-1.168-.156-1.497-.485-.33-.327-.503-.727-.503-1.195V10h2v-.964c0-.914.19-1.75.574-2.517.383-.767.92-1.407 1.606-1.852C9.867 4.223 11.14 4 12 4c1.243 0 2.852.473 3.71 1.44.86.97 1.29 2.186 1.29 3.584z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.png
new file mode 100644 (file)
index 0000000..a08b629
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.svg
new file mode 100644 (file)
index 0000000..4af765c
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.png
new file mode 100644 (file)
index 0000000..135df45
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.svg
new file mode 100644 (file)
index 0000000..f72c04a
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.png
new file mode 100644 (file)
index 0000000..7c2c123
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.svg
new file mode 100644 (file)
index 0000000..124b210
--- /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">
+    <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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.png
new file mode 100644 (file)
index 0000000..df8600b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.svg
new file mode 100644 (file)
index 0000000..079e177
--- /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">
+    <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"/>
+        <circle cx="12" cy="15" r="3"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png
new file mode 100644 (file)
index 0000000..8629f29
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.svg
new file mode 100644 (file)
index 0000000..6672d9d
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png
new file mode 100644 (file)
index 0000000..6f06dfe
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.svg
new file mode 100644 (file)
index 0000000..49e598c
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M16.4 16.4c1-1.2 1.6-2.7 1.6-4.4 0-3.9-3.1-7-7-7s-7 3.1-7 7 3.1 7 7 7c1.2 0 2.3-.3 3.2-.8l2.8 2.8c1.4 1.4 2.5 1.5 4 0l-4.6-4.6zm-10.4-4.4c0-2.8 2.2-5 5-5s5 2.2 5 5-2.2 5-5 5-5-2.3-5-5z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png
new file mode 100644 (file)
index 0000000..358048d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.svg
new file mode 100644 (file)
index 0000000..c9695b6
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M8.6 16.4c-1-1.2-1.6-2.7-1.6-4.4 0-3.9 3.1-7 7-7s7 3.1 7 7-3.1 7-7 7c-1.2 0-2.3-.3-3.2-.8l-2.8 2.8c-1.4 1.4-2.5 1.5-4 0l4.6-4.6zm10.4-4.4c0-2.8-2.2-5-5-5s-5 2.2-5 5 2.2 5 5 5 5-2.3 5-5z" id="path414"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.png
new file mode 100644 (file)
index 0000000..3629f55
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.svg
new file mode 100644 (file)
index 0000000..0fc4773
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.png
new file mode 100644 (file)
index 0000000..5d1362f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.svg
new file mode 100644 (file)
index 0000000..b33f1e3
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.png
new file mode 100644 (file)
index 0000000..46b31a4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.svg
new file mode 100644 (file)
index 0000000..f422c84
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.png
new file mode 100644 (file)
index 0000000..6d51b9a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.svg
new file mode 100644 (file)
index 0000000..9a54eb6
--- /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">
+    <g id="g434">
+        <g id="g436">
+            <path d="M24 4h-4v-4h-2v4h-4v2h4v4h2v-4h4z" 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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.png
new file mode 100644 (file)
index 0000000..b7797c4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.svg
new file mode 100644 (file)
index 0000000..d3e152e
--- /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">
+    <g id="g434">
+        <g id="g436">
+            <path d="M0 4h4v-4h2v4h4v2h-4v4h-2v-4h-4z" 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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.png
new file mode 100644 (file)
index 0000000..279c61d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.svg
new file mode 100644 (file)
index 0000000..3f308ff
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.png
new file mode 100644 (file)
index 0000000..c44dea0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.svg
new file mode 100644 (file)
index 0000000..fa61aa1
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.png
new file mode 100644 (file)
index 0000000..7ba0ee9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.svg
new file mode 100644 (file)
index 0000000..9063bd4
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M20 11l-4-3v2h-3v-3h2l-3-4-3 4h2v3h-3v-2l-4 3 4 3v-2h3v3h-2l3 4 3-4h-2v-3h3v2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.png
new file mode 100644 (file)
index 0000000..ed7b930
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.svg
new file mode 100644 (file)
index 0000000..b8ea833
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.png
new file mode 100644 (file)
index 0000000..46567c7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.svg
new file mode 100644 (file)
index 0000000..58a9eeb
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png
new file mode 100644 (file)
index 0000000..d4b638a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.svg
new file mode 100644 (file)
index 0000000..dad5f51
--- /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">
+  <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>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.png
new file mode 100644 (file)
index 0000000..20f5d0d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.svg
new file mode 100644 (file)
index 0000000..fd758cc
--- /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">
+  <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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.png
new file mode 100644 (file)
index 0000000..056e7dd
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.svg
new file mode 100644 (file)
index 0000000..46471a3
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.png
new file mode 100644 (file)
index 0000000..8221a09
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.svg
new file mode 100644 (file)
index 0000000..7564dff
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.png
new file mode 100644 (file)
index 0000000..8b15525
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.svg
new file mode 100644 (file)
index 0000000..601428e
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.png
new file mode 100644 (file)
index 0000000..f7bab38
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.svg
new file mode 100644 (file)
index 0000000..31785a3
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.png
new file mode 100644 (file)
index 0000000..4ac336c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.svg
new file mode 100644 (file)
index 0000000..4264ff0
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.png
new file mode 100644 (file)
index 0000000..68577dd
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.svg
new file mode 100644 (file)
index 0000000..2479343
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.png
new file mode 100644 (file)
index 0000000..a9a186b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.svg
new file mode 100644 (file)
index 0000000..9c0ea59
--- /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">
+    <g id="outline-ltr">
+        <path id="text" d="M5 13h14v6h-14v-6z"/>
+        <path id="float" d="M5 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.png
new file mode 100644 (file)
index 0000000..b7f025d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.svg
new file mode 100644 (file)
index 0000000..2a3428e
--- /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">
+    <g id="outline-rtl">
+        <path id="text" d="M19 19h-14v-6h14v6z"/>
+        <path id="float" d="M13 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.png
new file mode 100644 (file)
index 0000000..38a90e2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.svg
new file mode 100644 (file)
index 0000000..92fc07e
--- /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">
+    <g>
+        <path d="M2 3h18v2h-16v12h-2v-14zm13 13l-4-4-4 5h13l-3-3-2 2zm-10-10h17v13h-17v-13z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.png
new file mode 100644 (file)
index 0000000..bcb805d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.svg
new file mode 100644 (file)
index 0000000..d989d3d
--- /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">
+    <g id="g508">
+        <path d="M22 3h-18v2h16v12h2v-14zm-13 13l4-4 4 5h-13l3-3 2 2zm10-10h-17v13h17v-13z" id="path510"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.png
new file mode 100644 (file)
index 0000000..c5050e0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.svg
new file mode 100644 (file)
index 0000000..5ce9563
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.png
new file mode 100644 (file)
index 0000000..1264e9f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.svg
new file mode 100644 (file)
index 0000000..591a5d3
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.png
new file mode 100644 (file)
index 0000000..051ab1d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.svg
new file mode 100644 (file)
index 0000000..baae35e
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.png
new file mode 100644 (file)
index 0000000..18e247d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.svg
new file mode 100644 (file)
index 0000000..8294afd
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png
new file mode 100644 (file)
index 0000000..f6a9c86
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.svg
new file mode 100644 (file)
index 0000000..97b77bb
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png
new file mode 100644 (file)
index 0000000..03050e1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.svg
new file mode 100644 (file)
index 0000000..0ad5f37
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png
new file mode 100644 (file)
index 0000000..7060db7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.svg
new file mode 100644 (file)
index 0000000..dc1c06f
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png
new file mode 100644 (file)
index 0000000..df0facf
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.svg
new file mode 100644 (file)
index 0000000..3a8b701
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png
new file mode 100644 (file)
index 0000000..b04ec74
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.svg
new file mode 100644 (file)
index 0000000..24fca8f
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png
new file mode 100644 (file)
index 0000000..9e91202
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.svg
new file mode 100644 (file)
index 0000000..736f2a6
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.png
new file mode 100644 (file)
index 0000000..3bca20f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.svg
new file mode 100644 (file)
index 0000000..884d40d
--- /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">
+    <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"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.png
new file mode 100644 (file)
index 0000000..dc9b0e6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.svg
new file mode 100644 (file)
index 0000000..a07e836
--- /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">
+    <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"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png
new file mode 100644 (file)
index 0000000..4643928
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.svg
new file mode 100644 (file)
index 0000000..7b67261
--- /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">
+    <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" />
+    </g>
+</svg>
index 8b6799f..84e6498 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png differ
index be51bea..3551e58 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"><style>* { fill: #E81915 }</style>
+<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"/>
     </g>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png
new file mode 100644 (file)
index 0000000..ebce3c0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.svg
new file mode 100644 (file)
index 0000000..6e4979f
--- /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">
+    <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"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png
new file mode 100644 (file)
index 0000000..918b3d7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.svg
new file mode 100644 (file)
index 0000000..a9c7d27
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="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"/>
+    </g>
+</svg>
index d7ad1e5..c6eba15 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"><style>* { fill: #FFFFFF }</style>
+<?xml version="1.0" 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"/>
     </g>
index 9fa0a4b..bcd665e 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="settings">
         <path id="gear" d="M3 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"/>
     </g>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.png
new file mode 100644 (file)
index 0000000..30e88db
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.svg
new file mode 100644 (file)
index 0000000..0d49504
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png
new file mode 100644 (file)
index 0000000..3d9fb23
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.svg
new file mode 100644 (file)
index 0000000..6c0ae5e
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.png
new file mode 100644 (file)
index 0000000..7181e6d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.svg
new file mode 100644 (file)
index 0000000..e8b427b
--- /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">
+  <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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.png
new file mode 100644 (file)
index 0000000..cc539f0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.svg
new file mode 100644 (file)
index 0000000..e5e9519
--- /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">
+  <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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png
new file mode 100644 (file)
index 0000000..51ccb89
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.svg
new file mode 100644 (file)
index 0000000..4d60128
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.png
new file mode 100644 (file)
index 0000000..902d548
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.svg
new file mode 100644 (file)
index 0000000..f3fb8b3
--- /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">
+    <g>
+        <path d="M19 20h-17l3-3v-11h17v11c0 1.7-1.3 3-3 3z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.png
new file mode 100644 (file)
index 0000000..133ef1d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.svg
new file mode 100644 (file)
index 0000000..fd9b7bd
--- /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">
+    <g id="g586">
+        <path d="M5 20h17l-3-3v-11h-17v11c0 1.7 1.3 3 3 3z" id="path588"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.png
new file mode 100644 (file)
index 0000000..53e3f2c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg
new file mode 100644 (file)
index 0000000..333c1e8
--- /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">
+    <g>
+        <path d="M19 20h-17l3-3v-11h17v11c0 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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.png
new file mode 100644 (file)
index 0000000..ef78b5e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg
new file mode 100644 (file)
index 0000000..4e6313f
--- /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">
+    <g id="g598">
+        <path d="M5 20h17l-3-3v-11h-17v11c0 1.7 1.3 3 3 3z" id="path600"/>
+    </g>
+    <path d="M11 9h-1v7h1zm3 3h-7v1h7z" id="path602" fill="#fff"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.png
new file mode 100644 (file)
index 0000000..ed649b8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.svg
new file mode 100644 (file)
index 0000000..c4b4a2f
--- /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">
+    <g>
+        <path d="M20 9v9l2 2h-14v-11h12zm-17-5h12v4h-8v7h-6l2-2v-9z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.png
new file mode 100644 (file)
index 0000000..fa3bd32
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.svg
new file mode 100644 (file)
index 0000000..c452fbb
--- /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">
+    <g id="g612">
+        <path d="M3 9v9l-2 2h14v-11h-12zm17-5h-12v4h8v7h6l-2-2v-9z" id="path614"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.png
new file mode 100644 (file)
index 0000000..046bbf7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.svg
new file mode 100644 (file)
index 0000000..ea8c26c
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.png
new file mode 100644 (file)
index 0000000..b7e20ef
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.svg
new file mode 100644 (file)
index 0000000..7bd0633
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.png
new file mode 100644 (file)
index 0000000..cab7a98
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.svg
new file mode 100644 (file)
index 0000000..480189f
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png
new file mode 100644 (file)
index 0000000..8aafe3f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.svg
new file mode 100644 (file)
index 0000000..d57b652
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png
new file mode 100644 (file)
index 0000000..a0065cb
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.svg
new file mode 100644 (file)
index 0000000..8409dc1
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.png
new file mode 100644 (file)
index 0000000..093b1a9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.svg
new file mode 100644 (file)
index 0000000..acacc36
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M4 9h12v2h-12v-2zm0 3h8v2h-8v-2zm0-7h16v3h-16v-3zm16 14h-16v-3h16v3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.png
new file mode 100644 (file)
index 0000000..e8aea5e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.svg
new file mode 100644 (file)
index 0000000..c38a283
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M20 9h-12v2h12v-2zm0 3h-8v2h8v-2zm0-7h-16v3h16v-3zm-16 14h16v-3h-16v3z" id="path624"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.png
new file mode 100644 (file)
index 0000000..a49eaef
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.svg
new file mode 100644 (file)
index 0000000..47e70d7
--- /dev/null
@@ -0,0 +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"/>
+    </g>
+    <g>
+        <path d="M20 15h-16v-2h16v2z"/>
+    </g>
+    <g>
+        <path d="M20 11h-16v-2h16v2z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.png
new file mode 100644 (file)
index 0000000..2c1e230
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.svg
new file mode 100644 (file)
index 0000000..7f8822b
--- /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">
+    <g>
+        <path d="M20 11h-16v-2h16v2zm-16 1h8v2h-8v-2z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.png
new file mode 100644 (file)
index 0000000..5ce176c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.svg
new file mode 100644 (file)
index 0000000..fcb10ba
--- /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">
+    <g id="g654">
+        <path d="M4 11h16v-2h-16v2zm16 1h-8v2h8v-2z" id="path656"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.png
new file mode 100644 (file)
index 0000000..533a915
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.svg
new file mode 100644 (file)
index 0000000..76c80d2
--- /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">
+    <g>
+        <path d="M17 13h-13v-3h13v3zm-5 6h-8v-3h8v3zm-8-12v-3h16v3h-16z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.png
new file mode 100644 (file)
index 0000000..282c652
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.svg
new file mode 100644 (file)
index 0000000..308c2e6
--- /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">
+    <g id="g666">
+        <path d="M7 13h13v-3h-13v3zm5 6h8v-3h-8v3zm8-12v-3h-16v3h16z" id="path668"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.png
new file mode 100644 (file)
index 0000000..f8b8766
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.svg
new file mode 100644 (file)
index 0000000..b7507da
--- /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">
+       <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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.png
new file mode 100644 (file)
index 0000000..f01e11d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.svg
new file mode 100644 (file)
index 0000000..9fe5325
--- /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">
+       <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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png
new file mode 100644 (file)
index 0000000..1f829c1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.svg
new file mode 100644 (file)
index 0000000..f1b7caf
--- /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">
+    <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"/>
+    <circle cx="12" cy="11" r="4"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png
new file mode 100644 (file)
index 0000000..1e6f362
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.svg
new file mode 100644 (file)
index 0000000..a625fb9
--- /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">
+    <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"/>
+    <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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.png
new file mode 100644 (file)
index 0000000..69fe6e7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.svg
new file mode 100644 (file)
index 0000000..39f30a7
--- /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">
+       <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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.png
new file mode 100644 (file)
index 0000000..eac3d1d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.svg
new file mode 100644 (file)
index 0000000..eabab21
--- /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">
+       <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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.png
new file mode 100644 (file)
index 0000000..1389d3d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.svg
new file mode 100644 (file)
index 0000000..15bb06a
--- /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">
+    <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>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.png
new file mode 100644 (file)
index 0000000..dfd5e51
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.svg
new file mode 100644 (file)
index 0000000..798ee4a
--- /dev/null
@@ -0,0 +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="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" />
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.png
new file mode 100644 (file)
index 0000000..1354a88
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.svg
new file mode 100644 (file)
index 0000000..dfa33a0
--- /dev/null
@@ -0,0 +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="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" />
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.png
new file mode 100644 (file)
index 0000000..3d8091e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.svg
new file mode 100644 (file)
index 0000000..91d0664
--- /dev/null
@@ -0,0 +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="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" />
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.png
new file mode 100644 (file)
index 0000000..e357f90
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.svg
new file mode 100644 (file)
index 0000000..4b71f2a
--- /dev/null
@@ -0,0 +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="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" />
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.png
new file mode 100644 (file)
index 0000000..202a120
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.svg
new file mode 100644 (file)
index 0000000..6a8b77d
--- /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">
+  <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>
+    <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1,0,0,1,24,0)" />
+  </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.png
new file mode 100644 (file)
index 0000000..fb6b985
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.svg
new file mode 100644 (file)
index 0000000..1ba8c44
--- /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">
+
+    <g id="table-insert">
+        <path id="table" d="M4 5v13h16v-13zm2 2h5v4h-5zm7 0h5v4h-5zm-7 5h5v4h-5zm7 0h5v4h-5z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.png
new file mode 100644 (file)
index 0000000..dd52d12
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.svg
new file mode 100644 (file)
index 0000000..6b594b2
--- /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">
+    <g>
+        <path d="M24 6h-4v-4h-2v4h-4v2h4v4h2v-4h4z"/>
+    </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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.png
new file mode 100644 (file)
index 0000000..08b1613
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.svg
new file mode 100644 (file)
index 0000000..36b25a3
--- /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">
+    <g id="g690">
+        <path d="M0 6h4v-4h2v4h4v2h-4v4h-2v-4h-4z" 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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.png
new file mode 100644 (file)
index 0000000..ffd190a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.svg
new file mode 100644 (file)
index 0000000..62526a0
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.png
new file mode 100644 (file)
index 0000000..214f8d1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.svg
new file mode 100644 (file)
index 0000000..913bbfd
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png
new file mode 100644 (file)
index 0000000..4484496
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.svg
new file mode 100644 (file)
index 0000000..0198c35
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.png
new file mode 100644 (file)
index 0000000..1025461
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.svg
new file mode 100644 (file)
index 0000000..7740e43
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.png
new file mode 100644 (file)
index 0000000..17f543c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.svg
new file mode 100644 (file)
index 0000000..c78e622
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.png
new file mode 100644 (file)
index 0000000..dfee886
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.svg
new file mode 100644 (file)
index 0000000..f591431
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2h-12zm1 1h10l-1 11h-8z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.png
new file mode 100644 (file)
index 0000000..594836e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.svg
new file mode 100644 (file)
index 0000000..0731f05
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.png
new file mode 100644 (file)
index 0000000..182e56d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.svg
new file mode 100644 (file)
index 0000000..2a92cbe
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.png
new file mode 100644 (file)
index 0000000..8f261a8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.svg
new file mode 100644 (file)
index 0000000..66c024a
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.png
new file mode 100644 (file)
index 0000000..e683c52
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.svg
new file mode 100644 (file)
index 0000000..07cecbf
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.png
new file mode 100644 (file)
index 0000000..bdb1c4f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.svg
new file mode 100644 (file)
index 0000000..724d190
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M21 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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png
new file mode 100644 (file)
index 0000000..81713bd
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.svg
new file mode 100644 (file)
index 0000000..dd6dde3
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png
new file mode 100644 (file)
index 0000000..c4eb2a2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.svg
new file mode 100644 (file)
index 0000000..fbd7c14
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.png
new file mode 100644 (file)
index 0000000..1b65589
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.svg
new file mode 100644 (file)
index 0000000..9e5e72f
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M12 8l8 10h-16z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.png
new file mode 100644 (file)
index 0000000..fa2da24
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.svg
new file mode 100644 (file)
index 0000000..18879e3
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.png
new file mode 100644 (file)
index 0000000..1ac6106
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.svg
new file mode 100644 (file)
index 0000000..7a3535b
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.png
new file mode 100644 (file)
index 0000000..bc94f18
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.svg
new file mode 100644 (file)
index 0000000..5dcc317
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.png
new file mode 100644 (file)
index 0000000..6fb01ce
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.svg
new file mode 100644 (file)
index 0000000..a5e4dc9
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.png
new file mode 100644 (file)
index 0000000..3c3fb47
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.svg
new file mode 100644 (file)
index 0000000..e9687fa
--- /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">
+    <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"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png
new file mode 100644 (file)
index 0000000..7e4cfd1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.svg
new file mode 100644 (file)
index 0000000..bb5b096
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.png
new file mode 100644 (file)
index 0000000..d71a08b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.svg
new file mode 100644 (file)
index 0000000..4a9fd0d
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.png
new file mode 100644 (file)
index 0000000..952410a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.svg
new file mode 100644 (file)
index 0000000..f516539
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.png
new file mode 100644 (file)
index 0000000..1a0983d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.svg
new file mode 100644 (file)
index 0000000..8963faf
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.png
new file mode 100644 (file)
index 0000000..4b94c1a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.svg
new file mode 100644 (file)
index 0000000..79c7d5c
--- /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">
+    <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.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.png
new file mode 100644 (file)
index 0000000..f9cc5ea
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.svg
new file mode 100644 (file)
index 0000000..6bbc2fa
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.png
new file mode 100644 (file)
index 0000000..4b15161
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.svg
new file mode 100644 (file)
index 0000000..eebd9b1
--- /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">
+    <g>
+        <path d="M23 5h-4v2h2v10h-2v2h4z"/>
+    </g>
+    <g>
+        <path d="M18 5h-4v2h2v10h-2v2h4z"/>
+    </g>
+    <g>
+        <path d="M2 5h4v2h-2v10h2v2h-4z"/>
+    </g>
+    <g>
+        <path d="M7 5h4v2h-2v10h2v2h-4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png
new file mode 100644 (file)
index 0000000..41743b3
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.svg
new file mode 100644 (file)
index 0000000..c606bec
--- /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">
+    <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"/>
+    </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"/>
+    <circle cx="8" cy="5" r="2"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png
new file mode 100644 (file)
index 0000000..29dc26b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.svg
new file mode 100644 (file)
index 0000000..f304f6e
--- /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">
+    <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 0b61721..18dc564 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs v1.1.4 optimised for jQuery
+ * OOjs v1.1.6 optimised for jQuery
  * https://www.mediawiki.org/wiki/OOjs
  *
  * Copyright 2011-2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-01-23T20:11:25Z
+ * Date: 2015-03-19T00:42:55Z
  */
 ( function ( global ) {
 
@@ -301,8 +301,12 @@ oo.compare = function ( a, b, asymmetrical ) {
        a = a || {};
        b = b || {};
 
+       if ( typeof a.nodeType === 'number' && typeof a.isEqualNode === 'function' ) {
+               return a.isEqualNode( b );
+       }
+
        for ( k in a ) {
-               if ( !hasOwn.call( a, k ) || a[k] === undefined ) {
+               if ( !hasOwn.call( a, k ) || a[k] === undefined || a[k] === b[k] ) {
                        // Support es3-shim: Without the hasOwn filter, comparing [] to {} will be false in ES3
                        // because the shimmed "forEach" is enumerable and shows up in Array but not Object.
                        // Also ignore undefined values, because there is no conceptual difference between
@@ -319,7 +323,7 @@ oo.compare = function ( a, b, asymmetrical ) {
                                ( aType === 'string' || aType === 'number' || aType === 'boolean' ) &&
                                aValue !== bValue
                        ) ||
-                       ( aValue === Object( aValue ) && !oo.compare( aValue, bValue, asymmetrical ) ) ) {
+                       ( aValue === Object( aValue ) && !oo.compare( aValue, bValue, true ) ) ) {
                        return false;
                }
        }
@@ -431,6 +435,21 @@ oo.getHash.keySortReplacer = function ( key, val ) {
        }
 };
 
+/**
+ * Get the unique values of an array, removing duplicates
+ *
+ * @param {Array} arr Array
+ * @return {Array} Unique values in array
+ */
+oo.unique = function ( arr ) {
+       return arr.reduce( function ( result, current ) {
+               if ( result.indexOf( current ) === -1 ) {
+                       result.push( current );
+               }
+               return result;
+       }, [] );
+};
+
 /**
  * Compute the union (duplicate-free merge) of a set of arrays.
  *
@@ -622,11 +641,11 @@ oo.isPlainObject = $.isPlainObject;
         */
        oo.EventEmitter.prototype.once = function ( event, listener ) {
                var eventEmitter = this,
-                       listenerWrapper = function () {
-                               eventEmitter.off( event, listenerWrapper );
-                               listener.apply( eventEmitter, Array.prototype.slice.call( arguments, 0 ) );
+                       wrapper = function () {
+                               eventEmitter.off( event, wrapper );
+                               return listener.apply( this, arguments );
                        };
-               return this.on( event, listenerWrapper );
+               return this.on( event, wrapper );
        };
 
        /**
index 023b6e2..7773866 100644 (file)
@@ -45,7 +45,8 @@
        $.fn.badge = function ( text, inline, displayZero ) {
                var $badge = this.find( '.mw-badge' ),
                        badgeStyleClass = 'mw-badge-' + ( inline ? 'inline' : 'overlay' ),
-                       isImportant = true, displayBadge = true;
+                       isImportant = true,
+                       displayBadge = true;
 
                // If we're displaying zero, ensure style to be non-important
                if ( mw.language.convertNumber( text, true ) === 0 ) {
diff --git a/resources/src/jquery/jquery.client.js b/resources/src/jquery/jquery.client.js
deleted file mode 100644 (file)
index 3796b0b..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-/**
- * User-agent detection
- *
- * @class jQuery.client
- * @singleton
- */
-( function ( $ ) {
-
-       /**
-        * @private
-        * @property {Object} profileCache Keyed by userAgent string,
-        * value is the parsed $.client.profile object for that user agent.
-        */
-       var profileCache = {};
-
-       $.client = {
-
-               /**
-                * Get an object containing information about the client.
-                *
-                * @param {Object} [nav] An object with a 'userAgent' and 'platform' property.
-                *  Defaults to the global `navigator` object.
-                * @return {Object} The resulting client object will be in the following format:
-                *
-                *     {
-                *         'name': 'firefox',
-                *         'layout': 'gecko',
-                *         'layoutVersion': 20101026,
-                *         'platform': 'linux'
-                *         'version': '3.5.1',
-                *         'versionBase': '3',
-                *         'versionNumber': 3.5,
-                *     }
-                */
-               profile: function ( nav ) {
-                       /*jshint boss: true */
-
-                       if ( nav === undefined ) {
-                               nav = window.navigator;
-                       }
-
-                       // Use the cached version if possible
-                       if ( profileCache[ nav.userAgent + '|' + nav.platform ] !== undefined ) {
-                               return profileCache[ nav.userAgent + '|' + nav.platform ];
-                       }
-
-                       var
-                               versionNumber,
-                               key = nav.userAgent + '|' + nav.platform,
-
-                               // Configuration
-
-                               // Name of browsers or layout engines we don't recognize
-                               uk = 'unknown',
-                               // Generic version digit
-                               x = 'x',
-                               // Strings found in user agent strings that need to be conformed
-                               wildUserAgents = ['Opera', 'Navigator', 'Minefield', 'KHTML', 'Chrome', 'PLAYSTATION 3', 'Iceweasel'],
-                               // Translations for conforming user agent strings
-                               userAgentTranslations = [
-                                       // Tons of browsers lie about being something they are not
-                                       [/(Firefox|MSIE|KHTML,?\slike\sGecko|Konqueror)/, ''],
-                                       // Chrome lives in the shadow of Safari still
-                                       ['Chrome Safari', 'Chrome'],
-                                       // KHTML is the layout engine not the browser - LIES!
-                                       ['KHTML', 'Konqueror'],
-                                       // Firefox nightly builds
-                                       ['Minefield', 'Firefox'],
-                                       // This helps keep different versions consistent
-                                       ['Navigator', 'Netscape'],
-                                       // This prevents version extraction issues, otherwise translation would happen later
-                                       ['PLAYSTATION 3', 'PS3']
-                               ],
-                               // Strings which precede a version number in a user agent string - combined and used as
-                               // match 1 in version detection
-                               versionPrefixes = [
-                                       'camino', 'chrome', 'firefox', 'iceweasel', 'netscape', 'netscape6', 'opera', 'version', 'konqueror',
-                                       'lynx', 'msie', 'safari', 'ps3', 'android'
-                               ],
-                               // Used as matches 2, 3 and 4 in version extraction - 3 is used as actual version number
-                               versionSuffix = '(\\/|\\;?\\s|)([a-z0-9\\.\\+]*?)(\\;|dev|rel|\\)|\\s|$)',
-                               // Names of known browsers
-                               names = [
-                                       'camino', 'chrome', 'firefox', 'iceweasel', 'netscape', 'konqueror', 'lynx', 'msie', 'opera',
-                                       'safari', 'ipod', 'iphone', 'blackberry', 'ps3', 'rekonq', 'android'
-                               ],
-                               // Tanslations for conforming browser names
-                               nameTranslations = [],
-                               // Names of known layout engines
-                               layouts = ['gecko', 'konqueror', 'msie', 'trident', 'edge', 'opera', 'webkit'],
-                               // Translations for conforming layout names
-                               layoutTranslations = [ ['konqueror', 'khtml'], ['msie', 'trident'], ['opera', 'presto'] ],
-                               // Names of supported layout engines for version number
-                               layoutVersions = ['applewebkit', 'gecko', 'trident', 'edge'],
-                               // Names of known operating systems
-                               platforms = ['win', 'wow64', 'mac', 'linux', 'sunos', 'solaris', 'iphone'],
-                               // Translations for conforming operating system names
-                               platformTranslations = [ ['sunos', 'solaris'], ['wow64', 'win'] ],
-
-                               /**
-                                * Performs multiple replacements on a string
-                                * @ignore
-                                */
-                               translate = function ( source, translations ) {
-                                       var i;
-                                       for ( i = 0; i < translations.length; i++ ) {
-                                               source = source.replace( translations[i][0], translations[i][1] );
-                                       }
-                                       return source;
-                               },
-
-                               // Pre-processing
-
-                               ua = nav.userAgent,
-                               match,
-                               name = uk,
-                               layout = uk,
-                               layoutversion = uk,
-                               platform = uk,
-                               version = x;
-
-                       if ( match = new RegExp( '(' + wildUserAgents.join( '|' ) + ')' ).exec( ua ) ) {
-                               // Takes a userAgent string and translates given text into something we can more easily work with
-                               ua = translate( ua, userAgentTranslations );
-                       }
-                       // Everything will be in lowercase from now on
-                       ua = ua.toLowerCase();
-
-                       // Extraction
-
-                       if ( match = new RegExp( '(' + names.join( '|' ) + ')' ).exec( ua ) ) {
-                               name = translate( match[1], nameTranslations );
-                       }
-                       if ( match = new RegExp( '(' + layouts.join( '|' ) + ')' ).exec( ua ) ) {
-                               layout = translate( match[1], layoutTranslations );
-                       }
-                       if ( match = new RegExp( '(' + layoutVersions.join( '|' ) + ')\\\/(\\d+)').exec( ua ) ) {
-                               layoutversion = parseInt( match[2], 10 );
-                       }
-                       if ( match = new RegExp( '(' + platforms.join( '|' ) + ')' ).exec( nav.platform.toLowerCase() ) ) {
-                               platform = translate( match[1], platformTranslations );
-                       }
-                       if ( match = new RegExp( '(' + versionPrefixes.join( '|' ) + ')' + versionSuffix ).exec( ua ) ) {
-                               version = match[3];
-                       }
-
-                       // Edge Cases -- did I mention about how user agent string lie?
-
-                       // Decode Safari's crazy 400+ version numbers
-                       if ( name === 'safari' && version > 400 ) {
-                               version = '2.0';
-                       }
-                       // Expose Opera 10's lies about being Opera 9.8
-                       if ( name === 'opera' && version >= 9.8 ) {
-                               match = ua.match( /\bversion\/([0-9\.]*)/ );
-                               if ( match && match[1] ) {
-                                       version = match[1];
-                               } else {
-                                       version = '10';
-                               }
-                       }
-                       // And Opera 15's lies about being Chrome
-                       if ( name === 'chrome' && ( match = ua.match( /\bopr\/([0-9\.]*)/ ) ) ) {
-                               if ( match[1] ) {
-                                       name = 'opera';
-                                       version = match[1];
-                               }
-                       }
-                       // And IE 11's lies about being not being IE
-                       if ( layout === 'trident' && layoutversion >= 7 && ( match = ua.match( /\brv[ :\/]([0-9\.]*)/ ) ) ) {
-                               if ( match[1] ) {
-                                       name = 'msie';
-                                       version = match[1];
-                               }
-                       }
-                       // And IE 12's different lies about not being IE
-                       if ( name === 'chrome' && ( match = ua.match( /\bedge\/([0-9\.]*)/ ) ) ) {
-                               name = 'msie';
-                               version = match[1];
-                               layout = 'edge';
-                               layoutversion = parseInt( match[1], 10 );
-                       }
-                       // And Amazon Silk's lies about being Android on mobile or Safari on desktop
-                       if ( match = ua.match( /\bsilk\/([0-9.\-_]*)/ ) ) {
-                               if ( match[1] ) {
-                                       name = 'silk';
-                                       version = match[1];
-                               }
-                       }
-
-                       versionNumber = parseFloat( version, 10 ) || 0.0;
-
-                       // Caching
-
-                       return profileCache[ key  ] = {
-                               name: name,
-                               layout: layout,
-                               layoutVersion: layoutversion,
-                               platform: platform,
-                               version: version,
-                               versionBase: ( version !== x ? Math.floor( versionNumber ).toString() : x ),
-                               versionNumber: versionNumber
-                       };
-               },
-
-               /**
-                * Checks the current browser against a support map object.
-                *
-                * Version numbers passed as numeric values will be compared like numbers (1.2 > 1.11).
-                * Version numbers passed as string values will be compared using a simple component-wise
-                * algorithm, similar to PHP's version_compare ('1.2' < '1.11').
-                *
-                * A browser map is in the following format:
-                *
-                *     {
-                *         // Multiple rules with configurable operators
-                *         'msie': [['>=', 7], ['!=', 9]],
-                *         // Match no versions
-                *         'iphone': false,
-                *         // Match any version
-                *         'android': null
-                *     }
-                *
-                * It can optionally be split into ltr/rtl sections:
-                *
-                *     {
-                *         'ltr': {
-                *             'android': null,
-                *             'iphone': false
-                *         },
-                *         'rtl': {
-                *             'android': false,
-                *             // rules are not inherited from ltr
-                *             'iphone': false
-                *         }
-                *     }
-                *
-                * @param {Object} map Browser support map
-                * @param {Object} [profile] A client-profile object
-                * @param {boolean} [exactMatchOnly=false] Only return true if the browser is matched, otherwise
-                * returns true if the browser is not found.
-                *
-                * @return {boolean} The current browser is in the support map
-                */
-               test: function ( map, profile, exactMatchOnly ) {
-                       /*jshint evil: true */
-
-                       var conditions, dir, i, op, val, j, pieceVersion, pieceVal, compare;
-                       profile = $.isPlainObject( profile ) ? profile : $.client.profile();
-                       if ( map.ltr && map.rtl ) {
-                               dir = $( 'body' ).is( '.rtl' ) ? 'rtl' : 'ltr';
-                               map = map[dir];
-                       }
-                       // Check over each browser condition to determine if we are running in a compatible client
-                       if ( typeof map !== 'object' || map[profile.name] === undefined ) {
-                               // Not found, return true if exactMatchOnly not set, false otherwise
-                               return !exactMatchOnly;
-                       }
-                       conditions = map[profile.name];
-                       if ( conditions === false ) {
-                               // Match no versions
-                               return false;
-                       }
-                       if ( conditions === null ) {
-                               // Match all versions
-                               return true;
-                       }
-                       for ( i = 0; i < conditions.length; i++ ) {
-                               op = conditions[i][0];
-                               val = conditions[i][1];
-                               if ( typeof val === 'string' ) {
-                                       // Perform a component-wise comparison of versions, similar to PHP's version_compare
-                                       // but simpler. '1.11' is larger than '1.2'.
-                                       pieceVersion = profile.version.toString().split( '.' );
-                                       pieceVal = val.split( '.' );
-                                       // Extend with zeroes to equal length
-                                       while ( pieceVersion.length < pieceVal.length ) {
-                                               pieceVersion.push( '0' );
-                                       }
-                                       while ( pieceVal.length < pieceVersion.length ) {
-                                               pieceVal.push( '0' );
-                                       }
-                                       // Compare components
-                                       compare = 0;
-                                       for ( j = 0; j < pieceVersion.length; j++ ) {
-                                               if ( Number( pieceVersion[j] ) < Number( pieceVal[j] ) ) {
-                                                       compare = -1;
-                                                       break;
-                                               } else if ( Number( pieceVersion[j] ) > Number( pieceVal[j] ) ) {
-                                                       compare = 1;
-                                                       break;
-                                               }
-                                       }
-                                       // compare will be -1, 0 or 1, depending on comparison result
-                                       if ( !( eval( '' + compare + op + '0' ) ) ) {
-                                               return false;
-                                       }
-                               } else if ( typeof val === 'number' ) {
-                                       if ( !( eval( 'profile.versionNumber' + op + val ) ) ) {
-                                               return false;
-                                       }
-                               }
-                       }
-
-                       return true;
-               }
-       };
-}( jQuery ) );
index 339e65a..1ecce6c 100644 (file)
@@ -40,6 +40,8 @@
         * @param {string} [options.i18n.confirm] Text to use for the confirmation question.
         * @param {string} [options.i18n.yes] Text to use for the 'Yes' button.
         * @param {string} [options.i18n.no] Text to use for the 'No' button.
+        * @param {string} [options.i18n.yesTitle] Title text to use for the 'Yes' button.
+        * @param {string} [options.i18n.noTitle] Title text to use for the 'No' button.
         *
         * @chainable
         */
                                if ( options.handler ) {
                                        $buttonYes.on( options.events, options.handler );
                                }
+                               if ( options.i18n.yesTitle ) {
+                                       $buttonYes.attr( 'title', options.i18n.yesTitle );
+                               }
                                $buttonYes = options.buttonCallback( $buttonYes, 'yes' );
 
                                // Clone it without any events and prevent default action to represent the 'No' button.
                                                $interface.css( 'width', 0 );
                                                e.preventDefault();
                                        } );
+                               if ( options.i18n.noTitle ) {
+                                       $buttonNo.attr( 'title', options.i18n.noTitle );
+                               } else {
+                                       $buttonNo.removeAttr( 'title' );
+                               }
                                $buttonNo = options.buttonCallback( $buttonNo, 'no' );
 
                                // Prevent memory leaks
                        space: ' ',
                        confirm: 'Are you sure?',
                        yes: 'Yes',
-                       no: 'No'
+                       no: 'No',
+                       yesTitle: undefined,
+                       noTitle: undefined
                }
        };
 }( jQuery ) );
index d4a106e..daf23a9 100644 (file)
@@ -9,6 +9,8 @@
                space: mw.message( 'word-separator' ).text(),
                confirm: mw.message( 'confirmable-confirm', mw.user ).text(),
                yes: mw.message( 'confirmable-yes' ).text(),
-               no: mw.message( 'confirmable-no' ).text()
+               no: mw.message( 'confirmable-no' ).text(),
+               yesTitle: undefined,
+               noTitle: undefined
        };
 }( mediaWiki, jQuery ) );
index a2e2be5..64827fb 100644 (file)
@@ -3,7 +3,9 @@
  */
 
 function serializeControls( controls ) {
-       var i, data = {}, len = controls.length;
+       var i,
+               data = {},
+               len = controls.length;
 
        for ( i = 0; i < len; i++ ) {
                data[ controls[i].name ] = controls[i].value;
index 0f47150..2e5efba 100644 (file)
@@ -6,18 +6,38 @@
        -ms-user-select: none;
        user-select: none;
 }
+/* Align the toggle based on the direction of the content language */
+/* @noflip */
+.mw-content-ltr .mw-collapsible-toggle,
+.mw-content-rtl .mw-content-ltr .mw-collapsible-toggle {
+       float: right;
+}
+/* @noflip */
+.mw-content-rtl .mw-collapsible-toggle,
+.mw-content-ltr .mw-content-rtl .mw-collapsible-toggle {
+       float: left;
+}
+
 .mw-customtoggle,
 .mw-collapsible-toggle {
        cursor: pointer;
 }
 
 /* collapse links in captions should be inline */
-caption .mw-collapsible-toggle {
+caption .mw-collapsible-toggle,
+.mw-content-ltr caption .mw-collapsible-toggle,
+.mw-content-rtl caption .mw-collapsible-toggle,
+.mw-content-rtl .mw-content-ltr caption .mw-collapsible-toggle,
+.mw-content-ltr .mw-content-rtl caption .mw-collapsible-toggle {
        float: none;
 }
 
 /* list-items go as wide as their parent element, don't float them inside list items */
-li .mw-collapsible-toggle {
+li .mw-collapsible-toggle,
+.mw-content-ltr li .mw-collapsible-toggle,
+.mw-content-rtl li .mw-collapsible-toggle,
+.mw-content-rtl .mw-content-ltr li .mw-collapsible-toggle,
+.mw-content-ltr .mw-content-rtl li .mw-collapsible-toggle {
        float: none;
 }
 
index f1b214e..7c9bec3 100644 (file)
 /**
  * This plugin provides a generic way to add suggestions to a text box.
  *
- * Usage:
- *
  * Set options:
+ *
  *             $( '#textbox' ).suggestions( { option1: value1, option2: value2 } );
  *             $( '#textbox' ).suggestions( option, value );
+ *
  * Get option:
+ *
  *             value = $( '#textbox' ).suggestions( option );
+ *
  * Initialize:
+ *
  *             $( '#textbox' ).suggestions();
  *
- * Options:
+ * Uses jQuery.suggestions singleteon internally.
  *
- * fetch(query): Callback that should fetch suggestions and set the suggestions property.
- *      Executed in the context of the textbox
- *             Type: Function
- * cancel: Callback function to call when any pending asynchronous suggestions fetches
- *      should be canceled. Executed in the context of the textbox
- *             Type: Function
- * special: Set of callbacks for rendering and selecting
- *             Type: Object of Functions 'render' and 'select'
- * result: Set of callbacks for rendering and selecting
- *             Type: Object of Functions 'render' and 'select'
- * $region: jQuery selection of element to place the suggestions below and match width of
- *             Type: jQuery Object, Default: $( this )
- * suggestions: Suggestions to display
- *             Type: Array of strings
- * maxRows: Maximum number of suggestions to display at one time
- *             Type: Number, Range: 1 - 100, Default: 10
- * delay: Number of ms to wait for the user to stop typing
- *             Type: Number, Range: 0 - 1200, Default: 120
- * cache: Whether to cache results from a fetch
- *             Type: Boolean, Default: false
- * cacheMaxAge: Number of ms to cache results from a fetch
- *             Type: Number, Range: 1 - Infinity, Default: 60000 (1 minute)
- * submitOnClick: Whether to submit the form containing the textbox when a suggestion is clicked
- *             Type: Boolean, Default: false
- * maxExpandFactor: Maximum suggestions box width relative to the textbox width. If set
- *      to e.g. 2, the suggestions box will never be grown beyond 2 times the width of the textbox.
- *             Type: Number, Range: 1 - infinity, Default: 3
- * expandFrom: Which direction to offset the suggestion box from.
- *      Values 'start' and 'end' translate to left and right respectively depending on the
- *      directionality of the current document, according to $( 'html' ).css( 'direction' ).
- *      Type: String, default: 'auto', options: 'left', 'right', 'start', 'end', 'auto'.
- * positionFromLeft: Sets expandFrom=left, for backwards compatibility
- *             Type: Boolean, Default: true
- * highlightInput: Whether to hightlight matched portions of the input or not
- *             Type: Boolean, Default: false
+ * @class jQuery.plugin.suggestions
+ */
+/**
+ * @method suggestions
+ * @return {jQuery}
+ * @chainable
+ *
+ * @param {Object} options
+ *
+ * @param {Function} [options.fetch] Callback that should fetch suggestions and set the suggestions
+ *  property. Called in context of the text box.
+ * @param {string} options.fetch.query
+ * @param {Function} options.fetch.response Callback to receive the suggestions with
+ * @param {Array} options.fetch.response.suggestions
+ * @param {number} options.fetch.maxRows
+ *
+ * @param {Function} [options.cancel] Callback function to call when any pending asynchronous
+ *  suggestions fetches. Called in context of the text box.
+ *
+ * @param {Object} [options.special] Set of callbacks for rendering and selecting.
+ *
+ * @param {Function} options.special.render Called in context of the suggestions-special element.
+ * @param {string} options.special.render.query
+ * @param {Object} options.special.render.context
+ *
+ * @param {Function} options.special.select Called in context of the suggestions-result-current element.
+ * @param {jQuery} options.special.select.$textbox
+ *
+ * @param {Object} [options.result] Set of callbacks for rendering and selecting
+ *
+ * @param {Function} options.result.render Called in context of the suggestions-result element.
+ * @param {string} options.result.render.suggestion
+ * @param {Object} options.result.render.context
+ *
+ * @param {Function} options.result.select Called in context of the suggestions-result-current element.
+ * @param {jQuery} options.result.select.$textbox
+ *
+ * @param {Object} [options.update] Set of callbacks for listening to a change in the text input.
+ *
+ * @param {Function} options.update.before Called right after the user changes the textbox text.
+ * @param {Function} options.update.after Called after results are updated either from the cache or
+ * the API as a result of the user input.
+ *
+ * @param {jQuery} [options.$region=this] The element to place the suggestions below and match width of.
+ *
+ * @param {string[]} [options.suggestions] Array of suggestions to display.
+ *
+ * @param {number} [options.maxRows=10] Maximum number of suggestions to display at one time.
+ *  Must be between 1 and 100.
+ *
+ * @param {number} [options.delay=120] Number of milliseconds to wait for the user to stop typing.
+ *  Must be between 0 and 1200.
+ *
+ * @param {boolean} [options.cache=false] Whether to cache results from a fetch.
+ *
+ * @param {number} [options.cacheMaxAge=60000] Number of milliseconds to cache results from a fetch.
+ *  Must be higher than 1. Defaults to 1 minute.
+ *
+ * @param {boolean} [options.submitOnClick=false] Whether to submit the form containing the textbox
+ *  when a suggestion is clicked.
+ *
+ * @param {number} [options.maxExpandFactor=3] Maximum suggestions box width relative to the textbox
+ *  width. If set to e.g. 2, the suggestions box will never be grown beyond 2 times the width of
+ *  the textbox. Must be higher than 1.
+ *
+ * @param {string} [options.expandFrom=auto] Which direction to offset the suggestion box from.
+ *  Values 'start' and 'end' translate to left and right respectively depending on the directionality
+ *   of the current document, according to `$( 'html' ).css( 'direction' )`.
+ *   Valid values: "left", "right", "start", "end", and "auto".
+ *
+ * @param {boolean} [options.positionFromLeft] Sets `expandFrom=left`, for backwards
+ *  compatibility.
+ *
+ * @param {boolean} [options.highlightInput=false] Whether to highlight matched portions of the
+ *  input or not.
  */
 ( function ( $ ) {
 
 var hasOwn = Object.hasOwnProperty;
 
+/**
+ * Used by jQuery.plugin.suggestions.
+ *
+ * @class jQuery.suggestions
+ * @singleton
+ * @private
+ */
 $.suggestions = {
        /**
         * Cancel any delayed maybeFetch() call and callback the context so
@@ -92,7 +142,7 @@ $.suggestions = {
         * call to this function still pending will be canceled. If the value in the
         * textbox is empty or hasn't changed since the last time suggestions were fetched,
         * this function does nothing.
-        * @param {Boolean} delayed Whether or not to delay this by the currently configured amount of time
+        * @param {boolean} delayed Whether or not to delay this by the currently configured amount of time
         */
        update: function ( context, delayed ) {
                function maybeFetch() {
@@ -100,6 +150,10 @@ $.suggestions = {
                                cache = context.data.cache,
                                cacheHit;
 
+                       if ( typeof context.config.update.before === 'function' ) {
+                               context.config.update.before.call( context.data.$textbox );
+                       }
+
                        // Only fetch if the value in the textbox changed and is not empty, or if the results were hidden
                        // if the textbox is empty then clear the result div, but leave other settings intouched
                        if ( val.length === 0 ) {
@@ -114,6 +168,9 @@ $.suggestions = {
                                if ( context.config.cache && hasOwn.call( cache, val ) ) {
                                        if ( +new Date() - cache[ val ].timestamp < context.config.cacheMaxAge ) {
                                                context.data.$textbox.suggestions( 'suggestions', cache[ val ].suggestions );
+                                               if ( typeof context.config.update.after === 'function' ) {
+                                                       context.config.update.after.call( context.data.$textbox );
+                                               }
                                                cacheHit = true;
                                        } else {
                                                // Cache expired
@@ -127,6 +184,9 @@ $.suggestions = {
                                                function ( suggestions ) {
                                                        suggestions = suggestions.slice( 0, context.config.maxRows );
                                                        context.data.$textbox.suggestions( 'suggestions', suggestions );
+                                                       if ( typeof context.config.update.after === 'function' ) {
+                                                               context.config.update.after.call( context.data.$textbox );
+                                                       }
                                                        if ( context.config.cache ) {
                                                                cache[ val ] = {
                                                                        suggestions: suggestions,
@@ -169,8 +229,8 @@ $.suggestions = {
 
        /**
         * Sets the value of a property, and updates the widget accordingly
-        * @param property String Name of property
-        * @param value Mixed Value to set property with
+        * @param {string} property Name of property
+        * @param {Mixed} value Value to set property with
         */
        configure: function ( context, property, value ) {
                var newCSS,
@@ -183,6 +243,7 @@ $.suggestions = {
                        case 'cancel':
                        case 'special':
                        case 'result':
+                       case 'update':
                        case '$region':
                        case 'expandFrom':
                                context.config[property] = value;
@@ -354,8 +415,8 @@ $.suggestions = {
 
        /**
         * Highlight a result in the results table
-        * @param result <tr> to highlight: jQuery object, or 'prev' or 'next'
-        * @param updateTextbox If true, put the suggestion in the textbox
+        * @param {jQuery|string} result `<tr>` to highlight, or 'prev' or 'next'
+        * @param {boolean} updateTextbox If true, put the suggestion in the textbox
         */
        highlight: function ( context, result, updateTextbox ) {
                var selected = context.data.$container.find( '.suggestions-result-current' );
@@ -423,7 +484,7 @@ $.suggestions = {
 
        /**
         * Respond to keypress event
-        * @param key Integer Code of key pressed
+        * @param {number} key Code of key pressed
         */
        keypress: function ( e, context, key ) {
                var selected,
@@ -494,6 +555,8 @@ $.suggestions = {
                }
        }
 };
+
+// See file header for method documentation
 $.fn.suggestions = function () {
 
        // Multi-context fields
@@ -503,7 +566,7 @@ $.fn.suggestions = function () {
        $( this ).each( function () {
                var context, key;
 
-               /* Construction / Loading */
+               /* Construction and Loading */
 
                context = $( this ).data( 'suggestions-context' );
                if ( context === undefined || context === null ) {
@@ -513,6 +576,7 @@ $.fn.suggestions = function () {
                                        cancel: function () {},
                                        special: {},
                                        result: {},
+                                       update: {},
                                        $region: $( this ),
                                        suggestions: [],
                                        maxRows: 10,
@@ -681,4 +745,9 @@ $.fn.suggestions = function () {
        return returnValue !== undefined ? returnValue : $( this );
 };
 
+/**
+ * @class jQuery
+ * @mixins jQuery.plugin.suggestions
+ */
+
 }( jQuery ) );
index 8e1c3f0..ff5ff0a 100644 (file)
 
                        clearTableBody: function ( table ) {
                                $( table.tBodies[0] ).empty();
+                       },
+
+                       getParser: function ( id ) {
+                               buildTransformTable();
+                               buildDateTable();
+                               cacheRegexs();
+                               buildCollationTable();
+
+                               return getParserById( id );
                        }
                };
 
                                        return '99999999';
                                }
                        } else if ( ( match = s.match( ts.dateRegex[1] ) ) !== null ) {
-                               s = [ match[3], '' + ts.monthNames[match[2]], match[1] ];
+                               s = [ match[3], String( ts.monthNames[match[2]] ), match[1] ];
                        } else if ( ( match = s.match( ts.dateRegex[2] ) ) !== null ) {
-                               s = [ match[3], '' + ts.monthNames[match[1]], match[2] ];
+                               s = [ match[3], String( ts.monthNames[match[1]] ), match[2] ];
                        } else {
                                // Should never get here
                                return '99999999';
index e8fc8e4..5111930 100644 (file)
 
                // Apply defaults
                switch ( command ) {
-                       //case 'getContents': // no params
-                       //case 'setContents': // no params with defaults
-                       //case 'getSelection': // no params
+                       // case 'getContents': // no params
+                       // case 'setContents': // no params with defaults
+                       // case 'getSelection': // no params
                        case 'encapsulateSelection':
                                options = $.extend( {
                                        pre: '', // Text to insert before the cursor/selection
index 68fbe33..f24703a 100644 (file)
@@ -9,16 +9,28 @@
         */
        function doLivePreview( e ) {
                var isDiff, api, request, postData, copySelectors, section,
-                       $wikiPreview, $wikiDiff, $editform, $copyElements, $spinner;
-
-               e.preventDefault();
+                       $wikiPreview, $wikiDiff, $editform, $textbox, $summary, $copyElements, $spinner, $errorBox;
 
                isDiff = ( e.target.name === 'wpDiff' );
                $wikiPreview = $( '#wikiPreview' );
                $wikiDiff = $( '#wikiDiff' );
                $editform = $( '#editform' );
+               $textbox = $editform.find( '#wpTextbox1' );
+               $summary = $editform.find( '#wpSummary' );
+               $errorBox = $( '.errorbox' );
                section = $editform.find( '[name="wpSection"]' ).val();
 
+               if ( $textbox.length === 0 ) {
+                       return;
+               }
+               // Show changes for a new section is not yet supported
+               if ( isDiff && section === 'new' ) {
+                       return;
+               }
+               e.preventDefault();
+
+               // Remove any previously displayed errors
+               $errorBox.remove();
                // Show #wikiPreview if it's hidden to be able to scroll to it
                // (if it is hidden, it's also empty, so nothing changes in the rendering)
                $wikiPreview.show();
                        action: 'parse',
                        uselang: mw.config.get( 'wgUserLanguage' ),
                        title: mw.config.get( 'wgPageName' ),
-                       text: $editform.find( '#wpTextbox1' ).textSelection( 'getContents' ),
-                       summary: $editform.find( '#wpSummary' ).textSelection( 'getContents' )
+                       text: $textbox.textSelection( 'getContents' ),
+                       summary: $summary.textSelection( 'getContents' )
                };
 
+               if ( section !== '' ) {
+                       postData.sectionpreview = '';
+                       if ( section === 'new' ) {
+                               postData.section = section;
+                               postData.sectiontitle = postData.summary;
+                       }
+               }
+
                if ( isDiff ) {
                        $wikiPreview.hide();
 
                        $.extend( postData, {
                                pst: '',
                                preview: '',
-                               prop: 'text|displaytitle|modules|categorieshtml|templates|langlinks|limitreporthtml'
+                               prop: 'text|displaytitle|modules|categorieshtml|templates|langlinks|limitreporthtml',
+                               disableeditsection: true
                        } );
-                       if ( section !== '' ) {
-                               postData.sectionpreview = '';
-                       }
                        request = api.post( postData );
                        request.done( function ( response ) {
-                               var li, newList, $next, $parent, $list;
+                               var li, newList, $displaytitle, $content, $parent, $list;
                                if ( response.parse.modules ) {
                                        mw.loader.load( response.parse.modules.concat(
                                                response.parse.modulescripts,
                                                response.parse.modulemessages ) );
                                }
                                if ( response.parse.displaytitle ) {
-                                       $( '#firstHeading' ).html( response.parse.displaytitle );
+                                       $displaytitle = $( $.parseHTML( response.parse.displaytitle ) );
+                                       $( '#firstHeading' ).msg(
+                                               mw.config.get( 'wgEditMessage', 'editing' ),
+                                               $displaytitle
+                                       );
+                                       document.title = mw.msg(
+                                               'pagetitle',
+                                               mw.msg(
+                                                       mw.config.get( 'wgEditMessage', 'editing' ),
+                                                       $displaytitle.text()
+                                               )
+                                       );
                                }
                                if ( response.parse.categorieshtml ) {
                                        $( '#catlinks' ).replaceWith( response.parse.categorieshtml['*'] );
                                                newList.push( li );
                                        } );
 
-                                       $editform.find( '.mw-editfooter-list' ).detach().empty().append( newList ).appendTo( '.templatesUsed' );
+                                       $editform.find( '.templatesUsed .mw-editfooter-list' ).detach().empty().append( newList ).appendTo( '.templatesUsed' );
                                }
                                if ( response.parse.limitreporthtml ) {
                                        $( '.limitreport' ).html( response.parse.limitreporthtml['*'] );
                                }
 
                                if ( response.parse.text['*'] ) {
-                                       $next = $wikiPreview.next();
-                                       // If there is no next node, use parent instead.
-                                       // Only query parent if needed, false otherwise.
-                                       $parent = !$next.length && $wikiPreview.parent();
-
-                                       $wikiPreview
+                                       $content = $wikiPreview.children( '.mw-content-ltr,.mw-content-rtl' );
+                                       $content
                                                .detach()
                                                .html( response.parse.text['*'] );
 
-                                       mw.hook( 'wikipage.content' ).fire( $wikiPreview );
+                                       mw.hook( 'wikipage.content' ).fire( $content );
 
                                        // Reattach
-                                       if ( $parent ) {
-                                               $parent.append( $wikiPreview );
-                                       } else {
-                                               $next.before( $wikiPreview );
-                                       }
+                                       $wikiPreview.append( $content );
+
                                        $wikiPreview.show();
 
                                }
                        } );
                }
                request.done( function ( response ) {
+                       var isSubject = ( section === 'new' ),
+                               summaryMsg = isSubject ? 'subject-preview' : 'summary-preview';
                        if ( response.parse.parsedsummary ) {
-                               // TODO implement special behavior for section === 'new'
                                $editform.find( '.mw-summary-preview' )
                                        .empty()
                                        .append(
-                                               mw.message( 'summary-preview' ).parse(),
+                                               mw.message( summaryMsg ).parse(),
                                                ' ',
                                                $( '<span>' ).addClass( 'comment' ).html(
                                                        // There is no equivalent to rawParams
                                opacity: 1
                        }, 'fast' );
                } );
+               request.fail( function ( code, result ) {
+                       var errorMsg = 'API error: ' +  code;
+                       if ( code === 'http' ) {
+                               errorMsg = 'HTTP error: ';
+                               if ( result.exception ) {
+                                       errorMsg += result.exception;
+                               } else {
+                                       errorMsg += result.textStatus;
+                               }
+                       }
+                       $errorBox = $( '<div>' )
+                               .addClass( 'errorbox' )
+                               .html( '<strong>' + mw.message( 'previewerrortext' ).escaped() + '</strong><br>' )
+                               .append( document.createTextNode( errorMsg ) );
+                       $wikiDiff.hide();
+                       $wikiPreview.hide().before( $errorBox );
+               } );
        }
 
        $( function () {
                }
 
                if ( !$( '.mw-summary-preview' ).length ) {
-                       $( '.editCheckboxes' ).before(
+                       $( '#wpSummary' ).after(
                                $( '<div>' ).addClass( 'mw-summary-preview' )
                        );
                }
                if ( !document.getElementById( 'wikiDiff' ) && document.getElementById( 'wikiPreview' ) ) {
                        $( '#wikiPreview' ).after(
                                $( '<div>' )
+                                       .hide()
                                        .attr( 'id', 'wikiDiff' )
                                        .html( '<table class="diff"><col class="diff-marker"/><col class="diff-content"/>' +
                                                '<col class="diff-marker"/><col class="diff-content"/><tbody/></table>' )
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less b/resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less
new file mode 100644 (file)
index 0000000..f01115b
--- /dev/null
@@ -0,0 +1,11 @@
+@import "mediawiki.mixins";
+
+.mw-category {
+       .column-count(3);
+       .column-width(25em);
+       .mw-category-group {
+               li {
+                       .column-break-inside-avoid;
+               }
+       }
+}
diff --git a/resources/src/mediawiki.api/mediawiki.api.options.js b/resources/src/mediawiki.api/mediawiki.api.options.js
new file mode 100644 (file)
index 0000000..b839fbd
--- /dev/null
@@ -0,0 +1,89 @@
+/**
+ * @class mw.Api.plugin.options
+ */
+( function ( mw, $ ) {
+
+       $.extend( mw.Api.prototype, {
+
+               /**
+                * Asynchronously save the value of a single user option using the API. See #saveOptions.
+                *
+                * @param {string} name
+                * @param {string|null} value
+                * @return {jQuery.Promise}
+                */
+               saveOption: function ( name, value ) {
+                       var param = {};
+                       param[name] = value;
+                       return this.saveOptions( param );
+               },
+
+               /**
+                * Asynchronously save the values of user options using the API.
+                *
+                * If a value of `null` is provided, the given option will be reset to the default value.
+                *
+                * Any warnings returned by the API, including warnings about invalid option names or values,
+                * are ignored. However, do not rely on this behavior.
+                *
+                * If necessary, the options will be saved using several parallel API requests. Only one promise
+                * is always returned that will be resolved when all requests complete.
+                *
+                * @param {Object} options Options as a `{ name: value, … }` object
+                * @return {jQuery.Promise}
+                */
+               saveOptions: function ( options ) {
+                       var name, value, bundleable,
+                               grouped = [],
+                               deferreds = [];
+
+                       for ( name in options ) {
+                               value = options[name] === null ? null : String( options[name] );
+
+                               // Can we bundle this option, or does it need a separate request?
+                               bundleable =
+                                       ( value === null || value.indexOf( '|' ) === -1 ) &&
+                                       ( name.indexOf( '|' ) === -1 && name.indexOf( '=' ) === -1 );
+
+                               if ( bundleable ) {
+                                       if ( value !== null ) {
+                                               grouped.push( name + '=' + value );
+                                       } else {
+                                               // Omitting value resets the option
+                                               grouped.push( name );
+                                       }
+                               } else {
+                                       if ( value !== null ) {
+                                               deferreds.push( this.postWithToken( 'options', {
+                                                       action: 'options',
+                                                       optionname: name,
+                                                       optionvalue: value
+                                               } ) );
+                                       } else {
+                                               // Omitting value resets the option
+                                               deferreds.push( this.postWithToken( 'options', {
+                                                       action: 'options',
+                                                       optionname: name
+                                               } ) );
+                                       }
+                               }
+                       }
+
+                       if ( grouped.length ) {
+                               deferreds.push( this.postWithToken( 'options', {
+                                       action: 'options',
+                                       change: grouped.join( '|' )
+                               } ) );
+                       }
+
+                       return $.when.apply( $, deferreds );
+               }
+
+       } );
+
+       /**
+        * @class mw.Api
+        * @mixins mw.Api.plugin.options
+        */
+
+}( mediaWiki, jQuery ) );
index 453a675..d9c2b06 100644 (file)
@@ -17,7 +17,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        if ( word.match( /wiki$/i ) ) {
                aou = false;
        }
-       //append i after final consonant
+       // append i after final consonant
        if ( word.match( /[bcdfghjklmnpqrstvwxz]$/i ) ) {
                word += 'i';
        }
index 2d6b733..2c0abd3 100644 (file)
@@ -14,6 +14,6 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                case 'lokatiw': // lokatiw
                        word = 'wo ' + word;
                        break;
-               }
+       }
        return word;
 };
index 9cae360..c4a1cf7 100644 (file)
@@ -24,6 +24,6 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                                word = word + 'ի';
                        }
                        break;
-               }
+       }
        return word;
 };
index 787be36..554e99d 100644 (file)
@@ -21,15 +21,14 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        if ( word.match( /тæ$/i ) ) {
                word = word.slice( 0, -1 );
                endAllative = 'æм';
-       }
-       // Works if word is in singular form.
-       // Checking if word ends on one of the vowels: е, ё, и, о, ы, э, ю, я.
-       else if ( word.match( /[аæеёиоыэюя]$/i ) ) {
+       } else if ( word.match( /[аæеёиоыэюя]$/i ) ) {
+               // Works if word is in singular form.
+               // Checking if word ends on one of the vowels: е, ё, и, о, ы, э, ю, я.
                jot = 'й';
-       }
-       // Checking if word ends on 'у'. 'У' can be either consonant 'W' or vowel 'U' in cyrillic Ossetic.
-       // Examples: {{grammar:genitive|аунеу}} = аунеуы, {{grammar:genitive|лæппу}} = лæппуйы.
-       else if ( word.match( /у$/i ) ) {
+       } else if ( word.match( /у$/i ) ) {
+               // Checking if word ends on 'у'. 'У' can be either consonant 'W' or vowel 'U' in cyrillic Ossetic.
+               // Examples: {{grammar:genitive|аунеу}} = аунеуы, {{grammar:genitive|лæппу}} = лæппуйы.
+
                if ( !word.slice( -2, -1 ).match( /[аæеёиоыэюя]$/i ) ) {
                        jot = 'й';
                }
@@ -50,8 +49,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                case 'ablative':
                        if ( jot === 'й' ) {
                                ending = hyphen + jot + 'æ';
-                       }
-                       else {
+                       } else {
                                ending = hyphen + jot + 'æй';
                        }
                        break;
index 8b3a085..78e3919 100644 (file)
@@ -134,7 +134,9 @@ $.extend( mw.language, {
         * @return {string}
         */
        listToText: function ( list ) {
-               var text = '', i = 0;
+               var text = '',
+                       i = 0;
+
                for ( ; i < list.length; i++ ) {
                        text += list[i];
                        if ( list.length - 2 === i ) {
@@ -144,6 +146,10 @@ $.extend( mw.language, {
                        }
                }
                return text;
+       },
+
+       setSpecialCharacters: function ( data ) {
+               this.specialCharacters = data;
        }
 } );
 
index a0b8141..c7f150f 100644 (file)
                                        tmp[ transformTable[ i ] ] = i;
                                }
                                transformTable = tmp;
-                               numberString = num + '';
+                               numberString = String( num );
                        } else {
                                numberString = mw.language.commafy( num, pattern );
                        }
diff --git a/resources/src/mediawiki.language/specialcharacters.json b/resources/src/mediawiki.language/specialcharacters.json
new file mode 100644 (file)
index 0000000..bab92a1
--- /dev/null
@@ -0,0 +1 @@
+{"latin":["Á","á","À","à","Â","â","Ä","ä","Ã","ã","Ǎ","ǎ","Ā","ā","Ă","ă","Ą","ą","Å","å","Ć","ć","Ĉ","ĉ","Ç","ç","Č","č","Ċ","ċ","Đ","đ","Ď","ď","É","é","È","è","Ê","ê","Ë","ë","Ě","ě","Ē","ē","Ĕ","ĕ","Ė","ė","Ę","ę","Ĝ","ĝ","Ģ","ģ","Ğ","ğ","Ġ","ġ","Ĥ","ĥ","Ħ","ħ","Í","í","Ì","ì","Î","î","Ï","ï","Ĩ","ĩ","Ǐ","ǐ","Ī","ī","Ĭ","ĭ","İ","ı","Į","į","Ĵ","ĵ","Ķ","ķ","Ĺ","ĺ","Ļ","ļ","Ľ","ľ","Ł","ł","Ń","ń","Ñ","ñ","Ņ","ņ","Ň","ň","Ó","ó","Ò","ò","Ô","ô","Ö","ö","Õ","õ","Ǒ","ǒ","Ō","ō","Ŏ","ŏ","Ǫ","ǫ","Ő","ő","Ŕ","ŕ","Ŗ","ŗ","Ř","ř","Ś","ś","Ŝ","ŝ","Ş","ş","Š","š","Ș","ș","Ț","ț","Ť","ť","Ú","ú","Ù","ù","Û","û","Ü","ü","Ũ","ũ","Ů","ů","Ǔ","ǔ","Ū","ū","ǖ","ǘ","ǚ","ǜ","Ŭ","ŭ","Ų","ų","Ű","ű","Ŵ","ŵ","Ý","ý","Ŷ","ŷ","Ÿ","ÿ","Ȳ","ȳ","Ź","ź","Ž","ž","Ż","ż","Æ","æ","Ǣ","ǣ","Ø","ø","Œ","œ","ß","Ð","ð","Þ","þ","Ə","ə"],"latinextended":["Ḁ","ḁ","ẚ","Ạ","ạ","Ả","ả","Ấ","ấ","Ầ","ầ","Ẩ","ẩ","Ẫ","ẫ","Ậ","ậ","Ắ","ắ","Ằ","ằ","Ẳ","ẳ","Ẵ","ẵ","Ặ","ặ","Ḃ","ḃ","Ḅ","ḅ","Ḇ","ḇ","Ḉ","ḉ","Ḋ","ḋ","Ḍ","ḍ","Ḏ","ḏ","Ḑ","ḑ","Ḓ","ḓ","Ḕ","ḕ","Ḗ","ḗ","Ḙ","ḙ","Ḛ","ḛ","Ḝ","ḝ","Ẹ","ẹ","Ẻ","ẻ","Ẽ","ẽ","Ế","ế","Ề","ề","Ể","ể","Ễ","ễ","Ệ","ệ","Ḟ","ḟ","Ḡ","ḡ","Ḣ","ḣ","Ḥ","ḥ","Ḧ","ḧ","Ḩ","ḩ","Ḫ","ḫ","ẖ","Ḭ","ḭ","Ḯ","ḯ","Ỉ","ỉ","Ị","ị","Ḱ","ḱ","Ḳ","ḳ","Ḵ","ḵ","Ḷ","ḷ","Ḹ","ḹ","Ḻ","ḻ","Ḽ","ḽ","Ỻ","ỻ","Ḿ","ḿ","Ṁ","ṁ","Ṃ","ṃ","Ṅ","ṅ","Ṇ","ṇ","Ṉ","ṉ","Ṋ","ṋ","Ṍ","ṍ","Ṏ","ṏ","Ṑ","ṑ","Ṓ","ṓ","Ọ","ọ","Ỏ","ỏ","Ố","ố","Ồ","ồ","Ổ","ổ","Ỗ","ỗ","Ộ","ộ","Ớ","ớ","Ờ","ờ","Ở","ở","Ỡ","ỡ","Ợ","ợ","Ǿ","ǿ","Ơ","ơ","Ṕ","ṕ","Ṗ","ṗ","Ṙ","ṙ","Ṛ","ṛ","Ṝ","ṝ","Ṟ","ṟ","Ṡ","ṡ","ẛ","Ṣ","ṣ","Ṥ","ṥ","Ṧ","ṧ","Ṩ","ṩ","ẜ","ẝ","Ṫ","ṫ","Ṭ","ṭ","Ṯ","ṯ","Ṱ","ṱ","ẗ","Ṳ","ṳ","Ṵ","ṵ","Ṷ","ṷ","Ṹ","ṹ","Ṻ","ṻ","Ụ","ụ","Ủ","ủ","Ứ","ứ","Ừ","ừ","Ử","ử","Ữ","ữ","Ự","ự","Ư","ư","Ǖ","Ǘ","Ǚ","Ǜ","Ṽ","ṽ","Ṿ","ṿ","Ỽ","ỽ","Ẁ","ẁ","Ẃ","ẃ","Ẅ","ẅ","Ẇ","ẇ","Ẉ","ẉ","ẘ","Ẋ","ẋ","Ẍ","ẍ","Ẏ","ẏ","ẙ","Ỳ","ỳ","Ỵ","ỵ","Ỷ","ỷ","Ỹ","ỹ","Ỿ","ỿ","Ẑ","ẑ","Ẓ","ẓ","Ẕ","ẕ","Ǽ","ǽ","ẞ","ẟ"],"ipa":["p","t̪","t","ʈ","c","k","q","ʡ","ʔ","b","d̪","d","ɖ","ɟ","ɡ","ɢ","ɓ","ɗ","ʄ","ɠ","ʛ","t͡s","t͡ʃ","t͡ɕ","d͡z","d͡ʒ","d͡ʑ","ɸ","f","θ","s","ʃ","ʅ","ʆ","ʂ","ɕ","ç","ɧ","x","χ","ħ","ʜ","h","β","v","ʍ","ð","z","ʒ","ʓ","ʐ","ʑ","ʝ","ɣ","ʁ","ʕ","ʖ","ʢ","ɦ","ɬ","ɮ","m","m̩","ɱ","ɱ̩","ɱ̍","n̪","n̪̍","n","n̩","ɳ","ɳ̩","ɲ","ɲ̩","ŋ","ŋ̍","ŋ̩","ɴ","ɴ̩","ʙ","ʙ̩","r","r̩","ʀ","ʀ̩","ɾ","ɽ","ɿ","ɺ","l̪","l̪̩","l","l̩","ɫ","ɫ̩","ɭ","ɭ̩","ʎ","ʎ̩","ʟ","ʟ̩","w","ɥ","ʋ","ɹ","ɻ","j","ɰ","ʘ","ǂ","ǀ","!","ǁ","ʰ","ʱ","ʷ","ʸ","ʲ","ʳ","ⁿ","ˡ","ʴ","ʵ","ˢ","ˣ","ˠ","ʶ","ˤ","ˁ","ˀ","ʼ","i","i̯","ĩ","y","y̯","ỹ","ɪ","ɪ̯","ɪ̃","ʏ","ʏ̯","ʏ̃","ɨ","ɨ̯","ɨ̃","ʉ","ʉ̯","ʉ̃","ɯ","ɯ̯","ɯ̃","u","u̯","ũ","ʊ","ʊ̯","ʊ̃","e","e̯","ẽ","ø","ø̯","ø̃","ɘ","ɘ̯","ɘ̃","ɵ","ɵ̯","ɵ̃","ɤ","ɤ̯","ɤ̃","o","o̯","õ","ɛ","ɛ̯","ɛ̃","œ","œ̯","œ̃","ɜ","ɜ̯","ɜ̃","ə","ə̯","ə̃","ɞ","ɞ̯","ɞ̃","ʌ","ʌ̯","ʌ̃","ɔ","ɔ̯","ɔ̃","æ","æ̯","æ̃","ɶ","ɶ̯","ɶ̃","a","a̯","ã","ɐ","ɐ̯","ɐ̃","ɑ","ɑ̯","ɑ̃","ɒ","ɒ̯","ɒ̃","ˈ","ˌ","ː","ˑ","˘",".","‿","|","‖","ɚ","ɝ"],"symbols":["~","|","¡","¿","†","‡","↔","↑","↓","•","¶","#","½","⅓","⅔","¼","¾","⅛","⅜","⅝","⅞","∞","‘","’",{"label":"“”","action":{"type":"encapsulate","options":{"pre":"“","post":"”"}}},{"label":"„“","action":{"type":"encapsulate","options":{"pre":"„","post":"“"}}},{"label":"„”","action":{"type":"encapsulate","options":{"pre":"„","post":"”"}}},{"label":"«»","action":{"type":"encapsulate","options":{"pre":"«","post":"»"}}},"¤","₳","฿","₵","¢","₡","₢","$","₫","₯","€","₠","₣","ƒ","₴","₭","₤","ℳ","₥","₦","№","₧","₰","£","៛","₨","₪","৳","₮","₩","¥","♠","♣","♥","♦","m²","m³",{"label":"–","titleMsg":"special-characters-title-endash","action":{"type":"replace","options":{"peri":"–","selectPeri":false}}},{"label":"—","titleMsg":"special-characters-title-emdash","action":{"type":"replace","options":{"peri":"—","selectPeri":false}}},"…","‘","’","“","”","°","′","″","≈","≠","≤","≥","±",{"label":"−","titleMsg":"special-characters-title-minus","action":{"type":"replace","options":{"peri":"−","selectPeri":false}}},"×","÷","←","→","·","§","‽"],"greek":["Α","Ά","α","ά","Β","β","Γ","γ","Δ","δ","Ε","Έ","ε","έ","Ζ","ζ","Η","Ή","η","ή","Θ","θ","Ι","Ί","ι","ί","Κ","κ","Λ","λ","Μ","μ","Ν","ν","Ξ","ξ","Ο","Ό","ο","ό","Π","π","Ρ","ρ","Σ","σ","ς","Τ","τ","Υ","Ύ","υ","ύ","Φ","φ","Χ","χ","Ψ","ψ","Ω","Ώ","ω","ώ"],"cyrillic":["А","а","Ӑ","ӑ","Ӓ","ӓ","Ә","ә","Ӛ","ӛ","Б","б","В","в","Г","г","Ґ","ґ","Ӷ","ӷ","Ѓ","ѓ","Ӻ","ӻ","Ғ","ғ","Ҕ","ҕ","Д","д","Ԁ","ԁ","Ԃ","ԃ","Ђ","ђ","Е","е","Ѐ","ѐ","Є","є","Ё","ё","Ӗ","ӗ","Ҽ","ҽ","Ҿ","ҿ","Ж","ж","Җ","җ","Ӂ","ӂ","Ӝ","ӝ","З","з","Ҙ","ҙ","Ӟ","ӟ","Ԑ","ԑ","Ӡ","ӡ","Ѕ","ѕ","Ԅ","ԅ","Ԇ","ԇ","И","и","І","і","Ї","ї",["◌Ӏ","Ӏ"],["◌ӏ","ӏ"],"Й","й","Ӣ","ӣ","Ѝ","ѝ","Ҋ","ҋ","Ӥ","ӥ","Ј","ј","К","к","Ќ","ќ","Қ","қ","Ҝ","ҝ","Ҟ","ҟ","Ҡ","ҡ","Ӄ","ӄ","Ԛ","ԛ","Л","л","Љ","љ","Ԉ","ԉ","Ԓ","ԓ","Ӆ","ӆ","М","м","Ӎ","ӎ","Н","н","Њ","њ","Ң","ң","Ҥ","ҥ","Ӈ","ӈ","Ԋ","ԋ","Ӊ","ӊ","О","о","Ҩ","ҩ","Ӧ","ӧ","Ө","ө","Ӫ","ӫ","П","п","Ԥ","ԥ","Ҧ","ҧ","Р","р","Ҏ","ҏ","С","с","Ҫ","ҫ","Т","т","Ћ","ћ","Ԍ","ԍ","Ҭ","ҭ","Ԏ","ԏ","У","у","Ў","ў","Ӯ","ӯ","Ӱ","ӱ","Ӳ","ӳ","Ү","ү","Ұ","ұ","Ф","ф","Х","х","Ҳ","ҳ","Ӽ","ӽ","Ӿ","ӿ","Һ","һ","Ц","ц","Ч","ч","Ҵ","ҵ","Ҷ","ҷ","Ҹ","ҹ","Ӌ","ӌ","Ӵ","ӵ","Џ","џ","Ш","ш","Щ","щ","Ъ","ъ","Ы","ы","Ӹ","ӹ","Ь","ь","Ҍ","ҍ","Э","э","Ӭ","ӭ","Ю","ю","Я","я","Ԝ","ԝ","Ѡ","ѡ","Ѣ","ѣ","Ѥ","ѥ","Ѧ","ѧ","Ѩ","ѩ","Ѫ","ѫ","Ѭ","ѭ","Ѯ","ѯ","Ѱ","ѱ","Ѳ","ѳ","Ѵ","ѵ","Ѷ","ѷ","Ѹ","ѹ","Ѻ","ѻ","Ѽ","ѽ","Ѿ","ѿ","Ҁ","ҁ"],"arabic":["ا","ب","ت","ث","ج","ح","خ","د","ذ","ر","ز","س","ش","ص","ض","ط","ظ","ع","غ","ف","ق","ك","ل","م","ن","ه","و","ي","ء","آ","أ","إ","ٱ","ؤ","ئ","ى","ة","َ","ُ","ِ","ً","ٌ","ٍ","ّ","ْ","ٰ","،","؛","؟","ـ","٠","١","٢","٣","٤","٥","٦","٧","٨","٩","٪","٫","٬","٭",["ZWNJ","‌"],["ZWJ","‍"]],"arabicextended":["ٲ","ٳ","ٴ","ٵ","ݳ","ݴ","ٮ","ٻ","پ","ڀ","ݐ","ݑ","ݒ","ݓ","ݔ","ݕ","ݖ","ٹ","ٺ","ټ","ٽ","ٿ","ځ","ڂ","ڃ","ڄ","څ","چ","ڇ","ڿ","ݗ","ݘ","ݮ","ݯ","ݲ","ݼ","ڈ","ډ","ڊ","ڋ","ڌ","ڍ","ڎ","ڏ","ڐ","ۮ","ݙ","ݚ","ڑ","ڒ","ړ","ڔ","ڕ","ږ","ڗ","ژ","ڙ","ۯ","ݛ","ݫ","ݬ","ݱ","ښ","ڛ","ڜ","ݽ","ۺ","ݜ","ݭ","ݰ","ݾ","ڝ","ڞ","ۻ","ڟ","ڠ","ݝ","ݞ","ݟ","ۼ","ڡ","ڢ","ڣ","ڤ","ڥ","ڦ","ݠ","ݡ","ٯ","ڧ","ڨ","ػ","ؼ","ک","ڪ","ګ","ڬ","ڭ","ڮ","گ","ڰ","ڱ","ڲ","ڳ","ڴ","ݢ","ݣ","ݤ","ݿ","ڵ","ڶ","ڷ","ڸ","ݪ","ݥ","ݦ","ڹ","ں","ڻ","ڼ","ڽ","ݧ","ݨ","ݩ","ھ","ۀ","ہ","ۂ","ۃ","ە","ۿ","ٶ","ٷ","ۄ","ۅ","ۆ","ۇ","ۈ","ۉ","ۊ","ۋ","ۏ","ݸ","ݹ","ؠ","ؽ","ؾ","ؿ","ٸ","ی","ۍ","ێ","ې","ۑ","ے","ۓ","ݵ","ݶ","ݷ","ݺ","ݻ","ٖ","ٗ","٘","ٙ","ٚ","ٛ","ٜ","ٝ","ٞ","ٟ","۔","۽","۾","۰","۱","۲","۳","۴","۵","۶","۷","۸","۹"],"hebrew":["א","ב","ג","ד","ה","ו","ז","ח","ט","י","כ","ך","ל","מ","ם","נ","ן","ס","ע","פ","ף","צ","ץ","ק","ר","ש","ת","װ","ױ","ײ","׳","״","־","–",{"label":"„”","action":{"type":"encapsulate","options":{"pre":"„","post":"”"}}},{"label":"‚’","action":{"type":"encapsulate","options":{"pre":"‚","post":"’"}}},["◌ְ","ְ"],["◌ֱ","ֱ"],["◌ֲ","ֲ"],["◌ֳ","ֳ"],["◌ִ","ִ"],["◌ֵ","ֵ"],["◌ֶ","ֶ"],["◌ַ","ַ"],["◌ָ","ָ"],["◌ֹ","ֹ"],["◌ֻ","ֻ"],["◌ּ","ּ"],["◌ׁ","ׁ"],["◌ׂ","ׂ"],["◌ׇ","ׇ"],["◌֑","֑"],["◌֒","֒"],["◌֓","֓"],["◌֔","֔"],["◌֕","֕"],["◌֖","֖"],["◌֗","֗"],["◌֘","֘"],["◌֙","֙"],["◌֚","֚"],["◌֛","֛"],["◌֜","֜"],["◌֝","֝"],["◌֞","֞"],["◌֟","֟"],["◌֠","֠"],["◌֡","֡"],["◌֢","֢"],["◌֣","֣"],["◌֤","֤"],["◌֥","֥"],["◌֦","֦"],["◌֧","֧"],["◌֨","֨"],["◌֩","֩"],["◌֪","֪"],["◌֫","֫"],["◌֬","֬"],["◌֭","֭"],["◌֮","֮"],["◌֯","֯"],["◌ֿ","ֿ"],["◌׀","׀"],["◌׃","׃"]],"bangla":["অ","আ","ই","ঈ","উ","ঊ","ঋ","এ","ঐ","ও","ঔ","া","ি","ী","ু","ূ","ৃ","ে","ৈ","ো","ৌ","ক","খ","গ","ঘ","ঙ","চ","ছ","জ","ঝ","ঞ","ট","ঠ","ড","ঢ","ণ","ত","থ","দ","ধ","ন","প","ফ","ব","ভ","ম","য","র","ল","শ","ষ","স","হ","ড়","ঢ়","য়","ৎ","ং","ঃ","ঁ","্","১","২","৩","৪","৫","৬","৭","৮","৯","০"],"tamil":["௦","௧","௨","௩","௪","௫","௬","௭","௮","௯","௰","௱","௲","௳","௴","௵","௶","௷","௸","௹","௺","ௐ"],"telugu":["ఁ","ం","ః","అ","ఆ","ఇ","ఈ","ఉ","ఊ","ఋ","ౠ","ఌ","ౡ","ఎ","ఏ","ఐ","ఒ","ఓ","ఔ","క","ఖ","గ","ఘ","ఙ","చ","ఛ","జ","ఝ","ఞ","ట","ఠ","డ","ఢ","ణ","త","థ","ద","ధ","న","ప","ఫ","బ","భ","మ","య","ర","ఱ","ల","ళ","వ","శ","ష","స","హ","ా","ి","ీ","ు","ూ","ృ","ౄ","ె","ే","ై","ొ","ో","ౌ","్","ౢ","ౣ","ౘ","ౙ","౦","౧","౨","౩","౪","౫","౬","౭","౮","౯","ఽ","౸","౹","౺","౻","౼","౽","౾","౿"],"sinhala":["අ","ආ","ඇ","ඈ","ඉ","ඊ","උ","ඌ","ඍ","ඎ","ඏ","ඐ","එ","ඒ","ඓ","ඔ","ඕ","ඖ","ක","ඛ","ග","ඝ","ඞ","ඟ","ච","ඡ","ජ","ඣ","ඤ","ඥ","ඦ","ට","ඨ","ඩ","ඪ","ණ","ඬ","ත","ථ","ද","ධ","න","ඳ","ප","ඵ","බ","භ","ම","ඹ","ය","ර","ල","ව","ශ","ෂ","ස","හ","ළ","ෆ",["◌ා","ා"],["◌ැ","ැ"],["◌ෑ","ෑ"],["◌ි","ි"],["◌ී","ී"],["◌ු","ු"],["◌ූ","ූ"],["◌ෘ","ෘ"],["◌ෲ","ෲ"],["◌ෟ","ෟ"],["◌ෳ","ෳ"],["◌ෙ","ෙ"],["◌ේ","ේ"],["◌ො","ො"],["◌ෝ","ෝ"],["◌ෞ","ෞ"],["◌්","්"]],"devanagari":["ऀ","ँ","ं","ः","ऄ","अ","आ","इ","ई","उ","ऊ","ऋ","ऌ","ऍ","ऎ","ए","ऐ","ऑ","ऒ","ओ","औ","क","ख","ग","घ","ङ","च","छ","ज","झ","ञ","ट","ठ","ड","ढ","ण","त","थ","द","ध","न","ऩ","प","फ","ब","भ","म","य","र","ऱ","ल","ळ","ऴ","व","श","ष","स","ह","ऺ","ऻ","़","ऽ","ा","ि","ी","ु","ू","ृ","ॄ","ॅ","ॆ","े","ै","ॉ","ॊ","ो","ौ","्","ॎ","ॏ","ॐ","॑","॒","॓","॔","ॕ","ॖ","ॗ","क़","ख़","ग़","ज़","ड़","ढ़","फ़","य़","ॠ","ॡ","ॢ","ॣ","।","॥","०","१","२","३","४","५","६","७","८","९","॰","ॱ","ॲ","ॳ","ॴ","ॵ","ॶ","ॷ","ॹ","ॺ","ॻ","ॼ","ॽ","ॾ","ॿ"],"gujarati":["ૐ","ઁ","ં","ઃ","અ","આ","ઇ","ઈ","ઉ","ઊ","એ","ઐ","ઓ","ઔ","અં","ઋ","ઍ","ઑ","ઌ","ૠ","ૡ","ક","ખ","ગ","ઘ","ઙ","ચ","છ","જ","ઝ","ઞ","ટ","ઠ","ડ","ઢ","ણ","ત","થ","દ","ધ","ન","પ","ફ","બ","ભ","મ","ય","ર","લ","ળ","વ","શ","ષ","સ","હ","ક્ષ","જ્ઞ","ઽ","ા","િ","ી","ી","ુ","ૂ","ૃ","ૄ","ૅ","ે","ૈ","ૉ","ો","ૌ","ૢ","ૣ","્","૦","૧","૨","૩","૪","૫","૬","૭","૮","૯","૱"],"thai":["ก","ข","ฃ","ค","ฅ","ฆ","ง","จ","ฉ","ช","ซ","ฌ","ญ","ฎ","ฏ","ฐ","ฑ","ฒ","ณ","ด","ต","ถ","ท","ธ","น","บ","ป","ผ","ฝ","พ","ฟ","ภ","ม","ย","ร","ฤ","ล","ฦ","ว","ศ","ษ","ส","ห","ฬ","อ","ฮ","ะ","ั","า","ๅ","ำ","ิ","ี","ึ","ื","ุ","ู","เ","แ","โ","ใ","ไ","็","่","้","๊","๋","์","ํ","ฺ","๎","๐","๑","๒","๓","๔","๕","๖","๗","๘","๙","฿","ๆ","ฯ","๚","๏","๛"],"lao":["ກ","ຂ","ຄ","ງ","ຈ","ສ","ຊ","ຍ","ດ","ຕ","ຖ","ທ","ນ","ບ","ປ","ຜ","ຝ","ພ","ຟ","ມ","ຢ","ລ","ວ","ຫ","ອ","ຮ","ຣ","ໜ","ໝ","ຼ","ຽ","ະ","ັ","າ","ຳ","ິ","ີ","ຶ","ື","ຸ","ູ","ົ","ເ","ແ","ໂ","ໃ","ໄ","່","້","໊","໋","໌","ໍ","໐","໑","໒","໓","໔","໕","໖","໗","໘","໙","₭","ໆ","ຯ"],"khmer":["ក","ខ","គ","ឃ","ង","ច","ឆ","ជ","ឈ","ញ","ដ","ឋ","ឌ","ឍ","ណ","ត","ថ","ទ","ធ","ន","ប","ផ","ព","ភ","ម","យ","រ","ល","វ","ស","ហ","ឡ","អ","ឣ","ឤ","ឥ","ឦ","ឧ","ឨ","ឩ","ឪ","ឫ","ឬ","ឭ","ឮ","ឯ","ឰ","ឱ","ឲ","ឳ","្","឴","឵","ា","ិ","ី","ឹ","ឺ","ុ","ូ","ួ","ើ","ឿ","ៀ","េ","ែ","ៃ","ោ","ៅ","ំ","ះ","ៈ","៉","៊","់","៌","៍","៎","៏","័","៑","៓","៝","ៜ","០","១","២","៣","៤","៥","៦","៧","៨","៩","៛","។","៕","៖","ៗ","៘","៙","៚","៰","៱","៲","៳","៴","៵","៶","៷","៸","៹","᧠","᧡","᧢","᧣","᧤","᧥","᧦","᧧","᧨","᧩","᧪","᧫","᧬","᧭","᧮","᧯","᧰","᧱","᧲","᧳","᧴","᧵","᧶","᧷","᧸","᧹","᧺","᧻","᧼","᧽","᧾","᧿"]}
\ No newline at end of file
index cf9e27f..3660c20 100644 (file)
 /*global alert */
 ( function ( mw ) {
 
-/**
- * if sajax_debug_mode is true, this function outputs given the message into
- * the element with id = sajax_debug; if no such element exists in the document,
- * it is injected.
- */
-function debug( text ) {
-       if ( !window.sajax_debug_mode ) {
-               return false;
-       }
+       /**
       * if sajax_debug_mode is true, this function outputs given the message into
       * the element with id = sajax_debug; if no such element exists in the document,
       * it is injected.
       */
+       function debug( text ) {
+               if ( !window.sajax_debug_mode ) {
+                       return false;
+               }
 
-       var b, m,
-               e = document.getElementById( 'sajax_debug' );
+               var b, m,
+                       e = document.getElementById( 'sajax_debug' );
 
-       if ( !e ) {
-               e = document.createElement( 'p' );
-               e.className = 'sajax_debug';
-               e.id = 'sajax_debug';
+               if ( !e ) {
+                       e = document.createElement( 'p' );
+                       e.className = 'sajax_debug';
+                       e.id = 'sajax_debug';
 
-               b = document.getElementsByTagName( 'body' )[0];
+                       b = document.getElementsByTagName( 'body' )[0];
 
-               if ( b.firstChild ) {
-                       b.insertBefore( e, b.firstChild );
-               } else {
-                       b.appendChild( e );
+                       if ( b.firstChild ) {
+                               b.insertBefore( e, b.firstChild );
+                       } else {
+                               b.appendChild( e );
+                       }
                }
-       }
 
-       m = document.createElement( 'div' );
-       m.appendChild( document.createTextNode( text ) );
+               m = document.createElement( 'div' );
+               m.appendChild( document.createTextNode( text ) );
 
-       e.appendChild( m );
+               e.appendChild( m );
 
-       return true;
-}
+               return true;
+       }
 
-/**
- * Compatibility wrapper for creating a new XMLHttpRequest object.
- */
-function createXhr() {
-       debug( 'sajax_init_object() called..' );
-       var a;
-       try {
-               // Try the new style before ActiveX so we don't
-               // unnecessarily trigger warnings in IE 7 when
-               // set to prompt about ActiveX usage
-               a = new XMLHttpRequest();
-       } catch ( xhrE ) {
+       /**
+        * Compatibility wrapper for creating a new XMLHttpRequest object.
+        */
+       function createXhr() {
+               debug( 'sajax_init_object() called..' );
+               var a;
                try {
-                       a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
-               } catch ( msXmlE ) {
+                       // Try the new style before ActiveX so we don't
+                       // unnecessarily trigger warnings in IE 7 when
+                       // set to prompt about ActiveX usage
+                       a = new XMLHttpRequest();
+               } catch ( xhrE ) {
                        try {
-                               a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
-                       } catch ( msXhrE ) {
-                               a = null;
+                               a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
+                       } catch ( msXmlE ) {
+                               try {
+                                       a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
+                               } catch ( msXhrE ) {
+                                       a = null;
+                               }
                        }
                }
-       }
-       if ( !a ) {
-               debug( 'Could not create connection object.' );
-       }
+               if ( !a ) {
+                       debug( 'Could not create connection object.' );
+               }
 
-       return a;
-}
+               return a;
+       }
 
-/**
- * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
- *   func_name - the name of the function to call. Must be registered in $wgAjaxExportList
- *   args - an array of arguments to that function
- *   target - the target that will handle the result of the call. If this is a function,
- *            if will be called with the XMLHttpRequest as a parameter; if it's an input
- *            element, its value will be set to the resultText; if it's another type of
- *            element, its innerHTML will be set to the resultText.
- *
- * Example:
- *    sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
- *
- * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
- * (1, 2, 3) as the parameter list, and will show the result in the element
- * with id = showFoo
- */
-function doAjaxRequest( func_name, args, target ) {
-       var i, x, uri, post_data;
-       uri = mw.util.wikiScript() + '?action=ajax';
-       if ( window.sajax_request_type === 'GET' ) {
-               if ( uri.indexOf( '?' ) === -1 ) {
-                       uri = uri + '?rs=' + encodeURIComponent( func_name );
+       /**
+        * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
+        *   func_name - the name of the function to call. Must be registered in $wgAjaxExportList
+        *   args - an array of arguments to that function
+        *   target - the target that will handle the result of the call. If this is a function,
+        *            if will be called with the XMLHttpRequest as a parameter; if it's an input
+        *            element, its value will be set to the resultText; if it's another type of
+        *            element, its innerHTML will be set to the resultText.
+        *
+        * Example:
+        *    sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
+        *
+        * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
+        * (1, 2, 3) as the parameter list, and will show the result in the element
+        * with id = showFoo
+        */
+       function doAjaxRequest( func_name, args, target ) {
+               var i, x, uri, post_data;
+               uri = mw.util.wikiScript() + '?action=ajax';
+               if ( window.sajax_request_type === 'GET' ) {
+                       if ( uri.indexOf( '?' ) === -1 ) {
+                               uri = uri + '?rs=' + encodeURIComponent( func_name );
+                       } else {
+                               uri = uri + '&rs=' + encodeURIComponent( func_name );
+                       }
+                       for ( i = 0; i < args.length; i++ ) {
+                               uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
+                       }
+                       // uri = uri + '&rsrnd=' + new Date().getTime();
+                       post_data = null;
                } else {
-                       uri = uri + '&rs=' + encodeURIComponent( func_name );
-               }
-               for ( i = 0; i < args.length; i++ ) {
-                       uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
+                       post_data = 'rs=' + encodeURIComponent( func_name );
+                       for ( i = 0; i < args.length; i++ ) {
+                               post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
+                       }
                }
-               //uri = uri + '&rsrnd=' + new Date().getTime();
-               post_data = null;
-       } else {
-               post_data = 'rs=' + encodeURIComponent( func_name );
-               for ( i = 0; i < args.length; i++ ) {
-                       post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
+               x = createXhr();
+               if ( !x ) {
+                       alert( 'AJAX not supported' );
+                       return false;
                }
-       }
-       x = createXhr();
-       if ( !x ) {
-               alert( 'AJAX not supported' );
-               return false;
-       }
 
-       try {
-               x.open( window.sajax_request_type, uri, true );
-       } catch ( e ) {
-               if ( location.hostname === 'localhost' ) {
-                       alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
+               try {
+                       x.open( window.sajax_request_type, uri, true );
+               } catch ( e ) {
+                       if ( location.hostname === 'localhost' ) {
+                               alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
+                       }
+                       throw e;
                }
-               throw e;
-       }
-       if ( window.sajax_request_type === 'POST' ) {
-               x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
-               x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
-       }
-       x.setRequestHeader( 'Pragma', 'cache=yes' );
-       x.setRequestHeader( 'Cache-Control', 'no-transform' );
-       x.onreadystatechange = function () {
-               if ( x.readyState !== 4 ) {
-                       return;
+               if ( window.sajax_request_type === 'POST' ) {
+                       x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
+                       x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
                }
+               x.setRequestHeader( 'Pragma', 'cache=yes' );
+               x.setRequestHeader( 'Cache-Control', 'no-transform' );
+               x.onreadystatechange = function () {
+                       if ( x.readyState !== 4 ) {
+                               return;
+                       }
 
-               debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
+                       debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
 
-               //if ( x.status != 200 )
-               //      alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
-               //else
+                       // if ( x.status != 200 )
+                       //   alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
+                       // else
 
-               if ( typeof target === 'function' ) {
-                       target( x );
-               } else if ( typeof target === 'object' ) {
-                       if ( target.tagName === 'INPUT' ) {
-                               if ( x.status === 200 ) {
-                                       target.value = x.responseText;
-                               }
-                               //else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
-                       } else {
-                               if ( x.status === 200 ) {
-                                       target.innerHTML = x.responseText;
+                       if ( typeof target === 'function' ) {
+                               target( x );
+                       } else if ( typeof target === 'object' ) {
+                               if ( target.tagName === 'INPUT' ) {
+                                       if ( x.status === 200 ) {
+                                               target.value = x.responseText;
+                                       }
+                                       // else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
                                } else {
-                                       target.innerHTML = '<div class="error">Error: ' + x.status +
-                                               ' ' + x.statusText + ' (' + x.responseText + ')</div>';
+                                       if ( x.status === 200 ) {
+                                               target.innerHTML = x.responseText;
+                                       } else {
+                                               target.innerHTML = '<div class="error">Error: ' + x.status +
+                                                       ' ' + x.statusText + ' (' + x.responseText + ')</div>';
+                                       }
                                }
+                       } else {
+                               alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
                        }
-               } else {
-                       alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
-               }
-       };
+               };
+
+               debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
+               x.send( post_data );
+               debug( func_name + ' waiting..' );
 
-       debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
-       x.send( post_data );
-       debug( func_name + ' waiting..' );
+               return true;
+       }
 
-       return true;
-}
+       /**
+        * @return {boolean} Whether the browser supports AJAX
+        */
+       function wfSupportsAjax() {
+               var request = createXhr(),
+                       supportsAjax = request ? true : false;
 
-/**
- * @return {boolean} Whether the browser supports AJAX
- */
-function wfSupportsAjax() {
-       var request = createXhr(),
-               supportsAjax = request ? true : false;
-
-       request = undefined;
-       return supportsAjax;
-}
-
-// Expose + Mark as deprecated
-var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
-
-// Variables
-mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
-mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
-// Methods
-mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
-mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
-mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
-mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
+               request = undefined;
+               return supportsAjax;
+       }
+
+       // Expose + Mark as deprecated
+       var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
+
+       // Variables
+       mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
+       mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
+       // Methods
+       mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
+       mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
+       mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
+       mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
 
 }( mediaWiki ) );
index f9069b6..3f4b263 100644 (file)
@@ -6,7 +6,8 @@ var ProtectionForm = window.ProtectionForm = {
         * on the protection form
         */
        init: function () {
-               var $cell = $( '<td>' ), $row = $( '<tr>' ).append( $cell );
+               var $cell = $( '<td>' ),
+                       $row = $( '<tr>' ).append( $cell );
 
                if ( !$( '#mwProtectSet' ).length ) {
                        return false;
@@ -63,7 +64,7 @@ var ProtectionForm = window.ProtectionForm = {
        },
 
        /**
-        * Checks if a cerain protection level is cascadeable.
+        * Checks if a certain protection level is cascadeable.
         *
         * @param {string} level
         * @return {boolean}
index 467714e..e526d47 100644 (file)
@@ -91,6 +91,18 @@ abbr[title],
        color: #aaa; /* gray */
 }
 
+/*
+ * Bidi-isolate these numbers.
+ * See https://phabricator.wikimedia.org/T93484
+ */
+.mw-plusminus-pos,
+.mw-plusminus-neg,
+.mw-plusminus-null {
+       unicode-bidi: -moz-isolate;
+       unicode-bidi: -webkit-isolate;
+       unicode-bidi: isolate;
+}
+
 /**
  * Links to redirects appear italicized on [[Special:AllPages]], [[Special:PrefixIndex]],
  * [[Special:Watchlist/edit]] and in category listings.
@@ -516,7 +528,7 @@ table.wikitable > tr > td,
 table.wikitable > * > tr > th,
 table.wikitable > * > tr > td {
        border: 1px solid #aaa;
-       padding: 0.3em 0.4em;
+       padding: 0.2em 0.4em;
 }
 
 table.wikitable > tr > th,
@@ -934,11 +946,14 @@ h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) {
 
 /* Localised ordered list numbering for some languages */
 ol:lang(bcc) li,
+ol:lang(bgn) li,
 ol:lang(bqi) li,
 ol:lang(fa) li,
 ol:lang(glk) li,
 ol:lang(kk-arab) li,
-ol:lang(mzn) li {
+ol:lang(lrc) li,
+ol:lang(mzn) li,
+ol:lang(sdh) li {
        list-style-type: -moz-persian;
        list-style-type: persian;
 }
index dc21472..dffc6e8 100644 (file)
                ua = navigator.userAgent.toLowerCase(),
                onloadFuncts = [];
 
-/**
- * User-agent sniffing.
- *
- * @deprecated since 1.17 Use jquery.client instead
- */
-
-msg = 'Use feature detection or module jquery.client instead.';
-
-mw.log.deprecate( win, 'clientPC', ua, msg );
-
-// Ignored dummy values
-mw.log.deprecate( win, 'is_gecko', false, msg );
-mw.log.deprecate( win, 'is_chrome_mac', false, msg );
-mw.log.deprecate( win, 'is_chrome', false, msg );
-mw.log.deprecate( win, 'webkit_version', false, msg );
-mw.log.deprecate( win, 'is_safari_win', false, msg );
-mw.log.deprecate( win, 'is_safari', false, msg );
-mw.log.deprecate( win, 'webkit_match', false, msg );
-mw.log.deprecate( win, 'is_ff2', false, msg );
-mw.log.deprecate( win, 'ff2_bugs', false, msg );
-mw.log.deprecate( win, 'is_ff2_win', false, msg );
-mw.log.deprecate( win, 'is_ff2_x11', false, msg );
-mw.log.deprecate( win, 'opera95_bugs', false, msg );
-mw.log.deprecate( win, 'opera7_bugs', false, msg );
-mw.log.deprecate( win, 'opera6_bugs', false, msg );
-mw.log.deprecate( win, 'is_opera_95', false, msg );
-mw.log.deprecate( win, 'is_opera_preseven', false, msg );
-mw.log.deprecate( win, 'is_opera', false, msg );
-mw.log.deprecate( win, 'ie6_bugs', false, msg );
-
-/**
- * DOM utilities for handling of events, text nodes and selecting elements
- *
- * @deprecated since 1.17 Use jQuery instead
- */
-msg = 'Use jQuery instead.';
-
-// Ignored dummy values
-mw.log.deprecate( win, 'doneOnloadHook', undefined, msg );
-mw.log.deprecate( win, 'onloadFuncts', [], msg );
-mw.log.deprecate( win, 'runOnloadHook', $.noop, msg );
-mw.log.deprecate( win, 'changeText', $.noop, msg );
-mw.log.deprecate( win, 'killEvt', $.noop, msg );
-mw.log.deprecate( win, 'addHandler', $.noop, msg );
-mw.log.deprecate( win, 'hookEvent', $.noop, msg );
-mw.log.deprecate( win, 'addClickHandler', $.noop, msg );
-mw.log.deprecate( win, 'removeHandler', $.noop, msg );
-mw.log.deprecate( win, 'getElementsByClassName', function () { return []; }, msg );
-mw.log.deprecate( win, 'getInnerText', function () { return ''; }, msg );
-
-// Run a function after the window onload event is fired
-mw.log.deprecate( win, 'addOnloadHook', function ( hookFunct ) {
-       if ( onloadFuncts ) {
-               onloadFuncts.push( hookFunct );
-       } else {
-               // If func queue is gone the event has happened already,
-               // run immediately instead of queueing.
-               hookFunct();
-       }
-}, msg );
-
-$( win ).on( 'load', function () {
-       var i, functs;
-
-       // Don't run twice
-       if ( !onloadFuncts ) {
-               return;
-       }
-
-       // Deference and clear onloadFuncts before running any
-       // hooks to make sure we don't miss any addOnloadHook
-       // calls.
-       functs = onloadFuncts.slice();
-       onloadFuncts = undefined;
-
-       // Execute the queued functions
-       for ( i = 0; i < functs.length; i++ ) {
-               functs[i]();
-       }
-} );
-
-/**
- * Toggle checkboxes with shift selection
- *
- * @deprecated since 1.17 Use jquery.checkboxShiftClick instead
- */
-msg = 'Use jquery.checkboxShiftClick instead.';
-mw.log.deprecate( win, 'checkboxes', [], msg );
-mw.log.deprecate( win, 'lastCheckbox', null, msg );
-mw.log.deprecate( win, 'setupCheckboxShiftClick', $.noop, msg );
-mw.log.deprecate( win, 'addCheckboxClickHandlers', $.noop, msg );
-mw.log.deprecate( win, 'checkboxClickHandler', $.noop, msg );
-
-/**
- * Add a button to the default editor toolbar
- *
- * @deprecated since 1.17 Use mw.toolbar instead
- */
-mw.log.deprecate( win, 'mwEditButtons', [], 'Use mw.toolbar instead.' );
-mw.log.deprecate( win, 'mwCustomEditButtons', [], 'Use mw.toolbar instead.' );
-
-/**
- * Spinner creation, injection and removal
- *
- * @deprecated since 1.18 Use jquery.spinner instead
- */
-mw.log.deprecate( win, 'injectSpinner', $.noop, 'Use jquery.spinner instead.' );
-mw.log.deprecate( win, 'removeSpinner', $.noop, 'Use jquery.spinner instead.' );
-
-/**
- * Escape utilities
- *
- * @deprecated since 1.18 Use mw.html instead
- */
-mw.log.deprecate( win, 'escapeQuotes', $.noop, 'Use mw.html instead.' );
-mw.log.deprecate( win, 'escapeQuotesHTML', $.noop, 'Use mw.html instead.' );
-
-/**
- * Display a message to the user
- *
- * @deprecated since 1.17 Use mediawiki.notify instead
- * @param {string|HTMLElement} message To be put inside the message box
- */
-mw.log.deprecate( win, 'jsMsg', function ( message ) {
-       if ( !arguments.length || message === '' || message === null ) {
+       /**
+        * User-agent sniffing.
+        *
+        * @deprecated since 1.17 Use jquery.client instead
+        */
+
+       msg = 'Use feature detection or module jquery.client instead.';
+
+       mw.log.deprecate( win, 'clientPC', ua, msg );
+
+       // Ignored dummy values
+       mw.log.deprecate( win, 'is_gecko', false, msg );
+       mw.log.deprecate( win, 'is_chrome_mac', false, msg );
+       mw.log.deprecate( win, 'is_chrome', false, msg );
+       mw.log.deprecate( win, 'webkit_version', false, msg );
+       mw.log.deprecate( win, 'is_safari_win', false, msg );
+       mw.log.deprecate( win, 'is_safari', false, msg );
+       mw.log.deprecate( win, 'webkit_match', false, msg );
+       mw.log.deprecate( win, 'is_ff2', false, msg );
+       mw.log.deprecate( win, 'ff2_bugs', false, msg );
+       mw.log.deprecate( win, 'is_ff2_win', false, msg );
+       mw.log.deprecate( win, 'is_ff2_x11', false, msg );
+       mw.log.deprecate( win, 'opera95_bugs', false, msg );
+       mw.log.deprecate( win, 'opera7_bugs', false, msg );
+       mw.log.deprecate( win, 'opera6_bugs', false, msg );
+       mw.log.deprecate( win, 'is_opera_95', false, msg );
+       mw.log.deprecate( win, 'is_opera_preseven', false, msg );
+       mw.log.deprecate( win, 'is_opera', false, msg );
+       mw.log.deprecate( win, 'ie6_bugs', false, msg );
+
+       /**
+        * DOM utilities for handling of events, text nodes and selecting elements
+        *
+        * @deprecated since 1.17 Use jQuery instead
+        */
+       msg = 'Use jQuery instead.';
+
+       // Ignored dummy values
+       mw.log.deprecate( win, 'doneOnloadHook', undefined, msg );
+       mw.log.deprecate( win, 'onloadFuncts', [], msg );
+       mw.log.deprecate( win, 'runOnloadHook', $.noop, msg );
+       mw.log.deprecate( win, 'changeText', $.noop, msg );
+       mw.log.deprecate( win, 'killEvt', $.noop, msg );
+       mw.log.deprecate( win, 'addHandler', $.noop, msg );
+       mw.log.deprecate( win, 'hookEvent', $.noop, msg );
+       mw.log.deprecate( win, 'addClickHandler', $.noop, msg );
+       mw.log.deprecate( win, 'removeHandler', $.noop, msg );
+       mw.log.deprecate( win, 'getElementsByClassName', function () { return []; }, msg );
+       mw.log.deprecate( win, 'getInnerText', function () { return ''; }, msg );
+
+       // Run a function after the window onload event is fired
+       mw.log.deprecate( win, 'addOnloadHook', function ( hookFunct ) {
+               if ( onloadFuncts ) {
+                       onloadFuncts.push( hookFunct );
+               } else {
+                       // If func queue is gone the event has happened already,
+                       // run immediately instead of queueing.
+                       hookFunct();
+               }
+       }, msg );
+
+       $( win ).on( 'load', function () {
+               var i, functs;
+
+               // Don't run twice
+               if ( !onloadFuncts ) {
+                       return;
+               }
+
+               // Deference and clear onloadFuncts before running any
+               // hooks to make sure we don't miss any addOnloadHook
+               // calls.
+               functs = onloadFuncts.slice();
+               onloadFuncts = undefined;
+
+               // Execute the queued functions
+               for ( i = 0; i < functs.length; i++ ) {
+                       functs[i]();
+               }
+       } );
+
+       /**
+        * Toggle checkboxes with shift selection
+        *
+        * @deprecated since 1.17 Use jquery.checkboxShiftClick instead
+        */
+       msg = 'Use jquery.checkboxShiftClick instead.';
+       mw.log.deprecate( win, 'checkboxes', [], msg );
+       mw.log.deprecate( win, 'lastCheckbox', null, msg );
+       mw.log.deprecate( win, 'setupCheckboxShiftClick', $.noop, msg );
+       mw.log.deprecate( win, 'addCheckboxClickHandlers', $.noop, msg );
+       mw.log.deprecate( win, 'checkboxClickHandler', $.noop, msg );
+
+       /**
+        * Add a button to the default editor toolbar
+        *
+        * @deprecated since 1.17 Use mw.toolbar instead
+        */
+       mw.log.deprecate( win, 'mwEditButtons', [], 'Use mw.toolbar instead.' );
+       mw.log.deprecate( win, 'mwCustomEditButtons', [], 'Use mw.toolbar instead.' );
+
+       /**
+        * Spinner creation, injection and removal
+        *
+        * @deprecated since 1.18 Use jquery.spinner instead
+        */
+       mw.log.deprecate( win, 'injectSpinner', $.noop, 'Use jquery.spinner instead.' );
+       mw.log.deprecate( win, 'removeSpinner', $.noop, 'Use jquery.spinner instead.' );
+
+       /**
+        * Escape utilities
+        *
+        * @deprecated since 1.18 Use mw.html instead
+        */
+       mw.log.deprecate( win, 'escapeQuotes', $.noop, 'Use mw.html instead.' );
+       mw.log.deprecate( win, 'escapeQuotesHTML', $.noop, 'Use mw.html instead.' );
+
+       /**
+        * Display a message to the user
+        *
+        * @deprecated since 1.17 Use mediawiki.notify instead
+        * @param {string|HTMLElement} message To be put inside the message box
+        */
+       mw.log.deprecate( win, 'jsMsg', function ( message ) {
+               if ( !arguments.length || message === '' || message === null ) {
+                       return true;
+               }
+               if ( typeof message !== 'object' ) {
+                       message = $.parseHTML( message );
+               }
+               mw.notify( message, { autoHide: true, tag: 'legacy' } );
                return true;
-       }
-       if ( typeof message !== 'object' ) {
-               message = $.parseHTML( message );
-       }
-       mw.notify( message, { autoHide: true, tag: 'legacy' } );
-       return true;
-}, 'Use mediawiki.notify instead.' );
-
-/**
- * Misc. utilities
- *
- * @deprecated since 1.17 Use mediawiki.util or jquery.accessKeyLabel instead
- */
-msg = 'Use mediawiki.util instead.';
-mw.log.deprecate( win, 'addPortletLink', mw.util.addPortletLink, msg );
-mw.log.deprecate( win, 'appendCSS', mw.util.addCSS, msg );
-msg = 'Use jquery.accessKeyLabel instead.';
-mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
-mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
-// mw.util.updateTooltipAccessKeys already generates a deprecation message.
-win.updateTooltipAccessKeys = function () {
-       return mw.util.updateTooltipAccessKeys.apply( null, arguments );
-};
-
-/**
- * Wikipage import methods
- */
-
-// included-scripts tracker
-win.loadedScripts = {};
-
-win.importScript = function ( page ) {
-       var uri = mw.config.get( 'wgScript' ) + '?title=' +
-               mw.util.wikiUrlencode( page ) +
-               '&action=raw&ctype=text/javascript';
-       return win.importScriptURI( uri );
-};
-
-win.importScriptURI = function ( url ) {
-       if ( win.loadedScripts[url] ) {
-               return null;
-       }
-       win.loadedScripts[url] = true;
-       var s = document.createElement( 'script' );
-       s.setAttribute( 'src', url );
-       s.setAttribute( 'type', 'text/javascript' );
-       document.getElementsByTagName( 'head' )[0].appendChild( s );
-       return s;
-};
-
-win.importStylesheet = function ( page ) {
-       var uri = mw.config.get( 'wgScript' ) + '?title=' +
-               mw.util.wikiUrlencode( page ) +
-               '&action=raw&ctype=text/css';
-       return win.importStylesheetURI( uri );
-};
-
-win.importStylesheetURI = function ( url, media ) {
-       var l = document.createElement( 'link' );
-       l.rel = 'stylesheet';
-       l.href = url;
-       if ( media ) {
-               l.media = media;
-       }
-       document.getElementsByTagName( 'head' )[0].appendChild( l );
-       return l;
-};
+       }, 'Use mediawiki.notify instead.' );
+
+       /**
+        * Misc. utilities
+        *
+        * @deprecated since 1.17 Use mediawiki.util or jquery.accessKeyLabel instead
+        */
+       msg = 'Use mediawiki.util instead.';
+       mw.log.deprecate( win, 'addPortletLink', mw.util.addPortletLink, msg );
+       mw.log.deprecate( win, 'appendCSS', mw.util.addCSS, msg );
+       msg = 'Use jquery.accessKeyLabel instead.';
+       mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
+       mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
+       // mw.util.updateTooltipAccessKeys already generates a deprecation message.
+       win.updateTooltipAccessKeys = function () {
+               return mw.util.updateTooltipAccessKeys.apply( null, arguments );
+       };
+
+       /**
+        * Wikipage import methods
+        */
+
+       // included-scripts tracker
+       win.loadedScripts = {};
+
+       win.importScript = function ( page ) {
+               var uri = mw.config.get( 'wgScript' ) + '?title=' +
+                       mw.util.wikiUrlencode( page ) +
+                       '&action=raw&ctype=text/javascript';
+               return win.importScriptURI( uri );
+       };
+
+       win.importScriptURI = function ( url ) {
+               if ( win.loadedScripts[url] ) {
+                       return null;
+               }
+               win.loadedScripts[url] = true;
+               var s = document.createElement( 'script' );
+               s.setAttribute( 'src', url );
+               s.setAttribute( 'type', 'text/javascript' );
+               document.getElementsByTagName( 'head' )[0].appendChild( s );
+               return s;
+       };
+
+       win.importStylesheet = function ( page ) {
+               var uri = mw.config.get( 'wgScript' ) + '?title=' +
+                       mw.util.wikiUrlencode( page ) +
+                       '&action=raw&ctype=text/css';
+               return win.importStylesheetURI( uri );
+       };
+
+       win.importStylesheetURI = function ( url, media ) {
+               var l = document.createElement( 'link' );
+               l.rel = 'stylesheet';
+               l.href = url;
+               if ( media ) {
+                       l.media = media;
+               }
+               document.getElementsByTagName( 'head' )[0].appendChild( l );
+               return l;
+       };
 
 }( mediaWiki, jQuery ) );
index cffa04c..3366f1e 100644 (file)
@@ -41,6 +41,8 @@
        background-image: url(@fallback);
        background-image: -webkit-linear-gradient(transparent, transparent), e('/* @embed */') url(@svg);
        background-image: linear-gradient(transparent, transparent), e('/* @embed */') url(@svg);
+       // Do not serve SVG to Opera 12, bad rendering with border-radius or background-size (T87504)
+       background-image: -o-linear-gradient(transparent, transparent), url(@fallback);
 }
 
 .list-style-image(@url) {
        -webkit-box-shadow: @value; // Safari 3.1-5.0, iOS 3.2-4.3, Android 2.1-3.0
        box-shadow: @value; // Chrome 10+, Firefox 4+, IE 9+, Safari 5.1+, Opera 11+, iOS 5+, Android 4+
 }
+
+.column-count(@value) {
+       -webkit-column-count: @value;
+       -moz-column-count: @value;
+       column-count: @value;
+}
+
+.column-width(@value) {
+       -webkit-column-width: @value;// Chrome Any, Safari 3+, Opera 11.1+
+       -moz-column-width: @value;// Firefox 1.5+
+       column-width: @value;// IE 10+
+}
+
+.column-break-inside-avoid {
+       -webkit-column-break-inside: avoid; // Chrome Any, Safari 3+, Opera 11.1+
+       page-break-inside: avoid; // Firefox 1.5+
+       break-inside: avoid-column; // IE 10+
+}
index 40a5c41..2d68457 100644 (file)
 .button-colors(@bgColor) {
        background: @bgColor;
 
-       &:hover,
-       &:focus {
+       &: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%);
+       }
+
+       &:focus {
+               border-color: rgba(0,0,0,0.2);
+               box-shadow: inset 0 0 0 1px rgba(0,0,0,0.2);
+
                outline: none;
                // remove outline in Firefox
                &::-moz-focus-inner {
@@ -89,8 +94,8 @@
        text-shadow: 0 1px rgba(0, 0, 0, .1);
 
        &:disabled {
-               background: @colorGray12;
-               border-color: @colorGray12;
+               background: @colorGray13;
+               border-color: @colorGray13;
 
                // make sure disabled buttons don't have hover and active states
                &:hover,
 
        &:hover,
        &:focus {
-               // lessphp doesn't implement tint, see above
-               // color: tint(@textColor, 20%);
-               color: mix(#fff, @textColor, 20%);
+               color: @textColor;
        }
 
        &:active,
diff --git a/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js
new file mode 100644 (file)
index 0000000..91366ff
--- /dev/null
@@ -0,0 +1,38 @@
+/*global OO*/
+( function ( mw ) {
+       /**
+        * This is the abstract base class for MessagePoster implementations.
+        *
+        * @abstract
+        * @class
+        *
+        * @constructor
+        * @param {mw.Title} title Title to post to
+        */
+       mw.messagePoster.MessagePoster = function MwMessagePoster() {};
+
+       OO.initClass( mw.messagePoster.MessagePoster );
+
+       /**
+        * Post a message (with subject and body) to a talk page.
+        *
+        * @param {string} subject Subject/topic title; plaintext only (no wikitext or HTML)
+        * @param {string} body Body, as wikitext.  Signature code will automatically be added
+        *   by MessagePosters that require one, unless the message already contains the string
+        *   ~~~.
+        * @return {jQuery.Promise} Promise completing when the post succeeds or fails.
+        *   For failure, will be rejected with three arguments:
+        *
+        *   - primaryError - Primary error code.  For a mw.Api failure,
+        *       this should be 'api-fail'.
+        *   - secondaryError - Secondary error code.  For a mw.Api failure,
+        *       this, should be mw.Api's code, e.g. 'http', 'ok-but-empty', or the error passed through
+        *       from the server.
+        *   - details - Further details about the error
+        *
+        * @localdoc
+        * The base class currently does nothing, but could be used for shared analytics or
+        * something.
+        */
+       mw.messagePoster.MessagePoster.prototype.post = function () {};
+}( mediaWiki ) );
diff --git a/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js
new file mode 100644 (file)
index 0000000..296576b
--- /dev/null
@@ -0,0 +1,53 @@
+/*global OO*/
+( function ( mw, $ ) {
+       /**
+        * This is an implementation of MessagePoster for wikitext talk pages.
+        *
+        * @class mw.messagePoster.WikitextMessagePoster
+        * @extends mw.messagePoster.MessagePoster
+        *
+        * @constructor
+        * @param {mw.Title} title Wikitext page in a talk namespace, to post to
+        */
+       function WikitextMessagePoster( title ) {
+               this.api = new mw.Api();
+               this.title = title;
+       }
+
+       OO.inheritClass(
+               WikitextMessagePoster,
+               mw.messagePoster.MessagePoster
+       );
+
+       /**
+        * @inheritdoc
+        */
+       WikitextMessagePoster.prototype.post = function ( subject, body ) {
+               mw.messagePoster.WikitextMessagePoster.parent.prototype.post.call( this, subject, body );
+
+               // Add signature if needed
+               if ( body.indexOf( '~~~' ) === -1 ) {
+                       body += '\n\n~~~~';
+               }
+
+               return this.api.newSection(
+                       this.title,
+                       subject,
+                       body,
+                       { redirect: true }
+               ).then( function ( resp, jqXHR ) {
+                       if ( resp.edit.result === 'Success' ) {
+                               return $.Deferred().resolve( resp, jqXHR );
+                       } else {
+                               // mediawiki.api.js checks for resp.error.  Are there actually cases where the
+                               // request fails, but it's not caught there?
+                               return $.Deferred().reject( 'api-unexpected' );
+                       }
+               }, function ( code, details ) {
+                       return $.Deferred().reject( 'api-fail', code, details );
+               } ).promise();
+       };
+
+       mw.messagePoster.factory.register( 'wikitext', WikitextMessagePoster );
+       mw.messagePoster.WikitextMessagePoster = WikitextMessagePoster;
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js
new file mode 100644 (file)
index 0000000..9d28080
--- /dev/null
@@ -0,0 +1,109 @@
+/*global OO*/
+( function ( mw, $ ) {
+       /**
+        * This is a factory for MessagePoster objects, which allows a pluggable to way to script leaving a
+        * talk page message.
+        *
+        * @class mw.messagePoster.factory
+        * @singleton
+        */
+       function MwMessagePosterFactory() {
+               this.api = new mw.Api();
+               this.contentModelToClass = {};
+       }
+
+       OO.initClass( MwMessagePosterFactory );
+
+       // Note: This registration scheme is currently not compatible with LQT, since that doesn't
+       // have its own content model, just islqttalkpage.  LQT pages will be passed to the wikitext
+       // MessagePoster.
+       /**
+        * Registers a MessagePoster subclass for a given content model.
+        *
+        * @param {string} contentModel Content model of pages this MessagePoster can post to
+        * @param {Function} messagePosterConstructor Constructor for MessagePoster
+        */
+       MwMessagePosterFactory.prototype.register = function ( contentModel, messagePosterConstructor ) {
+               if ( this.contentModelToClass[contentModel] !== undefined ) {
+                       throw new Error( 'The content model \'' + contentModel + '\' is already registered.' );
+               }
+
+               this.contentModelToClass[contentModel] = messagePosterConstructor;
+       };
+
+       /**
+        * Unregisters a given content model
+        * This is exposed for testing and should not normally be needed.
+        *
+        * @param {string} contentModel Content model to unregister
+        */
+       MwMessagePosterFactory.prototype.unregister = function ( contentModel ) {
+               delete this.contentModelToClass[contentModel];
+       };
+
+       /**
+        * Creates a MessagePoster, given a title.  A promise for this is returned.
+        * This works by determining the content model, then loading the corresponding
+        * module (which will register the MessagePoster class), and finally constructing it.
+        *
+        * This does not require the message and should be called as soon as possible, so it does the
+        * API and ResourceLoader requests in the background.
+        *
+        * @param {mw.Title} title Title that will be posted to
+        * @return {jQuery.Promise} Promise resolving to a mw.messagePoster.MessagePoster.
+        *   For failure, rejected with up to three arguments:
+        *
+        *   - errorCode Error code string
+        *   - error Error explanation
+        *   - details Further error details
+        */
+       MwMessagePosterFactory.prototype.create = function ( title ) {
+               var pageId, page, contentModel, moduleName,
+                       factory = this;
+
+               return this.api.get( {
+                       action: 'query',
+                       prop: 'info',
+                       indexpageids: 1,
+                       titles: title.getPrefixedDb()
+               } ).then( function ( result ) {
+                       if ( result.query.pageids.length > 0 ) {
+                               pageId = result.query.pageids[0];
+                               page = result.query.pages[pageId];
+
+                               contentModel = page.contentmodel;
+                               moduleName = 'mediawiki.messagePoster.' + contentModel;
+                               return mw.loader.using( moduleName ).then( function () {
+                                       return factory.createForContentModel(
+                                               contentModel,
+                                               title
+                                       );
+                               }, function () {
+                                       return $.Deferred().reject( 'failed-to-load-module', 'Failed to load the \'' + moduleName + '\' module' );
+                               } );
+                       } else {
+                               return $.Deferred().reject( 'unexpected-response', 'Unexpected API response' );
+                       }
+               }, function ( errorCode, details ) {
+                       return $.Deferred().reject( 'content-model-query-failed', errorCode, details );
+               } ).promise();
+       };
+
+       /**
+        * Creates a MessagePoster instance, given a title and content model
+        *
+        * @private
+        *
+        * @param {string} contentModel Content model of title
+        * @param {mw.Title} title Title being posted to
+        * @return {mw.messagePoster.MessagePoster}
+        *
+        */
+       MwMessagePosterFactory.prototype.createForContentModel = function ( contentModel, title ) {
+               return new this.contentModelToClass[contentModel]( title );
+       };
+
+       mw.messagePoster = {
+               factory: new MwMessagePosterFactory()
+       };
+}( mediaWiki, jQuery ) );
index 26c32a5..9ad9c30 100644 (file)
@@ -3,7 +3,8 @@
  */
 ( function ( mw, $ ) {
        var jqXhr, $multipageimage, $spinner,
-               cache = {}, cacheOrder = [];
+               cache = {},
+               cacheOrder = [];
 
        /* Fetch the next page, caching up to 10 last-loaded pages.
         * @param {string} url
index 4aae606..ddd4f0c 100644 (file)
@@ -4,7 +4,7 @@
 
        // Client profile classes for <html>
        // Allows for easy hiding/showing of JS or no-JS-specific UI elements
-       $( 'html' )
+       $( document.documentElement )
                .addClass( 'client-js' )
                .removeClass( 'client-nojs' );
 
index 51cb8d0..7dd5ee7 100644 (file)
@@ -8,7 +8,8 @@
 /* Table of Contents */
 #toc,
 .toc,
-.mw-warning {
+.mw-warning,
+.toccolours {
        border: 1px solid #aaa;
        background-color: #f9f9f9;
        padding: 5px;
@@ -87,13 +88,6 @@ table.toc td {
        font-size: 94%;
 }
 
-.toccolours {
-       border: 1px solid #aaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       font-size: 95%;
-}
-
 /* Warning */
 .mw-warning {
        margin-left: 50px;
index 11962f8..eb57abb 100644 (file)
@@ -182,12 +182,6 @@ dd {
        margin-bottom: .1em;
 }
 
-/* IE 6 and 7 lack support for quotes aroud the <q> element ('::before' and '::after'
-   pseudoelements, 'quotes' property). Let's italicize it instead (using the star hack). */
-q {
-       *font-style: italic;
-}
-
 pre, code, tt, kbd, samp, .mw-code {
        /*
         * Some browsers will render the monospace text too small, namely Firefox, Chrome and Safari.
index 8579e05..aca335e 100644 (file)
@@ -12,7 +12,7 @@
                function updateBlockOptions( instant ) {
                        var blocktarget = $.trim( $blockTarget.val() ),
                                isEmpty = blocktarget === '',
-                               isIp = mw.util.isIPv4Address( blocktarget, true ) || mw.util.isIPv6Address( blocktarget, true ),
+                               isIp = mw.util.isIPAddress( blocktarget, true ),
                                isIpRange = isIp && blocktarget.match( /\/\d+$/ );
 
                        if ( isIp && !isEmpty ) {
index c92db16..16fdf38 100644 (file)
@@ -5,3 +5,11 @@
 .mw-changeslist-line-watched .mw-title {
        font-weight: bold;
 }
+
+/*
+ * Titles, including username links, are especially prone for getting jumbled up
+ * with other titles, usernames, etc. in mixed RTL-LTR environment.
+ */
+.mw-changeslist .mw-title {
+       unicode-bidi: embed;
+}
index 043d769..4bd747b 100644 (file)
@@ -5,15 +5,18 @@ jQuery( function ( $ ) {
        var $preftoc, $preferences, $fieldsets, $legends,
                hash, labelFunc,
                $tzSelect, $tzTextbox, $localtimeHolder, servertime,
-               $checkBoxes, savedWindowOnBeforeUnload;
+               $checkBoxes, allowCloseWindowFn;
 
        labelFunc = function () {
                return this.id.replace( /^mw-prefsection/g, 'preftab' );
        };
 
        $( '#prefsubmit' ).attr( 'id', 'prefcontrol' );
-       $preftoc = $( '<ul id="preftoc"></ul>' )
-               .attr( 'role', 'tablist' );
+       $preftoc = $( '<ul>' )
+               .attr( {
+                       id: 'preftoc',
+                       role: 'tablist'
+               } );
        $preferences = $( '#preferences' )
                .addClass( 'jsprefs' )
                .before( $preftoc );
@@ -41,7 +44,7 @@ jQuery( function ( $ ) {
                        } else {
                                $( this ).css( 'height', 'auto' );
                        }
-       } ).insertBefore( $preftoc );
+               } ).insertBefore( $preftoc );
 
        /**
         * It uses document.getElementById for security reasons (HTML injections in $()).
@@ -223,12 +226,8 @@ jQuery( function ( $ ) {
                localTime = servertime + minuteDiff;
 
                // Bring time within the [0,1440) range.
-               while ( localTime < 0 ) {
-                       localTime += 1440;
-               }
-               while ( localTime >= 1440 ) {
-                       localTime -= 1440;
-               }
+               localTime = ( ( localTime % 1440 ) + 1440 ) % 1440;
+
                $localtimeHolder.text( mediaWiki.language.convertNumber( minutesToHours( localTime ) ) );
        }
 
@@ -267,39 +266,14 @@ jQuery( function ( $ ) {
        // Set up a message to notify users if they try to leave the page without
        // saving.
        $( '#mw-prefs-form' ).data( 'origdata', $( '#mw-prefs-form' ).serialize() );
-       $( window )
-               .on( 'beforeunload.prefswarning', function () {
-                       var retval;
-
-                       // Check if anything changed
-                       if ( $( '#mw-prefs-form' ).serialize() !== $( '#mw-prefs-form' ).data( 'origdata' ) ) {
-                               // Return our message
-                               retval = mediaWiki.msg( 'prefswarning-warning', mediaWiki.msg( 'saveprefs' ) );
-                       }
+       allowCloseWindowFn = mediaWiki.confirmCloseWindow( {
+               test: function () {
+                       return $( '#mw-prefs-form' ).serialize() !== $( '#mw-prefs-form' ).data( 'origdata' );
+               },
 
-                       // Unset the onbeforeunload handler so we don't break page caching in Firefox
-                       savedWindowOnBeforeUnload = window.onbeforeunload;
-                       window.onbeforeunload = null;
-                       if ( retval !== undefined ) {
-                               // ...but if the user chooses not to leave the page, we need to rebind it
-                               setTimeout( function () {
-                                       window.onbeforeunload = savedWindowOnBeforeUnload;
-                               }, 1 );
-                               return retval;
-                       }
-               } )
-               .on( 'pageshow.prefswarning', function () {
-                       // Re-add onbeforeunload handler
-                       if ( !window.onbeforeunload ) {
-                               window.onbeforeunload = savedWindowOnBeforeUnload;
-                       }
-               } );
-       $( '#mw-prefs-form' ).submit( function () {
-               // Unbind our beforeunload handler
-               $( window ).off( '.prefswarning' );
-       } );
-       $( '#mw-prefs-restoreprefs' ).click( function () {
-               // Unbind our beforeunload handler
-               $( window ).off( '.prefswarning' );
+               message: mediaWiki.msg( 'prefswarning-warning', mediaWiki.msg( 'saveprefs' ) ),
+               namespace: 'prefswarning'
        } );
+       $( '#mw-prefs-form' ).submit( allowCloseWindowFn );
+       $( '#mw-prefs-restoreprefs' ).click( allowCloseWindowFn );
 } );
index f405c7a..eeccda5 100644 (file)
@@ -6,8 +6,9 @@
  * @singleton
  */
 ( function ( mw, $ ) {
-       var ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
-               $license = $( '#wpLicense' ), uploadWarning, uploadLicense;
+       var uploadWarning, uploadLicense,
+               ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
+               $license = $( '#wpLicense' );
 
        window.wgUploadWarningObj = uploadWarning = {
                responseCache: { '': '&nbsp;' },
        };
 
        $( function () {
-               // Disable URL box if the URL copy upload source type is not selected
-               if ( !$( '#wpSourceTypeurl' ).prop( 'checked' ) ) {
-                       $( '#wpUploadFileURL' ).prop( 'disabled', true );
-               }
-
                // AJAX wpDestFile warnings
                if ( ajaxUploadDestCheck ) {
                        // Insert an event handler that fetches upload warnings when wpDestFile
 
        // Disable all upload source fields except the selected one
        $( function () {
-               var i, $row,
-                       $rows = $( '.mw-htmlform-field-UploadSourceField' );
+               var $rows = $( '.mw-htmlform-field-UploadSourceField' );
 
-               /**
-                * @param {jQuery} $currentRow
-                * @return {Function} Handler
-                * @return {jQuery.Event} return.e
-                */
-               function createHandler( $currentRow ) {
-                       return function () {
-                               $( '.mw-upload-source-error' ).remove();
-                               if ( this.checked ) {
-                                       // Disable all inputs
-                                       $rows.find( 'input[name!="wpSourceType"]' ).prop( 'disabled', true );
-                                       // Re-enable the current one
-                                       $currentRow.find( 'input' ).prop( 'disabled', false );
-                               }
-                       };
-               }
+               $rows.on( 'change', 'input[type="radio"]', function ( e ) {
+                       var currentRow = e.delegateTarget;
+
+                       if ( !this.checked ) {
+                               return;
+                       }
+
+                       $( '.mw-upload-source-error' ).remove();
+
+                       // Enable selected upload method
+                       $( currentRow ).find( 'input' ).prop( 'disabled', false );
 
-               for ( i = $rows.length; i; i-- ) {
-                       $row = $rows.eq( i - 1 );
-                       $row
-                               .find( 'input[name="wpSourceType"]' )
-                               .change( createHandler( $row ) );
+                       // Disable inputs of other upload methods
+                       // (except for the radio button to re-enable it)
+                       $rows
+                               .not( currentRow )
+                               .find( 'input[type!="radio"]' )
+                               .prop( 'disabled', true );
+               } );
+
+               // Set initial state
+               if ( !$( '#wpSourceTypeurl' ).prop( 'checked' ) ) {
+                       $( '#wpUploadFileURL' ).prop( 'disabled', true );
                }
        } );
 
index b16570a..2f76131 100644 (file)
@@ -39,7 +39,7 @@
        font-family: inherit;
        font-size: inherit;
        line-height: inherit;
-       .transition(~"border linear .2s, box-shadow linear .2s");
+       .transition(~"border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1)");
 
        // Placeholder text styling must be set individually for each browser @winter
        &::-webkit-input-placeholder { // webkit
@@ -64,8 +64,9 @@
        }
 
        &:focus {
-               box-shadow: inset .45em 0 0 @colorProgressive;
-               border-color: @colorGrayDark;
+               box-shadow: inset 0 0 0 2px @colorProgressive;
+               // Color being used to match inset shadow, not semantic reasons
+               border-color: @colorProgressive;
                // Remove focus glow on input[type="search"]
                outline: 0;
        }
@@ -127,11 +128,3 @@ input.mw-ui-input-large {
        font-weight: bold;
        line-height: 1.25em;
 }
-
-// Tablet and desktop specific styling tweaks.
-@media all and (min-width: 768px) {
-       // Make inline elements take up a sensible amount of the screen on wider devices.
-       .mw-ui-input-inline {
-               min-width: 320px;
-       }
-}
diff --git a/resources/src/mediawiki/images/help.png b/resources/src/mediawiki/images/help.png
new file mode 100644 (file)
index 0000000..9910582
Binary files /dev/null and b/resources/src/mediawiki/images/help.png differ
diff --git a/resources/src/mediawiki/images/help.svg b/resources/src/mediawiki/images/help.svg
new file mode 100644 (file)
index 0000000..3662cb5
--- /dev/null
@@ -0,0 +1 @@
+<?xml 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.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"/><g><path 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 d="M11 16h2v2h-2z"/></g></g></svg>
index eaf079f..3efb7ec 100644 (file)
                set: function ( titles, state ) {
                        titles = $.isArray( titles ) ? titles : [titles];
                        state = state === undefined ? true : !!state;
-                       var pages = this.pages, i, len = titles.length;
+                       var i,
+                               pages = this.pages,
+                               len = titles.length;
+
                        for ( i = 0; i < len; i++ ) {
                                pages[ titles[i] ] = state;
                        }
diff --git a/resources/src/mediawiki/mediawiki.errorLogger.js b/resources/src/mediawiki/mediawiki.errorLogger.js
new file mode 100644 (file)
index 0000000..9f4f19d
--- /dev/null
@@ -0,0 +1,49 @@
+/**
+ * Try to catch errors in modules which don't do their own error handling.
+ * @class mw.errorLogger
+ * @singleton
+ */
+( function ( mw ) {
+       'use strict';
+
+       mw.errorLogger = {
+               /**
+                * Fired via mw.track when an error is not handled by local code and is caught by the
+                * window.onerror handler.
+                *
+                * @event global_error
+                * @param {string} errorMessage Error errorMessage.
+                * @param {string} url URL where error was raised.
+                * @param {number} lineNumber Line number where error was raised.
+                * @param {number} [columnNumber] Line number where error was raised. Not all browsers
+                *   support this.
+                * @param {Error|Mixed} [errorObject] The error object. Typically an instance of Error, but anything
+                *   (even a primitive value) passed to a throw clause will end up here.
+                */
+
+               /**
+                * Install a window.onerror handler that will report via mw.track, while preserving
+                * any previous handler.
+                * @param {Object} window
+                */
+               installGlobalHandler: function ( window ) {
+                       // We will preserve the return value of the previous handler. window.onerror works the
+                       // opposite way than normal event handlers (returning true will prevent the default
+                       // action, returning false will let the browser handle the error normally, by e.g.
+                       // logging to the console), so our fallback old handler needs to return false.
+                       var oldHandler = window.onerror || function () { return false; };
+
+                       /**
+                        * Dumb window.onerror handler which forwards the errors via mw.track.
+                        * @fires global_error
+                        */
+                       window.onerror = function ( errorMessage, url, lineNumber, columnNumber, errorObject ) {
+                               mw.track( 'global.error', { errorMessage: errorMessage, url: url,
+                                       lineNumber: lineNumber, columnNumber: columnNumber, errorObject: errorObject } );
+                               return oldHandler.apply( this, arguments );
+                       };
+               }
+       };
+
+       mw.errorLogger.installGlobalHandler( window );
+}( mediaWiki ) );
index 6bd47bb..f2859db 100644 (file)
@@ -7,3 +7,16 @@
        width: 18px;
        height: 18px;
 }
+
+.mw-feedbackDialog-welcome-message,
+.mw-feedbackDialog-feedback-terms {
+       line-height: 1.2em;
+}
+
+.mw-feedbackDialog-feedback-form {
+       margin-top: 1em;
+}
+
+.mw-feedbackDialog-feedback-termsofuse {
+       margin-left: 2.5em;
+}
index 867134c..d940100 100644 (file)
@@ -3,8 +3,11 @@
  *
  * @author Ryan Kaldari, 2010
  * @author Neil Kandalgaonkar, 2010-11
+ * @author Moriel Schottlender, 2015
  * @since 1.19
  */
+/*jshint es3:false */
+/*global OO*/
 ( function ( mw, $ ) {
        /**
         * This is a way of getting simple feedback from users. It's useful
         *
         * @class
         * @constructor
-        * @param {Object} [options]
-        * @param {mw.Api} [options.api] if omitted, will just create a standard API
-        * @param {mw.Title} [options.title="Feedback"] The title of the page where you collect
-        * feedback.
-        * @param {string} [options.dialogTitleMessageKey="feedback-submit"] Message key for the
-        * title of the dialog box
-        * @param {string} [options.bugsLink="//bugzilla.wikimedia.org/enter_bug.cgi"] URL where
-        * bugs can be posted
-        * @param {mw.Uri|string} [options.bugsListLink="//bugzilla.wikimedia.org/query.cgi"]
-        * URL where bugs can be listed
+        * @param {Object} [config] Configuration object
+        * @cfg {mw.Title} [title="Feedback"] The title of the page where you collect
+        *  feedback.
+        * @cfg {string} [dialogTitleMessageKey="feedback-dialog-title"] Message key for the
+        *  title of the dialog box
+        * @cfg {mw.Uri|string} [bugsLink="//phabricator.wikimedia.org/maniphest/task/create/"] URL where
+        *  bugs can be posted
+        * @cfg {mw.Uri|string} [bugsListLink="//phabricator.wikimedia.org/maniphest/query/advanced"] URL
+        *  where bugs can be listed
+        * @cfg {boolean} [showUseragentCheckbox=false] Show a Useragent agreement checkbox as part of the form.
+        * @cfg {boolean} [useragentCheckboxMandatory=false] Make the Useragent checkbox mandatory.
+        * @cfg {string|jQuery} [useragentCheckboxMessage] Supply a custom message for the useragent checkbox.
+        *  defaults to the message 'feedback-terms'.
         */
-       mw.Feedback = function ( options ) {
-               if ( options === undefined ) {
-                       options = {};
-               }
+       mw.Feedback = function MwFeedback( config ) {
+               config = config || {};
 
-               if ( options.api === undefined ) {
-                       options.api = new mw.Api();
-               }
+               this.dialogTitleMessageKey = config.dialogTitleMessageKey || 'feedback-dialog-title';
 
-               if ( options.title === undefined ) {
-                       options.title = new mw.Title( 'Feedback' );
-               }
+               // Feedback page title
+               this.feedbackPageTitle = config.title || new mw.Title( 'Feedback' );
 
-               if ( options.dialogTitleMessageKey === undefined ) {
-                       options.dialogTitleMessageKey = 'feedback-submit';
-               }
+               this.messagePosterPromise = mw.messagePoster.factory.create( this.feedbackPageTitle );
+
+               // Links
+               this.bugsTaskSubmissionLink = config.bugsLink || '//phabricator.wikimedia.org/maniphest/task/create/';
+               this.bugsTaskListLink = config.bugsListLink || '//phabricator.wikimedia.org/maniphest/query/advanced';
+
+               // Terms of use
+               this.useragentCheckboxShow = !!config.showUseragentCheckbox;
+               this.useragentCheckboxMandatory = !!config.useragentCheckboxMandatory;
+               this.useragentCheckboxMessage = config.useragentCheckboxMessage ||
+                       $( '<p>' ).append( mw.msg( 'feedback-terms' ) );
+
+               // Message dialog
+               this.thankYouDialog = new OO.ui.MessageDialog();
+       };
+
+       /* Initialize */
+       OO.initClass( mw.Feedback );
+
+       /* Static Properties */
+       mw.Feedback.static.windowManager = null;
+       mw.Feedback.static.dialog = null;
+
+       /* Methods */
 
-               if ( options.bugsLink === undefined ) {
-                       options.bugsLink = '//bugzilla.wikimedia.org/enter_bug.cgi';
+       /**
+        * Respond to dialog submit event. If the information was
+        * submitted, either successfully or with an error, open
+        * a MessageDialog to thank the user.
+        * @param {string} [status] A status of the end of operation
+        *  of the main feedback dialog. Empty if the dialog was
+        *  dismissed with no action or the user followed the button
+        *  to the external task reporting site.
+        */
+       mw.Feedback.prototype.onDialogSubmit = function ( status ) {
+               var dialogConfig = {};
+               switch ( status ) {
+                       case 'submitted':
+                               dialogConfig = {
+                                       title: mw.msg( 'feedback-thanks-title' ),
+                                       message: $( '<span>' ).append(
+                                               mw.message(
+                                                       'feedback-thanks',
+                                                       this.feedbackPageTitle.getNameText(),
+                                                       $( '<a>' )
+                                                               .attr( {
+                                                                       target: '_blank',
+                                                                       href: this.feedbackPageTitle.getUrl()
+                                                               } )
+                                               ).parse()
+                                       ),
+                                       actions: [
+                                               {
+                                                       action: 'accept',
+                                                       label: mw.msg( 'feedback-close' ),
+                                                       flags: 'primary'
+                                               }
+                                       ]
+                               };
+                               break;
+                       case 'error1':
+                       case 'error2':
+                       case 'error3':
+                       case 'error4':
+                               dialogConfig = {
+                                       title: mw.msg( 'feedback-error-title' ),
+                                       message: mw.msg( 'feedback-' + status ),
+                                       actions: [
+                                               {
+                                                       action: 'accept',
+                                                       label: mw.msg( 'feedback-close' ),
+                                                       flags: 'primary'
+                                               }
+                                       ]
+                               };
+                               break;
                }
 
-               if ( options.bugsListLink === undefined ) {
-                       options.bugsListLink = '//bugzilla.wikimedia.org/query.cgi';
+               // Show the message dialog
+               if ( !$.isEmptyObject( dialogConfig ) ) {
+                       this.constructor.static.windowManager.openWindow(
+                               this.thankYouDialog,
+                               dialogConfig
+                       );
                }
+       };
 
-               $.extend( this, options );
-               this.setup();
+       /**
+        * Modify the display form, and then open it, focusing interface on the subject.
+        *
+        * @param {Object} [contents] Prefilled contents for the feedback form.
+        * @param {string} [contents.subject] The subject of the feedback, as plaintext
+        * @param {string} [contents.message] The content of the feedback, as wikitext
+        */
+       mw.Feedback.prototype.launch = function ( contents ) {
+               // Dialog
+               if ( !this.constructor.static.dialog ) {
+                       this.constructor.static.dialog = new mw.Feedback.Dialog();
+                       this.constructor.static.dialog.connect( this, { submit: 'onDialogSubmit' } );
+               }
+               if ( !this.constructor.static.windowManager ) {
+                       this.constructor.static.windowManager = new OO.ui.WindowManager();
+                       this.constructor.static.windowManager.addWindows( [
+                               this.constructor.static.dialog,
+                               this.thankYouDialog
+                       ] );
+                       $( 'body' )
+                               .append( this.constructor.static.windowManager.$element );
+               }
+               // Open the dialog
+               this.constructor.static.windowManager.openWindow(
+                       this.constructor.static.dialog,
+                       {
+                               title: mw.msg( this.dialogTitleMessageKey ),
+                               settings: {
+                                       messagePosterPromise: this.messagePosterPromise,
+                                       title: this.feedbackPageTitle,
+                                       dialogTitleMessageKey: this.dialogTitleMessageKey,
+                                       bugsTaskSubmissionLink: this.bugsTaskSubmissionLink,
+                                       bugsTaskListLink: this.bugsTaskListLink,
+                                       useragentCheckbox: {
+                                               show: this.useragentCheckboxShow,
+                                               mandatory: this.useragentCheckboxMandatory,
+                                               message: this.useragentCheckboxMessage
+                                       }
+                               },
+                               contents: contents
+                       }
+               );
        };
 
-       mw.Feedback.prototype = {
-               /**
-                * Sets up interface
-                */
-               setup: function () {
-                       var $feedbackPageLink,
-                               $bugNoteLink,
-                               $bugsListLink,
-                               fb = this;
-
-                       $feedbackPageLink = $( '<a>' )
-                               .attr( {
-                                       href: fb.title.getUrl(),
-                                       target: '_blank'
-                               } )
-                               .css( {
-                                       whiteSpace: 'nowrap'
-                               } );
+       /**
+        * mw.Feedback Dialog
+        *
+        * @class
+        * @extends OO.ui.ProcessDialog
+        *
+        * @constructor
+        * @param {Object} config Configuration object
+        */
+       mw.Feedback.Dialog = function mwFeedbackDialog( config ) {
+               // Parent constructor
+               mw.Feedback.Dialog.super.call( this, config );
+
+               this.status = '';
+               this.feedbackPageTitle = null;
+               // Initialize
+               this.$element.addClass( 'mwFeedback-Dialog' );
+       };
 
-                       $bugNoteLink = $( '<a>' ).attr( { href: '#' } ).click( function () {
-                               fb.displayBugs();
-                       } );
-
-                       $bugsListLink = $( '<a>' ).attr( {
-                               href: fb.bugsListLink,
-                               target: '_blank'
-                       } );
-
-                       // TODO: Use a stylesheet instead of these inline styles in the template
-                       this.$dialog = mw.template.get( 'mediawiki.feedback', 'dialog.html' ).render();
-                       this.$dialog.find( '.feedback-mode small p' ).msg(
-                               'feedback-bugornote',
-                               $bugNoteLink,
-                               fb.title.getNameText(),
-                               $feedbackPageLink.clone()
-                       );
-                       this.$dialog.find( '.feedback-form .subject span' ).msg( 'feedback-subject' );
-                       this.$dialog.find( '.feedback-form .message span' ).msg( 'feedback-message' );
-                       this.$dialog.find( '.feedback-bugs p' ).msg( 'feedback-bugcheck', $bugsListLink );
-                       this.$dialog.find( '.feedback-submitting span' ).msg( 'feedback-adding' );
-                       this.$dialog.find( '.feedback-thanks' ).msg( 'feedback-thanks', fb.title.getNameText(),
-                               $feedbackPageLink.clone() );
-
-                       this.$dialog.dialog( {
-                               width: 500,
-                               autoOpen: false,
-                               title: mw.message( this.dialogTitleMessageKey ).escaped(),
-                               modal: true,
-                               buttons: fb.buttons
-                       } );
-
-                       this.subjectInput = this.$dialog.find( 'input.feedback-subject' ).get( 0 );
-                       this.messageInput = this.$dialog.find( 'textarea.feedback-message' ).get( 0 );
+       OO.inheritClass( mw.Feedback.Dialog, OO.ui.ProcessDialog );
+
+       /* Static properties */
+       mw.Feedback.Dialog.static.name = 'mwFeedbackDialog';
+       mw.Feedback.Dialog.static.title = mw.msg( 'feedback-dialog-title' );
+       mw.Feedback.Dialog.static.size = 'medium';
+       mw.Feedback.Dialog.static.actions = [
+               {
+                       action: 'submit',
+                       label: mw.msg( 'feedback-submit' ),
+                       flags: [ 'primary', 'constructive' ]
                },
-
-               /**
-                * Displays a section of the dialog.
-                *
-                * @param {"form"|"bugs"|"submitting"|"thanks"|"error"} s
-                * The section of the dialog to show.
-                */
-               display: function ( s ) {
-                       // Hide the buttons
-                       this.$dialog.dialog( { buttons: {} } );
-                       // Hide everything
-                       this.$dialog.find( '.feedback-mode' ).hide();
-                       // Show the desired div
-                       this.$dialog.find( '.feedback-' + s ).show();
+               {
+                       action: 'external',
+                       label: mw.msg( 'feedback-external-bug-report-button' ),
+                       flags: 'constructive'
                },
+               {
+                       action: 'cancel',
+                       label: mw.msg( 'feedback-cancel' ),
+                       flags: 'safe'
+               }
+       ];
 
-               /**
-                * Display the submitting section.
-                */
-               displaySubmitting: function () {
-                       this.display( 'submitting' );
-               },
+       /**
+        * @inheritdoc
+        */
+       mw.Feedback.Dialog.prototype.initialize = function () {
+               var feedbackSubjectFieldLayout, feedbackMessageFieldLayout,
+                       feedbackFieldsetLayout, termsOfUseLabel;
+
+               // Parent method
+               mw.Feedback.Dialog.super.prototype.initialize.call( this );
+
+               this.feedbackPanel = new OO.ui.PanelLayout( {
+                       scrollable: false,
+                       expanded: false,
+                       padded: true
+               } );
+
+               this.$spinner = $( '<div>' )
+                       .addClass( 'feedback-spinner' );
+
+               // Feedback form
+               this.feedbackMessageLabel = new OO.ui.LabelWidget( {
+                       classes: [ 'mw-feedbackDialog-welcome-message' ]
+               } );
+               this.feedbackSubjectInput = new OO.ui.TextInputWidget( {
+                       multiline: false
+               } );
+               this.feedbackMessageInput = new OO.ui.TextInputWidget( {
+                       autosize: true,
+                       multiline: true
+               } );
+               feedbackSubjectFieldLayout = new OO.ui.FieldLayout( this.feedbackSubjectInput, {
+                       label: mw.msg( 'feedback-subject' )
+               } );
+               feedbackMessageFieldLayout = new OO.ui.FieldLayout( this.feedbackMessageInput, {
+                       label: mw.msg( 'feedback-message' )
+               } );
+               feedbackFieldsetLayout = new OO.ui.FieldsetLayout( {
+                       items: [ feedbackSubjectFieldLayout, feedbackMessageFieldLayout ],
+                       classes: [ 'mw-feedbackDialog-feedback-form' ]
+               } );
+
+               // Useragent terms of use
+               this.useragentCheckbox = new OO.ui.CheckboxInputWidget();
+               this.useragentFieldLayout = new OO.ui.FieldLayout( this.useragentCheckbox, {
+                       classes: [ 'mw-feedbackDialog-feedback-terms' ],
+                       align: 'inline'
+               } );
+
+               termsOfUseLabel = new OO.ui.LabelWidget( {
+                       classes: [ 'mw-feedbackDialog-feedback-termsofuse' ],
+                       label: $( '<p>' ).append( mw.msg( 'feedback-termsofuse' ) )
+               } );
+
+               this.feedbackPanel.$element.append(
+                       this.feedbackMessageLabel.$element,
+                       feedbackFieldsetLayout.$element,
+                       this.useragentFieldLayout.$element,
+                       termsOfUseLabel.$element
+               );
+
+               // Events
+               this.feedbackSubjectInput.connect( this, { change: 'validateFeedbackForm' } );
+               this.feedbackMessageInput.connect( this, { change: 'validateFeedbackForm' } );
+               this.feedbackMessageInput.connect( this, { change: 'updateSize' } );
+               this.useragentCheckbox.connect( this, { change: 'validateFeedbackForm' } );
+
+               this.$body.append( this.feedbackPanel.$element );
+       };
 
-               /**
-                * Display the bugs section.
-                */
-               displayBugs: function () {
-                       var fb = this,
-                               bugsButtons = {};
-
-                       this.display( 'bugs' );
-                       bugsButtons[ mw.msg( 'feedback-bugnew' ) ] = function () {
-                               window.open( fb.bugsLink, '_blank' );
-                       };
-                       bugsButtons[ mw.msg( 'feedback-cancel' ) ] = function () {
-                               fb.cancel();
-                       };
-                       this.$dialog.dialog( {
-                               buttons: bugsButtons
-                       } );
-               },
+       /**
+        * Validate the feedback form
+        */
+       mw.Feedback.Dialog.prototype.validateFeedbackForm = function () {
+               var isValid = (
+                               (
+                                       !this.useragentMandatory ||
+                                       this.useragentCheckbox.isSelected()
+                               ) &&
+                               (
+                                       !!this.feedbackMessageInput.getValue() ||
+                                       !!this.feedbackSubjectInput.getValue()
+                               )
+                       );
 
-               /**
-                * Display the thanks section.
-                */
-               displayThanks: function () {
-                       var fb = this,
-                               closeButton = {};
-
-                       this.display( 'thanks' );
-                       closeButton[ mw.msg( 'feedback-close' ) ] = function () {
-                               fb.$dialog.dialog( 'close' );
-                       };
-                       this.$dialog.dialog( {
-                               buttons: closeButton
-                       } );
-               },
+               this.actions.setAbilities( { submit:  isValid } );
+       };
 
-               /**
-                * Display the feedback form
-                * @param {Object} [contents] Prefilled contents for the feedback form.
-                * @param {string} [contents.subject] The subject of the feedback
-                * @param {string} [contents.message] The content of the feedback
-                */
-               displayForm: function ( contents ) {
-                       var fb = this,
-                               formButtons = {};
-
-                       this.subjectInput.value = ( contents && contents.subject ) ? contents.subject : '';
-                       this.messageInput.value = ( contents && contents.message ) ? contents.message : '';
-
-                       this.display( 'form' );
-
-                       // Set up buttons for dialog box. We have to do it the hard way since the json keys are localized
-                       formButtons[ mw.msg( 'feedback-submit' ) ] = function () {
-                               fb.submit();
-                       };
-                       formButtons[ mw.msg( 'feedback-cancel' ) ] = function () {
-                               fb.cancel();
-                       };
-                       this.$dialog.dialog( { buttons: formButtons } ); // put the buttons back
-               },
+       /**
+        * @inheritdoc
+        */
+       mw.Feedback.Dialog.prototype.getBodyHeight = function () {
+               return this.feedbackPanel.$element.outerHeight( true );
+       };
 
-               /**
-                * Display an error on the form.
-                *
-                * @param {string} message Should be a valid message key.
-                */
-               displayError: function ( message ) {
-                       var fb = this,
-                               closeButton = {};
-
-                       this.display( 'error' );
-                       this.$dialog.find( '.feedback-error-msg' ).msg( message );
-                       closeButton[ mw.msg( 'feedback-close' ) ] = function () {
-                               fb.$dialog.dialog( 'close' );
-                       };
-                       this.$dialog.dialog( { buttons: closeButton } );
-               },
+       /**
+        * @inheritdoc
+        */
+       mw.Feedback.Dialog.prototype.getSetupProcess = function ( data ) {
+               return mw.Feedback.Dialog.super.prototype.getSetupProcess.call( this, data )
+                       .next( function () {
+                               var plainMsg, parsedMsg,
+                                       settings = data.settings;
+                               data.contents = data.contents || {};
+
+                               // Prefill subject/message
+                               this.feedbackSubjectInput.setValue( data.contents.subject );
+                               this.feedbackMessageInput.setValue( data.contents.message );
+
+                               this.status = '';
+                               this.messagePosterPromise = settings.messagePosterPromise;
+                               this.setBugReportLink( settings.bugsTaskSubmissionLink );
+                               this.feedbackPageTitle = settings.title;
+                               this.feedbackPageName = settings.title.getNameText();
+                               this.feedbackPageUrl = settings.title.getUrl();
+
+                               // Useragent checkbox
+                               if ( settings.useragentCheckbox.show ) {
+                                       this.useragentFieldLayout.setLabel( settings.useragentCheckbox.message );
+                               }
 
-               /**
-                * Close the feedback form.
-                */
-               cancel: function () {
-                       this.$dialog.dialog( 'close' );
-               },
+                               this.useragentMandatory = settings.useragentCheckbox.mandatory;
+                               this.useragentFieldLayout.toggle( settings.useragentCheckbox.show );
+
+                               // HACK: Setting a link in the messages doesn't work. There is already a report
+                               // about this, and the bug report offers a somewhat hacky work around that
+                               // includes setting a separate message to be parsed.
+                               // We want to make sure the user can configure both the title of the page and
+                               // a separate url, so this must be allowed to parse correctly.
+                               // See https://phabricator.wikimedia.org/T49395#490610
+                               mw.messages.set( {
+                                       'feedback-dialog-temporary-message':
+                                               '<a href="' + this.feedbackPageUrl + '" target="_blank">' + this.feedbackPageName + '</a>'
+                               } );
+                               plainMsg = mw.message( 'feedback-dialog-temporary-message' ).plain();
+                               mw.messages.set( { 'feedback-dialog-temporary-message-parsed': plainMsg } );
+                               parsedMsg = mw.message( 'feedback-dialog-temporary-message-parsed' );
+                               this.feedbackMessageLabel.setLabel(
+                                       // Double-parse
+                                       $( '<span>' )
+                                               .append( mw.message( 'feedback-dialog-intro', parsedMsg ).parse() )
+                               );
+
+                               this.validateFeedbackForm();
+                       }, this );
+       };
 
-               /**
-                * Submit the feedback form.
-                */
-               submit: function () {
-                       var subject, message,
-                               fb = this;
-
-                       // Get the values to submit.
-                       subject = $.trim( this.subjectInput.value );
-
-                       // We used to include "mw.html.escape( navigator.userAgent )" but there are legal issues
-                       // with posting this without their explicit consent
-                       message = $.trim( this.messageInput.value );
-                       if ( message.indexOf( '~~~' ) === -1 ) {
-                               message += ' ~~~~';
-                       }
+       /**
+        * @inheritdoc
+        */
+       mw.Feedback.Dialog.prototype.getReadyProcess = function ( data ) {
+               return mw.Feedback.Dialog.super.prototype.getReadyProcess.call( this, data )
+                       .next( function () {
+                               this.feedbackSubjectInput.focus();
+                       }, this );
+       };
 
-                       this.displaySubmitting();
-
-                       // Post the message, resolving redirects
-                       this.api.newSection(
-                               this.title,
-                               subject,
-                               message,
-                               { redirect: true }
-                       )
-                       .done( function ( result ) {
-                               if ( result.edit.result === 'Success' ) {
-                                       fb.displayThanks();
-                               } else {
-                                       // unknown API result
-                                       fb.displayError( 'feedback-error1' );
+       /**
+        * @inheritdoc
+        */
+       mw.Feedback.Dialog.prototype.getActionProcess = function ( action ) {
+               if ( action === 'cancel' ) {
+                       return new OO.ui.Process( function () {
+                               this.close( { action: action } );
+                       }, this );
+               } else if ( action === 'external' ) {
+                       return new OO.ui.Process( function () {
+                               // Open in a new window
+                               window.open( this.getBugReportLink(), '_blank' );
+                               // Close the dialog
+                               this.close();
+                       }, this );
+               } else if ( action === 'submit' ) {
+                       return new OO.ui.Process( function () {
+                               var fb = this,
+                                       userAgentMessage = ':' +
+                                               '<small>' +
+                                               mw.msg( 'feedback-useragent' ) +
+                                               ' ' +
+                                               mw.html.escape( navigator.userAgent ) +
+                                               '</small>\n\n',
+                                       subject = this.feedbackSubjectInput.getValue(),
+                                       message = this.feedbackMessageInput.getValue();
+
+                               // Add user agent if checkbox is selected
+                               if ( this.useragentCheckbox.isSelected() ) {
+                                       message = userAgentMessage + message;
                                }
-                       } )
-                       .fail( function ( code, result ) {
-                               if ( code === 'http' ) {
+
+                               // Post the message
+                               return this.messagePosterPromise.then( function ( poster ) {
+                                       return fb.postMessage( poster, subject, message );
+                               }, function () {
+                                       fb.status = 'error4';
+                                       mw.log.warn( 'Feedback report failed because MessagePoster could not be fetched' );
+                               } ).always( function () {
+                                       fb.close();
+                               } );
+                       }, this );
+               }
+               // Fallback to parent handler
+               return mw.Feedback.Dialog.super.prototype.getActionProcess.call( this, action );
+       };
+
+       /**
+        * Posts the message
+        *
+        * @private
+        *
+        * @param {mw.messagePoster.MessagePoster} poster Poster implementation used to leave feedback
+        * @param {string} subject Subject of message
+        * @param {string} message Body of message
+        * @return {jQuery.Promise} Promise representing success of message posting action
+        */
+       mw.Feedback.Dialog.prototype.postMessage = function ( poster, subject, message ) {
+               var fb = this;
+
+               return poster.post(
+                       subject,
+                       message
+               ).then( function () {
+                       fb.status = 'submitted';
+               }, function ( mainCode, secondaryCode, details ) {
+                       if ( mainCode === 'api-fail' ) {
+                               if ( secondaryCode === 'http' ) {
+                                       fb.status = 'error3';
                                        // ajax request failed
-                                       fb.displayError( 'feedback-error3' );
-                                       mw.log.warn( 'Feedback report failed with HTTP error: ' +  result.textStatus );
+                                       mw.log.warn( 'Feedback report failed with HTTP error: ' +  details.textStatus );
                                } else {
-                                       fb.displayError( 'feedback-error2' );
-                                       mw.log.warn( 'Feedback report failed with API error: ' +  code );
+                                       fb.status = 'error2';
+                                       mw.log.warn( 'Feedback report failed with API error: ' +  secondaryCode );
                                }
-                       } );
-               },
+                       } else {
+                               fb.status = 'error1';
+                       }
+               } );
+       };
 
-               /**
-                * Modify the display form, and then open it, focusing interface on the subject.
-                * @param {Object} [contents] Prefilled contents for the feedback form.
-                * @param {string} [contents.subject] The subject of the feedback
-                * @param {string} [contents.message] The content of the feedback
-                */
-               launch: function ( contents ) {
-                       this.displayForm( contents );
-                       this.$dialog.dialog( 'open' );
-                       this.subjectInput.focus();
-               }
+       /**
+        * @inheritdoc
+        */
+       mw.Feedback.Dialog.prototype.getTeardownProcess = function ( data ) {
+               return mw.Feedback.Dialog.super.prototype.getTeardownProcess.call( this, data )
+                       .first( function () {
+                               this.emit( 'submit', this.status, this.feedbackPageName, this.feedbackPageUrl );
+                               // Cleanup
+                               this.status = '';
+                               this.feedbackPageTitle = null;
+                               this.feedbackSubjectInput.setValue( '' );
+                               this.feedbackMessageInput.setValue( '' );
+                               this.useragentCheckbox.setSelected( false );
+                       }, this );
+       };
+
+       /**
+        * Set the bug report link
+        * @param {string} link Link to the external bug report form
+        */
+       mw.Feedback.Dialog.prototype.setBugReportLink = function ( link ) {
+               this.bugReportLink = link;
        };
+
+       /**
+        * Get the bug report link
+        * @returns {string} Link to the external bug report form
+        */
+       mw.Feedback.Dialog.prototype.getBugReportLink = function () {
+               return this.bugReportLink;
+       };
+
 }( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.filewarning.js b/resources/src/mediawiki/mediawiki.filewarning.js
new file mode 100644 (file)
index 0000000..882affe
--- /dev/null
@@ -0,0 +1,68 @@
+/*!
+ * mediawiki.filewarning
+ *
+ * @author Mark Holmquist, 2015
+ * @since 1.25
+ */
+/*global OO*/
+( function ( mw, $, oo ) {
+       var warningConfig = mw.config.get( 'wgFileWarning' ),
+               warningMessages = warningConfig.messages,
+               warningLink = warningConfig.link,
+               $origMimetype = $( '.fullMedia .fileInfo .mime-type' ),
+               $mimetype = $origMimetype.clone(),
+               $header = $( '<h3>' )
+                       .addClass( 'mediawiki-filewarning-header empty' ),
+               $main = $( '<p>' )
+                       .addClass( 'mediawiki-filewarning-main empty' ),
+               $info = $( '<a>' )
+                       .addClass( 'mediawiki-filewarning-info empty' ),
+               $footer = $( '<p>' )
+                       .addClass( 'mediawiki-filewarning-footer empty' ),
+               dialog = new oo.ui.PopupButtonWidget( {
+                       classes: [ 'mediawiki-filewarning-anchor' ],
+                       label: $mimetype,
+                       flags: [ 'warning' ],
+                       icon: 'alert',
+                       framed: false,
+                       popup: {
+                               classes: [ 'mediawiki-filewarning' ],
+                               padded: true,
+                               width: 400,
+                               $content: $header.add( $main ).add( $info ).add( $footer )
+                       }
+               } );
+
+       function loadMessage( $target, message ) {
+               if ( message ) {
+                       $target.removeClass( 'empty' )
+                               .text( mw.message( message ).text() );
+               }
+       }
+
+       // The main message must be populated for the dialog to show.
+       if ( warningConfig && warningConfig.messages && warningConfig.messages.main ) {
+               $mimetype.addClass( 'has-warning' );
+
+               $origMimetype.replaceWith( dialog.$element );
+
+               if ( warningMessages ) {
+                       loadMessage( $main, warningMessages.main );
+                       loadMessage( $header, warningMessages.header );
+                       loadMessage( $footer, warningMessages.footer );
+
+                       if ( warningLink ) {
+                               loadMessage( $info, warningMessages.info );
+                               $info.attr( 'href', warningLink );
+                       }
+               }
+
+               // Make OOUI open the dialog, it won't appear until the user
+               // hovers over the warning.
+               dialog.getPopup().toggle( true );
+
+               // Override toggle handler because we don't need it for this popup
+               // object at all. Sort of nasty, but it gets the job done.
+               dialog.getPopup().toggle = $.noop;
+       }
+}( mediaWiki, jQuery, OO ) );
diff --git a/resources/src/mediawiki/mediawiki.filewarning.less b/resources/src/mediawiki/mediawiki.filewarning.less
new file mode 100644 (file)
index 0000000..489ac42
--- /dev/null
@@ -0,0 +1,29 @@
+@import "mediawiki.ui/variables"
+
+.mediawiki-filewarning {
+       display: none;
+
+       .mediawiki-filewarning-header {
+               padding: 0;
+               font-weight: 600;
+       }
+
+       .mediawiki-filewarning-footer {
+               color: #888888;
+       }
+
+       .empty {
+               display: none;
+       }
+
+       .mediawiki-filewarning-anchor:hover & {
+               display: block;
+       }
+}
+
+.mime-type {
+       &.has-warning {
+               font-weight: bold;
+               color: @colorMediumSevere;
+       }
+}
diff --git a/resources/src/mediawiki/mediawiki.helplink.less b/resources/src/mediawiki/mediawiki.helplink.less
new file mode 100644 (file)
index 0000000..dd6bf74
--- /dev/null
@@ -0,0 +1,11 @@
+@import "mediawiki.mixins";
+
+#mw-indicator-mw-helplink a {
+       .background-image-svg('images/help.svg', 'images/help.png');
+       background-repeat: no-repeat;
+       background-position: left center;
+       padding-left: 28px;
+       display: inline-block;
+       height: 24px;
+       line-height: 24px;
+}
index 3ad2be5..22d3cbb 100644 (file)
@@ -19,7 +19,9 @@
 
        function humanSize( bytes ) {
                if ( !$.isNumeric( bytes ) || bytes === 0 ) { return bytes; }
-               var i = 0, units = [ '', ' kB', ' MB', ' GB', ' TB', ' PB' ];
+               var i = 0,
+                       units = [ '', ' kB', ' MB', ' GB', ' TB', ' PB' ];
+
                for ( ; bytes >= 1024; bytes /= 1024 ) { i++; }
                // Maintain one decimal for kB and above, but don't
                // add ".0" for bytes.
@@ -39,7 +41,8 @@
                 *  two properties, 'requires' and 'requiredBy'.
                 */
                getDependencyGraph: function () {
-                       var modules = inspect.getLoadedModules(), graph = {};
+                       var modules = inspect.getLoadedModules(),
+                               graph = {};
 
                        $.each( modules, function ( moduleIndex, moduleName ) {
                                var dependencies = mw.loader.moduleRegistry[moduleName].dependencies || [];
index 3eaa6d2..79939f6 100644 (file)
         * Returns a function suitable for use as a global, to construct strings from the message key (and optional replacements).
         * e.g.
         *
-        *       window.gM = mediaWiki.parser.getMessageFunction( options );
+        *       window.gM = mediaWiki.jqueryMsg.getMessageFunction( options );
         *       $( 'p#headline' ).html( gM( 'hello-user', username ) );
         *
         * Like the old gM() function this returns only strings, so it destroys any bindings. If you want to preserve bindings use the
         * the current selector. Bindings to passed-in jquery elements are preserved. Functions become click handlers for [$1 linktext] links.
         * e.g.
         *
-        *        $.fn.msg = mediaWiki.parser.getJqueryPlugin( options );
+        *        $.fn.msg = mediaWiki.jqueryMsg.getPlugin( options );
         *        var userlink = $( '<a>' ).click( function () { alert( "hello!!" ) } );
         *        $( 'p#headline' ).msg( 'hello-user', userlink );
         *
                 * @return {string|Array} string of '[key]' if message missing, simple string if possible, array of arrays if needs parsing
                 */
                getAst: function ( key ) {
-                       var cacheKey = [key, this.settings.onlyCurlyBraceTransform].join( ':' ), wikiText;
+                       var wikiText,
+                               cacheKey = [key, this.settings.onlyCurlyBraceTransform].join( ':' );
 
                        if ( this.astCache[ cacheKey ] === undefined ) {
                                wikiText = this.settings.messages.get( key );
                 * @return {Mixed} abstract syntax tree
                 */
                wikiTextToAst: function ( input ) {
-                       var pos, settings = this.settings, concat = Array.prototype.concat,
+                       var pos,
                                regularLiteral, regularLiteralWithoutBar, regularLiteralWithoutSpace, regularLiteralWithSquareBrackets,
                                doubleQuote, singleQuote, backslash, anyCharacter, asciiAlphabetLiteral,
                                escapedOrLiteralWithoutSpace, escapedOrLiteralWithoutBar, escapedOrRegularLiteral,
                                htmlAttributeEquals, openHtmlStartTag, optionalForwardSlash, openHtmlEndTag, closeHtmlTag,
                                openExtlink, closeExtlink, wikilinkPage, wikilinkContents, openWikilink, closeWikilink, templateName, pipe, colon,
                                templateContents, openTemplate, closeTemplate,
-                               nonWhitespaceExpression, paramExpression, expression, curlyBraceTransformExpression, result;
+                               nonWhitespaceExpression, paramExpression, expression, curlyBraceTransformExpression, result,
+                               settings = this.settings,
+                               concat = Array.prototype.concat;
 
                        // Indicates current position in input as we parse through it.
                        // Shared among all parsing functions below.
                        // Subset of allowed HTML markup.
                        // Most elements and many attributes allowed on the server are not supported yet.
                        function html() {
-                               var result = null, parsedOpenTagResult, parsedHtmlContents,
-                                       parsedCloseTagResult, wrappedAttributes, attributes,
-                                       startTagName, endTagName, startOpenTagPos, startCloseTagPos,
-                                       endOpenTagPos, endCloseTagPos;
+                               var parsedOpenTagResult, parsedHtmlContents, parsedCloseTagResult,
+                                       wrappedAttributes, attributes, startTagName, endTagName, startOpenTagPos,
+                                       startCloseTagPos, endOpenTagPos, endCloseTagPos,
+                                       result = null;
 
                                // Break into three sequence calls.  That should allow accurate reconstruction of the original HTML, and requiring an exact tag name match.
                                // 1. open through closeHtmlTag
                        page = nodes[0];
                        url = mw.util.getUrl( page );
 
-                       // [[Some Page]] or [[Namespace:Some Page]]
                        if ( nodes.length === 1 ) {
+                               // [[Some Page]] or [[Namespace:Some Page]]
                                anchor = page;
-                       }
-
-                       /*
-                        * [[Some Page|anchor text]] or
-                        * [[Namespace:Some Page|anchor]
-                        */
-                       else {
+                       } else {
+                               // [[Some Page|anchor text]] or [[Namespace:Some Page|anchor]]
                                anchor = nodes[1];
                        }
 
                 * @return {string} selected pluralized form according to current language
                 */
                plural: function ( nodes ) {
-                       var forms, firstChild, firstChildText,
-                               explicitPluralForms = {}, explicitPluralFormNumber, formIndex, form, count;
+                       var forms, firstChild, firstChildText, explicitPluralFormNumber, formIndex, form, count,
+                               explicitPluralForms = {};
 
                        count = parseFloat( this.language.convertNumber( nodes[0], true ) );
                        forms = nodes.slice( 1 );
index 98a2f6a..ee57c21 100644 (file)
                trackCallbacks = $.Callbacks( 'memory' ),
                trackQueue = [];
 
-       /**
-        * Log a message to window.console, if possible.
-        *
-        * Useful to force logging of some  errors that are otherwise hard to detect (i.e., this logs
-        * also in production mode). Gets console references in each invocation instead of caching the
-        * reference, so that debugging tools loaded later are supported (e.g. Firebug Lite in IE).
-        *
-        * @private
-        * @method log_
-        * @param {string} msg Text for the log entry.
-        * @param {Error} [e]
-        */
-       function log( msg, e ) {
-               var console = window.console;
-               if ( console && console.log ) {
-                       console.log( msg );
-                       // If we have an exception object, log it to the error channel to trigger a
-                       // proper stacktraces in browsers that support it. No fallback as we have no browsers
-                       // that don't support error(), but do support log().
-                       if ( e && console.error ) {
-                               console.error( String( e ), e );
-                       }
-               }
-       }
-
        /**
         * Create an object that can be read from or written to from methods that allow
         * interaction both with single and multiple properties at once.
                config: null,
 
                /**
-                * Empty object that plugins can be installed in.
+                * Empty object for third-party libraries, for cases where you don't
+                * want to add a new global, or the global is bad and needs containment
+                * or wrapping.
                 *
                 * @property
                 */
                 */
                loader: ( function () {
 
+                       /**
+                        * Fired via mw.track on various resource loading errors.
+                        *
+                        * @event resourceloader_exception
+                        * @param {Error|Mixed} e The error that was thrown. Almost always an Error
+                        *   object, but in theory module code could manually throw something else, and that
+                        *   might also end up here.
+                        * @param {string} [module] Name of the module which caused the error. Omitted if the
+                        *   error is not module-related or the module cannot be easily identified due to
+                        *   batched handling.
+                        * @param {string} source Source of the error. Possible values:
+                        *
+                        *   - style: stylesheet error (only affects old IE where a special style loading method
+                        *     is used)
+                        *   - load-callback: exception thrown by user callback
+                        *   - module-execute: exception thrown by module code
+                        *   - store-eval: could not evaluate module code cached in localStorage
+                        *   - store-localstorage-init: localStorage or JSON parse error in mw.loader.store.init
+                        *   - store-localstorage-json: JSON conversion error in mw.loader.store.set
+                        *   - store-localstorage-update: localStorage or JSON conversion error in mw.loader.store.update
+                        */
+
+                       /**
+                        * Fired via mw.track on resource loading error conditions.
+                        *
+                        * @event resourceloader_assert
+                        * @param {string} source Source of the error. Possible values:
+                        *
+                        *   - bug-T59567: failed to cache script due to an Opera function -> string conversion
+                        *     bug; see <https://phabricator.wikimedia.org/T59567> for details
+                        */
+
                        /**
                         * Mapping of registered modules.
                         *
                                return s;
                        }
 
-                       /**
-                        * Check whether given styles are safe to to a stylesheet.
-                        *
-                        * @private
-                        * @param {string} cssText
-                        * @return {boolean} False if a new one must be created.
-                        */
-                       function canExpandStylesheetWith( cssText ) {
-                               // Makes sure that cssText containing `@import`
-                               // rules will end up in a new stylesheet (as those only work when
-                               // placed at the start of a stylesheet; bug 35562).
-                               return cssText.indexOf( '@import' ) === -1;
-                       }
-
                        /**
                         * Add a bit of CSS text to the current browser page.
                         *
                                // Appending a stylesheet and waiting for the browser to repaint
                                // is fairly expensive, this reduces that (bug 45810)
                                if ( cssText ) {
-                                       // Be careful not to extend the buffer with css that needs a new stylesheet
-                                       if ( !cssBuffer || canExpandStylesheetWith( cssText ) ) {
+                                       // Be careful not to extend the buffer with css that needs a new stylesheet.
+                                       // cssText containing `@import` rules needs to go at the start of a buffer,
+                                       // since those only work when placed at the start of a stylesheet; bug 35562.
+                                       if ( !cssBuffer || cssText.slice( 0, '@import'.length ) !== '@import' ) {
                                                // Linebreak for somewhat distinguishable sections
                                                // (the rl-cachekey comment separating each)
                                                cssBuffer += '\n' + cssText;
                                        // (not some other style tag or even a `<meta>` or `<script>`).
                                        if ( $style.data( 'ResourceLoaderDynamicStyleTag' ) === true ) {
                                                // There's already a dynamic <style> tag present and
-                                               // canExpandStylesheetWith() gave a green light to append more to it.
+                                               // we are able to append more to it.
                                                styleEl = $style.get( 0 );
                                                // Support: IE6-10
                                                if ( styleEl.styleSheet ) {
                                                        try {
                                                                styleEl.styleSheet.cssText += cssText;
                                                        } catch ( e ) {
-                                                               log( 'Stylesheet error', e );
+                                                               mw.track( 'resourceloader.exception', { exception: e, source: 'stylesheet' } );
                                                        }
                                                } else {
                                                        styleEl.appendChild( document.createTextNode( cssText ) );
                         * @return {string}
                         */
                        function pad( a, b, c ) {
-                               return [
-                                       a < 10 ? '0' + a : a,
-                                       b < 10 ? '0' + b : b,
-                                       c < 10 ? '0' + c : c
-                               ].join( '' );
+                               return (
+                                       ( a < 10 ? '0' : '' ) + a +
+                                       ( b < 10 ? '0' : '' ) + b +
+                                       ( c < 10 ? '0' : '' ) + c
+                               );
                        }
 
                        /**
                         * order.
                         *
                         * @private
-                        * @param {string} module Module name or array of string module names
+                        * @param {string[]} module Array of string module names
                         * @return {Array} List of dependencies, including 'module'.
-                        * @throws {Error} If circular reference is detected
                         */
-                       function resolve( module ) {
-                               var m, resolved;
-
-                               // Allow calling with an array of module names
-                               if ( $.isArray( module ) ) {
-                                       resolved = [];
-                                       for ( m = 0; m < module.length; m += 1 ) {
-                                               sortDependencies( module[m], resolved );
-                                       }
-                                       return resolved;
-                               }
-
-                               if ( typeof module === 'string' ) {
-                                       resolved = [];
+                       function resolve( modules ) {
+                               var resolved = [];
+                               $.each( modules, function ( idx, module ) {
                                        sortDependencies( module, resolved );
-                                       return resolved;
-                               }
-
-                               throw new Error( 'Invalid module argument: ' + module );
+                               } );
+                               return resolved;
                        }
 
                        /**
-                        * Narrow down a list of module names to those matching a specific
-                        * state (see #registry for a list of valid states).
-                        *
-                        * One can also filter for 'unregistered', which will return the
-                        * modules names that don't have a registry entry.
+                        * Determine whether all dependencies are in state 'ready', which means we may
+                        * execute the module or job now.
                         *
                         * @private
-                        * @param {string|string[]} states Module states to filter by
-                        * @param {Array} [modules] List of module names to filter (optional, by default the
-                        * entire registry is used)
-                        * @return {Array} List of filtered module names
+                        * @param {Array} module Names of modules to be checked
+                        * @return {boolean} True if all modules are in state 'ready', false otherwise
                         */
-                       function filter( states, modules ) {
-                               var list, module, s, m;
-
-                               // Allow states to be given as a string
-                               if ( typeof states === 'string' ) {
-                                       states = [states];
-                               }
-                               // If called without a list of modules, build and use a list of all modules
-                               list = [];
-                               if ( modules === undefined ) {
-                                       modules = [];
-                                       for ( module in registry ) {
-                                               modules[modules.length] = module;
-                                       }
-                               }
-                               // Build a list of modules which are in one of the specified states
-                               for ( s = 0; s < states.length; s += 1 ) {
-                                       for ( m = 0; m < modules.length; m += 1 ) {
-                                               if ( !hasOwn.call( registry, modules[m] ) ) {
-                                                       // Module does not exist
-                                                       if ( states[s] === 'unregistered' ) {
-                                                               // OK, undefined
-                                                               list[list.length] = modules[m];
-                                                       }
-                                               } else {
-                                                       // Module exists, check state
-                                                       if ( registry[modules[m]].state === states[s] ) {
-                                                               // OK, correct state
-                                                               list[list.length] = modules[m];
-                                                       }
-                                               }
+                       function allReady( modules ) {
+                               var i;
+                               for ( i = 0; i < modules.length; i++ ) {
+                                       if ( mw.loader.getState( modules[i] ) !== 'ready' ) {
+                                               return false;
                                        }
                                }
-                               return list;
+                               return true;
                        }
 
                        /**
                         * execute the module or job now.
                         *
                         * @private
-                        * @param {Array} dependencies Dependencies (module names) to be checked.
-                        * @return {boolean} True if all dependencies are in state 'ready', false otherwise
+                        * @param {Array} modules Names of modules to be checked
+                        * @return {boolean} True if no modules are in state 'error' or 'missing', false otherwise
                         */
-                       function allReady( dependencies ) {
-                               return filter( 'ready', dependencies ).length === dependencies.length;
+                       function anyFailed( modules ) {
+                               var i, state;
+                               for ( i = 0; i < modules.length; i++ ) {
+                                       state = mw.loader.getState( modules[i] );
+                                       if ( state === 'error' || state === 'missing' ) {
+                                               return true;
+                                       }
+                               }
+                               return false;
                        }
 
                        /**
                        function handlePending( module ) {
                                var j, job, hasErrors, m, stateChange;
 
-                               if ( $.inArray( registry[module].state, ['error', 'missing'] ) !== -1 ) {
+                               if ( registry[module].state === 'error' || registry[module].state === 'missing' ) {
                                        // If the current module failed, mark all dependent modules also as failed.
                                        // Iterate until steady-state to propagate the error state upwards in the
                                        // dependency tree.
                                        do {
                                                stateChange = false;
                                                for ( m in registry ) {
-                                                       if ( $.inArray( registry[m].state, ['error', 'missing'] ) === -1 ) {
-                                                               if ( filter( ['error', 'missing'], registry[m].dependencies ).length ) {
+                                                       if ( registry[m].state !== 'error' && registry[m].state !== 'missing' ) {
+                                                               if ( anyFailed( registry[m].dependencies ) ) {
                                                                        registry[m].state = 'error';
                                                                        stateChange = true;
                                                                }
 
                                // Execute all jobs whose dependencies are either all satisfied or contain at least one failed module.
                                for ( j = 0; j < jobs.length; j += 1 ) {
-                                       hasErrors = filter( ['error', 'missing'], jobs[j].dependencies ).length > 0;
+                                       hasErrors = anyFailed( jobs[j].dependencies );
                                        if ( hasErrors || allReady( jobs[j].dependencies ) ) {
                                                // All dependencies satisfied, or some have errors
                                                job = jobs[j];
                                                } catch ( e ) {
                                                        // A user-defined callback raised an exception.
                                                        // Swallow it to protect our state machine!
-                                                       log( 'Exception thrown by user callback', e );
+                                                       mw.track( 'resourceloader.exception', { exception: e, module: module, source: 'load-callback' } );
                                                }
                                        }
                                }
                                        } catch ( e ) {
                                                // This needs to NOT use mw.log because these errors are common in production mode
                                                // and not in debug mode, such as when a symbol that should be global isn't exported
-                                               log( 'Exception thrown by ' + module, e );
                                                registry[module].state = 'error';
+                                               mw.track( 'resourceloader.exception', { exception: e, module: module, source: 'module-execute' } );
                                                handlePending( module );
                                        }
                                }
                         *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
                         */
                        function request( dependencies, ready, error, async ) {
-                               var n;
-
                                // Allow calling by single module name
                                if ( typeof dependencies === 'string' ) {
                                        dependencies = [dependencies];
                                // Add ready and error callbacks if they were given
                                if ( ready !== undefined || error !== undefined ) {
                                        jobs[jobs.length] = {
-                                               'dependencies': filter(
-                                                       ['registered', 'loading', 'loaded'],
-                                                       dependencies
-                                               ),
-                                               'ready': ready,
-                                               'error': error
+                                               dependencies: $.grep( dependencies, function ( module ) {
+                                                       var state = mw.loader.getState( module );
+                                                       return state === 'registered' || state === 'loaded' || state === 'loading';
+                                               ),
+                                               ready: ready,
+                                               error: error
                                        };
                                }
 
-                               // Queue up any dependencies that are registered
-                               dependencies = filter( ['registered'], dependencies );
-                               for ( n = 0; n < dependencies.length; n += 1 ) {
-                                       if ( $.inArray( dependencies[n], queue ) === -1 ) {
-                                               queue[queue.length] = dependencies[n];
+                               $.each( dependencies, function ( idx, module ) {
+                                       var state = mw.loader.getState( module );
+                                       if ( state === 'registered' && $.inArray( module, queue ) === -1 ) {
+                                               queue.push( module );
                                                if ( async ) {
-                                                       // Mark this module as async in the registry
-                                                       registry[dependencies[n]].async = true;
+                                                       registry[module].async = true;
                                                }
                                        }
-                               }
+                               } );
 
-                               // Work the queue
                                mw.loader.work();
                        }
 
                        function sortQuery( o ) {
-                               var sorted = {}, key, a = [];
+                               var key,
+                                       sorted = {},
+                                       a = [];
+
                                for ( key in o ) {
                                        if ( hasOwn.call( o, key ) ) {
                                                a.push( key );
                         * @private
                         */
                        function buildModulesString( moduleMap ) {
-                               var arr = [], p, prefix;
+                               var p, prefix,
+                                       arr = [];
+
                                for ( prefix in moduleMap ) {
                                        p = prefix === '' ? '' : prefix + '.';
                                        arr.push( p + moduleMap[prefix].join( ',' ) );
                         * @param {Array} modules Modules array
                         */
                        function resolveIndexedDependencies( modules ) {
-                               var i, iLen, j, jLen, module, dependency;
-
-                               // Expand indexed dependency names
-                               for ( i = 0, iLen = modules.length; i < iLen; i++ ) {
-                                       module = modules[i];
+                               $.each( modules, function ( idx, module ) {
                                        if ( module[2] ) {
-                                               for ( j = 0, jLen = module[2].length; j < jLen; j++ ) {
-                                                       dependency = module[2][j];
-                                                       if ( typeof dependency === 'number' ) {
-                                                               module[2][j] = modules[dependency][0];
-                                                       }
-                                               }
+                                               module[2] = $.map( module[2], function ( dep ) {
+                                                       return typeof dep === 'number' ? modules[dep][0] : dep;
+                                               } );
                                        }
-                               }
+                               } );
                        }
 
                        /* Public Members */
                                        };
                                        // Split module batch by source and by group.
                                        splits = {};
-                                       maxQueryLength = mw.config.get( 'wgResourceLoaderMaxQueryLength', -1 );
+                                       maxQueryLength = mw.config.get( 'wgResourceLoaderMaxQueryLength', 2000 );
 
                                        // Appends a list of modules from the queue to the batch
                                        for ( q = 0; q < queue.length; q += 1 ) {
                                                        // repopulate these modules to the cache.
                                                        // This means that at most one module will be useless (the one that had
                                                        // the error) instead of all of them.
-                                                       log( 'Error while evaluating data from mw.loader.store', err );
+                                                       mw.track( 'resourceloader.exception', { exception: err, source: 'store-eval' } );
                                                        origBatch = $.grep( origBatch, function ( module ) {
                                                                return registry[module].state === 'loading';
                                                        } );
                                                                        moduleMap = {};
                                                                        async = true;
                                                                        l = currReqBaseLength + 9;
+                                                                       mw.track( 'resourceloader.splitRequest', { maxQueryLength: maxQueryLength } );
                                                                }
                                                                if ( !hasOwn.call( moduleMap, prefix ) ) {
                                                                        moduleMap[prefix] = [];
                                 *     { <media>: [url, ..] }
                                 *
                                 * The reason css strings are not concatenated anymore is bug 31676. We now check
-                                * whether it's safe to extend the stylesheet (see #canExpandStylesheetWith).
+                                * whether it's safe to extend the stylesheet.
                                 *
                                 * @param {Object} [msgs] List of key/value pairs to be added to mw#messages.
                                 * @param {Object} [templates] List of key/value pairs to be added to mw#templates.
                                        if ( allReady( dependencies ) ) {
                                                // Run ready immediately
                                                deferred.resolve();
-                                       } else if ( filter( ['error', 'missing'], dependencies ).length ) {
+                                       } else if ( anyFailed( dependencies ) ) {
                                                // Execute error immediately if any dependencies have errors
                                                deferred.reject(
                                                        new Error( 'One or more dependencies failed to load' ),
                                 *  Defaults to `true` if loading a URL, `false` otherwise.
                                 */
                                load: function ( modules, type, async ) {
-                                       var filtered, m, module, l;
+                                       var filtered, l;
 
                                        // Validate input
                                        if ( typeof modules !== 'object' && typeof modules !== 'string' ) {
                                        // Undefined modules are acceptable here in load(), because load() takes
                                        // an array of unrelated modules, whereas the modules passed to
                                        // using() are related and must all be loaded.
-                                       for ( filtered = [], m = 0; m < modules.length; m += 1 ) {
-                                               if ( hasOwn.call( registry, modules[m] ) ) {
-                                                       module = registry[modules[m]];
-                                                       if ( $.inArray( module.state, ['error', 'missing'] ) === -1 ) {
-                                                               filtered[filtered.length] = modules[m];
-                                                       }
-                                               }
-                                       }
+                                       filtered = $.grep( modules, function ( module ) {
+                                               var state = mw.loader.getState( module );
+                                               return state !== null && state !== 'error' && state !== 'missing';
+                                       } );
 
                                        if ( filtered.length === 0 ) {
                                                return;
                                        }
                                        // Resolve entire dependency map
                                        filtered = resolve( filtered );
-                                       // If all modules are ready, nothing to be done
-                                       if ( allReady( filtered ) ) {
-                                               return;
-                                       }
-                                       // If any modules have errors: also quit.
-                                       if ( filter( ['error', 'missing'], filtered ).length ) {
+                                       // If all modules are ready, or if any modules have errors, nothing to be done.
+                                       if ( allReady( filtered ) || anyFailed( filtered ) ) {
                                                return;
                                        }
                                        // Since some modules are not yet ready, queue up a request.
                                                                return;
                                                        }
                                                } catch ( e ) {
-                                                       log( 'Storage error', e );
+                                                       mw.track( 'resourceloader.exception', { exception: e, source: 'store-localstorage-init' } );
                                                }
 
                                                if ( raw === undefined ) {
                                                                JSON.stringify( descriptor.messages ),
                                                                JSON.stringify( descriptor.templates )
                                                        ];
-                                                       // Attempted workaround for a possible Opera bug (bug 57567).
+                                                       // Attempted workaround for a possible Opera bug (bug T59567).
                                                        // This regex should never match under sane conditions.
                                                        if ( /^\s*\(/.test( args[1] ) ) {
                                                                args[1] = 'function' + args[1];
-                                                               log( 'Detected malformed function stringification (bug 57567)' );
+                                                               mw.track( 'resourceloader.assert', { source: 'bug-T59567' } );
                                                        }
                                                } catch ( e ) {
-                                                       log( 'Storage error', e );
+                                                       mw.track( 'resourceloader.exception', { exception: e, source: 'store-localstorage-json' } );
                                                        return;
                                                }
 
                                                                data = JSON.stringify( mw.loader.store );
                                                                localStorage.setItem( key, data );
                                                        } catch ( e ) {
-                                                               log( 'Storage error', e );
+                                                               mw.track( 'resourceloader.exception', { exception: e, source: 'store-localstorage-update' } );
                                                        }
                                                }
 
        // @deprecated since 1.23 Use $ or jQuery instead
        mw.log.deprecate( window, '$j', $, 'Use $ or jQuery instead.' );
 
+       /**
+        * Log a message to window.console, if possible.
+        *
+        * Useful to force logging of some  errors that are otherwise hard to detect (i.e., this logs
+        * also in production mode). Gets console references in each invocation instead of caching the
+        * reference, so that debugging tools loaded later are supported (e.g. Firebug Lite in IE).
+        *
+        * @private
+        * @method log_
+        * @param {string} topic Stream name passed by mw.track
+        * @param {Object} data Data passed by mw.track
+        * @param {Error} [data.exception]
+        * @param {string} data.source Error source
+        * @param {string} [data.module] Name of module which caused the error
+        */
+       function log( topic, data ) {
+               var msg,
+                       e = data.exception,
+                       source = data.source,
+                       module = data.module,
+                       console = window.console;
+
+               if ( console && console.log ) {
+                       msg = ( e ? 'Exception' : 'Error' ) + ' in ' + source;
+                       if ( module ) {
+                               msg += ' in module ' + module;
+                       }
+                       msg += ( e ? ':' : '.' );
+                       console.log( msg );
+
+                       // If we have an exception object, log it to the error channel to trigger a
+                       // proper stacktraces in browsers that support it. No fallback as we have no browsers
+                       // that don't support error(), but do support log().
+                       if ( e && console.error ) {
+                               console.error( String( e ), e );
+                       }
+               }
+       }
+
+       // subscribe to error streams
+       mw.trackSubscribe( 'resourceloader.exception', log );
+       mw.trackSubscribe( 'resourceloader.assert', log );
+
        // Attach to window and globally alias
        window.mw = window.mediaWiki = mw;
 }( jQuery ) );
index 7b7ccf3..f981b90 100644 (file)
@@ -12,7 +12,8 @@
                        // element (not the search form, as that would leave the buttons
                        // vertically between the input and the suggestions).
                        $searchRegion = $( '#simpleSearch, #searchInput' ).first(),
-                       $searchInput = $( '#searchInput' );
+                       $searchInput = $( '#searchInput' ),
+                       previousSearchText = $searchInput.val();
 
                // Compatibility map
                map = {
                        };
                }
 
+               /**
+                * Callback that's run when the user changes the search input text
+                * 'this' is the search input box (jQuery object)
+                * @ignore
+                */
+               function onBeforeUpdate() {
+                       var searchText = this.val();
+
+                       if ( searchText && searchText !== previousSearchText ) {
+                               mw.track( 'mediawiki.searchSuggest', {
+                                       action: 'session-start'
+                               } );
+                       }
+                       previousSearchText = searchText;
+               }
+
+               /**
+                * Callback that's run when suggestions have been updated either from the cache or the API
+                * 'this' is the search input box (jQuery object)
+                * @ignore
+                */
+               function onAfterUpdate() {
+                       var context = this.data( 'suggestionsContext' );
+
+                       mw.track( 'mediawiki.searchSuggest', {
+                               action: 'impression-results',
+                               numberOfResults: context.config.suggestions.length,
+                               // FIXME: when other types of search become available change this value accordingly
+                               // See the API call below (opensearch = prefix)
+                               resultSetType: 'prefix'
+                       } );
+               }
+
                // The function used to render the suggestions.
                function renderFunction( text, context ) {
                        if ( !resultRenderCache ) {
                                );
                }
 
+               // The function used when the user makes a selection
+               function selectFunction( $input ) {
+                       var context = $input.data( 'suggestionsContext' ),
+                               text = $input.val();
+
+                       mw.track( 'mediawiki.searchSuggest', {
+                               action: 'click-result',
+                               numberOfResults: context.config.suggestions.length,
+                               clickIndex: context.config.suggestions.indexOf( text ) + 1
+                       } );
+
+                       // allow the form to be submitted
+                       return true;
+               }
+
                function specialRenderFunction( query, context ) {
                        var $el = this;
 
                        return;
                }
 
-               // Special suggestions functionality for skin-provided search box
+               // Special suggestions functionality and tracking for skin-provided search box
                $searchInput.suggestions( {
+                       update: {
+                               before: onBeforeUpdate,
+                               after: onAfterUpdate
+                       },
+                       result: {
+                               render: renderFunction,
+                               select: selectFunction
+                       },
                        special: {
                                render: specialRenderFunction,
                                select: function ( $input ) {
diff --git a/resources/src/mediawiki/mediawiki.sectionAnchor.css b/resources/src/mediawiki/mediawiki.sectionAnchor.css
new file mode 100644 (file)
index 0000000..f8f0022
--- /dev/null
@@ -0,0 +1,3 @@
+.mw-headline-anchor {
+       display: none;
+}
diff --git a/resources/src/mediawiki/mediawiki.template.mustache.js b/resources/src/mediawiki/mediawiki.template.mustache.js
new file mode 100644 (file)
index 0000000..dcc3842
--- /dev/null
@@ -0,0 +1,14 @@
+/*global Mustache */
+( function ( mw, $ ) {
+       // Register mustache compiler
+       mw.template.registerCompiler( 'mustache', {
+               compile: function ( src ) {
+                       return {
+                               render: function ( data ) {
+                                       return $.parseHTML( Mustache.render( src, data ) );
+                               }
+                       };
+               }
+       } );
+
+}( mediaWiki, jQuery ) );
index c3ec3f3..817c856 100644 (file)
@@ -3,19 +3,9 @@
  * @singleton
  */
 ( function ( mw, $ ) {
-       var user, i,
+       var i,
                deferreds = {},
-               byteToHex = [],
-               // Extend the skeleton mw.user from mediawiki.js
-               // This is kind of ugly but we're stuck with this for b/c reasons
-               options = mw.user.options || new mw.Map(),
-               tokens = mw.user.tokens || new mw.Map();
-
-       // Maps for number -> hex string conversion (with padding)
-       // idea from: https://github.com/broofa/node-uuid/blob/master/uuid.js
-       for ( i = 0; i < 256; i++ ) {
-               byteToHex[i] = (i + 0x100).toString(16).substr(1);
-       }
+               byteToHex = [];
 
        /**
         * Get the current user's groups or rights
                return deferreds[info].promise();
        }
 
-       mw.user = user = {
-               options: options,
-               tokens: tokens,
+       // Map from numbers 0-255 to a hex string (with padding)
+       for ( i = 0; i < 256; i++ ) {
+               // Padding: Add a full byte (0x100, 256) and strip the extra character
+               byteToHex[i] = ( i + 256 ).toString( 16 ).slice( 1 );
+       }
+
+       // mw.user with the properties options and tokens gets defined in mediawiki.js.
+       $.extend( mw.user, {
 
                /**
-                * Generate a random user session ID
+                * Generate a random user session ID.
+                *
                 * This information would potentially be stored in a cookie to identify a user during a
-                * session or series of sessions. Its uniqueness should
-                * not be depended on unless the browser supports the crypto API.
+                * session or series of sessions. Its uniqueness should not be depended on unless the
+                * browser supports the crypto API.
                 *
                 * Known problems with Math.random():
                 * Using the Math.random function we have seen sets
-                * with 1% of non uniques among 200.000 values with Safari providing most of these.
+                * with 1% of non uniques among 200,000 values with Safari providing most of these.
                 * Given the prevalence of Safari in mobile the percentage of duplicates in
                 * mobile usages of this code is probably higher.
                 *
                 * Rationale:
                 * We need about 64 bits to make sure that probability of collision
                 * on 500 million (5*10^8) is <= 1%
-                * See: https://en.wikipedia.org/wiki/Birthday_problem#Probability_table
+                * See https://en.wikipedia.org/wiki/Birthday_problem#Probability_table
                 *
                 * @return {string} 64 bit integer in hex format, padded
                 */
                generateRandomSessionId: function () {
                        /*jshint bitwise:false */
-                       var rnds, i, r, cryptoObj, hexRnds = new Array( 8 );
-                       cryptoObj = window.crypto || window.msCrypto; // for IE 11
+                       var rnds, i, r,
+                               hexRnds = new Array( 8 ),
+                               // Support: IE 11
+                               crypto = window.crypto || window.msCrypto;
 
-                       if ( cryptoObj ) {
-                               // We fill an array with 8 random values, each of which is 8 bits.
-                               // note that rnds is an array-like object not a true array
+                       // Based on https://github.com/broofa/node-uuid/blob/bfd9f96127/uuid.js
+                       if ( crypto && crypto.getRandomValues ) {
+                               // Fill an array with 8 random values, each of which is 8 bits.
+                               // Note that Uint8Array is array-like but does not implement Array.
                                rnds = new Uint8Array( 8 );
-                               cryptoObj.getRandomValues( rnds );
+                               crypto.getRandomValues( rnds );
                        } else {
                                rnds = new Array( 8 );
-                               // From: https://github.com/broofa/node-uuid/blob/master/uuid.js
-                               for ( i = 0, r; i < 8; i++ ) {
-                                       if ( ( i & 0x03 ) === 0 ) {
+                               for ( i = 0; i < 8; i++ ) {
+                                       if ( ( i & 3 ) === 0 ) {
                                                r = Math.random() * 0x100000000;
                                        }
-                                       rnds[i] = r >>> ( ( i & 0x03 ) << 3 ) & 0xff;
+                                       rnds[i] = r >>> ( ( i & 3 ) << 3 ) & 255;
                                }
                        }
-                       // convert to hex using byteToHex that already contains padding
-                       for ( i = 0; i < rnds.length; i++ ) {
+                       // Convert from number to hex
+                       for ( i = 0; i < 8; i++ ) {
                                hexRnds[i] = byteToHex[rnds[i]];
                        }
 
-                       // concatenation of two random integers with entrophy n and m
+                       // Concatenation of two random integers with entrophy n and m
                        // returns a string with entrophy n+m if those strings are independent
                        return hexRnds.join( '' );
                },
                 */
                getRegistration: function () {
                        var registration = mw.config.get( 'wgUserRegistration' );
-                       if ( user.isAnon() ) {
+                       if ( mw.user.isAnon() ) {
                                return false;
                        }
                        if ( registration === null ) {
                 * @return {boolean}
                 */
                isAnon: function () {
-                       return user.getName() === null;
+                       return mw.user.getName() === null;
                },
 
                /**
                sessionId: function () {
                        var sessionId = $.cookie( 'mediaWiki.user.sessionId' );
                        if ( sessionId === undefined || sessionId === null ) {
-                               sessionId = user.generateRandomSessionId();
+                               sessionId = mw.user.generateRandomSessionId();
                                $.cookie( 'mediaWiki.user.sessionId', sessionId, { expires: null, path: '/' } );
                        }
                        return sessionId;
                 * @return {string} User name or random session ID
                 */
                id: function () {
-                       return user.getName() || user.sessionId();
+                       return mw.user.getName() || mw.user.sessionId();
                },
 
                /**
                getRights: function ( callback ) {
                        return getUserInfo( 'rights' ).done( callback );
                }
-       };
+       } );
 
 }( mediaWiki, jQuery ) );
index d202270..6723e5f 100644 (file)
 
                        // HTML5 defines a string as valid e-mail address if it matches
                        // the ABNF:
-                       //      1 * ( atext / "." ) "@" ldh-str 1*( "." ldh-str )
+                       //     1 * ( atext / "." ) "@" ldh-str 1*( "." ldh-str )
                        // With:
                        // - atext   : defined in RFC 5322 section 3.2.3
                        // - ldh-str : defined in RFC 1034 section 3.5
                        rfc5322Atext = 'a-z0-9!#$%&\'*+\\-/=?^_`{|}~';
 
                        // Next define the RFC 1034 'ldh-str'
-                       //      <domain> ::= <subdomain> | " "
-                       //      <subdomain> ::= <label> | <subdomain> "." <label>
-                       //      <label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
-                       //      <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
-                       //      <let-dig-hyp> ::= <let-dig> | "-"
-                       //      <let-dig> ::= <letter> | <digit>
+                       //     <domain> ::= <subdomain> | " "
+                       //     <subdomain> ::= <label> | <subdomain> "." <label>
+                       //     <label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
+                       //     <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
+                       //     <let-dig-hyp> ::= <let-dig> | "-"
+                       //     <let-dig> ::= <letter> | <digit>
                        rfc1034LdhStr = 'a-z0-9\\-';
 
                        html5EmailRegexp = new RegExp(
 
                        return address.search( new RegExp( '^' + RE_IPV6_ADD + block + '$' ) ) !== -1
                                && address.search( /::/ ) !== -1 && address.search( /::.*::/ ) === -1;
+               },
+
+               /**
+                * Check whether a string is an IP address
+                *
+                * @since 1.25
+                * @param {string} address String to check
+                * @param {boolean} allowBlock True if a block of IPs should be allowed
+                * @return {boolean}
+                */
+               isIPAddress: function ( address, allowBlock ) {
+                       return util.isIPv4Address( address, allowBlock ) ||
+                               util.isIPv6Address( address, allowBlock );
                }
        };
 
diff --git a/resources/src/mediawiki/templates/dialog.html b/resources/src/mediawiki/templates/dialog.html
deleted file mode 100644 (file)
index e116f3e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<div style="position: relative; display: block;" class="ui-dialog-content ui-widget-content">
-       <div class="feedback-mode feedback-form">
-               <small><p></p></small>
-               <div class="subject" style="margin-top: 1em;">
-                       <span></span><br>
-                       <input type="text" class="feedback-subject" name="subject" maxlength="60"
-                               style="width: 100%; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;">
-               </div>
-               <div class="message" style="margin-top: 0.4em;">
-                       <span></span><br>
-                       <textarea name="message" class="feedback-message" rows="5" cols="60"></textarea>
-               </div>
-       </div>
-       <div class="feedback-mode feedback-bugs">
-               <p></p>
-       </div>
-       <div class="feedback-mode feedback-submitting" style="text-align: center; margin: 3em 0;">
-               <span></span><br>
-               <span class="feedback-spinner"></span>
-       </div>
-       <div class="feedback-mode feedback-thanks" style="text-align: center; margin:1em"></div>
-       <div class="feedback-mode feedback-error" style="position: relative;">
-               <div class="feedback-error-msg" style=" color:#990000; margin-top:0.4em;"></div>
-       </div>
-</div>
index 4ed28a8..def23da 100644 (file)
@@ -44,10 +44,12 @@ $wgAutoloadClasses += array(
        'ResourceLoaderTestCase' => "$testDir/phpunit/ResourceLoaderTestCase.php",
        'ResourceLoaderTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php",
        'ResourceLoaderFileModuleTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php",
-       'ResourceLoaderWikiModuleTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php",
        'TestUser' => "$testDir/phpunit/includes/TestUser.php",
        'LessFileCompilationTest' => "$testDir/phpunit/LessFileCompilationTest.php",
 
+       # tests/phpunit/includes
+       'TestingAccessWrapper' => "$testDir/phpunit/includes/TestingAccessWrapper.php",
+
        # tests/phpunit/includes/api
        'ApiFormatTestBase' => "$testDir/phpunit/includes/api/format/ApiFormatTestBase.php",
        'ApiQueryTestBase' => "$testDir/phpunit/includes/api/query/ApiQueryTestBase.php",
@@ -80,9 +82,13 @@ $wgAutoloadClasses += array(
        # tests/phpunit/includes/diff
        'FakeDiffOp' => "$testDir/phpunit/includes/diff/FakeDiffOp.php",
 
-       # tests/phpunit/includes/passwords
+       # tests/phpunit/includes/password
        'PasswordTestCase' => "$testDir/phpunit/includes/password/PasswordTestCase.php",
 
+       # tests/phpunit/includes/resourceloader
+       'ResourceLoaderImageModuleTest' => "$testDir/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php",
+       'ResourceLoaderImageModuleTestable' => "$testDir/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php",
+
        # tests/phpunit/languages
        'LanguageClassesTestCase' => "$testDir/phpunit/languages/LanguageClassesTestCase.php",
 
diff --git a/tests/browser/environment_variables b/tests/browser/environment_variables
deleted file mode 100644 (file)
index 25c4577..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-export MEDIAWIKI_URL=http://localhost/wiki/
-export MEDIAWIKI_API_URL=http://localhost/w/api.php
-export MEDIAWIKI_USER=Selenium_user
-export MEDIAWIKI_PASSWORD=Selenium_password
-export BROWSER=firefox
diff --git a/tests/browser/environments.yml b/tests/browser/environments.yml
new file mode 100644 (file)
index 0000000..8f8381e
--- /dev/null
@@ -0,0 +1,35 @@
+# Customize this configuration as necessary to provide defaults for various
+# test environments.
+#
+# The set of defaults to use is determined by the MEDIAWIKI_ENVIRONMENT
+# environment variable.
+#
+#   export MEDIAWIKI_ENVIRONMENT=mw-vagrant-host
+#   bundle exec cucumber
+#
+# Additional variables set by the environment will override the corresponding
+# defaults defined here.
+#
+#   export MEDIAWIKI_ENVIRONMENT=mw-vagrant-host
+#   export MEDIAWIKI_USER=Selenium_user2
+#   bundle exec cucumber
+#
+mw-vagrant-host:
+  mediawiki_url: http://127.0.0.1:8080/wiki/
+  mediawiki_user: Selenium_user
+  mediawiki_password: vagrant
+
+mw-vagrant-guest:
+  mediawiki_url: http://127.0.0.1/wiki/
+  mediawiki_user: Selenium_user
+  mediawiki_password: vagrant
+
+beta:
+  mediawiki_url: http://en.wikipedia.beta.wmflabs.org/wiki/
+  mediawiki_user: Selenium_user
+  # mediawiki_password: SET THIS IN THE ENVIRONMENT!
+
+test2:
+  mediawiki_url: http://test2.wikipedia.org/wiki/
+  mediawiki_user: Selenium_user
+  # mediawiki_password: SET THIS IN THE ENVIRONMENT!
index 0bd36ed..35a6675 100644 (file)
@@ -1,14 +1,3 @@
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
 @chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs
 Feature: File
 
index c34d23d..2cb6356 100644 (file)
@@ -1,14 +1,3 @@
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
 @chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs
 Feature: Log in
 
index 9e3abfd..9fed9cf 100644 (file)
@@ -1,14 +1,3 @@
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
 @chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @login @phantomjs
 Feature: Preferences
 
index 7fa2984..03bff66 100644 (file)
@@ -10,9 +10,9 @@
 # https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
 #
 Given(/^I go to Create account page at (.+)$/) do |path|
-  visit(CreateAccountPage, :using_params => {:page_title => path})
+  visit(CreateAccountPage, using_params: { page_title: path })
 end
 
 Then(/^form has Create account button$/) do
-  on(CreateAccountPage).create_account_element.should exist
+  expect(on(CreateAccountPage).create_account_element).to exist
 end
index ba41f7f..504d345 100644 (file)
@@ -1,28 +1,26 @@
 Given(/^I go to the "(.+)" page with content "(.+)"$/) do |page_title, page_content|
   @wikitext = page_content
-  on(APIPage).create page_title, page_content
+  api.create_page page_title, page_content
   step "I am on the #{page_title} page"
 end
 
 Given(/^I am on the (.+) page$/) do |article|
   article = article.gsub(/ /, '_')
-  visit(ZtargetPage, :using_params => {:article_name => article})
+  visit(ZtargetPage, using_params: { article_name: article })
 end
 
 Given(/^I create page "(.*?)" with content "(.*?)"$/) do |page_title, page_content|
-  on(APIPage).create page_title, page_content
+  api.create_page page_title, page_content
 end
 
-
 When(/^I click the Link Target link$/) do
   on(ZtargetPage).link_target_page_link
 end
 
 Then(/^I should be on the Link Target Test Page$/) do
-  @browser.url.should match /Link_Target_Test_Page/
+  expect(@browser.url).to match /Link_Target_Test_Page/
 end
 
 Then(/^the page content should contain "(.*?)"$/) do |content|
-  on(ZtargetPage).page_content.should match content
+  expect(on(ZtargetPage).page_content).to match content
 end
-
index 5ab02be..0e0aeb1 100644 (file)
@@ -19,6 +19,5 @@ When(/^I save the edit$/) do
 end
 
 Then(/^the edited page content should contain "(.*?)"$/) do |content|
-  on(MainPage).page_content.should match(content + @random_string)
+  expect(on(MainPage).page_content).to match(content + @random_string)
 end
-
index a2ed1bf..a80ca50 100644 (file)
@@ -10,9 +10,9 @@
 # https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
 #
 Given(/^I am at file that does not exist$/) do
-  visit(FileDoesNotExistPage, using_params: {page_name: @random_string})
+  visit(FileDoesNotExistPage, using_params: { page_name: @random_string })
 end
 
 Then(/^page should show that no such file exists$/) do
-  on(FileDoesNotExistPage).file_does_not_exist_message_element.should be_visible
+  expect(on(FileDoesNotExistPage).file_does_not_exist_message_element).to be_visible
 end
index b654b2d..bff5bdd 100644 (file)
@@ -14,52 +14,52 @@ Given(/^I am at Log in page$/) do
 end
 
 When(/^I log in with incorrect password$/) do
-  on(LoginPage).login_with(ENV["MEDIAWIKI_USER"], "incorrect password", false)
+  on(LoginPage).login_with(user, 'incorrect password', false)
 end
 
 When(/^I log in with incorrect username$/) do
-  on(LoginPage).login_with("incorrect username", ENV["MEDIAWIKI_PASSWORD"], false)
+  on(LoginPage).login_with('incorrect username', password, false)
 end
 
 When(/^I log in without entering credentials$/) do
-  on(LoginPage).login_with("", "", false)
+  on(LoginPage).login_with('', '', false)
 end
 
 When(/^I log in without entering password$/) do
-  on(LoginPage).login_with(ENV["MEDIAWIKI_USER"], "", false)
+  on(LoginPage).login_with(user, '', false)
 end
 
 Then(/^error box should be visible$/) do
-  on(LoginErrorPage).error_box_element.should be_visible
+  expect(on(LoginErrorPage).error_box_element).to be_visible
 end
 
 Then(/^error box should not be visible$/) do
-  on(LoginErrorPage).error_box_element.should_not be_visible
+  expect(on(LoginErrorPage).error_box_element).not_to be_visible
 end
 
 Then(/^feedback should be (.+)$/) do |feedback|
   on(LoginPage) do |page|
     page.feedback_element.when_present.click
-    page.feedback.should match Regexp.escape(feedback)
+    expect(page.feedback).to match Regexp.escape(feedback)
   end
 end
 
 Then(/^Log in element should be there$/) do
-  on(LoginPage).login_element.should exist
+  expect(on(LoginPage).login_element).to exist
 end
 
 Then(/^main page should open$/) do
-  @browser.url.should == on(MainPage).class.url
+  expect(@browser.url).to eq on(MainPage).class.url
 end
 
 Then(/^Password element should be there$/) do
-  on(LoginPage).password_element.should exist
+  expect(on(LoginPage).password_element).to exist
 end
 
 Then(/^there should be a link to (.+)$/) do |text|
-  on(LoginPage).username_displayed_element.when_present.text.should == text
+  expect(on(LoginPage).username_displayed_element.when_present.text).to eq text
 end
 
 Then(/^Username element should be there$/) do
-  on(LoginPage).username_element.should exist
+  expect(on(LoginPage).username_element).to exist
 end
index c76fd2b..7f588c0 100644 (file)
@@ -3,45 +3,45 @@ Given(/^I open the main wiki URL$/) do
 end
 
 Then(/^I should see a link for View History$/) do
-  on(MainPage).view_history_link_element.should be_visible
+  expect(on(MainPage).view_history_link_element).to be_visible
 end
 
 Then(/^I should see a link for Edit$/) do
-  on(MainPage).edit_link_element.should be_visible
+  expect(on(MainPage).edit_link_element).to be_visible
 end
 
 Then(/^I should see a link for Recent changes$/) do
-  on(MainPage).recent_changes_link_element.should be_visible
+  expect(on(MainPage).recent_changes_link_element).to be_visible
 end
 
 Then(/^I should see a link for Random page$/) do
-  on(MainPage).random_page_link_element.should be_visible
+  expect(on(MainPage).random_page_link_element).to be_visible
 end
 
 Then(/^I should see a link for Help$/) do
-  on(MainPage).help_link_element.should be_visible
+  expect(on(MainPage).help_link_element).to be_visible
 end
 
 Then(/^I should see a link for What links here$/) do
-  on(MainPage).what_links_here_link_element.should be_visible
+  expect(on(MainPage).what_links_here_link_element).to be_visible
 end
 
 Then(/^I should see a link for Related changes$/) do
-  on(MainPage).related_changes_link_element.should be_visible
+  expect(on(MainPage).related_changes_link_element).to be_visible
 end
 
 Then(/^I should see a link for Special pages$/) do
-  on(MainPage).special_pages_link_element.should be_visible
+  expect(on(MainPage).special_pages_link_element).to be_visible
 end
 
 Then(/^I should see a link for Printable version$/) do
-  on(MainPage).printable_version_link_element.should be_visible
+  expect(on(MainPage).printable_version_link_element).to be_visible
 end
 
 Then(/^I should see a link for Permanent link$/) do
-  on(MainPage).permanent_link_link_element.should be_visible
+  expect(on(MainPage).permanent_link_link_element).to be_visible
 end
 
 Then(/^I should see a link for Page information$/) do
-  on(MainPage).page_information_link_element.should be_visible
+  expect(on(MainPage).page_information_link_element).to be_visible
 end
index 0046af6..133eec3 100644 (file)
@@ -18,68 +18,66 @@ When(/^I navigate to Preferences$/) do
 end
 
 Then(/^I can click Save$/) do
-  on(PreferencesPage).save_button_element.should exist
+  expect(on(PreferencesPage).save_button_element).to exist
 end
 
 Then(/^I can restore default settings$/) do
-  on(PreferencesAppearancePage).restore_default_link_element.should exist
+  expect(on(PreferencesAppearancePage).restore_default_link_element).to exist
 end
 
 Then(/^I can see local time$/) do
-  on(PreferencesAppearancePage).local_time_span_element.should exist
+  expect(on(PreferencesAppearancePage).local_time_span_element).to exist
 end
 
 Then(/^I can see time offset section$/) do
-  on(PreferencesAppearancePage).time_offset_table_element.should be_visible
+  expect(on(PreferencesAppearancePage).time_offset_table_element).to be_visible
 end
 
 Then(/^I can select date format$/) do
   on(PreferencesAppearancePage) do |page|
-    page.no_preference_radio_element.should exist
-    page.mo_day_year_radio_element.should exist
-    page.day_mo_year_radio_element.should exist
-    page.year_mo_day_radio_element.should exist
-    page.iso_8601_radio_element.should exist
+    expect(page.no_preference_radio_element).to exist
+    expect(page.mo_day_year_radio_element).to exist
+    expect(page.day_mo_year_radio_element).to exist
+    expect(page.year_mo_day_radio_element).to exist
+    expect(page.iso_8601_radio_element).to exist
   end
 end
 
 Then(/^I can select image size$/) do
-  on(PreferencesAppearancePage).size_select_element.should exist
+  expect(on(PreferencesAppearancePage).size_select_element).to exist
 end
 
 Then(/^I can select my time zone$/) do
   on(PreferencesAppearancePage) do |page|
-    page.time_offset_select_element.should exist
-    page.other_offset_element.should exist
+    expect(page.time_offset_select_element).to exist
+    expect(page.other_offset_element).to exist
   end
 end
 
 Then(/^I can select skins$/) do
   on(PreferencesAppearancePage) do |page|
-    page.cologne_blue_element.should exist
-    page.modern_element.should exist
-    page.monobook_element.should exist
-    page.vector_element.should exist
+    expect(page.cologne_blue_element).to exist
+    expect(page.modern_element).to exist
+    expect(page.monobook_element).to exist
+    expect(page.vector_element).to exist
   end
 end
 
 Then(/^I can select Threshold for stub link$/) do
-  on(PreferencesAppearancePage).threshold_select_element.should exist
+  expect(on(PreferencesAppearancePage).threshold_select_element).to exist
 end
 
 Then(/^I can select thumbnail size$/) do
-  on(PreferencesAppearancePage).thumb_select_element.should exist
+  expect(on(PreferencesAppearancePage).thumb_select_element).to exist
 end
 
 Then(/^I can select underline preferences$/) do
-  on(PreferencesAppearancePage).underline_select_element.should exist
+  expect(on(PreferencesAppearancePage).underline_select_element).to exist
 end
 
 Then(/^I have advanced options checkboxes$/) do
   on(PreferencesAppearancePage) do |page|
-    page.hidden_categories_check_element.should exist
-    page.auto_number_check_element.should exist
+    expect(page.hidden_categories_check_element).to exist
+    expect(page.auto_number_check_element).to exist
   end
 end
-
-
index ad29a74..0a98e88 100644 (file)
@@ -14,41 +14,41 @@ When(/^I click Editing$/) do
 end
 
 Then(/^I can select edit area font style$/) do
-  on(PreferencesEditingPage).edit_area_font_style_select_element.when_present.should exist
+  expect(on(PreferencesEditingPage).edit_area_font_style_select_element.when_present).to exist
 end
 
 Then(/^I can select live preview$/) do
-  on(PreferencesEditingPage).live_preview_check_element.when_present.should exist
+  expect(on(PreferencesEditingPage).live_preview_check_element.when_present).to exist
 end
 
 Then(/^I can select section editing by double clicking$/) do
-  on(PreferencesEditingPage).edit_section_double_click_check_element.when_present.should exist
+  expect(on(PreferencesEditingPage).edit_section_double_click_check_element.when_present).to exist
 end
 
 Then(/^I can select section editing by right clicking$/) do
-  on(PreferencesEditingPage).edit_section_right_click_check_element.when_present.should exist
+  expect(on(PreferencesEditingPage).edit_section_right_click_check_element.when_present).to exist
 end
 
 Then(/^I can select section editing via edit links$/) do
-  on(PreferencesEditingPage).edit_section_edit_link_element.when_present.should exist
+  expect(on(PreferencesEditingPage).edit_section_edit_link_element.when_present).to exist
 end
 
 Then(/^I can select show edit toolbar$/) do
-  on(PreferencesEditingPage).show_edit_toolbar_check_element.when_present.should exist
+  expect(on(PreferencesEditingPage).show_edit_toolbar_check_element.when_present).to exist
 end
 
 Then(/^I can select show preview before edit box$/) do
-  on(PreferencesEditingPage).preview_on_top_check_element.when_present.should exist
+  expect(on(PreferencesEditingPage).preview_on_top_check_element.when_present).to exist
 end
 
 Then(/^I can select show preview on first edit$/) do
-  on(PreferencesEditingPage).preview_on_first_check_element.when_present.should exist
+  expect(on(PreferencesEditingPage).preview_on_first_check_element.when_present).to exist
 end
 
 Then(/^I can select to prompt me when entering a blank edit summary$/) do
-  on(PreferencesEditingPage).forced_edit_summary_check_element.when_present.should exist
+  expect(on(PreferencesEditingPage).forced_edit_summary_check_element.when_present).to exist
 end
 
 Then(/^I can select to warn me when I leave an edit page with unsaved changes$/) do
-  on(PreferencesEditingPage).unsaved_changes_check_element.when_present.should exist
+  expect(on(PreferencesEditingPage).unsaved_changes_check_element.when_present).to exist
 end
index 529af66..9c65db8 100644 (file)
@@ -15,29 +15,28 @@ end
 
 Then(/^I can change my gender$/) do
   on(PreferencesUserProfilePage) do |page|
-    page.gender_undefined_radio_element.should exist
-    page.gender_male_radio_element.should exist
-    page.gender_female_radio_element.should exist
+    expect(page.gender_undefined_radio_element).to exist
+    expect(page.gender_male_radio_element).to exist
+    expect(page.gender_female_radio_element).to exist
   end
 end
 
 Then(/^I can change my language$/) do
-  on(PreferencesUserProfilePage).lang_select_element.should exist
+  expect(on(PreferencesUserProfilePage).lang_select_element).to exist
 end
 
 Then(/^I can change my signature$/) do
-  on(PreferencesUserProfilePage).signature_field_element.should exist
+  expect(on(PreferencesUserProfilePage).signature_field_element).to exist
 end
 
 Then(/^I can see my Basic informations$/) do
-  on(PreferencesUserProfilePage).basic_info_table_element.should exist
+  expect(on(PreferencesUserProfilePage).basic_info_table_element).to exist
 end
 
 Then(/^I can see my email$/) do
-  on(PreferencesUserProfilePage).email_table_element.should exist
+  expect(on(PreferencesUserProfilePage).email_table_element).to exist
 end
 
 Then(/^I can see my signature$/) do
-  on(PreferencesUserProfilePage).signature_table_element.should exist
+  expect(on(PreferencesUserProfilePage).signature_table_element).to exist
 end
-
index 1ecc008..d9b9381 100644 (file)
@@ -3,6 +3,5 @@ When(/^I click View History$/) do
 end
 
 Then(/^I should see a link to a previous version of the page$/) do
-  on(ViewHistoryPage).old_version_link_element.should be_visible
+  expect(on(ViewHistoryPage).old_version_link_element).to be_visible
 end
-
index 7c12236..5eff4ce 100644 (file)
@@ -1,2 +1,4 @@
-require "mediawiki_api"
-require "mediawiki_selenium"
+require 'mediawiki_selenium'
+
+require 'mediawiki_selenium/support'
+require 'mediawiki_selenium/step_definitions'
diff --git a/tests/browser/features/support/modules/url_module.rb b/tests/browser/features/support/modules/url_module.rb
deleted file mode 100644 (file)
index 6c329e8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-module URL
-  def self.url(name)
-    if ENV["MEDIAWIKI_URL"]
-      mediawiki_url = ENV["MEDIAWIKI_URL"]
-    else
-      mediawiki_url = "http://127.0.0.1:80/w/index.php"
-    end
-    "#{mediawiki_url}#{name}"
-  end
-end
index 380bccb..98b893a 100644 (file)
@@ -12,8 +12,7 @@
 class CreateAccountPage
   include PageObject
 
-  include URL
-  page_url URL.url("<%=params[:page_title]%>")
+  page_url '<%=params[:page_title]%>'
 
-  button(:create_account, id: "wpCreateaccount")
+  button(:create_account, id: 'wpCreateaccount')
 end
index b619c34..b0f6bff 100644 (file)
@@ -1,8 +1,8 @@
 class EditPage
   include PageObject
 
-  text_area(:edit_page_content, id: "wpTextbox1")
-  button(:preview_button, id: "wpPreview")
-  button(:show_changes_button, id: "wpDiff")
-  button(:save_button, id: "wpSave")
-end
\ No newline at end of file
+  text_area(:edit_page_content, id: 'wpTextbox1')
+  button(:preview_button, id: 'wpPreview')
+  button(:show_changes_button, id: 'wpDiff')
+  button(:save_button, id: 'wpSave')
+end
index c8491f3..90762d2 100644 (file)
@@ -12,8 +12,7 @@
 class FileDoesNotExistPage
   include PageObject
 
-  include URL
-  page_url URL.url("File:<%=params[:page_name]%>")
+  page_url 'File:<%=params[:page_name]%>'
 
-  div(:file_does_not_exist_message, id: "mw-imagepage-nofile")
+  div(:file_does_not_exist_message, id: 'mw-imagepage-nofile')
 end
index 4fc9ca7..9a1805f 100644 (file)
@@ -1,5 +1,5 @@
 class LoginErrorPage
   include PageObject
 
-  div(:error_box, class: "errorbox")
-end
\ No newline at end of file
+  div(:error_box, class: 'errorbox')
+end
index 7d96c2b..6d76b01 100644 (file)
@@ -1,19 +1,18 @@
 class MainPage
   include PageObject
 
-  include URL
-  page_url URL.url("")
+  page_url ''
 
   a(:edit_link, href: /action=edit/)
-  li(:help_link, id: "n-help")
-  div(:page_content, id: "content")
-  li(:page_information_link, id: "t-info")
-  li(:permanent_link_link, id: "t-permalink")
+  li(:help_link, id: 'n-help')
+  div(:page_content, id: 'content')
+  li(:page_information_link, id: 't-info')
+  li(:permanent_link_link, id: 't-permalink')
   a(:printable_version_link, href: /printable=yes/)
-  li(:random_page_link, id: "n-randompage")
-  li(:recent_changes_link, id: "n-recentchanges")
-  li(:related_changes_link, id: "t-recentchangeslinked")
-  li(:special_pages_link, id: "t-specialpages")
+  li(:random_page_link, id: 'n-randompage')
+  li(:recent_changes_link, id: 'n-recentchanges')
+  li(:related_changes_link, id: 't-recentchangeslinked')
+  li(:special_pages_link, id: 't-specialpages')
   a(:view_history_link, href: /action=history/)
-  li(:what_links_here_link, id: "t-whatlinkshere")
-end
\ No newline at end of file
+  li(:what_links_here_link, id: 't-whatlinkshere')
+end
index c24e386..83c3952 100644 (file)
 class PreferencesAppearancePage
   include PageObject
 
-  include URL
-  page_url URL.url("Special:Preferences#mw-prefsection-rendering")
+  page_url 'Special:Preferences#mw-prefsection-rendering'
 
-  checkbox(:auto_number_check, id: "mw-input-wpnumberheadings")
-  radio_button(:cologne_blue, id: "mw-input-wpskin-cologneblue")
-  radio_button(:day_mo_year_radio, id: "mw-input-wpdate-dmy")
-  checkbox(:dont_show_aft_check, id: "mw-input-wparticlefeedback-disable")
-  checkbox(:exclude_from_experiments_check, id: "mw-input-wpvector-noexperiments")
-  checkbox(:hidden_categories_check, id: "mw-input-wpshowhiddencats")
-  radio_button(:iso_8601_radio, id: "mw-input-wpdate-ISO_8601")
-  span(:local_time_span, id: "wpLocalTime")
-  radio_button(:mo_day_year_radio, id: "mw-input-wpdate-mdy")
-  radio_button(:modern, id: "mw-input-wpskin-modern")
-  radio_button(:monobook, id: "mw-input-wpskin-monobook")
-  radio_button(:no_preference_radio, id: "mw-input-wpdate-default")
-  text_field(:other_offset, id: "mw-input-wptimecorrection-other")
+  checkbox(:auto_number_check, id: 'mw-input-wpnumberheadings')
+  radio_button(:cologne_blue, id: 'mw-input-wpskin-cologneblue')
+  radio_button(:day_mo_year_radio, id: 'mw-input-wpdate-dmy')
+  checkbox(:dont_show_aft_check, id: 'mw-input-wparticlefeedback-disable')
+  checkbox(:exclude_from_experiments_check, id: 'mw-input-wpvector-noexperiments')
+  checkbox(:hidden_categories_check, id: 'mw-input-wpshowhiddencats')
+  radio_button(:iso_8601_radio, id: 'mw-input-wpdate-ISO_8601')
+  span(:local_time_span, id: 'wpLocalTime')
+  radio_button(:mo_day_year_radio, id: 'mw-input-wpdate-mdy')
+  radio_button(:modern, id: 'mw-input-wpskin-modern')
+  radio_button(:monobook, id: 'mw-input-wpskin-monobook')
+  radio_button(:no_preference_radio, id: 'mw-input-wpdate-default')
+  text_field(:other_offset, id: 'mw-input-wptimecorrection-other')
   a(:restore_default_link, href: /reset/)
-  select_list(:size_select, id: "mw-input-wpimagesize")
-  select_list(:threshold_select, id: "mw-input-wpstubthreshold")
-  select_list(:time_offset_select, id: "mw-input-wptimecorrection")
-  table(:time_offset_table, id: "mw-htmlform-timeoffset")
-  select_list(:thumb_select, id: "mw-input-wpthumbsize")
-  select_list(:underline_select, id: "mw-input-wpunderline")
-  radio_button(:vector, id: "mw-input-wpskin-vector")
-  radio_button(:year_mo_day_radio, id: "mw-input-wpdate-ymd")
+  select_list(:size_select, id: 'mw-input-wpimagesize')
+  select_list(:threshold_select, id: 'mw-input-wpstubthreshold')
+  select_list(:time_offset_select, id: 'mw-input-wptimecorrection')
+  table(:time_offset_table, id: 'mw-htmlform-timeoffset')
+  select_list(:thumb_select, id: 'mw-input-wpthumbsize')
+  select_list(:underline_select, id: 'mw-input-wpunderline')
+  radio_button(:vector, id: 'mw-input-wpskin-vector')
+  radio_button(:year_mo_day_radio, id: 'mw-input-wpdate-ymd')
 end
-
index aed9c41..25c384f 100644 (file)
 class PreferencesEditingPage
   include PageObject
 
-  include URL
-  page_url URL.url("Special:Preferences#mw-prefsection-rendering")
+  page_url 'Special:Preferences#mw-prefsection-rendering'
 
-  select_list(:edit_area_font_style_select, id: "mw-input-wpeditfont")
-  checkbox(:edit_section_double_click_check, id: "mw-input-wpeditondblclick")
-  checkbox(:edit_section_edit_link, id: "mw-input-wpeditsectiononrightclick")
-  checkbox(:edit_section_right_click_check, id: "mw-input-wpeditsectiononrightclick")
-  checkbox(:forced_edit_summary_check, id: "mw-input-wpforceeditsummary")
-  checkbox(:live_preview_check, id: "mw-input-wpuselivepreview")
-  checkbox(:preview_on_first_check, id: "mw-input-wppreviewonfirst")
-  checkbox(:preview_on_top_check, id: "mw-input-wppreviewontop")
-  checkbox(:show_edit_toolbar_check, id: "mw-input-wpshowtoolbar")
-  checkbox(:unsaved_changes_check, id: "mw-input-wpuseeditwarning")
+  select_list(:edit_area_font_style_select, id: 'mw-input-wpeditfont')
+  checkbox(:edit_section_double_click_check, id: 'mw-input-wpeditondblclick')
+  checkbox(:edit_section_edit_link, id: 'mw-input-wpeditsectiononrightclick')
+  checkbox(:edit_section_right_click_check, id: 'mw-input-wpeditsectiononrightclick')
+  checkbox(:forced_edit_summary_check, id: 'mw-input-wpforceeditsummary')
+  checkbox(:live_preview_check, id: 'mw-input-wpuselivepreview')
+  checkbox(:preview_on_first_check, id: 'mw-input-wppreviewonfirst')
+  checkbox(:preview_on_top_check, id: 'mw-input-wppreviewontop')
+  checkbox(:show_edit_toolbar_check, id: 'mw-input-wpshowtoolbar')
+  checkbox(:unsaved_changes_check, id: 'mw-input-wpuseeditwarning')
 end
index 919ba27..b305ee2 100644 (file)
 class PreferencesPage
   include PageObject
 
-  include URL
-  page_url URL.url("Special:Preferences")
+  page_url 'Special:Preferences'
 
-  a(:appearance_link, id: "preftab-rendering")
-  a(:editing_link, id: "preftab-editing")
-  a(:user_profile_link, id: "preftab-personal")
-  button(:save_button, id: "prefcontrol")
+  a(:appearance_link, id: 'preftab-rendering')
+  a(:editing_link, id: 'preftab-editing')
+  a(:user_profile_link, id: 'preftab-personal')
+  button(:save_button, id: 'prefcontrol')
 end
index 28e10b9..9e95eb5 100644 (file)
 class PreferencesUserProfilePage
   include PageObject
 
-  include URL
-  page_url URL.url("Special:Preferences#mw-prefsection-personal")
+  page_url 'Special:Preferences#mw-prefsection-personal'
 
-  table(:basic_info_table, id: "mw-htmlform-info")
-  link(:change_password_link, text: "Change password")
-  table(:email_table, id: "mw-htmlform-email")
-  radio_button(:gender_female_radio, id: "mw-input-wpgender-male")
-  radio_button(:gender_male_radio, id: "mw-input-wpgender-female")
-  radio_button(:gender_undefined_radio, id: "mw-input-wpgender-unknown")
-  select_list(:lang_select, id: "mw-input-wplanguage")
-  checkbox(:remember_password_check, id: "mw-input-wprememberpassword")
-  text_field(:signature_field, id: "mw-input-wpnickname")
-  table(:signature_table, id: "mw-htmlform-signature")
+  table(:basic_info_table, id: 'mw-htmlform-info')
+  link(:change_password_link, text: 'Change password')
+  table(:email_table, id: 'mw-htmlform-email')
+  radio_button(:gender_female_radio, id: 'mw-input-wpgender-male')
+  radio_button(:gender_male_radio, id: 'mw-input-wpgender-female')
+  radio_button(:gender_undefined_radio, id: 'mw-input-wpgender-unknown')
+  select_list(:lang_select, id: 'mw-input-wplanguage')
+  checkbox(:remember_password_check, id: 'mw-input-wprememberpassword')
+  text_field(:signature_field, id: 'mw-input-wpnickname')
+  table(:signature_table, id: 'mw-htmlform-signature')
 end
index 6689598..bb9c586 100644 (file)
@@ -3,5 +3,4 @@ class ViewHistoryPage
 
   a(:view_history_link, href: /action=history/)
   a(:old_version_link, href: /oldid=/)
-
-end
\ No newline at end of file
+end
index c1f46ec..da789e5 100644 (file)
@@ -1,7 +1,7 @@
 class ZtargetPage < MainPage
-  include URL
-  page_url URL.url("<%=params[:article_name]%>")
   include PageObject
 
-  a(:link_target_page_link, text: "link to the test target page")
-end
\ No newline at end of file
+  page_url '<%=params[:article_name]%>'
+
+  a(:link_target_page_link, text: 'link to the test target page')
+end
index 7d9415a..a7b3672 100644 (file)
@@ -1,10 +1,9 @@
 <?php
 /**
+ * @file
+ *
  * @copyright Copyright © 2013, Antoine Musso
  * @copyright Copyright © 2013, Wikimedia Foundation Inc.
- * @license GNU GPL v2
- *
- * @file
  */
 
 /**
index 17769ad..1cffa20 100644 (file)
@@ -593,6 +593,14 @@ class ParserTest {
                        }
                }
 
+               if ( isset( $opts['tidy'] ) ) {
+                       if ( !$this->tidySupport->isEnabled() ) {
+                               return $this->showSkipped();
+                       } else {
+                               $options->setTidy( true );
+                       }
+               }
+
                if ( isset( $opts['title'] ) ) {
                        $titleText = $opts['title'];
                } else {
@@ -624,10 +632,6 @@ class ParserTest {
                        $output->setTOCEnabled( !isset( $opts['notoc'] ) );
                        $out = $output->getText();
                        if ( isset( $opts['tidy'] ) ) {
-                               if ( !$this->tidySupport->isEnabled() ) {
-                                       return $this->showSkipped();
-                               }
-                               $out = MWTidy::tidy( $out );
                                $out = preg_replace( '/\s+$/', '', $out );
                        }
 
@@ -639,6 +643,14 @@ class ParserTest {
                                $out = "$title\n$out";
                        }
 
+                       if ( isset( $opts['showindicators'] ) ) {
+                               $indicators = '';
+                               foreach ( $output->getIndicators() as $id => $content ) {
+                                       $indicators .= "$id=$content\n";
+                               }
+                               $out = $indicators . $out;
+                       }
+
                        if ( isset( $opts['ill'] ) ) {
                                $out = implode( ' ', $output->getLanguageLinks() );
                        } elseif ( isset( $opts['cat'] ) ) {
@@ -877,10 +889,7 @@ class ParserTest {
                        'wgDisableLangConversion' => false,
                        'wgDisableTitleConversion' => false,
                        // Tidy options.
-                       // We always set 'wgUseTidy' to false when parsing, but certain
-                       // test-running modes still use tidy if available, so ensure
-                       // that the tidy-related options are all set to their defaults.
-                       'wgUseTidy' => false,
+                       'wgUseTidy' => isset( $opts['tidy'] ),
                        'wgAlwaysUseTidy' => false,
                        'wgDebugTidy' => false,
                        'wgTidyConf' => $IP . '/includes/tidy.conf',
index d9831e3..e965352 100644 (file)
@@ -26,6 +26,7 @@
 # php           php-only test (not run by the parsoid parser unless
 #                 the test includes an html/parsoid section)
 # showtitle     make the first line the title
+# showindicators make the first lines the page status indicators
 # comment       run through Linker::formatComment() instead of main parser
 # local         format section links in edit comment text as local links
 # notoc         disable table of contents
@@ -69,6 +70,12 @@ Template:pipe
 |
 !! endarticle
 
+!! article
+Template:=
+!! text
+<nowiki>=</nowiki>
+!! endarticle
+
 !!article
 MediaWiki:bad image list
 !!text
@@ -115,13 +122,47 @@ Template:echo_with_div
 Template:table_attribs
 !! text
 <noinclude>
-|</noinclude>style="color: red"| Foo
+|</noinclude>style="color:red;"|Foo
+!! endarticle
+
+!! article
+Template:table_attribs_2
+!! text
+<noinclude>
+|</noinclude>style="color:red;"|Foo
+|Bar||Baz
+!! endarticle
+
+!! article
+Template:table_attribs_3
+!! text
+<noinclude>
+|</noinclude>style{{=}}"background:&#35;f9f9f9;"|Foo
+!! endarticle
+
+!! article
+Template:table_attribs_4
+!! text
+| style="background-color:#DC241f;" width="10px" |
+!! endarticle
+
+!! article
+Template:table_attribs_5
+!! text
+<noinclude>
+|</noinclude>style="color:red;"||Bar
+!! endarticle
+
+!! article
+Template:table_header_cells
+!! text
+{{table_attribs}}!!style='color:red;'|''Bar''||style='color:brown;'|''Foo'' and Baz
 !! endarticle
 
 !! article
 Template:table_cells
 !! text
-{{table_attribs}} || Bar || Baz
+{{table_attribs}}||style='color:red;'|''Bar''||style='color:brown;'|''Foo'' and Baz
 !! endarticle
 
 !! article
@@ -140,6 +181,13 @@ style="color:red;" title="T48811"
 |foo
 !! endarticle
 
+!! article
+Template:definition_list
+!! text
+one
+::two
+!! endarticle
+
 !! article
 A?b
 !! text
@@ -1195,6 +1243,8 @@ Ruby markup (W3C-style)
 !! test
 Non-word characters don't terminate tag names (bug 17663, 40670, 52022)
 !! wikitext
+<blockquote|>a</blockquote>
+
 <b→> doesn't terminate </b→>
 
 <bä> doesn't terminate </bä>
@@ -1205,7 +1255,8 @@ Non-word characters don't terminate tag names (bug 17663, 40670, 52022)
 
 <sub-ID#1>
 !! html
-<p>&lt;b→&gt; doesn't terminate &lt;/b→&gt;
+<p>&lt;blockquote|&gt;a&lt;/blockquote&gt;
+</p><p>&lt;b→&gt; doesn't terminate &lt;/b→&gt;
 </p><p>&lt;bä&gt; doesn't terminate &lt;/bä&gt;
 </p><p>&lt;boo&gt; doesn't terminate &lt;/boo&gt;
 </p><p>&lt;s.foo&gt; doesn't terminate &lt;/s.foo&gt;
@@ -1214,9 +1265,13 @@ Non-word characters don't terminate tag names (bug 17663, 40670, 52022)
 !! end
 
 # There is a tidy bug here: http://sourceforge.net/p/tidy/bugs/946/
+# If the non-word-character tag made it through the sanitizer, tidy
+# would munge it up.
 !! test
 Non-word characters don't terminate tag names + tidy
 !! wikitext
+<blockquote|>a</blockquote>
+
 <b→> doesn't terminate </b→>
 
 <bä> doesn't terminate </bä>
@@ -1227,6 +1282,7 @@ Non-word characters don't terminate tag names + tidy
 
 <sub-ID#1>
 !! html+tidy
+<p>&lt;blockquote|&gt;a</p>
 <p>&lt;b→&gt; doesn't terminate &lt;/b→&gt;</p>
 <p>&lt;bä&gt; doesn't terminate &lt;/bä&gt;</p>
 <p>&lt;boo&gt; doesn't terminate &lt;/boo&gt;</p>
@@ -1234,16 +1290,33 @@ Non-word characters don't terminate tag names + tidy
 <p>&lt;sub-ID#1&gt;</p>
 !! end
 
+###
+### See tests/parser/parserTestsParserHook.php for the <tåg> extension)
+### This checks that HTML5 tags (with non-word characters in the tag
+### name) make it safely through the parser -- the Sanitizer will
+### munge them later, as it should.
+###
+!! test
+Non-word characters are valid in extension tags (T19663)
+!! wikitext
+<tåg>tåg</tåg>
+!! html
+<pre>
+'tåg'
+array (
+)
+</pre>
+
+!! end
+
 !! test
 Isolated close tags should be treated as literal text (bug 52760)
 !! wikitext
 </b>
 
 <s.foo>s</s>
-!! html
-<p>&lt;/b&gt;
-</p><p>&lt;s.foo&gt;s&lt;/s&gt;
-</p>
+!! html+tidy
+<p>&lt;s.foo&gt;s</p>
 !! end
 
 ###
@@ -1352,6 +1425,64 @@ parsoid=html2wt
 <nowiki>* &lt;/nowiki&gt;</nowiki> tag
 !! end
 
+!! test
+T71950: 1. Put nowiki as close to cause as possible, even with non-quote escapable chars
+!! options
+parsoid=html2wt
+!! html
+<p>This text: L'<a rel="mw:WikiLink" href="./Foo">Foo</a>
+This text: L''<a rel="mw:WikiLink" href="./Foo">Foo</a>
+This text: L'''<a rel="mw:WikiLink" href="./Foo">Foo</a>''</p>
+!! wikitext
+This text: L'[[Foo]]
+This text: L<nowiki>''</nowiki>[[Foo]]
+This text: L<nowiki>'''</nowiki>[[Foo]]<nowiki>''</nowiki>
+!! end
+
+# This test fails because wikitext whitespace is not normalized before comparing.
+!! test
+T71950: 2. Put nowiki as close to cause as possible, after ' :'
+!! options
+parsoid=html2wt
+!! html
+<p>This text : L''<a rel="mw:WikiLink" href="./Foo">Foo</a>
+</p>
+!! wikitext
+This text : L<nowiki>''</nowiki>[[Foo]]
+!! end
+
+# This test and the next one are html2wt only as they test that incorrect wikitext
+# passed in template arguments gets escaped or wrapped in nowikis where required.
+!! test
+T71482: Use {{!}} instead of nowiki for single pipe in template argument
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><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;foo|bar&quot;}},&quot;i&quot;:0}}]}" about="#mwt1"></span>
+<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;foo|bar |[[&quot;}},&quot;i&quot;:0}}]}" about="#mwt2"></p>
+!! wikitext
+{{echo|foo{{!}}bar}}
+{{echo|<nowiki>foo|bar |[[</nowiki>}}
+!! end
+
+!! test
+T53961: Output correct nowikis in template arguments
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><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;a [ b&quot;}},&quot;i&quot;:0}}]}" about="#mwt1"></span>
+<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;a }} b&quot;}},&quot;i&quot;:0}}]}" about="#mwt2"></span>
+<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;a [[ b&quot;}},&quot;i&quot;:0}}]}" about="#mwt3"></span>
+<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;a | {{ ]]&quot;}},&quot;i&quot;:0}}]}" about="#mwt4"></span>
+<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;a }&quot;}},&quot;i&quot;:0}}]}" about="#mwt5"></span></p>
+!! wikitext
+{{echo|a [ b}}
+{{echo|a <nowiki>}}</nowiki> b}}
+{{echo|<nowiki>a [[ b</nowiki>}}
+{{echo|a {{!}} <nowiki>{{ ]]</nowiki>}}
+{{echo|a <nowiki>}</nowiki>}}
+!! end
+
 ###
 ### Comments
 ###
@@ -1731,7 +1862,6 @@ b
 !! end
 
 ## PHP parser emits output which is broken
-## XXX The parsoid output doesn't match the tidy output.
 !! test
 Unclosed HTML p-tags should be handled properly
 !! wikitext
@@ -1741,9 +1871,10 @@ a
 b
 !! html/php+tidy
 <div>
-<p>foo&lt;/div&gt;</p>
+<p>foo</p>
+</div>
 <p>a</p>
-b</div>
+<p>b</p>
 !! html/parsoid
 <div data-parsoid='{"stx":"html"}'><p data-parsoid='{"stx":"html", "autoInsertedEnd":true}'>foo</p></div>
 <p>a</p>
@@ -2847,7 +2978,7 @@ File:foobar.jpg
 !! html
  a <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
                        </div>
                </div></li>
@@ -2859,7 +2990,7 @@ File:foobar.jpg
 <li class="gallerybox" style="width: 155px">
 <div style="width: 155px">
 <div class="thumb" style="width: 150px;">
-<div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div>
+<div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div>
 </div>
 <div class="gallerytext"></div>
 </div>
@@ -3952,19 +4083,43 @@ Definition Lists: colons occurring in tags
 ;<i>a:b</i>
 ;<span>a:b</span>
 ;<div>a:b</div>
+;<div>a
+:b</div>
 ;{{echo|a:b}}
 ;{{echo|''a:b''}}
-!! html
-<dl><dt>a</dt>
+;;;''a:b''
+!! html+tidy
+<dl>
+<dt>a</dt>
 <dd>b</dd>
 <dt><b>a:b</b></dt>
 <dt><i>a:b</i></dt>
 <dt><span>a:b</span></dt>
-<dt><div>a:b</div></dt>
+<dd>
+<div>a:b</div>
+</dd>
+<dd>
+<div>a
+<dl>
+<dd>b</dd>
+</dl>
+</div>
+</dd>
 <dt>a</dt>
 <dd>b</dd>
-<dt><i>a:b</i></dt></dl>
-
+<dt><i>a:b</i></dt>
+</dl>
+<dl>
+<dd>
+<dl>
+<dd>
+<dl>
+<dt><i>a:b</i></dt>
+</dl>
+</dd>
+</dl>
+</dd>
+</dl>
 !! end
 
 !! test
@@ -4013,6 +4168,28 @@ Definition Lists: colons and tables 2
 </td></tr></table></dd></dl>
 !! end
 
+!! test
+Definition Lists: template interaction
+!! wikitext
+::{{definition_list}}
+
+:one
+::{{definition_list}}
+:::two
+:::three
+::four
+!! html/parsoid
+<dl><dd><dl data-parsoid='{}'><dd about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[":",{"template":{"target":{"wt":"definition_list","href":"./Template:Definition_list"},"params":{},"i":0}}]}'>one</dd><span about="#mwt1">
+</span><dd about="#mwt1">two</dd></dl></dd></dl>
+
+<dl><dd data-parsoid='{}'>one
+<dl><dd about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":["::",{"template":{"target":{"wt":"definition_list","href":"./Template:Definition_list"},"params":{},"i":0}},"\n:::two\n:::three"]}'>one</dd><span about="#mwt2">
+</span><dd about="#mwt2">two
+<dl><dd>two</dd>
+<dd>three</dd></dl></dd>
+<dd data-parsoid='{}'>four</dd></dl></dd></dl>
+!! end
+
 
 ###
 ### External links
@@ -5636,11 +5813,12 @@ Indented table markup mixed with indented pre content (proposed in bug 6200)
 !! end
 
 !! test
-Template-generated table cell attributes and cell content
+1. Template-generated table cell attributes and cell content
 !! wikitext
 {|
 |{{table_attribs}}
 | {{table_attribs}}
+|| {{table_attribs_5}}
 | <!--foo--> <!--bar--> <!--baz--> {{table_attribs}}
 |align=center {{table_attribs}}
 | <!--foo--> align=center <!--bar--> {{table_attribs}}
@@ -5648,33 +5826,70 @@ Template-generated table cell attributes and cell content
 !! html
 <table>
 <tr>
-<td style="color: red"> Foo
+<td style="color:red;">Foo
+</td>
+<td style="color:red;">Foo
 </td>
-<td style="color: red"> Foo
+<td> style="color:red;"</td>
+<td>Bar
+</td>
+<td style="color:red;">Foo
 </td>
-<td style="color: red"> Foo
+<td align="center" style="color:red;">Foo
 </td>
-<td align="center" style="color: red"> Foo
+<td align="center" style="color:red;">Foo
+</td></tr></table>
+
+!! end
+
+!! test
+2. Template-generated table cell attributes and cell content
+!! wikitext
+{|
+|{{table_attribs_2}}
+|}
+!! html/php
+<table>
+<tr>
+<td style="color:red;">Foo
 </td>
-<td align="center" style="color: red"> Foo
+<td>Bar</td>
+<td>Baz
 </td></tr></table>
 
+!! html/parsoid
+<table>
+<tbody><tr><td about="#mwt1" typeof="mw:Transclusion" style="color:red;" data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_2","href":"./Template:Table_attribs_2"},"params":{},"i":0}}]}'>Foo</td>
+<td about="#mwt1">Bar</td><td about="#mwt1">Baz</td></tr>
+</tbody></table>
 !! end
 
 !! test
-Template-generated table cell attributes and cell content (2)
+3. Template-generated table cell attributes and cell content
 !! wikitext
 {|
+!align=center {{table_header_cells}}
+|-
 |align=center {{table_cells}}
 |}
-!! html
+!! html/php
 <table>
 <tr>
-<td align="center" style="color: red"> Foo </td>
-<td> Bar </td>
-<td> Baz
+<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>
+<tbody><tr><th align="center" style="color:red;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["!align=center ",{"template":{"target":{"wt":"table_header_cells","href":"./Template:Table_header_cells"},"params":{},"i":0}}]}'>Foo</th><th about="#mwt1" style="color:red;"><i about="#mwt1">Bar</i></th><th about="#mwt1" style="color:brown;"><i about="#mwt1">Foo</i> and Baz</th></tr><tr>
+<td align="center" style="color:red;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["|align=center ",{"template":{"target":{"wt":"table_cells","href":"./Template:Table_cells"},"params":{},"i":0}}]}'>Foo</td><td about="#mwt1" style="color:red;"><i about="#mwt1">Bar</i></td><td about="#mwt1" style="color:brown;"><i about="#mwt1">Foo</i> and Baz</td></tr>
+</tbody></table>
 !! end
 
 !! test
@@ -5737,7 +5952,7 @@ Wikitext table with a lot of comments
 <!-- c0 -->
 | foo
 <!-- c1 -->
-|- <!-- c2 -->
+|-<!-- c2 -->
 <!-- c3 -->
 |<!-- c4 -->
 <!-- c5 -->
@@ -5753,6 +5968,26 @@ Wikitext table with a lot of comments
 
 !! end
 
+!! test
+Wikitext table comments represented in parsoid dom
+!! wikitext
+{|<!--c1--><!--c2-->
+|-<!--c3-->
+| x
+|}
+!! html/php+tidy
+<table>
+<tr>
+<td>x</td>
+</tr>
+</table>
+!! html/parsoid
+<table><!--c1--><!--c2-->
+<tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'><!--c3-->
+<td data-parsoid='{"autoInsertedEnd":true}'> x</td></tr>
+</tbody></table>
+!! end
+
 !! test
 Wikitext table with double-line table cell
 !! wikitext
@@ -6017,6 +6252,28 @@ parsoid=wt2html,html2html
 </table>
 !! end
 
+!! test
+Table cells not properly parsed in an implicit-td context
+!! wikitext
+{|
+|-
+{{table_attribs_4}} || a || b
+|}
+!! html/php+tidy
+<table>
+<tr>
+<td style="background-color:#DC241f;" width="10px"></td>
+<td>a</td>
+<td>b</td>
+</tr>
+</table>
+!! html/parsoid
+<table>
+<tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
+<td style="background-color:#DC241f;" width="10px" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"autoInsertedEnd":true,"pi":[[]]}' data-mw='{"parts":["",{"template":{"target":{"wt":"table_attribs_4","href":"./Template:Table_attribs_4"},"params":{},"i":0}}," "]}'> </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'> a </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'> b</td></tr>
+</tbody></table>
+!! end
+
 !! test
 Parsoid: Round-trip tables directly followed by content (bug 51219)
 !! options
@@ -6178,6 +6435,27 @@ parsoid=html2wt
 |}
 !! end
 
+!!test
+Testing serialization after deletion of table cells
+!!options
+parsoid={
+  "modes": ["wt2wt", "selser"],
+  "changes": [
+    ["#x", "remove"]
+  ]
+}
+!!wikitext
+{|
+!h1 !!h2 !!h3
+| id="x" |c1 {{!}}{{!}}{{!}}c2 |||c3
+|}
+!! wikitext/edited
+{|
+!h1 !!h2 !!h3
+|c2 |||c3
+|}
+!!end
+
 ###
 ### Internal links
 ###
@@ -7421,6 +7699,7 @@ Blah blah blah
 ###
 ### Redirects, Parsoid-only
 ###
+
 !! test
 1. Simple redirect to page
 !! options
@@ -7431,16 +7710,20 @@ parsoid
 <link rel="mw:PageProp/redirect" href="./Main_Page">
 !! end
 
-# Only wt2html and html2html since "Main_Page" will serialize to "Main Page"
 !! test
 2. Other redirect variants
-!! options
-parsoid=wt2html,wt2wt
 !! wikitext
 #REDIRECT [[Main_Page]]
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Main_Page" data-parsoid='{"src":"#REDIRECT ","a":{"href":"./Main_Page"},"sa":{"href":"Main_Page"}}'/>
+!! end
+
+!! test
+3. Other redirect variants
+!! wikitext
 #REDIRECT [[<nowiki>[[Bar]]</nowiki>]]
 !! html/parsoid
-<link rel="mw:PageProp/redirect" href="./Main_Page"><link rel="mw:PageProp/redirect" href="./%5B%5BBar%5D%5D">
+<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>"}}'/>
 !! end
 
 !! test
@@ -7497,7 +7780,7 @@ parsoid=wt2html
 !! test
 Redirect to category
 !! options
-parsoid=wt2html
+parsoid=wt2wt,wt2html
 !! wikitext
 #REDIRECT [[Category:Foo]]
 !! html
@@ -7517,11 +7800,11 @@ parsoid=wt2html
 !! test
 Redirect to category page
 !! options
-parsoid=wt2html,html2html
+parsoid
 !! wikitext
 #REDIRECT [[:Category:Foo]]
 !! html
-<p><a rel="mw:WikiLink" href="Category:Foo" title="Category:Foo">Category:Foo</a></p>
+<link rel="mw:PageProp/redirect" href="Category:Foo" title="Category:Foo"/>
 !! end
 
 !! test
@@ -7551,7 +7834,7 @@ parsoid
 !! wikitext
 #REDIRECT [[en:File:Wiki.png]]
 !! html
-<link rel="mw:PageProp/redirect" href="File:Wiki.png">
+<link rel="mw:PageProp/redirect" href="./File:Wiki.png">
 !! end
 
 !! test
@@ -7561,7 +7844,7 @@ parsoid
 !! wikitext
 #REDIRECT [[meatball:File:Wiki.png]]
 !! html
-<link rel="mw:PageProp/redirect" href="File:Wiki.png">
+<link rel="mw:PageProp/redirect" href="./File:Wiki.png">
 !! end
 
 !! test
@@ -7575,6 +7858,18 @@ language=is
 <link rel="mw:PageProp/redirect" href="./Main_Page">
 !! end
 
+!! test
+Redirect syntax under text isn't considered a redirect
+!! wikitext
+some text
+#redirect [[Main Page]]
+!! html/parsoid
+<p>some text</p>
+<ol data-parsoid='{}'><li data-parsoid='{}'>redirect <a rel="mw:WikiLink" href="./Main_Page" title="Main Page" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page"},"sa":{"href":"Main Page"}}'>Main Page</a></li></ol>
+!! end
+
+# FIXME: Should hoist the redirect to the top of the page and ensure there
+# is only one.
 !! test
 New redirect
 !! options
@@ -7609,9 +7904,6 @@ Broken br tag sanitization
 !! end
 
 # TODO: Fix html2html mode (bug 51055)!
-# This </br> handling was added as part of bug 50831; but it
-# differs from how PHP+tidy handles this.  We should investigate
-# this.
 !! test
 Parsoid: Broken br tag recognition
 !! options
@@ -7620,12 +7912,9 @@ parsoid=wt2html
 </br>
 
 <br/ >
-!! html/php+tidy
-<p>&lt;/br&gt;</p>
+!! html+tidy
+<p><br /></p>
 <p><br /></p>
-!! html/parsoid
-<p><br></p>
-<p><br/></p>
 !! end
 
 !! test
@@ -7929,6 +8218,16 @@ Nested lists 8 (multiple nesting transitions)
 
 !! end
 
+!! test
+Nested lists 9 (extension interaction)
+!! options
+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>
+!! end
+
 !! test
 1. Lists with start-of-line-transparent tokens before bullets: Comments
 !! wikitext
@@ -8201,11 +8500,9 @@ parsoid=wt2html,wt2wt,html2html
 <li><s> b </s></li></ol>
 !! end
 
-# Parsoid fails this test, but it might be tricky to support properly.
 # See bug 68395.
 !!test
-List embedded in a non-block tag
-(Ugly Parsoid output -- worth fixing; PHP parser relies on Tidy)
+1. List embedded in a formatting tag
 !! wikitext
 <small>
 * foo
@@ -8222,6 +8519,49 @@ List embedded in a non-block tag
 </small>
 !!end
 
+## Ugly Parsoid output here
+## Not sure what the right output is.
+!!test
+2. List embedded in a formatting tag
+!! wikitext
+<small>
+*a
+*b</small>
+!! html/php+tidy
+<ul>
+<li><small>a</small></li>
+<li><small>b</small></li>
+</ul>
+!! html/parsoid
+<small></small>
+<ul><small>
+<li>a</li>
+</small>
+<li><small>b</small></li>
+</ul>
+!!end
+
+# Ugly Parsoid and PHP parser output here
+# Not sure if we want to make this a test!
+#
+## !!test
+## 3. Unclosed formatting tags in list elements
+## !! wikitext
+## *<small>a
+## *<small>b
+## !! html/php+tidy
+## <ul>
+## <li><small>a</small></li>
+## <li><small><small>b</small></small></li>
+## </ul>
+## !! html/parsoid
+## <ul>
+## <li><small>a</small></li>
+## <small>
+## <li><small>b</small></li>
+## </small></ul>
+## !!end
+
 # This is a bug in the PHP parser + tidy combination.
 # (The </tr> tag gets parsed as text and html-escaped by PHP,
 # and then fostered out of the table by tidy.)
@@ -8235,14 +8575,7 @@ parsoid=wt2html,wt2wt
 <td>foo</td>
 </tr>
 </table>
-!! html/php+tidy
-<p>&lt;/tr&gt;</p>
-<table>
-<tr>
-<td>foo</td>
-</tr>
-</table>
-!! html/parsoid
+!! html+tidy
 <table>
 <tr>
 <td>foo</td>
@@ -8829,14 +9162,20 @@ Aoeu
 # From plwiki:PLOS_ONE
 !! test
 Parsoid: Page property magic word with magic word contents
-!! options
-parsoid
 !! wikitext
 {{DISPLAYTITLE:''{{PAGENAME}}''}}
-!! html
+!! html/parsoid
 <meta property="mw:PageProp/displaytitle" content="Main Page" about="#mwt2" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"content"},{"html":"&lt;i data-parsoid=\"{&amp;quot;dsr&amp;quot;:[15,31,2,2]}\">&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[]],&amp;quot;dsr&amp;quot;:[17,29,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;PAGENAME&amp;quot;,&amp;quot;function&amp;quot;:&amp;quot;pagename&amp;quot;},&amp;quot;params&amp;quot;:{},&amp;quot;i&amp;quot;:0}}]}\">Main Page&lt;/span>&lt;/i>"}]]}'/>
 !! end
 
+!! test
+Parsoid: Template-generated DISPLAYTITLE
+!! wikitext
+{{{{echo|DISPLAYTITLE}}:Foo}}
+!! html/parsoid
+<meta property="mw:PageProp/displaytitle" content="Foo" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"dsr":[0,29,null,null],"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"{{echo|DISPLAYTITLE}}:Foo"},"params":{},"i":0}}]}'/>
+!! end
+
 !! test
 Namespace 1 {{ns:1}}
 !! wikitext
@@ -10301,14 +10640,43 @@ Templates: Support for templates generating attributes and content
 </tbody></table>
 !!end
 
-!!test
-Templates: HTML Tables: 1. Generating start of a HTML table
+!! test
+1. Entities and nowikis inside templated attributes should be handled correctly
 !! wikitext
-{{echo|<table><tr><td>foo</td>}}</tr></table>
-!! html
-<table><tr><td>foo</td></tr></table>
-
-!!end
+<div {{echo|style{{=}}"background:&#35;f9f9f9;"}}>foo</div>
+!! html/php
+<div style="background:#f9f9f9;">foo</div>
+
+!! html/parsoid
+<div style="background:#f9f9f9;" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html"}' data-mw='{"attribs":[[{"txt":"style","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;:[5,49,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;style{{=}}\\&amp;quot;background:&amp;amp;#35;f9f9f9;\\&amp;quot;&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">style&lt;/span>&lt;span typeof=\"mw:Nowiki\" about=\"#mwt1\" data-parsoid=\"{}\">=&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">\"background:&lt;/span>&lt;span typeof=\"mw:Entity\" about=\"#mwt1\" data-parsoid=\"{&amp;quot;src&amp;quot;:&amp;quot;&amp;amp;#35;&amp;quot;,&amp;quot;srcContent&amp;quot;:&amp;quot;#&amp;quot;}\">#&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">f9f9f9;\"&lt;/span>"},{"html":""}]]}'>foo</div>
+!! end
+
+!! test
+2. Entities and nowikis inside templated attributes should be handled correctly
+!! wikitext
+{|
+|{{table_attribs_3}}
+|}
+!! html/php
+<table>
+<tr>
+<td style="background:#f9f9f9;">Foo
+</td></tr></table>
+
+!! html/parsoid
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td style="background:#f9f9f9;" typeof="mw:Transclusion" about="#mwt1" data-parsoid='{"autoInsertedEnd":true,"pi":[[]]}' data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_3","href":"./Template:Table_attribs_3"},"params":{},"i":0}}]}'>Foo</td></tr>
+</tbody></table>
+!! end
+
+!!test
+Templates: HTML Tables: 1. Generating start of a HTML table
+!! wikitext
+{{echo|<table><tr><td>foo</td>}}</tr></table>
+!! html
+<table><tr><td>foo</td></tr></table>
+
+!!end
 
 !!test
 Templates: HTML Tables: 2a. Generating middle of a HTML table
@@ -11415,7 +11783,7 @@ parsoid=wt2html,wt2wt,html2html
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><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></p>
 !! end
 
 !! test
@@ -11426,7 +11794,7 @@ Simple image (using File: namespace, now canonical)
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><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></p>
 !! end
 
 !! test
@@ -11437,7 +11805,7 @@ Right-aligned image
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
 !! html/parsoid
-<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" height="220" width="1941"></a></figure>
+<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>
 !! end
 
 !! test
@@ -11448,7 +11816,7 @@ Image with caption
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
 !! html/parsoid
-<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" height="220" width="1941"></a><figcaption>Caption text</figcaption></figure>
+<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><figcaption>Caption text</figcaption></figure>
 !! end
 
 !! test
@@ -11459,7 +11827,7 @@ Image with caption, bug 53312 #1
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page stuff"><img alt="Caption page stuff" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
 !! html/parsoid
-<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" height="220" width="1941"></a><figcaption>Caption page stuff</figcaption></figure>
+<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><figcaption>Caption page stuff</figcaption></figure>
 !! end
 
 !! test
@@ -11470,7 +11838,7 @@ Image with caption, bug 53312 #2
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page="><img alt="Caption page=" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
 !! html/parsoid
-<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" height="220" width="1941"></a><figcaption>Caption page=</figcaption></figure>
+<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><figcaption>Caption page=</figcaption></figure>
 !! end
 
 !! test
@@ -11481,7 +11849,7 @@ Image with caption, bug 53312 #3
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page=stuff"><img alt="Caption page=stuff" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
 !! html/parsoid
-<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" height="220" width="1941"></a><figcaption>Caption page=stuff</figcaption></figure>
+<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><figcaption>Caption page=stuff</figcaption></figure>
 !! end
 
 !! test
@@ -11497,7 +11865,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>Caption <a href="/index.php?title=Link1&amp;action=edit&amp;redlink=1" class="new" title="Link1 (page does not exist)">Link1</a> [[]] <a href="/index.php?title=Link2&amp;action=edit&amp;redlink=1" class="new" title="Link2 (page does not exist)">Link2</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption [[Link1]]\n[[]]\n[[Link2]]\n"}]}'><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" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>Caption <a rel="mw:WikiLink" href="./Link1" title="Link1" data-parsoid='{"stx":"simple","a":{"href":"./Link1"},"sa":{"href":"Link1"}}'>Link1</a>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption [[Link1]]\n[[]]\n[[Link2]]\n"}]}'><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 <a rel="mw:WikiLink" href="./Link1" title="Link1" data-parsoid='{"stx":"simple","a":{"href":"./Link1"},"sa":{"href":"Link1"}}'>Link1</a>
 [[]]
 <a rel="mw:WikiLink" href="./Link2" title="Link2" data-parsoid='{"stx":"simple","a":{"href":"./Link2"},"sa":{"href":"Link2"}}'>Link2</a>
 </figcaption></figure>
@@ -11529,7 +11897,7 @@ Linktrails should not work for images: [[File:Foobar.jpg]]s
 <p>Linktrails should not work for images: <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>s
 </p>
 !! html/parsoid
-<p>Linktrails should not work for images: <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" height="220" width="1941"/></a></span>s</p>
+<p>Linktrails should not work for images: <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>s</p>
 !! end
 
 !! test
@@ -11542,7 +11910,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
 !! html/parsoid
-<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" height="220" width="1941"></a><figcaption>Caption text</figcaption></figure>
+<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><figcaption>Caption text</figcaption></figure>
 !! end
 
 !! test
@@ -11553,7 +11921,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/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" 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/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>
 !! end
 
 !! test
@@ -11564,7 +11932,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/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" 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/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>
 !! end
 
 !! test
@@ -11575,7 +11943,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 mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}' data-mw='{"attribs":[["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;:[18,31,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;50px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">50px&lt;/span>"}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50"/></a></span></p>
+<p><span typeof="mw:Image mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}' data-mw='{"attribs":[["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;:[18,31,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;50px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">50px&lt;/span>"}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
 !! end
 
 ## Parsoid does not provide editing support for images where templates produce multiple image attributes.
@@ -11588,7 +11956,7 @@ Image with multiple attributes from the same template
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image mw:Placeholder"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption text</figcaption></figure>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image mw:Placeholder"><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><figcaption>Caption text</figcaption></figure>
 !! end
 
 !! test
@@ -11619,9 +11987,9 @@ thumbsize=220
 </div>
 <p>456</p>
 !! 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" 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" 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/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220"></a></figure><p>456</p>
+<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>
 !! end
 
 !! test
@@ -11632,7 +12000,7 @@ Image with multiple captions -- only last one is accepted
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption3 - accepted"><img alt="Caption3 - accepted" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
 !! html/parsoid
-<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" height="220" width="1941"></a><figcaption>Caption3 - accepted</figcaption></figure>
+<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><figcaption>Caption3 - accepted</figcaption></figure>
 !! end
 
 !! test
@@ -11643,7 +12011,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" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></span></p>
 !! end
 
 !! test
@@ -11659,8 +12027,8 @@ 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" 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" height="220" width="1941"/></a></span></p>
+<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>
+<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
 
 !! test
@@ -11675,9 +12043,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/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" 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" 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" 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/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>
 !! end
 
 # a sad bit of backward-compatibility
@@ -11693,7 +12061,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" 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" 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/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>
 !! end
 
 !! test
@@ -11704,7 +12072,7 @@ Image with link parameter, wiki target
 <p><a href="/wiki/Main_Page" title="Main Page"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="Main_Page"><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
 
 # parsoid bug 49293 (part 1)
@@ -11716,7 +12084,7 @@ Image with link parameter, URL target
 <p><a href="http://example.com/" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><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="220" width="1941"/></a></span></p>
 !! end
 
 # parsoid bug 49293 (part 2)
@@ -11728,7 +12096,7 @@ Image with link parameter, protocol-less URL target
 <p><a href="//example.com/" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="//example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="//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="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -11783,7 +12151,7 @@ Image with empty link parameter
 <p><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" />
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><span><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></span></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><span><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"/></span></span></p>
 !! end
 
 !! test
@@ -11794,7 +12162,7 @@ Image with link parameter (wiki target) and unnamed parameter
 <p><a href="/wiki/Main_Page" title="Title"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -11805,7 +12173,7 @@ Image with link parameter (URL target) and unnamed parameter
 <p><a href="http://example.com/" title="Title" rel="nofollow"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><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="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -11819,7 +12187,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" 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/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>
 !! end
 
 !! test
@@ -11832,7 +12200,7 @@ thumbsize=220
 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/File:Foobar.jpg"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></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" data-mw='{"thumb":"Thumb.png"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" 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><figcaption>Title</figcaption></figure>
 !! end
 
 !! test
@@ -11846,7 +12214,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></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" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img resource="./File:Foobar.jpg" 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><figcaption>Title</figcaption></figure>
 !! end
 
 !! test
@@ -11860,7 +12228,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="http://example.com"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></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" data-mw='{"thumb":"Thumb.png"}'><a href="http://example.com"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="http://example.com"><img resource="./File:Foobar.jpg" 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><figcaption>Title</figcaption></figure>
 !! end
 
 !! test
@@ -11874,7 +12242,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" />  <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" data-mw='{"thumb":"Thumb.png"}'><span><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></span><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><span><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></span><figcaption>Title</figcaption></figure>
 !! end
 
 !! test
@@ -11888,7 +12256,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="alttext" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></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" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img alt="alttext" resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img alt="alttext" resource="./File:Foobar.jpg" 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><figcaption>Title</figcaption></figure>
 !! end
 
 !! test
@@ -11901,7 +12269,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><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><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
 !! end
 
 !! test
@@ -11914,7 +12282,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Altitude" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img alt="Altitude" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img alt="Altitude" 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><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
 !! end
 
 !! test
@@ -11930,8 +12298,19 @@ parsoid=wt2html,wt2wt,html2html
 </p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="testing bold in alt" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw="{&quot;caption&quot;:&quot;testing '''bold''' in alt&quot;}"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
-<p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img alt="testing bold in alt" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw="{&quot;caption&quot;:&quot;testing '''bold''' in alt&quot;}"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img alt="testing bold in alt" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+!! end
+
+!! test
+Alt image option should handle most kinds of wikitext without barfing
+!! wikitext
+[[Image:Foobar.jpg|thumb|This is the image caption|alt=This is a [[link]] and a {{echo|''bold template''}}.]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a link and a bold template." 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 the image caption</div></div></div>
+
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"This is the image caption"},{"ck":"alt","ak":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}."}]}' data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["alt",{"html":"alt=This is a &lt;a rel=\"mw:WikiLink\" href=\"./Link\" title=\"Link\" data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;simple&amp;quot;,&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;./Link&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;link&amp;quot;},&amp;quot;dsr&amp;quot;:[65,73,2,2]}\">link&lt;/a> and a &lt;i about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[80,106,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;&#39;&#39;bold template&#39;&#39;&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">bold template&lt;/i>."}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img alt="This is a link and a bold template." resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"alt":"This is a link and a bold template.","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}.","resource":"Image:Foobar.jpg"}}'/></a><figcaption>This is the image caption</figcaption></figure>
 !! end
 
 ###################
@@ -11955,9 +12334,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" 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" 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" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
 !! end
 
 !! test
@@ -11974,9 +12353,9 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">caption</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
-<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
-<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><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><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><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><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><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><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -11993,9 +12372,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" 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" 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" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 ###################
@@ -12022,8 +12401,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" 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" 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/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>
 !! end
 
 !! test
@@ -12039,8 +12418,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" 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" 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/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>
 !! end
 
 !! test
@@ -12053,7 +12432,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" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></figure>
 !! end
 
 !! test
@@ -12069,8 +12448,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" 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" 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/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>
 !! end
 
 !! test
@@ -12083,7 +12462,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" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
 !! end
 
 !! test
@@ -12099,8 +12478,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" 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" 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/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>
 !! end
 
 !! test
@@ -12122,10 +12501,10 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption"></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
-<figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
-<figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
-<figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><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/Frame"><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/Frame"><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/Frame"><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>
 !! end
 
 ###################
@@ -12158,7 +12537,7 @@ Frameless image caption with a free URL
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="http://example.com"><img alt="http://example.com" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"http://example.com"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"http://example.com"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12171,7 +12550,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" 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/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>
 !! end
 
 !! test
@@ -12185,7 +12564,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" 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/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>
 !! end
 
 !! test
@@ -12197,7 +12576,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" 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/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>
 !! end
 
 !! test
@@ -12210,7 +12589,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" 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/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>
 !! end
 
 !! test
@@ -12223,7 +12602,7 @@ parsoid=wt2html,wt2wt,html2html
 <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>lang=invalid.language.code</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" height="165" width="220"/></a><figcaption>lang=invalid.language.code</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/f/ff/Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>lang=invalid.language.code</figcaption></figure>
 !! end
 
 !! test
@@ -12234,7 +12613,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" 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/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>
 !! end
 
 !! test
@@ -12245,7 +12624,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" 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/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>
 !! end
 
 !! test
@@ -12256,7 +12635,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" 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/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>
 !! end
 
 # Pending resolution to bug 368
@@ -12268,7 +12647,7 @@ BUG 648: Frameless image caption with a link
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]] in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]] in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12279,7 +12658,7 @@ BUG 648: Frameless image caption with a link (suffix)
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a linkfoo in it"><img alt="text with a linkfoo in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]]foo in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]]foo in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12290,7 +12669,7 @@ BUG 648: Frameless image caption with an interwiki link
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a MeatBall:Link in it"><img alt="text with a MeatBall:Link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link]] in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link]] in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12301,7 +12680,7 @@ BUG 648: Frameless image caption with a piped interwiki link
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link|link]] in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link|link]] in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12312,7 +12691,7 @@ Escape HTML special chars in image alt text
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="&amp; &lt; &gt; &quot;"><img alt="&amp; &lt; &gt; &quot;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp; &lt; > \""}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp; &lt; > \""}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12323,7 +12702,7 @@ BUG 499: Alt text should have &#1234;, not &amp;1234;
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="♀"><img alt="♀" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp;#9792;"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp;#9792;"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12347,7 +12726,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" 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" 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/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>
 !! end
 
 !! test
@@ -12359,7 +12738,7 @@ Image: caption containing a newline
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="This *is some text"><img alt="This *is some text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"This\n*is some text"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"This\n*is some text"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !!end
 
 !!test
@@ -12371,7 +12750,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" 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/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>
 !!end
 
 !! test
@@ -12390,7 +12769,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" 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/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
 <table>
 <tbody>
 <tr><th>Foo </th><th>Bar</th></tr>
@@ -12407,7 +12786,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" 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/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>
 !! end
 
 !! test
@@ -12420,7 +12799,7 @@ parsoid=wt2html,wt2wt,html2html
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="a"><img alt="a" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="b" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size b" typeof="mw:Image" data-mw='{"caption":"a"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size b" typeof="mw:Image" data-mw='{"caption":"a"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12434,7 +12813,7 @@ language=es
 <div class="floatleft"><a href="/wiki/Foo" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image"><a href="./Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image"><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="220" width="1941"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12449,7 +12828,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" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12463,7 +12842,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" 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/3/3a/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
@@ -12484,9 +12863,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" 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" 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" 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" 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>
 !! end
 
 !! article
@@ -12516,7 +12895,7 @@ wgEnableUploads=0
 <p><a href="/wiki/File:Foobaz.jpg" title="File:Foobaz.jpg">File:Foobaz.jpg</a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="File:Foobaz.jpg"><img resource="./File:Foobaz.jpg" src="./Special:FilePath/Foobaz.jpg" height="220" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="./File:Foobaz.jpg"><img resource="./File:Foobaz.jpg" src="./Special:FilePath/Foobaz.jpg" height="220" width="220"/></a></span></p>
 !! end
 
 # Parsoid-specific testing for images
@@ -12531,7 +12910,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/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
 !! end
 
 !! test
@@ -12542,7 +12921,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/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
 !! end
 
 !! test
@@ -12551,7 +12930,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/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" 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/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>
 !! end
 
 !! test
@@ -12562,7 +12941,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/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
 !! end
 
 !! test
@@ -12570,7 +12949,7 @@ Parsoid-specific image handling - simple image with both sizes, a baseline align
 !! wikitext
 [[File:Foobar.jpg|500x10px|baseline|caption]]
 !! html/parsoid
-<p><span class="mw-valign-baseline" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"500x10px"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption"}],"size":"500x10"}'><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/89px-Foobar.jpg" height="10" width="89" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"10","width":"89"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span class="mw-valign-baseline" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"500x10px"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption"}],"size":"500x10"}'><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/89px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="10" width="89" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"10","width":"89"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
 !! end
 
 !! test
@@ -12578,7 +12957,7 @@ Parsoid-specific image handling - simple image with border and size spec
 !! wikitext
 [[File:Foobar.jpg|50px|border|caption]]
 !! html/parsoid
-<p><span class="mw-image-border" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}]}'><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" 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-image-border" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}]}'><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
@@ -12586,7 +12965,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/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" 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/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>
 !! end
 
 !! test
@@ -12595,7 +12974,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" 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/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>
 !! end
 
 !! test
@@ -12603,7 +12982,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/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" 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/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>
 !! end
 
 !! test
@@ -12612,7 +12991,7 @@ valign, and caption (existing content)
 !! wikitext
 [[File:Foobar.jpg|thumb|50x50px|right|middle|caption]]
 !! html/parsoid
-<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"50x50px"},{"ck":"right","ak":"right"},{"ck":"middle","ak":"middle"},{"ck":"caption","ak":"caption"}],"size":"50x50"}'><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" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"50x50px"},{"ck":"right","ak":"right"},{"ck":"middle","ak":"middle"},{"ck":"caption","ak":"caption"}],"size":"50x50"}'><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><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12623,7 +13002,7 @@ parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[File:Foobar.jpg|frame|500x50px|caption]]
 !! html/parsoid
-<figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941" /></a><figcaption>caption</figcaption></figure>
+<figure typeof="mw:Image/Frame"><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><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12634,7 +13013,7 @@ parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[File:Foobar.jpg|left|baseline|frame|500x50px|caption]]
 !! html/parsoid
-<figure class="mw-halign-left mw-valign-baseline" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941" /></a><figcaption>caption</figcaption></figure>
+<figure class="mw-halign-left mw-valign-baseline" typeof="mw:Image/Frame"><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><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12642,7 +13021,7 @@ Parsoid-specific image handling - frameless image with specific size, border, an
 !! wikitext
 [[File:Foobar.jpg|frameless|442x50px|border|caption]]
 !! html/parsoid
-<p><span class="mw-image-border" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"frameless","ak":"frameless"},{"ck":"width","ak":"442x50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}],"size":"442x50"}'><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/442px-Foobar.jpg" height="50" width="442" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"50","width":"442"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span class="mw-image-border" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"frameless","ak":"frameless"},{"ck":"width","ak":"442x50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}],"size":"442x50"}'><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/442px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="50" width="442" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"50","width":"442"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
 !! end
 
 !! test
@@ -12650,7 +13029,7 @@ Parsoid-specific image handling - simple image with a formatted caption
 !! wikitext
 [[File:Foobar.jpg|<table><tr><td>a</td><td>b</td></tr><tr><td>c</td></tr></table>]]
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;table>&lt;tr>&lt;td>a&lt;/td>&lt;td>b&lt;/td>&lt;/tr>&lt;tr>&lt;td>c&lt;/td>&lt;/tr>&lt;/table>"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;table>&lt;tr>&lt;td>a&lt;/td>&lt;td>b&lt;/td>&lt;/tr>&lt;tr>&lt;td>c&lt;/td>&lt;/tr>&lt;/table>"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12658,7 +13037,7 @@ Parsoid-specific image handling - caption with a template in it
 !! wikitext
 [[File:Foobar.jpg|thumb|200x23px|This caption has a {{echo|transclusion}} in it.]]
 !! html/parsoid
-<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" height="23" width="200"></a><figcaption>This caption has a <span about="#mwt1" 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;transclusion&quot;}},&quot;i&quot;:0}}]}">transclusion</span> 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 <span about="#mwt1" 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;transclusion&quot;}},&quot;i&quot;:0}}]}">transclusion</span> in it.</figcaption></figure>
 !! end
 
 !! test
@@ -12671,7 +13050,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" 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/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>
 <p>bar</p>
 !! end
 
@@ -12682,7 +13061,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" 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/3/3a/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
@@ -12692,9 +13071,10 @@ Parsoid-specific image handling - empty caption (2)
 parsoid=html2wt
 !! html/parsoid
 <figure class="mw-default-size" typeof="mw:Image/Thumb">
-  <a href="File:Foobar.jpg">
+  <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>
@@ -12708,7 +13088,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" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption> </figcaption></figure>
 !! end
 
 !! test
@@ -12719,7 +13099,7 @@ foo
 bar
 !! html/parsoid
 <p>foo
-<span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" lang="de" height="180" width="240"/></a></span>
+<span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"caption"}'><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="180" width="240"/></a></span>
 bar</p>
 !! end
 
@@ -13091,8 +13471,8 @@ parsoid
 [[:File:Foo.png|Bar]]
 !! html
 <p>
-<a rel="mw:WikiLink" href="File:Foo.png" title="File:Foo.png">File:Foo.png</a>
-<a rel="mw:WikiLink" href="File:Foo.png" title="File:Foo.png">Bar</a>
+<a rel="mw:WikiLink" href="./File:Foo.png" title="File:Foo.png">File:Foo.png</a>
+<a rel="mw:WikiLink" href="./File:Foo.png" title="File:Foo.png">Bar</a>
 </p>
 !! end
 
@@ -13120,14 +13500,20 @@ parsoid=html2wt
 
 !! test
 Parsoid: Defaultsort
-!! options
-parsoid
 !! wikitext
 {{DEFAULTSORT:Foo}}
-!! html
+!! html/parsoid
 <meta property="mw:PageProp/categorydefaultsort" content="Foo"/>
 !! end
 
+!! test
+Parsoid: Defaultsort (template-generated)
+!! wikitext
+{{{{echo|DEFAULTSORT}}:Foo}}
+!! html/parsoid
+<meta property="mw:PageProp/categorydefaultsort" content="Foo" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"dsr":[0,28,null,null],"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"{{echo|DEFAULTSORT}}:Foo"},"params":{},"i":0}}]}'/>
+!! end
+
 ###
 ### Inter-language links
 ###
@@ -13236,6 +13622,31 @@ Some text
 
 !! end
 
+!! test
+TOC anchors don't collide
+!! wikitext
+__FORCETOC__
+== Headline 2 ==
+== Headline ==
+== Headline 2 ==
+== Headline ==
+!! html
+<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#Headline_2"><span class="tocnumber">1</span> <span class="toctext">Headline 2</span></a></li>
+<li class="toclevel-1 tocsection-2"><a href="#Headline"><span class="tocnumber">2</span> <span class="toctext">Headline</span></a></li>
+<li class="toclevel-1 tocsection-3"><a href="#Headline_2_2"><span class="tocnumber">3</span> <span class="toctext">Headline 2</span></a></li>
+<li class="toclevel-1 tocsection-4"><a href="#Headline_3"><span class="tocnumber">4</span> <span class="toctext">Headline</span></a></li>
+</ul>
+</div>
+
+<h2><span class="mw-headline" id="Headline_2">Headline 2</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: Headline 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="Headline">Headline</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Headline">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="Headline_2_2">Headline 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Headline 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="Headline_3">Headline</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Headline">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+
+!! end
+
 # perl -e 'print "="x$_," Level $_ heading","="x$_,"\n" for 1..10'
 !! test
 Handling of sections up to level 6 and beyond
@@ -13295,7 +13706,7 @@ Handling of sections up to level 6 and beyond
 !! end
 
 !! test
-TOC regression (bug 9764)
+TOC regression (T11764)
 !! wikitext
 == title 1 ==
 === title 1.1 ===
@@ -13467,7 +13878,7 @@ Link inside a section heading
 !! end
 
 !! test
-TOC regression (bug 12077)
+TOC regression (T14077)
 !! wikitext
 __TOC__
 == title 1 ==
@@ -13499,7 +13910,7 @@ http://example.com [[File:Foobar.jpg]]
 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a> <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" height="220" width="1941"/></a></span></p>
+<p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a> <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></p>
 !!end
 
 !! test
@@ -13551,7 +13962,7 @@ section 5
 </ul>
 </div>
 
-<h2><span class="mw-headline" id="text_.3E_text">text &gt; text</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: text > text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="text_.3E_text">text &gt; text</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: text &gt; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <p>section 1
 </p>
 <h2><span class="mw-headline" id="text_.3C_text">text &lt; text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: text &lt; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
@@ -13727,7 +14138,7 @@ http://example.com[[File:Foobar.jpg]]
 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a><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" height="220" width="1941"/></a></span></p>
+<p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a><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></p>
 !!end
 
 !! test
@@ -14092,16 +14503,17 @@ Media link with text
 !! end
 
 # FIXME: this is still bad HTML tag nesting
+# FIXME: doBlockLevels won't wrap this in a paragraph because it contains a div
 !! test
 Media link with nasty text
-fixme: doBlockLevels won't wrap this in a paragraph because it contains a div
 !! wikitext
 [[Media:Foobar.jpg|Safe Link<div style=display:none>" onmouseover="alert(document.cookie)" onfoo="</div>]]
 !! html
 <a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link&lt;div style="display:none"&gt;" onmouseover="alert(document.cookie)" onfoo="&lt;/div&gt;</a>
 
 !! html+tidy
-<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link&lt;div style="display:none"&gt;" onmouseover="alert(document.cookie)" onfoo="&lt;/div&gt;</a></p>
+<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link</a></p>
+<div style="display:none">" onmouseover="alert(document.cookie)" onfoo="</div>
 !! end
 
 !! test
@@ -14121,7 +14533,7 @@ Image link to nonexistent file (bug 1850 - good)
 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="File:No such.jpg">File:No such.jpg</a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="File:No_such.jpg"><img resource="./File:No_such.jpg" src="./Special:FilePath/No_such.jpg" height="220" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="./File:No_such.jpg"><img resource="./File:No_such.jpg" src="./Special:FilePath/No_such.jpg" height="220" width="220"/></a></span></p>
 !! end
 
 !! test
@@ -15315,6 +15727,7 @@ http://<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <li class="toclevel-1 tocsection-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
 </ul>
 </div>
+<p></p>
 !! end
 
 !! test
@@ -16724,19 +17137,19 @@ image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 105px"><div style="width: 105px">
-                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
+                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p>some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
 </p>
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 105px"><div style="width: 105px">
-                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
+                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 105px"><div style="width: 105px">
-                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a foo-bar." src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
+                       <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a foo-bar." src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p>Blabla|blabla.
 </p>
@@ -16757,17 +17170,17 @@ image:foobar.jpg|link=Main Page#section|caption
 !! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p>caption
 </p>
@@ -16787,14 +17200,14 @@ File:foobar.jpg|{{Test|unamedParam|alt=param}}|alt=galleryalt
 !! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="desc"><img alt="inneralt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" width="20" height="2" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/30px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/40px-Foobar.jpg 2x" /></a>
 </p>
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p>This is a test template
 </p>
@@ -16831,7 +17244,7 @@ caption
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p><a href="/wiki/File:Foobar.jpg" title="File:Foobar.jpg">Foobar.jpg</a><br />
 some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
@@ -16839,7 +17252,7 @@ some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p><a href="/wiki/File:Foobar.jpg" title="File:Foobar.jpg">Foobar.jpg</a><br />
 </p>
@@ -16871,12 +17284,12 @@ foobar.jpg
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
                        </div>
                </div></li>
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
                        </div>
                </div></li>
@@ -17100,7 +17513,7 @@ djvu
 <p><a href="/index.php?title=File:LoremIpsum.djvu&amp;page=2" class="image"><img alt="LoremIpsum.djvu" src="http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-2480px-LoremIpsum.djvu.jpg" width="2480" height="3508" srcset="http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-3720px-LoremIpsum.djvu.jpg 1.5x, http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-4960px-LoremIpsum.djvu.jpg 2x" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"page","ak":"page=2"}]}'><a href="./File:LoremIpsum.djvu" data-parsoid='{"a":{"href":"./File:LoremIpsum.djvu"},"sa":{}}'><img resource="./File:LoremIpsum.djvu" src="//example.com/images/5/5f/LoremIpsum.djvu" height="3508" width="2480" data-parsoid='{"a":{"resource":"./File:LoremIpsum.djvu","height":"3508","width":"2480"},"sa":{"resource":"File:LoremIpsum.djvu"}}'/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"page","ak":"page=2"}]}'><a href="./File:LoremIpsum.djvu" data-parsoid='{"a":{"href":"./File:LoremIpsum.djvu"},"sa":{}}'><img resource="./File:LoremIpsum.djvu" src="//example.com/images/5/5f/LoremIpsum.djvu" data-file-width="2480" data-file-height="3508" data-file-type="bitmap" height="3508" width="2480" data-parsoid='{"a":{"resource":"./File:LoremIpsum.djvu","height":"3508","width":"2480"},"sa":{"resource":"File:LoremIpsum.djvu"}}'/></a></span></p>
 !! end
 
 !! test
@@ -17135,7 +17548,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" 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/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>
 !! end
 
 !! test
@@ -17732,7 +18145,7 @@ language=sr variant=sr-ec
 !! wikitext
 == -{Naslov}- ==
 !! html
-<h2><span class="mw-headline" id="-.7BNaslov.7D-">Naslov</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="Уредите одељак „Naslov“">уреди</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="-.7BNaslov.7D-">Naslov</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="Уреди одељак „Naslov“">уреди</a><span class="mw-editsection-bracket">]</span></span></h2>
 
 !! end
 
@@ -18641,7 +19054,7 @@ Bad images - basic functionality
 [[File:Bad.jpg]]
 !! DISABLED/html/php
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"bad-image","message":"This image is blacklisted in this context."}]}'><a href="File:Bad.jpg"><img resource="./File:Bad.jpg" height="220" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"bad-image","message":"This image is blacklisted in this context."}]}'><a href="./File:Bad.jpg"><img resource="./File:Bad.jpg" height="220" width="220"/></a></span></p>
 !! end
 
 !! test
@@ -18656,7 +19069,7 @@ Bar foo
 </p>
 !! html/parsoid
 <p>Foo bar
-<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"bad-image","message":"This image is blacklisted in this context."}]}'><a href="File:Bad.jpg"><img resource="./File:Bad.jpg" height="220" width="220"/></a></span>
+<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"bad-image","message":"This image is blacklisted in this context."}]}'><a href="./File:Bad.jpg"><img resource="./File:Bad.jpg" height="220" width="220"/></a></span>
 Bar foo</p>
 !! end
 
@@ -18792,6 +19205,82 @@ this is not the the title
 </p>
 !! end
 
+!! test
+Page status indicators: Empty name is invalid
+!! options
+showindicators
+!! wikitext
+<indicator name=" "></indicator>
+<indicator></indicator>
+!! html
+<p><span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
+<span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
+</p>
+!! end
+
+!! test
+Page status indicators: Weird syntaxes that are okay
+!! options
+showindicators
+!! wikitext
+<indicator name="empty" />
+<indicator name></indicator>
+!! html
+empty=
+name=
+<p><br />
+</p>
+!! end
+
+!! test
+Page status indicators: Torture test
+!! options
+showindicators
+!! wikitext
+<indicator name="01">hello world</indicator>
+<indicator name="02">[[Main Page]]</indicator>
+<indicator name="03">[[File:Foobar.jpg|25px|link=]]</indicator>
+<indicator name="04">[[File:Foobar.jpg|25px]]</indicator>
+<indicator name="05">* foo
+* bar</indicator>
+<indicator name="06"><nowiki>foo</nowiki></indicator>
+<indicator name="07"> Preformatted</indicator>
+<indicator name="08"><div>Broken tag</indicator>
+<indicator name="09">{| class=wikitable
+| cell
+|}</indicator>
+<indicator name="10">Two
+
+paragraphs</indicator>
+!! html
+01=hello world
+02=<a href="/wiki/Main_Page" title="Main Page">Main Page</a>
+03=<img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/25px-Foobar.jpg" width="25" height="3" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/38px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg 2x" />
+04=<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/25px-Foobar.jpg" width="25" height="3" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/38px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg 2x" /></a>
+05=<ul><li> foo</li>
+<li> bar</li></ul>
+
+06=foo
+07=<pre>Preformatted
+</pre>
+08=<div>Broken tag</div>
+
+09=<table class="wikitable">
+<tr>
+<td> cell
+</td></tr></table>
+
+10=<p>Two
+</p><p>paragraphs
+</p>
+<p><br />
+</p><p><br />
+</p><p><br />
+</p><p><br />
+</p><p><br />
+</p>
+!! end
+
 !! test
 preload: check <noinclude> and <includeonly>
 !! options
@@ -18879,7 +19368,7 @@ 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:+%" 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>
 !! end
 
 !! test
@@ -18892,8 +19381,8 @@ Special characters in embedded file links (bug 27679)
 <a href="/index.php?title=Special:Upload&amp;wpDestFile=Does_not_exist.jpg" class="new" title="File:Does not exist.jpg">Title with &amp; ampersand</a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="File:Contains_&amp;_ampersand.jpg"><img resource="./File:Contains_&amp;_ampersand.jpg" src="./Special:FilePath/Contains_&amp;_ampersand.jpg" height="220" width="220"/></a></span>
-<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"Title with &amp; ampersand"}'><a href="File:Does_not_exist.jpg"><img resource="./File:Does_not_exist.jpg" src="./Special:FilePath/Does_not_exist.jpg" height="220" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="./File:Contains_&amp;_ampersand.jpg"><img resource="./File:Contains_&amp;_ampersand.jpg" src="./Special:FilePath/Contains_&amp;_ampersand.jpg" height="220" width="220"/></a></span>
+<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"Title with &amp; ampersand"}'><a href="./File:Does_not_exist.jpg"><img resource="./File:Does_not_exist.jpg" src="./Special:FilePath/Does_not_exist.jpg" height="220" width="220"/></a></span></p>
 !! end
 
 !! test
@@ -19087,6 +19576,7 @@ __TOC__
 <h2><span class="mw-headline" id="Quote"><blockquote>Quote</blockquote></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Quote">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
 !! html+tidy
+<p></p>
 <div id="toc" class="toc">
 <div id="toctitle">
 <h2>Contents</h2>
@@ -19095,6 +19585,7 @@ __TOC__
 <li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
 </ul>
 </div>
+<p></p>
 <h2><span class="mw-headline" id="Quote"></span></h2>
 <blockquote>
 <p><span class="mw-headline" id="Quote">Quote</span></p>
@@ -19143,6 +19634,7 @@ __TOC__
 <h2><span class="mw-headline" id="Foo_Bar_2"><i>Foo</i> <blockquote>Bar</blockquote></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
 !! html+tidy
+<p></p>
 <div id="toc" class="toc">
 <div id="toctitle">
 <h2>Contents</h2>
@@ -19152,6 +19644,7 @@ __TOC__
 <li class="toclevel-1 tocsection-2"><a href="#Foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext"><i>Foo</i> Bar</span></a></li>
 </ul>
 </div>
+<p></p>
 <h2><span class="mw-headline" id="Foo_Bar"><i>Foo</i> <b>Bar</b></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: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span class="mw-headline" id="Foo_Bar_2"><i>Foo</i></span></h2>
 <blockquote>
@@ -19176,7 +19669,7 @@ __TOC__
 </div>
 
 <h2><span class="mw-headline" id="Hello"><sup class="in-h2">Hello</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Hello">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<h2><span class="mw-headline" id="b.22.3EEvilbye"><sup> b"&gt;Evilbye</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;>Evilbye">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="b.22.3EEvilbye"><sup> b"&gt;Evilbye</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;&gt;Evilbye">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
 !! end
 
@@ -19228,6 +19721,37 @@ __TOC__
 
 !! end
 
+# Note that the html output does not have the <p></p>, but the
+# html+tidy output *does*.  This is because the empty <p></p> is
+# removed by the sanitizer, but only when tidy is *not* enabled (!).
+!! test
+Empty <p> tag in TOC, removed by Sanitizer (T92892)
+!! wikitext
+__TOC__
+== x ==
+!! html
+<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#x"><span class="tocnumber">1</span> <span class="toctext">x</span></a></li>
+</ul>
+</div>
+
+<h2><span class="mw-headline" id="x">x</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: x">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+
+!! html+tidy
+<p></p>
+<div id="toc" class="toc">
+<div id="toctitle">
+<h2>Contents</h2>
+</div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#x"><span class="tocnumber">1</span> <span class="toctext">x</span></a></li>
+</ul>
+</div>
+<p></p>
+<h2><span class="mw-headline" id="x">x</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: x">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+!! end
+
 !! article
 MediaWiki:Bug32057
 !! text
@@ -19397,7 +19921,7 @@ File:foobar.jpg|caption|alt=galleryalt|link=InterWikiLink
 !! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/InterWikiLink"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/InterWikiLink"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p>caption
 </p>
@@ -19416,7 +19940,7 @@ File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
 !! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="http://www.example.org"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="http://www.example.org"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p>caption
 </p>
@@ -19435,7 +19959,7 @@ File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascri
 !! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/%22_onclick%3D%22alert(%27malicious_javascript_code!%27);"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/%22_onclick%3D%22alert(%27malicious_javascript_code!%27);"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
 <p>caption
 </p>
@@ -19454,7 +19978,7 @@ File:foobar.jpg|link=<
 !! html
 <ul class="gallery mw-gallery-traditional">
                <li class="gallerybox" style="width: 155px"><div style="width: 155px">
-                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
                        <div class="gallerytext">
                        </div>
                </div></li>
@@ -19598,7 +20122,7 @@ parsoid=wt2html,wt2wt
 <table>
 <tbody><tr><td>
 <small>
-<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" height="220" width="1941"></a><figcaption>Test</figcaption></figure>
+<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><figcaption>Test</figcaption></figure>
 </small>
 </td></tr>
 </tbody></table>
@@ -19614,9 +20138,9 @@ 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" 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/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>
 <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" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></figure></small>
 !! end
 
 #### ----------------------------------------------------------------
@@ -19633,10 +20157,16 @@ parsoid
 A <ref>foo</ref>
 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":{"html":"foo"},"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":{"html":"foo"},"attrs":{"name":"x"}}'><a href="#cite_note-x-2">[2]</a></span>
+<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>
+</ol>
 !!end
 
 !!test
@@ -19646,9 +20176,13 @@ parsoid
 !! wikitext
 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":{"html":"foo"},"attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span>
+<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>
+</ol>
 !!end
 
 !!test
@@ -19659,10 +20193,14 @@ parsoid
 A <ref name="x">foo</ref>
 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":{"html":"foo"},"attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span>
+<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>
+</ol>
 !!end
 
 # NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly)
@@ -19672,8 +20210,12 @@ Ref: 4. 'constructor' should be accepted as a valid ref-name
 parsoid
 !! wikitext
 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":{"html":"foo"},"attrs":{"name":"constructor"}}'><a href="#cite_note-constructor-1">[1]</a></span></p>
+<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>
+</ol>
 !!end
 
 !!test
@@ -19687,11 +20229,11 @@ 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":{"html":"This is a &lt;b data-parsoid=&#39;{\"dsr\":[19,40,3,3]}&#39;>&lt;a rel=\"mw:WikiLink\" href=\"./Bolded_link\" title=\"Bolded link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Bolded_link\"},\"sa\":{\"href\":\"bolded link\"},\"dsr\":[22,37,2,2]}&#39;>bolded link&lt;/a>&lt;/b> and this is a &lt;span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[55,76,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"transclusion\"}},\"i\":0}}]}&#39;>transclusion&lt;/span>\n"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<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="#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> 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>
-</li>
+<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>
+</span></li>
 </ol>
 !!end
 
@@ -19708,13 +20250,13 @@ 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":{"html":"foo\n bar\n baz\n"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<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> foo
+<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
  baz
-</li>
+</span></li>
 </ol>
 !!end
 
@@ -19738,10 +20280,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":{"html":"foo\n\nbar\n\n\nbaz\n\n\n\nbooz\n"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<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> foo
+<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
 
@@ -19751,7 +20293,7 @@ baz
 
 
 booz
-</li>
+</span></li>
 </ol>
 !!end
 
@@ -19764,9 +20306,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":{"html":"foo &lt;span typeof=\"mw:Nowiki\" data-parsoid=&#39;{\"src\":\"{{\",\"dsr\":[12,14,0,0]}&#39;>{{&lt;/span>echo|"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C<span typeof="mw:Nowiki">}}</span></p>
+<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> foo <span typeof="mw:Nowiki">{{</span>echo|</li>
+<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>
 </ol>
 !!end
 
@@ -19778,9 +20320,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":{"html":"foo &lt;!---->"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C</p>
+<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> foo <!----></li>
+<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>
 !!end
 
@@ -19793,11 +20335,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":{"html":"&lt;b data-parsoid=&#39;{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[8,16,3,0]}&#39;> foo &lt;/b>"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C</p>
+<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> <b data-parsoid='{"stx":"html","autoInsertedEnd":true}'> foo </b></li>
+<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>
 !!end
 
@@ -19808,9 +20350,14 @@ parsoid
 !! wikitext
 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":{"html":"foo"},"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":{"html":"bar"},"attrs":{}}'><a href="#cite_note-2">[2]</a></span> D</p>
+<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>
+</ol>
 !!end
 
 !!test
@@ -19824,6 +20371,7 @@ 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>
 
 <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>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>
 !!end
 
 !!test
@@ -19842,9 +20393,15 @@ parsoid
 <ref>foo</ref> A
 <ref>bar
 </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":{"html":"foo"},"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":{"html":"bar\n"},"attrs":{}}'><a href="#cite_note-2">[2]</a></span> B</p>
+<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
+</span></li>
+</ol>
 !!end
 
 !!test
@@ -19856,10 +20413,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":{"html":"foo &amp;lt;ref>bar&amp;lt;/ref> baz"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
-
+<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>
 <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> foo &lt;ref>bar&lt;/ref> baz</li>
+<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>
 !!end
 
@@ -19873,10 +20430,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":{"html":"foo"},"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":{"html":"bar"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span></p>
+<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>
 
-<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> foo</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> bar</li>
+<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>
 !!end
 
@@ -19890,10 +20447,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":{"html":"foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
-
+<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> foo</li></ol>
+<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>
 !!end
 
 !!test
@@ -19905,11 +20461,12 @@ 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":{"html":"foo"},"attrs":{"name":"a b"}}'><a href="#cite_note-a_b-1">[1]</a></span>
+<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>
 
-<ol class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
-<li id="cite_note-a_b-1"><span rel="mw:referencedBy"><a href="#cite_ref-a_b_1-0">↑</a></span> foo</li>
+<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>
 !!end
 
 !!test
@@ -19921,11 +20478,12 @@ 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":{"html":"foo"},"attrs":{"name":"{{echo|a}}"}}'><a href="#cite_note-.7B.7Becho.7Ca.7D.7D-1">[1]</a></span>
+<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>
 
-<ol class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
-<li 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> foo</li>
+<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>
 !!end
 
 !!test
@@ -19937,9 +20495,29 @@ 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":{"html":"foo"},"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="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>
+<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>
+!!end
+
+!!test
+Ref: 20. ref-tags with identical names but different content should keep it
+!!options
+parsoid
+!! wikitext
+A <ref name="foo">Foo one</ref>
+B <ref name="foo">Foo two</ref>
+C <ref name="foo" />
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt10" 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> foo</li>
+<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>
+
+<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>
 !!end
 
@@ -19950,7 +20528,7 @@ parsoid
 !! wikitext
 <references />
 !! html
-<ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'></ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
 !!end
 
 !!test
@@ -19960,13 +20538,24 @@ parsoid
 !! wikitext
 A <ref group="a">foo</ref>
 B <ref group="b">bar</ref>
+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":{"html":"foo"},"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":{"html":"bar"},"attrs":{"group":"b"}}'><a href="#cite_note-2">[b 1]</a></span></p>
+<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>
 
-<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> foo</li>
+<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>
+<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>
+<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>
 !!end
 
@@ -19983,14 +20572,15 @@ 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":{"html":"foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<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> foo</li>
+<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>B <span about="#mwt6" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}'><a href="#cite_note-2">[1]</a></span></p>
+<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>
 
-<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> bar</li>
+<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>
 !!end
 
@@ -20008,15 +20598,15 @@ 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":{"html":"afoo"},"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":{"html":"bfoo"},"attrs":{}}'><a href="#cite_note-2">[1]</a></span></p>
+<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>
 
-<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> afoo</li>
+<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>
 
-<p>C <span about="#mwt8" class="reference" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"cfoo"},"attrs":{}}'><a href="#cite_note-3">[2]</a></span></p>
+<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>
 
-<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> bfoo</li><li about="#cite_note-3" id="cite_note-3"><span rel="mw:referencedBy"><a href="#cite_ref-3">↑</a></span> cfoo</li>
+<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>
 !!end
 
@@ -20034,10 +20624,10 @@ 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":{"html":"bar"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span></p>
+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>
 
 
-<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;{\"src\":\"&amp;lt;ref name=\\\"a\\\">foo&amp;lt;/ref>\",\"dsr\":[59,82,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"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> foo</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> bar</li>
+<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>
 !!end
 
@@ -20048,7 +20638,8 @@ 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":{"html":"Foo"},"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> Foo</li></ol>
+<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>
+</ol>
 !!end
 
 !! test
@@ -20065,22 +20656,81 @@ B <ref group="X" name="b" />
 <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":{"html":"foo bar for a"},"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></p>
+<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>
+</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> foo bar for a</li></ol>
+<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>
 
-<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;{\"src\":\"&amp;lt;ref name=\\\"b\\\">foo&amp;lt;/ref>\",\"dsr\":[96,119,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"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> foo</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>
 !! 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>
+</ol>
+!!end
+
+# This test only works in wt2html now as the <references /> are always generated
+# unless selser is active. Once T72722 is fixed, we should add a changes test
+# here to ensure that unrelated changes don't add the new <references /> in
+# 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>
+</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>
+!! end
+
+!! test
+References: 10. New <references/> shouldn't be added for unrelated edits.
+!! options
+parsoid={
+  "modes": ["selser"],
+  "changes": [["#x", "remove"]],
+  "selser": "noauto"
+}
+!! wikitext
+Unrelated text<span id="x"> that's going to disappear</span>.
+A <ref>foo</ref>
+!! wikitext/edited
+Unrelated text.
+A <ref>foo</ref>
+!!end
+
 !! 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":{"html":"hi"},"attrs":{"name":"test &amp;amp; me"}}'><a href="#cite_note-test_.26_me-1">[1]</a></span></p>
+<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>
+</ol>
 !! end
 
 # This test is wt2html only because we're permitting the serializer to produce
@@ -20094,11 +20744,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":{"html":"foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
-
-
+<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> foo</li></ol>
+<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>
 !! end
 
 !! test
@@ -20112,6 +20760,22 @@ foo
 foo<ol class="references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
 !! end
 
+#### ----------------------------------------------------------------
+#### Parsoid-only testing of Parsoid's impl of LST
+#### Not implemented yet, see
+#### https://www.mediawiki.org/wiki/Parsoid/HTML_based_LST
+#### ----------------------------------------------------------------
+
+!!test
+LST Sections: 1. Simple section start and end
+!! wikitext
+<section begin="2011-05-16" />
+<section end="2014-04-10 (MW 1.23wmf22)" />
+!! html/parsoid
+<p><meta typeof="mw:Extension/LabeledSectionTransclusion/begin" content="2011-05-16"/>
+<meta typeof="mw:Extension/LabeledSectionTransclusion/end" content="2014-04-10 (MW 1.23wmf22)"/></p>
+!! end
+
 #--------- Test stripping of empty nodes in template content ----------
 !!test
 Empty LI and TR nodes should be stripped from template content
@@ -20119,11 +20783,11 @@ Empty LI and TR nodes should be stripped from template content
 {{EmptyLITest}}
 {{EmptyTRTest}}
 !!html/parsoid
-<ul typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyLITest","href":"./Template:EmptyLITest"},"params":{},"i":0}}]}'>
+<ul about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyLITest","href":"./Template:EmptyLITest"},"params":{},"i":0}}]}'>
 <li>a</li>
 <li>b</li>
 </ul>
-<table typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRTest","href":"./Template:EmptyTRTest"},"params":{},"i":0}}]}'>
+<table about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRTest","href":"./Template:EmptyTRTest"},"params":{},"i":0}}]}'>
 <tbody>
 <tr>
 <td>foo</td>
@@ -20167,7 +20831,7 @@ Empty TR nodes should not be stripped if they have any attributes set
 !!wikitext
 {{EmptyTRWithHTMLAttrTest}}
 !!html/parsoid
-<table typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRWithHTMLAttrTest","href":"./Template:EmptyTRWithHTMLAttrTest"},"params":{},"i":0}}]}'>
+<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRWithHTMLAttrTest","href":"./Template:EmptyTRWithHTMLAttrTest"},"params":{},"i":0}}]}'>
 <tr align="center"></tr>
 <tr><td>foo</td></tr>
 <tr align="center"></tr>
@@ -21361,14 +22025,18 @@ parsoid=html2wt,wt2wt
 '''foo'' <ref>test</ref>
 '''foo'' <div title="name">test</div>
 '''foo'' and <br> bar
+<references />
 !! html
 '<i>a</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
 <i>a'</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
 <i>a'</i> foo <b><a rel="mw:WikiLink" href="Bar" title="Bar" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[bar]]"}},"i":0}}]}'>bar</a></b>
 <a rel="mw:WikiLink" href="Foo" title="Foo">foo</a> x'<i><a href="Bar" rel="mw:WikiLink" title="Bar">bar</a></i>
-'<i>foo</i> <span class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"test"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
+'<i>foo</i> <span class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
 '<i>foo</i> <div title="name">test</div>
 '<i>foo</i> and <br data-parsoid='{"stx":"html","noClose":true}'/> bar
+<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">test</span></li>
+</ol>
 !! end
 
 !! test
@@ -21482,8 +22150,13 @@ parsoid
 !! wikitext
 foo <ref>''a''
  b</ref>
+<references />
 !! html
-<p>foo <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"&lt;i data-parsoid=&#39;{\"dsr\":[9,14,2,2]}&#39;>a&lt;/i>\n b"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<p>foo <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><i data-parsoid='{"dsr":[9,14,2,2]}'>a</i>
+ b</span></li>
+</ol>
 !! end
 
 !! test
@@ -21511,9 +22184,8 @@ parsoid
 parsoid
 !! wikitext
  [[File:Foobar.jpg|thumb|caption]]
-!! html
 !! 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" 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>
 !! end
 
 !! test
@@ -21570,12 +22242,14 @@ parsoid
 !! test
 2. other tags
 !! wikitext
-<nowiki><div>foo</div>
-<div style="color:red">foo</div></nowiki>
+* <nowiki><div>foo</div></nowiki>
+* <nowiki><div style="color:red">foo</div></nowiki>
+* <nowiki><td></nowiki>
 !! html
-<p>&lt;div&gt;foo&lt;/div&gt;
-&lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;
-</p>
+<ul><li> &lt;div&gt;foo&lt;/div&gt;</li>
+<li> &lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;</li>
+<li> &lt;td&gt;</li></ul>
+
 !! end
 
 !! test
@@ -21655,18 +22329,6 @@ a>b
 </p>
 !! end
 
-
-# This was a bug in the PHP parser (see bug 17663 and its dups,
-# https://bugzilla.wikimedia.org/show_bug.cgi?id=17663)
-!! test
-Tag names followed by punctuation should not be recognized as tags
-!! wikitext
-<s.ome> text
-!! html
-<p>&lt;s.ome&gt; text
-</p>
-!! end
-
 !! test
 HTML tag with necessary entities in attributes
 !! wikitext
@@ -22034,8 +22696,8 @@ Multi-line image caption generated by templates with/without trailing newlines
 [[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}]]
 [[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}\n\n]]
 !! html/parsoid
-<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" height="34" width="300"/></a><figcaption>foo\n<span about="#mwt9" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"A"}},"i":0}}]}'>A</span>\n<span about="#mwt10" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"B"}},"i":0}}]}'>B</span>\n<span about="#mwt11" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"C"}},"i":0}}]}'>C</span></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/300px-Foobar.jpg" height="34" width="300"/></a><figcaption>foo\n<span about="#mwt12" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"A"}},"i":0}}]}'>A</span>\n<span about="#mwt13" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"B"}},"i":0}}]}'>B</span>\n<span about="#mwt14" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"C"}},"i":0}}]}'>C</span>\n\n</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/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a><figcaption>foo\n<span about="#mwt9" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"A"}},"i":0}}]}'>A</span>\n<span about="#mwt10" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"B"}},"i":0}}]}'>B</span>\n<span about="#mwt11" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"C"}},"i":0}}]}'>C</span></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/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a><figcaption>foo\n<span about="#mwt12" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"A"}},"i":0}}]}'>A</span>\n<span about="#mwt13" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"B"}},"i":0}}]}'>B</span>\n<span about="#mwt14" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"C"}},"i":0}}]}'>C</span>\n\n</figcaption></figure>
 !!end
 
 !! test
@@ -22045,12 +22707,12 @@ parsoid=html2wt
 !! html
 <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>
+<link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{}'/><h1>new heading</h1>
 !! wikitext
 <includeonly>foo</includeonly>
 new para
 
-[[./Category:Foo]]
+[[Category:Foo]]
 
 = new heading =
 !! end
@@ -22368,6 +23030,19 @@ parsoid=html2wt
 [[Foo]]
 !! end
 
+# See T93839
+!! test
+New wikilinks should be serialized properly
+!! options
+parsoid=html2wt
+!! html
+<a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{}'>Foo</a>
+<a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>
+!! wikitext
+[[Foo]]
+[[Foo]]
+!! end
+
 !! test
 New wiki links (href variations)
 !! options
@@ -22412,6 +23087,21 @@ parsoid=html2wt
 [[Category:Toxine bactérienne]]
 !! end
 
+!! test
+New sol transparent links don't need indent-pre nowiki protection
+!! options
+parsoid=html2wt
+language=de
+!! html
+         <link rel="mw:PageProp/redirect" href="./Main_Page">
+<!-- this is good  -->    <link rel="mw:PageProp/Category" href="./Category:Good" />
+<!-- this is great -->    <link rel="mw:PageProp/Category" href="./Kategorie:Great" />
+!! wikitext
+         #WEITERLEITUNG [[Main Page]]
+<!-- this is good  -->    [[Category:Good]]
+<!-- this is great -->    [[Kategorie:Great]]
+!! end
+
 !! test
 New interlanguage links (href variations)
 !! options
@@ -22560,7 +23250,7 @@ parsoid
 !! wikitext
 [[File:Foobar.jpg|thumb|alt=|bar]]
 !! html
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"alt","ak":"alt="},{"ck":"caption","ak":"bar"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img alt="" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" height="25" width="220" data-parsoid='{"a":{"alt":"","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=","resource":"File:Foobar.jpg"}}'/></a><figcaption>bar</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"alt","ak":"alt="},{"ck":"caption","ak":"bar"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img alt="" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"alt":"","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=","resource":"File:Foobar.jpg"}}'/></a><figcaption>bar</figcaption></figure>
 !! end
 
 #!! test
@@ -22569,7 +23259,7 @@ parsoid
 #parsoid=html2wt
 #language=ar
 #!! html
-#<figure class="mw-default-size mw-halign-right" typeof="mw:Image/Thumb"><a href="Imagen:Foobar.jpg"><img resource="./Imagen:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="20" width="180"/></a></figure>
+#<figure class="mw-default-size mw-halign-right" typeof="mw:Image/Thumb"><a href="Imagen:Foobar.jpg"><img resource="./Imagen:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="20" width="180"/></a></figure>
 #!! wikitext
 #[[Imagen:Foobar.jpg|derecha|miniaturadeimagen]]
 #!! end
@@ -22582,7 +23272,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" 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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="17" width="150"/></a></figure>
 <p>456</p>
 !!end
 
@@ -22594,7 +23284,7 @@ Image: New block level image should have \n before and after (existing content)
 456
 !! html/parsoid
 <p>123</p>
-<figure class="mw-halign-right" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"right","ak":"right"},{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"150x150px"}]}'><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/150px-Foobar.jpg" height="17" width="150" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"17","width":"150"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure>
+<figure class="mw-halign-right" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"right","ak":"right"},{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"150x150px"}]}'><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/150px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="17" width="150" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"17","width":"150"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure>
 <p>456</p>
 !!end
 
@@ -22607,9 +23297,9 @@ parsoid
 [[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" 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" 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" height="57" width="500"/></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="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>
 !!end
 
 !! test
@@ -22619,7 +23309,7 @@ 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" height="57" width="500"/></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/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="57" width="500"/></a></span></p>
 !!end
 
 !! test
@@ -22628,7 +23318,7 @@ Image: from basic HTML (1)
 parsoid=html2wt
 !! html/parsoid
 <span typeof="mw:Image">
-  <img src="File:Foobar.jpg" width=100 height=100 alt="Alt">
+  <img src="./File:Foobar.jpg" width=100 height=100 alt="Alt">
 </span>
 !! wikitext
 [[File:Foobar.jpg|link=|alt=Alt|100x100px]]
@@ -22639,7 +23329,7 @@ Image: from basic HTML (2)
 !! options
 parsoid=html2wt
 !! html/parsoid
-<img src="File:Foobar.jpg" width=100 height=100 alt="Alt">
+<img src="./File:Foobar.jpg" width=100 height=100 alt="Alt">
 !! wikitext
 [[File:Foobar.jpg|link=|alt=Alt|100x100px]]
 !! end
@@ -22649,7 +23339,7 @@ Image: from basic HTML (3)
 !! options
 parsoid=html2wt
 !! html/parsoid
-<a href="Main"><img src="File:Foobar.jpg" width=100 height=100 alt="Alt"></a>
+<a href="Main"><img src="./File:Foobar.jpg" width=100 height=100 alt="Alt"></a>
 !! wikitext
 [[File:Foobar.jpg|link=Main|alt=Alt|100x100px]]
 !! end
@@ -22659,7 +23349,7 @@ Image: from basic HTML (4)
 !! options
 parsoid=html2wt
 !! html/parsoid
-<img src="File:Foobar.jpg">
+<img src="./File:Foobar.jpg">
 !! wikitext
 [[File:Foobar.jpg|link=]]
 !! end
@@ -22804,12 +23494,17 @@ 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>
 !! wikitext
 == hello there ==
 [[Category:A1]]
 
 [[Category:A2]]
 == hi pal ==
+
+<!--foo-->  [[Category:A3]]
+== how goes it ==
 !! end
 
 !! test
@@ -22881,6 +23576,22 @@ parsoid=html2wt
 [[Foo''bar''baz]]
 !! end
 
+!! test
+Enforce single-line context in the serializer
+!! options
+parsoid=html2wt
+!! html
+<h2>testing
+123</h2>
+
+<ul><li>asd
+sdf</li></ul>
+!! wikitext
+== testing 123 ==
+
+* asd sdf
+!! end
+
 #-----------------------------
 # I/B quote minimization tests
 #-----------------------------
@@ -22962,7 +23673,7 @@ parsoid=html2wt
 5a. Merge adjacent quote nodes if they've been edited
 !! options
 parsoid={
-  "modes": ["wt2wt"],
+  "modes": ["wt2wt", "selser"],
   "changes": [
     ["p", "contents", "remove", ":contains('b')"]
   ]
@@ -22977,7 +23688,7 @@ parsoid={
 5b. Merge adjacent quote nodes if they've been edited
 !! options
 parsoid={
-  "modes": ["wt2wt"],
+  "modes": ["wt2wt", "selser"],
   "changes": [
     ["#x", "remove"]
   ]
@@ -23164,11 +23875,161 @@ parsoid=html2wt
 <foo />
 !! end
 
+# Note that the <p> wrapping isn't present in PHP parser output
+# The important thing for this test is that P-wrapping doesn't
+# interfere with the <nowiki> protection for leading - in <td>
+# (which isn't necessary for <th>).
+!! test
+T88318: p-wrapped dash in table.
+!! options
+parsoid=html2wt,wt2wt
+!! html/parsoid
+<table><tbody>
+<tr><th><p>-</p></th><th><p>- </p></th></tr>
+<tr><td><p>-</p></td><td><p>- </p></td></tr>
+<tr><td><small>-</small></td><td><br/><p>-</p></td><td><br/>-</td></tr>
+</tbody></table>
+!! wikitext
+{|
+!-
+!- 
+|-
+|<nowiki>-</nowiki>
+|<nowiki>- </nowiki>
+|-
+|<small>-</small>
+|<br>
+-
+|<br>
+-
+|}
+!! html/php+tidy
+<table>
+<tr>
+<th>-</th>
+<th>-</th>
+</tr>
+<tr>
+<td>-</td>
+<td>-</td>
+</tr>
+<tr>
+<td><small>-</small></td>
+<td><br />
+<p>-</p>
+</td>
+<td><br />
+<p>-</p>
+</td>
+</tr>
+</table>
+!! end
+
+!! test
+HTML id attribute with Parsoid-like element ids should not be serialized to wikitext
+!! options
+parsoid=html2wt
+!! html
+<table id='mwAb'>
+<td id='mwAc'>foo</td>
+<td id='serialize-this'>bar</td>
+</table>
+!! wikitext
+{|
+|foo
+| id="serialize-this" |bar
+|}
+!! end
+
+!! test
+Parsoid-like element ids should not be serialized to wikitext unless shadowed
+!! options
+parsoid=html2wt
+!! html
+<div id="mwAQ" data-parsoid='{"stx":"html","a":{"id":"mwAQ"},"sa":{"id":"hello"}}'>ok</div>
+!! wikitext
+<div id="hello">ok</div>
+!! end
+
+!! test
+WTS change modes
+!! options
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    [ "#xyz", "before", "<b>before</b> stuff " ],
+    [ "#xyz", "after", " stuff <i>after</i>" ],
+    [ "#xyz", "html", "x <b>y</b> z" ]
+  ]
+}
+!! wikitext
+<span id="xyz">hello</span>
+!! wikitext/edited
+'''before''' stuff <span id="xyz">x '''y''' z</span> stuff ''after''
+!! end
+
+!! test
+Never serialize a-tag as html, regardless of what data-parsoid has to say
+!! options
+parsoid=html2wt
+!! html
+<a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"html"}'>Foo</a>
+!! wikitext
+[[Foo]]
+!! end
+
 # -----------------------------------------------------------------
 # End of section for Parsoid-only html2wt tests for serialization
 # of new content
 # -----------------------------------------------------------------
 
+# -----------------------------------------------------------------
+# The following section of tests are primarily to spec behavior of
+# the selective serializer. All these tests have manual selser
+# changes. The automated selser changes for all tests handle the
+# wide variation of changes, but these tests here capture specs
+# deterministically.
+# ----------------------------------------------------------------
+
+## T90517
+!! test
+1. Selser: New comments should not be lost
+!! options
+parsoid={
+  "modes": ["selser"],
+  "changes": [
+    [ "#a", "after", "<!--c1-->" ],
+    [ "#b", "before", "<!--c2-->" ]
+  ]
+}
+!! wikitext
+<span id="a">a</span>
+
+<span id="b">b</span>
+!! wikitext/edited
+<span id="a">a</span><!--c1-->
+
+<!--c2--><span id="b">b</span>
+!! end
+
+## T89383
+!! test
+2. Selser: Check for validity of DSR before using it
+!! options
+parsoid={
+  "modes": ["selser"],
+  "changes": [
+    [ "#a", "before", "<meta property='mw:PageProp/displaytitle' content='foo'>" ]
+  ]
+}
+!! wikitext
+<span id="a">a</span>
+!! wikitext/edited
+{{DISPLAYTITLE:foo}}
+<span id="a">a</span>
+!! end
+
+
 TODO:
 more images
 more tables
index c8b3e89..221fc79 100644 (file)
@@ -29,6 +29,7 @@ class ParserTestParserHook {
 
        static function setup( &$parser ) {
                $parser->setHook( 'tag', array( __CLASS__, 'dumpHook' ) );
+               $parser->setHook( 'tåg', array( __CLASS__, 'dumpHook' ) );
                $parser->setHook( 'statictag', array( __CLASS__, 'staticTagHook' ) );
                return true;
        }
index e49c391..72cac05 100644 (file)
@@ -104,7 +104,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                ObjectCache::$instances[CACHE_DB] = new HashBagOStuff;
 
                $needsResetDB = false;
-               $logName = get_class( $this ) . '::' . $this->getName( false );
 
                if ( $this->needsDB() ) {
                        // set up a DB connection for this test to use
@@ -430,7 +429,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        protected function insertPage( $pageName, $text = 'Sample page for unit test.' ) {
                $title = Title::newFromText( $pageName, 0 );
 
-               $user = User::newFromName( 'WikiSysop' );
+               $user = User::newFromName( 'UTSysop' );
                $comment = __METHOD__ . ': Sample page for unit test.';
 
                // Avoid memory leak...?
@@ -501,7 +500,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                                'UTPageSummary',
                                EDIT_NEW,
                                false,
-                               User::newFromName( 'UTSysop' )
+                               $user
                        );
                }
        }
@@ -632,7 +631,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * @param string $msg
         */
        private function assertEmpty2( $value, $msg ) {
-               return $this->assertTrue( $value == '', $msg );
+               $this->assertTrue( $value == '', $msg );
        }
 
        private static function unprefixTable( $tableName ) {
@@ -648,7 +647,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        /**
         * @since 1.18
         *
-        * @param DataBaseBase $db
+        * @param DatabaseBase $db
         *
         * @return array
         */
index 055beb0..deecb31 100644 (file)
@@ -98,10 +98,3 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
 
 class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {
 }
-
-class ResourceLoaderWikiModuleTestModule extends ResourceLoaderWikiModule {
-       // Override expected via PHPUnit mocks and stubs
-       protected function getPages( ResourceLoaderContext $context ) {
-               return array();
-       }
-}
diff --git a/tests/phpunit/data/helpers/WellProtectedClass.php b/tests/phpunit/data/helpers/WellProtectedClass.php
new file mode 100644 (file)
index 0000000..99c7f64
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+
+class WellProtectedClass {
+       protected $property;
+
+       public function __construct() {
+               $this->property = 1;
+       }
+
+       protected function incrementPropertyValue() {
+               $this->property++;
+       }
+
+       public function getProperty() {
+               return $this->property;
+       }
+
+       protected function whatSecondArg( $a, $b = false ) {
+               return $b;
+       }
+}
diff --git a/tests/phpunit/data/normal/UTF-8-test.txt b/tests/phpunit/data/normal/UTF-8-test.txt
deleted file mode 100644 (file)
index abd16f7..0000000
Binary files a/tests/phpunit/data/normal/UTF-8-test.txt and /dev/null differ
diff --git a/tests/phpunit/data/resourceloader/add.gif b/tests/phpunit/data/resourceloader/add.gif
new file mode 100644 (file)
index 0000000..5f454ca
Binary files /dev/null and b/tests/phpunit/data/resourceloader/add.gif differ
diff --git a/tests/phpunit/data/resourceloader/bold-a.svg b/tests/phpunit/data/resourceloader/bold-a.svg
new file mode 100644 (file)
index 0000000..4b82877
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/bold-b.svg b/tests/phpunit/data/resourceloader/bold-b.svg
new file mode 100644 (file)
index 0000000..4f64820
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/bold-f.svg b/tests/phpunit/data/resourceloader/bold-f.svg
new file mode 100644 (file)
index 0000000..357d2e5
--- /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">
+    <g id="bold-f">
+        <path id="f" d="M16 8v-2h-8v12h3v-5h4v-2h-4v-3z"/>
+    </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/help-ltr.svg b/tests/phpunit/data/resourceloader/help-ltr.svg
new file mode 100644 (file)
index 0000000..bb2545c
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="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"/>
+        <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="bottom" d="M11 16h2v2h-2z"/>
+        </g>
+    </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/help-rtl.svg b/tests/phpunit/data/resourceloader/help-rtl.svg
new file mode 100644 (file)
index 0000000..255ae95
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="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"/>
+        <g id="question-mark" transform="translate(24, 0) scale(-1, 1)">
+            <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="bottom" d="M11 16h2v2h-2z"/>
+        </g>
+    </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/next.svg b/tests/phpunit/data/resourceloader/next.svg
new file mode 100644 (file)
index 0000000..02b4e38
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/next_massage.svg b/tests/phpunit/data/resourceloader/next_massage.svg
new file mode 100644 (file)
index 0000000..bbd1a8d
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M 16.5   13.1 l -8.9   8.9 c -0.8  -0.8  -0.8  -2   0  -2.8 l 6.1  -6.1  -6  -6.1 c -0.8  -0.8  -0.8  -2   0  -2.8 l 8.8   8.9 z" id="path108"/>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/prev.svg b/tests/phpunit/data/resourceloader/prev.svg
new file mode 100644 (file)
index 0000000..f31ec09
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="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"/>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/remove.svg b/tests/phpunit/data/resourceloader/remove.svg
new file mode 100644 (file)
index 0000000..6ad7917
--- /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">
+    <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"/>
+    </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/remove_variantize.svg b/tests/phpunit/data/resourceloader/remove_variantize.svg
new file mode 100644 (file)
index 0000000..bcbe871
--- /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"><g fill="red">
+    <g xmlns:default="http://www.w3.org/2000/svg" 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"/>
+    </g>
+</g></svg>
diff --git a/tests/phpunit/data/templates/foobar.mustache b/tests/phpunit/data/templates/foobar.mustache
new file mode 100644 (file)
index 0000000..a042389
--- /dev/null
@@ -0,0 +1 @@
+hello world!
diff --git a/tests/phpunit/data/templates/foobar_args.mustache b/tests/phpunit/data/templates/foobar_args.mustache
new file mode 100644 (file)
index 0000000..cfbe3d0
--- /dev/null
@@ -0,0 +1 @@
+hello {{planet}}!
diff --git a/tests/phpunit/data/xmp/doctype-included.result.php b/tests/phpunit/data/xmp/doctype-included.result.php
new file mode 100644 (file)
index 0000000..9a9cc36
--- /dev/null
@@ -0,0 +1,3 @@
+<?php
+
+$result = array();
diff --git a/tests/phpunit/data/xmp/doctype-included.xmp b/tests/phpunit/data/xmp/doctype-included.xmp
new file mode 100644 (file)
index 0000000..8c94675
--- /dev/null
@@ -0,0 +1,12 @@
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <!DOCTYPE x:xmpmeta [ <!ENTITY lol "lollollollollollollollollollollol"> ]>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core
+ 4.1.3-c001 49.282696, Mon Apr 02 2007 21:16:10        ">
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+<rdf:Description
+ rdf:about=""
+ xmlns:exif="http://ns.adobe.com/exif/1.0/"
+ exif:DigitalZoomRatio="0/10">
+<exif:Flash rdf:parseType='Resource'>
+<exif:Fired>True</exif:Fired> <exif:Return>0</exif:Return> <exif:Mode>1</exif:Mode> <exif:Function>False</exif:Function> <exif:RedEyeMode>False</exif:RedEyeMode></exif:Flash> </rdf:Description> </rdf:RDF> </x:xmpmeta>
+
+<?xpacket end="w"?>
diff --git a/tests/phpunit/data/xmp/doctype-not-included.xmp b/tests/phpunit/data/xmp/doctype-not-included.xmp
new file mode 100644 (file)
index 0000000..9a40b4b
--- /dev/null
@@ -0,0 +1,11 @@
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core
+ 4.1.3-c001 49.282696, Mon Apr 02 2007 21:16:10        ">
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+<rdf:Description
+ rdf:about=""
+ xmlns:exif="http://ns.adobe.com/exif/1.0/"
+ exif:DigitalZoomRatio="0/10">
+<exif:Flash rdf:parseType='Resource'>
+<exif:Fired>True</exif:Fired> <exif:Return>0</exif:Return> <exif:Mode>1</exif:Mode> <exif:Function>False</exif:Function> <exif:RedEyeMode>False</exif:RedEyeMode></exif:Flash> </rdf:Description> </rdf:RDF> </x:xmpmeta>
+
+<?xpacket end="w"?>
index 702fce4..15778e4 100644 (file)
@@ -217,7 +217,8 @@ class EditPageTest extends MediaWikiLangTestCase {
                                EditPage::AS_SUCCESS_NEW_ARTICLE,
                                ''
                        ),
-                       array( 'expected registered MediaWiki: page whose default content is empty not being created if empty',
+                       array( 'expected registered MediaWiki: page whose default content is empty'
+                                       . ' not being created if empty',
                                'MediaWiki:Ipb-default-expiry',
                                'UTSysop',
                                '',
@@ -246,7 +247,9 @@ class EditPageTest extends MediaWikiLangTestCase {
         * @dataProvider provideCreatePages
         * @covers EditPage
         */
-       public function testCreatePage( $desc, $pageTitle, $user, $editText, $expectedCode, $expectedText, $ignoreBlank = false ) {
+       public function testCreatePage(
+               $desc, $pageTitle, $user, $editText, $expectedCode, $expectedText, $ignoreBlank = false
+       ) {
                $edit = array( 'wpTextbox1' => $editText );
                if ( $ignoreBlank ) {
                        $edit['wpIgnoreBlankArticle'] = 1;
index 4a4130e..77b26b3 100644 (file)
@@ -2,6 +2,8 @@
 
 /**
  * Parser-related tests that don't suit for parserTests.txt
+ *
+ * @group Database
  */
 class ExtraParserTest extends MediaWikiTestCase {
 
index 331fb3b..1e30273 100644 (file)
@@ -374,24 +374,6 @@ class GlobalTest extends MediaWikiTestCase {
                }
        }
 
-       /**
-        * @covers ::swap
-        */
-       public function testSwapVarsTest() {
-               $this->hideDeprecated( 'swap' );
-
-               $var1 = 1;
-               $var2 = 2;
-
-               $this->assertEquals( $var1, 1, 'var1 is set originally' );
-               $this->assertEquals( $var2, 2, 'var1 is set originally' );
-
-               swap( $var1, $var2 );
-
-               $this->assertEquals( $var1, 2, 'var1 is swapped' );
-               $this->assertEquals( $var2, 1, 'var2 is swapped' );
-       }
-
        /**
         * @covers ::wfPercent
         */
@@ -691,21 +673,21 @@ class GlobalTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider provideWfShellMaintenanceCmdList
-        * @covers ::wfShellMaintenanceCmd
+        * @dataProvider provideWfShellWikiCmdList
+        * @covers ::wfShellWikiCmd
         */
-       public function testWfShellMaintenanceCmd( $script, $parameters, $options,
+       public function testWfShellWikiCmd( $script, $parameters, $options,
                $expected, $description
        ) {
                if ( wfIsWindows() ) {
                        // Approximation that's good enough for our purposes just now
                        $expected = str_replace( "'", '"', $expected );
                }
-               $actual = wfShellMaintenanceCmd( $script, $parameters, $options );
+               $actual = wfShellWikiCmd( $script, $parameters, $options );
                $this->assertEquals( $expected, $actual, $description );
        }
 
-       public static function provideWfShellMaintenanceCmdList() {
+       public static function provideWfShellWikiCmdList() {
                global $wgPhpCli;
 
                return array(
diff --git a/tests/phpunit/includes/GlobalFunctions/wfEscapeShellArgTest.php b/tests/phpunit/includes/GlobalFunctions/wfEscapeShellArgTest.php
new file mode 100644 (file)
index 0000000..cb334d2
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @group GlobalFunctions
+ * @covers ::wfEscapeShellArg
+ */
+class wfEscapeShellArgTest extends MediaWikiTestCase {
+       public function testSingleInput() {
+               if ( wfIsWindows() ) {
+                       $expected = '"blah"';
+               } else {
+                       $expected = "'blah'";
+               }
+
+               $actual = wfEscapeShellArg( 'blah' );
+
+               $this->assertEquals( $expected, $actual );
+       }
+
+       public function testMultipleArgs() {
+               if ( wfIsWindows() ) {
+                       $expected = '"foo" "bar" "baz"';
+               } else {
+                       $expected = "'foo' 'bar' 'baz'";
+               }
+
+               $actual = wfEscapeShellArg( 'foo', 'bar', 'baz' );
+
+               $this->assertEquals( $expected, $actual );
+       }
+
+       public function testMultipleArgsAsArray() {
+               if ( wfIsWindows() ) {
+                       $expected = '"foo" "bar" "baz"';
+               } else {
+                       $expected = "'foo' 'bar' 'baz'";
+               }
+
+               $actual = wfEscapeShellArg( array( 'foo', 'bar', 'baz' ) );
+
+               $this->assertEquals( $expected, $actual );
+       }
+}
index 992581b..c5797c4 100644 (file)
@@ -715,7 +715,7 @@ class HtmlTest extends MediaWikiTestCase {
                        'Input wrapper with type and value.'
                );
                $this->assertEquals(
-                       '<input name=testname class=mw-ui-input>',
+                       '<input name=testname>',
                        Html::input( 'testname' ),
                        'Input wrapper with all default values.'
                );
@@ -764,6 +764,30 @@ class HtmlTest extends MediaWikiTestCase {
                        'Label wrapper'
                );
        }
+
+       public static function provideSrcSetImages() {
+               return array(
+                       array( array(), '', 'when there are no images, return empty string' ),
+                       array(
+                               array( '1x' => '1x.png', '1.5x' => '1_5x.png', '2x' => '2x.png' ),
+                               '1x.png 1x, 1_5x.png 1.5x, 2x.png 2x',
+                               'pixel depth keys may include a trailing "x"'
+                       ),
+                       array(
+                               array( '1'  => '1x.png', '1.5' => '1_5x.png', '2'  => '2x.png' ),
+                               '1x.png 1x, 1_5x.png 1.5x, 2x.png 2x',
+                               'pixel depth keys may omit a trailing "x"'
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSrcSetImages
+        * @covers Html::srcSet
+        */
+       public function testSrcSet( $images, $expected, $message ) {
+               $this->assertEquals( Html::srcSet( $images ), $expected, $message );
+       }
 }
 
 class HtmlTestValue {
index fbd2c31..8a0dff7 100644 (file)
@@ -138,7 +138,7 @@ class HttpTest extends MediaWikiTestCase {
         * HTTP redirects).
         */
        public function testRelativeRedirections() {
-               $h = MWHttpRequestTester::factory( 'http://oldsite/file.ext' );
+               $h = MWHttpRequestTester::factory( 'http://oldsite/file.ext', array(), __METHOD__ );
 
                # Forge a Location header
                $h->setRespHeaders( 'location', array(
@@ -486,7 +486,7 @@ class HttpTest extends MediaWikiTestCase {
 class MWHttpRequestTester extends MWHttpRequest {
        // function derived from the MWHttpRequest factory function but
        // returns appropriate tester class here
-       public static function factory( $url, $options = null ) {
+       public static function factory( $url, $options = null, $caller = __METHOD__ ) {
                if ( !Http::$httpEngine ) {
                        Http::$httpEngine = function_exists( 'curl_init' ) ? 'curl' : 'php';
                } elseif ( Http::$httpEngine == 'curl' && !function_exists( 'curl_init' ) ) {
@@ -496,7 +496,7 @@ class MWHttpRequestTester extends MWHttpRequest {
 
                switch ( Http::$httpEngine ) {
                        case 'curl':
-                               return new CurlHttpRequestTester( $url, $options );
+                               return new CurlHttpRequestTester( $url, $options, $caller );
                        case 'php':
                                if ( !wfIniGetBool( 'allow_url_fopen' ) ) {
                                        throw new MWException( __METHOD__ .
@@ -504,7 +504,7 @@ class MWHttpRequestTester extends MWHttpRequest {
                                                        . 'If possible, curl should be used instead. See http://php.net/curl.' );
                                }
 
-                               return new PhpHttpRequestTester( $url, $options );
+                               return new PhpHttpRequestTester( $url, $options, $caller );
                        default:
                }
        }
index e548f81..fa59ef2 100644 (file)
@@ -8,7 +8,6 @@
  *
  * @group ComposerHooks
  *
- * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class MediaWikiVersionFetcherTest extends PHPUnit_Framework_TestCase {
index 4c5424c..99ec2e4 100644 (file)
@@ -16,22 +16,11 @@ class MessageTest extends MediaWikiLangTestCase {
         * @dataProvider provideConstructor
         */
        public function testConstructor( $expectedLang, $key, $params, $language ) {
-               $reflection = new ReflectionClass( 'Message' );
-
-               $keyProperty = $reflection->getProperty( 'key' );
-               $keyProperty->setAccessible( true );
-
-               $paramsProperty = $reflection->getProperty( 'parameters' );
-               $paramsProperty->setAccessible( true );
-
-               $langProperty = $reflection->getProperty( 'language' );
-               $langProperty->setAccessible( true );
-
                $message = new Message( $key, $params, $language );
 
-               $this->assertEquals( $key, $keyProperty->getValue( $message ) );
-               $this->assertEquals( $params, $paramsProperty->getValue( $message ) );
-               $this->assertEquals( $expectedLang, $langProperty->getValue( $message ) );
+               $this->assertEquals( $key, $message->getKey() );
+               $this->assertEquals( $params, $message->getParams() );
+               $this->assertEquals( $expectedLang, $message->getLanguage() );
        }
 
        public static function provideConstructor() {
@@ -45,21 +34,62 @@ class MessageTest extends MediaWikiLangTestCase {
                );
        }
 
-       public static function provideTestParams() {
+       public static function provideConstructorParams() {
                return array(
-                       array( array() ),
-                       array( array( 'foo' ), 'foo' ),
-                       array( array( 'foo', 'bar' ), 'foo', 'bar' ),
-                       array( array( 'baz' ), array( 'baz' ) ),
-                       array( array( 'baz', 'foo' ), array( 'baz', 'foo' ) ),
-                       array( array( 'baz', 'foo' ), array( 'baz', 'foo' ), 'hhh' ),
-                       array( array( 'baz', 'foo' ), array( 'baz', 'foo' ), 'hhh', array( 'ahahahahha' ) ),
-                       array( array( 'baz', 'foo' ), array( 'baz', 'foo' ), array( 'ahahahahha' ) ),
-                       array( array( 'baz' ), array( 'baz' ), array( 'ahahahahha' ) ),
+                       array(
+                               array(),
+                               array(),
+                       ),
+                       array(
+                               array( 'foo' ),
+                               array( 'foo' ),
+                       ),
+                       array(
+                               array( 'foo', 'bar' ),
+                               array( 'foo', 'bar' ),
+                       ),
+                       array(
+                               array( 'baz' ),
+                               array( array( 'baz' ) ),
+                       ),
+                       array(
+                               array( 'baz', 'foo' ),
+                               array( array( 'baz', 'foo' ) ),
+                       ),
+                       array(
+                               array( 'baz', 'foo' ),
+                               array( array( 'baz', 'foo' ), 'hhh' ),
+                       ),
+                       array(
+                               array( 'baz', 'foo' ),
+                               array( array( 'baz', 'foo' ), 'hhh', array( 'ahahahahha' ) ),
+                       ),
+                       array(
+                               array( 'baz', 'foo' ),
+                               array( array( 'baz', 'foo' ), array( 'ahahahahha' ) ),
+                       ),
+                       array(
+                               array( 'baz' ),
+                               array( array( 'baz' ), array( 'ahahahahha' ) ),
+                       ),
                );
        }
 
-       public function getLanguageProvider() {
+       /**
+        * @covers Message::__construct
+        * @covers Message::getParams
+        * @dataProvider provideConstructorParams
+        */
+       public function testConstructorParams( $expected, $args ) {
+               $msg = new Message( 'imasomething' );
+
+               $returned = call_user_func_array( array( $msg, 'params' ), $args );
+
+               $this->assertSame( $msg, $returned );
+               $this->assertEquals( $expected, $msg->getParams() );
+       }
+
+       public static function provideConstructorLanguage() {
                return array(
                        array( 'foo', array( 'bar' ), 'en' ),
                        array( 'foo', array( 'bar' ), 'de' )
@@ -67,27 +97,98 @@ class MessageTest extends MediaWikiLangTestCase {
        }
 
        /**
+        * @covers Message::__construct
         * @covers Message::getLanguage
-        * @dataProvider getLanguageProvider
+        * @dataProvider provideConstructorLanguage
         */
-       public function testGetLanguageCode( $key, $params, $languageCode ) {
+       public function testConstructorLanguage( $key, $params, $languageCode ) {
                $language = Language::factory( $languageCode );
                $message = new Message( $key, $params, $language );
 
                $this->assertEquals( $language, $message->getLanguage() );
        }
 
+       public static function provideKeys() {
+               return array(
+                       'string' => array(
+                               'key' => 'mainpage',
+                               'expected' => array( 'mainpage' ),
+                       ),
+                       'single' => array(
+                               'key' => array( 'mainpage' ),
+                               'expected' => array( 'mainpage' ),
+                       ),
+                       'multi' => array(
+                               'key' => array( 'mainpage-foo', 'mainpage-bar', 'mainpage' ),
+                               'expected' => array( 'mainpage-foo', 'mainpage-bar', 'mainpage' ),
+                       ),
+                       'empty' => array(
+                               'key' => array(),
+                               'expected' => null,
+                               'exception' => 'InvalidArgumentException',
+                       ),
+                       'null' => array(
+                               'key' => null,
+                               'expected' => null,
+                               'exception' => 'InvalidArgumentException',
+                       ),
+                       'bad type' => array(
+                               'key' => 123,
+                               'expected' => null,
+                               'exception' => 'InvalidArgumentException',
+                       ),
+               );
+       }
+
        /**
-        * @covers Message::params
-        * @dataProvider provideTestParams
+        * @covers Message::__construct
+        * @covers Message::getKey
+        * @covers Message::isMultiKey
+        * @covers Message::getKeysToTry
+        * @dataProvider provideKeys
         */
-       public function testParams( $expected ) {
-               $msg = new Message( 'imasomething' );
+       public function testKeys( $key, $expected, $exception = null ) {
+               if ( $exception ) {
+                       $this->setExpectedException( $exception );
+               }
 
-               $returned = call_user_func_array( array( $msg, 'params' ), array_slice( func_get_args(), 1 ) );
+               $msg = new Message( $key );
+               $this->assertContains( $msg->getKey(), $expected );
+               $this->assertEquals( $expected, $msg->getKeysToTry() );
+               $this->assertEquals( count( $expected ) > 1, $msg->isMultiKey() );
+       }
 
-               $this->assertSame( $msg, $returned );
-               $this->assertEquals( $expected, $msg->getParams() );
+       /**
+        * @covers ::wfMessage
+        */
+       public function testWfMessage() {
+               $this->assertInstanceOf( 'Message', wfMessage( 'mainpage' ) );
+               $this->assertInstanceOf( 'Message', wfMessage( 'i-dont-exist-evar' ) );
+       }
+
+       /**
+        * @covers Message::newFromKey
+        */
+       public function testNewFromKey() {
+               $this->assertInstanceOf( 'Message', Message::newFromKey( 'mainpage' ) );
+               $this->assertInstanceOf( 'Message', Message::newFromKey( 'i-dont-exist-evar' ) );
+       }
+
+       /**
+        * @covers ::wfMessage
+        * @covers Message::__construct
+        */
+       public function testWfMessageParams() {
+               $this->assertEquals( 'Return to $1.', wfMessage( 'returnto' )->text() );
+               $this->assertEquals( 'Return to $1.', wfMessage( 'returnto', array() )->text() );
+               $this->assertEquals(
+                       'You have foo (bar).',
+                       wfMessage( 'youhavenewmessages', 'foo', 'bar' )->text()
+               );
+               $this->assertEquals(
+                       'You have foo (bar).',
+                       wfMessage( 'youhavenewmessages', array( 'foo', 'bar' ) )->text()
+               );
        }
 
        /**
@@ -104,10 +205,12 @@ class MessageTest extends MediaWikiLangTestCase {
 
        /**
         * @covers Message::__construct
+        * @covers Message::text
+        * @covers Message::plain
+        * @covers Message::escaped
+        * @covers Message::toString
         */
-       public function testKey() {
-               $this->assertInstanceOf( 'Message', wfMessage( 'mainpage' ) );
-               $this->assertInstanceOf( 'Message', wfMessage( 'i-dont-exist-evar' ) );
+       public function testToStringKey() {
                $this->assertEquals( 'Main Page', wfMessage( 'mainpage' )->text() );
                $this->assertEquals( '<i-dont-exist-evar>', wfMessage( 'i-dont-exist-evar' )->text() );
                $this->assertEquals( '<i<dont>exist-evar>', wfMessage( 'i<dont>exist-evar' )->text() );
@@ -120,6 +223,26 @@ class MessageTest extends MediaWikiLangTestCase {
                );
        }
 
+       public static function provideToString() {
+               return array(
+                       array( 'mainpage', 'Main Page' ),
+                       array( 'i-dont-exist-evar', '<i-dont-exist-evar>' ),
+                       array( 'i-dont-exist-evar', '&lt;i-dont-exist-evar&gt;', 'escaped' ),
+               );
+       }
+
+       /**
+        * @covers Message::toString
+        * @covers Message::__toString
+        * @dataProvider provideToString
+        */
+       public function testToString( $key, $expect, $format = 'plain' ) {
+               $msg = new Message( $key );
+               $msg->$format();
+               $this->assertEquals( $expect, $msg->toString() );
+               $this->assertEquals( $expect, $msg->__toString() );
+       }
+
        /**
         * @covers Message::inLanguage
         */
@@ -138,26 +261,10 @@ class MessageTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @covers Message::__construct
-        */
-       public function testMessageParams() {
-               $this->assertEquals( 'Return to $1.', wfMessage( 'returnto' )->text() );
-               $this->assertEquals( 'Return to $1.', wfMessage( 'returnto', array() )->text() );
-               $this->assertEquals(
-                       'You have foo (bar).',
-                       wfMessage( 'youhavenewmessages', 'foo', 'bar' )->text()
-               );
-               $this->assertEquals(
-                       'You have foo (bar).',
-                       wfMessage( 'youhavenewmessages', array( 'foo', 'bar' ) )->text()
-               );
-       }
-
-       /**
-        * @covers Message::__construct
+        * @covers Message::rawParam
         * @covers Message::rawParams
         */
-       public function testMessageParamSubstitution() {
+       public function testRawParams() {
                $this->assertEquals(
                        '(Заглавная страница)',
                        wfMessage( 'parentheses', 'Заглавная страница' )->plain()
@@ -177,10 +284,21 @@ class MessageTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @covers Message::__construct
+        * @covers RawMessage::__construct
+        * @covers RawMessage::fetchMessage
+        */
+       public function testRawMessage() {
+               $msg = new RawMessage( 'example &' );
+               $this->assertEquals( 'example &', $msg->plain() );
+               $this->assertEquals( 'example &amp;', $msg->escaped() );
+       }
+
+       /**
         * @covers Message::params
+        * @covers Message::toString
+        * @covers Message::replaceParameters
         */
-       public function testDeliciouslyManyParams() {
+       public function testReplaceManyParams() {
                $msg = new RawMessage( '$1$2$3$4$5$6$7$8$9$10$11$12' );
                // One less than above has placeholders
                $params = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k' );
@@ -189,12 +307,20 @@ class MessageTest extends MediaWikiLangTestCase {
                        $msg->params( $params )->plain(),
                        'Params > 9 are replaced correctly'
                );
+
+               $msg = new RawMessage( 'Params$*' );
+               $params = array( 'ab', 'bc', 'cd' );
+               $this->assertEquals(
+                       'Params: ab, bc, cd',
+                       $msg->params( $params )->text()
+               );
        }
 
        /**
+        * @covers Message::numParam
         * @covers Message::numParams
         */
-       public function testMessageNumParams() {
+       public function testNumParams() {
                $lang = Language::factory( 'en' );
                $msg = new RawMessage( '$1' );
 
@@ -206,9 +332,10 @@ class MessageTest extends MediaWikiLangTestCase {
        }
 
        /**
+        * @covers Message::durationParam
         * @covers Message::durationParams
         */
-       public function testMessageDurationParams() {
+       public function testDurationParams() {
                $lang = Language::factory( 'en' );
                $msg = new RawMessage( '$1' );
 
@@ -222,9 +349,10 @@ class MessageTest extends MediaWikiLangTestCase {
        /**
         * FIXME: This should not need database, but Language#formatExpiry does (bug 55912)
         * @group Database
+        * @covers Message::expiryParam
         * @covers Message::expiryParams
         */
-       public function testMessageExpiryParams() {
+       public function testExpiryParams() {
                $lang = Language::factory( 'en' );
                $msg = new RawMessage( '$1' );
 
@@ -236,9 +364,10 @@ class MessageTest extends MediaWikiLangTestCase {
        }
 
        /**
+        * @covers Message::timeperiodParam
         * @covers Message::timeperiodParams
         */
-       public function testMessageTimeperiodParams() {
+       public function testTimeperiodParams() {
                $lang = Language::factory( 'en' );
                $msg = new RawMessage( '$1' );
 
@@ -250,9 +379,10 @@ class MessageTest extends MediaWikiLangTestCase {
        }
 
        /**
+        * @covers Message::sizeParam
         * @covers Message::sizeParams
         */
-       public function testMessageSizeParams() {
+       public function testSizeParams() {
                $lang = Language::factory( 'en' );
                $msg = new RawMessage( '$1' );
 
@@ -264,9 +394,10 @@ class MessageTest extends MediaWikiLangTestCase {
        }
 
        /**
+        * @covers Message::bitrateParam
         * @covers Message::bitrateParams
         */
-       public function testMessageBitrateParams() {
+       public function testBitrateParams() {
                $lang = Language::factory( 'en' );
                $msg = new RawMessage( '$1' );
 
@@ -277,7 +408,7 @@ class MessageTest extends MediaWikiLangTestCase {
                );
        }
 
-       public function messagePlaintextParamsProvider() {
+       public static function providePlaintextParams() {
                return array(
                        array(
                                'one $2 <div>foo</div> [[Bar]] {{Baz}} &lt;',
@@ -308,10 +439,15 @@ class MessageTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @dataProvider messagePlaintextParamsProvider
+        * @covers Message::plaintextParam
         * @covers Message::plaintextParams
+        * @covers Message::formatPlaintext
+        * @covers Message::toString
+        * @covers Message::parse
+        * @covers Message::parseAsBlock
+        * @dataProvider providePlaintextParams
         */
-       public function testMessagePlaintextParams( $expect, $format ) {
+       public function testPlaintextParams( $expect, $format ) {
                $lang = Language::factory( 'en' );
 
                $msg = new RawMessage( '$1 $2' );
@@ -326,6 +462,46 @@ class MessageTest extends MediaWikiLangTestCase {
                );
        }
 
+       public static function provideParser() {
+               return array(
+                       array(
+                               "''&'' <x><!-- x -->",
+                               'plain',
+                       ),
+
+                       array(
+                               "''&'' <x><!-- x -->",
+                               'text',
+                       ),
+                       array(
+                               '<i>&amp;</i> &lt;x&gt;',
+                               'parse',
+                       ),
+
+                       array(
+                               "<p><i>&amp;</i> &lt;x&gt;\n</p>",
+                               'parseAsBlock',
+                       ),
+               );
+       }
+
+       /**
+        * @covers Message::text
+        * @covers Message::parse
+        * @covers Message::parseAsBlock
+        * @covers Message::toString
+        * @covers Message::transformText
+        * @covers Message::parseText
+        * @dataProvider provideParser
+        */
+       public function testParser( $expect, $format ) {
+               $msg = new RawMessage( "''&'' <x><!-- x -->" );
+               $this->assertEquals(
+                       $expect,
+                       $msg->inLanguage( 'en' )->$format()
+               );
+       }
+
        /**
         * @covers Message::inContentLanguage
         */
@@ -372,52 +548,4 @@ class MessageTest extends MediaWikiLangTestCase {
        public function testInLanguageThrows() {
                wfMessage( 'foo' )->inLanguage( 123 );
        }
-
-       public function keyProvider() {
-               return array(
-                       'string' => array(
-                               'key' => 'mainpage',
-                               'expected' => array( 'mainpage' ),
-                       ),
-                       'single' => array(
-                               'key' => array( 'mainpage' ),
-                               'expected' => array( 'mainpage' ),
-                       ),
-                       'multi' => array(
-                               'key' => array( 'mainpage-foo', 'mainpage-bar', 'mainpage' ),
-                               'expected' => array( 'mainpage-foo', 'mainpage-bar', 'mainpage' ),
-                       ),
-                       'empty' => array(
-                               'key' => array(),
-                               'expected' => null,
-                               'exception' => 'InvalidArgumentException',
-                       ),
-                       'null' => array(
-                               'key' => null,
-                               'expected' => null,
-                               'exception' => 'InvalidArgumentException',
-                       ),
-                       'bad type' => array(
-                               'key' => 17,
-                               'expected' => null,
-                               'exception' => 'InvalidArgumentException',
-                       ),
-               );
-       }
-
-       /**
-        * @dataProvider keyProvider()
-        *
-        * @covers Message::getKey
-        */
-       public function testGetKey( $key, $expected, $exception = null ) {
-               if ( $exception ) {
-                       $this->setExpectedException( $exception );
-               }
-
-               $msg = new Message( $key );
-               $this->assertEquals( $expected, $msg->getKeysToTry() );
-               $this->assertEquals( count( $expected ) > 1, $msg->isMultiKey() );
-               $this->assertContains( $msg->getKey(), $expected );
-       }
 }
index 4d63ea6..6c6d95e 100644 (file)
@@ -172,7 +172,7 @@ mw.test.baz({token:123});mw.loader.state({"test.quux":"ready"});
                        array(
                                array( 'test.quux', ResourceLoaderModule::TYPE_COMBINED ),
                                '<script>if(window.mw){
-mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]},{},{});
+mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]});
 
 }</script>
 '
@@ -203,9 +203,13 @@ mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"
                        // Load two modules in separate groups
                        array(
                                array( array( 'test.group.foo', 'test.group.bar' ), ResourceLoaderModule::TYPE_COMBINED ),
-                               '<script src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.group.bar&amp;skin=fallback&amp;*"></script>
-<script src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.group.foo&amp;skin=fallback&amp;*"></script>
-',
+                               '<script>if(window.mw){
+document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=test.group.bar\u0026amp;skin=fallback\u0026amp;*\"\u003E\u003C/script\u003E");
+}</script>
+<script>if(window.mw){
+document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=test.group.foo\u0026amp;skin=fallback\u0026amp;*\"\u003E\u003C/script\u003E");
+}</script>
+'
                        ),
                );
        }
@@ -213,6 +217,11 @@ mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"
        /**
         * @dataProvider provideMakeResourceLoaderLink
         * @covers OutputPage::makeResourceLoaderLink
+        * @covers ResourceLoader::makeLoaderImplementScript
+        * @covers ResourceLoader::makeModuleResponse
+        * @covers ResourceLoader::makeInlineScript
+        * @covers ResourceLoader::makeLoaderStateScript
+        * @covers ResourceLoader::createLoaderURL
         */
        public function testMakeResourceLoaderLink( $args, $expectedHtml ) {
                $this->setMwGlobals( array(
@@ -230,6 +239,7 @@ mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"
                $ctx->setLanguage( 'en' );
                $out = new OutputPage( $ctx );
                $rl = $out->getResourceLoader();
+               $rl->setMessageBlobStore( new NullMessageBlobStore() );
                $rl->register( array(
                        'test.foo' => new ResourceLoaderTestModule( array(
                                'script' => 'mw.test.foo( { a: true } );',
@@ -271,3 +281,26 @@ mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"
                $this->assertEquals( $expectedHtml, $actualHtml );
        }
 }
+
+/**
+ * MessageBlobStore that doesn't do anything
+ */
+class NullMessageBlobStore extends MessageBlobStore {
+       public function get ( ResourceLoader $resourceLoader, $modules, $lang ) {
+               return array();
+       }
+
+       public function insertMessageBlob ( $name, ResourceLoaderModule $module, $lang ) {
+               return false;
+       }
+
+       public function updateModule ( $name, ResourceLoaderModule $module, $lang ) {
+               return;
+       }
+
+       public function updateMessage ( $key ) {
+       }
+       public function clear() {
+       }
+}
+
index e737056..d63541b 100644 (file)
@@ -5,6 +5,28 @@
  */
 class PrefixSearchTest extends MediaWikiLangTestCase {
 
+       public function addDBData() {
+               $this->insertPage( 'Sandbox' );
+               $this->insertPage( 'Bar' );
+               $this->insertPage( 'Example' );
+               $this->insertPage( 'Example Bar' );
+               $this->insertPage( 'Example Foo' );
+               $this->insertPage( 'Example Foo/Bar' );
+               $this->insertPage( 'Example/Baz' );
+               $this->insertPage( 'Redirect test', '#REDIRECT [[Redirect Test]]' );
+               $this->insertPage( 'Redirect Test' );
+               $this->insertPage( 'Redirect Test Worse Result' );
+               $this->insertPage( 'Redirect test2', '#REDIRECT [[Redirect Test2]]' );
+               $this->insertPage( 'Redirect TEST2', '#REDIRECT [[Redirect Test2]]' );
+               $this->insertPage( 'Redirect Test2' );
+               $this->insertPage( 'Redirect Test2 Worse Result' );
+
+               $this->insertPage( 'Talk:Sandbox' );
+               $this->insertPage( 'Talk:Example' );
+
+               $this->insertPage( 'User:Example' );
+       }
+
        protected function setUp() {
                parent::setUp();
 
@@ -12,8 +34,6 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                        $this->markTestSkipped( 'Main namespace does not support wikitext.' );
                }
 
-               $this->insertPages();
-
                // Avoid special pages from extensions interferring with the tests
                $this->setMwGlobals( 'wgSpecialPages', array() );
        }
@@ -33,28 +53,6 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                }
        }
 
-       public function insertPages() {
-               $this->insertPage( 'Sandbox' );
-               $this->insertPage( 'Bar' );
-               $this->insertPage( 'Example' );
-               $this->insertPage( 'Example Bar' );
-               $this->insertPage( 'Example Foo' );
-               $this->insertPage( 'Example Foo/Bar' );
-               $this->insertPage( 'Example/Baz' );
-               $this->insertPage( 'Redirect test', '#REDIRECT [[Redirect Test]]' );
-               $this->insertPage( 'Redirect Test' );
-               $this->insertPage( 'Redirect Test Worse Result' );
-               $this->insertPage( 'Redirect test2', '#REDIRECT [[Redirect Test2]]' );
-               $this->insertPage( 'Redirect TEST2', '#REDIRECT [[Redirect Test2]]' );
-               $this->insertPage( 'Redirect Test2' );
-               $this->insertPage( 'Redirect Test2 Worse Result' );
-
-               $this->insertPage( 'Talk:Sandbox' );
-               $this->insertPage( 'Talk:Example' );
-
-               $this->insertPage( 'User:Example' );
-       }
-
        public static function provideSearch() {
                return array(
                        array( array(
index 2585811..c5944d1 100644 (file)
@@ -97,7 +97,7 @@ class TestSample extends MediaWikiLangTestCase {
 
        // @codingStandardsIgnoreStart Ignore long line warning
        /**
-        * @expectedException MWException object
+        * @expectedException InvalidArgumentException
         * See http://phpunit.de/manual/3.7/en/appendixes.annotations.html#appendixes.annotations.expectedException
         */
        // @codingStandardsIgnoreEnd
index 36ad3cc..c615c46 100644 (file)
@@ -79,7 +79,7 @@ class SanitizerTest extends MediaWikiTestCase {
         */
        public function testInvalidNumberedEntities() {
                $this->assertEquals(
-                       UTF8_REPLACEMENT,
+                       UtfNormal\Constants::UTF8_REPLACEMENT,
                        Sanitizer::decodeCharReferences( "&#88888888888888;" ),
                        'Invalid numbered entity'
                );
diff --git a/tests/phpunit/includes/TemplateParserTest.php b/tests/phpunit/includes/TemplateParserTest.php
new file mode 100644 (file)
index 0000000..81854ff
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * @group Templates
+ */
+class TemplateParserTest extends MediaWikiTestCase {
+
+       protected $templateDir;
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( array(
+                       'wgSecretKey' => 'foo',
+                       'wgMemc' => new EmptyBagOStuff(),
+               ) );
+
+               $this->templateDir = dirname( __DIR__ ) . '/data/templates/';
+       }
+
+       /**
+        * @dataProvider provideProcessTemplate
+        * @covers TemplateParser::processTemplate
+        * @covers TemplateParser::getTemplate
+        * @covers TemplateParser::getTemplateFilename
+        */
+       public function testProcessTemplate( $name, $args, $result, $exception = false ) {
+               if ( $exception ) {
+                       $this->setExpectedException( $exception );
+               }
+               $tp = new TemplateParser( $this->templateDir );
+               $this->assertEquals( $result, $tp->processTemplate( $name, $args ) );
+       }
+
+       public static function provideProcessTemplate() {
+               return array(
+                       array(
+                               'foobar',
+                               array(),
+                               "hello world!\n"
+                       ),
+                       array(
+                               'foobar_args',
+                               array(
+                                       'planet' => 'world',
+                               ),
+                               "hello world!\n",
+                       ),
+                       array(
+                               '../foobar',
+                               array(),
+                               false,
+                               'UnexpectedValueException'
+                       ),
+                       array(
+                               'nonexistenttemplate',
+                               array(),
+                               false,
+                               'RuntimeException',
+                       )
+               );
+       }
+}
diff --git a/tests/phpunit/includes/TestingAccessWrapper.php b/tests/phpunit/includes/TestingAccessWrapper.php
new file mode 100644 (file)
index 0000000..84c0f9b
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Circumvent access restrictions on object internals
+ *
+ * This can be helpful for writing tests that can probe object internals,
+ * without having to modify the class under test to accomodate.
+ *
+ * Wrap an object with private methods as follows:
+ *    $title = TestingAccessWrapper::newFromObject( Title::newFromDBkey( $key ) );
+ *
+ * You can access private and protected instance methods and variables:
+ *    $formatter = $title->getTitleFormatter();
+ *
+ * TODO:
+ * - Provide access to static methods and properties.
+ * - Organize other helper classes in tests/testHelpers.inc into a directory.
+ */
+class TestingAccessWrapper {
+       public $object;
+
+       /**
+        * Return the same object, without access restrictions.
+        */
+       public static function newFromObject( $object ) {
+               $wrapper = new TestingAccessWrapper();
+               $wrapper->object = $object;
+               return $wrapper;
+       }
+
+       public function __call( $method, $args ) {
+               $classReflection = new ReflectionClass( $this->object );
+               $methodReflection = $classReflection->getMethod( $method );
+               $methodReflection->setAccessible( true );
+               return $methodReflection->invokeArgs( $this->object, $args );
+       }
+
+       public function __set( $name, $value ) {
+               $classReflection = new ReflectionClass( $this->object );
+               $propertyReflection = $classReflection->getProperty( $name );
+               $propertyReflection->setAccessible( true );
+               $propertyReflection->setValue( $this->object, $value );
+       }
+
+       public function __get( $name ) {
+               $classReflection = new ReflectionClass( $this->object );
+               $propertyReflection = $classReflection->getProperty( $name );
+               $propertyReflection->setAccessible( true );
+               return $propertyReflection->getValue( $this->object );
+       }
+}
diff --git a/tests/phpunit/includes/TestingAccessWrapperTest.php b/tests/phpunit/includes/TestingAccessWrapperTest.php
new file mode 100644 (file)
index 0000000..7e5b91a
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+class TestingAccessWrapperTest extends MediaWikiTestCase {
+       protected $raw;
+       protected $wrapped;
+
+       function setUp() {
+               parent::setUp();
+
+               require_once __DIR__ . '/../data/helpers/WellProtectedClass.php';
+               $this->raw = new WellProtectedClass();
+               $this->wrapped = TestingAccessWrapper::newFromObject( $this->raw );
+       }
+
+       function testGetProperty() {
+               $this->assertSame( 1, $this->wrapped->property );
+       }
+
+       function testSetProperty() {
+               $this->wrapped->property = 10;
+               $this->assertSame( 10, $this->wrapped->property );
+               $this->assertSame( 10, $this->raw->getProperty() );
+       }
+
+       function testCallMethod() {
+               $this->wrapped->incrementPropertyValue();
+               $this->assertSame( 2, $this->wrapped->property );
+               $this->assertSame( 2, $this->raw->getProperty() );
+       }
+
+       function testCallMethodTwoArgs() {
+               $this->assertSame( 'two', $this->wrapped->whatSecondArg( 'one', 'two' ) );
+       }
+}
index 6af1862..022c7d5 100644 (file)
@@ -326,6 +326,10 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                        $this->setUserPerm( null );
                        $this->assertEquals( $check[$action][0],
                                $this->title->getUserPermissionsErrors( $action, $this->user, true ) );
+                       $this->assertEquals( $check[$action][0],
+                               $this->title->getUserPermissionsErrors( $action, $this->user, 'full' ) );
+                       $this->assertEquals( $check[$action][0],
+                               $this->title->getUserPermissionsErrors( $action, $this->user, 'secure' ) );
 
                        global $wgGroupPermissions;
                        $old = $wgGroupPermissions;
@@ -333,11 +337,19 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
 
                        $this->assertEquals( $check[$action][1],
                                $this->title->getUserPermissionsErrors( $action, $this->user, true ) );
+                       $this->assertEquals( $check[$action][1],
+                               $this->title->getUserPermissionsErrors( $action, $this->user, 'full' ) );
+                       $this->assertEquals( $check[$action][1],
+                               $this->title->getUserPermissionsErrors( $action, $this->user, 'secure' ) );
                        $wgGroupPermissions = $old;
 
                        $this->setUserPerm( $action );
                        $this->assertEquals( $check[$action][2],
                                $this->title->getUserPermissionsErrors( $action, $this->user, true ) );
+                       $this->assertEquals( $check[$action][2],
+                               $this->title->getUserPermissionsErrors( $action, $this->user, 'full' ) );
+                       $this->assertEquals( $check[$action][2],
+                               $this->title->getUserPermissionsErrors( $action, $this->user, 'secure' ) );
 
                        $this->setUserPerm( $action );
                        $this->assertEquals( $check[$action][3],
index 01c2578..00c29ee 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 /**
+ * @group Database
  * @group Title
  */
 class TitleTest extends MediaWikiTestCase {
@@ -325,36 +326,19 @@ class TitleTest extends MediaWikiTestCase {
                        $whitelistRegexp = array( $whitelistRegexp );
                }
 
+               $this->setMwGlobals( array(
+                       // So User::isEveryoneAllowed( 'read' ) === false
+                       'wgGroupPermissions' => array( '*' => array( 'read' => false ) ),
+                       'wgWhitelistRead' => array( 'some random non sense title' ),
+                       'wgWhitelistReadRegexp' => $whitelistRegexp,
+               ) );
+
                $title = Title::newFromDBkey( $source );
 
-               global $wgGroupPermissions;
-               $oldPermissions = $wgGroupPermissions;
-               // Disallow all so we can ensure our regex works
-               $wgGroupPermissions = array();
-               $wgGroupPermissions['*']['read'] = false;
-
-               global $wgWhitelistRead;
-               $oldWhitelist = $wgWhitelistRead;
-               // Undo any LocalSettings explicite whitelists so they won't cause a
-               // failing test to succeed. Set it to some random non sense just
-               // to make sure we properly test Title::checkReadPermissions()
-               $wgWhitelistRead = array( 'some random non sense title' );
-
-               global $wgWhitelistReadRegexp;
-               $oldWhitelistRegexp = $wgWhitelistReadRegexp;
-               $wgWhitelistReadRegexp = $whitelistRegexp;
-
-               // Just use $wgUser which in test is a user object for '127.0.0.1'
-               global $wgUser;
-               // Invalidate user rights cache to take in account $wgGroupPermissions
-               // change above.
-               $wgUser->clearInstanceCache();
-               $errors = $title->userCan( $action, $wgUser );
-
-               // Restore globals
-               $wgGroupPermissions = $oldPermissions;
-               $wgWhitelistRead = $oldWhitelist;
-               $wgWhitelistReadRegexp = $oldWhitelistRegexp;
+               // New anonymous user with no rights
+               $user = new User;
+               $user->mRights = array();
+               $errors = $title->userCan( $action, $user );
 
                if ( is_bool( $expected ) ) {
                        # Forge the assertion message depending on the assertion expectation
index c3cb193..b74a7ea 100644 (file)
@@ -306,7 +306,10 @@ class UserTest extends MediaWikiTestCase {
         * @covers User::isValidPassword()
         */
        public function testCheckPasswordValidity() {
-               $this->setMwGlobals( 'wgMinimalPasswordLength', 6 );
+               $this->setMwGlobals( array(
+                       'wgMinimalPasswordLength' => 6,
+                       'wgMaximalPasswordLength' => 30,
+               ) );
                $user = User::newFromName( 'Useruser' );
                // Sanity
                $this->assertTrue( $user->isValidPassword( 'Password1234' ) );
@@ -314,10 +317,19 @@ class UserTest extends MediaWikiTestCase {
                // Minimum length
                $this->assertFalse( $user->isValidPassword( 'a' ) );
                $this->assertFalse( $user->checkPasswordValidity( 'a' )->isGood() );
+               $this->assertTrue( $user->checkPasswordValidity( 'a' )->isOK() );
                $this->assertEquals( 'passwordtooshort', $user->getPasswordValidity( 'a' ) );
 
+               // Maximum length
+               $longPass = str_repeat( 'a', 31 );
+               $this->assertFalse( $user->isValidPassword( $longPass ) );
+               $this->assertFalse( $user->checkPasswordValidity( $longPass )->isGood() );
+               $this->assertFalse( $user->checkPasswordValidity( $longPass )->isOK() );
+               $this->assertEquals( 'passwordtoolong', $user->getPasswordValidity( $longPass ) );
+
                // Matches username
                $this->assertFalse( $user->checkPasswordValidity( 'Useruser' )->isGood() );
+               $this->assertTrue( $user->checkPasswordValidity( 'Useruser' )->isOK() );
                $this->assertEquals( 'password-name-match', $user->getPasswordValidity( 'Useruser' ) );
 
                // On the forbidden list
@@ -332,8 +344,8 @@ class UserTest extends MediaWikiTestCase {
        public function testGetCanonicalName( $name, $expectedArray, $msg ) {
                foreach ( $expectedArray as $validate => $expected ) {
                        $this->assertEquals(
-                               User::getCanonicalName( $name, $validate === 'false' ? false : $validate ),
                                $expected,
+                               User::getCanonicalName( $name, $validate === 'false' ? false : $validate ),
                                $msg . ' (' . $validate . ')'
                        );
                }
@@ -341,7 +353,7 @@ class UserTest extends MediaWikiTestCase {
 
        public static function provideGetCanonicalName() {
                return array(
-                       array( ' trailing space ', array( 'creatable' => 'Trailing space' ), 'Trailing spaces' ),
+                       array( ' Trailing space ', array( 'creatable' => 'Trailing space' ), 'Trailing spaces' ),
                        // @todo FIXME: Maybe the creatable name should be 'Talk:Username' or false to reject?
                        array( 'Talk:Username', array( 'creatable' => 'Username', 'usable' => 'Username',
                                'valid' => 'Username', 'false' => 'Talk:Username' ), 'Namespace prefix' ),
@@ -385,4 +397,32 @@ class UserTest extends MediaWikiTestCase {
                $sixth = User::newFromName( 'EqualUnitTestUser' );
                $this->assertTrue( $fifth->equals( $sixth ) );
        }
+
+       /**
+        * @covers User::getId
+        */
+       public function testGetId() {
+               $user = User::newFromName( 'UTSysop' );
+               $this->assertTrue( $user->getId() > 0 );
+
+       }
+
+       /**
+        * @covers User::isLoggedIn
+        * @covers User::isAnon
+        */
+       public function testLoggedIn() {
+               $user = User::newFromName( 'UTSysop' );
+               $this->assertTrue( $user->isLoggedIn() );
+               $this->assertFalse( $user->isAnon() );
+
+               // Non-existent users are perceived as anonymous
+               $user = User::newFromName( 'UTNonexistent' );
+               $this->assertFalse( $user->isLoggedIn() );
+               $this->assertTrue( $user->isAnon() );
+
+               $user = new User;
+               $this->assertFalse( $user->isLoggedIn() );
+               $this->assertTrue( $user->isAnon() );
+       }
 }
index e655881..382e3d8 100644 (file)
@@ -81,7 +81,7 @@ class XmlTest extends MediaWikiTestCase {
         */
        public function testElementInputCanHaveAValueOfZero() {
                $this->assertEquals(
-                       '<input name="name" value="0" class="mw-ui-input" />',
+                       '<input name="name" value="0" />',
                        Xml::input( 'name', false, 0 ),
                        'Input with a value of 0 (bug 23797)'
                );
@@ -152,7 +152,7 @@ class XmlTest extends MediaWikiTestCase {
 
                $this->assertEquals(
                        '<label for="year">From year (and earlier):</label> ' .
-                               '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" class="mw-ui-input" /> ' .
+                               '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> ' .
                                '<label for="month">From month (and earlier):</label> ' .
                                '<select id="month" name="month" class="mw-month-selector">' .
                                '<option value="-1">all</option>' . "\n" .
@@ -173,7 +173,7 @@ class XmlTest extends MediaWikiTestCase {
                );
                $this->assertEquals(
                        '<label for="year">From year (and earlier):</label> ' .
-                               '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" class="mw-ui-input" /> ' .
+                               '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> ' .
                                '<label for="month">From month (and earlier):</label> ' .
                                '<select id="month" name="month" class="mw-month-selector">' .
                                '<option value="-1">all</option>' . "\n" .
@@ -207,7 +207,7 @@ class XmlTest extends MediaWikiTestCase {
 
                $this->assertEquals(
                        '<label for="year">From year (and earlier):</label> ' .
-                               '<input id="year" maxlength="4" size="7" type="number" name="year" class="mw-ui-input" /> ' .
+                               '<input id="year" maxlength="4" size="7" type="number" name="year" /> ' .
                                '<label for="month">From month (and earlier):</label> ' .
                                '<select id="month" name="month" class="mw-month-selector">' .
                                '<option value="-1">all</option>' . "\n" .
@@ -233,7 +233,7 @@ class XmlTest extends MediaWikiTestCase {
         */
        public function testTextareaNoContent() {
                $this->assertEquals(
-                       '<textarea name="name" id="name" cols="40" rows="5" class="mw-ui-input"></textarea>',
+                       '<textarea name="name" id="name" cols="40" rows="5"></textarea>',
                        Xml::textarea( 'name', '' ),
                        'textarea() with not content'
                );
@@ -244,7 +244,7 @@ class XmlTest extends MediaWikiTestCase {
         */
        public function testTextareaAttribs() {
                $this->assertEquals(
-                       '<textarea name="name" id="name" cols="20" rows="10" class="mw-ui-input">&lt;txt&gt;</textarea>',
+                       '<textarea name="name" id="name" cols="20" rows="10">&lt;txt&gt;</textarea>',
                        Xml::textarea( 'name', '<txt>', 20, 10 ),
                        'textarea() with custom attribs'
                );
index 6681c7a..83f5922 100644 (file)
@@ -3,7 +3,6 @@
 /**
  * @covers Action
  *
- * @licence GNU GPL v2+
  * @author Thiemo Mättig
  *
  * @group Action
index 67a75f3..88a99e9 100644 (file)
@@ -123,7 +123,8 @@ class ApiLoginTest extends ApiTestCase {
                                        "lgname" => $user->username,
                                        "lgpassword" => $user->password
                                )
-                       )
+                       ),
+                       __METHOD__
                );
                $req->execute();
 
index e91edcb..7a03f7d 100644 (file)
@@ -2,7 +2,6 @@
 
 /**
  * @group API
- * @group Database
  * @group medium
  *
  * @covers ApiMain
@@ -23,20 +22,12 @@ class ApiMainTest extends ApiTestCase {
        }
 
        public static function provideAssert() {
-               $anon = new User();
-               $bot = new User();
-               $bot->setName( 'Bot' );
-               $bot->addToDatabase();
-               $bot->addGroup( 'bot' );
-               $user = new User();
-               $user->setName( 'User' );
-               $user->addToDatabase();
                return array(
-                       array( $anon, 'user', 'assertuserfailed' ),
-                       array( $user, 'user', false ),
-                       array( $user, 'bot', 'assertbotfailed' ),
-                       array( $bot, 'user', false ),
-                       array( $bot, 'bot', false ),
+                       array( false, array(), 'user', 'assertuserfailed' ),
+                       array( true, array(), 'user', false ),
+                       array( true, array(), 'bot', 'assertbotfailed' ),
+                       array( true, array( 'bot' ), 'user', false ),
+                       array( true, array( 'bot' ), 'bot', false ),
                );
        }
 
@@ -45,11 +36,17 @@ class ApiMainTest extends ApiTestCase {
         *
         * @covers ApiMain::checkAsserts
         * @dataProvider provideAssert
-        * @param User $user
+        * @param bool $registered
+        * @param array $rights
         * @param string $assert
         * @param string|bool $error False if no error expected
         */
-       public function testAssert( $user, $assert, $error ) {
+       public function testAssert( $registered, $rights, $assert, $error ) {
+               $user = new User();
+               if ( $registered ) {
+                       $user->setId( 1 );
+               }
+               $user->mRights = $rights;
                try {
                        $this->doApiRequest( array(
                                'action' => 'query',
index d4d9651..87f794c 100644 (file)
@@ -1,9 +1,8 @@
 <?php
 
 /**
- *  * Abstract class to support upload tests
+ * Abstract class to support upload tests
  */
-
 abstract class ApiTestCaseUpload extends ApiTestCase {
        /**
         * Fixture -- run before every test
index b4b1bf3..f74fc35 100644 (file)
@@ -1,29 +1,24 @@
 <?php
-/**
- * @group API
- * @group Database
- * @group medium
- */
-
 /**
  * n.b. Ensure that you can write to the images/ directory as the
  * user that will run tests.
- */
-
-// Note for reviewers: this intentionally duplicates functionality already in
-// "ApiSetup" and so on. This framework works better IMO and has less
-// strangeness (such as test cases inheriting from "ApiSetup"...) (and in the
-// case of the other Upload tests, this flat out just actually works... )
-
-// @todo Port the other Upload tests, and other API tests to this framework
-
-/**
- * @group Database
- * @group Broken
- * Broken test, reports false errors from time to time.
+ *
+ * Note for reviewers: this intentionally duplicates functionality already in
+ * "ApiSetup" and so on. This framework works better IMO and has less
+ * strangeness (such as test cases inheriting from "ApiSetup"...) (and in the
+ * case of the other Upload tests, this flat out just actually works... )
+ *
+ * @todo Port the other Upload tests, and other API tests to this framework
+ *
+ * @todo Broken test, reports false errors from time to time.
  * See https://bugzilla.wikimedia.org/26169
  *
- * This is pretty sucky... needs to be prettified.
+ * @todo This is pretty sucky... needs to be prettified.
+ *
+ * @group API
+ * @group Database
+ * @group medium
+ * @group Broken
  */
 class ApiUploadTest extends ApiTestCaseUpload {
        /**
index 1220bb4..9e830f2 100644 (file)
@@ -56,12 +56,12 @@ STR;
         * @return array
         */
        private function validateRequestExpectedPair( $v ) {
-               $this->assertType( 'array', $v, self::PARAM_ASSERT );
+               $this->assertInternalType( 'array', $v, self::PARAM_ASSERT );
                $this->assertEquals( 2, count( $v ), self::PARAM_ASSERT );
                $this->assertArrayHasKey( 0, $v, self::PARAM_ASSERT );
                $this->assertArrayHasKey( 1, $v, self::PARAM_ASSERT );
-               $this->assertType( 'array', $v[0], self::PARAM_ASSERT );
-               $this->assertType( 'array', $v[1], self::PARAM_ASSERT );
+               $this->assertInternalType( 'array', $v[0], self::PARAM_ASSERT );
+               $this->assertInternalType( 'array', $v[1], self::PARAM_ASSERT );
 
                return $v;
        }
@@ -88,9 +88,13 @@ STR;
        /**
         * Checks that the request's result matches the expected results.
         * @param array $values Array is a two element array( request, expected_results )
-        * @throws Exception
+        * @param array $session
+        * @param bool $appendModule
+        * @param User $user
         */
-       protected function check( $values ) {
+       protected function check( $values, array $session = null,
+               $appendModule = false, User $user = null
+       ) {
                list( $req, $exp ) = $this->validateRequestExpectedPair( $values );
                if ( !array_key_exists( 'action', $req ) ) {
                        $req['action'] = 'query';
@@ -103,7 +107,7 @@ STR;
                                $val = implode( '|', array_unique( $val ) );
                        }
                }
-               $result = $this->doApiRequest( $req );
+               $result = $this->doApiRequest( $req, $session, $appendModule, $user );
                $this->assertResult( array( 'query' => $exp ), $result[0], $req );
        }
 
@@ -116,9 +120,16 @@ STR;
                        if ( is_array( $message ) ) {
                                $message = http_build_query( $message );
                        }
+
+                       // FIXME: once we migrate to phpunit 4.1+, hardcode ComparisonFailure exception use
+                       $compEx = 'SebastianBergmann\Comparator\ComparisonFailure';
+                       if ( !class_exists( $compEx ) ) {
+                               $compEx = 'PHPUnit_Framework_ComparisonFailure';
+                       }
+
                        throw new PHPUnit_Framework_ExpectationFailedException(
                                $e->getMessage() . "\nRequest: $message",
-                               new PHPUnit_Framework_ComparisonFailure(
+                               new $compEx(
                                        $exp,
                                        $result,
                                        print_r( $exp, true ),
diff --git a/tests/phpunit/includes/cache/RedisBloomCacheTest.php b/tests/phpunit/includes/cache/RedisBloomCacheTest.php
deleted file mode 100644 (file)
index 868d6c2..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-/**
- * Test for BloomCacheRedis class.
- *
- * @TODO: some generic base "redis test server conf" for all testing?
- *
- * @covers BloomCacheRedis
- * @group Cache
- */
-class BloomCacheRedisTest extends MediaWikiTestCase {
-       private static $suffix;
-
-       protected function setUp() {
-               parent::setUp();
-
-               self::$suffix = self::$suffix ? : mt_rand();
-
-               $fcache = BloomCache::get( 'main' );
-               if ( $fcache instanceof BloomCacheRedis ) {
-                       $fcache->delete( "unit-testing-" . self::$suffix );
-               } else {
-                       $this->markTestSkipped( 'The main bloom cache is not redis.' );
-               }
-       }
-
-       public function testBloomCache() {
-               $key = "unit-testing-" . self::$suffix;
-               $fcache = BloomCache::get( 'main' );
-               $count = 1500;
-
-               $this->assertTrue( $fcache->delete( $key ), "OK delete of filter '$key'." );
-               $this->assertTrue( $fcache->init( $key, $count, .001 ), "OK init of filter '$key'." );
-
-               $members = array();
-               for ( $i = 0; $i < $count; ++$i ) {
-                       $members[] = "$i-value-$i";
-               }
-               $this->assertTrue( $fcache->add( $key, $members ), "Addition of members to '$key' OK." );
-
-               for ( $i = 0; $i < $count; ++$i ) {
-                       $this->assertTrue( $fcache->isHit( $key, "$i-value-$i" ), "Hit on member '$i-value-$i'." );
-               }
-
-               $falsePositives = array();
-               for ( $i = $count; $i < 2 * $count; ++$i ) {
-                       if ( $fcache->isHit( $key, "value$i" ) ) {
-                               $falsePositives[] = "value$i";
-                       }
-               }
-
-               $eFalsePositives = array(
-                       'value1763',
-                       'value2245',
-                       'value2353',
-                       'value2791',
-                       'value2898',
-                       'value2975'
-               );
-               $this->assertEquals( $eFalsePositives, $falsePositives,
-                       "Correct number of false positives found." );
-       }
-
-       protected function tearDown() {
-               parent::tearDown();
-
-               $fcache = BloomCache::get( 'main' );
-               if ( $fcache instanceof BloomCacheRedis ) {
-                       $fcache->delete( "unit-testing-" . self::$suffix );
-               }
-       }
-}
index 7a82680..a14a50d 100644 (file)
@@ -5,7 +5,6 @@
  *
  * @group Database
  *
- * @licence GNU GPL v2+
  * @author Katie Filbert < aude.wiki@gmail.com >
  */
 class EnhancedChangesListTest extends MediaWikiLangTestCase {
index 2ea9f33..311ad89 100644 (file)
@@ -9,7 +9,6 @@
  *
  * @group Database
  *
- * @licence GNU GPL v2+
  * @author Katie Filbert < aude.wiki@gmail.com >
  */
 class OldChangesListTest extends MediaWikiLangTestCase {
index ee1a4d0..0b87727 100644 (file)
@@ -5,7 +5,6 @@
  *
  * @group Database
  *
- * @licence GNU GPL v2+
  * @author Katie Filbert < aude.wiki@gmail.com >
  */
 class RCCacheEntryFactoryTest extends MediaWikiLangTestCase {
index 7c2ba1a..0dba183 100644 (file)
@@ -35,6 +35,7 @@ class RecentChangeTest extends MediaWikiTestCase {
         * Should cover the following log actions (which are most commonly used by bots):
         * - block/block
         * - block/unblock
+        * - block/reblock
         * - delete/delete
         * - delete/restore
         * - newusers/create
@@ -45,8 +46,11 @@ class RecentChangeTest extends MediaWikiTestCase {
         * - protect/protect
         * - protect/modifyprotect
         * - protect/unprotect
+        * - protect/move_prot
         * - upload/upload
         * - merge/merge
+        * - import/upload
+        * - import/interwiki
         *
         * As well as the following Auto Edit Summaries:
         * - blank
@@ -63,9 +67,13 @@ class RecentChangeTest extends MediaWikiTestCase {
 
                # block/block
                $this->assertIRCComment(
-                       $this->context->msg( 'blocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       $this->context->msg( 'blocklogentry', 'SomeTitle', 'duration', '(flags)' )->plain()
+                               . $sep . $this->user_comment,
                        'block', 'block',
-                       array(),
+                       array(
+                               '5::duration' => 'duration',
+                               '6::flags' => 'flags',
+                       ),
                        $this->user_comment
                );
                # block/unblock
@@ -75,6 +83,17 @@ class RecentChangeTest extends MediaWikiTestCase {
                        array(),
                        $this->user_comment
                );
+               # block/reblock
+               $this->assertIRCComment(
+                       $this->context->msg( 'reblock-logentry', 'SomeTitle', 'duration', '(flags)' )->plain()
+                               . $sep . $this->user_comment,
+                       'block', 'reblock',
+                       array(
+                               '5::duration' => 'duration',
+                               '6::flags' => 'flags',
+                       ),
+                       $this->user_comment
+               );
        }
 
        /**
@@ -205,6 +224,15 @@ class RecentChangeTest extends MediaWikiTestCase {
                        $protectParams,
                        $this->user_comment
                );
+
+               # protect/move_prot
+               $this->assertIRCComment(
+                       $this->context->msg( 'movedarticleprotection', 'SomeTitle', 'OldTitle' )
+                               ->plain() . $sep . $this->user_comment,
+                       'protect', 'move_prot',
+                       array( 'OldTitle' ),
+                       $this->user_comment
+               );
        }
 
        /**
@@ -249,6 +277,29 @@ class RecentChangeTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeImport() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # import/upload
+               $this->assertIRCComment(
+                       $this->context->msg( 'import-logentry-upload', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'import', 'upload',
+                       array(),
+                       $this->user_comment
+               );
+
+               # import/interwiki
+               $this->assertIRCComment(
+                       $this->context->msg( 'import-logentry-interwiki', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'import', 'interwiki',
+                       array(),
+                       $this->user_comment
+               );
+       }
+
        /**
         * @todo Emulate these edits somehow and extract
         * raw edit summary from RecentChange object
index ad64327..2506087 100644 (file)
@@ -3,7 +3,6 @@
 /**
  * Helper for generating test recent changes entries.
  *
- * @licence GNU GPL v2+
  * @author Katie Filbert < aude.wiki@gmail.com >
  */
 class TestRecentChangesHelper {
index 3f887dc..2fa11ea 100644 (file)
@@ -5,7 +5,6 @@
  *
  * @group ComposerHooks
  *
- * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class ComposerVersionNormalizerTest extends PHPUnit_Framework_TestCase {
index 1a90d6e..988a59e 100644 (file)
@@ -2,11 +2,6 @@
 
 /**
  * @group ContentHandler
- * @group Database
- *
- * @note Declare that we are using the database, because otherwise we'll fail in
- * the "databaseless" test run. This is because the LinkHolderArray used by the
- * parser needs database access.
  */
 class ContentHandlerTest extends MediaWikiTestCase {
 
@@ -36,6 +31,8 @@ class ContentHandlerTest extends MediaWikiTestCase {
                // Reset namespace cache
                MWNamespace::getCanonicalNamespaces( true );
                $wgContLang->resetNamespaces();
+               // And LinkCache
+               LinkCache::destroySingleton();
        }
 
        protected function tearDown() {
@@ -44,6 +41,8 @@ class ContentHandlerTest extends MediaWikiTestCase {
                // Reset namespace cache
                MWNamespace::getCanonicalNamespaces( true );
                $wgContLang->resetNamespaces();
+               // And LinkCache
+               LinkCache::destroySingleton();
 
                parent::tearDown();
        }
@@ -83,6 +82,7 @@ class ContentHandlerTest extends MediaWikiTestCase {
         */
        public function testGetForTitle( $title, $expectedContentModel ) {
                $title = Title::newFromText( $title );
+               LinkCache::singleton()->addBadLinkObj( $title );
                $handler = ContentHandler::getForTitle( $title );
                $this->assertEquals( $expectedContentModel, $handler->getModelID() );
        }
@@ -139,6 +139,7 @@ class ContentHandlerTest extends MediaWikiTestCase {
        public function testGetPageLanguage( $title, $expected ) {
                if ( is_string( $title ) ) {
                        $title = Title::newFromText( $title );
+                       LinkCache::singleton()->addBadLinkObj( $title );
                }
 
                $expected = wfGetLangObj( $expected );
@@ -292,7 +293,7 @@ class ContentHandlerTest extends MediaWikiTestCase {
                $expectedModelId, $expectedNativeData, $shouldFail
        ) {
                $title = Title::newFromText( $title );
-
+               LinkCache::singleton()->addBadLinkObj( $title );
                try {
                        $content = ContentHandler::makeContent( $data, $title, $modelId, $format );
 
index d32c1a6..645baf1 100644 (file)
@@ -1,10 +1,12 @@
 <?php
 
-class MockDatabaseSqlite extends DatabaseSqliteStandalone {
+class MockDatabaseSqlite extends DatabaseSqlite {
        private $lastQuery;
 
-       function __construct() {
-               parent::__construct( ':memory:' );
+       public static function newInstance( array $p = array() ) {
+               $p['dbFilePath'] = ':memory:';
+
+               return new self( $p );
        }
 
        function query( $sql, $fname = '', $tempIgnore = false ) {
@@ -36,7 +38,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                if ( !Sqlite::isPresent() ) {
                        $this->markTestSkipped( 'No SQLite support detected' );
                }
-               $this->db = new MockDatabaseSqlite();
+               $this->db = MockDatabaseSqlite::newInstance();
                if ( version_compare( $this->db->getServerVersion(), '3.6.0', '<' ) ) {
                        $this->markTestSkipped( "SQLite at least 3.6 required, {$this->db->getServerVersion()} found" );
                }
@@ -89,7 +91,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
         */
        public function testAddQuotes( $value, $expected ) {
                // check quoting
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                $this->assertEquals( $expected, $db->addQuotes( $value ), 'string not quoted as expected' );
 
                // ok, quoting works as expected, now try a round trip.
@@ -172,7 +174,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
         */
        public function testTableName() {
                // @todo Moar!
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                $this->assertEquals( 'foo', $db->tableName( 'foo' ) );
                $this->assertEquals( 'sqlite_master', $db->tableName( 'sqlite_master' ) );
                $db->tablePrefix( 'foo' );
@@ -184,7 +186,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
         * @covers DatabaseSqlite::duplicateTableStructure
         */
        public function testDuplicateTableStructure() {
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                $db->query( 'CREATE TABLE foo(foo, barfoo)' );
 
                $db->duplicateTableStructure( 'foo', 'bar' );
@@ -208,7 +210,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
         * @covers DatabaseSqlite::duplicateTableStructure
         */
        public function testDuplicateTableStructureVirtual() {
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                if ( $db->getFulltextSearchModule() != 'FTS3' ) {
                        $this->markTestSkipped( 'FTS3 not supported, cannot create virtual tables' );
                }
@@ -231,7 +233,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
         * @covers DatabaseSqlite::deleteJoin
         */
        public function testDeleteJoin() {
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                $db->query( 'CREATE TABLE a (a_1)', __METHOD__ );
                $db->query( 'CREATE TABLE b (b_1, b_2)', __METHOD__ );
                $db->insert( 'a', array(
@@ -289,7 +291,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                        'user_newtalk.user_last_timestamp', // r84185
                );
 
-               $currentDB = new DatabaseSqliteStandalone( ':memory:' );
+               $currentDB = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                $currentDB->sourceFile( "$IP/maintenance/tables.sql" );
 
                $profileToDb = false;
@@ -357,7 +359,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
         * @covers DatabaseSqlite::insertId
         */
        public function testInsertIdType() {
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
 
                $databaseCreation = $db->query( 'CREATE TABLE a ( a_1 )', __METHOD__ );
                $this->assertInstanceOf( 'ResultWrapper', $databaseCreation, "Database creation" );
@@ -377,7 +379,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                }
 
                global $IP;
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                $db->sourceFile( "$IP/tests/phpunit/data/db/sqlite/tables-$version.sql" );
                $updater = DatabaseUpdater::newForDB( $db, false, $maint );
                $updater->doUpdates( array( 'core' ) );
@@ -440,7 +442,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
 
        public function testCaseInsensitiveLike() {
                // TODO: Test this for all databases
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                $res = $db->query( 'SELECT "a" LIKE "A" AS a' );
                $row = $res->fetchRow();
                $this->assertFalse( (bool)$row['a'] );
@@ -450,7 +452,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
         * @covers DatabaseSqlite::numFields
         */
        public function testNumFields() {
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
 
                $databaseCreation = $db->query( 'CREATE TABLE a ( a_1 )', __METHOD__ );
                $this->assertInstanceOf( 'ResultWrapper', $databaseCreation, "Failed to create table a" );
index 447bf21..807bd14 100644 (file)
@@ -34,7 +34,6 @@
  * that hold the first tests in a pending state awaiting access to the database.
  * @group medium
  *
- * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 abstract class ORMRowTest extends \MediaWikiTestCase {
index cc5543f..338d931 100644 (file)
@@ -27,7 +27,6 @@
  *
  * @covers PageORMTableForTesting
  *
- * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  * @author Daniel Kinzler
  */
index a5c19f9..04bb9f3 100644 (file)
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @since 1.20
- *
  * @ingroup Test
- *
- * @group ORM
- *
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+
+/**
  * The database group has as a side effect that temporal database tables are created. This makes
  * it possible to test without poisoning a production database.
- * @group Database
  *
  * Some of the tests takes more time, and needs therefor longer time before they can be aborted
  * as non-functional. The reason why tests are aborted is assumed to be set up of temporal databases
  * that hold the first tests in a pending state awaiting access to the database.
- * @group medium
  *
+ * @since 1.20
+ *
+ * @group ORM
+ * @group Database
+ * @group medium
  * @covers TestORMRow
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class TestORMRowTest extends ORMRowTest {
 
diff --git a/tests/phpunit/includes/debug/logging/LegacyLoggerTest.php b/tests/phpunit/includes/debug/logging/LegacyLoggerTest.php
new file mode 100644 (file)
index 0000000..415fa04
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+use MediaWikiTestCase;
+use Psr\Log\LogLevel;
+
+class LegacyLoggerTest extends MediaWikiTestCase {
+
+       /**
+        * @covers LegacyLogger::interpolate
+        * @dataProvider provideInterpolate
+        */
+       public function testInterpolate( $message, $context, $expect ) {
+               $this->assertEquals(
+                       $expect, LegacyLogger::interpolate( $message, $context ) );
+       }
+
+       public function provideInterpolate() {
+               return array(
+                       array(
+                               'no-op',
+                               array(),
+                               'no-op',
+                       ),
+                       array(
+                               'Hello {world}!',
+                               array(
+                                       'world' => 'World',
+                               ),
+                               'Hello World!',
+                       ),
+                       array(
+                               '{greeting} {user}',
+                               array(
+                                       'greeting' => 'Goodnight',
+                                       'user' => 'Moon',
+                               ),
+                               'Goodnight Moon',
+                       ),
+                       array(
+                               'Oops {key_not_set}',
+                               array(),
+                               'Oops {key_not_set}',
+                       ),
+                       array(
+                               '{ not interpolated }',
+                               array(
+                                       'not interpolated' => 'This should NOT show up in the message',
+                               ),
+                               '{ not interpolated }',
+                       ),
+               );
+       }
+
+       /**
+        * @covers LegacyLogger::shouldEmit
+        * @dataProvider provideShouldEmit
+        */
+       public function testShouldEmit( $level, $config, $expected ) {
+               $this->setMwGlobals( 'wgDebugLogGroups', array( 'fakechannel' => $config ) );
+               $this->assertEquals(
+                       $expected,
+                       LegacyLogger::shouldEmit( 'fakechannel', 'some message', $level, array() )
+               );
+       }
+
+       public static function provideShouldEmit() {
+               $dest = array( 'destination' => 'foobar' );
+               $tests = array(
+                       array(
+                               LogLevel::DEBUG,
+                               $dest,
+                               true
+                       ),
+                       array(
+                               LogLevel::WARNING,
+                               $dest + array( 'level' => LogLevel::INFO ),
+                               true,
+                       ),
+                       array(
+                               LogLevel::INFO,
+                               $dest + array( 'level' => LogLevel::CRITICAL ),
+                               false,
+                       ),
+               );
+
+               if ( class_exists( '\Monolog\Logger' ) ) {
+                       $tests[] = array(
+                               \Monolog\Logger::INFO,
+                               $dest + array( 'level' => LogLevel::INFO ),
+                               true,
+                       );
+                       $tests[] = array(
+                               \Monolog\Logger::WARNING,
+                               $dest + array( 'level' => LogLevel::EMERGENCY ),
+                               false,
+                       );
+               }
+
+               return $tests;
+       }
+
+}
diff --git a/tests/phpunit/includes/debug/logging/legacy/LoggerTest.php b/tests/phpunit/includes/debug/logging/legacy/LoggerTest.php
deleted file mode 100644 (file)
index 66e9be4..0000000
+++ /dev/null
@@ -1,118 +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
- */
-use Psr\Log\LogLevel;
-
-class MWLoggerLegacyLoggerTest extends MediaWikiTestCase {
-
-       /**
-        * @covers MWLoggerLegacyLogger::interpolate
-        * @dataProvider provideInterpolate
-        */
-       public function testInterpolate( $message, $context, $expect ) {
-               $this->assertEquals(
-                       $expect, MWLoggerLegacyLogger::interpolate( $message, $context ) );
-       }
-
-       public function provideInterpolate() {
-               return array(
-                       array(
-                               'no-op',
-                               array(),
-                               'no-op',
-                       ),
-                       array(
-                               'Hello {world}!',
-                               array(
-                                       'world' => 'World',
-                               ),
-                               'Hello World!',
-                       ),
-                       array(
-                               '{greeting} {user}',
-                               array(
-                                       'greeting' => 'Goodnight',
-                                       'user' => 'Moon',
-                               ),
-                               'Goodnight Moon',
-                       ),
-                       array(
-                               'Oops {key_not_set}',
-                               array(),
-                               'Oops {key_not_set}',
-                       ),
-                       array(
-                               '{ not interpolated }',
-                               array(
-                                       'not interpolated' => 'This should NOT show up in the message',
-                               ),
-                               '{ not interpolated }',
-                       ),
-               );
-       }
-
-       /**
-        * @covers MWLoggerLegacyLogger::shouldEmit
-        * @dataProvider provideShouldEmit
-        */
-       public function testShouldEmit( $level, $config, $expected ) {
-               $this->setMwGlobals( 'wgDebugLogGroups', array( 'fakechannel' => $config ) );
-               $this->assertEquals(
-                       $expected,
-                       MWLoggerLegacyLogger::shouldEmit( 'fakechannel', 'some message', $level, array() )
-               );
-       }
-
-       public static function provideShouldEmit() {
-               $dest = array( 'destination' => 'foobar' );
-               $tests = array(
-                       array(
-                               LogLevel::DEBUG,
-                               $dest,
-                               true
-                       ),
-                       array(
-                               LogLevel::WARNING,
-                               $dest + array( 'level' => LogLevel::INFO ),
-                               true,
-                       ),
-                       array(
-                               LogLevel::INFO,
-                               $dest + array( 'level' => LogLevel::CRITICAL ),
-                               false,
-                       ),
-               );
-
-               if ( class_exists( '\Monolog\Logger' ) ) {
-                       $tests[] = array(
-                               \Monolog\Logger::INFO,
-                               $dest + array( 'level' => LogLevel::INFO ),
-                               true,
-                       );
-                       $tests[] = array(
-                               \Monolog\Logger::WARNING,
-                               $dest + array( 'level' => LogLevel::EMERGENCY ),
-                               false,
-                       );
-               }
-
-               return $tests;
-       }
-
-}
index b70880e..90438a0 100644 (file)
@@ -17,7 +17,6 @@ class MockSearch extends SearchEngine {
 
 /**
  * @group Search
- * @group Database
  */
 class SearchUpdateTest extends MediaWikiTestCase {
 
index 188ad3f..3bea9b3 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 
 /**
- * @licence GNU GPL v2+
  * @author Adam Shorland
  *
  * @group Diff
index a685bf4..cbe0573 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 /**
- * @licence GNU GPL v2+
  * @author Adam Shorland
  *
  * @group Diff
index 1911c82..e0d7915 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 
 /**
- * @licence GNU GPL v2+
  * @author Adam Shorland
  *
  * @group Diff
index 5474b96..0f599af 100644 (file)
@@ -8,7 +8,6 @@
  * @group Database
  * @group Diff
  *
- * @licence GNU GPL v2+
  * @author Katie Filbert < aude.wiki@gmail.com >
  */
 class DifferenceEngineTest extends MediaWikiTestCase {
index b40d2d2..aaa93ef 100644 (file)
@@ -1478,7 +1478,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $url = $this->backend->getFileHttpUrl( array( 'src' => $source ) );
 
                if ( $url !== null ) { // supported
-                       $data = Http::request( "GET", $url );
+                       $data = Http::request( "GET", $url, array(), __METHOD__ );
                        $this->assertEquals( $content, $data,
                                "HTTP GET of URL has right contents ($backendName)." );
                }
@@ -2376,7 +2376,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $status = Status::newGood();
                $sl = $this->backend->getScopedFileLocks( $paths, LockManager::LOCK_EX, $status );
-               $this->assertType( 'ScopedLock', $sl,
+               $this->assertInstanceOf( 'ScopedLock', $sl,
                        "Scoped locking of files succeeded ($backendName)." );
                $this->assertEquals( array(), $status->errors,
                        "Scoped locking of files succeeded ($backendName)." );
index 5c5052e..3c5754b 100644 (file)
@@ -2,7 +2,6 @@
 
 /**
  * These tests should work regardless of $wgCapitalLinks
- * @group Database
  * @todo Split tests into providers and test methods
  */
 
index f0ac6ac..8bca333 100644 (file)
@@ -159,12 +159,12 @@ class FormatJsonTest extends MediaWikiTestCase {
                $this->assertJson( $json );
 
                $st = FormatJson::parse( $json );
-               $this->assertType( 'Status', $st );
+               $this->assertInstanceOf( 'Status', $st );
                $this->assertTrue( $st->isGood() );
                $this->assertEquals( $expected, $st->getValue() );
 
                $st = FormatJson::parse( $json, FormatJson::FORCE_ASSOC );
-               $this->assertType( 'Status', $st );
+               $this->assertInstanceOf( 'Status', $st );
                $this->assertTrue( $st->isGood() );
                $this->assertEquals( $value, $st->getValue() );
        }
@@ -230,7 +230,7 @@ class FormatJsonTest extends MediaWikiTestCase {
                }
 
                $st = FormatJson::parse( $value, FormatJson::TRY_FIXING );
-               $this->assertType( 'Status', $st );
+               $this->assertInstanceOf( 'Status', $st );
                if ( $expected === false ) {
                        $this->assertFalse( $st->isOK(), 'Expected isOK() == false' );
                } else {
@@ -256,7 +256,7 @@ class FormatJsonTest extends MediaWikiTestCase {
         */
        public function testParseErrors( $value ) {
                $st = FormatJson::parse( $value );
-               $this->assertType( 'Status', $st );
+               $this->assertInstanceOf( 'Status', $st );
                $this->assertFalse( $st->isOK() );
        }
 
@@ -313,7 +313,7 @@ class FormatJsonTest extends MediaWikiTestCase {
         */
        public function testParseStripComments( $json, $expect ) {
                $st = FormatJson::parse( $json, FormatJson::STRIP_COMMENTS );
-               $this->assertType( 'Status', $st );
+               $this->assertInstanceOf( 'Status', $st );
                $this->assertTrue( $st->isGood() );
                $this->assertEquals( $expect, $st->getValue() );
        }
index fd9f80d..315bc7e 100644 (file)
@@ -24,7 +24,6 @@
  * @ingroup Test
  * @group GenericArrayObject
  *
- * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 abstract class GenericArrayObjectTest extends PHPUnit_Framework_TestCase {
index e7b3e77..f0ba934 100644 (file)
@@ -8,6 +8,7 @@
 class XmlTypeCheckTest extends PHPUnit_Framework_TestCase {
        const WELL_FORMED_XML = "<root><child /></root>";
        const MAL_FORMED_XML = "<root><child /></error>";
+       const XML_WITH_PIH = '<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/w/index.php"?><svg><child /></svg>';
 
        /**
         * @covers XMLTypeCheck::newFromString
@@ -27,4 +28,22 @@ class XmlTypeCheckTest extends PHPUnit_Framework_TestCase {
                $this->assertFalse( $testXML->wellFormed );
        }
 
+       /**
+        * @covers XMLTypeCheck::processingInstructionHandler
+        */
+       public function testProcessingInstructionHandler() {
+               $called = false;
+               $testXML = new XmlTypeCheck(
+                       self::XML_WITH_PIH,
+                       null,
+                       false,
+                       array(
+                               'processing_instruction_handler' => function() use ( &$called ) {
+                                       $called = true;
+                               }
+                       )
+               );
+               $this->assertTrue( $called );
+       }
+
 }
diff --git a/tests/phpunit/includes/libs/normal/CleanUpTest.php b/tests/phpunit/includes/libs/normal/CleanUpTest.php
deleted file mode 100644 (file)
index 909b0fe..0000000
+++ /dev/null
@@ -1,394 +0,0 @@
-<?php
-/**
- * Tests for UtfNormal::cleanUp() function.
- *
- * 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
- */
-
-/**
- * Additional tests for UtfNormal::cleanUp() function, inclusion
- * regression checks for known problems.
- * Requires PHPUnit.
- *
- * @ingroup UtfNormal
- * @group Large
- *
- * @todo covers tags, will be UtfNormal::cleanUp once the below is resolved
- * @todo split me into test methods and providers per the below comment
- * @todo Document individual tests
- *
- * We ignore code coverage for this test suite until they are rewritten
- * to use data providers (bug 46561).
- * @codeCoverageIgnore
- */
-class CleanUpTest extends PHPUnit_Framework_TestCase {
-       public function testAscii() {
-               $text = 'This is plain ASCII text.';
-               $this->assertEquals( $text, UtfNormal::cleanUp( $text ) );
-       }
-
-       public function testNull() {
-               $text = "a \x00 null";
-               $expect = "a \xef\xbf\xbd null";
-               $this->assertEquals(
-                       bin2hex( $expect ),
-                       bin2hex( UtfNormal::cleanUp( $text ) ) );
-       }
-
-       public function testLatin() {
-               $text = "L'\xc3\xa9cole";
-               $this->assertEquals( $text, UtfNormal::cleanUp( $text ) );
-       }
-
-       public function testLatinNormal() {
-               $text = "L'e\xcc\x81cole";
-               $expect = "L'\xc3\xa9cole";
-               $this->assertEquals( $expect, UtfNormal::cleanUp( $text ) );
-       }
-
-       /**
-        * This test is *very* expensive!
-        */
-       function XtestAllChars() {
-               $rep = UTF8_REPLACEMENT;
-               for ( $i = 0x0; $i < UNICODE_MAX; $i++ ) {
-                       $char = codepointToUtf8( $i );
-                       $clean = UtfNormal::cleanUp( $char );
-                       $x = sprintf( "%04X", $i );
-
-                       if ( $i % 0x1000 == 0 ) {
-                               echo "U+$x\n";
-                       }
-
-                       if ( $i == 0x0009 ||
-                               $i == 0x000a ||
-                               $i == 0x000d ||
-                               ( $i > 0x001f && $i < UNICODE_SURROGATE_FIRST ) ||
-                               ( $i > UNICODE_SURROGATE_LAST && $i < 0xfffe ) ||
-                               ( $i > 0xffff && $i <= UNICODE_MAX )
-                       ) {
-                               if ( isset( UtfNormal::$utfCanonicalComp[$char] )
-                                       || isset( UtfNormal::$utfCanonicalDecomp[$char] )
-                               ) {
-                                       $comp = UtfNormal::NFC( $char );
-                                       $this->assertEquals(
-                                               bin2hex( $comp ),
-                                               bin2hex( $clean ),
-                                               "U+$x should be decomposed" );
-                               } else {
-                                       $this->assertEquals(
-                                               bin2hex( $char ),
-                                               bin2hex( $clean ),
-                                               "U+$x should be intact" );
-                               }
-                       } else {
-                               $this->assertEquals( bin2hex( $rep ), bin2hex( $clean ), $x );
-                       }
-               }
-       }
-
-       public static function provideAllBytes() {
-               return array(
-                       array( '', '' ),
-                       array( 'x', '' ),
-                       array( '', 'x' ),
-                       array( 'x', 'x' ),
-               );
-       }
-
-       /**
-        * @dataProvider provideAllBytes
-        */
-       function testBytes( $head, $tail ) {
-               for ( $i = 0x0; $i < 256; $i++ ) {
-                       $char = $head . chr( $i ) . $tail;
-                       $clean = UtfNormal::cleanUp( $char );
-                       $x = sprintf( "%02X", $i );
-
-                       if ( $i == 0x0009 ||
-                               $i == 0x000a ||
-                               $i == 0x000d ||
-                               ( $i > 0x001f && $i < 0x80 )
-                       ) {
-                               $this->assertEquals(
-                                       bin2hex( $char ),
-                                       bin2hex( $clean ),
-                                       "ASCII byte $x should be intact" );
-                               if ( $char != $clean ) {
-                                       return;
-                               }
-                       } else {
-                               $norm = $head . UTF8_REPLACEMENT . $tail;
-                               $this->assertEquals(
-                                       bin2hex( $norm ),
-                                       bin2hex( $clean ),
-                                       "Forbidden byte $x should be rejected" );
-                               if ( $norm != $clean ) {
-                                       return;
-                               }
-                       }
-               }
-       }
-
-       /**
-        * @dataProvider provideAllBytes
-        */
-       function testDoubleBytes( $head, $tail ) {
-               for ( $first = 0xc0; $first < 0x100; $first += 2 ) {
-                       for ( $second = 0x80; $second < 0x100; $second += 2 ) {
-                               $char = $head . chr( $first ) . chr( $second ) . $tail;
-                               $clean = UtfNormal::cleanUp( $char );
-                               $x = sprintf( "%02X,%02X", $first, $second );
-                               if ( $first > 0xc1 &&
-                                       $first < 0xe0 &&
-                                       $second < 0xc0
-                               ) {
-                                       $norm = UtfNormal::NFC( $char );
-                                       $this->assertEquals(
-                                               bin2hex( $norm ),
-                                               bin2hex( $clean ),
-                                               "Pair $x should be intact" );
-                                       if ( $norm != $clean ) {
-                                               return;
-                                       }
-                               } elseif ( $first > 0xfd || $second > 0xbf ) {
-                                       # fe and ff are not legal head bytes -- expect two replacement chars
-                                       $norm = $head . UTF8_REPLACEMENT . UTF8_REPLACEMENT . $tail;
-                                       $this->assertEquals(
-                                               bin2hex( $norm ),
-                                               bin2hex( $clean ),
-                                               "Forbidden pair $x should be rejected" );
-                                       if ( $norm != $clean ) {
-                                               return;
-                                       }
-                               } else {
-                                       $norm = $head . UTF8_REPLACEMENT . $tail;
-                                       $this->assertEquals(
-                                               bin2hex( $norm ),
-                                               bin2hex( $clean ),
-                                               "Forbidden pair $x should be rejected" );
-                                       if ( $norm != $clean ) {
-                                               return;
-                                       }
-                               }
-                       }
-               }
-       }
-
-       /**
-        * @dataProvider provideAllBytes
-        */
-       function testTripleBytes( $head, $tail ) {
-               for ( $first = 0xc0; $first < 0x100; $first += 2 ) {
-                       for ( $second = 0x80; $second < 0x100; $second += 2 ) {
-                               #for( $third = 0x80; $third < 0x100; $third++ ) {
-                               for ( $third = 0x80; $third < 0x81; $third++ ) {
-                                       $char = $head . chr( $first ) . chr( $second ) . chr( $third ) . $tail;
-                                       $clean = UtfNormal::cleanUp( $char );
-                                       $x = sprintf( "%02X,%02X,%02X", $first, $second, $third );
-
-                                       if ( $first >= 0xe0 &&
-                                               $first < 0xf0 &&
-                                               $second < 0xc0 &&
-                                               $third < 0xc0
-                                       ) {
-                                               if ( $first == 0xe0 && $second < 0xa0 ) {
-                                                       $this->assertEquals(
-                                                               bin2hex( $head . UTF8_REPLACEMENT . $tail ),
-                                                               bin2hex( $clean ),
-                                                               "Overlong triplet $x should be rejected" );
-                                               } elseif ( $first == 0xed &&
-                                                       ( chr( $first ) . chr( $second ) . chr( $third ) ) >= UTF8_SURROGATE_FIRST
-                                               ) {
-                                                       $this->assertEquals(
-                                                               bin2hex( $head . UTF8_REPLACEMENT . $tail ),
-                                                               bin2hex( $clean ),
-                                                               "Surrogate triplet $x should be rejected" );
-                                               } else {
-                                                       $this->assertEquals(
-                                                               bin2hex( UtfNormal::NFC( $char ) ),
-                                                               bin2hex( $clean ),
-                                                               "Triplet $x should be intact" );
-                                               }
-                                       } elseif ( $first > 0xc1 && $first < 0xe0 && $second < 0xc0 ) {
-                                               $this->assertEquals(
-                                                       bin2hex( UtfNormal::NFC( $head . chr( $first ) .
-                                                                       chr( $second ) ) . UTF8_REPLACEMENT . $tail ),
-                                                       bin2hex( $clean ),
-                                                       "Valid 2-byte $x + broken tail" );
-                                       } elseif ( $second > 0xc1 && $second < 0xe0 && $third < 0xc0 ) {
-                                               $this->assertEquals(
-                                                       bin2hex( $head . UTF8_REPLACEMENT .
-                                                               UtfNormal::NFC( chr( $second ) . chr( $third ) . $tail ) ),
-                                                       bin2hex( $clean ),
-                                                       "Broken head + valid 2-byte $x" );
-                                       } elseif ( ( $first > 0xfd || $second > 0xfd ) &&
-                                               ( ( $second > 0xbf && $third > 0xbf ) ||
-                                                       ( $second < 0xc0 && $third < 0xc0 ) ||
-                                                       ( $second > 0xfd ) ||
-                                                       ( $third > 0xfd ) )
-                                       ) {
-                                               # fe and ff are not legal head bytes -- expect three replacement chars
-                                               $this->assertEquals(
-                                                       bin2hex( $head . UTF8_REPLACEMENT . UTF8_REPLACEMENT . UTF8_REPLACEMENT . $tail ),
-                                                       bin2hex( $clean ),
-                                                       "Forbidden triplet $x should be rejected" );
-                                       } elseif ( $first > 0xc2 && $second < 0xc0 && $third < 0xc0 ) {
-                                               $this->assertEquals(
-                                                       bin2hex( $head . UTF8_REPLACEMENT . $tail ),
-                                                       bin2hex( $clean ),
-                                                       "Forbidden triplet $x should be rejected" );
-                                       } else {
-                                               $this->assertEquals(
-                                                       bin2hex( $head . UTF8_REPLACEMENT . UTF8_REPLACEMENT . $tail ),
-                                                       bin2hex( $clean ),
-                                                       "Forbidden triplet $x should be rejected" );
-                                       }
-                               }
-                       }
-               }
-       }
-
-       public function testChunkRegression() {
-               # Check for regression against a chunking bug
-               $text = "\x46\x55\xb8" .
-                       "\xdc\x96" .
-                       "\xee" .
-                       "\xe7" .
-                       "\x44" .
-                       "\xaa" .
-                       "\x2f\x25";
-               $expect = "\x46\x55\xef\xbf\xbd" .
-                       "\xdc\x96" .
-                       "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd" .
-                       "\x44" .
-                       "\xef\xbf\xbd" .
-                       "\x2f\x25";
-
-               $this->assertEquals(
-                       bin2hex( $expect ),
-                       bin2hex( UtfNormal::cleanUp( $text ) ) );
-       }
-
-       public function testInterposeRegression() {
-               $text = "\x4e\x30" .
-                       "\xb1" . # bad tail
-                       "\x3a" .
-                       "\x92" . # bad tail
-                       "\x62\x3a" .
-                       "\x84" . # bad tail
-                       "\x43" .
-                       "\xc6" . # bad head
-                       "\x3f" .
-                       "\x92" . # bad tail
-                       "\xad" . # bad tail
-                       "\x7d" .
-                       "\xd9\x95";
-
-               $expect = "\x4e\x30" .
-                       "\xef\xbf\xbd" .
-                       "\x3a" .
-                       "\xef\xbf\xbd" .
-                       "\x62\x3a" .
-                       "\xef\xbf\xbd" .
-                       "\x43" .
-                       "\xef\xbf\xbd" .
-                       "\x3f" .
-                       "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd" .
-                       "\x7d" .
-                       "\xd9\x95";
-
-               $this->assertEquals(
-                       bin2hex( $expect ),
-                       bin2hex( UtfNormal::cleanUp( $text ) ) );
-       }
-
-       public function testOverlongRegression() {
-               $text = "\x67" .
-                       "\x1a" . # forbidden ascii
-                       "\xea" . # bad head
-                       "\xc1\xa6" . # overlong sequence
-                       "\xad" . # bad tail
-                       "\x1c" . # forbidden ascii
-                       "\xb0" . # bad tail
-                       "\x3c" .
-                       "\x9e"; # bad tail
-               $expect = "\x67" .
-                       "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd" .
-                       "\x3c" .
-                       "\xef\xbf\xbd";
-               $this->assertEquals(
-                       bin2hex( $expect ),
-                       bin2hex( UtfNormal::cleanUp( $text ) ) );
-       }
-
-       public function testSurrogateRegression() {
-               $text = "\xed\xb4\x96" . # surrogate 0xDD16
-                       "\x83" . # bad tail
-                       "\xb4" . # bad tail
-                       "\xac"; # bad head
-               $expect = "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd";
-               $this->assertEquals(
-                       bin2hex( $expect ),
-                       bin2hex( UtfNormal::cleanUp( $text ) ) );
-       }
-
-       public function testBomRegression() {
-               $text = "\xef\xbf\xbe" . # U+FFFE, illegal char
-                       "\xb2" . # bad tail
-                       "\xef" . # bad head
-                       "\x59";
-               $expect = "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd" .
-                       "\xef\xbf\xbd" .
-                       "\x59";
-               $this->assertEquals(
-                       bin2hex( $expect ),
-                       bin2hex( UtfNormal::cleanUp( $text ) ) );
-       }
-
-       public function testForbiddenRegression() {
-               $text = "\xef\xbf\xbf"; # U+FFFF, illegal char
-               $expect = "\xef\xbf\xbd";
-               $this->assertEquals(
-                       bin2hex( $expect ),
-                       bin2hex( UtfNormal::cleanUp( $text ) ) );
-       }
-
-       public function testHangulRegression() {
-               $text = "\xed\x9c\xaf" . # Hangul char
-                       "\xe1\x87\x81"; # followed by another final jamo
-               $expect = $text; # Should *not* change.
-               $this->assertEquals(
-                       bin2hex( $expect ),
-                       bin2hex( UtfNormal::cleanUp( $text ) ) );
-       }
-}
diff --git a/tests/phpunit/includes/libs/normal/Utf8Test.php b/tests/phpunit/includes/libs/normal/Utf8Test.php
deleted file mode 100644 (file)
index 6d8457d..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-/**
- * Runs the UTF-8 decoder test at:
- * http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
- *
- * 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
- */
-
-class Utf8Test extends PHPUnit_Framework_TestCase {
-       public static function provideLines() {
-               global $IP;
-               $in = fopen( "$IP/tests/phpunit/data/normal/UTF-8-test.txt", "rt" );
-
-               $columns = 0;
-               while ( false !== ( $line = fgets( $in ) ) ) {
-                       $matches = array();
-                       if ( preg_match( '/^(Here come the tests:\s*)\|$/', $line, $matches ) ) {
-                               $columns = strpos( $line, '|' );
-                               break;
-                       }
-               }
-
-               if ( !$columns ) {
-                       print "Something seems to be wrong; couldn't extract line length.\n";
-                       print "Check that UTF-8-test.txt was downloaded correctly from\n";
-                       print "http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt\n";
-                       exit( -1 );
-               }
-
-
-               $ignore = array(
-                       # These two lines actually seem to be corrupt
-                       '2.1.1', '2.2.1' );
-
-               $exceptions = array(
-                       # Tests that should mark invalid characters due to using long
-                       # sequences beyond what is now considered legal.
-                       '2.1.5', '2.1.6', '2.2.4', '2.2.5', '2.2.6', '2.3.5',
-
-                       # Literal 0xffff, which is illegal
-                       '2.2.3' );
-
-               $longTests = array(
-                       # These tests span multiple lines
-                       '3.1.9', '3.2.1', '3.2.2', '3.2.3', '3.2.4', '3.2.5',
-                       '3.4' );
-
-               $testCases = array();
-
-               $section = null;
-               while ( false !== ( $line = fgets( $in ) ) ) {
-                       $matches = array();
-                       if ( preg_match( '/^(\d+)\s+(.*?)\s*\|/', $line, $matches ) ) {
-                               continue;
-                       }
-                       if ( preg_match( '/^(\d+\.\d+\.\d+)\s*/', $line, $matches ) ) {
-                               $test = $matches[1];
-
-                               if ( in_array( $test, $ignore ) ) {
-                                       continue;
-                               }
-                               if ( in_array( $test, $longTests ) ) {
-                                       fgets( $in );
-
-                                       // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
-                                       for ( $line = fgets( $in ); !preg_match( '/^\s+\|/', $line ); $line = fgets( $in ) ) {
-                                               // @codingStandardsIgnoreEnd
-
-                                               $testCases[] = array( $test, $line, $columns, $exceptions );
-                                       }
-                               } else {
-                                       $testCases[] = array( $test, $line, $columns, $exceptions );
-                               }
-                       }
-               }
-
-               return $testCases;
-       }
-
-
-       /**
-        * @dataProvider provideLines
-        * @covers UtfNormal::quickisNFCVerify
-        */
-       function testLine( $test, $line, $columns, $exceptions ) {
-               $stripped = $line;
-               UtfNormal::quickisNFCVerify( $stripped );
-
-               $same = ( $line == $stripped );
-               $len = mb_strlen( substr( $stripped, 0, strpos( $stripped, '|' ) ) );
-               if ( $len == 0 ) {
-                       $len = strlen( substr( $stripped, 0, strpos( $stripped, '|' ) ) );
-               }
-
-               $ok = $same ^ ( $test >= 3 );
-
-               $ok ^= in_array( $test, $exceptions );
-
-               $ok &= ( $columns == $len );
-
-               $this->assertEquals( 1, $ok );
-       }
-
-}
index 798e492..6758e94 100644 (file)
@@ -62,6 +62,8 @@ class XMPTest extends MediaWikiTestCase {
                        array( 'gps', 'Handling of exif GPS parameters in XMP' ),
                );
 
+               $xmpFiles[] = array( 'doctype-included', 'XMP includes doctype' );
+
                foreach ( $xmpFiles as $file ) {
                        $xmp = file_get_contents( $xmpPath . $file[0] . '.xmp' );
                        // I'm not sure if this is the best way to handle getting the
@@ -170,4 +172,52 @@ class XMPTest extends MediaWikiTestCase {
 
                $this->assertEquals( $expected, $actual );
        }
+
+       /**
+        * Test for multi-section, hostile XML
+        * @covers checkParseSafety
+        */
+       public function testCheckParseSafety() {
+
+               // Test for detection
+               $xmpPath = __DIR__ . '/../../data/xmp/';
+               $file = fopen( $xmpPath . 'doctype-included.xmp', 'rb' );
+               $valid = false;
+               $reader = new XMPReader();
+               do {
+                       $chunk = fread( $file, 10 );
+                       $valid = $reader->parse( $chunk, feof( $file ) );
+               } while ( !feof( $file ) );
+               $this->assertFalse( $valid, 'Check that doctype is detected in fragmented XML' );
+               $this->assertEquals(
+                       array(),
+                       $reader->getResults(),
+                       'Check that doctype is detected in fragmented XML'
+               );
+               fclose( $file );
+               unset( $reader );
+
+               // Test for false positives
+               $file = fopen( $xmpPath . 'doctype-not-included.xmp', 'rb' );
+               $valid = false;
+               $reader = new XMPReader();
+               do {
+                       $chunk = fread( $file, 10 );
+                       $valid = $reader->parse( $chunk, feof( $file ) );
+               } while ( !feof( $file ) );
+               $this->assertTrue(
+                       $valid,
+                       'Check for false-positive detecting doctype in fragmented XML'
+               );
+               $this->assertEquals(
+                       array(
+                               'xmp-exif' => array(
+                                       'DigitalZoomRatio' => '0/10',
+                                       'Flash' => '9'
+                               )
+                       ),
+                       $reader->getResults(),
+                       'Check that doctype is detected in fragmented XML'
+               );
+       }
 }
index 987b6e6..4516bb4 100644 (file)
@@ -1,8 +1,6 @@
 <?php
 /**
- * This class will test BagOStuff.
- *
- * @author     Matthias Mullie <mmullie@wikimedia.org>
+ * @author Matthias Mullie <mmullie@wikimedia.org>
  */
 class BagOStuffTest extends MediaWikiTestCase {
        private $cache;
@@ -23,6 +21,10 @@ class BagOStuffTest extends MediaWikiTestCase {
                $this->cache->delete( wfMemcKey( 'test' ) );
        }
 
+       /**
+        * @covers BagOStuff::merge
+        * @covers BagOStuff::mergeViaLock
+        */
        public function testMerge() {
                $key = wfMemcKey( 'test' );
 
@@ -100,6 +102,9 @@ class BagOStuffTest extends MediaWikiTestCase {
                }
        }
 
+       /**
+        * @covers BagOStuff::add
+        */
        public function testAdd() {
                $key = wfMemcKey( 'test' );
                $this->assertTrue( $this->cache->add( $key, 'test' ) );
@@ -125,6 +130,9 @@ class BagOStuffTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedValue, $actualValue, 'Value should be 1 after incrementing' );
        }
 
+       /**
+        * @covers BagOStuff::getMulti
+        */
        public function testGetMulti() {
                $value1 = array( 'this' => 'is', 'a' => 'test' );
                $value2 = array( 'this' => 'is', 'another' => 'test' );
index 1722611..cd54a9e 100644 (file)
@@ -10,6 +10,8 @@
  * @copyright Copyright © 2011, Antoine Musso
  * @file
  * @todo covers tags
+ *
+ * @group Database
  */
 
 class MagicVariableTest extends MediaWikiTestCase {
index 3ce3e1f..91aad10 100644 (file)
@@ -160,9 +160,6 @@ class NewParserTest extends MediaWikiTestCase {
                $this->djVuSupport = new DjVuSupport();
                // Tidy support
                $this->tidySupport = new TidySupport();
-               // We always set 'wgUseTidy' to false when parsing, but certain
-               // test-running modes still use tidy if available, so ensure
-               // that the tidy-related options are all set to their defaults.
                $tmpGlobals['wgUseTidy'] = false;
                $tmpGlobals['wgAlwaysUseTidy'] = false;
                $tmpGlobals['wgDebugTidy'] = false;
@@ -419,6 +416,7 @@ class NewParserTest extends MediaWikiTestCase {
                        'wgMathDirectory' => $uploadDir . '/math',
                        'wgDefaultLanguageVariant' => $variant,
                        'wgLinkHolderBatchSize' => $linkHolderBatchSize,
+                       'wgUseTidy' => isset( $opts['tidy'] ),
                );
 
                if ( $config ) {
@@ -727,12 +725,21 @@ class NewParserTest extends MediaWikiTestCase {
                                        . "Current configuration is:\n\$wgTexvc = '$wgTexvc'" );
                        }
                }
+
                if ( isset( $opts['djvu'] ) ) {
                        if ( !$this->djVuSupport->isEnabled() ) {
                                $this->markTestSkipped( "SKIPPED: djvu binaries do not exist or are not executable.\n" );
                        }
                }
 
+               if ( isset( $opts['tidy'] ) ) {
+                       if ( !$this->tidySupport->isEnabled() ) {
+                               $this->markTestSkipped( "SKIPPED: tidy extension is not installed.\n" );
+                       } else {
+                               $options->setTidy( true );
+                       }
+               }
+
                if ( isset( $opts['pst'] ) ) {
                        $out = $parser->preSaveTransform( $input, $title, $user, $options );
                } elseif ( isset( $opts['msg'] ) ) {
@@ -753,12 +760,7 @@ class NewParserTest extends MediaWikiTestCase {
                        $output->setTOCEnabled( !isset( $opts['notoc'] ) );
                        $out = $output->getText();
                        if ( isset( $opts['tidy'] ) ) {
-                               if ( !$this->tidySupport->isEnabled() ) {
-                                       $this->markTestSkipped( "SKIPPED: tidy extension is not installed.\n" );
-                               } else {
-                                       $out = MWTidy::tidy( $out );
-                                       $out = preg_replace( '/\s+$/', '', $out );
-                               }
+                               $out = preg_replace( '/\s+$/', '', $out );
                        }
 
                        if ( isset( $opts['showtitle'] ) ) {
@@ -769,6 +771,14 @@ class NewParserTest extends MediaWikiTestCase {
                                $out = "$title\n$out";
                        }
 
+                       if ( isset( $opts['showindicators'] ) ) {
+                               $indicators = '';
+                               foreach ( $output->getIndicators() as $id => $content ) {
+                                       $indicators .= "$id=$content\n";
+                               }
+                               $out = $indicators . $out;
+                       }
+
                        if ( isset( $opts['ill'] ) ) {
                                $out = implode( ' ', $output->getLanguageLinks() );
                        } elseif ( isset( $opts['cat'] ) ) {
index 1790086..af143ca 100644 (file)
@@ -1,5 +1,9 @@
 <?php
 
+/**
+ * @group Database
+ */
+
 class ParserMethodsTest extends MediaWikiLangTestCase {
 
        public static function providePreSaveTransform() {
index fe46f2c..e660e09 100644 (file)
@@ -89,65 +89,4 @@ class ParserOutputTest extends MediaWikiTestCase {
                $this->assertArrayNotHasKey( 'foo', $properties );
        }
 
-       /**
-        * @covers ParserOutput::hasCustomDataUpdates
-        * @covers ParserOutput::addSecondaryDataUpdate
-        */
-       public function testHasCustomDataUpdates() {
-               $po = new ParserOutput();
-               $this->assertFalse( $po->hasCustomDataUpdates() );
-
-               $dataUpdate = $this->getMock( 'DataUpdate' );
-               $po->addSecondaryDataUpdate( $dataUpdate );
-               $this->assertTrue( $po->hasCustomDataUpdates() );
-       }
-
-       /**
-        * @covers ParserOutput::getSecondaryDataUpdates
-        * @covers ParserOutput::addSecondaryDataUpdate
-        */
-       public function testGetSecondaryDataUpdates() {
-               // NOTE: getSecondaryDataUpdates always returns a LinksUpdate object
-               // in addition to the DataUpdates registered via addSecondaryDataUpdate().
-
-               $title = Title::makeTitle( NS_MAIN, 'Dummy' );
-               $title->resetArticleID( 7777777 );
-
-               $po = new ParserOutput();
-               $this->assertCount( 1, $po->getSecondaryDataUpdates( $title ) );
-
-               $dataUpdate = $this->getMock( 'DataUpdate' );
-               $po->addSecondaryDataUpdate( $dataUpdate );
-               $this->assertCount( 2, $po->getSecondaryDataUpdates( $title ) );
-
-               // Test Fallback to getTitleText
-               $this->insertPage( 'Project:ParserOutputTestDummyPage' );
-               $po->setTitleText( 'Project:ParserOutputTestDummyPage' );
-               $this->assertCount( 2, $po->getSecondaryDataUpdates() );
-       }
-
-       /**
-        * @covers ParserOutput::getSecondaryDataUpdates
-        * @covers ParserOutput::__sleep
-        */
-       public function testGetSecondaryDataUpdates_serialization() {
-               $title = Title::makeTitle( NS_MAIN, 'Dummy' );
-               $title->resetArticleID( 7777777 );
-
-               $po = new ParserOutput();
-
-               // Serializing is fine with no custom DataUpdates.
-               $po = unserialize( serialize( $po ) );
-               $this->assertCount( 1, $po->getSecondaryDataUpdates( $title ) );
-
-               // If there are custom DataUpdates, getSecondaryDataUpdates
-               // should fail after serialization.
-               $dataUpdate = $this->getMock( 'DataUpdate' );
-               $po->addSecondaryDataUpdate( $dataUpdate );
-               $po = unserialize( serialize( $po ) );
-
-               $this->setExpectedException( 'MWException' );
-               $po->getSecondaryDataUpdates( $title );
-       }
-
 }
index 251da47..3605e50 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 /**
+ * @group Database
  * @group Parser
  */
 class TagHookTest extends MediaWikiTestCase {
index b4c225c..b95316c 100644 (file)
@@ -261,6 +261,57 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                        ),
                                ),
                        ),
+                       // ResourceModuleSkinStyles with file module paths
+                       array(
+                               // Input
+                               array(
+                                       'ResourceFileModulePaths' => array(
+                                               'localBasePath' => '',
+                                               'remoteSkinPath' => 'FooBar',
+                                       ),
+                                       'ResourceModuleSkinStyles' => array(
+                                               'foobar' => array(
+                                                       'test.foo' => 'foo.css',
+                                               )
+                                       ),
+                               ),
+                               // Expected
+                               array(
+                                       'wgResourceModuleSkinStyles' => array(
+                                               'foobar' => array(
+                                                       'test.foo' => 'foo.css',
+                                                       'localBasePath' => $dir,
+                                                       'remoteSkinPath' => 'FooBar',
+                                               ),
+                                       ),
+                               ),
+                       ),
+                       // ResourceModuleSkinStyles with file module paths and an override
+                       array(
+                               // Input
+                               array(
+                                       'ResourceFileModulePaths' => array(
+                                               'localBasePath' => '',
+                                               'remoteSkinPath' => 'FooBar',
+                                       ),
+                                       'ResourceModuleSkinStyles' => array(
+                                               'foobar' => array(
+                                                       'test.foo' => 'foo.css',
+                                                       'remoteSkinPath' => 'BarFoo'
+                                               ),
+                                       ),
+                               ),
+                               // Expected
+                               array(
+                                       'wgResourceModuleSkinStyles' => array(
+                                               'foobar' => array(
+                                                       'test.foo' => 'foo.css',
+                                                       'localBasePath' => $dir,
+                                                       'remoteSkinPath' => 'BarFoo',
+                                               ),
+                                       ),
+                               ),
+                       ),
                );
        }
 
diff --git a/tests/phpunit/includes/registration/ExtensionRegistryTest.php b/tests/phpunit/includes/registration/ExtensionRegistryTest.php
new file mode 100644 (file)
index 0000000..1b24628
--- /dev/null
@@ -0,0 +1,195 @@
+<?php
+
+class ExtensionRegistryTest extends MediaWikiTestCase {
+
+       /**
+        * @covers ExtensionRegistry::exportExtractedData
+        * @dataProvider provideExportExtractedDataGlobals
+        */
+       public function testExportExtractedDataGlobals( $desc, $before, $globals, $expected ) {
+               // Set globals for test
+               if ( $before ) {
+                       foreach ( $before as $key => $value ) {
+                               // mw prefixed globals does not exist normally
+                               if ( substr( $key, 0, 2 ) == 'mw' ) {
+                                       $GLOBALS[$key] = $value;
+                               } else {
+                                       $this->setMwGlobals( $key, $value );
+                               }
+                       }
+               }
+
+               $info = array(
+                       'globals' => $globals,
+                       'callbacks' => array(),
+                       'defines' => array(),
+                       'credits' => array(),
+                       'attributes' => array(),
+               );
+               $registry = new ExtensionRegistry();
+               $class = new ReflectionClass( 'ExtensionRegistry' );
+               $method = $class->getMethod( 'exportExtractedData' );
+               $method->setAccessible( true );
+               $method->invokeArgs( $registry, array( $info ) );
+               foreach ( $expected as $name => $value ) {
+                       $this->assertArrayHasKey( $name, $GLOBALS, $desc );
+                       $this->assertEquals( $value, $GLOBALS[$name], $desc );
+               }
+
+               // Remove mw prefixed globals
+               if ( $before ) {
+                       foreach ( $before as $key => $value ) {
+                               if ( substr( $key, 0, 2 ) == 'mw' ) {
+                                       unset( $GLOBALS[$key] );
+                               }
+                       }
+               }
+       }
+
+       public static function provideExportExtractedDataGlobals() {
+               // "mwtest" prefix used instead of "$wg" to avoid potential conflicts
+               return array(
+                       array(
+                               'Simple non-array values',
+                               array(
+                                       'mwtestFooBarConfig' => true,
+                                       'mwtestFooBarConfig2' => 'string',
+                               ),
+                               array(
+                                       'mwtestFooBarDefault' => 1234,
+                                       'mwtestFooBarConfig' => false,
+                               ),
+                               array(
+                                       'mwtestFooBarConfig' => true,
+                                       'mwtestFooBarConfig2' => 'string',
+                                       'mwtestFooBarDefault' => 1234,
+                               ),
+                       ),
+                       array(
+                               'No global already set, simple array',
+                               null,
+                               array(
+                                       'mwtestDefaultOptions' => array(
+                                               'foobar' => true,
+                                       )
+                               ),
+                               array(
+                                       'mwtestDefaultOptions' => array(
+                                               'foobar' => true,
+                                       )
+                               ),
+                       ),
+                       array(
+                               'Global already set, simple array',
+                               array(
+                                       'mwtestDefaultOptions' => array(
+                                               'foobar' => true,
+                                               'foo' => 'string'
+                                       ),
+                               ),
+                               array(
+                                       'mwtestDefaultOptions' => array(
+                                               'barbaz' => 12345,
+                                               'foobar' => false,
+                                       ),
+                               ),
+                               array(
+                                       'mwtestDefaultOptions' => array(
+                                               'barbaz' => 12345,
+                                               'foo' => 'string',
+                                               'foobar' => true,
+                                       ),
+                               )
+                       ),
+                       array(
+                               'No global already set, $wgHooks',
+                               array(
+                                       'wgHooks' => array(),
+                               ),
+                               array(
+                                       'wgHooks' => array(
+                                               'FooBarEvent' => array(
+                                                       'FooBarClass::onFooBarEvent'
+                                               ),
+                                       ),
+                               ),
+                               array(
+                                       'wgHooks' => array(
+                                               'FooBarEvent' => array(
+                                                       'FooBarClass::onFooBarEvent'
+                                               ),
+                                       ),
+                               ),
+                       ),
+                       array(
+                               'Global already set, $wgHooks',
+                               array(
+                                       'wgHooks' => array(
+                                               'FooBarEvent' => array(
+                                                       'FooBarClass::onFooBarEvent'
+                                               ),
+                                               'BazBarEvent' => array(
+                                                       'FooBarClass::onBazBarEvent',
+                                               ),
+                                       ),
+                               ),
+                               array(
+                                       'wgHooks' => array(
+                                               'FooBarEvent' => array(
+                                                       'BazBarClass::onFooBarEvent',
+                                               ),
+                                       ),
+                               ),
+                               array(
+                                       'wgHooks' => array(
+                                               'FooBarEvent' => array(
+                                                       'FooBarClass::onFooBarEvent',
+                                                       'BazBarClass::onFooBarEvent',
+                                               ),
+                                               'BazBarEvent' => array(
+                                                       'FooBarClass::onBazBarEvent',
+                                               ),
+                                       ),
+                               ),
+                       ),
+                       array(
+                               'Global already set, $wgGroupPermissions',
+                               array(
+                                       'wgGroupPermissions' => array(
+                                               'sysop' => array(
+                                                       'something' => true,
+                                               ),
+                                               'user' => array(
+                                                       'somethingtwo' => true,
+                                               )
+                                       ),
+                               ),
+                               array(
+                                       'wgGroupPermissions' => array(
+                                               'customgroup' => array(
+                                                       'right' => true,
+                                               ),
+                                               'user' => array(
+                                                       'right' => true,
+                                                       'somethingtwo' => false,
+                                               )
+                                       ),
+                               ),
+                               array(
+                                       'wgGroupPermissions' => array(
+                                               'customgroup' => array(
+                                                       'right' => true,
+                                               ),
+                                               'sysop' => array(
+                                                       'something' => true,
+                                               ),
+                                               'user' => array(
+                                                       'somethingtwo' => true,
+                                                       'right' => true,
+                                               )
+                                       ),
+                               ),
+                       )
+               );
+       }
+}
index 9afc54d..e1197df 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 /**
+ * @group Database
  * @group ResourceLoader
  */
 class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
@@ -18,7 +19,7 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
                );
        }
 
-       public static function getModules() {
+       private static function getModules() {
                $base = array(
                        'localBasePath' => realpath( dirname( __FILE__ ) ),
                );
@@ -45,10 +46,16 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
                                        'templates/template_awesome.handlebars',
                                ),
                        ),
+
+                       'aliasFooFromBar' => $base + array(
+                               'templates' => array(
+                                       'foo.foo' => 'templates/template.bar',
+                               ),
+                       ),
                );
        }
 
-       public static function providerGetTemplates() {
+       public static function providerTemplateDependencies() {
                $modules = self::getModules();
 
                return array(
@@ -57,39 +64,42 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
                                array(),
                        ),
                        array(
-                               $modules['templateModuleHandlebars'],
+                               $modules['htmlTemplateModule'],
                                array(
-                                       'templates/template_awesome.handlebars' => "wow\n",
+                                       'mediawiki.template',
                                ),
                        ),
                        array(
-                               $modules['htmlTemplateModule'],
+                               $modules['templateModuleHandlebars'],
                                array(
-                                       'templates/template.html' => "<strong>hello</strong>\n",
-                                       'templates/template2.html' => "<div>goodbye</div>\n",
+                                       'mediawiki.template',
+                                       'mediawiki.template.handlebars',
                                ),
                        ),
                        array(
-                               $modules['aliasedHtmlTemplateModule'],
+                               $modules['aliasFooFromBar'],
                                array(
-                                       'foo.html' => "<strong>hello</strong>\n",
-                                       'bar.html' => "<div>goodbye</div>\n",
+                                       'mediawiki.template',
+                                       'mediawiki.template.foo',
                                ),
                        ),
                );
        }
 
-       public static function providerGetModifiedTime() {
-               $modules = self::getModules();
-
-               return array(
-                       // Check the default value when no templates present in module is 1
-                       array( $modules['noTemplateModule'], 1 ),
-               );
+       /**
+        * @dataProvider providerTemplateDependencies
+        * @covers ResourceLoaderFileModule::__construct
+        * @covers ResourceLoaderFileModule::getDependencies
+        */
+       public function testTemplateDependencies( $module, $expected ) {
+               $rl = new ResourceLoaderFileModule( $module );
+               $this->assertEquals( $rl->getDependencies(), $expected );
        }
 
        /**
+        * @covers ResourceLoaderFileModule::getAllStyleFiles
         * @covers ResourceLoaderFileModule::getAllSkinStyleFiles
+        * @covers ResourceLoaderFileModule::getSkinStyleFiles
         */
        public function testGetAllSkinStyleFiles() {
                $baseParams = array(
@@ -132,6 +142,81 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
                );
        }
 
+       /**
+        * Strip @noflip annotations from CSS code.
+        * @param string $css
+        * @return string
+        */
+       private static function stripNoflip( $css ) {
+               return str_replace( '/*@noflip*/ ', '', $css );
+       }
+
+       /**
+        * What happens when you mix @embed and @noflip?
+        * This really is an integration test, but oh well.
+        *
+        * @covers ResourceLoaderFileModule::getStyles
+        * @covers ResourceLoaderFileModule::getStyleFiles
+        */
+       public function testMixedCssAnnotations(  ) {
+               $basePath = __DIR__ . '/../../data/css';
+               $testModule = new ResourceLoaderFileModule( array(
+                       'localBasePath' => $basePath,
+                       'styles' => array( 'test.css' ),
+               ) );
+               $expectedModule = new ResourceLoaderFileModule( array(
+                       'localBasePath' => $basePath,
+                       'styles' => array( 'expected.css' ),
+               ) );
+
+               $contextLtr = $this->getResourceLoaderContext( 'en', 'ltr' );
+               $contextRtl = $this->getResourceLoaderContext( 'he', 'rtl' );
+
+               // Since we want to compare the effect of @noflip+@embed against the effect of just @embed, and
+               // the @noflip annotations are always preserved, we need to strip them first.
+               $this->assertEquals(
+                       $expectedModule->getStyles( $contextLtr ),
+                       self::stripNoflip( $testModule->getStyles( $contextLtr ) ),
+                       "/*@noflip*/ with /*@embed*/ gives correct results in LTR mode"
+               );
+               $this->assertEquals(
+                       $expectedModule->getStyles( $contextLtr ),
+                       self::stripNoflip( $testModule->getStyles( $contextRtl ) ),
+                       "/*@noflip*/ with /*@embed*/ gives correct results in RTL mode"
+               );
+       }
+
+       public static function providerGetTemplates() {
+               $modules = self::getModules();
+
+               return array(
+                       array(
+                               $modules['noTemplateModule'],
+                               array(),
+                       ),
+                       array(
+                               $modules['templateModuleHandlebars'],
+                               array(
+                                       'templates/template_awesome.handlebars' => "wow\n",
+                               ),
+                       ),
+                       array(
+                               $modules['htmlTemplateModule'],
+                               array(
+                                       'templates/template.html' => "<strong>hello</strong>\n",
+                                       'templates/template2.html' => "<div>goodbye</div>\n",
+                               ),
+                       ),
+                       array(
+                               $modules['aliasedHtmlTemplateModule'],
+                               array(
+                                       'foo.html' => "<strong>hello</strong>\n",
+                                       'bar.html' => "<div>goodbye</div>\n",
+                               ),
+                       ),
+               );
+       }
+
        /**
         * @dataProvider providerGetTemplates
         * @covers ResourceLoaderFileModule::getTemplates
@@ -142,6 +227,15 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
                $this->assertEquals( $rl->getTemplates(), $expected );
        }
 
+       public static function providerGetModifiedTime() {
+               $modules = self::getModules();
+
+               return array(
+                       // Check the default value when no templates present in module is 1
+                       array( $modules['noTemplateModule'], 1 ),
+               );
+       }
+
        /**
         * @dataProvider providerGetModifiedTime
         * @covers ResourceLoaderFileModule::getModifiedTime
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php
new file mode 100644 (file)
index 0000000..d0bc210
--- /dev/null
@@ -0,0 +1,162 @@
+<?php
+
+/**
+ * @group ResourceLoader
+ */
+class ResourceLoaderImageModuleTest extends ResourceLoaderTestCase {
+
+       public static $commonImageData = array(
+               'add' => 'add.gif',
+               'remove' => array(
+                       'file' => 'remove.svg',
+                       'variants' => array( 'destructive' ),
+               ),
+               'next' => array(
+                       'file' => array(
+                               'ltr' => 'next.svg',
+                               'rtl' => 'prev.svg'
+                       ),
+               ),
+               'help' => array(
+                       'file' => array(
+                               'ltr' => 'help-ltr.svg',
+                               'rtl' => 'help-rtl.svg',
+                               'lang' => array(
+                                       'he' => 'help-ltr.svg',
+                               )
+                       ),
+               ),
+               'bold' => array(
+                       'file' => array(
+                               'default' => 'bold-a.svg',
+                               'lang' => array(
+                                       'en' => 'bold-b.svg',
+                                       'ar,de' => 'bold-f.svg',
+                               )
+                       ),
+               )
+       );
+
+       public static $commonImageVariants = array(
+               'invert' => array(
+                       'color' => '#FFFFFF',
+                       'global' => true,
+               ),
+               'primary' => array(
+                       'color' => '#598AD1',
+               ),
+               'constructive' => array(
+                       'color' => '#00C697',
+               ),
+               'destructive' => array(
+                       'color' => '#E81915',
+               ),
+       );
+
+       public static function providerGetModules() {
+               return array(
+                       array(
+                               array(
+                                       'class' => 'ResourceLoaderImageModule',
+                                       'prefix' => 'oo-ui-icon',
+                                       'variants' => self::$commonImageVariants,
+                                       'images' => self::$commonImageData,
+                               ),
+                               '.oo-ui-icon-add {
+       ...
+}
+.oo-ui-icon-add-invert {
+       ...
+}
+.oo-ui-icon-remove {
+       ...
+}
+.oo-ui-icon-remove-invert {
+       ...
+}
+.oo-ui-icon-remove-destructive {
+       ...
+}
+.oo-ui-icon-next {
+       ...
+}
+.oo-ui-icon-next-invert {
+       ...
+}
+.oo-ui-icon-help {
+       ...
+}
+.oo-ui-icon-help-invert {
+       ...
+}
+.oo-ui-icon-bold {
+       ...
+}
+.oo-ui-icon-bold-invert {
+       ...
+}',
+                       ),
+                       array(
+                               array(
+                                       'class' => 'ResourceLoaderImageModule',
+                                       'selectorWithoutVariant' => '.mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+                                       'selectorWithVariant' => '.mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
+                                       'variants' => self::$commonImageVariants,
+                                       'images' => self::$commonImageData,
+                               ),
+                               '.mw-ui-icon-add:after, .mw-ui-icon-add:before {
+       ...
+}
+.mw-ui-icon-add-invert:after, .mw-ui-icon-add-invert:before {
+       ...
+}
+.mw-ui-icon-remove:after, .mw-ui-icon-remove:before {
+       ...
+}
+.mw-ui-icon-remove-invert:after, .mw-ui-icon-remove-invert:before {
+       ...
+}
+.mw-ui-icon-remove-destructive:after, .mw-ui-icon-remove-destructive:before {
+       ...
+}
+.mw-ui-icon-next:after, .mw-ui-icon-next:before {
+       ...
+}
+.mw-ui-icon-next-invert:after, .mw-ui-icon-next-invert:before {
+       ...
+}
+.mw-ui-icon-help:after, .mw-ui-icon-help:before {
+       ...
+}
+.mw-ui-icon-help-invert:after, .mw-ui-icon-help-invert:before {
+       ...
+}
+.mw-ui-icon-bold:after, .mw-ui-icon-bold:before {
+       ...
+}
+.mw-ui-icon-bold-invert:after, .mw-ui-icon-bold-invert:before {
+       ...
+}',
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider providerGetModules
+        * @covers ResourceLoaderImageModule::getStyles
+        */
+       public function testGetStyles( $module, $expected ) {
+               $module = new ResourceLoaderImageModuleTestable( $module, __DIR__ . '/../../data/resourceloader' );
+               $styles = $module->getStyles( $this->getResourceLoaderContext() );
+               $this->assertEquals( $expected, $styles['all'] );
+       }
+}
+
+class ResourceLoaderImageModuleTestable extends ResourceLoaderImageModule {
+       /**
+        * Replace with a stub to make test cases easier to write.
+        */
+       protected function getCssDeclarations( $primary, $fallback ) {
+               return array( '...' );
+       }
+}
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php
new file mode 100644 (file)
index 0000000..758cfe1
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+
+/**
+ * @group ResourceLoader
+ */
+class ResourceLoaderImageTest extends ResourceLoaderTestCase {
+
+       protected $imagesPath;
+
+       protected function setUp() {
+               parent::setUp();
+               $this->imagesPath = __DIR__ . '/../../data/resourceloader';
+       }
+
+       protected function getTestImage( $name ) {
+               $options = ResourceLoaderImageModuleTest::$commonImageData[$name];
+               $fileDescriptor = is_string( $options ) ? $options : $options['file'];
+               $allowedVariants = is_array( $options ) && isset( $options['variants'] ) ? $options['variants'] : array();
+               $variants = array_fill_keys( $allowedVariants, array( 'color' => 'red' ) );
+               return new ResourceLoaderImageTestable( $name, 'test', $fileDescriptor, $this->imagesPath, $variants );
+       }
+
+       public static function provideGetPath() {
+               return array(
+                       array( 'add', 'en', 'add.gif' ),
+                       array( 'add', 'he', 'add.gif' ),
+                       array( 'remove', 'en', 'remove.svg' ),
+                       array( 'remove', 'he', 'remove.svg' ),
+                       array( 'next', 'en', 'next.svg' ),
+                       array( 'next', 'he', 'prev.svg' ),
+                       array( 'help', 'en', 'help-ltr.svg' ),
+                       array( 'help', 'ar', 'help-rtl.svg' ),
+                       array( 'help', 'he', 'help-ltr.svg' ),
+                       array( 'bold', 'en', 'bold-b.svg' ),
+                       array( 'bold', 'de', 'bold-f.svg' ),
+                       array( 'bold', 'ar', 'bold-f.svg' ),
+                       array( 'bold', 'fr', 'bold-a.svg' ),
+                       array( 'bold', 'he', 'bold-a.svg' ),
+               );
+       }
+
+       /**
+        * @covers ResourceLoaderImage::getPath
+        * @dataProvider provideGetPath
+        */
+       public function testGetPath( $imageName, $languageCode, $path ) {
+               static $dirMap = array(
+                       'en' => 'ltr',
+                       'de' => 'ltr',
+                       'fr' => 'ltr',
+                       'he' => 'rtl',
+                       'ar' => 'rtl',
+               );
+               static $contexts = array();
+
+               $image = $this->getTestImage( $imageName );
+               $context = $this->getResourceLoaderContext( $languageCode, $dirMap[$languageCode] );
+
+               $this->assertEquals( $image->getPath( $context ), $this->imagesPath . '/' . $path );
+       }
+
+       /**
+        * @covers ResourceLoaderImage::getExtension
+        * @covers ResourceLoaderImage::getMimeType
+        */
+       public function testGetExtension() {
+               $image = $this->getTestImage( 'remove' );
+               $this->assertEquals( $image->getExtension(), 'svg' );
+               $this->assertEquals( $image->getExtension( 'original' ), 'svg' );
+               $this->assertEquals( $image->getExtension( 'rasterized' ), 'png' );
+               $image = $this->getTestImage( 'add' );
+               $this->assertEquals( $image->getExtension(), 'gif' );
+               $this->assertEquals( $image->getExtension( 'original' ), 'gif' );
+               $this->assertEquals( $image->getExtension( 'rasterized' ), 'gif' );
+       }
+
+       /**
+        * @covers ResourceLoaderImage::getImageData
+        * @covers ResourceLoaderImage::variantize
+        * @covers ResourceLoaderImage::massageSvgPathdata
+        */
+       public function testGetImageData() {
+               $context = $this->getResourceLoaderContext( 'en', 'ltr' );
+
+               $image = $this->getTestImage( 'remove' );
+               $data = file_get_contents( $this->imagesPath . '/remove.svg' );
+               $dataConstructive = file_get_contents( $this->imagesPath . '/remove_variantize.svg' );
+               $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data );
+               $this->assertEquals( $image->getImageData( $context, 'destructive', 'original' ), $dataConstructive );
+               // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output
+               $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), 'RASTERIZESTUB' );
+
+               $image = $this->getTestImage( 'add' );
+               $data = file_get_contents( $this->imagesPath . '/add.gif' );
+               $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data );
+               $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), $data );
+       }
+
+       /**
+        * @covers ResourceLoaderImage::massageSvgPathdata
+        */
+       public function testMassageSvgPathdata() {
+               $image = $this->getTestImage( 'next' );
+               $data = file_get_contents( $this->imagesPath . '/next.svg' );
+               $dataMassaged = file_get_contents( $this->imagesPath . '/next_massage.svg' );
+               $this->assertEquals( $image->massageSvgPathdata( $data ), $dataMassaged );
+       }
+}
+
+class ResourceLoaderImageTestable extends ResourceLoaderImage {
+       // Make some protected methods public
+       public function getPath( ResourceLoaderContext $context ) {
+               return parent::getPath( $context );
+       }
+       public function massageSvgPathdata( $svg ) {
+               return parent::massageSvgPathdata( $svg );
+       }
+       // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output
+       public function rasterize( $svg ) {
+               return 'RASTERIZESTUB';
+       }
+}
index 4fc7378..ca7307e 100644 (file)
@@ -5,8 +5,6 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
        protected function setUp() {
                parent::setUp();
 
-               // $wgResourceLoaderLESSFunctions, $wgResourceLoaderLESSImportPaths; $wgResourceLoaderLESSVars;
-
                $this->setMwGlobals( array(
                        'wgResourceLoaderLESSFunctions' => array(
                                'test-sum' => function ( $frame, $less ) {
@@ -28,15 +26,12 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                ) );
        }
 
-       /* Provider Methods */
        public static function provideValidModules() {
                return array(
                        array( 'TEST.validModule1', new ResourceLoaderTestModule() ),
                );
        }
 
-       /* Test Methods */
-
        /**
         * Ensures that the ResourceLoaderRegisterModules hook is called when a new
         * ResourceLoader object is constructed.
@@ -85,6 +80,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                        'localBasePath' => $basePath,
                        'styles' => array( 'styles.less' ),
                ) );
+               $module->setName( 'test.less' );
                $styles = $module->getStyles( $context );
                $this->assertStringEqualsFile( $basePath . '/styles.css', $styles['all'] );
        }
@@ -94,42 +90,10 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
         * @param string $css
         * @return string
         */
-       private function stripNoflip( $css ) {
+       private static function stripNoflip( $css ) {
                return str_replace( '/*@noflip*/ ', '', $css );
        }
 
-       /**
-        * What happens when you mix @embed and @noflip?
-        * This really is an integration test, but oh well.
-        */
-       public function testMixedCssAnnotations(  ) {
-               $basePath = __DIR__ . '/../../data/css';
-               $testModule = new ResourceLoaderFileModule( array(
-                       'localBasePath' => $basePath,
-                       'styles' => array( 'test.css' ),
-               ) );
-               $expectedModule = new ResourceLoaderFileModule( array(
-                       'localBasePath' => $basePath,
-                       'styles' => array( 'expected.css' ),
-               ) );
-
-               $contextLtr = $this->getResourceLoaderContext( 'en', 'ltr' );
-               $contextRtl = $this->getResourceLoaderContext( 'he', 'rtl' );
-
-               // Since we want to compare the effect of @noflip+@embed against the effect of just @embed, and
-               // the @noflip annotations are always preserved, we need to strip them first.
-               $this->assertEquals(
-                       $expectedModule->getStyles( $contextLtr ),
-                       $this->stripNoflip( $testModule->getStyles( $contextLtr ) ),
-                       "/*@noflip*/ with /*@embed*/ gives correct results in LTR mode"
-               );
-               $this->assertEquals(
-                       $expectedModule->getStyles( $contextLtr ),
-                       $this->stripNoflip( $testModule->getStyles( $contextRtl ) ),
-                       "/*@noflip*/ with /*@embed*/ gives correct results in RTL mode"
-               );
-       }
-
        /**
         * @dataProvider providePackedModules
         * @covers ResourceLoader::makePackedModulesString
@@ -191,6 +155,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
        /**
         * @dataProvider provideAddSource
         * @covers ResourceLoader::addSource
+        * @covers ResourceLoader::getSources
         */
        public function testAddSource( $name, $info, $expected ) {
                $rl = new ResourceLoader;
@@ -221,6 +186,106 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                );
        }
 
+       public static function provideLoaderImplement() {
+               return array(
+                       array( array(
+                               'title' => 'Implement scripts, styles and messages',
+
+                               'name' => 'test.example',
+                               'scripts' => 'mw.example();',
+                               'styles' => array( 'css' => array( '.mw-example {}' ) ),
+                               'messages' => array( 'example' => '' ),
+                               'templates' => array(),
+
+                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+mw.example();
+}, {
+    "css": [
+        ".mw-example {}"
+    ]
+}, {
+    "example": ""
+} );',
+                       ) ),
+                       array( array(
+                               'title' => 'Implement scripts',
+
+                               'name' => 'test.example',
+                               'scripts' => 'mw.example();',
+                               'styles' => array(),
+                               'messages' => new XmlJsCode( '{}' ),
+                               'templates' => array(),
+                               'title' => 'scripts, styles and messags',
+
+                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+mw.example();
+} );',
+                       ) ),
+                       array( array(
+                               'title' => 'Implement styles',
+
+                               'name' => 'test.example',
+                               'scripts' => array(),
+                               'styles' => array( 'css' => array( '.mw-example {}' ) ),
+                               'messages' => new XmlJsCode( '{}' ),
+                               'templates' => array(),
+
+                               'expected' => 'mw.loader.implement( "test.example", [], {
+    "css": [
+        ".mw-example {}"
+    ]
+} );',
+                       ) ),
+                       array( array(
+                               'title' => 'Implement scripts and messages',
+
+                               'name' => 'test.example',
+                               'scripts' => 'mw.example();',
+                               'styles' => array(),
+                               'messages' => array( 'example' => '' ),
+                               'templates' => array(),
+
+                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+mw.example();
+}, {}, {
+    "example": ""
+} );',
+                       ) ),
+                       array( array(
+                               'title' => 'Implement scripts and templates',
+
+                               'name' => 'test.example',
+                               'scripts' => 'mw.example();',
+                               'styles' => array(),
+                               'messages' => new XmlJsCode( '{}' ),
+                               'templates' => array( 'example.html' => '' ),
+
+                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+mw.example();
+}, {}, {}, {
+    "example.html": ""
+} );',
+                       ) ),
+               );
+       }
+
+       /**
+        * @dataProvider provideLoaderImplement
+        * @covers ResourceLoader::makeLoaderImplementScript
+        */
+       public function testMakeLoaderImplementScript( $case ) {
+               $this->assertEquals(
+                       $case['expected'],
+                       ResourceLoader::makeLoaderImplementScript(
+                               $case['name'],
+                               $case['scripts'],
+                               $case['styles'],
+                               $case['messages'],
+                               $case['templates']
+                       )
+               );
+       }
+
        /**
         * @covers ResourceLoader::getLoadScript
         */
@@ -240,4 +305,14 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                        $this->assertTrue( true );
                }
        }
+
+       /**
+        * @covers ResourceLoader::isModuleRegistered
+        */
+       public function testIsModuleRegistered() {
+               $rl = new ResourceLoader();
+               $rl->register( 'test.module', new ResourceLoaderTestModule() );
+               $this->assertTrue( $rl->isModuleRegistered( 'test.module' ) );
+               $this->assertFalse( $rl->isModuleRegistered( 'test.modulenotregistered' ) );
+       }
 }
index 9dc1805..93a3ebb 100644 (file)
@@ -2,12 +2,94 @@
 
 class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
 
+       /**
+        * @covers ResourceLoaderWikiModule::__construct
+        * @dataProvider provideConstructor
+        */
+       public function testConstructor( $params ) {
+               $module = new ResourceLoaderWikiModule( $params );
+               $this->assertInstanceOf( 'ResourceLoaderWikiModule', $module );
+       }
+
+       public static function provideConstructor() {
+               return array(
+                       // Nothing
+                       array( null ),
+                       array( array() ),
+                       // Unrecognized settings
+                       array( array( 'foo' => 'baz' ) ),
+                       // Real settings
+                       array( array( 'scripts' => array( 'MediaWiki:Common.js' ) ) ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetPages
+        * @covers ResourceLoaderWikiModule::getPages
+        */
+       public function testGetPages( $params, Config $config, $expected ) {
+               $module = new ResourceLoaderWikiModule( $params );
+               $module->setConfig( $config );
+
+               // Use getDefinitionSummary because getPages is protected
+               $summary = $module->getDefinitionSummary( ResourceLoaderContext::newDummyContext() );
+               $this->assertEquals(
+                       $expected,
+                       $summary['pages']
+               );
+       }
+
+       public static function provideGetPages() {
+               $settings = array(
+                       'UseSiteJs' => true,
+                       'UseSiteCss' => true,
+               );
+
+               $params = array(
+                       'styles' => array( 'MediaWiki:Common.css' ),
+                       'scripts' => array( 'MediaWiki:Common.js' ),
+               );
+
+               return array(
+                       array( array(), new HashConfig( $settings ), array() ),
+                       array( $params, new HashConfig( $settings ), array(
+                               'MediaWiki:Common.js' => array( 'type' => 'script' ),
+                               'MediaWiki:Common.css' => array( 'type' => 'style' )
+                       ) ),
+                       array( $params, new HashConfig( array( 'UseSiteCss' => false ) + $settings ), array(
+                               'MediaWiki:Common.js' => array( 'type' => 'script' ),
+                       ) ),
+                       array( $params, new HashConfig( array( 'UseSiteJs' => false ) + $settings ), array(
+                               'MediaWiki:Common.css' => array( 'type' => 'style' ),
+                       ) ),
+                       array( $params, new HashConfig( array( 'UseSiteJs' => false, 'UseSiteCss' => false ) ), array() ),
+               );
+       }
+
+       /**
+        * @covers ResourceLoaderWikiModule::getGroup
+        * @dataProvider provideGetGroup
+        */
+       public function testGetGroup( $params, $expected ) {
+               $module = new ResourceLoaderWikiModule( $params );
+               $this->assertEquals( $expected, $module->getGroup() );
+       }
+
+       public static function provideGetGroup() {
+               return array(
+                       // No group specified
+                       array( array(), null ),
+                       // A random group
+                       array( array( 'group' => 'foobar' ), 'foobar' ),
+               );
+       }
+
        /**
         * @covers ResourceLoaderWikiModule::isKnownEmpty
         * @dataProvider provideIsKnownEmpty
         */
        public function testIsKnownEmpty( $titleInfo, $group, $expected ) {
-               $module = $this->getMockBuilder( 'ResourceLoaderWikiModuleTestModule' )
+               $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' )
                        ->setMethods( array( 'getTitleInfo', 'getGroup' ) )
                        ->getMock();
                $module->expects( $this->any() )
diff --git a/tests/phpunit/includes/site/CachingSiteStoreTest.php b/tests/phpunit/includes/site/CachingSiteStoreTest.php
new file mode 100644 (file)
index 0000000..d0a7980
--- /dev/null
@@ -0,0 +1,161 @@
+<?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
+ * @since 1.25
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @group Site
+ * @group Database
+ *
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class CachingSiteStoreTest extends MediaWikiTestCase {
+
+       /**
+        * @covers CachingSiteStore::getSites
+        */
+       public function testGetSites() {
+               $testSites = TestSites::getSites();
+
+               $store = new CachingSiteStore(
+                       $this->getHashSiteStore( $testSites ),
+                       wfGetMainCache()
+               );
+
+               $sites = $store->getSites();
+
+               $this->assertInstanceOf( 'SiteList', $sites );
+
+               /**
+                * @var Site $site
+                */
+               foreach ( $sites as $site ) {
+                       $this->assertInstanceOf( 'Site', $site );
+               }
+
+               foreach ( $testSites as $site ) {
+                       if ( $site->getGlobalId() !== null ) {
+                               $this->assertTrue( $sites->hasSite( $site->getGlobalId() ) );
+                       }
+               }
+       }
+
+       /**
+        * @covers CachingSiteStore::saveSites
+        */
+       public function testSaveSites() {
+               $store = new CachingSiteStore( new HashSiteStore(), wfGetMainCache() );
+
+               $sites = array();
+
+               $site = new Site();
+               $site->setGlobalId( 'ertrywuutr' );
+               $site->setLanguageCode( 'en' );
+               $sites[] = $site;
+
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'sdfhxujgkfpth' );
+               $site->setLanguageCode( 'nl' );
+               $sites[] = $site;
+
+               $this->assertTrue( $store->saveSites( $sites ) );
+
+               $site = $store->getSite( 'ertrywuutr' );
+               $this->assertInstanceOf( 'Site', $site );
+               $this->assertEquals( 'en', $site->getLanguageCode() );
+
+               $site = $store->getSite( 'sdfhxujgkfpth' );
+               $this->assertInstanceOf( 'Site', $site );
+               $this->assertEquals( 'nl', $site->getLanguageCode() );
+       }
+
+       /**
+        * @covers CachingSiteStore::reset
+        */
+       public function testReset() {
+               $dbSiteStore = $this->getMockBuilder( 'SiteStore' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               // php 5.3 compatibility!
+               $self = $this;
+
+               $dbSiteStore->expects( $this->any() )
+                       ->method( 'getSite' )
+                       ->will( $this->returnValue( $self->getTestSite() ) );
+
+               $dbSiteStore->expects( $this->any() )
+                       ->method( 'getSites' )
+                       ->will( $this->returnCallback( function() use( $self ) {
+                               $siteList = new SiteList();
+                               $siteList->setSite( $self->getTestSite() );
+
+                               return $siteList;
+                       } ) );
+
+               $store = new CachingSiteStore( $dbSiteStore, wfGetMainCache() );
+
+               // initialize internal cache
+               $this->assertGreaterThan( 0, $store->getSites()->count(), 'count sites' );
+
+               $store->getSite( 'enwiki' )->setLanguageCode( 'en-ca' );
+
+               // sanity check: $store should have the new language code for 'enwiki'
+               $this->assertEquals( 'en-ca', $store->getSite( 'enwiki' )->getLanguageCode(), 'sanity check' );
+
+               // purge cache
+               $store->reset();
+
+               // the internal cache of $store should be updated, and now pulling
+               // the site from the 'fallback' DBSiteStore with the original language code.
+               $this->assertEquals( 'en', $store->getSite( 'enwiki' )->getLanguageCode(), 'reset' );
+       }
+
+       public function getTestSite() {
+               $enwiki = new MediaWikiSite();
+               $enwiki->setGlobalId( 'enwiki' );
+               $enwiki->setLanguageCode( 'en' );
+
+               return $enwiki;
+       }
+
+       /**
+        * @covers CachingSiteStore::clear
+        */
+       public function testClear() {
+               $store = new CachingSiteStore( new HashSiteStore(), wfGetMainCache() );
+               $this->assertTrue( $store->clear() );
+
+               $site = $store->getSite( 'enwiki' );
+               $this->assertNull( $site );
+
+               $sites = $store->getSites();
+               $this->assertEquals( 0, $sites->count() );
+       }
+
+       private function getHashSiteStore( array $sites ) {
+               $siteStore = new HashSiteStore();
+               $siteStore->saveSites( $sites );
+
+               return $siteStore;
+       }
+
+}
diff --git a/tests/phpunit/includes/site/DBSiteStoreTest.php b/tests/phpunit/includes/site/DBSiteStoreTest.php
new file mode 100644 (file)
index 0000000..673ba54
--- /dev/null
@@ -0,0 +1,133 @@
+<?php
+
+/**
+ * Tests for the DBSiteStore class.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.21
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @group Site
+ * @group Database
+ *
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class DBSiteStoreTest extends MediaWikiTestCase {
+
+       /**
+        * @covers DBSiteStore::getSites
+        */
+       public function testGetSites() {
+               $expectedSites = TestSites::getSites();
+               TestSites::insertIntoDb();
+
+               $store = new DBSiteStore();
+
+               $sites = $store->getSites();
+
+               $this->assertInstanceOf( 'SiteList', $sites );
+
+               /**
+                * @var Site $site
+                */
+               foreach ( $sites as $site ) {
+                       $this->assertInstanceOf( 'Site', $site );
+               }
+
+               foreach ( $expectedSites as $site ) {
+                       if ( $site->getGlobalId() !== null ) {
+                               $this->assertTrue( $sites->hasSite( $site->getGlobalId() ) );
+                       }
+               }
+       }
+
+       /**
+        * @covers DBSiteStore::saveSites
+        */
+       public function testSaveSites() {
+               $store = new DBSiteStore();
+
+               $sites = array();
+
+               $site = new Site();
+               $site->setGlobalId( 'ertrywuutr' );
+               $site->setLanguageCode( 'en' );
+               $sites[] = $site;
+
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'sdfhxujgkfpth' );
+               $site->setLanguageCode( 'nl' );
+               $sites[] = $site;
+
+               $this->assertTrue( $store->saveSites( $sites ) );
+
+               $site = $store->getSite( 'ertrywuutr' );
+               $this->assertInstanceOf( 'Site', $site );
+               $this->assertEquals( 'en', $site->getLanguageCode() );
+               $this->assertTrue( is_integer( $site->getInternalId() ) );
+               $this->assertTrue( $site->getInternalId() >= 0 );
+
+               $site = $store->getSite( 'sdfhxujgkfpth' );
+               $this->assertInstanceOf( 'Site', $site );
+               $this->assertEquals( 'nl', $site->getLanguageCode() );
+               $this->assertTrue( is_integer( $site->getInternalId() ) );
+               $this->assertTrue( $site->getInternalId() >= 0 );
+       }
+
+       /**
+        * @covers DBSiteStore::reset
+        */
+       public function testReset() {
+               $store1 = new DBSiteStore();
+               $store2 = new DBSiteStore();
+
+               // initialize internal cache
+               $this->assertGreaterThan( 0, $store1->getSites()->count() );
+               $this->assertGreaterThan( 0, $store2->getSites()->count() );
+
+               // Clear actual data. Will purge the external cache and reset the internal
+               // cache in $store1, but not the internal cache in store2.
+               $this->assertTrue( $store1->clear() );
+
+               // sanity check: $store2 should have a stale cache now
+               $this->assertNotNull( $store2->getSite( 'enwiki' ) );
+
+               // purge cache
+               $store2->reset();
+
+               // ...now the internal cache of $store2 should be updated and thus empty.
+               $site = $store2->getSite( 'enwiki' );
+               $this->assertNull( $site );
+       }
+
+       /**
+        * @covers DBSiteStore::clear
+        */
+       public function testClear() {
+               $store = new DBSiteStore();
+               $this->assertTrue( $store->clear() );
+
+               $site = $store->getSite( 'enwiki' );
+               $this->assertNull( $site );
+
+               $sites = $store->getSites();
+               $this->assertEquals( 0, $sites->count() );
+       }
+}
diff --git a/tests/phpunit/includes/site/FileBasedSiteLookupTest.php b/tests/phpunit/includes/site/FileBasedSiteLookupTest.php
new file mode 100644 (file)
index 0000000..90ebe5c
--- /dev/null
@@ -0,0 +1,101 @@
+<?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
+ * @since 1.25
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @covers FileBasedSiteLookup
+ * @group Site
+ *
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class FileBasedSiteLookupTest extends PHPUnit_Framework_TestCase {
+
+       protected function setUp() {
+               $this->cacheFile = $this->getCacheFile();
+       }
+
+       protected function tearDown() {
+               unlink( $this->cacheFile );
+       }
+
+       public function testGetSites() {
+               $sites = $this->getSites();
+               $cacheBuilder = $this->newSitesCacheFileBuilder( $sites );
+               $cacheBuilder->build();
+
+               $cache = new FileBasedSiteLookup( $this->cacheFile );
+               $this->assertEquals( $sites, $cache->getSites() );
+       }
+
+       public function testGetSite() {
+               $sites = $this->getSites();
+               $cacheBuilder = $this->newSitesCacheFileBuilder( $sites );
+               $cacheBuilder->build();
+
+               $cache = new FileBasedSiteLookup( $this->cacheFile );
+
+               $this->assertEquals( $sites->getSite( 'enwiktionary' ), $cache->getSite( 'enwiktionary' ) );
+       }
+
+       private function newSitesCacheFileBuilder( SiteList $sites ) {
+               return new SitesCacheFileBuilder(
+                       $this->getSiteLookup( $sites ),
+                       $this->cacheFile
+               );
+       }
+
+       private function getSiteLookup( SiteList $sites ) {
+               $siteLookup = $this->getMockBuilder( 'SiteLookup' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $siteLookup->expects( $this->any() )
+                       ->method( 'getSites' )
+                       ->will( $this->returnValue( $sites ) );
+
+               return $siteLookup;
+       }
+
+       private function getSites() {
+               $sites = array();
+
+               $site = new Site();
+               $site->setGlobalId( 'foobar' );
+               $sites[] = $site;
+
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'enwiktionary' );
+               $site->setGroup( 'wiktionary' );
+               $site->setLanguageCode( 'en' );
+               $site->addNavigationId( 'enwiktionary' );
+               $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" );
+               $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" );
+               $sites[] = $site;
+
+               return new SiteList( $sites );
+       }
+
+       private function getCacheFile() {
+               return tempnam( sys_get_temp_dir(), 'mw-test-sitelist' );
+       }
+
+}
diff --git a/tests/phpunit/includes/site/HashSiteStoreTest.php b/tests/phpunit/includes/site/HashSiteStoreTest.php
new file mode 100644 (file)
index 0000000..49a9633
--- /dev/null
@@ -0,0 +1,105 @@
+<?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
+ * @since 1.25
+ *
+ * @ingroup Site
+ * @group Site
+ *
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class HashSiteStoreTest extends MediaWikiTestCase {
+
+       /**
+        * @covers HashSiteStore::getSites
+        */
+       public function testGetSites() {
+               $expectedSites = array();
+
+               foreach( TestSites::getSites() as $testSite ) {
+                       $siteId = $testSite->getGlobalId();
+                       $expectedSites[$siteId] = $testSite;
+               }
+
+               $siteStore = new HashSiteStore( $expectedSites );
+
+               $this->assertEquals( new SiteList( $expectedSites ), $siteStore->getSites() );
+       }
+
+       /**
+        * @covers HashSiteStore::saveSite
+        * @covers HashSiteStore::getSite
+        */
+       public function testSaveSite() {
+               $store = new HashSiteStore();
+
+               $site = new Site();
+               $site->setGlobalId( 'dewiki' );
+
+               $this->assertCount( 0, $store->getSites(), '0 sites in store' );
+
+               $store->saveSite( $site );
+
+               $this->assertCount( 1, $store->getSites(), 'Store has 1 sites' );
+               $this->assertEquals( $site, $store->getSite( 'dewiki' ), 'Store has dewiki' );
+       }
+
+       /**
+        * @covers HashSiteStore::saveSites
+        */
+       public function testSaveSites() {
+               $store = new HashSiteStore();
+
+               $sites = array();
+
+               $site = new Site();
+               $site->setGlobalId( 'enwiki' );
+               $site->setLanguageCode( 'en' );
+               $sites[] = $site;
+
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'eswiki' );
+               $site->setLanguageCode( 'es' );
+               $sites[] = $site;
+
+               $this->assertCount( 0, $store->getSites(), '0 sites in store' );
+
+               $store->saveSites( $sites );
+
+               $this->assertCount( 2, $store->getSites(), 'Store has 2 sites' );
+               $this->assertTrue( $store->getSites()->hasSite( 'enwiki' ), 'Store has enwiki' );
+               $this->assertTrue( $store->getSites()->hasSite( 'eswiki' ), 'Store has eswiki' );
+       }
+
+       /**
+        * @covers HashSiteStore::clear
+        */
+       public function testClear() {
+               $store = new HashSiteStore();
+
+               $site = new Site();
+               $site->setGlobalId( 'arwiki' );
+               $store->saveSite( $site );
+
+               $this->assertCount( 1, $store->getSites(), '1 site in store' );
+
+               $store->clear();
+               $this->assertCount( 0, $store->getSites(), '0 sites in store' );
+       }
+}
index c3fd155..ef2ccca 100644 (file)
@@ -26,7 +26,6 @@
  *
  * @group Site
  *
- * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class MediaWikiSiteTest extends SiteTest {
diff --git a/tests/phpunit/includes/site/SiteExporterTest.php b/tests/phpunit/includes/site/SiteExporterTest.php
new file mode 100644 (file)
index 0000000..19dd0aa
--- /dev/null
@@ -0,0 +1,147 @@
+<?php
+
+/**
+ * Tests for the SiteExporter class.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @group Site
+ *
+ * @covers SiteExporter
+ *
+ * @author Daniel Kinzler
+ */
+class SiteExporterTest extends PHPUnit_Framework_TestCase {
+
+       public function testConstructor_InvalidArgument() {
+               $this->setExpectedException( 'InvalidArgumentException' );
+
+               new SiteExporter( 'Foo' );
+       }
+
+       public function testExportSites() {
+               $foo = Site::newForType( Site::TYPE_UNKNOWN );
+               $foo->setGlobalId( 'Foo' );
+
+               $acme = Site::newForType( Site::TYPE_UNKNOWN );
+               $acme->setGlobalId( 'acme.com' );
+               $acme->setGroup( 'Test' );
+               $acme->addLocalId( Site::ID_INTERWIKI, 'acme' );
+               $acme->setPath( Site::PATH_LINK, 'http://acme.com/' );
+
+               $tmp = tmpfile();
+               $exporter = new SiteExporter( $tmp );
+
+               $exporter->exportSites( array( $foo, $acme ) );
+
+               fseek( $tmp, 0 );
+               $xml = fread( $tmp, 16*1024 );
+
+               $this->assertContains( '<sites ', $xml );
+               $this->assertContains( '<site>', $xml );
+               $this->assertContains( '<globalid>Foo</globalid>', $xml );
+               $this->assertContains( '</site>', $xml );
+               $this->assertContains( '<globalid>acme.com</globalid>', $xml );
+               $this->assertContains( '<group>Test</group>', $xml );
+               $this->assertContains( '<localid type="interwiki">acme</localid>', $xml );
+               $this->assertContains( '<path type="link">http://acme.com/</path>', $xml );
+               $this->assertContains( '</sites>', $xml );
+
+               // NOTE: HHVM (at least on wmf Jenkins) doesn't like file URLs.
+               $xsdFile = __DIR__ . '/../../../../docs/sitelist-1.0.xsd';
+               $xsdData = file_get_contents( $xsdFile );
+
+               $document = new DOMDocument();
+               $document->loadXML( $xml, LIBXML_NONET );
+               $document->schemaValidateSource( $xsdData );
+       }
+
+       private function newSiteStore( SiteList $sites ) {
+               $store = $this->getMock( 'SiteStore' );
+
+               $store->expects( $this->once() )
+                       ->method( 'saveSites' )
+                       ->will( $this->returnCallback( function ( $moreSites ) use ( $sites ) {
+                               foreach ( $moreSites as $site ) {
+                                       $sites->setSite( $site );
+                               }
+                       } ) );
+
+               $store->expects( $this->any() )
+                       ->method( 'getSites' )
+                       ->will( $this->returnValue( new SiteList() ) );
+
+               return $store;
+       }
+
+       public function provideRoundTrip() {
+               $foo = Site::newForType( Site::TYPE_UNKNOWN );
+               $foo->setGlobalId( 'Foo' );
+
+               $acme = Site::newForType( Site::TYPE_UNKNOWN );
+               $acme->setGlobalId( 'acme.com' );
+               $acme->setGroup( 'Test' );
+               $acme->addLocalId( Site::ID_INTERWIKI, 'acme' );
+               $acme->setPath( Site::PATH_LINK, 'http://acme.com/' );
+
+               $dewiki = Site::newForType( Site::TYPE_MEDIAWIKI );
+               $dewiki->setGlobalId( 'dewiki' );
+               $dewiki->setGroup( 'wikipedia' );
+               $dewiki->setForward( true );
+               $dewiki->addLocalId( Site::ID_INTERWIKI, 'wikipedia' );
+               $dewiki->addLocalId( Site::ID_EQUIVALENT, 'de' );
+               $dewiki->setPath( Site::PATH_LINK, 'http://de.wikipedia.org/w/' );
+               $dewiki->setPath( MediaWikiSite::PATH_PAGE, 'http://de.wikipedia.org/wiki/' );
+               $dewiki->setSource( 'meta.wikimedia.org' );
+
+               return array(
+                       'empty' => array(
+                               new SiteList()
+                       ),
+
+                       'some' => array(
+                               new SiteList( array( $foo, $acme, $dewiki ) ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideRoundTrip()
+        */
+       public function testRoundTrip( SiteList $sites ) {
+               $tmp = tmpfile();
+               $exporter = new SiteExporter( $tmp );
+
+               $exporter->exportSites( $sites );
+
+               fseek( $tmp, 0 );
+               $xml = fread( $tmp, 16*1024 );
+
+               $actualSites = new SiteList();
+               $store = $this->newSiteStore( $actualSites );
+
+               $importer = new SiteImporter( $store );
+               $importer->importFromXML( $xml );
+
+               $this->assertEquals( $sites, $actualSites );
+       }
+
+}
diff --git a/tests/phpunit/includes/site/SiteImporterTest.php b/tests/phpunit/includes/site/SiteImporterTest.php
new file mode 100644 (file)
index 0000000..cb0316a
--- /dev/null
@@ -0,0 +1,200 @@
+<?php
+
+/**
+ * Tests for the SiteImporter class.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @group Site
+ *
+ * @covers SiteImporter
+ *
+ * @author Daniel Kinzler
+ */
+class SiteImporterTest extends PHPUnit_Framework_TestCase {
+
+       private function newSiteImporter( array $expectedSites, $errorCount ) {
+               $store = $this->getMock( 'SiteStore' );
+
+               $self = $this;
+               $store->expects( $this->once() )
+                       ->method( 'saveSites' )
+                       ->will( $this->returnCallback( function ( $sites ) use ( $expectedSites, $self ) {
+                               $self->assertSitesEqual( $expectedSites, $sites );
+                       } ) );
+
+               $store->expects( $this->any() )
+                       ->method( 'getSites' )
+                       ->will( $this->returnValue( new SiteList() ) );
+
+               $errorHandler = $this->getMock( 'Psr\Log\LoggerInterface' );
+               $errorHandler->expects( $this->exactly( $errorCount ) )
+                       ->method( 'error' );
+
+               $importer = new SiteImporter( $store );
+               $importer->setExceptionCallback( array( $errorHandler, 'error' ) );
+
+               return $importer;
+       }
+
+       public function assertSitesEqual( $expected, $actual, $message = '' ) {
+               $this->assertEquals(
+                       $this->getSerializedSiteList( $expected ),
+                       $this->getSerializedSiteList( $actual ),
+                       $message
+               );
+       }
+
+       public function provideImportFromXML() {
+               $foo = Site::newForType( Site::TYPE_UNKNOWN );
+               $foo->setGlobalId( 'Foo' );
+
+               $acme = Site::newForType( Site::TYPE_UNKNOWN );
+               $acme->setGlobalId( 'acme.com' );
+               $acme->setGroup( 'Test' );
+               $acme->addLocalId( Site::ID_INTERWIKI, 'acme' );
+               $acme->setPath( Site::PATH_LINK, 'http://acme.com/' );
+
+               $dewiki = Site::newForType( Site::TYPE_MEDIAWIKI );
+               $dewiki->setGlobalId( 'dewiki' );
+               $dewiki->setGroup( 'wikipedia' );
+               $dewiki->setForward( true );
+               $dewiki->addLocalId( Site::ID_INTERWIKI, 'wikipedia' );
+               $dewiki->addLocalId( Site::ID_EQUIVALENT, 'de' );
+               $dewiki->setPath( Site::PATH_LINK, 'http://de.wikipedia.org/w/' );
+               $dewiki->setPath( MediaWikiSite::PATH_PAGE, 'http://de.wikipedia.org/wiki/' );
+               $dewiki->setSource( 'meta.wikimedia.org' );
+
+               return array(
+                       'empty' => array(
+                               '<sites></sites>',
+                               array(),
+                       ),
+                       'no sites' => array(
+                               '<sites><Foo><globalid>Foo</globalid></Foo><Bar><quux>Bla</quux></Bar></sites>',
+                               array(),
+                       ),
+                       'minimal' => array(
+                               '<sites>' .
+                                       '<site><globalid>Foo</globalid></site>' .
+                               '</sites>',
+                               array( $foo ),
+                       ),
+                       'full' => array(
+                               '<sites>' .
+                                       '<site><globalid>Foo</globalid></site>' .
+                                       '<site>' .
+                                               '<globalid>acme.com</globalid>' .
+                                               '<localid type="interwiki">acme</localid>' .
+                                               '<group>Test</group>' .
+                                               '<path type="link">http://acme.com/</path>' .
+                                       '</site>' .
+                                       '<site type="mediawiki">' .
+                                               '<source>meta.wikimedia.org</source>' .
+                                               '<globalid>dewiki</globalid>' .
+                                               '<localid type="interwiki">wikipedia</localid>' .
+                                               '<localid type="equivalent">de</localid>' .
+                                               '<group>wikipedia</group>' .
+                                               '<forward/>' .
+                                               '<path type="link">http://de.wikipedia.org/w/</path>' .
+                                               '<path type="page_path">http://de.wikipedia.org/wiki/</path>' .
+                                       '</site>' .
+                               '</sites>',
+                               array( $foo, $acme, $dewiki ),
+                       ),
+                       'skip' => array(
+                               '<sites>' .
+                                       '<site><globalid>Foo</globalid></site>' .
+                                       '<site><barf>Foo</barf></site>' .
+                                       '<site>' .
+                                               '<globalid>acme.com</globalid>' .
+                                               '<localid type="interwiki">acme</localid>' .
+                                               '<silly>boop!</silly>' .
+                                               '<group>Test</group>' .
+                                               '<path type="link">http://acme.com/</path>' .
+                                       '</site>' .
+                               '</sites>',
+                               array( $foo, $acme ),
+                               1
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideImportFromXML
+        */
+       public function testImportFromXML( $xml, array $expectedSites, $errorCount = 0 )  {
+               $importer = $this->newSiteImporter( $expectedSites, $errorCount );
+               $importer->importFromXML( $xml );
+       }
+
+       public function testImportFromXML_malformed()  {
+               $this->setExpectedException( 'Exception' );
+
+               $store = $this->getMock( 'SiteStore' );
+               $importer = new SiteImporter( $store );
+               $importer->importFromXML( 'THIS IS NOT XML' );
+       }
+
+       public function testImportFromFile()  {
+               $foo = Site::newForType( Site::TYPE_UNKNOWN );
+               $foo->setGlobalId( 'Foo' );
+
+               $acme = Site::newForType( Site::TYPE_UNKNOWN );
+               $acme->setGlobalId( 'acme.com' );
+               $acme->setGroup( 'Test' );
+               $acme->addLocalId( Site::ID_INTERWIKI, 'acme' );
+               $acme->setPath( Site::PATH_LINK, 'http://acme.com/' );
+
+               $dewiki = Site::newForType( Site::TYPE_MEDIAWIKI );
+               $dewiki->setGlobalId( 'dewiki' );
+               $dewiki->setGroup( 'wikipedia' );
+               $dewiki->setForward( true );
+               $dewiki->addLocalId( Site::ID_INTERWIKI, 'wikipedia' );
+               $dewiki->addLocalId( Site::ID_EQUIVALENT, 'de' );
+               $dewiki->setPath( Site::PATH_LINK, 'http://de.wikipedia.org/w/' );
+               $dewiki->setPath( MediaWikiSite::PATH_PAGE, 'http://de.wikipedia.org/wiki/' );
+               $dewiki->setSource( 'meta.wikimedia.org' );
+
+               $importer = $this->newSiteImporter( array( $foo, $acme, $dewiki ), 0 );
+
+               $file = __DIR__ . '/SiteImporterTest.xml';
+               $importer->importFromFile( $file );
+       }
+
+       /**
+        * @param Site[] $sites
+        *
+        * @return array[]
+        */
+       private function getSerializedSiteList( $sites ) {
+               $serialized = array();
+
+               foreach ( $sites as $site ) {
+                       $key = $site->getGlobalId();
+                       $data = unserialize( $site->serialize() );
+
+                       $serialized[$key] = $data;
+               }
+
+               return $serialized;
+       }
+}
diff --git a/tests/phpunit/includes/site/SiteImporterTest.xml b/tests/phpunit/includes/site/SiteImporterTest.xml
new file mode 100644 (file)
index 0000000..720b1fa
--- /dev/null
@@ -0,0 +1,19 @@
+<sites version="1.0" xmlns="http://www.mediawiki.org/xml/sitelist-1.0/">
+       <site><globalid>Foo</globalid></site>
+       <site>
+               <globalid>acme.com</globalid>
+               <localid type="interwiki">acme</localid>
+               <group>Test</group>
+               <path type="link">http://acme.com/</path>
+       </site>
+       <site type="mediawiki">
+               <source>meta.wikimedia.org</source>
+               <globalid>dewiki</globalid>
+               <localid type="interwiki">wikipedia</localid>
+               <localid type="equivalent">de</localid>
+               <group>wikipedia</group>
+               <forward/>
+               <path type="link">http://de.wikipedia.org/w/</path>
+               <path type="page_path">http://de.wikipedia.org/wiki/</path>
+       </site>
+</sites>
diff --git a/tests/phpunit/includes/site/SiteListFileCacheBuilderTest.php b/tests/phpunit/includes/site/SiteListFileCacheBuilderTest.php
deleted file mode 100644 (file)
index bbe8cc7..0000000
+++ /dev/null
@@ -1,136 +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
- * @since 1.25
- *
- * @ingroup Site
- * @ingroup Test
- *
- * @covers SiteListFileCacheBuilder
- * @group Site
- *
- * @licence GNU GPL v2+
- * @author Katie Filbert < aude.wiki@gmail.com >
- */
-class SiteListFileCacheBuilderTest extends PHPUnit_Framework_TestCase {
-
-       protected function setUp() {
-               $this->cacheFile = $this->getCacheFile();
-       }
-
-       protected function tearDown() {
-               unlink( $this->cacheFile );
-       }
-
-       public function testBuild() {
-               $cacheBuilder = $this->newSiteListFileCacheBuilder( $this->getSites() );
-               $cacheBuilder->build();
-
-               $contents = file_get_contents( $this->cacheFile );
-               $this->assertEquals( json_encode( $this->getExpectedData() ), $contents );
-       }
-
-       private function getExpectedData() {
-               return array(
-                       'sites' => array(
-                               'foobar' => array(
-                                       'globalid' => 'foobar',
-                                       'type' => 'unknown',
-                                       'group' => 'none',
-                                       'source' => 'local',
-                                       'language' => null,
-                                       'localids' => array(),
-                                       'config' => array(),
-                                       'data' => array(),
-                                       'forward' => false,
-                                       'internalid' => null,
-                                       'identifiers' => array()
-                               ),
-                               'enwiktionary' => array(
-                                       'globalid' => 'enwiktionary',
-                                       'type' => 'mediawiki',
-                                       'group' => 'wiktionary',
-                                       'source' => 'local',
-                                       'language' => 'en',
-                                       'localids' => array(
-                                               'equivalent' => array( 'enwiktionary' )
-                                       ),
-                                       'config' => array(),
-                                       'data' => array(
-                                               'paths' => array(
-                                                       'page_path' => 'https://en.wiktionary.org/wiki/$1',
-                                                       'file_path' => 'https://en.wiktionary.org/w/$1'
-                                               )
-                                       ),
-                                       'forward' => false,
-                                       'internalid' => null,
-                                       'identifiers' => array(
-                                               array(
-                                                       'type' => 'equivalent',
-                                                       'key' => 'enwiktionary'
-                                               )
-                                       )
-                               )
-                       )
-               );
-       }
-
-       private function newSiteListFileCacheBuilder( SiteList $sites ) {
-               return new SiteListFileCacheBuilder(
-                       $this->getSiteSQLStore( $sites ),
-                       $this->cacheFile
-               );
-       }
-
-       private function getSiteSQLStore( SiteList $sites ) {
-               $siteSQLStore = $this->getMockBuilder( 'SiteSQLStore' )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
-               $siteSQLStore->expects( $this->any() )
-                       ->method( 'getSites' )
-                       ->will( $this->returnValue( $sites ) );
-
-               return $siteSQLStore;
-       }
-
-       private function getSites() {
-               $sites = array();
-
-               $site = new Site();
-               $site->setGlobalId( 'foobar' );
-               $sites[] = $site;
-
-               $site = new MediaWikiSite();
-               $site->setGlobalId( 'enwiktionary' );
-               $site->setGroup( 'wiktionary' );
-               $site->setLanguageCode( 'en' );
-               $site->addNavigationId( 'enwiktionary' );
-               $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" );
-               $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" );
-               $sites[] = $site;
-
-               return new SiteList( $sites );
-       }
-
-       private function getCacheFile() {
-               return tempnam( sys_get_temp_dir(), 'mw-test-sitelist' );
-       }
-
-}
diff --git a/tests/phpunit/includes/site/SiteListFileCacheTest.php b/tests/phpunit/includes/site/SiteListFileCacheTest.php
deleted file mode 100644 (file)
index 05dcd8a..0000000
+++ /dev/null
@@ -1,102 +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
- * @since 1.25
- *
- * @ingroup Site
- * @ingroup Test
- *
- * @covers SiteListFileCache
- * @group Site
- *
- * @licence GNU GPL v2+
- * @author Katie Filbert < aude.wiki@gmail.com >
- */
-class SiteListFileCacheTest extends PHPUnit_Framework_TestCase {
-
-       protected function setUp() {
-               $this->cacheFile = $this->getCacheFile();
-       }
-
-       protected function tearDown() {
-               unlink( $this->cacheFile );
-       }
-
-       public function testGetSites() {
-               $sites = $this->getSites();
-               $cacheBuilder = $this->newSiteListFileCacheBuilder( $sites );
-               $cacheBuilder->build();
-
-               $cache = new SiteListFileCache( $this->cacheFile );
-               $this->assertEquals( $sites, $cache->getSites() );
-       }
-
-       public function testGetSite() {
-               $sites = $this->getSites();
-               $cacheBuilder = $this->newSiteListFileCacheBuilder( $sites );
-               $cacheBuilder->build();
-
-               $cache = new SiteListFileCache( $this->cacheFile );
-
-               $this->assertEquals( $sites->getSite( 'enwiktionary' ), $cache->getSite( 'enwiktionary' ) );
-       }
-
-       private function newSiteListFileCacheBuilder( SiteList $sites ) {
-               return new SiteListFileCacheBuilder(
-                       $this->getSiteSQLStore( $sites ),
-                       $this->cacheFile
-               );
-       }
-
-       private function getSiteSQLStore( SiteList $sites ) {
-               $siteSQLStore = $this->getMockBuilder( 'SiteSQLStore' )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
-               $siteSQLStore->expects( $this->any() )
-                       ->method( 'getSites' )
-                       ->will( $this->returnValue( $sites ) );
-
-               return $siteSQLStore;
-       }
-
-       private function getSites() {
-               $sites = array();
-
-               $site = new Site();
-               $site->setGlobalId( 'foobar' );
-               $sites[] = $site;
-
-               $site = new MediaWikiSite();
-               $site->setGlobalId( 'enwiktionary' );
-               $site->setGroup( 'wiktionary' );
-               $site->setLanguageCode( 'en' );
-               $site->addNavigationId( 'enwiktionary' );
-               $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" );
-               $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" );
-               $sites[] = $site;
-
-               return new SiteList( $sites );
-       }
-
-       private function getCacheFile() {
-               return tempnam( sys_get_temp_dir(), 'mw-test-sitelist' );
-       }
-
-}
index 534ed9c..d6c58cf 100644 (file)
@@ -26,7 +26,6 @@
  *
  * @group Site
  *
- * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class SiteListTest extends MediaWikiTestCase {
index 6002c1a..6908800 100644 (file)
@@ -1,8 +1,6 @@
 <?php
 
 /**
- * Tests for the SiteSQLStore class.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -19,7 +17,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @since 1.21
+ * @since 1.25
  *
  * @ingroup Site
  * @ingroup Test
  * @group Site
  * @group Database
  *
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ * @author Katie Filbert < aude.wiki@gmail.com >
  */
 class SiteSQLStoreTest extends MediaWikiTestCase {
 
        /**
-        * @covers SiteSQLStore::getSites
-        */
-       public function testGetSites() {
-               $expectedSites = TestSites::getSites();
-               TestSites::insertIntoDb();
-
-               $store = SiteSQLStore::newInstance();
-
-               $sites = $store->getSites();
-
-               $this->assertInstanceOf( 'SiteList', $sites );
-
-               /**
-                * @var Site $site
-                */
-               foreach ( $sites as $site ) {
-                       $this->assertInstanceOf( 'Site', $site );
-               }
-
-               foreach ( $expectedSites as $site ) {
-                       if ( $site->getGlobalId() !== null ) {
-                               $this->assertTrue( $sites->hasSite( $site->getGlobalId() ) );
-                       }
-               }
-       }
-
-       /**
-        * @covers SiteSQLStore::saveSites
-        */
-       public function testSaveSites() {
-               $store = SiteSQLStore::newInstance();
-
-               $sites = array();
-
-               $site = new Site();
-               $site->setGlobalId( 'ertrywuutr' );
-               $site->setLanguageCode( 'en' );
-               $sites[] = $site;
-
-               $site = new MediaWikiSite();
-               $site->setGlobalId( 'sdfhxujgkfpth' );
-               $site->setLanguageCode( 'nl' );
-               $sites[] = $site;
-
-               $this->assertTrue( $store->saveSites( $sites ) );
-
-               $site = $store->getSite( 'ertrywuutr' );
-               $this->assertInstanceOf( 'Site', $site );
-               $this->assertEquals( 'en', $site->getLanguageCode() );
-               $this->assertTrue( is_integer( $site->getInternalId() ) );
-               $this->assertTrue( $site->getInternalId() >= 0 );
-
-               $site = $store->getSite( 'sdfhxujgkfpth' );
-               $this->assertInstanceOf( 'Site', $site );
-               $this->assertEquals( 'nl', $site->getLanguageCode() );
-               $this->assertTrue( is_integer( $site->getInternalId() ) );
-               $this->assertTrue( $site->getInternalId() >= 0 );
-       }
-
-       /**
-        * @covers SiteSQLStore::reset
+        * @covers SiteSQLStore::newInstance
         */
-       public function testReset() {
-               $store1 = SiteSQLStore::newInstance();
-               $store2 = SiteSQLStore::newInstance();
-
-               // initialize internal cache
-               $this->assertGreaterThan( 0, $store1->getSites()->count() );
-               $this->assertGreaterThan( 0, $store2->getSites()->count() );
-
-               // Clear actual data. Will purge the external cache and reset the internal
-               // cache in $store1, but not the internal cache in store2.
-               $this->assertTrue( $store1->clear() );
-
-               // sanity check: $store2 should have a stale cache now
-               $this->assertNotNull( $store2->getSite( 'enwiki' ) );
-
-               // purge cache
-               $store2->reset();
-
-               // ...now the internal cache of $store2 should be updated and thus empty.
-               $site = $store2->getSite( 'enwiki' );
-               $this->assertNull( $site );
+       public function testNewInstance() {
+               $siteStore = SiteSQLStore::newInstance();
+               $this->assertInstanceOf( 'SiteSQLStore', $siteStore );
        }
 
-       /**
-        * @covers SiteSQLStore::clear
-        */
-       public function testClear() {
-               $store = SiteSQLStore::newInstance();
-               $this->assertTrue( $store->clear() );
-
-               $site = $store->getSite( 'enwiki' );
-               $this->assertNull( $site );
-
-               $sites = $store->getSites();
-               $this->assertEquals( 0, $sites->count() );
-       }
 }
index 29c1ff3..63d90d2 100644 (file)
@@ -26,7 +26,6 @@
  *
  * @group Site
  *
- * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class SiteTest extends MediaWikiTestCase {
diff --git a/tests/phpunit/includes/site/SitesCacheFileBuilderTest.php b/tests/phpunit/includes/site/SitesCacheFileBuilderTest.php
new file mode 100644 (file)
index 0000000..087341a
--- /dev/null
@@ -0,0 +1,135 @@
+<?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
+ * @since 1.25
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @covers SitesCacheFileBuilder
+ * @group Site
+ *
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class SitesCacheFileBuilderTest extends PHPUnit_Framework_TestCase {
+
+       protected function setUp() {
+               $this->cacheFile = $this->getCacheFile();
+       }
+
+       protected function tearDown() {
+               unlink( $this->cacheFile );
+       }
+
+       public function testBuild() {
+               $cacheBuilder = $this->newSitesCacheFileBuilder( $this->getSites() );
+               $cacheBuilder->build();
+
+               $contents = file_get_contents( $this->cacheFile );
+               $this->assertEquals( json_encode( $this->getExpectedData() ), $contents );
+       }
+
+       private function getExpectedData() {
+               return array(
+                       'sites' => array(
+                               'foobar' => array(
+                                       'globalid' => 'foobar',
+                                       'type' => 'unknown',
+                                       'group' => 'none',
+                                       'source' => 'local',
+                                       'language' => null,
+                                       'localids' => array(),
+                                       'config' => array(),
+                                       'data' => array(),
+                                       'forward' => false,
+                                       'internalid' => null,
+                                       'identifiers' => array()
+                               ),
+                               'enwiktionary' => array(
+                                       'globalid' => 'enwiktionary',
+                                       'type' => 'mediawiki',
+                                       'group' => 'wiktionary',
+                                       'source' => 'local',
+                                       'language' => 'en',
+                                       'localids' => array(
+                                               'equivalent' => array( 'enwiktionary' )
+                                       ),
+                                       'config' => array(),
+                                       'data' => array(
+                                               'paths' => array(
+                                                       'page_path' => 'https://en.wiktionary.org/wiki/$1',
+                                                       'file_path' => 'https://en.wiktionary.org/w/$1'
+                                               )
+                                       ),
+                                       'forward' => false,
+                                       'internalid' => null,
+                                       'identifiers' => array(
+                                               array(
+                                                       'type' => 'equivalent',
+                                                       'key' => 'enwiktionary'
+                                               )
+                                       )
+                               )
+                       )
+               );
+       }
+
+       private function newSitesCacheFileBuilder( SiteList $sites ) {
+               return new SitesCacheFileBuilder(
+                       $this->getSiteLookup( $sites ),
+                       $this->cacheFile
+               );
+       }
+
+       private function getSiteLookup( SiteList $sites ) {
+               $siteLookup = $this->getMockBuilder( 'SiteLookup' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $siteLookup->expects( $this->any() )
+                       ->method( 'getSites' )
+                       ->will( $this->returnValue( $sites ) );
+
+               return $siteLookup;
+       }
+
+       private function getSites() {
+               $sites = array();
+
+               $site = new Site();
+               $site->setGlobalId( 'foobar' );
+               $sites[] = $site;
+
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'enwiktionary' );
+               $site->setGroup( 'wiktionary' );
+               $site->setLanguageCode( 'en' );
+               $site->addNavigationId( 'enwiktionary' );
+               $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" );
+               $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" );
+               $sites[] = $site;
+
+               return new SiteList( $sites );
+       }
+
+       private function getCacheFile() {
+               return tempnam( sys_get_temp_dir(), 'mw-test-sitelist' );
+       }
+
+}
index af314ba..4c40248 100644 (file)
@@ -26,7 +26,6 @@
  *
  * @group Site
  *
- * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class TestSites {
@@ -108,7 +107,7 @@ class TestSites {
         * @since 0.1
         */
        public static function insertIntoDb() {
-               $sitesTable = SiteSQLStore::newInstance();
+               $sitesTable = new DBSiteStore();
                $sitesTable->clear();
                $sitesTable->saveSites( TestSites::getSites() );
        }
index baa995d..8084a66 100644 (file)
@@ -5,7 +5,6 @@
  *
  * @group Output
  *
- * @licence GNU GPL v2+
  * @author Bene* < benestar.wikimedia@gmail.com >
  */
 
index 245cdff..5a0aef9 100644 (file)
@@ -5,7 +5,6 @@
  *
  * @group Database
  *
- * @licence GNU GPL v2+
  * @author Katie Filbert < aude.wiki@gmail.com >
  */
 class SpecialPageTest extends MediaWikiTestCase {
index 4f6c411..1545d7e 100644 (file)
@@ -4,10 +4,11 @@
  *
  * Copyright © 2013, Antoine Musso
  * Copyright © 2013, Wikimedia Foundation Inc.
- *
  */
 
 /**
+ * @group Database
+ *
  * @covers SpecialPreferences
  */
 class SpecialPreferencesTest extends MediaWikiTestCase {
index 04af871..599d2a3 100644 (file)
@@ -16,7 +16,6 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @license GPL 2+
  * @author This, that and the other
  */
 
index 4171c10..cd0d0b1 100644 (file)
@@ -16,7 +16,6 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @license GPL 2+
  * @author Daniel Kinzler
  */
 
index f1146a7..78d304c 100644 (file)
@@ -16,7 +16,6 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @license GPL 2+
  * @author Daniel Kinzler
  */
 
@@ -370,13 +369,6 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
 
        /**
         * @dataProvider provideGetNamespaceName
-        *
-        * @param int $namespace
-        * @param string $text
-        * @param string $lang
-        * @param string $expected
-        *
-        * @internal param \TitleValue $title
         */
        public function testGetNamespaceName( $namespace, $text, $lang, $expected ) {
                $codec = $this->makeCodec( $lang );
index 5d613db..504e871 100644 (file)
@@ -16,7 +16,6 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @license GPL 2+
  * @author This, that and the other
  */
 
index a46698a..98b414e 100644 (file)
@@ -16,7 +16,6 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @license GPL 2+
  * @author This, that and the other
  */
 
index f0ffdb3..d6fe684 100644 (file)
@@ -16,7 +16,6 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @license GPL 2+
  * @author This, that and the other
  */
 
index 71c9c70..d5c17f3 100644 (file)
@@ -16,7 +16,6 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @license GPL 2+
  * @author This, that and the other
  */
 
index 3ba008d..184198d 100644 (file)
@@ -16,7 +16,6 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @license GPL 2+
  * @author Daniel Kinzler
  */
 
index 63ad8c0..9441b77 100644 (file)
@@ -162,6 +162,12 @@ class UploadBaseTest extends MediaWikiTestCase {
                                true,
                                'SVG with javascript xlink (http://html5sec.org/#87)'
                        ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><use xlink:href="data:application/xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KPGRlZnM+CjxjaXJjbGUgaWQ9InRlc3QiIHI9IjUwIiBjeD0iMTAwIiBjeT0iMTAwIiBzdHlsZT0iZmlsbDogI0YwMCI+CjxzZXQgYXR0cmlidXRlTmFtZT0iZmlsbCIgYXR0cmlidXRlVHlwZT0iQ1NTIiBvbmJlZ2luPSdhbGVydChkb2N1bWVudC5jb29raWUpJwpvbmVuZD0nYWxlcnQoIm9uZW5kIiknIHRvPSIjMDBGIiBiZWdpbj0iMXMiIGR1cj0iNXMiIC8+CjwvY2lyY2xlPgo8L2RlZnM+Cjx1c2UgeGxpbms6aHJlZj0iI3Rlc3QiLz4KPC9zdmc+#test"/> </svg>',
+                               true,
+                               true,
+                               'SVG with Opera image xlink (http://html5sec.org/#88 - c)'
+                       ),
                        array(
                                '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">  <animation xlink:href="javascript:alert(1)"/> </svg>',
                                true,
@@ -273,6 +279,18 @@ class UploadBaseTest extends MediaWikiTestCase {
                                true,
                                'SVG with animate from (http://html5sec.org/#137)'
                        ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <a><text y="1em">Click me</text> <animate attributeName="xlink:href" values="javascript:alert(\'Bang!\')" begin="0s" dur="0.1s" fill="freeze" /> </a></svg>',
+                               true,
+                               true,
+                               'SVG with animate xlink:href (http://html5sec.org/#137)'
+                       ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" xmlns:y="http://www.w3.org/1999/xlink"> <a y:href="#"> <text y="1em">Click me</text> <animate attributeName="y:href" values="javascript:alert(\'Bang!\')" begin="0s" dur="0.1s" fill="freeze" /> </a> </svg>',
+                               true,
+                               true,
+                               'SVG with animate y:href (http://html5sec.org/#137)'
+                       ),
 
                        // Other hostile SVG's
                        array(
@@ -305,6 +323,12 @@ class UploadBaseTest extends MediaWikiTestCase {
                                true,
                                'SVG with @import in style element and child element (bug 69008#c11)'
                        ),
+                       array(
+                               '<svg xmlns="http://www.w3.org/2000/svg" viewBox="6 3 177 153" xmlns:xlink="http://www.w3.org/1999/xlink"> <style>@imporT "https://fonts.googleapis.com/css?family=Bitter:700&amp;text=WebPlatform.org";</style> <g transform="translate(-.5,-.5)"> <text fill="#474747" x="95" y="150" text-anchor="middle" font-family="Bitter" font-size="20" font-weight="bold">WebPlatform.org</text> </g> </svg>',
+                               true,
+                               true,
+                               'SVG with case-insensitive @import in style element (bug T85349)'
+                       ),
                        array(
                                '<svg xmlns="http://www.w3.org/2000/svg"> <rect width="100" height="100" style="background-image:url(https://www.google.com/images/srpr/logo11w.png)"/> </svg>',
                                true,
@@ -331,6 +355,25 @@ class UploadBaseTest extends MediaWikiTestCase {
                                true,
                                'SVG with remote background image using image() (bug 69008)'
                        ),
+                       array(
+                               // As reported by Cure53
+                               '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <a xlink:href="data:text/html;charset=utf-8;base64, PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ%2BDQo%3D"> <circle r="400" fill="red"></circle> </a> </svg>',
+                               true,
+                               true,
+                               'SVG with data:text/html link target (firefox only)'
+                       ),
+                       array(
+                               '<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ <!ENTITY lol "lol"> <!ENTITY lol2 "&#x3C;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x27;&#x58;&#x53;&#x53;&#x45;&#x44;&#x20;&#x3D;&#x3E;&#x20;&#x27;&#x2B;&#x64;&#x6F;&#x63;&#x75;&#x6D;&#x65;&#x6E;&#x74;&#x2E;&#x64;&#x6F;&#x6D;&#x61;&#x69;&#x6E;&#x29;&#x3B;&#x3C;&#x2F;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;"> ]> <svg xmlns="http://www.w3.org/2000/svg" width="68" height="68" viewBox="-34 -34 68 68" version="1.1"> <circle cx="0" cy="0" r="24" fill="#c8c8c8"/> <text x="0" y="0" fill="black">&lol2;</text> </svg>',
+                               true,
+                               true,
+                               'SVG with encoded script tag in internal entity (reported by Beyond Security)'
+                       ),
+                       array(
+                               '<?xml version="1.0"?> <!DOCTYPE svg [ <!ENTITY foo SYSTEM "file:///etc/passwd"> ]> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <desc>&foo;</desc> <rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,2)" /> </svg>',
+                               false,
+                               false,
+                               'SVG with external entity'
+                       ),
 
                        // Test good, but strange files that we want to allow
                        array(
@@ -345,7 +388,6 @@ class UploadBaseTest extends MediaWikiTestCase {
                                false,
                                'SVG with local urls, including filter: in style'
                        ),
-
                );
        }
 }
index 0e11cca..fedcc76 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-class UIDGeneratorTest extends MediaWikiTestCase {
+class UIDGeneratorTest extends PHPUnit_Framework_TestCase {
 
        protected function tearDown() {
                // Bug: 44850
@@ -28,7 +28,7 @@ class UIDGeneratorTest extends MediaWikiTestCase {
 
                $lastId = array_shift( $ids );
 
-               $this->assertArrayEquals( array_unique( $ids ), $ids, "All generated IDs are unique." );
+               $this->assertSame( array_unique( $ids ), $ids, "All generated IDs are unique." );
 
                foreach ( $ids as $id ) {
                        $id_bin = wfBaseConvert( $id, 10, 2 );
@@ -105,8 +105,8 @@ class UIDGeneratorTest extends MediaWikiTestCase {
                $id1 = UIDGenerator::newSequentialPerNodeID( 'test', 32 );
                $id2 = UIDGenerator::newSequentialPerNodeID( 'test', 32 );
 
-               $this->assertType( 'float', $id1, "ID returned as float" );
-               $this->assertType( 'float', $id2, "ID returned as float" );
+               $this->assertInternalType( 'float', $id1, "ID returned as float" );
+               $this->assertInternalType( 'float', $id2, "ID returned as float" );
                $this->assertGreaterThan( 0, $id1, "ID greater than 1" );
                $this->assertGreaterThan( $id1, $id2, "IDs increasing in value" );
        }
@@ -118,7 +118,7 @@ class UIDGeneratorTest extends MediaWikiTestCase {
                $ids = UIDGenerator::newSequentialPerNodeIDs( 'test', 32, 5 );
                $lastId = null;
                foreach ( $ids as $id ) {
-                       $this->assertType( 'float', $id, "ID returned as float" );
+                       $this->assertInternalType( 'float', $id, "ID returned as float" );
                        $this->assertGreaterThan( 0, $id, "ID greater than 1" );
                        if ( $lastId ) {
                                $this->assertGreaterThan( $lastId, $id, "IDs increasing in value" );
index f6d6bc9..a6d9d27 100644 (file)
@@ -8,7 +8,6 @@
  * @group SystemTest
  * @group medium
  *
- * @licence GNU GPL v2+
  * @author Katie Filbert < aude.wiki@gmail.com >
  */
 class SpecialPageAliasTest extends MediaWikiTestCase {
index 0a977dc..a5ef762 100644 (file)
@@ -3,13 +3,13 @@
 require_once __DIR__ . "/../../../maintenance/backupTextPass.inc";
 
 /**
- * Tests for page dumps of BackupDumper
+ * Tests for TextPassDumper that rely on the database
  *
  * @group Database
  * @group Dump
  * @covers TextPassDumper
  */
-class TextPassDumperTest extends DumpTestCase {
+class TextPassDumperDatabaseTest extends DumpTestCase {
 
        // We'll add several pages, revision and texts. The following variables hold the
        // corresponding ids.
@@ -244,7 +244,9 @@ class TextPassDumperTest extends DumpTestCase {
                        $this->fail( "Could not open stream for stderr" );
                }
 
-               $iterations = 32; // We'll start with that many iterations of revisions in stub
+               $iterations = 32; // We'll start with that many iterations of revisions
+               // in stub. Make sure that the generated volume is above the buffer size
+               // set below. Otherwise, the checkpointing does not trigger.
                $lastDuration = 0;
                $minDuration = 2; // We want the dump to take at least this many seconds
                $checkpointAfter = 0.5; // Generate checkpoint after this many seconds
@@ -262,6 +264,7 @@ class TextPassDumperTest extends DumpTestCase {
                        $dumper = new TextPassDumper( array( "--stub=file:" . $nameStub,
                                "--output=" . $checkpointFormat . ":" . $nameOutputDir . "/full",
                                "--maxtime=1" /*This is in minutes. Fixup is below*/,
+                               "--buffersize=32768", // The default of 32 iterations fill up 32KB about twice
                                "--checkpointfile=checkpoint-%s-%s.xml.gz" ) );
                        $dumper->setDb( $this->db );
                        $dumper->maxTimeAllowed = $checkpointAfter; // Patching maxTime from 1 minute
@@ -415,10 +418,7 @@ class TextPassDumperTest extends DumpTestCase {
        }
 
        /**
-        * Broken per T70653.
-        *
         * @group large
-        * @group Broken
         */
        function testCheckpointPlain() {
                $this->checkpointHelper();
@@ -434,10 +434,7 @@ class TextPassDumperTest extends DumpTestCase {
         * PHP extensions, we go for gzip instead, which triggers the same relevant code
         * paths while still being testable on more systems.
         *
-        * Broken per T70653.
-        *
         * @group large
-        * @group Broken
         */
        function testCheckpointGzip() {
                $this->checkHasGzip();
@@ -615,3 +612,61 @@ class BackupTextPassTestModelHandler extends TextContentHandler {
        }
 
 }
+
+/**
+ * Tests for TextPassDumper that do not rely on the database
+ *
+ * (As the Database group is only detected at class level (not method level), we
+ * cannot bring this test case's tests into the above main test case.)
+ *
+ * @group Dump
+ * @covers TextPassDumper
+ */
+class TextPassDumperDatabaselessTest extends MediaWikiLangTestCase {
+       /**
+        * Ensures that setting the buffer size is effective.
+        *
+        * @dataProvider bufferSizeProvider
+        */
+       function testBufferSizeSetting( $expected, $size, $msg ) {
+               $dumper = new TextPassDumperAccessor( array( "--buffersize=" . $size ) );
+               $this->assertEquals( $expected, $dumper->getBufferSize(), $msg);
+       }
+
+       /**
+        * Ensures that setting the buffer size is effective.
+        *
+        * @dataProvider bufferSizeProvider
+        */
+       function bufferSizeProvider() {
+               // expected, bufferSize to initialize with, message
+               return array(
+                       array( 512 * 1024, 512 * 1024, "Setting 512KB is not effective" ),
+                       array( 8192, 8192, "Setting 8KB is not effective" ),
+                       array( 4096, 2048, "Could set buffer size below lower bound" )
+               );
+       }
+}
+
+/**
+ * Accessor for internal state of TextPassDumper
+ *
+ * Do not warrentless add getters here.
+ */
+class TextPassDumperAccessor extends TextPassDumper {
+       /**
+        * Gets the bufferSize.
+        *
+        * If bufferSize setting does not work correctly, testCheckpoint... tests
+        * fail and point in the wrong direction. To aid in troubleshooting when
+        * testCheckpoint... tests break at some point in the future, we test the
+        * bufferSize setting, hence need this accessor.
+        *
+        * (Yes, bufferSize is internal state of the TextPassDumper, but aiding
+        * debugging of testCheckpoint... in the future seems to be worth testing
+        * against it nonetheless.)
+        */
+       public function getBufferSize() {
+               return $this->bufferSize;
+       }
+}
index e59b506..d18ab73 100755 (executable)
@@ -228,12 +228,14 @@ foreach ( array(
 }
 
 if ( !$ok ) {
-       die( "Couldn't find a usable PHPUnit.\n" );
+       echo "Couldn't find a usable PHPUnit.\n";
+       exit( 1 );
 }
 
 $puVersion = PHPUnit_Runner_Version::id();
 if ( $puVersion !== '@package_version@' && version_compare( $puVersion, '3.7.0', '<' ) ) {
-       die( "PHPUnit 3.7.0 or later required; you have {$puVersion}.\n" );
+       echo "PHPUnit 3.7.0 or later required; you have {$puVersion}.\n";
+       exit( 1 );
 }
 
 PHPUnit_TextUI_Command::main();
index 2142061..cde6547 100644 (file)
@@ -44,7 +44,7 @@ class AutoLoaderTest extends MediaWikiTestCase {
 
                $files = array_unique( $expected );
 
-               foreach ( $files as $file ) {
+               foreach ( $files as $class => $file ) {
                        // Only prefix $IP if it doesn't have it already.
                        // Generally local classes don't have it, and those from extensions and test suites do.
                        if ( substr( $file, 0, 1 ) != '/' && substr( $file, 1, 1 ) != ':' ) {
@@ -53,7 +53,19 @@ class AutoLoaderTest extends MediaWikiTestCase {
                                $filePath = $file;
                        }
 
+                       if ( !file_exists( $filePath ) ) {
+                               $actual[$class] = "[file '$filePath' does not exist]";
+                               continue;
+                       }
+
+                       wfSuppressWarnings();
                        $contents = file_get_contents( $filePath );
+                       wfRestoreWarnings();
+
+                       if ( $contents === false ) {
+                               $actual[$class] = "[couldn't read file '$filePath']";
+                               continue;
+                       }
 
                        // We could use token_get_all() here, but this is faster
                        $matches = array();
@@ -118,10 +130,14 @@ class AutoLoaderTest extends MediaWikiTestCase {
        }
 
        function testWrongCaseClass() {
+               $this->setMwGlobals( 'wgAutoloadAttemptLowercase', true );
+
                $this->assertTrue( class_exists( 'testautoLoadedcamlCLASS' ) );
        }
 
        function testWrongCaseSerializedClass() {
+               $this->setMwGlobals( 'wgAutoloadAttemptLowercase', true );
+
                $dummyCereal = 'O:29:"testautoloadedserializedclass":0:{}';
                $uncerealized = unserialize( $dummyCereal );
                $this->assertFalse( $uncerealized instanceof __PHP_Incomplete_Class,
diff --git a/tests/phpunit/structure/AvailableRightsTest.php b/tests/phpunit/structure/AvailableRightsTest.php
new file mode 100644 (file)
index 0000000..51d31aa
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Try to make sure that extensions register all rights in $wgAvailableRights
+ * or via the 'UserGetAllRights' hook.
+ *
+ * @author Marius Hoch < hoo@online.de >
+ */
+class AvailableRightsTest extends PHPUnit_Framework_TestCase {
+
+       /**
+        * Returns all rights that should be in $wgAvailableRights + all rights
+        * registered via the 'UserGetAllRights' hook + all "core" rights.
+        *
+        * @return string[]
+        */
+       private function getAllVisibleRights() {
+               global $wgGroupPermissions, $wgRevokePermissions;
+
+               $rights = User::getAllRights();
+
+               foreach( $wgGroupPermissions as $permissions ) {
+                       $rights = array_merge( $rights, array_keys( $permissions ) );
+               }
+
+               foreach( $wgRevokePermissions as $permissions ) {
+                       $rights = array_merge( $rights, array_keys( $permissions ) );
+               }
+
+               $rights = array_unique( $rights );
+               sort( $rights );
+
+               return $rights;
+       }
+
+       public function testAvailableRights() {
+               $missingRights = array_diff(
+                       $this->getAllVisibleRights(),
+                       User::getAllRights()
+               );
+
+               $this->assertEquals(
+                       array(),
+                       // Re-index to produce nicer output, keys are meaningless.
+                       array_values( $missingRights ),
+                       'Additional user rights need to be added to $wgAvailableRights or ' .
+                       'via the "UserGetAllRights" hook. See the instructions at: ' .
+                       'https://www.mediawiki.org/wiki/Manual:User_rights#Adding_new_rights'
+               );
+       }
+}
index 2396ea2..d2b699d 100644 (file)
@@ -12,7 +12,6 @@
  * @copyright © 2012, Santhosh Thottingal
  * @copyright © 2012, Timo Tijhof
  *
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
  */
 class ResourcesTest extends MediaWikiTestCase {
 
@@ -91,6 +90,10 @@ class ResourcesTest extends MediaWikiTestCase {
                foreach ( $data['modules'] as $moduleName => $module ) {
                        $moduleTargets = $module->getTargets();
                        foreach ( $module->getDependencies() as $dep ) {
+                               if ( !isset( $data['modules'][$dep] ) ) {
+                                       // Missing dependencies reported by testMissingDependencies
+                                       continue;
+                               }
                                $targets = $data['modules'][$dep]->getTargets();
                                foreach ( $moduleTargets as $moduleTarget ) {
                                        $this->assertContains(
index 29834c1..17b8b63 100644 (file)
@@ -48,7 +48,6 @@ return array(
                        'tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.byteLength.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js',
-                       'tests/qunit/suites/resources/jquery/jquery.client.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.color.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js',
@@ -60,19 +59,24 @@ return array(
                        'tests/qunit/suites/resources/jquery/jquery.placeholder.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.tabIndex.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js',
+                       'tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.textSelection.test.js',
                        'tests/qunit/data/mediawiki.jqueryMsg.data.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.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',
-                       'tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.toc.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.category.test.js',
+                       'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js',
                        'tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js',
@@ -85,7 +89,6 @@ return array(
                        'jquery.autoEllipsis',
                        'jquery.byteLength',
                        'jquery.byteLimit',
-                       'jquery.client',
                        'jquery.color',
                        'jquery.colorUtil',
                        'jquery.getAttrs',
@@ -100,9 +103,11 @@ return array(
                        'jquery.textSelection',
                        'mediawiki.api',
                        'mediawiki.api.category',
+                       'mediawiki.api.options',
                        'mediawiki.api.parse',
                        'mediawiki.api.watch',
                        'mediawiki.jqueryMsg',
+                       'mediawiki.messagePoster',
                        'mediawiki.Title',
                        'mediawiki.toc',
                        'mediawiki.Uri',
index a87721b..4484467 100644 (file)
@@ -7,7 +7,7 @@
        } ) );
 
        var getAccessKeyPrefixTestData = [
-                       //ua string, platform string, expected prefix
+                       // ua string, platform string, expected prefix
                        // Internet Explorer
                        ['Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-'],
                        ['Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-'],
                        ['Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30', 'MacIntel', 'ctrl-option-'],
                        ['Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-']
                ],
-               //strings appended to title to make sure updateTooltipAccessKeys handles them correctly
+               // strings appended to title to make sure updateTooltipAccessKeys handles them correctly
                updateTooltipAccessKeysTestData = [ '', ' [a]', ' [test-a]', ' [alt-b]' ];
 
        function makeInput( title, accessKey ) {
-               //The properties aren't escaped, so make sure you don't call this function with values that need to be escaped!
+               // The properties aren't escaped, so make sure you don't call this function with values that need to be escaped!
                return '<input title="' + title + '" ' + ( accessKey ? 'accessKey="' + accessKey + '" ' : '' ) + ' />';
        }
 
@@ -47,9 +47,9 @@
 
        QUnit.test( 'updateTooltipAccessKeys - current browser', 2, function ( assert ) {
                var title = $( makeInput( 'Title', 'a' ) ).updateTooltipAccessKeys().prop( 'title' ),
-                       //The new title should be something like "Title [alt-a]", but the exact label will depend on the browser.
-                       //The "a" could be capitalized, and the prefix could be anything, e.g. a simple "^" for ctrl-
-                       //(no browser is known using such a short prefix, though) or "Alt+Umschalt+" in German Firefox.
+                       // The new title should be something like "Title [alt-a]", but the exact label will depend on the browser.
+                       // The "a" could be capitalized, and the prefix could be anything, e.g. a simple "^" for ctrl-
+                       // (no browser is known using such a short prefix, though) or "Alt+Umschalt+" in German Firefox.
                        result = /^Title \[(.+)[aA]\]$/.exec( title );
                assert.ok( result, 'title should match expected structure.' );
                assert.notEqual( result[1], 'test-', 'Prefix used for testing shouldn\'t be used in production.' );
index 22d2af1..0cb9cc8 100644 (file)
@@ -60,7 +60,7 @@
                                );
 
                                QUnit.start();
-                       }, 10 );
+                       } );
                } );
        }
 
diff --git a/tests/qunit/suites/resources/jquery/jquery.client.test.js b/tests/qunit/suites/resources/jquery/jquery.client.test.js
deleted file mode 100644 (file)
index ee0f060..0000000
+++ /dev/null
@@ -1,656 +0,0 @@
-( function ( $ ) {
-
-       QUnit.module( 'jquery.client', QUnit.newMwEnvironment() );
-
-       var uacount = 0,
-               // Object keyed by userAgent. Value is an array (human-readable name, client-profile object, navigator.platform value)
-               uas = {
-                       // Internet Explorer 6
-                       // Internet Explorer 7
-                       'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)': {
-                               title: 'Internet Explorer 7',
-                               platform: 'Win32',
-                               profile: {
-                                       name: 'msie',
-                                       layout: 'trident',
-                                       layoutVersion: 'unknown',
-                                       platform: 'win',
-                                       version: '7.0',
-                                       versionBase: '7',
-                                       versionNumber: 7
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: false
-                               }
-                       },
-                       // Internet Explorer 8
-                       // Internet Explorer 9
-                       // Internet Explorer 10
-                       'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)': {
-                               title: 'Internet Explorer 10',
-                               platform: 'Win32',
-                               profile: {
-                                       name: 'msie',
-                                       layout: 'trident',
-                                       layoutVersion: 6,
-                                       platform: 'win',
-                                       version: '10.0',
-                                       versionBase: '10',
-                                       versionNumber: 10
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Internet Explorer 11
-                       'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko': {
-                               title: 'Internet Explorer 11',
-                               platform: 'Win32',
-                               profile: {
-                                       name: 'msie',
-                                       layout: 'trident',
-                                       layoutVersion: 7,
-                                       platform: 'win',
-                                       version: '11.0',
-                                       versionBase: '11',
-                                       versionNumber: 11
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Internet Explorer 11 - Windows 8.1 x64 Modern UI
-                       'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko': {
-                               title: 'Internet Explorer 11',
-                               platform: 'Win64',
-                               profile: {
-                                       name: 'msie',
-                                       layout: 'trident',
-                                       layoutVersion: 7,
-                                       platform: 'win',
-                                       version: '11.0',
-                                       versionBase: '11',
-                                       versionNumber: 11
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Internet Explorer 11 - Windows 8.1 x64 desktop UI
-                       'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko': {
-                               title: 'Internet Explorer 11',
-                               platform: 'WOW64',
-                               profile: {
-                                       name: 'msie',
-                                       layout: 'trident',
-                                       layoutVersion: 7,
-                                       platform: 'win',
-                                       version: '11.0',
-                                       versionBase: '11',
-                                       versionNumber: 11
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Internet Explorer 12
-                       'Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Edge/12.0': {
-                               title: 'Internet Explorer 12',
-                               platform: 'WOW64',
-                               profile: {
-                                       name: 'msie',
-                                       layout: 'edge',
-                                       layoutVersion: 12,
-                                       platform: 'win',
-                                       version: '12.0',
-                                       versionBase: '12',
-                                       versionNumber: 12
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Firefox 2
-                       // Firefox 3.5
-                       'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19': {
-                               title: 'Firefox 3.5',
-                               platform: 'MacIntel',
-                               profile: {
-                                       name: 'firefox',
-                                       layout: 'gecko',
-                                       layoutVersion: 20110420,
-                                       platform: 'mac',
-                                       version: '3.5.19',
-                                       versionBase: '3',
-                                       versionNumber: 3.5
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Firefox 3.6
-                       'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17': {
-                               title: 'Firefox 3.6',
-                               platform: 'Linux i686',
-                               profile: {
-                                       name: 'firefox',
-                                       layout: 'gecko',
-                                       layoutVersion: 20110422,
-                                       platform: 'linux',
-                                       version: '3.6.17',
-                                       versionBase: '3',
-                                       versionNumber: 3.6
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Firefox 4
-                       'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1': {
-                               title: 'Firefox 4',
-                               platform: 'Win32',
-                               profile: {
-                                       name: 'firefox',
-                                       layout: 'gecko',
-                                       layoutVersion: 20100101,
-                                       platform: 'win',
-                                       version: '4.0.1',
-                                       versionBase: '4',
-                                       versionNumber: 4
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Firefox 10 nightly build
-                       'Mozilla/5.0 (X11; Linux x86_64; rv:10.0a1) Gecko/20111103 Firefox/10.0a1': {
-                               title: 'Firefox 10 nightly',
-                               platform: 'Linux',
-                               profile: {
-                                       name: 'firefox',
-                                       layout: 'gecko',
-                                       layoutVersion: 20111103,
-                                       platform: 'linux',
-                                       version: '10.0a1',
-                                       versionBase: '10',
-                                       versionNumber: 10
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Iceweasel 10.0.6
-                       'Mozilla/5.0 (X11; Linux i686; rv:10.0.6) Gecko/20100101 Iceweasel/10.0.6': {
-                               title: 'Iceweasel 10.0.6',
-                               platform: 'Linux',
-                               profile: {
-                                       name: 'iceweasel',
-                                       layout: 'gecko',
-                                       layoutVersion: 20100101,
-                                       platform: 'linux',
-                                       version: '10.0.6',
-                                       versionBase: '10',
-                                       versionNumber: 10
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Iceweasel 15.0.1
-                       'Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1 Iceweasel/15.0.1': {
-                               title: 'Iceweasel 15.0.1',
-                               platform: 'Linux',
-                               profile: {
-                                       name: 'iceweasel',
-                                       layout: 'gecko',
-                                       layoutVersion: 20100101,
-                                       platform: 'linux',
-                                       version: '15.0.1',
-                                       versionBase: '15',
-                                       versionNumber: 15
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Firefox 5
-                       // Safari 3
-                       // Safari 4
-                       'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
-                               title: 'Safari 4',
-                               platform: 'MacIntel',
-                               profile: {
-                                       name: 'safari',
-                                       layout: 'webkit',
-                                       layoutVersion: 531,
-                                       platform: 'mac',
-                                       version: '4.0.5',
-                                       versionBase: '4',
-                                       versionNumber: 4
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
-                               title: 'Safari 4',
-                               platform: 'Win32',
-                               profile: {
-                                       name: 'safari',
-                                       layout: 'webkit',
-                                       layoutVersion: 533,
-                                       platform: 'win',
-                                       version: '4.0.5',
-                                       versionBase: '4',
-                                       versionNumber: 4
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Safari 5
-                       // Safari 6
-                       'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29.13': {
-                               title: 'Safari 6',
-                               platform: 'MacIntel',
-                               profile: {
-                                       name: 'safari',
-                                       layout: 'webkit',
-                                       layoutVersion: 536,
-                                       platform: 'mac',
-                                       version: '6.0.4',
-                                       versionBase: '6',
-                                       versionNumber: 6
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Safari 6.0.5+ (doesn't have the comma in "KHTML, like Gecko")
-                       'Mozilla/5.0 (Macintosh; Intel Mac OS X 1084) AppleWebKit/536.30.1 (KHTML like Gecko) Version/6.0.5 Safari/536.30.1': {
-                               title: 'Safari 6',
-                               platform: 'MacIntel',
-                               profile: {
-                                       name: 'safari',
-                                       layout: 'webkit',
-                                       layoutVersion: 536,
-                                       platform: 'mac',
-                                       version: '6.0.5',
-                                       versionBase: '6',
-                                       versionNumber: 6
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Opera 10+
-                       'Opera/9.80 (Windows NT 5.1)': {
-                               title: 'Opera 10+ (exact version unspecified)',
-                               platform: 'Win32',
-                               profile: {
-                                       name: 'opera',
-                                       layout: 'presto',
-                                       layoutVersion: 'unknown',
-                                       platform: 'win',
-                                       version: '10',
-                                       versionBase: '10',
-                                       versionNumber: 10
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Opera 12
-                       'Opera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.11': {
-                               title: 'Opera 12',
-                               platform: 'Win32',
-                               profile: {
-                                       name: 'opera',
-                                       layout: 'presto',
-                                       layoutVersion: 'unknown',
-                                       platform: 'win',
-                                       version: '12.11',
-                                       versionBase: '12',
-                                       versionNumber: 12.11
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Opera 15 (WebKit-based)
-                       'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130': {
-                               title: 'Opera 15',
-                               platform: 'Win32',
-                               profile: {
-                                       name: 'opera',
-                                       layout: 'webkit',
-                                       layoutVersion: 537,
-                                       platform: 'win',
-                                       version: '15.0.1147.130',
-                                       versionBase: '15',
-                                       versionNumber: 15
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Chrome 5
-                       // Chrome 6
-                       // Chrome 7
-                       // Chrome 8
-                       // Chrome 9
-                       // Chrome 10
-                       // Chrome 11
-                       // Chrome 12
-                       'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30': {
-                               title: 'Chrome 12',
-                               platform: 'MacIntel',
-                               profile: {
-                                       name: 'chrome',
-                                       layout: 'webkit',
-                                       layoutVersion: 534,
-                                       platform: 'mac',
-                                       version: '12.0.742.112',
-                                       versionBase: '12',
-                                       versionNumber: 12
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30': {
-                               title: 'Chrome 12',
-                               platform: 'Linux i686',
-                               profile: {
-                                       name: 'chrome',
-                                       layout: 'webkit',
-                                       layoutVersion: 534,
-                                       platform: 'linux',
-                                       version: '12.0.742.68',
-                                       versionBase: '12',
-                                       versionNumber: 12
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Android WebKit Browser 2.3
-                       'Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1': {
-                               title: 'Android WebKit Browser 2.3',
-                               platform: 'Linux armv7l',
-                               profile: {
-                                       name: 'android',
-                                       layout: 'webkit',
-                                       layoutVersion: 533,
-                                       platform: 'linux',
-                                       version: '2.3.5',
-                                       versionBase: '2',
-                                       versionNumber: 2.3
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Rekonq (bug 34924)
-                       'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34': {
-                               title: 'Rekonq',
-                               platform: 'Linux i686',
-                               profile: {
-                                       name: 'rekonq',
-                                       layout: 'webkit',
-                                       layoutVersion: 534,
-                                       platform: 'linux',
-                                       version: '534.34',
-                                       versionBase: '534',
-                                       versionNumber: 534.34
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Konqueror
-                       'Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9': {
-                               title: 'Konqueror',
-                               platform: 'Linux i686',
-                               profile: {
-                                       name: 'konqueror',
-                                       layout: 'khtml',
-                                       layoutVersion: 'unknown',
-                                       platform: 'linux',
-                                       version: '4.9.1',
-                                       versionBase: '4',
-                                       versionNumber: 4.9
-                               },
-                               wikiEditor: {
-                                       // '4.9' is less than '4.11'.
-                                       ltr: false,
-                                       rtl: false
-                               },
-                               wikiEditorLegacy: {
-                                       // The check is missing in legacyTestMap
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       // Amazon Silk
-                       'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.0.13.81_10003810) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true': {
-                               title: 'Silk',
-                               platform: 'Desktop',
-                               profile: {
-                                       name: 'silk',
-                                       layout: 'webkit',
-                                       layoutVersion: 533,
-                                       platform: 'unknown',
-                                       version: '1.0.13.81_10003810',
-                                       versionBase: '1',
-                                       versionNumber: 1
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       },
-                       'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/2.1 Mobile Safari/535.19 Silk-Accelerated=true': {
-                               title: 'Silk',
-                               platform: 'Mobile',
-                               profile: {
-                                       name: 'silk',
-                                       layout: 'webkit',
-                                       layoutVersion: 535,
-                                       platform: 'unknown',
-                                       version: '2.1',
-                                       versionBase: '2',
-                                       versionNumber: 2.1
-                               },
-                               wikiEditor: {
-                                       ltr: true,
-                                       rtl: true
-                               }
-                       }
-               },
-               testMap = {
-                       // Example from WikiEditor, modified to provide version identifiers as strings and with
-                       // Konqueror 4.11 check added.
-                       'ltr': {
-                               'msie': [['>=', '7.0']],
-                               'firefox': [['>=', '2']],
-                               'opera': [['>=', '9.6']],
-                               'safari': [['>=', '3']],
-                               'chrome': [['>=', '3']],
-                               'netscape': [['>=', '9']],
-                               'konqueror': [['>=', '4.11']],
-                               'blackberry': false,
-                               'ipod': false,
-                               'iphone': false
-                       },
-                       'rtl': {
-                               'msie': [['>=', '8']],
-                               'firefox': [['>=', '2']],
-                               'opera': [['>=', '9.6']],
-                               'safari': [['>=', '3']],
-                               'chrome': [['>=', '3']],
-                               'netscape': [['>=', '9']],
-                               'konqueror': [['>=', '4.11']],
-                               'blackberry': false,
-                               'ipod': false,
-                               'iphone': false
-                       }
-               },
-               legacyTestMap = {
-                       // Original example from WikiEditor.
-                       // This is using the old, but still supported way of providing version identifiers as numbers
-                       // instead of strings; with this method, 4.9 would be considered larger than 4.11.
-                       'ltr': {
-                               'msie': [['>=', 7.0]],
-                               'firefox': [['>=', 2]],
-                               'opera': [['>=', 9.6]],
-                               'safari': [['>=', 3]],
-                               'chrome': [['>=', 3]],
-                               'netscape': [['>=', 9]],
-                               'blackberry': false,
-                               'ipod': false,
-                               'iphone': false
-                       },
-                       'rtl': {
-                               'msie': [['>=', 8]],
-                               'firefox': [['>=', 2]],
-                               'opera': [['>=', 9.6]],
-                               'safari': [['>=', 3]],
-                               'chrome': [['>=', 3]],
-                               'netscape': [['>=', 9]],
-                               'blackberry': false,
-                               'ipod': false,
-                               'iphone': false
-                       }
-               }
-       ;
-
-       // Count test cases
-       $.each( uas, function () {
-               uacount++;
-       } );
-
-       QUnit.test( 'profile( navObject )', 7, function ( assert ) {
-               var p = $.client.profile();
-
-               function unknownOrType( val, type, summary ) {
-                       assert.ok( typeof val === type || val === 'unknown', summary );
-               }
-
-               assert.equal( typeof p, 'object', 'profile returns an object' );
-               unknownOrType( p.layout, 'string', 'p.layout is a string (or "unknown")' );
-               unknownOrType( p.layoutVersion, 'number', 'p.layoutVersion is a number (or "unknown")' );
-               unknownOrType( p.platform, 'string', 'p.platform is a string (or "unknown")' );
-               unknownOrType( p.version, 'string', 'p.version is a string (or "unknown")' );
-               unknownOrType( p.versionBase, 'string', 'p.versionBase is a string (or "unknown")' );
-               assert.equal( typeof p.versionNumber, 'number', 'p.versionNumber is a number' );
-       } );
-
-       QUnit.test( 'profile( navObject ) - samples', uacount, function ( assert ) {
-               // Loop through and run tests
-               $.each( uas, function ( rawUserAgent, data ) {
-                       // Generate a client profile object and compare recursively
-                       var ret = $.client.profile( {
-                               userAgent: rawUserAgent,
-                               platform: data.platform
-                       } );
-                       assert.deepEqual( ret, data.profile, 'Client profile support check for ' + data.title + ' (' + data.platform + '): ' + rawUserAgent );
-               } );
-       } );
-
-       QUnit.test( 'test( testMap )', 4, function ( assert ) {
-               // .test() uses eval, make sure no exceptions are thrown
-               // then do a basic return value type check
-               var testMatch = $.client.test( testMap ),
-                       ie7Profile = $.client.profile( {
-                               'userAgent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
-                               'platform': ''
-                       } );
-
-               assert.equal( typeof testMatch, 'boolean', 'map with ltr/rtl split returns a boolean value' );
-
-               testMatch = $.client.test( testMap.ltr );
-
-               assert.equal( typeof testMatch, 'boolean', 'simple map (without ltr/rtl split) returns a boolean value' );
-
-               assert.equal( $.client.test( {
-                       'msie': null
-               }, ie7Profile ), true, 'returns true if any version of a browser are allowed (null)' );
-
-               assert.equal( $.client.test( {
-                       'msie': false
-               }, ie7Profile ), false, 'returns false if all versions of a browser are not allowed (false)' );
-       } );
-
-       QUnit.test( 'test( testMap, exactMatchOnly )', 2, function ( assert ) {
-               var ie7Profile = $.client.profile( {
-                       'userAgent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
-                       'platform': ''
-               } );
-
-               assert.equal( $.client.test( {
-                       'firefox': [['>=', 2]]
-               }, ie7Profile, false ), true, 'returns true if browser not found and exactMatchOnly not set' );
-
-               assert.equal( $.client.test( {
-                       'firefox': [['>=', 2]]
-               }, ie7Profile, true ), false, 'returns false if browser not found and exactMatchOnly is set' );
-       } );
-
-       QUnit.test( 'test( testMap ), test( legacyTestMap ) - WikiEditor sample', uacount * 2 * 2, function ( assert ) {
-               var $body = $( 'body' ),
-                       bodyClasses = $body.attr( 'class' );
-
-               // Loop through and run tests
-               $.each( uas, function ( agent, data ) {
-                       $.each( ['ltr', 'rtl'], function ( i, dir ) {
-                               var profile, testMatch, legacyTestMatch;
-                               $body.removeClass( 'ltr rtl' ).addClass( dir );
-                               profile = $.client.profile( {
-                                       userAgent: agent,
-                                       platform: data.platform
-                               } );
-                               testMatch = $.client.test( testMap, profile );
-                               legacyTestMatch = $.client.test( legacyTestMap, profile );
-                               $body.removeClass( dir );
-
-                               assert.equal(
-                                       testMatch,
-                                       data.wikiEditor[dir],
-                                       'testing comparison based on ' + dir + ', ' + agent
-                               );
-                               assert.equal(
-                                       legacyTestMatch,
-                                       data.wikiEditorLegacy ? data.wikiEditorLegacy[dir] : data.wikiEditor[dir],
-                                       'testing comparison based on ' + dir + ', ' + agent + ' (legacyTestMap)'
-                               );
-                       } );
-               } );
-
-               // Restore body classes
-               $body.attr( 'class', bodyClasses );
-       } );
-}( jQuery ) );
diff --git a/tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js b/tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js
new file mode 100644 (file)
index 0000000..97a3ae1
--- /dev/null
@@ -0,0 +1,223 @@
+( function ( $, mw ) {
+       /**
+        * This module tests the input/output capabilities of the parsers of tablesorter.
+        * It does not test actual sorting.
+        */
+
+       var text, ipv4,
+               simpleMDYDatesInMDY, simpleMDYDatesInDMY, oldMDYDates, complexMDYDates, clobberedDates, MYDates, YDates,
+               currencyData, transformedCurrencyData;
+
+       QUnit.module( 'jquery.tablesorter.parsers', QUnit.newMwEnvironment( {
+               setup: function () {
+                       this.liveMonths = mw.language.months;
+                       mw.language.months = {
+                               'keys': {
+                                       'names': ['january', 'february', 'march', 'april', 'may_long', 'june',
+                                               'july', 'august', 'september', 'october', 'november', 'december'],
+                                       'genitive': ['january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
+                                               'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen'],
+                                       'abbrev': ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
+                                               'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
+                               },
+                               'names': ['January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December'],
+                               'genitive': ['January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December'],
+                               'abbrev': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+                                               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+                       };
+               },
+               teardown: function () {
+                       mw.language.months = this.liveMonths;
+               },
+               config: {
+                       wgContentLanguage: 'en',
+                       /* default date format of the content language */
+                       wgDefaultDateFormat: 'dmy',
+                       /* These two are important for numeric interpretations */
+                       wgSeparatorTransformTable: ['', ''],
+                       wgDigitTransformTable: ['', '']
+               }
+       } ) );
+
+       /**
+        * For a value, check if the parser recognizes it and how it transforms it
+        *
+        * @param {String} msg text to pass on to qunit describing the test case
+        * @param {String[]} parserId of the parser that will be tested
+        * @param {String[][]} data Array of testcases. Each testcase, array of
+        *              inputValue: The string value that we want to test the parser for
+        *              recognized: If we expect that this value's type is detectable by the parser
+        *              outputValue: The value the parser has converted the input to
+        *              msg: describing the testcase
+        * @param {function($table)} callback something to do before we start the testcase
+        */
+       function parserTest( msg, parserId, data, callback ) {
+               QUnit.test( msg, data.length * 2, function ( assert ) {
+                       var extractedR, extractedF, parser;
+
+                       if (callback !== undefined ) {
+                               callback();
+                       }
+
+                       parser = $.tablesorter.getParser( parserId );
+                       $.each( data, function ( index, testcase ) {
+                               extractedR = parser.is( testcase[0] );
+                               extractedF = parser.format( testcase[0] );
+
+                               assert.strictEqual( extractedR, testcase[1], 'Detect: ' + testcase[3] );
+                               assert.strictEqual( extractedF, testcase[2], 'Sortkey: ' + testcase[3] );
+                       } );
+
+               } );
+       }
+
+       text  = [
+               [ 'Mars', true, 'mars', 'Simple text' ],
+               [ 'Mẘas', true, 'mẘas', 'Non ascii character' ],
+               [ 'A sentence', true, 'a sentence', 'A sentence with space chars' ]
+       ];
+       parserTest( 'Textual keys', 'text', text );
+
+       ipv4 = [
+               // Some randomly generated fake IPs
+               ['0.0.0.0', true, 0, 'An IP address' ],
+               ['255.255.255.255', true, 255255255255, 'An IP address' ],
+               ['45.238.27.109', true, 45238027109, 'An IP address' ],
+               ['1.238.27.1', true, 1238027001, 'An IP address with small numbers' ],
+               ['238.27.1', false, 238027001, 'A malformed IP Address' ],
+               ['1', false, 1, 'A super malformed IP Address' ],
+               ['Just text', false, 0, 'A line with just text' ],
+               ['45.238.27.109Postfix', false, 45238027109, 'An IP address with a connected postfix' ],
+               ['45.238.27.109 postfix', false, 45238027109, 'An IP address with a seperated postfix' ]
+       ];
+       parserTest( 'IPv4', 'IPAddress', ipv4 );
+
+       simpleMDYDatesInMDY = [
+               ['January 17, 2010',    true, 20100117, 'Long middle endian date'],
+               ['Jan 17, 2010',        true, 20100117, 'Short middle endian date'],
+               ['1/17/2010',           true, 20100117, 'Numeric middle endian date'],
+               ['01/17/2010',          true, 20100117, 'Numeric middle endian date with padding on month'],
+               ['01/07/2010',          true, 20100107, 'Numeric middle endian date with padding on day'],
+               ['01/07/0010',          true, 20100107, 'Numeric middle endian date with padding on year'],
+               ['5.12.1990',           true, 19900512, 'Numeric middle endian date with . separator']
+       ];
+       parserTest( 'MDY Dates using mdy content language', 'date', simpleMDYDatesInMDY );
+
+       simpleMDYDatesInDMY = [
+               ['January 17, 2010',    true, 20100117, 'Long middle endian date'],
+               ['Jan 17, 2010',        true, 20100117, 'Short middle endian date'],
+               ['1/17/2010',           true, 20101701, 'Numeric middle endian date'],
+               ['01/17/2010',          true, 20101701, 'Numeric middle endian date with padding on month'],
+               ['01/07/2010',          true, 20100701, 'Numeric middle endian date with padding on day'],
+               ['01/07/0010',          true, 20100701, 'Numeric middle endian date with padding on year'],
+               ['5.12.1990',           true, 19901205, 'Numeric middle endian date with . separator']
+       ];
+       parserTest( 'MDY Dates using dmy content language', 'date', simpleMDYDatesInDMY, function () {
+               mw.config.set( {
+                       'wgDefaultDateFormat': 'dmy',
+                       'wgContentLanguage': 'de'
+               } );
+       } );
+
+       oldMDYDates = [
+               ['January 19, 1400 BC',         false, '99999999', 'BC'],
+               ['January 19, 1400BC',          false, '99999999', 'Connected BC'],
+               ['January, 19 1400 B.C.',       false, '99999999', 'B.C.'],
+               ['January 19, 1400 AD',         false, '99999999', 'AD'],
+               ['January, 19 10',                      true, 20100119, 'AD'],
+               ['January, 19 1',                       false, '99999999', 'AD']
+       ];
+       parserTest( 'Very old MDY dates', 'date', oldMDYDates );
+
+       complexMDYDates = [
+               ['January, 19 2010',    true, 20100119, 'Comma after month'],
+               ['January 19, 2010',    true, 20100119, 'Comma after day'],
+               ['January/19/2010',             true, 20100119, 'Forward slash separator'],
+               ['04 22 1991',                  true, 19910422, 'Month with 0 padding'],
+               ['April 21 1991',               true, 19910421, 'Space separation'],
+               ['04 22 1991',                  true, 19910422, 'Month with 0 padding'],
+               ['December 12 \'10',    true, 20101212, ''],
+               ['Dec 12 \'10',                 true, 20101212, ''],
+               ['Dec. 12 \'10',                true, 20101212, '']
+       ];
+       parserTest( 'MDY Dates', 'date', complexMDYDates );
+
+       clobberedDates = [
+               ['January, 19 2010 - January, 20 2010', false, '99999999', 'Date range with hyphen'],
+               ['January, 19 2010 — January, 20 2010',       false, '99999999', 'Date range with mdash'],
+               ['prefixJanuary, 19 2010',      false, '99999999', 'Connected prefix'],
+               ['prefix January, 19 2010',     false, '99999999', 'Prefix'],
+               ['December 12 2010postfix',     false, '99999999', 'ConnectedPostfix'],
+               ['December 12 2010 postfix',    false, '99999999', 'Postfix'],
+               ['A simple text',               false, '99999999', 'Plain text in date sort'],
+               ['04l22l1991',                  false, '99999999', 'l char as separator'],
+               ['January\\19\\2010',   false, '99999999', 'backslash as date separator']
+       ];
+       parserTest( 'Clobbered Dates', 'date', clobberedDates );
+
+       MYDates = [
+               ['December 2010',       false, '99999999', 'Plain month year'],
+               ['Dec 2010',            false, '99999999', 'Abreviated month year'],
+               ['12 2010',                     false, '99999999', 'Numeric month year']
+       ];
+       parserTest( 'MY Dates', 'date', MYDates );
+
+       YDates = [
+               ['2010',        false, '99999999', 'Plain 4-digit year'],
+               ['876',         false, '99999999', '3-digit year'],
+               ['76',          false, '99999999', '2-digit year'],
+               ['\'76',        false, '99999999', '2-digit millenium bug year'],
+               ['2010 BC',     false, '99999999', '4-digit year BC']
+       ];
+       parserTest( 'Y Dates', 'date', YDates );
+
+       currencyData = [
+               ['1.02 $',      true, 1.02, ''],
+               ['$ 3.00',      true, 3, ''],
+               ['€ 2,99',    true, 299, ''],
+               ['$ 1.00',      true, 1, ''],
+               ['$3.50',       true, 3.50, ''],
+               ['$ 1.50',      true, 1.50, ''],
+               ['€ 0.99',    true, 0.99, ''],
+               ['$ 299.99',    true, 299.99, ''],
+               ['$ 2,299.99',  true, 2299.99, ''],
+               ['$ 2,989',     true, 2989, ''],
+               ['$ 2 299.99',  true, 2299.99, ''],
+               ['$ 2 989',     true, 2989, ''],
+               ['$ 2.989',     true, 2.989, '']
+       ];
+       parserTest( 'Currency', 'currency', currencyData );
+
+       transformedCurrencyData = [
+               ['1.02 $',      true, 102, ''],
+               ['$ 3.00',      true, 300, ''],
+               ['€ 2,99',    true, 2.99, ''],
+               ['$ 1.00',      true, 100, ''],
+               ['$3.50',       true, 350, ''],
+               ['$ 1.50',      true, 150, ''],
+               ['€ 0.99',    true, 99, ''],
+               ['$ 299.99',    true, 29999, ''],
+               ['$ 2\'299,99', true, 2299.99, ''],
+               ['$ 2,989',     true, 2.989, ''],
+               ['$ 2 299.99',  true, 229999, ''],
+               ['2 989 $',     true, 2989, ''],
+               ['299.99 $',    true, 29999, ''],
+               ['2\'299,99 $', true, 2299.99, ''],
+               ['2,989 $',     true, 2.989, ''],
+               ['2 299.99 $',  true, 229999, ''],
+               ['2 989 $',     true, 2989, '']
+       ];
+       parserTest( 'Currency with european separators', 'currency', transformedCurrencyData, function () {
+               mw.config.set( {
+                       // We expect 22'234.444,22
+                       // Map from ascii separators => localized separators
+                       wgSeparatorTransformTable: [',  .       ,', '\' ,       .'],
+                       wgDigitTransformTable: ['', '']
+               } );
+       } );
+
+       // TODO add numbers sorting tests for bug 8115 with a different language
+
+}( jQuery, mediaWiki ) );
index 5464d22..f63aa27 100644 (file)
                ];
 
        QUnit.module( 'jquery.tablesorter', QUnit.newMwEnvironment( {
+               setup: function () {
+                       this.liveMonths = mw.language.months;
+                       mw.language.months = {
+                               'keys': {
+                                       'names': ['january', 'february', 'march', 'april', 'may_long', 'june',
+                                               'july', 'august', 'september', 'october', 'november', 'december'],
+                                       'genitive': ['january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
+                                               'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen'],
+                                       'abbrev': ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
+                                               'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
+                               },
+                               'names': ['January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December'],
+                               'genitive': ['January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December'],
+                               'abbrev': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+                                               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+                       };
+               },
+               teardown: function () {
+                       mw.language.months = this.liveMonths;
+               },
                config: {
-                       wgMonthNames: ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
-                       wgMonthNamesShort: ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
                        wgDefaultDateFormat: 'dmy',
                        wgSeparatorTransformTable: ['', ''],
                        wgDigitTransformTable: ['', ''],
        // bug 53211 - exploding rowspans in more complex cases
        QUnit.test(
                'Rowspan exploding with row headers and colspans', 1, function ( assert ) {
-               var $table = $( '<table class="sortable">' +
-                       '<thead><tr><th rowspan="2">n</th><th colspan="2">foo</th><th rowspan="2">baz</th></tr>' +
-                       '<tr><th>foo</th><th>bar</th></tr></thead>' +
-                       '<tbody>' +
-                       '<tr><td>1</td><td>foo</td><td>bar</td><td>baz</td></tr>' +
-                       '<tr><td>2</td><td>foo</td><td>bar</td><td>baz</td></tr>' +
-                       '</tbody></table>' );
+                       var $table = $( '<table class="sortable">' +
+                               '<thead><tr><th rowspan="2">n</th><th colspan="2">foo</th><th rowspan="2">baz</th></tr>' +
+                               '<tr><th>foo</th><th>bar</th></tr></thead>' +
+                               '<tbody>' +
+                               '<tr><td>1</td><td>foo</td><td>bar</td><td>baz</td></tr>' +
+                               '<tr><td>2</td><td>foo</td><td>bar</td><td>baz</td></tr>' +
+                               '</tbody></table>' );
 
                        $table.tablesorter();
                        assert.equal( $table.find( 'tr:eq(1) th:eq(1)').data('headerIndex'),
diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js
new file mode 100644 (file)
index 0000000..c0a6585
--- /dev/null
@@ -0,0 +1,78 @@
+( function ( mw ) {
+       QUnit.module( 'mediawiki.api.options', QUnit.newMwEnvironment( {
+               setup: function () {
+                       this.server = this.sandbox.useFakeServer();
+               }
+       } ) );
+
+       QUnit.test( 'saveOption', function ( assert ) {
+               QUnit.expect( 2 );
+
+               var
+                       api = new mw.Api(),
+                       stub = this.sandbox.stub( mw.Api.prototype, 'saveOptions' );
+
+               api.saveOption( 'foo', 'bar' );
+
+               assert.ok( stub.calledOnce, '#saveOptions called once' );
+               assert.deepEqual( stub.getCall( 0 ).args, [ { foo: 'bar' } ], '#saveOptions called correctly' );
+       } );
+
+       QUnit.test( 'saveOptions', function ( assert ) {
+               QUnit.expect( 13 );
+
+               var api = new mw.Api();
+
+               // We need to respond to the request for token first, otherwise the other requests won't be sent
+               // until after the server.respond call, which confuses sinon terribly. This sucks a lot.
+               api.getToken( 'options' );
+               this.server.respond(
+                       /action=tokens.*&type=options/,
+                       [ 200, { 'Content-Type': 'application/json' },
+                               '{ "tokens": { "optionstoken": "+\\\\" } }' ]
+               );
+
+               api.saveOptions( {} ).done( function () {
+                       assert.ok( true, 'Request completed: empty case' );
+               } );
+               api.saveOptions( { foo: 'bar' } ).done( function () {
+                       assert.ok( true, 'Request completed: simple' );
+               } );
+               api.saveOptions( { foo: 'bar', baz: 'quux' } ).done( function () {
+                       assert.ok( true, 'Request completed: two options' );
+               } );
+               api.saveOptions( { foo: 'bar|quux', bar: 'a|b|c', baz: 'quux' } ).done( function () {
+                       assert.ok( true, 'Request completed: not bundleable' );
+               } );
+               api.saveOptions( { foo: null } ).done( function () {
+                       assert.ok( true, 'Request completed: reset an option' );
+               } );
+               api.saveOptions( { 'foo|bar=quux': null } ).done( function () {
+                       assert.ok( true, 'Request completed: reset an option, not bundleable' );
+               } );
+
+               // Requests are POST, match requestBody instead of url
+               this.server.respond( function ( request ) {
+                       switch ( request.requestBody ) {
+                               // simple
+                               case 'action=options&format=json&change=foo%3Dbar&token=%2B%5C':
+                               // two options
+                               case 'action=options&format=json&change=foo%3Dbar%7Cbaz%3Dquux&token=%2B%5C':
+                               // not bundleable
+                               case 'action=options&format=json&optionname=foo&optionvalue=bar%7Cquux&token=%2B%5C':
+                               case 'action=options&format=json&optionname=bar&optionvalue=a%7Cb%7Cc&token=%2B%5C':
+                               case 'action=options&format=json&change=baz%3Dquux&token=%2B%5C':
+                               // reset an option
+                               case 'action=options&format=json&change=foo&token=%2B%5C':
+                               // reset an option, not bundleable
+                               case 'action=options&format=json&optionname=foo%7Cbar%3Dquux&token=%2B%5C':
+                                       assert.ok( true, 'Repond to ' + request.requestBody );
+                                       request.respond( 200, { 'Content-Type': 'application/json' },
+                                               '{ "options": "success" }' );
+                                       break;
+                               default:
+                                       assert.ok( false, 'Unexpected request:' + request.requestBody );
+                       }
+               } );
+       } );
+}( mediaWiki ) );
index 7ab309a..c0afe07 100644 (file)
@@ -46,8 +46,8 @@
                        // Note: The ones with # are commented out as those are interpreted as fragment and
                        // as such end up being valid.
                        'A &eacute; B',
-                       //'A &#233; B',
-                       //'A &#x00E9; B',
+                       // 'A &#233; B',
+                       // 'A &#x00E9; B',
                        // Subject of NS_TALK does not roundtrip to NS_MAIN
                        'Talk:File:Example.svg',
                        // Directory navigation
        } );
 
        QUnit.test( 'getRelativeText', 5, function ( assert ) {
-               var cases = [
-                       {
-                               text: 'asd',
-                               relativeTo: 123,
-                               expectedResult: ':Asd'
-                       },
-                       {
-                               text: 'dfg',
-                               relativeTo: 0,
-                               expectedResult: 'Dfg'
-                       },
-                       {
-                               text: 'Template:Ghj',
-                               relativeTo: 0,
-                               expectedResult: 'Template:Ghj'
-                       },
-                       {
-                               text: 'Template:1',
-                               relativeTo: 10,
-                               expectedResult: '1'
-                       },
-                       {
-                               text: 'User:Hi',
-                               relativeTo: 10,
-                               expectedResult: 'User:Hi'
-                       }
-               ], i, thisCase, title;
+               var i, thisCase, title,
+                       cases = [
+                               {
+                                       text: 'asd',
+                                       relativeTo: 123,
+                                       expectedResult: ':Asd'
+                               },
+                               {
+                                       text: 'dfg',
+                                       relativeTo: 0,
+                                       expectedResult: 'Dfg'
+                               },
+                               {
+                                       text: 'Template:Ghj',
+                                       relativeTo: 0,
+                                       expectedResult: 'Template:Ghj'
+                               },
+                               {
+                                       text: 'Template:1',
+                                       relativeTo: 10,
+                                       expectedResult: '1'
+                               },
+                               {
+                                       text: 'User:Hi',
+                                       relativeTo: 10,
+                                       expectedResult: 'User:Hi'
+                               }
+                       ];
 
                for ( i = 0; i < cases.length; i++ ) {
                        thisCase = cases[i];
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js
new file mode 100644 (file)
index 0000000..7c3f1ec
--- /dev/null
@@ -0,0 +1,42 @@
+( function ( $, mw ) {
+       QUnit.module( 'mediawiki.errorLogger', QUnit.newMwEnvironment() );
+
+       QUnit.test( 'installGlobalHandler', 7, function ( assert ) {
+               var w = {},
+                       errorMessage = 'Foo',
+                       errorUrl = 'http://example.com',
+                       errorLine = '123',
+                       errorColumn = '45',
+                       errorObject = new Error( 'Foo'),
+                       oldHandler = this.sandbox.stub();
+
+               this.sandbox.stub( mw, 'track' );
+
+               mw.errorLogger.installGlobalHandler( w );
+
+               assert.ok( w.onerror, 'Global handler has been installed' );
+               assert.strictEqual( w.onerror( errorMessage, errorUrl, errorLine ), false,
+                       'Global handler returns false when there is no previous handler' );
+               sinon.assert.calledWithExactly( mw.track, 'global.error',
+                       sinon.match( { errorMessage: errorMessage, url: errorUrl, lineNumber: errorLine } ) );
+
+               mw.track.reset();
+               w.onerror( errorMessage, errorUrl, errorLine, errorColumn, errorObject );
+               sinon.assert.calledWithExactly( mw.track, 'global.error',
+                       sinon.match( { errorMessage: errorMessage, url: errorUrl, lineNumber: errorLine,
+                       columnNumber: errorColumn, errorObject: errorObject } ) );
+
+               w = { onerror: oldHandler };
+
+               mw.errorLogger.installGlobalHandler( w );
+               w.onerror( errorMessage, errorUrl, errorLine );
+               sinon.assert.calledWithExactly( oldHandler, errorMessage, errorUrl, errorLine );
+
+               oldHandler.returns( false );
+               assert.strictEqual( w.onerror( errorMessage, errorUrl, errorLine ), false,
+                       'Global handler preserves false return from previous handler' );
+               oldHandler.returns( true );
+               assert.strictEqual( w.onerror( errorMessage, errorUrl, errorLine ), true,
+                       'Global handler preserves true return from previous handler' );
+       } );
+}( jQuery, mediaWiki ) );
index 1fb1723..7e23e2f 100644 (file)
                mw.jqueryMsg.getMessageFunction = oldGMF;
        } );
 
-formatnumTests = [
-       {
-               lang: 'en',
-               number: 987654321.654321,
-               result: '987,654,321.654',
-               description: 'formatnum test for English, decimal seperator'
-       },
-       {
-               lang: 'ar',
-               number: 987654321.654321,
-               result: '٩٨٧٬٦٥٤٬٣٢١٫٦٥٤',
-               description: 'formatnum test for Arabic, with decimal seperator'
-       },
-       {
-               lang: 'ar',
-               number: '٩٨٧٦٥٤٣٢١٫٦٥٤٣٢١',
-               result: 987654321,
-               integer: true,
-               description: 'formatnum test for Arabic, with decimal seperator, reverse'
-       },
-       {
-               lang: 'ar',
-               number: -12.89,
-               result: '-١٢٫٨٩',
-               description: 'formatnum test for Arabic, negative number'
-       },
-       {
-               lang: 'ar',
-               number: '-١٢٫٨٩',
-               result: -12,
-               integer: true,
-               description: 'formatnum test for Arabic, negative number, reverse'
-       },
-       {
-               lang: 'nl',
-               number: 987654321.654321,
-               result: '987.654.321,654',
-               description: 'formatnum test for Nederlands, decimal seperator'
-       },
-       {
-               lang: 'nl',
-               number: -12.89,
-               result: '-12,89',
-               description: 'formatnum test for Nederlands, negative number'
-       },
-       {
-               lang: 'nl',
-               number: '.89',
-               result: '0,89',
-               description: 'formatnum test for Nederlands'
-       },
-       {
-               lang: 'nl',
-               number: 'invalidnumber',
-               result: 'invalidnumber',
-               description: 'formatnum test for Nederlands, invalid number'
-       },
-       {
-               lang: 'ml',
-               number: '1000000000',
-               result: '1,00,00,00,000',
-               description: 'formatnum test for Malayalam'
-       },
-       {
-               lang: 'ml',
-               number: '-1000000000',
-               result: '-1,00,00,00,000',
-               description: 'formatnum test for Malayalam, negative number'
-       },
-       /*
-        * This will fail because of wrong pattern for ml in MW(different from CLDR)
-       {
-               lang: 'ml',
-               number: '1000000000.000',
-               result: '1,00,00,00,000.000',
-               description: 'formatnum test for Malayalam with decimal place'
-       },
-       */
-       {
-               lang: 'hi',
-               number: '123456789.123456789',
-               result: '१२,३४,५६,७८९',
-               description: 'formatnum test for Hindi'
-       },
-       {
-               lang: 'hi',
-               number: '१२,३४,५६,७८९',
-               result: '१२,३४,५६,७८९',
-               description: 'formatnum test for Hindi, Devanagari digits passed'
-       },
-       {
-               lang: 'hi',
-               number: '१२३४५६,७८९',
-               result: '123456',
-               integer: true,
-               description: 'formatnum test for Hindi, Devanagari digits passed to get integer value'
-       }
-];
-
-QUnit.test( 'formatnum', formatnumTests.length, function ( assert ) {
-       mw.messages.set( 'formatnum-msg', '{{formatnum:$1}}' );
-       mw.messages.set( 'formatnum-msg-int', '{{formatnum:$1|R}}' );
-       var queue = $.map( formatnumTests, function ( test ) {
-               return function ( next ) {
-                       getMwLanguage( test.lang )
-                               .done( function ( langClass ) {
-                                       mw.config.set( 'wgUserLanguage', test.lang );
-                                       var parser = new mw.jqueryMsg.parser( { language: langClass } );
-                                       assert.equal(
-                                               parser.parse( test.integer ? 'formatnum-msg-int' : 'formatnum-msg',
-                                                       [ test.number ] ).html(),
-                                               test.result,
-                                               test.description
-                                       );
-                               } )
-                               .fail( function () {
-                                       assert.ok( false, 'Language "' + test.lang + '" failed to load' );
-                               } )
-                               .always( next );
-               };
+       formatnumTests = [
+               {
+                       lang: 'en',
+                       number: 987654321.654321,
+                       result: '987,654,321.654',
+                       description: 'formatnum test for English, decimal separator'
+               },
+               {
+                       lang: 'ar',
+                       number: 987654321.654321,
+                       result: '٩٨٧٬٦٥٤٬٣٢١٫٦٥٤',
+                       description: 'formatnum test for Arabic, with decimal separator'
+               },
+               {
+                       lang: 'ar',
+                       number: '٩٨٧٦٥٤٣٢١٫٦٥٤٣٢١',
+                       result: 987654321,
+                       integer: true,
+                       description: 'formatnum test for Arabic, with decimal separator, reverse'
+               },
+               {
+                       lang: 'ar',
+                       number: -12.89,
+                       result: '-١٢٫٨٩',
+                       description: 'formatnum test for Arabic, negative number'
+               },
+               {
+                       lang: 'ar',
+                       number: '-١٢٫٨٩',
+                       result: -12,
+                       integer: true,
+                       description: 'formatnum test for Arabic, negative number, reverse'
+               },
+               {
+                       lang: 'nl',
+                       number: 987654321.654321,
+                       result: '987.654.321,654',
+                       description: 'formatnum test for Nederlands, decimal separator'
+               },
+               {
+                       lang: 'nl',
+                       number: -12.89,
+                       result: '-12,89',
+                       description: 'formatnum test for Nederlands, negative number'
+               },
+               {
+                       lang: 'nl',
+                       number: '.89',
+                       result: '0,89',
+                       description: 'formatnum test for Nederlands'
+               },
+               {
+                       lang: 'nl',
+                       number: 'invalidnumber',
+                       result: 'invalidnumber',
+                       description: 'formatnum test for Nederlands, invalid number'
+               },
+               {
+                       lang: 'ml',
+                       number: '1000000000',
+                       result: '1,00,00,00,000',
+                       description: 'formatnum test for Malayalam'
+               },
+               {
+                       lang: 'ml',
+                       number: '-1000000000',
+                       result: '-1,00,00,00,000',
+                       description: 'formatnum test for Malayalam, negative number'
+               },
+               /*
+                * This will fail because of wrong pattern for ml in MW(different from CLDR)
+               {
+                       lang: 'ml',
+                       number: '1000000000.000',
+                       result: '1,00,00,00,000.000',
+                       description: 'formatnum test for Malayalam with decimal place'
+               },
+               */
+               {
+                       lang: 'hi',
+                       number: '123456789.123456789',
+                       result: '१२,३४,५६,७८९',
+                       description: 'formatnum test for Hindi'
+               },
+               {
+                       lang: 'hi',
+                       number: '१२,३४,५६,७८९',
+                       result: '१२,३४,५६,७८९',
+                       description: 'formatnum test for Hindi, Devanagari digits passed'
+               },
+               {
+                       lang: 'hi',
+                       number: '१२३४५६,७८९',
+                       result: '123456',
+                       integer: true,
+                       description: 'formatnum test for Hindi, Devanagari digits passed to get integer value'
+               }
+       ];
+
+       QUnit.test( 'formatnum', formatnumTests.length, function ( assert ) {
+               mw.messages.set( 'formatnum-msg', '{{formatnum:$1}}' );
+               mw.messages.set( 'formatnum-msg-int', '{{formatnum:$1|R}}' );
+               var queue = $.map( formatnumTests, function ( test ) {
+                       return function ( next ) {
+                               getMwLanguage( test.lang )
+                                       .done( function ( langClass ) {
+                                               mw.config.set( 'wgUserLanguage', test.lang );
+                                               var parser = new mw.jqueryMsg.parser( { language: langClass } );
+                                               assert.equal(
+                                                       parser.parse( test.integer ? 'formatnum-msg-int' : 'formatnum-msg',
+                                                               [ test.number ] ).html(),
+                                                       test.result,
+                                                       test.description
+                                               );
+                                       } )
+                                       .fail( function () {
+                                               assert.ok( false, 'Language "' + test.lang + '" failed to load' );
+                                       } )
+                                       .always( next );
+                       };
+               } );
+               QUnit.stop();
+               process( queue, QUnit.start );
+       } );
+
+       // HTML in wikitext
+       QUnit.test( 'HTML', 26, function ( assert ) {
+               mw.messages.set( 'jquerymsg-italics-msg', '<i>Very</i> important' );
+
+               assertBothModes( assert, ['jquerymsg-italics-msg'], mw.messages.get( 'jquerymsg-italics-msg' ), 'Simple italics unchanged' );
+
+               mw.messages.set( 'jquerymsg-bold-msg', '<b>Strong</b> speaker' );
+               assertBothModes( assert, ['jquerymsg-bold-msg'], mw.messages.get( 'jquerymsg-bold-msg' ), 'Simple bold unchanged' );
+
+               mw.messages.set( 'jquerymsg-bold-italics-msg', 'It is <b><i>key</i></b>' );
+               assertBothModes( assert, ['jquerymsg-bold-italics-msg'], mw.messages.get( 'jquerymsg-bold-italics-msg' ), 'Bold and italics nesting order preserved' );
+
+               mw.messages.set( 'jquerymsg-italics-bold-msg', 'It is <i><b>vital</b></i>' );
+               assertBothModes( assert, ['jquerymsg-italics-bold-msg'], mw.messages.get( 'jquerymsg-italics-bold-msg' ), 'Italics and bold nesting order preserved' );
+
+               mw.messages.set( 'jquerymsg-italics-with-link', 'An <i>italicized [[link|wiki-link]]</i>' );
+
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-italics-with-link' ),
+                       'An <i>italicized <a title="link" href="' + mw.html.escape( mw.util.getUrl( 'link' ) ) + '">wiki-link</i>',
+                       'Italics with link inside in parse mode'
+               );
+
+               assert.equal(
+                       formatText( 'jquerymsg-italics-with-link' ),
+                       mw.messages.get( 'jquerymsg-italics-with-link' ),
+                       'Italics with link unchanged in text mode'
+               );
+
+               mw.messages.set( 'jquerymsg-italics-id-class', '<i id="foo" class="bar">Foo</i>' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-italics-id-class' ),
+                       mw.messages.get( 'jquerymsg-italics-id-class' ),
+                       'ID and class are allowed'
+               );
+
+               mw.messages.set( 'jquerymsg-italics-onclick', '<i onclick="alert(\'foo\')">Foo</i>' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-italics-onclick' ),
+                       '&lt;i onclick=&quot;alert(\'foo\')&quot;&gt;Foo&lt;/i&gt;',
+                       'element with onclick is escaped because it is not allowed'
+               );
+
+               mw.messages.set( 'jquerymsg-script-msg', '<script  >alert( "Who put this tag here?" );</script>' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-script-msg' ),
+                       '&lt;script  &gt;alert( &quot;Who put this tag here?&quot; );&lt;/script&gt;',
+                       'Tag outside whitelist escaped in parse mode'
+               );
+
+               assert.equal(
+                       formatText( 'jquerymsg-script-msg' ),
+                       mw.messages.get( 'jquerymsg-script-msg' ),
+                       'Tag outside whitelist unchanged in text mode'
+               );
+
+               mw.messages.set( 'jquerymsg-script-link-msg', '<script>[[Foo|bar]]</script>' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-script-link-msg' ),
+                       '&lt;script&gt;<a title="Foo" href="' + mw.html.escape( mw.util.getUrl( 'Foo' ) ) + '">bar</a>&lt;/script&gt;',
+                       'Script tag text is escaped because that element is not allowed, but link inside is still HTML'
+               );
+
+               mw.messages.set( 'jquerymsg-mismatched-html', '<i class="important">test</b>' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-mismatched-html' ),
+                       '&lt;i class=&quot;important&quot;&gt;test&lt;/b&gt;',
+                       'Mismatched HTML start and end tag treated as text'
+               );
+
+               // TODO (mattflaschen, 2013-03-18): It's not a security issue, but there's no real
+               // reason the htmlEmitter span needs to be here. It's an artifact of how emitting works.
+               mw.messages.set( 'jquerymsg-script-and-external-link', '<script>alert( "jquerymsg-script-and-external-link test" );</script> [http://example.com <i>Foo</i> bar]' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-script-and-external-link' ),
+                       '&lt;script&gt;alert( "jquerymsg-script-and-external-link test" );&lt;/script&gt; <a href="http://example.com"><span class="mediaWiki_htmlEmitter"><i>Foo</i> bar</span></a>',
+                       'HTML tags in external links not interfering with escaping of other tags'
+               );
+
+               mw.messages.set( 'jquerymsg-link-script', '[http://example.com <script>alert( "jquerymsg-link-script test" );</script>]' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-link-script' ),
+                       '<a href="http://example.com"><span class="mediaWiki_htmlEmitter">&lt;script&gt;alert( "jquerymsg-link-script test" );&lt;/script&gt;</span></a>',
+                       'Non-whitelisted HTML tag in external link anchor treated as text'
+               );
+
+               // Intentionally not using htmlEqual for the quote tests
+               mw.messages.set( 'jquerymsg-double-quotes-preserved', '<i id="double">Double</i>' );
+               assert.equal(
+                       formatParse( 'jquerymsg-double-quotes-preserved' ),
+                       mw.messages.get( 'jquerymsg-double-quotes-preserved' ),
+                       'Attributes with double quotes are preserved as such'
+               );
+
+               mw.messages.set( 'jquerymsg-single-quotes-normalized-to-double', '<i id=\'single\'>Single</i>' );
+               assert.equal(
+                       formatParse( 'jquerymsg-single-quotes-normalized-to-double' ),
+                       '<i id="single">Single</i>',
+                       'Attributes with single quotes are normalized to double'
+               );
+
+               mw.messages.set( 'jquerymsg-escaped-double-quotes-attribute', '<i style="font-family:&quot;Arial&quot;">Styled</i>' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-escaped-double-quotes-attribute' ),
+                       mw.messages.get( 'jquerymsg-escaped-double-quotes-attribute' ),
+                       'Escaped attributes are parsed correctly'
+               );
+
+               mw.messages.set( 'jquerymsg-escaped-single-quotes-attribute', '<i style=\'font-family:&#039;Arial&#039;\'>Styled</i>' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-escaped-single-quotes-attribute' ),
+                       mw.messages.get( 'jquerymsg-escaped-single-quotes-attribute' ),
+                       'Escaped attributes are parsed correctly'
+               );
+
+               mw.messages.set( 'jquerymsg-wikitext-contents-parsed', '<i>[http://example.com Example]</i>' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-wikitext-contents-parsed' ),
+                       '<i><a href="http://example.com">Example</a></i>',
+                       'Contents of valid tag are treated as wikitext, so external link is parsed'
+               );
+
+               mw.messages.set( 'jquerymsg-wikitext-contents-script', '<i><script>Script inside</script></i>' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-wikitext-contents-script' ),
+                       '<i><span class="mediaWiki_htmlEmitter">&lt;script&gt;Script inside&lt;/script&gt;</span></i>',
+                       'Contents of valid tag are treated as wikitext, so invalid HTML element is treated as text'
+               );
+
+               mw.messages.set( 'jquerymsg-unclosed-tag', 'Foo<tag>bar' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-unclosed-tag' ),
+                       'Foo&lt;tag&gt;bar',
+                       'Nonsupported unclosed tags are escaped'
+               );
+
+               mw.messages.set( 'jquerymsg-self-closing-tag', 'Foo<tag/>bar' );
+               assert.htmlEqual(
+                       formatParse( 'jquerymsg-self-closing-tag' ),
+                       'Foo&lt;tag/&gt;bar',
+                       'Self-closing tags don\'t cause a parse error'
+               );
        } );
-       QUnit.stop();
-       process( queue, QUnit.start );
-} );
-
-// HTML in wikitext
-QUnit.test( 'HTML', 26, function ( assert ) {
-       mw.messages.set( 'jquerymsg-italics-msg', '<i>Very</i> important' );
-
-       assertBothModes( assert, ['jquerymsg-italics-msg'], mw.messages.get( 'jquerymsg-italics-msg' ), 'Simple italics unchanged' );
-
-       mw.messages.set( 'jquerymsg-bold-msg', '<b>Strong</b> speaker' );
-       assertBothModes( assert, ['jquerymsg-bold-msg'], mw.messages.get( 'jquerymsg-bold-msg' ), 'Simple bold unchanged' );
-
-       mw.messages.set( 'jquerymsg-bold-italics-msg', 'It is <b><i>key</i></b>' );
-       assertBothModes( assert, ['jquerymsg-bold-italics-msg'], mw.messages.get( 'jquerymsg-bold-italics-msg' ), 'Bold and italics nesting order preserved' );
-
-       mw.messages.set( 'jquerymsg-italics-bold-msg', 'It is <i><b>vital</b></i>' );
-       assertBothModes( assert, ['jquerymsg-italics-bold-msg'], mw.messages.get( 'jquerymsg-italics-bold-msg' ), 'Italics and bold nesting order preserved' );
-
-       mw.messages.set( 'jquerymsg-italics-with-link', 'An <i>italicized [[link|wiki-link]]</i>' );
-
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-italics-with-link' ),
-               'An <i>italicized <a title="link" href="' + mw.html.escape( mw.util.getUrl( 'link' ) ) + '">wiki-link</i>',
-               'Italics with link inside in parse mode'
-       );
-
-       assert.equal(
-               formatText( 'jquerymsg-italics-with-link' ),
-               mw.messages.get( 'jquerymsg-italics-with-link' ),
-               'Italics with link unchanged in text mode'
-       );
-
-       mw.messages.set( 'jquerymsg-italics-id-class', '<i id="foo" class="bar">Foo</i>' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-italics-id-class' ),
-               mw.messages.get( 'jquerymsg-italics-id-class' ),
-               'ID and class are allowed'
-       );
-
-       mw.messages.set( 'jquerymsg-italics-onclick', '<i onclick="alert(\'foo\')">Foo</i>' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-italics-onclick' ),
-               '&lt;i onclick=&quot;alert(\'foo\')&quot;&gt;Foo&lt;/i&gt;',
-               'element with onclick is escaped because it is not allowed'
-       );
-
-       mw.messages.set( 'jquerymsg-script-msg', '<script  >alert( "Who put this tag here?" );</script>' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-script-msg' ),
-               '&lt;script  &gt;alert( &quot;Who put this tag here?&quot; );&lt;/script&gt;',
-               'Tag outside whitelist escaped in parse mode'
-       );
-
-       assert.equal(
-               formatText( 'jquerymsg-script-msg' ),
-               mw.messages.get( 'jquerymsg-script-msg' ),
-               'Tag outside whitelist unchanged in text mode'
-       );
-
-       mw.messages.set( 'jquerymsg-script-link-msg', '<script>[[Foo|bar]]</script>' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-script-link-msg' ),
-               '&lt;script&gt;<a title="Foo" href="' + mw.html.escape( mw.util.getUrl( 'Foo' ) ) + '">bar</a>&lt;/script&gt;',
-               'Script tag text is escaped because that element is not allowed, but link inside is still HTML'
-       );
-
-       mw.messages.set( 'jquerymsg-mismatched-html', '<i class="important">test</b>' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-mismatched-html' ),
-               '&lt;i class=&quot;important&quot;&gt;test&lt;/b&gt;',
-               'Mismatched HTML start and end tag treated as text'
-       );
-
-       // TODO (mattflaschen, 2013-03-18): It's not a security issue, but there's no real
-       // reason the htmlEmitter span needs to be here. It's an artifact of how emitting works.
-       mw.messages.set( 'jquerymsg-script-and-external-link', '<script>alert( "jquerymsg-script-and-external-link test" );</script> [http://example.com <i>Foo</i> bar]' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-script-and-external-link' ),
-               '&lt;script&gt;alert( "jquerymsg-script-and-external-link test" );&lt;/script&gt; <a href="http://example.com"><span class="mediaWiki_htmlEmitter"><i>Foo</i> bar</span></a>',
-               'HTML tags in external links not interfering with escaping of other tags'
-       );
-
-       mw.messages.set( 'jquerymsg-link-script', '[http://example.com <script>alert( "jquerymsg-link-script test" );</script>]' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-link-script' ),
-               '<a href="http://example.com"><span class="mediaWiki_htmlEmitter">&lt;script&gt;alert( "jquerymsg-link-script test" );&lt;/script&gt;</span></a>',
-               'Non-whitelisted HTML tag in external link anchor treated as text'
-       );
-
-       // Intentionally not using htmlEqual for the quote tests
-       mw.messages.set( 'jquerymsg-double-quotes-preserved', '<i id="double">Double</i>' );
-       assert.equal(
-               formatParse( 'jquerymsg-double-quotes-preserved' ),
-               mw.messages.get( 'jquerymsg-double-quotes-preserved' ),
-               'Attributes with double quotes are preserved as such'
-       );
-
-       mw.messages.set( 'jquerymsg-single-quotes-normalized-to-double', '<i id=\'single\'>Single</i>' );
-       assert.equal(
-               formatParse( 'jquerymsg-single-quotes-normalized-to-double' ),
-               '<i id="single">Single</i>',
-               'Attributes with single quotes are normalized to double'
-       );
-
-       mw.messages.set( 'jquerymsg-escaped-double-quotes-attribute', '<i style="font-family:&quot;Arial&quot;">Styled</i>' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-escaped-double-quotes-attribute' ),
-               mw.messages.get( 'jquerymsg-escaped-double-quotes-attribute' ),
-               'Escaped attributes are parsed correctly'
-       );
-
-       mw.messages.set( 'jquerymsg-escaped-single-quotes-attribute', '<i style=\'font-family:&#039;Arial&#039;\'>Styled</i>' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-escaped-single-quotes-attribute' ),
-               mw.messages.get( 'jquerymsg-escaped-single-quotes-attribute' ),
-               'Escaped attributes are parsed correctly'
-       );
-
-       mw.messages.set( 'jquerymsg-wikitext-contents-parsed', '<i>[http://example.com Example]</i>' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-wikitext-contents-parsed' ),
-               '<i><a href="http://example.com">Example</a></i>',
-               'Contents of valid tag are treated as wikitext, so external link is parsed'
-       );
-
-       mw.messages.set( 'jquerymsg-wikitext-contents-script', '<i><script>Script inside</script></i>' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-wikitext-contents-script' ),
-               '<i><span class="mediaWiki_htmlEmitter">&lt;script&gt;Script inside&lt;/script&gt;</span></i>',
-               'Contents of valid tag are treated as wikitext, so invalid HTML element is treated as text'
-       );
-
-       mw.messages.set( 'jquerymsg-unclosed-tag', 'Foo<tag>bar' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-unclosed-tag' ),
-               'Foo&lt;tag&gt;bar',
-               'Nonsupported unclosed tags are escaped'
-       );
-
-       mw.messages.set( 'jquerymsg-self-closing-tag', 'Foo<tag/>bar' );
-       assert.htmlEqual(
-               formatParse( 'jquerymsg-self-closing-tag' ),
-               'Foo&lt;tag/&gt;bar',
-               'Self-closing tags don\'t cause a parse error'
-       );
-} );
 
        QUnit.test( 'Behavior in case of invalid wikitext', 3, function ( assert ) {
                mw.messages.set( 'invalid-wikitext', '<b>{{FAIL}}</b>' );
index a068846..670914e 100644 (file)
@@ -8,6 +8,12 @@
                },
                teardown: function () {
                        mw.language.data.values = this.liveLangData;
+               },
+               messages: {
+                       // mw.language.listToText test
+                       'and': ' and',
+                       'comma-separator': ', ',
+                       'word-separator': ' '
                }
        } ) );
 
        } );
 
        QUnit.test( 'mw.language.commafy test', 9, function ( assert ) {
+               mw.language.setData( 'en', 'digitGroupingPattern', null );
+               mw.language.setData( 'en', 'digitTransformTable', null );
+               mw.language.setData( 'en', 'separatorTransformTable', null );
+
+               mw.config.set( 'wgUserLanguage', 'en' );
                // Number grouping patterns are as per http://cldr.unicode.org/translation/number-patterns
                assert.equal( mw.language.commafy( 1234.567, '###0.#####' ), '1234.567', 'Pattern with no digit grouping separator defined' );
-               assert.equal( mw.language.commafy( 123456789.567, '###0.#####' ), '123456789.567', 'Pattern with no digit grouping seperator defined, bigger decimal part' );
+               assert.equal( mw.language.commafy( 123456789.567, '###0.#####' ), '123456789.567', 'Pattern with no digit grouping separator defined, bigger decimal part' );
                assert.equal( mw.language.commafy( 0.567, '###0.#####' ), '0.567', 'Decimal part 0' );
                assert.equal( mw.language.commafy( '.567', '###0.#####' ), '0.567', 'Decimal part missing. replace with zero' );
                assert.equal( mw.language.commafy( 1234, '##,#0.#####' ), '12,34', 'Pattern with no fractional part' );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js
new file mode 100644 (file)
index 0000000..61bab03
--- /dev/null
@@ -0,0 +1,28 @@
+( function ( mw ) {
+       var TEST_MODEL = 'test-content-model';
+
+       QUnit.module( 'mediawiki.messagePoster', QUnit.newMwEnvironment( {
+               teardown: function () {
+                       mw.messagePoster.factory.unregister( TEST_MODEL );
+               }
+       } ) );
+
+       QUnit.test( 'register', 2, function ( assert ) {
+               var testMessagePosterConstructor = function () {};
+
+               mw.messagePoster.factory.register( TEST_MODEL, testMessagePosterConstructor );
+               assert.strictEqual(
+                       mw.messagePoster.factory.contentModelToClass[TEST_MODEL],
+                       testMessagePosterConstructor,
+                       'Constructor is registered'
+               );
+
+               assert.throws(
+                       function () {
+                               mw.messagePoster.factory.register( TEST_MODEL, testMessagePosterConstructor );
+                       },
+                       new RegExp( 'The content model \'' + TEST_MODEL + '\' is already registered.' ),
+                       'Throws exception is same model is registered a second time'
+               );
+       } );
+}( mediaWiki ) );
index ee33ade..cf36ea8 100644 (file)
 
                // Convenience method for asserting the same result for multiple formats
                function assertMultipleFormats( messageArguments, formats, expectedResult, assertMessage ) {
-                       var len = formats.length, format, i;
+                       var format, i,
+                               len = formats.length;
+
                        for ( i = 0; i < len; i++ ) {
                                format = formats[i];
                                assert.equal( mw.message.apply( null, messageArguments )[format](), expectedResult, assertMessage + ' when format is ' + format );
                                return;
                        }
                        // Otherwise, keep polling
-                       setTimeout( styleTestLoop, 150 );
+                       setTimeout( styleTestLoop );
                }
 
                // Start the loop
                } );
        } );
 
-       QUnit.test( 'mw.loader erroneous indirect dependency', 3, function ( assert ) {
+       QUnit.test( 'mw.loader erroneous indirect dependency', 4, function ( assert ) {
+               // don't emit an error event
+               this.sandbox.stub( mw, 'track' );
+
                mw.loader.register( [
                        ['test.module1', '0'],
                        ['test.module2', '0', ['test.module1']],
                assert.strictEqual( mw.loader.getState( 'test.module1' ), 'error', 'Expected "error" state for test.module1' );
                assert.strictEqual( mw.loader.getState( 'test.module2' ), 'error', 'Expected "error" state for test.module2' );
                assert.strictEqual( mw.loader.getState( 'test.module3' ), 'error', 'Expected "error" state for test.module3' );
+
+               assert.strictEqual( mw.track.callCount, 1 );
        } );
 
        QUnit.test( 'mw.loader out-of-order implementation', 9, function ( assert ) {
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js
new file mode 100644 (file)
index 0000000..cdb2624
--- /dev/null
@@ -0,0 +1,42 @@
+( function ( mw ) {
+       QUnit.module( 'mediawiki.track' );
+
+       QUnit.test( 'track', 1, function ( assert ) {
+               var sequence = [];
+               mw.trackSubscribe( 'simple', function ( topic, data ) {
+                       sequence.push( [ topic, data ] );
+               } );
+               mw.track( 'simple', { key: 1 } );
+               mw.track( 'simple', { key: 2 } );
+
+               assert.deepEqual( sequence, [
+                       [ 'simple', { key: 1 } ],
+                       [ 'simple', { key: 2 } ]
+               ], 'Events after subscribing' );
+       } );
+
+       QUnit.test( 'trackSubscribe', 4, function ( assert ) {
+               var now,
+                       sequence = [];
+               mw.track( 'before', { key: 1 } );
+               mw.track( 'before', { key: 2 } );
+               mw.trackSubscribe( 'before', function ( topic, data ) {
+                       sequence.push( [ topic, data ] );
+               } );
+               mw.track( 'before', { key: 3 } );
+
+               assert.deepEqual( sequence, [
+                       [ 'before', { key: 1 } ],
+                       [ 'before', { key: 2 } ],
+                       [ 'before', { key: 3 } ]
+               ], 'Replay events from before subscribing' );
+
+               now = mw.now();
+               mw.track( 'context', { key: 0 } );
+               mw.trackSubscribe( 'context', function ( topic, data ) {
+                       assert.strictEqual( this.topic, topic, 'thisValue has topic' );
+                       assert.strictEqual( this.data, data, 'thisValue has data' );
+                       assert.assertTrue( this.timeStamp >= now, 'thisValue has sane timestamp' );
+               } );
+       } );
+}( mediaWiki ) );
index fe22b7a..04e002d 100644 (file)
@@ -1,7 +1,17 @@
-( function ( mw ) {
+( function ( mw, $ ) {
        QUnit.module( 'mediawiki.user', QUnit.newMwEnvironment( {
                setup: function () {
                        this.server = this.sandbox.useFakeServer();
+                       this.crypto = window.crypto;
+                       this.msCrypto = window.msCrypto;
+               },
+               teardown: function () {
+                       if ( this.crypto ) {
+                               window.crypto = this.crypto;
+                       }
+                       if ( this.msCrypto ) {
+                               window.msCrypto = this.msCrypto;
+                       }
                }
        } ) );
 
                this.server.respond();
        } );
 
-       QUnit.test( 'session numbers', 4, function ( assert ) {
-               /*global $:false */
-               var sessionId = mw.user.generateRandomSessionId(),
-               cryptoObj = window.crypto;
-
-               assert.equal( typeof sessionId, 'string', 'generateRandomSessionId should return a string' );
-               assert.equal( $.trim(sessionId), sessionId, 'generateRandomSessionId should not contain whitespace' );
-               // pretend crypto API is not there and do same test, make sure code runs
-               // through  Math.random loop
-               window.crypto = undefined;
-               sessionId =  mw.user.generateRandomSessionId();
-               assert.equal( typeof sessionId, 'string', 'generateRandomSessionId should return a string' );
-               assert.equal( sessionId.trim(), sessionId, 'generateRandomSessionId should not be empty' );
-               //restoring crypto object
-               window.crypto = cryptoObj;
+       QUnit.test( 'generateRandomSessionId', 4, function ( assert ) {
+               var result, result2;
+
+               result = mw.user.generateRandomSessionId();
+               assert.equal( typeof result, 'string', 'type' );
+               assert.equal( $.trim( result ), result, 'no whitespace at beginning or end' );
+               assert.equal( result.length, 16, 'size' );
+
+               result2 = mw.user.generateRandomSessionId();
+               assert.notEqual( result, result2, 'different when called multiple times' );
+
+       } );
+
+       QUnit.test( 'generateRandomSessionId (fallback)', 4, function ( assert ) {
+               var result, result2;
+
+               // Pretend crypto API is not there to test the Math.random fallback
+               if ( window.crypto ) {
+                       window.crypto = undefined;
+               }
+               if ( window.msCrypto ) {
+                       window.msCrypto = undefined;
+               }
+
+               result = mw.user.generateRandomSessionId();
+               assert.equal( typeof result, 'string', 'type' );
+               assert.equal( $.trim( result ), result, 'no whitespace at beginning or end' );
+               assert.equal( result.length, 16, 'size' );
+
+               result2 = mw.user.generateRandomSessionId();
+               assert.notEqual( result, result2, 'different when called multiple times' );
 
        } );
-}( mediaWiki ) );
+}( mediaWiki, jQuery ) );
index 3f19a64..0b42af4 100644 (file)
@@ -1,4 +1,79 @@
 ( function ( mw, $ ) {
+       var
+               // Based on IPTest.php > testisIPv4
+               IPV4_CASES = [
+                       [false, false, 'Boolean false is not an IP'],
+                       [false, true, 'Boolean true is not an IP'],
+                       [false, '', 'Empty string is not an IP'],
+                       [false, 'abc', '"abc" is not an IP'],
+                       [false, ':', 'Colon is not an IP'],
+                       [false, '124.24.52', 'IPv4 not enough quads'],
+                       [false, '24.324.52.13', 'IPv4 out of range'],
+                       [false, '.24.52.13', 'IPv4 starts with period'],
+
+                       [true, '124.24.52.13', '124.24.52.134 is a valid IP'],
+                       [true, '1.24.52.13', '1.24.52.13 is a valid IP'],
+                       [false, '74.24.52.13/20', 'IPv4 ranges are not recognized as valid IPs']
+               ],
+
+               // Based on IPTest.php > testisIPv6
+               IPV6_CASES = [
+                       [false, ':fc:100::', 'IPv6 starting with lone ":"'],
+                       [false, 'fc:100:::', 'IPv6 ending with a ":::"'],
+                       [false, 'fc:300', 'IPv6 with only 2 words'],
+                       [false, 'fc:100:300', 'IPv6 with only 3 words'],
+
+                       [false, 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"'],
+                       [false, 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"'],
+
+                       [false, ':::'],
+                       [false, '::0:', 'IPv6 ending in a lone ":"'],
+
+                       [true,  '::', 'IPv6 zero address'],
+
+                       [false, '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words'],
+                       [false, '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words'],
+
+                       [false, ':fc::100', 'IPv6 starting with lone ":"'],
+                       [false, 'fc::100:', 'IPv6 ending with lone ":"'],
+                       [false, 'fc:::100', 'IPv6 with ":::" in the middle'],
+
+                       [true,  'fc::100', 'IPv6 with "::" and 2 words'],
+                       [true,  'fc::100:a', 'IPv6 with "::" and 3 words'],
+                       [true,  'fc::100:a:d', 'IPv6 with "::" and 4 words'],
+                       [true,  'fc::100:a:d:1', 'IPv6 with "::" and 5 words'],
+                       [true,  'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words'],
+                       [true,  'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words'],
+                       [true,  '2001::df', 'IPv6 with "::" and 2 words'],
+                       [true,  '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words'],
+                       [true,  '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words'],
+
+                       [false, 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words'],
+                       [false, 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words']
+               ];
+
+       Array.prototype.push.apply( IPV6_CASES,
+               $.map( [
+                       'fc:100::',
+                       'fc:100:a::',
+                       'fc:100:a:d::',
+                       'fc:100:a:d:1::',
+                       'fc:100:a:d:1:e::',
+                       'fc:100:a:d:1:e:ac::',
+                       '::0',
+                       '::fc',
+                       '::fc:100',
+                       '::fc:100:a',
+                       '::fc:100:a:d',
+                       '::fc:100:a:d:1',
+                       '::fc:100:a:d:1:e',
+                       '::fc:100:a:d:1:e:ac',
+                       'fc:100:a:d:1:e:ac:0'
+               ], function ( el ) {
+                       return [[ true, el, el + ' is a valid IP' ]];
+               } )
+       );
+
        QUnit.module( 'mediawiki.util', QUnit.newMwEnvironment( {
                setup: function () {
                        $.fn.updateTooltipAccessKeys.setTestMode( true );
        } );
 
        QUnit.test( 'isIPv6Address', 40, function ( assert ) {
-               // Shortcuts
-               function assertFalseIPv6( addy, summary ) {
-                       return assert.strictEqual( mw.util.isIPv6Address( addy ), false, summary );
-               }
-
-               function assertTrueIPv6( addy, summary ) {
-                       return assert.strictEqual( mw.util.isIPv6Address( addy ), true, summary );
-               }
-
-               // Based on IPTest.php > testisIPv6
-               assertFalseIPv6( ':fc:100::', 'IPv6 starting with lone ":"' );
-               assertFalseIPv6( 'fc:100:::', 'IPv6 ending with a ":::"' );
-               assertFalseIPv6( 'fc:300', 'IPv6 with only 2 words' );
-               assertFalseIPv6( 'fc:100:300', 'IPv6 with only 3 words' );
-
-               $.each(
-                       ['fc:100::',
-                               'fc:100:a::',
-                               'fc:100:a:d::',
-                               'fc:100:a:d:1::',
-                               'fc:100:a:d:1:e::',
-                               'fc:100:a:d:1:e:ac::'], function ( i, addy ) {
-                               assertTrueIPv6( addy, addy + ' is a valid IP' );
-                       } );
-
-               assertFalseIPv6( 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"' );
-               assertFalseIPv6( 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"' );
-
-               assertFalseIPv6( ':::' );
-               assertFalseIPv6( '::0:', 'IPv6 ending in a lone ":"' );
-
-               assertTrueIPv6( '::', 'IPv6 zero address' );
-               $.each(
-                       ['::0',
-                               '::fc',
-                               '::fc:100',
-                               '::fc:100:a',
-                               '::fc:100:a:d',
-                               '::fc:100:a:d:1',
-                               '::fc:100:a:d:1:e',
-                               '::fc:100:a:d:1:e:ac',
-
-                               'fc:100:a:d:1:e:ac:0'], function ( i, addy ) {
-                               assertTrueIPv6( addy, addy + ' is a valid IP' );
-                       } );
-
-               assertFalseIPv6( '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' );
-               assertFalseIPv6( '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' );
-
-               assertFalseIPv6( ':fc::100', 'IPv6 starting with lone ":"' );
-               assertFalseIPv6( 'fc::100:', 'IPv6 ending with lone ":"' );
-               assertFalseIPv6( 'fc:::100', 'IPv6 with ":::" in the middle' );
-
-               assertTrueIPv6( 'fc::100', 'IPv6 with "::" and 2 words' );
-               assertTrueIPv6( 'fc::100:a', 'IPv6 with "::" and 3 words' );
-               assertTrueIPv6( 'fc::100:a:d', 'IPv6 with "::" and 4 words' );
-               assertTrueIPv6( 'fc::100:a:d:1', 'IPv6 with "::" and 5 words' );
-               assertTrueIPv6( 'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words' );
-               assertTrueIPv6( 'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words' );
-               assertTrueIPv6( '2001::df', 'IPv6 with "::" and 2 words' );
-               assertTrueIPv6( '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words' );
-               assertTrueIPv6( '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words' );
-
-               assertFalseIPv6( 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' );
-               assertFalseIPv6( 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' );
+               $.each( IPV6_CASES, function ( i, ipCase ) {
+                       assert.strictEqual( mw.util.isIPv6Address( ipCase[1] ), ipCase[0], ipCase[2] );
+               } );
        } );
 
        QUnit.test( 'isIPv4Address', 11, function ( assert ) {
-               // Shortcuts
-               function assertFalseIPv4( addy, summary ) {
-                       assert.strictEqual( mw.util.isIPv4Address( addy ), false, summary );
-               }
+               $.each( IPV4_CASES, function ( i, ipCase ) {
+                       assert.strictEqual( mw.util.isIPv4Address( ipCase[1] ), ipCase[0], ipCase[2] );
+               } );
+       } );
 
-               function assertTrueIPv4( addy, summary ) {
-                       assert.strictEqual( mw.util.isIPv4Address( addy ), true, summary );
-               }
+       QUnit.test( 'isIPAddress', 51, function ( assert ) {
+               $.each( IPV4_CASES, function ( i, ipCase ) {
+                       assert.strictEqual( mw.util.isIPv4Address( ipCase[1] ), ipCase[0], ipCase[2] );
+               } );
 
-               // Based on IPTest.php > testisIPv4
-               assertFalseIPv4( false, 'Boolean false is not an IP' );
-               assertFalseIPv4( true, 'Boolean true is not an IP' );
-               assertFalseIPv4( '', 'Empty string is not an IP' );
-               assertFalseIPv4( 'abc', '"abc" is not an IP' );
-               assertFalseIPv4( ':', 'Colon is not an IP' );
-               assertFalseIPv4( '124.24.52', 'IPv4 not enough quads' );
-               assertFalseIPv4( '24.324.52.13', 'IPv4 out of range' );
-               assertFalseIPv4( '.24.52.13', 'IPv4 starts with period' );
-
-               assertTrueIPv4( '124.24.52.13', '124.24.52.134 is a valid IP' );
-               assertTrueIPv4( '1.24.52.13', '1.24.52.13 is a valid IP' );
-               assertFalseIPv4( '74.24.52.13/20', 'IPv4 ranges are not recogzized as valid IPs' );
+               $.each( IPV6_CASES, function ( i, ipCase ) {
+                       assert.strictEqual( mw.util.isIPv6Address( ipCase[1] ), ipCase[0], ipCase[2] );
+               } );
        } );
 }( mediaWiki, jQuery ) );
index 70cd1e6..2ea3f07 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -305,7 +305,10 @@ function wfStreamThumb( array $params ) {
        // Stream the file if it exists already...
        $thumbPath = $img->getThumbPath( $thumbName );
        if ( $img->getRepo()->fileExists( $thumbPath ) ) {
-               $img->getRepo()->streamFile( $thumbPath, $headers );
+               $success = $img->getRepo()->streamFile( $thumbPath, $headers );
+               if ( !$success ) {
+                       wfThumbError( 500, 'Could not stream the file' );
+               }
                return;
        }
 
@@ -320,6 +323,7 @@ function wfStreamThumb( array $params ) {
 
        // Actually generate a new thumbnail
        list( $thumb, $errorMsg ) = wfGenerateThumbnail( $img, $params, $thumbName, $thumbPath );
+       /** @var MediaTransformOutput|bool $thumb */
 
        // Check for thumbnail generation errors...
        $msg = wfMessage( 'thumbnail_error' );
@@ -340,7 +344,10 @@ function wfStreamThumb( array $params ) {
                wfThumbError( $errorCode, $errorMsg );
        } else {
                // Stream the file if there were no errors
-               $thumb->streamFile( $headers );
+               $success = $thumb->streamFile( $headers );
+               if ( !$success ) {
+                       wfThumbError( 500, 'Could not stream the file' );
+               }
        }
 }